peachsim 0.1.2208 → 0.1.2209

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 (121) hide show
  1. package/dist-lib/agent-daemon-client.cjs +1 -1
  2. package/dist-lib/agent-events.cjs +1 -1
  3. package/dist-lib/attached-projects.cjs +1 -1
  4. package/dist-lib/auth/shared-session.cjs +1 -1
  5. package/dist-lib/backend-origin.cjs +1 -1
  6. package/dist-lib/beta.cjs +1 -1
  7. package/dist-lib/beta.mjs +1 -1
  8. package/dist-lib/bridge-constants.cjs +1 -1
  9. package/dist-lib/bridge-contract-input.cjs +1 -1
  10. package/dist-lib/bridge-contract-input.mjs +1 -1
  11. package/dist-lib/bridge-contract.cjs +1 -1
  12. package/dist-lib/bridge-contract.mjs +1 -1
  13. package/dist-lib/bundle-channel.cjs +448 -22
  14. package/dist-lib/capture-contract.cjs +1 -1
  15. package/dist-lib/capture-contract.mjs +1 -1
  16. package/dist-lib/cloud-contract.cjs +1 -1
  17. package/dist-lib/cloud-contract.mjs +1 -1
  18. package/dist-lib/cloud-test-args.cjs +1 -1
  19. package/dist-lib/cloud-test-args.mjs +1 -1
  20. package/dist-lib/cloud.cjs +1 -1
  21. package/dist-lib/cloud.mjs +1 -1
  22. package/dist-lib/config.cjs +1 -1
  23. package/dist-lib/config.mjs +1 -1
  24. package/dist-lib/detox/index.cjs +2 -2
  25. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  26. package/dist-lib/expo-swift-bundle.cjs +436 -16
  27. package/dist-lib/expo-swift-metadata.cjs +1 -1
  28. package/dist-lib/expo-swift-metadata.mjs +1 -1
  29. package/dist-lib/home-paths.cjs +1 -1
  30. package/dist-lib/host/bridge-host.cjs +448 -22
  31. package/dist-lib/host/fetch-proxy-handler.cjs +4 -4
  32. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  33. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  34. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  35. package/dist-lib/host/websocket-proxy.cjs +1 -1
  36. package/dist-lib/index.cjs +4 -4
  37. package/dist-lib/jump-to-source-babel.cjs +1 -1
  38. package/dist-lib/jump-to-source-native.cjs +1 -1
  39. package/dist-lib/kotlin-host.cjs +7 -1
  40. package/dist-lib/menu.cjs +1 -1
  41. package/dist-lib/menu.mjs +1 -1
  42. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  43. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  44. package/dist-lib/metro-production-bundle.cjs +1 -1
  45. package/dist-lib/metro-production-bundle.mjs +1 -1
  46. package/dist-lib/metro.cjs +4 -4
  47. package/dist-lib/native-app-identity-project.cjs +2 -2
  48. package/dist-lib/native-app-identity-project.mjs +2 -2
  49. package/dist-lib/native-app-identity.cjs +1 -1
  50. package/dist-lib/native-app-identity.mjs +1 -1
  51. package/dist-lib/native-firebase-metadata.cjs +1 -1
  52. package/dist-lib/native-firebase-metadata.mjs +1 -1
  53. package/dist-lib/pdfium-raster.cjs +1 -1
  54. package/dist-lib/pdfium-raster.mjs +1 -1
  55. package/dist-lib/plist.cjs +1 -1
  56. package/dist-lib/plist.mjs +1 -1
  57. package/dist-lib/profiles.cjs +1 -1
  58. package/dist-lib/public-brand.cjs +1 -1
  59. package/dist-lib/public-origins-lib-esm.json +24 -24
  60. package/dist-lib/public-origins-lib.json +59 -53
  61. package/dist-lib/react-native-host-modules.cjs +1 -1
  62. package/dist-lib/react-native-host-modules.mjs +1 -1
  63. package/dist-lib/reap-browser.cjs +1 -1
  64. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  65. package/dist-lib/sdk.cjs +1 -1
  66. package/dist-lib/sdk.mjs +1 -1
  67. package/dist-lib/skills.cjs +5482 -381
  68. package/dist-lib/swift-compile.cjs +98 -6
  69. package/dist-lib/swift-compile.mjs +98 -6
  70. package/dist-lib/swift-package.cjs +1 -1
  71. package/dist-lib/swift-package.mjs +1 -1
  72. package/dist-lib/swift-submit.cjs +1 -1
  73. package/dist-lib/swift-submit.mjs +1 -1
  74. package/dist-lib/swift-toolchain.cjs +1 -1
  75. package/dist-lib/swift.cjs +1 -1
  76. package/dist-lib/vite-swift.cjs +351 -13
  77. package/dist-lib/vite.cjs +4 -4
  78. package/dist-lib/worklet-executable.cjs +1 -1
  79. package/dist-lib/worklet-executable.mjs +1 -1
  80. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +2 -1
  81. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +1 -0
  82. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +6 -0
  83. package/dist-types/packages/peach-engine/src/engine/node.d.ts +1 -0
  84. package/dist-types/packages/peach-engine/src/engine/types.d.ts +1 -0
  85. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +8 -0
  86. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +3 -0
  87. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +14 -0
  88. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/render-tree.d.ts +18 -0
  89. package/kotlin/sdk.tar.gz +0 -0
  90. package/package.json +1 -1
  91. package/runtime-companion.json +1 -1
  92. package/sdk/ios/System/Library/Frameworks/Foundation.framework/Headers/NSCompoundPredicate.h +1 -1
  93. package/sdk/ios/System/Library/Frameworks/Foundation.framework/Headers/NSExpression.h +1 -1
  94. package/sdk/ios/System/Library/Frameworks/Foundation.framework/Headers/NSISO8601DateFormatter.h +1 -1
  95. package/sdk/ios/System/Library/Frameworks/Foundation.framework/Headers/NSMeasurementFormatter.h +1 -1
  96. package/sdk/ios/System/Library/Frameworks/Intents.framework/Headers/INObjectCollection.h +27 -0
  97. package/sdk/ios/System/Library/Frameworks/Intents.framework/Headers/INObjectSection.h +24 -0
  98. package/sdk/ios/System/Library/Frameworks/Intents.framework/Headers/Intents.h +9 -0
  99. package/sdk/ios/System/Library/Frameworks/Intents.framework/Modules/module.modulemap +5 -0
  100. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UIFeedbackGenerator.h +1 -1
  101. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UIImpactFeedbackGenerator.h +1 -1
  102. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UINibLoading.h +1 -1
  103. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UINotificationFeedbackGenerator.h +1 -1
  104. package/sdk/ios/System/Library/Frameworks/UIKit.framework/Headers/UISelectionFeedbackGenerator.h +1 -1
  105. package/sdk/ios/usr/include/ObjectiveC.apinotes +7 -0
  106. package/src/android-theme.ts +136 -2
  107. package/src/expo-swift-host.ts +90 -1
  108. package/src/generated/android-framework-text.json +4566 -0
  109. package/src/generated/android-framework-themes.json +11 -0
  110. package/src/kotlin-app.ts +24 -4
  111. package/src/kotlin-host.ts +9 -0
  112. package/src/nitro-adapter.lock.json +246 -246
  113. package/src/nitro-superset.lock.json +4 -4
  114. package/src/swift-compile.ts +120 -2
  115. package/src/swift-distribution.lock.json +8 -8
  116. package/src/swift-objc-standin.ts +9 -2
  117. package/src/swift-shared-sdk.ts +2 -1
  118. package/src/swift-standin-builtin-behavior.ts +248 -0
  119. package/src/swift-standin-emit.ts +2 -0
  120. package/src/swift-standins.ts +17 -5
  121. package/src/turbo-runtime.lock.json +17 -17
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2208 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2209 | (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;
@@ -7925,9 +7925,14 @@ function objcView(surface, toolchainBin, stdlib, cacheDir5, work, original, vend
7925
7925
  recursive: true
7926
7926
  });
7927
7927
  const modulemap = import_node_fs7.default.readFileSync(surface.modulemap, "utf8");
7928
+ const forwardEnum = [...originals.values()].some(
7929
+ (text5) => /typedef\s+NS_(?:CLOSED_)?(?:ENUM|OPTIONS)\s*\(\s*\w+\s*,\s*\w+\s*\)\s*;/.test(
7930
+ text5
7931
+ )
7932
+ );
7928
7933
  import_node_fs7.default.writeFileSync(
7929
7934
  import_node_path7.default.join(frameworks, `${surface.module}.framework`, "Modules", "module.modulemap"),
7930
- surface.interface ? modulemap.replace(
7935
+ surface.interface && !forwardEnum ? modulemap.replace(
7931
7936
  new RegExp(`\\n\\s*module\\s+${surface.module}\\.Swift\\s*\\{[^}]*\\}`),
7932
7937
  ""
7933
7938
  ) : modulemap
@@ -9024,7 +9029,7 @@ function swiftSharedSdkViewOptions(moduleRoot, distribution, toolchainBin, sdk)
9024
9029
  const overlay = import_node_path8.default.join(swiftSharedSdkRoot(moduleRoot, distribution), "wasm/include");
9025
9030
  const overlayFiles = (0, import_node_fs8.readdirSync)(overlay, { recursive: true, withFileTypes: true }).filter((entry) => entry.isFile()).map((entry) => import_node_path8.default.join(entry.parentPath, entry.name)).sort();
9026
9031
  const key2 = JSON.stringify([
9027
- "v22",
9032
+ "v23",
9028
9033
  toolchainBin,
9029
9034
  sdk,
9030
9035
  frameworks,
@@ -9081,6 +9086,7 @@ function swiftSharedSdkViewOptions(moduleRoot, distribution, toolchainBin, sdk)
9081
9086
  ...[
9082
9087
  "MacTypes.h",
9083
9088
  "objc/NSObject.h",
9089
+ "ObjectiveC.apinotes",
9084
9090
  "net/if.h",
9085
9091
  "notify.h",
9086
9092
  "notify.modulemap",
@@ -17250,6 +17256,88 @@ function swiftSystemLibraryExclusions(files2, targets, distributionModules) {
17250
17256
  )
17251
17257
  );
17252
17258
  }
17259
+ var DISTRIBUTION_CLANG_MODULES = [
17260
+ {
17261
+ name: "EXStructuredHeaders",
17262
+ header: "EXStructuredHeaders/EXStructuredHeadersParser.h",
17263
+ source: `// Copyright \xA9 2021 650 Industries. All rights reserved.
17264
+
17265
+ #import <Foundation/Foundation.h>
17266
+
17267
+ NS_ASSUME_NONNULL_BEGIN
17268
+
17269
+ typedef NS_ENUM(NSInteger, EXStructuredHeadersParserFieldType) {
17270
+ EXStructuredHeadersParserFieldTypeDictionary,
17271
+ EXStructuredHeadersParserFieldTypeList,
17272
+ EXStructuredHeadersParserFieldTypeItem
17273
+ };
17274
+
17275
+ @interface EXStructuredHeadersParser : NSObject
17276
+
17277
+ - (instancetype)initWithRawInput:(NSString *)raw
17278
+ fieldType:(EXStructuredHeadersParserFieldType)fieldType;
17279
+
17280
+ - (instancetype)initWithRawInput:(NSString *)raw
17281
+ fieldType:(EXStructuredHeadersParserFieldType)fieldType
17282
+ ignoringParameters:(BOOL)shouldIgnoreParameters;
17283
+
17284
+ - (nullable id)parseStructuredFieldsWithError:(NSError ** _Nullable)error;
17285
+
17286
+ @end
17287
+
17288
+ NS_ASSUME_NONNULL_END
17289
+ `
17290
+ },
17291
+ {
17292
+ name: "EXUpdatesBSPatch",
17293
+ header: "EXUpdatesBSPatch.h",
17294
+ source: `// Copyright 2015-present 650 Industries. All rights reserved.
17295
+
17296
+ #pragma once
17297
+
17298
+ #import <Foundation/Foundation.h>
17299
+
17300
+ int EXUpdatesApplyBSDiffPatch(const char * _Nonnull oldFilePath,
17301
+ const char * _Nonnull newFilePath,
17302
+ const char * _Nonnull patchFilePath);
17303
+ `
17304
+ }
17305
+ ];
17306
+ function distributionClangModulePresent(modules, name3) {
17307
+ return (0, import_node_fs27.existsSync)(import_node_path27.default.join(modules, `${name3}.swiftmodule`)) || (0, import_node_fs27.existsSync)(import_node_path27.default.join(modules, name3, "module.modulemap"));
17308
+ }
17309
+ function distributionClangModuleMap(root, modules) {
17310
+ const missing = DISTRIBUTION_CLANG_MODULES.filter(
17311
+ (mod) => !distributionClangModulePresent(modules, mod.name)
17312
+ );
17313
+ if (missing.length === 0) return null;
17314
+ const key2 = (0, import_node_crypto13.createHash)("sha256").update(modules).update(missing.map((mod) => `${mod.name}\0${mod.source}`).join("\0")).digest("hex").slice(0, 16);
17315
+ const directory = import_node_path27.default.join(root, `.peach-clang-modules-${key2}`);
17316
+ const mapPath = import_node_path27.default.join(directory, "module.modulemap");
17317
+ if (!(0, import_node_fs27.existsSync)(mapPath)) {
17318
+ (0, import_node_fs27.mkdirSync)(directory, { recursive: true });
17319
+ const parts = [];
17320
+ for (const mod of missing) {
17321
+ const destination = import_node_path27.default.join(directory, mod.header);
17322
+ (0, import_node_fs27.mkdirSync)(import_node_path27.default.dirname(destination), { recursive: true });
17323
+ (0, import_node_fs27.writeFileSync)(destination, mod.source);
17324
+ parts.push(
17325
+ `module ${mod.name} {
17326
+ requires objc
17327
+ header "${mod.header}"
17328
+ export *
17329
+ }
17330
+ `
17331
+ );
17332
+ }
17333
+ (0, import_node_fs27.writeFileSync)(mapPath, parts.join("\n"));
17334
+ }
17335
+ return mapPath;
17336
+ }
17337
+ function distributionClangModuleOptions(root, modules) {
17338
+ const map = distributionClangModuleMap(root, modules);
17339
+ return map === null ? [] : ["-Xcc", `-fmodule-map-file=${map}`];
17340
+ }
17253
17341
  function providedModulesPath(root, modules, excluded) {
17254
17342
  if (!excluded || excluded.size === 0) return modules;
17255
17343
  const entries = (0, import_node_fs27.readdirSync)(modules).filter((entry) => !excluded.has(entry.replace(/\..*$/, ""))).sort();
@@ -17343,7 +17431,7 @@ var darwinRecordsRegion = (quoted) => quoted.length ? ["-Wl,--start-lib", ...quo
17343
17431
  var REACTOR_FLAG = '"-Xclang-linker", "-mexec-model=reactor",\n';
17344
17432
  var MULTI_MANIFEST_VERSION = 68;
17345
17433
  var SWIFT_HEADER_PRODUCTS_TARGET = "PeachHeaderProducts";
17346
- var compilerSourceDigest = true ? "be03c2edac4dfeffbfd874f5ea7a11c25067194164940d7e7c5fa34ead584e7a" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17434
+ var compilerSourceDigest = true ? "f113c3b74986e3d582dde643cb5771f750e5c836703fb20a79a1d67a53884748" : swiftCompilerSourceDigest(__sootsim_import_meta_dirname);
17347
17435
  function swiftArtifactHash(input, release, moduleRoot) {
17348
17436
  const hash = (0, import_node_crypto13.createHash)("sha256");
17349
17437
  hash.update(`swift-compile
@@ -17617,7 +17705,7 @@ function emitSwiftPackageManifest(args) {
17617
17705
  import_node_path27.default.join(moduleRoot, "modules"),
17618
17706
  args.moduleExcludes
17619
17707
  )
17620
- )}` : prebuilt ? `, "-Isystem", ${JSON.stringify(providedModulesPath(args.root, prebuilt.modules, args.moduleExcludes))}${prebuilt.moduleMaps.map((map) => `, "-Xcc", ${JSON.stringify(`-fmodule-map-file=${map}`)}`).join("")}` : "");
17708
+ )}${distributionClangModuleOptions(args.root, import_node_path27.default.join(moduleRoot, "modules")).map((flag) => `, ${JSON.stringify(flag)}`).join("")}` : prebuilt ? `, "-Isystem", ${JSON.stringify(providedModulesPath(args.root, prebuilt.modules, args.moduleExcludes))}${prebuilt.moduleMaps.map((map) => `, "-Xcc", ${JSON.stringify(`-fmodule-map-file=${map}`)}`).join("")}` : "");
17621
17709
  const nativeFlags = [
17622
17710
  ...args.nativeFlags?.get(target.name) ?? [],
17623
17711
  ...args.nativeHeaderFlags ?? []
@@ -17824,7 +17912,9 @@ function syncSwiftTree(base, files2) {
17824
17912
  const walk3 = (dir) => {
17825
17913
  for (const entry of (0, import_node_fs27.readdirSync)(dir, { withFileTypes: true })) {
17826
17914
  const full = import_node_path27.default.join(dir, entry.name);
17827
- if (dir === base && (entry.name === ".build" || entry.name.startsWith(".peach-modules-") || entry.name === SWIFT_LINK_STAMP))
17915
+ if (dir === base && (entry.name === ".build" || entry.name.startsWith(".peach-modules-") || // distribution clang maps are written beside the project and named
17916
+ // from the compiler flags, so a sync must not remove them.
17917
+ entry.name.startsWith(".peach-clang-modules-") || entry.name === SWIFT_LINK_STAMP))
17828
17918
  continue;
17829
17919
  if (entry.isDirectory()) walk3(full);
17830
17920
  else if (!files2.has(full)) (0, import_node_fs27.rmSync)(full, { force: true });
@@ -19950,6 +20040,9 @@ module ${moduleName}.Swift {
19950
20040
  if (!distribution) {
19951
20041
  modulePlan.update((0, import_node_fs27.readFileSync)(import_node_path27.default.join(moduleRoot, "Package.swift")));
19952
20042
  }
20043
+ modulePlan.update(
20044
+ Object.keys(input.files).filter((file) => file.endsWith(".swift")).sort().join("\n")
20045
+ );
19953
20046
  const resourcePlan = (0, import_node_crypto13.createHash)("sha256").update(
19954
20047
  JSON.stringify(
19955
20048
  resourceTargets.filter((target) => target.resources).map((target) => [
@@ -20372,6 +20465,10 @@ module ${moduleName}.Swift {
20372
20465
  import_node_path27.default.join(moduleRoot, "modules"),
20373
20466
  moduleExcludes
20374
20467
  ) : prebuilt ? providedModulesPath(layout2.root, prebuilt.modules, moduleExcludes) : import_node_path27.default.join(layout2.root, ".build", WASM_TRIPLE, "release", "Modules"),
20468
+ ...distribution ? distributionClangModuleOptions(
20469
+ layout2.root,
20470
+ import_node_path27.default.join(moduleRoot, "modules")
20471
+ ) : [],
20375
20472
  ...prebuilt?.moduleMaps.flatMap((map) => [
20376
20473
  "-Xcc",
20377
20474
  `-fmodule-map-file=${map}`
@@ -21240,7 +21337,7 @@ function compileSwiftProjectOnce(input, options) {
21240
21337
  report("reusing verified disk artifact");
21241
21338
  return retain(root, previous);
21242
21339
  }
21243
- if (!options.intermediates && process.platform === "darwin" && process.env.TM_SESSION && !windowAdmission() && process.env.CI !== "true" && moduleRoot === sourceSwiftCheckout() && !swiftDistributionAt(moduleRoot)) {
21340
+ if (!options.intermediates && process.platform === "darwin" && !options.intermediates && process.env.TM_SESSION && !windowAdmission() && process.env.CI !== "true" && moduleRoot === sourceSwiftCheckout() && !swiftDistributionAt(moduleRoot)) {
21244
21341
  const requestRoot = (0, import_node_fs27.mkdtempSync)(`${root}.builder-request-`);
21245
21342
  const output2 = import_node_path27.default.join(requestRoot, "output");
21246
21343
  const request = import_node_path27.default.join(requestRoot, "request.json");
@@ -30649,7 +30746,7 @@ function sourceClosureDigest(srcDir, entrypoints) {
30649
30746
  return hash.digest("hex");
30650
30747
  }
30651
30748
  var standinSourceDigest = (srcDir = __sootsim_import_meta_dirname) => sourceClosureDigest(srcDir, STANDIN_DIGEST_ENTRYPOINTS);
30652
- var STANDIN_SOURCE_DIGEST = true ? "de5c69cdf5f13f704ced14ea451df60f83586f1006377836b423f3bb3d2ffce8" : standinSourceDigest();
30749
+ var STANDIN_SOURCE_DIGEST = true ? "30ee25efff915489853ffb5c34661d03b2ca480fc48fe80201fced1d4821577a" : standinSourceDigest();
30653
30750
 
30654
30751
  // src/swift-standins.ts
30655
30752
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -31483,6 +31580,238 @@ async function emitCxxStandin(input) {
31483
31580
  };
31484
31581
  }
31485
31582
 
31583
+ // src/swift-standin-builtin-behavior.ts
31584
+ init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
31585
+ var BUILTIN_STANDIN_BEHAVIOR = {
31586
+ GoogleCast: {
31587
+ kGCKCastDeviceCategory: { body: 'return "com.google.cast.CastDevice"' },
31588
+ kGCKDefaultMediaReceiverApplicationID: { body: 'return "CC1AD845"' },
31589
+ kGCKErrorDomain: { body: 'return "com.google.cast.GCKError"' },
31590
+ "GCKError.init(code:)": {
31591
+ body: "super.init(domain: kGCKErrorDomain, code: code.rawValue, userInfo: nil)"
31592
+ },
31593
+ "GCKDiscoveryCriteria.applicationIDs": { stored: "" },
31594
+ "GCKDiscoveryCriteria.namespaces": { stored: "" },
31595
+ "GCKDiscoveryCriteria.hasApplicationIDs": { body: "return applicationIDs != nil" },
31596
+ "GCKDiscoveryCriteria.hasNamespaces": { body: "return namespaces != nil" },
31597
+ "GCKDiscoveryCriteria.init(applicationID:)": {
31598
+ body: "super.init(); applicationIDs = NSOrderedSet(object: applicationID)"
31599
+ },
31600
+ "GCKDiscoveryCriteria.init(namespaces:)": {
31601
+ body: "super.init(); self.namespaces = namespaces"
31602
+ },
31603
+ GCKLaunchOptions: {
31604
+ members: `
31605
+ private static var peachDeviceLanguageCode: String? { Locale.preferredLanguages.first }
31606
+ `
31607
+ },
31608
+ "GCKLaunchOptions.languageCode": { stored: "" },
31609
+ "GCKLaunchOptions.relaunchIfRunning": { stored: "false" },
31610
+ "GCKLaunchOptions.androidReceiverCompatible": { stored: "false" },
31611
+ "GCKLaunchOptions.init()": {
31612
+ body: "super.init(); languageCode = GCKLaunchOptions.peachDeviceLanguageCode"
31613
+ },
31614
+ "GCKLaunchOptions.init(relaunchIfRunning:)": {
31615
+ body: `
31616
+ super.init()
31617
+ languageCode = GCKLaunchOptions.peachDeviceLanguageCode
31618
+ self.relaunchIfRunning = relaunchIfRunning
31619
+ `
31620
+ },
31621
+ "GCKLaunchOptions.init(languageCode:relaunchIfRunning:)": {
31622
+ body: `
31623
+ super.init()
31624
+ self.languageCode = languageCode
31625
+ self.relaunchIfRunning = relaunchIfRunning
31626
+ `
31627
+ },
31628
+ "GCKLaunchOptions.init(relaunchIfRunning:androidReceiverCompatible:)": {
31629
+ body: `
31630
+ super.init()
31631
+ languageCode = GCKLaunchOptions.peachDeviceLanguageCode
31632
+ self.relaunchIfRunning = relaunchIfRunning
31633
+ self.androidReceiverCompatible = androidReceiverCompatible
31634
+ `
31635
+ },
31636
+ "GCKLaunchOptions.init(relaunchIfRunning:languageCode:androidReceiverCompatible:)": {
31637
+ body: `
31638
+ super.init()
31639
+ self.languageCode = languageCode
31640
+ self.relaunchIfRunning = relaunchIfRunning
31641
+ self.androidReceiverCompatible = androidReceiverCompatible
31642
+ `
31643
+ },
31644
+ GCKCastOptions: {
31645
+ members: "fileprivate var peachDiscoveryCriteria: GCKDiscoveryCriteria?"
31646
+ },
31647
+ "GCKCastOptions.init(discoveryCriteria:)": {
31648
+ body: "super.init(); peachDiscoveryCriteria = discoveryCriteria"
31649
+ },
31650
+ "GCKCastOptions.init(receiverApplicationID:)": {
31651
+ body: "super.init(); peachDiscoveryCriteria = GCKDiscoveryCriteria(applicationID: applicationID)"
31652
+ },
31653
+ "GCKCastOptions.init(supportedNamespaces:)": {
31654
+ body: "super.init(); peachDiscoveryCriteria = GCKDiscoveryCriteria(namespaces: Set(namespaces))"
31655
+ },
31656
+ "GCKCastOptions.physicalVolumeButtonsWillControlDeviceVolume": { stored: "false" },
31657
+ "GCKCastOptions.disableDiscoveryAutostart": { stored: "false" },
31658
+ "GCKCastOptions.disableAnalyticsLogging": { stored: "false" },
31659
+ "GCKCastOptions.launchOptions": { stored: "" },
31660
+ "GCKCastOptions.sharedContainerIdentifier": { stored: "" },
31661
+ "GCKCastOptions.suspendSessionsWhenBackgrounded": { stored: "true" },
31662
+ "GCKCastOptions.stopReceiverApplicationWhenEndingSession": { stored: "false" },
31663
+ "GCKCastOptions.startDiscoveryAfterFirstTapOnCastButton": { stored: "true" },
31664
+ GCKCastContext: {
31665
+ members: `
31666
+ nonisolated(unsafe) fileprivate static var peachShared: GCKCastContext?
31667
+ fileprivate let peachDiscoveryManager = GCKDiscoveryManager()
31668
+ fileprivate let peachSessionManager = GCKSessionManager()
31669
+ fileprivate var peachCredentialsData: GCKCredentialsData?
31670
+ fileprivate static func peachInitialize(_ options: GCKCastOptions) {
31671
+ let context = GCKCastContext()
31672
+ peachShared = context
31673
+ if !options.disableDiscoveryAutostart && !options.startDiscoveryAfterFirstTapOnCastButton {
31674
+ context.peachDiscoveryManager.startDiscovery()
31675
+ }
31676
+ }
31677
+ `
31678
+ },
31679
+ "GCKCastContext.imageCache": { stored: "" },
31680
+ "GCKCastContext.imagePicker": { stored: "" },
31681
+ "GCKCastContext.useDefaultExpandedMediaControls": { stored: "false" },
31682
+ "GCKCastContext.castState": { body: "return .noDevicesAvailable" },
31683
+ "GCKCastContext.discoveryManager": { body: "return peachDiscoveryManager" },
31684
+ "GCKCastContext.sessionManager": { body: "return peachSessionManager" },
31685
+ "GCKCastContext.setLaunch(_:)": { body: "peachCredentialsData = credentialsData" },
31686
+ "GCKCastContext.isSharedInstanceInitialized()": {
31687
+ body: "return peachShared != nil"
31688
+ },
31689
+ "GCKCastContext.sharedInstance()": {
31690
+ body: `
31691
+ guard let shared = peachShared else {
31692
+ fatalError("GCKCastContext.sharedInstance() was called before the shared instance was initialized")
31693
+ }
31694
+ return unsafeDowncast(shared, to: Self.self)
31695
+ `
31696
+ },
31697
+ "GCKCastContext.setSharedInstanceWith(_:)": {
31698
+ body: `
31699
+ if peachShared != nil {
31700
+ fatalError("GCKCastContext.setSharedInstanceWith(_:) was called when the shared instance was already initialized")
31701
+ }
31702
+ peachInitialize(options)
31703
+ `
31704
+ },
31705
+ "GCKCastContext.setSharedInstanceWith(_:error:)": {
31706
+ body: `
31707
+ if peachShared != nil {
31708
+ error?.pointee = GCKError(code: .alreadyInitialized)
31709
+ return false
31710
+ }
31711
+ peachInitialize(options)
31712
+ return true
31713
+ `
31714
+ },
31715
+ GCKDiscoveryManager: {
31716
+ members: `
31717
+ private final class PeachListener {
31718
+ weak var listener: (any GCKDiscoveryManagerListener)?
31719
+ init(_ listener: any GCKDiscoveryManagerListener) { self.listener = listener }
31720
+ }
31721
+ private var peachListeners: [PeachListener] = []
31722
+ private var peachState: GCKDiscoveryState = .stopped
31723
+ `
31724
+ },
31725
+ "GCKDiscoveryManager.discoveryState": { body: "return peachState" },
31726
+ "GCKDiscoveryManager.hasDiscoveredDevices": { body: "return false" },
31727
+ "GCKDiscoveryManager.passiveScan": { stored: "false" },
31728
+ "GCKDiscoveryManager.discoveryActive": { body: "return peachState == .running" },
31729
+ "GCKDiscoveryManager.deviceCount": { body: "return 0" },
31730
+ "GCKDiscoveryManager.add(_:)": {
31731
+ body: `
31732
+ peachListeners.removeAll { $0.listener == nil }
31733
+ if !peachListeners.contains(where: { $0.listener === listener }) {
31734
+ peachListeners.append(PeachListener(listener))
31735
+ }
31736
+ `
31737
+ },
31738
+ "GCKDiscoveryManager.remove(_:)": {
31739
+ body: "peachListeners.removeAll { $0.listener == nil || $0.listener === listener }"
31740
+ },
31741
+ "GCKDiscoveryManager.startDiscovery()": {
31742
+ body: `
31743
+ if peachState == .running { return }
31744
+ peachState = .running
31745
+ for entry in peachListeners {
31746
+ entry.listener?.didStartDiscovery(forDeviceCategory: kGCKCastDeviceCategory)
31747
+ }
31748
+ `
31749
+ },
31750
+ "GCKDiscoveryManager.stopDiscovery()": { body: "peachState = .stopped" },
31751
+ "GCKDiscoveryManager.isDiscoveryActive(forDeviceCategory:)": {
31752
+ body: "return peachState == .running && deviceCategory == kGCKCastDeviceCategory"
31753
+ },
31754
+ "GCKDiscoveryManager.device(at:)": {
31755
+ body: 'fatalError("GCKDiscoveryManager.device(at:) index \\(index) is out of range: no Cast device is discovered")'
31756
+ },
31757
+ "GCKDiscoveryManager.device(withUniqueID:)": { body: "return nil" },
31758
+ "GCKDiscoveryManager.cancelFindOperation()": { body: "" },
31759
+ GCKSessionManager: {
31760
+ members: `
31761
+ private var peachListeners: [any GCKSessionManagerListener] = []
31762
+ private var peachDefaultSessionOptions: [String: [String: any NSCoding & NSObjectProtocol]] = [:]
31763
+ `
31764
+ },
31765
+ "GCKSessionManager.currentSession": { body: "return nil" },
31766
+ "GCKSessionManager.currentCastSession": { body: "return nil" },
31767
+ "GCKSessionManager.connectionState": { body: "return .disconnected" },
31768
+ "GCKSessionManager.hasConnectedSession()": { body: "return false" },
31769
+ "GCKSessionManager.hasConnectedCastSession()": { body: "return false" },
31770
+ "GCKSessionManager.startSession(with:)": { body: "return false" },
31771
+ "GCKSessionManager.startSession(with:sessionOptions:)": { body: "return false" },
31772
+ "GCKSessionManager.suspendSession(with:)": { body: "return false" },
31773
+ "GCKSessionManager.endSession()": { body: "return false" },
31774
+ "GCKSessionManager.endSessionAndStopCasting(_:)": { body: "return false" },
31775
+ "GCKSessionManager.setDefaultSessionOptions(_:forDeviceCategory:)": {
31776
+ body: "peachDefaultSessionOptions[category] = sessionOptions"
31777
+ },
31778
+ "GCKSessionManager.defaultSessionOptions(forDeviceCategory:)": {
31779
+ body: "return peachDefaultSessionOptions[category]"
31780
+ },
31781
+ "GCKSessionManager.add(_:)": {
31782
+ body: `
31783
+ if !peachListeners.contains(where: { $0 === listener }) { peachListeners.append(listener) }
31784
+ `
31785
+ },
31786
+ "GCKSessionManager.remove(_:)": {
31787
+ body: "peachListeners.removeAll { $0 === listener }"
31788
+ },
31789
+ GCKLogger: {
31790
+ members: "nonisolated(unsafe) fileprivate static let peachShared = GCKLogger()"
31791
+ },
31792
+ "GCKLogger.sharedInstance()": { body: "return peachShared" },
31793
+ "GCKLogger.delegate": { stored: "" },
31794
+ "GCKLogger.filter": { stored: "" },
31795
+ "GCKLogger.loggingEnabled": { stored: "true" },
31796
+ "GCKLogger.fileLoggingEnabled": { stored: "false" },
31797
+ "GCKLogger.consoleLoggingEnabled": { stored: "false" }
31798
+ }
31799
+ };
31800
+ function withBuiltinStandinBehavior(behavior) {
31801
+ const merged = { ...behavior };
31802
+ for (const [module2, members2] of Object.entries(BUILTIN_STANDIN_BEHAVIOR))
31803
+ merged[module2] = {
31804
+ ...Object.fromEntries(
31805
+ Object.entries(members2).map(([path51, entry]) => [
31806
+ path51,
31807
+ { ...entry, builtin: true }
31808
+ ])
31809
+ ),
31810
+ ...behavior[module2]
31811
+ };
31812
+ return merged;
31813
+ }
31814
+
31486
31815
  // src/swift-standins.ts
31487
31816
  var TRIPLE = "wasm32-unknown-wasip1";
31488
31817
  var cacheDir4 = import_node_path49.default.join(cacheDir(), "swift-standins");
@@ -32475,12 +32804,15 @@ function objcStandin(surface, binary, toolchain, work, behavior, frameworks, sib
32475
32804
  }
32476
32805
  var OBJC_UNREPRESENTABLE = "cannot be marked '@objc' because its type cannot be represented in Objective-C";
32477
32806
  var INERT_VALUE = /missing argument|cannot be constructed|has no member 'init'|no exact matches in call to initializer|cannot convert return expression|does not conform to '|extra argument|takes no arguments|could not be inferred|cannot infer/;
32478
- function graphStandin(module2, graphs, values, wasm, binary, toolchain, work, requiredInits2, behavior, imports2 = [], requireSwift = false, objcProperties = /* @__PURE__ */ new Map(), placeholder = null, inheritedConformances = /* @__PURE__ */ new Map(), projections = /* @__PURE__ */ new Map(), dependencyGraphs = []) {
32807
+ function graphStandin(module2, graphs, values, wasm, binary, toolchain, work, requiredInits2, declared, imports2 = [], requireSwift = false, objcProperties = /* @__PURE__ */ new Map(), placeholder = null, inheritedConformances = /* @__PURE__ */ new Map(), projections = /* @__PURE__ */ new Map(), dependencyGraphs = []) {
32479
32808
  const paths = new Set(
32480
32809
  graphs.flatMap(
32481
32810
  (graph) => graph.symbols.map((symbol2) => symbol2.pathComponents.join("."))
32482
32811
  )
32483
32812
  );
32813
+ const behavior = new Map(
32814
+ [...declared].filter(([name3, entry]) => !entry.builtin || paths.has(name3))
32815
+ );
32484
32816
  const swiftPaths = new Set(
32485
32817
  requireSwift ? graphs.flatMap(
32486
32818
  (graph) => graph.symbols.filter(isSwiftDeclaration).map((symbol2) => symbol2.pathComponents.join("."))
@@ -33358,7 +33690,8 @@ function readStandinResults(receipt, generation, targets) {
33358
33690
  return { standins, gaps };
33359
33691
  }
33360
33692
  var built = /* @__PURE__ */ new Map();
33361
- function standinGenerationInputs(binaries, toolchain, behavior = {}, sourceDir) {
33693
+ function standinGenerationInputs(binaries, toolchain, configuredBehavior = {}, sourceDir) {
33694
+ const behavior = withBuiltinStandinBehavior(configuredBehavior);
33362
33695
  const { moduleRoot, release } = toolchain;
33363
33696
  const sdk = swiftModuleSdk(moduleRoot);
33364
33697
  const digest = sourceDir === void 0 ? STANDIN_SOURCE_DIGEST : standinSourceDigest(sourceDir);
@@ -33621,8 +33954,13 @@ ${roots.map((file) => ` header "${file}"`).join("\n")}
33621
33954
  }
33622
33955
  return settle(result);
33623
33956
  }
33624
- async function swiftStandins(binaries, toolchain, provided = /* @__PURE__ */ new Set(), behavior = {}, options = {}) {
33625
- const built2 = await buildStandins(binaries, toolchain, provided, behavior);
33957
+ async function swiftStandins(binaries, toolchain, provided = /* @__PURE__ */ new Set(), configuredBehavior = {}, options = {}) {
33958
+ const built2 = await buildStandins(
33959
+ binaries,
33960
+ toolchain,
33961
+ provided,
33962
+ withBuiltinStandinBehavior(configuredBehavior)
33963
+ );
33626
33964
  return {
33627
33965
  standins: options.nativeSlices === false ? built2.standins : built2.standins.map((standin) => {
33628
33966
  const binary = binaries.find((item) => item.target === standin.target);
@@ -33630,7 +33968,7 @@ async function swiftStandins(binaries, toolchain, provided = /* @__PURE__ */ new
33630
33968
  standin,
33631
33969
  toolchain.moduleRoot,
33632
33970
  STANDIN_SOURCE_DIGEST,
33633
- Object.keys(behavior[standin.module] ?? {}).length > 0,
33971
+ Object.keys(configuredBehavior[standin.module] ?? {}).length > 0,
33634
33972
  () => swiftBinaryFramework(binary).dir
33635
33973
  ) : standin;
33636
33974
  }),
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2208 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2209 | (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;
@@ -1416,7 +1416,7 @@ function isValidRuntimeVersion(value) {
1416
1416
  }
1417
1417
 
1418
1418
  // runtime-companion.json
1419
- var runtime_companion_default = { abi: 1, sha256: "ea69e68003595a371f10dcf33647a3b874bfca09c7b0b41223c752c4d49a8f73", file: "node/cli-ea69e68003595a371f10dcf33647a3b874bfca09c7b0b41223c752c4d49a8f73.cjs" };
1419
+ var runtime_companion_default = { abi: 1, sha256: "8d817e4a68a084ba50456a80439f20c8aa11c055d42c9cf1c7de017062bfd4a2", file: "node/cli-8d817e4a68a084ba50456a80439f20c8aa11c055d42c9cf1c7de017062bfd4a2.cjs" };
1420
1420
 
1421
1421
  // src/answeredNativePackages.ts
1422
1422
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -1909,7 +1909,7 @@ function readIosSdkTree(root) {
1909
1909
 
1910
1910
  // src/swift-standin-digest.ts
1911
1911
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
1912
- var STANDIN_SOURCE_DIGEST = true ? "de5c69cdf5f13f704ced14ea451df60f83586f1006377836b423f3bb3d2ffce8" : standinSourceDigest();
1912
+ var STANDIN_SOURCE_DIGEST = true ? "30ee25efff915489853ffb5c34661d03b2ca480fc48fe80201fced1d4821577a" : standinSourceDigest();
1913
1913
 
1914
1914
  // src/expo-native-workspace.ts
1915
1915
  init_define_SWIFT_COVERAGE_SOURCE_DIGESTS();
@@ -5403,7 +5403,7 @@ var FOUNDATION_IMPLICIT_MODULES = [
5403
5403
  var FOUNDATION_IMPLICIT_FLAGS = FOUNDATION_IMPLICIT_MODULES.map(
5404
5404
  (module2) => `, "-Xfrontend", "-import-module", "-Xfrontend", "${module2}"`
5405
5405
  ).join("");
5406
- var compilerSourceDigest = true ? "be03c2edac4dfeffbfd874f5ea7a11c25067194164940d7e7c5fa34ead584e7a" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
5406
+ var compilerSourceDigest = true ? "f113c3b74986e3d582dde643cb5771f750e5c836703fb20a79a1d67a53884748" : swiftCompilerSourceDigest2(__sootsim_import_meta_dirname);
5407
5407
  var CORE_FOUNDATION_HANDLE_IMPORTS = [
5408
5408
  "CFAllocator",
5409
5409
  "CFArray",
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.2208 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2209 | (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.2208 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.2209 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/worklet-executable.ts
4
4
  import { parse } from "acorn";
@@ -1,5 +1,5 @@
1
1
  import { type AnimatedArithmetic } from './animation-graph.d.ts';
2
- import { type TaggedBezierEasing } from './animation-graph.d.ts';
2
+ import { type NativeAnimationGraph, type TaggedBezierEasing } from './animation-graph.d.ts';
3
3
  import { type SpringSampler } from './rn-spring.d.ts';
4
4
  declare function cubicBezier(x1: number, y1: number, x2: number, y2: number): TaggedBezierEasing;
5
5
  export declare const Easing: {
@@ -142,6 +142,7 @@ export interface TimingConfig {
142
142
  inputRange: number[];
143
143
  outputRange: number[];
144
144
  };
145
+ curve?: NativeAnimationGraph;
145
146
  }
146
147
  export declare function setLockstepCaptureActive(active: boolean): void;
147
148
  export declare function timing(value: AnimatedValue, config: TimingConfig): Animation;
@@ -131,6 +131,7 @@ export declare const CUBIC_BEZIER_IDENTITY_X2: number;
131
131
  export declare function sampleCubicBezierEasing(x: number, x1: number, y1: number, x2: number, y2: number): number;
132
132
  export declare function sampleNativeAnimationGraph(graph: NativeAnimationGraph, epochMs: number): number;
133
133
  export declare function isNativeAnimationGraphSettled(graph: NativeAnimationGraph, epochMs: number): boolean;
134
+ export declare function curveLeafParams(leaf: CurveAnimationGraph): number[];
134
135
  export declare function getNativeAnimationGraphEndEpochMs(graph: NativeAnimationGraph): number | null;
135
136
  export declare function createSpringAnimationGraph(fromValue: number, resolved: ResolvedSpring, toValue: number, anchorEpochMs: number, fixedDurationMs?: number, anchorOffsetMs?: number): SpringAnimationGraph | null;
136
137
  export interface TaggedBezierEasing {
@@ -275,6 +275,12 @@ export declare function prewarmLiquidGlassPrograms(ck: CanvasKit, sourceSurface:
275
275
  export declare function drawLiquidGlassEdge(ck: CanvasKit, canvas: Canvas, dpr: number, x: number, y: number, w: number, h: number, config: LiquidGlassEdgeConfig): void;
276
276
  export declare const LIQUID_GLASS_MOVING = 1;
277
277
  export declare const LIQUID_GLASS_REPLAYABLE = 2;
278
+ export interface PublishedGlassProgram {
279
+ readonly kinds: number[];
280
+ uikit: Float64Array | null;
281
+ }
282
+ export declare function recordGlassPrograms(): void;
283
+ export declare function publishedGlassProgram(slot: number): PublishedGlassProgram | undefined;
278
284
  export declare function beginLiquidGlassProgram(ck: CanvasKit, slot: number, id: number, width: number, height: number, x?: number, y?: number, fixed?: boolean, rect?: NonNullable<ReturnType<typeof resolveAnimatedLiquidGlassRect>>, capturePadding?: number): void;
279
285
  export declare function endLiquidGlassProgram(ck: CanvasKit): void;
280
286
  export declare function liquidGlassProgramCommand(ck: CanvasKit, kind: number, x: number, y: number, width: number, height: number, values?: readonly number[]): void;
@@ -208,6 +208,7 @@ export declare class SootSimNode {
208
208
  _wireContentRevision: number;
209
209
  _wireShapeRevision: number;
210
210
  _styleEpoch: number;
211
+ _subtreeStyleEpoch: number;
211
212
  _nativeAnimationScanRevision: number;
212
213
  _nativeAnimationScanKeysRevision: number;
213
214
  _nativeAnimationScanMayMark: boolean;
@@ -725,6 +725,7 @@ export interface RenderContext extends RenderContextBase {
725
725
  flatBake?: boolean;
726
726
  flattenedGroup?: SootSimNode;
727
727
  sourceRoot?: SootSimNode;
728
+ layerRoot?: SootSimNode;
728
729
  sourceMaterial?: 'shared';
729
730
  flatAncestor?: boolean;
730
731
  flatDeps?: [boolean];
@@ -396,6 +396,14 @@ export declare class GraphiteDeviceContext {
396
396
  readonly format: GPUTextureFormat;
397
397
  readonly byteSize: number;
398
398
  }): GraphiteTextureSurface;
399
+ adoptTextureSurface(options: {
400
+ readonly texture: WebGpuTexturePort;
401
+ readonly identity: GraphiteTextureIdentity;
402
+ readonly width: number;
403
+ readonly height: number;
404
+ readonly format: GPUTextureFormat;
405
+ readonly usage: number;
406
+ }): GraphiteTextureSurface;
399
407
  createPresentationSurface(texture: GraphiteOwnedTexture): GraphiteNativeSurfacePort;
400
408
  assertOwnsTexture(texture: GraphiteOwnedTexture): void;
401
409
  assertOwnsBuffer(buffer: GraphiteOwnedBuffer): void;
@@ -2,6 +2,7 @@ import type { CanvasKitRenderingApi } from '../engine/canvaskit-api.d.ts';
2
2
  import type { SharedDeviceImageBridge } from '../engine/image-loader.d.ts';
3
3
  import type { CompositorCadenceStats, CompositorHostToWorker, CompositorStats, CompositorSurfaceId, GraphiteAdapterIdentity, GraphiteDeviceCacheSnapshot, ShellToCompositorMessage } from './compositor-protocol.d.ts';
4
4
  import type { GPUUploadTrace } from './compositor-protocol.d.ts';
5
+ import type { RenderTree } from './compositor-runtime/render-tree.d.ts';
5
6
  import type { WebGpuGraphiteSubmissionBudget } from './webgpu-frame-transaction.d.ts';
6
7
  import type { WebGpuReadbackKind } from './webgpu-readback-scheduler.d.ts';
7
8
  import type { FontMgr, Image as SkImage, Surface } from 'canvaskit-wasm';
@@ -146,6 +147,8 @@ export interface CompositorGpuBackend {
146
147
  releaseDisplay(display: CompositorGpuDisplay): void;
147
148
  createScratch(display: CompositorGpuDisplay, generation: number, width: number, height: number): CompositorGpuTarget;
148
149
  retireScratch(target: CompositorGpuTarget): void;
150
+ renderTree(display: CompositorGpuDisplay): RenderTree | null;
151
+ createLayerTarget(display: CompositorGpuDisplay, generation: number, texture: GPUTexture, width: number, height: number): CompositorGpuTarget;
149
152
  readonly programDevice: GPUDevice | null;
150
153
  createProgramTarget(display: CompositorGpuDisplay, generation: number, width: number, height: number): CompositorGpuTarget;
151
154
  programTexture(target: CompositorGpuTarget): GPUTexture;
@@ -1164,6 +1164,20 @@ export interface CompositorStats {
1164
1164
  demotions: number;
1165
1165
  captureFailures: number;
1166
1166
  };
1167
+ layerTree: {
1168
+ loaded: boolean;
1169
+ promoted: number;
1170
+ transactions: number;
1171
+ commits: number;
1172
+ ops: number;
1173
+ };
1174
+ layerClaims: {
1175
+ live: Readonly<Record<string, number>>;
1176
+ claimed: number;
1177
+ ended: number;
1178
+ refusals: Readonly<Record<string, number>>;
1179
+ paintedOver: Readonly<Record<string, string>>;
1180
+ };
1167
1181
  snapshots: {
1168
1182
  intervalMs: number;
1169
1183
  requests: number;