@satinhq/kit 0.0.0-stage → 0.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1154) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +96 -0
  3. package/README.md +454 -2
  4. package/THIRD_PARTY_NOTICES.md +65 -0
  5. package/bin/satin.mjs +13 -0
  6. package/dist/acknowledgements/Acknowledgements.d.ts +4 -0
  7. package/dist/acknowledgements/Acknowledgements.js +42 -0
  8. package/dist/acknowledgements/bundledNotices.d.ts +4 -0
  9. package/dist/acknowledgements/bundledNotices.js +58 -0
  10. package/dist/acknowledgements/inventory.d.ts +17 -0
  11. package/dist/acknowledgements/inventory.js +10 -0
  12. package/dist/acknowledgements/inventory.json +39 -0
  13. package/dist/actions/ActionMenu.d.ts +30 -0
  14. package/dist/actions/ActionMenu.js +103 -0
  15. package/dist/actions/RowActions.d.ts +42 -0
  16. package/dist/actions/RowActions.js +820 -0
  17. package/dist/actions/contextMotion.d.ts +78 -0
  18. package/dist/actions/contextMotion.js +329 -0
  19. package/dist/actions/motion.d.ts +19 -0
  20. package/dist/actions/motion.js +74 -0
  21. package/dist/actions/nativeContextAppearance.json +86 -0
  22. package/dist/actions/nativeContextMotion.json +734 -0
  23. package/dist/actions/nativeMotion.json +388 -0
  24. package/dist/actions/preview.d.ts +27 -0
  25. package/dist/actions/preview.js +217 -0
  26. package/dist/actions/recognizers.d.ts +24 -0
  27. package/dist/actions/recognizers.js +87 -0
  28. package/dist/actions/rowScrub.d.ts +59 -0
  29. package/dist/actions/rowScrub.js +400 -0
  30. package/dist/actions/swipeSpring.d.ts +14 -0
  31. package/dist/actions/swipeSpring.js +35 -0
  32. package/dist/actions/types.d.ts +71 -0
  33. package/dist/actions/types.js +28 -0
  34. package/dist/app/InstallComponents.d.ts +16 -0
  35. package/dist/app/InstallComponents.js +104 -0
  36. package/dist/app/InstallationDiagnostics.d.ts +7 -0
  37. package/dist/app/InstallationDiagnostics.js +23 -0
  38. package/dist/app/OrientationGuard.d.ts +8 -0
  39. package/dist/app/OrientationGuard.js +9 -0
  40. package/dist/app/appearance.d.ts +18 -0
  41. package/dist/app/appearance.js +15 -0
  42. package/dist/app/appearanceStore.d.ts +30 -0
  43. package/dist/app/appearanceStore.js +228 -0
  44. package/dist/app/backgroundUpdate.d.ts +20 -0
  45. package/dist/app/backgroundUpdate.js +151 -0
  46. package/dist/app/buildInfo.d.ts +11 -0
  47. package/dist/app/buildInfo.js +12 -0
  48. package/dist/app/buildInfoBuild.d.ts +3 -0
  49. package/dist/app/buildInfoBuild.js +12 -0
  50. package/dist/app/checkCli.d.ts +1 -0
  51. package/dist/app/checkCli.js +73 -0
  52. package/dist/app/coldLaunchUpdate.d.ts +14 -0
  53. package/dist/app/coldLaunchUpdate.js +384 -0
  54. package/dist/app/definition.d.ts +85 -0
  55. package/dist/app/definition.js +347 -0
  56. package/dist/app/deployment.d.ts +28 -0
  57. package/dist/app/deployment.js +352 -0
  58. package/dist/app/deploymentBuild.d.ts +3 -0
  59. package/dist/app/deploymentBuild.js +55 -0
  60. package/dist/app/earlyWorker.d.ts +3 -0
  61. package/dist/app/earlyWorker.js +77 -0
  62. package/dist/app/head.d.ts +10 -0
  63. package/dist/app/head.js +120 -0
  64. package/dist/app/icons.d.ts +4 -0
  65. package/dist/app/icons.js +35 -0
  66. package/dist/app/install.d.ts +18 -0
  67. package/dist/app/install.js +82 -0
  68. package/dist/app/installCheck.d.ts +2 -0
  69. package/dist/app/installCheck.js +148 -0
  70. package/dist/app/installContext.d.ts +35 -0
  71. package/dist/app/installContext.js +45 -0
  72. package/dist/app/installCustom.d.ts +25 -0
  73. package/dist/app/installCustom.js +55 -0
  74. package/dist/app/installExperience.d.ts +22 -0
  75. package/dist/app/installExperience.js +389 -0
  76. package/dist/app/installExperienceDevice.d.ts +29 -0
  77. package/dist/app/installExperienceDevice.js +160 -0
  78. package/dist/app/installExperienceHome.d.ts +16 -0
  79. package/dist/app/installExperienceHome.js +304 -0
  80. package/dist/app/installExperienceRuntime.d.ts +37 -0
  81. package/dist/app/installExperienceRuntime.js +285 -0
  82. package/dist/app/installPolicy.d.ts +28 -0
  83. package/dist/app/installPolicy.js +90 -0
  84. package/dist/app/installQr.d.ts +10 -0
  85. package/dist/app/installQr.js +139 -0
  86. package/dist/app/installStrings.d.ts +52 -0
  87. package/dist/app/installStrings.js +75 -0
  88. package/dist/app/installTipPath.d.ts +12 -0
  89. package/dist/app/installTipPath.js +9 -0
  90. package/dist/app/installationFailure.d.ts +14 -0
  91. package/dist/app/installationFailure.js +38 -0
  92. package/dist/app/launch.d.ts +7 -0
  93. package/dist/app/launch.js +241 -0
  94. package/dist/app/launchReadiness.d.ts +9 -0
  95. package/dist/app/launchReadiness.js +72 -0
  96. package/dist/app/launchScreen.d.ts +16 -0
  97. package/dist/app/launchScreen.js +14 -0
  98. package/dist/app/launchScreenRuntime.d.ts +19 -0
  99. package/dist/app/launchScreenRuntime.js +313 -0
  100. package/dist/app/launchWatchdog.d.ts +1 -0
  101. package/dist/app/launchWatchdog.js +202 -0
  102. package/dist/app/manifests.d.ts +19 -0
  103. package/dist/app/manifests.js +20 -0
  104. package/dist/app/mdm.d.ts +3 -0
  105. package/dist/app/mdm.js +20 -0
  106. package/dist/app/mediaCheck.d.ts +9 -0
  107. package/dist/app/mediaCheck.js +122 -0
  108. package/dist/app/mediaTypes.d.ts +2 -0
  109. package/dist/app/mediaTypes.js +13 -0
  110. package/dist/app/platformPolicy.d.ts +3 -0
  111. package/dist/app/platformPolicy.js +10 -0
  112. package/dist/app/platformScripts.d.ts +6 -0
  113. package/dist/app/platformScripts.js +65 -0
  114. package/dist/app/releaseUpdates.d.ts +7 -0
  115. package/dist/app/releaseUpdates.js +53 -0
  116. package/dist/app/runtime.d.ts +9 -0
  117. package/dist/app/runtime.js +38 -0
  118. package/dist/app/startup.d.ts +30 -0
  119. package/dist/app/startup.js +24 -0
  120. package/dist/app/statusBand.d.ts +11 -0
  121. package/dist/app/statusBand.js +257 -0
  122. package/dist/app/viewport.d.ts +3 -0
  123. package/dist/app/viewport.js +42 -0
  124. package/dist/app/viewportValue.d.ts +5 -0
  125. package/dist/app/viewportValue.js +14 -0
  126. package/dist/app/vite.d.ts +27 -0
  127. package/dist/app/vite.js +440 -0
  128. package/dist/app/warmImage.d.ts +3 -0
  129. package/dist/app/warmImage.js +59 -0
  130. package/dist/content/content.d.ts +153 -0
  131. package/dist/content/content.js +315 -0
  132. package/dist/content/layout.d.ts +26 -0
  133. package/dist/content/layout.js +114 -0
  134. package/dist/content/scaledMetric.d.ts +3 -0
  135. package/dist/content/scaledMetric.js +68 -0
  136. package/dist/content/typography.d.ts +83 -0
  137. package/dist/content/typography.js +32 -0
  138. package/dist/controls/ActivityIndicatorSegments.d.ts +4 -0
  139. package/dist/controls/ActivityIndicatorSegments.js +5 -0
  140. package/dist/controls/ColorPicker.d.ts +20 -0
  141. package/dist/controls/ColorPicker.js +70 -0
  142. package/dist/controls/ControlRow.d.ts +5 -0
  143. package/dist/controls/ControlRow.js +10 -0
  144. package/dist/controls/DatePicker.d.ts +41 -0
  145. package/dist/controls/DatePicker.js +148 -0
  146. package/dist/controls/ProgressView.d.ts +17 -0
  147. package/dist/controls/ProgressView.js +24 -0
  148. package/dist/controls/civilDate.d.ts +49 -0
  149. package/dist/controls/civilDate.js +112 -0
  150. package/dist/data/database.d.ts +154 -0
  151. package/dist/data/database.js +710 -0
  152. package/dist/data/value-equal.d.ts +2 -0
  153. package/dist/data/value-equal.js +36 -0
  154. package/dist/data/write-store.d.ts +38 -0
  155. package/dist/data/write-store.js +192 -0
  156. package/dist/dev-menu/DevMenu.d.ts +1 -0
  157. package/dist/dev-menu/DevMenu.js +121 -0
  158. package/dist/dev-menu/actions.d.ts +12 -0
  159. package/dist/dev-menu/actions.js +99 -0
  160. package/dist/dev-menu/build.d.ts +5 -0
  161. package/dist/dev-menu/build.js +40 -0
  162. package/dist/dev-menu/gesture.d.ts +18 -0
  163. package/dist/dev-menu/gesture.js +109 -0
  164. package/dist/dev-menu/shake.d.ts +2 -0
  165. package/dist/dev-menu/shake.js +36 -0
  166. package/dist/dev-menu/types.d.ts +8 -0
  167. package/dist/dev-menu/types.js +1 -0
  168. package/dist/diagnostics.d.ts +3 -0
  169. package/dist/diagnostics.js +4 -0
  170. package/dist/docs/app-recipes.md +411 -0
  171. package/dist/docs/components/file-importer.md +54 -0
  172. package/dist/docs/components/paste-button.md +48 -0
  173. package/dist/docs/components/photos-picker.md +53 -0
  174. package/dist/docs/components/share-link.md +58 -0
  175. package/dist/docs/content.md +159 -0
  176. package/dist/docs/controls.md +151 -0
  177. package/dist/docs/data.md +332 -0
  178. package/dist/docs/limitations.md +40 -0
  179. package/dist/docs/messaging-scroll.md +234 -0
  180. package/dist/docs/networking.md +190 -0
  181. package/dist/docs/push.md +215 -0
  182. package/dist/docs/swiftui-reference.md +1895 -0
  183. package/dist/docs/symbols.md +293 -0
  184. package/dist/docs/tokens.md +60 -0
  185. package/dist/fidelity/devAssertions.d.ts +21 -0
  186. package/dist/fidelity/devAssertions.js +199 -0
  187. package/dist/focus/focusIntentMachine.d.ts +106 -0
  188. package/dist/focus/focusIntentMachine.js +359 -0
  189. package/dist/focus/navigationFocus.d.ts +42 -0
  190. package/dist/focus/navigationFocus.js +241 -0
  191. package/dist/focus/programmaticFocus.d.ts +15 -0
  192. package/dist/focus/programmaticFocus.js +152 -0
  193. package/dist/gestures/GestureView.d.ts +12 -0
  194. package/dist/gestures/GestureView.js +321 -0
  195. package/dist/gestures/arena.d.ts +138 -0
  196. package/dist/gestures/arena.js +417 -0
  197. package/dist/gestures/existingCompetitors.d.ts +79 -0
  198. package/dist/gestures/existingCompetitors.js +82 -0
  199. package/dist/gestures/gesture.d.ts +62 -0
  200. package/dist/gestures/gesture.js +107 -0
  201. package/dist/glass/ControlLens.d.ts +46 -0
  202. package/dist/glass/ControlLens.js +88 -0
  203. package/dist/glass/GlassBar.d.ts +9 -0
  204. package/dist/glass/GlassBar.js +22 -0
  205. package/dist/glass/GlassConfusionReview.d.ts +3 -0
  206. package/dist/glass/GlassConfusionReview.js +185 -0
  207. package/dist/glass/GlassEffect.d.ts +69 -0
  208. package/dist/glass/GlassEffect.js +550 -0
  209. package/dist/glass/GlassMaterialRoot.d.ts +7 -0
  210. package/dist/glass/GlassMaterialRoot.js +39 -0
  211. package/dist/glass/GlassPresentation.d.ts +29 -0
  212. package/dist/glass/GlassPresentation.js +1041 -0
  213. package/dist/glass/GlassProbeIcons.d.ts +8 -0
  214. package/dist/glass/GlassProbeIcons.js +12 -0
  215. package/dist/glass/GlassProbeOverlay.d.ts +52 -0
  216. package/dist/glass/GlassProbeOverlay.js +45 -0
  217. package/dist/glass/GlassTextField.d.ts +22 -0
  218. package/dist/glass/GlassTextField.js +12 -0
  219. package/dist/glass/MaterialEffectRoot.d.ts +9 -0
  220. package/dist/glass/MaterialEffectRoot.js +189 -0
  221. package/dist/glass/Menu.d.ts +3 -0
  222. package/dist/glass/Menu.js +35 -0
  223. package/dist/glass/MenuStack.d.ts +23 -0
  224. package/dist/glass/MenuStack.js +371 -0
  225. package/dist/glass/MenuSymbol.d.ts +7 -0
  226. package/dist/glass/MenuSymbol.js +16 -0
  227. package/dist/glass/MorphEllipsisArtwork.d.ts +2 -0
  228. package/dist/glass/MorphEllipsisArtwork.js +6 -0
  229. package/dist/glass/TabBar.d.ts +29 -0
  230. package/dist/glass/TabBar.js +176 -0
  231. package/dist/glass/capability.d.ts +25 -0
  232. package/dist/glass/capability.js +63 -0
  233. package/dist/glass/captureWindow.d.ts +60 -0
  234. package/dist/glass/captureWindow.js +119 -0
  235. package/dist/glass/confusionSession.d.ts +41 -0
  236. package/dist/glass/confusionSession.js +44 -0
  237. package/dist/glass/contactPhysics.d.ts +130 -0
  238. package/dist/glass/contactPhysics.js +214 -0
  239. package/dist/glass/context.d.ts +37 -0
  240. package/dist/glass/context.js +11 -0
  241. package/dist/glass/errorAlert.d.ts +6 -0
  242. package/dist/glass/errorAlert.js +57 -0
  243. package/dist/glass/errors.d.ts +22 -0
  244. package/dist/glass/errors.js +78 -0
  245. package/dist/glass/failurePolicy.d.ts +4 -0
  246. package/dist/glass/failurePolicy.js +20 -0
  247. package/dist/glass/fallback/material.d.ts +16 -0
  248. package/dist/glass/fallback/material.js +87 -0
  249. package/dist/glass/fallback/regions.d.ts +16 -0
  250. package/dist/glass/fallback/regions.js +249 -0
  251. package/dist/glass/fallback/runtime.d.ts +72 -0
  252. package/dist/glass/fallback/runtime.js +278 -0
  253. package/dist/glass/fallback/selection.d.ts +2 -0
  254. package/dist/glass/fallback/selection.js +9 -0
  255. package/dist/glass/fieldGeometry.d.ts +28 -0
  256. package/dist/glass/fieldGeometry.js +64 -0
  257. package/dist/glass/fieldMotion.d.ts +42 -0
  258. package/dist/glass/fieldMotion.js +47 -0
  259. package/dist/glass/glassContact.d.ts +76 -0
  260. package/dist/glass/glassContact.js +153 -0
  261. package/dist/glass/glassProbeSettings.d.ts +18 -0
  262. package/dist/glass/glassProbeSettings.js +133 -0
  263. package/dist/glass/lens/Scene.d.ts +108 -0
  264. package/dist/glass/lens/Scene.js +553 -0
  265. package/dist/glass/lens/backgrounds.json +103 -0
  266. package/dist/glass/lens/bitmapBackdrop.d.ts +14 -0
  267. package/dist/glass/lens/bitmapBackdrop.js +35 -0
  268. package/dist/glass/lens/controlLift.d.ts +94 -0
  269. package/dist/glass/lens/controlLift.js +78 -0
  270. package/dist/glass/lens/data.d.ts +19 -0
  271. package/dist/glass/lens/data.js +161 -0
  272. package/dist/glass/lens/drawableTop.d.ts +16 -0
  273. package/dist/glass/lens/drawableTop.js +15 -0
  274. package/dist/glass/lens/icons.d.ts +9 -0
  275. package/dist/glass/lens/icons.js +34 -0
  276. package/dist/glass/lens/interactiveContact.d.ts +33 -0
  277. package/dist/glass/lens/interactiveContact.js +158 -0
  278. package/dist/glass/lens/interactivePress.d.ts +95 -0
  279. package/dist/glass/lens/interactivePress.js +169 -0
  280. package/dist/glass/lens/ios27GlyphFit.json +126 -0
  281. package/dist/glass/lens/lensLightingSamples.json +1 -0
  282. package/dist/glass/lens/lensPress.d.ts +22 -0
  283. package/dist/glass/lens/lensPress.js +68 -0
  284. package/dist/glass/lens/lensPressSamples.json +1 -0
  285. package/dist/glass/lens/liquidMotion.d.ts +50 -0
  286. package/dist/glass/lens/liquidMotion.js +239 -0
  287. package/dist/glass/lens/materialGlassRecipes.json +776 -0
  288. package/dist/glass/lens/materialUniforms.d.ts +22 -0
  289. package/dist/glass/lens/materialUniforms.js +117 -0
  290. package/dist/glass/lens/menu-closing-close-fit.json +380 -0
  291. package/dist/glass/lens/menu-opening-native-fits.json +911 -0
  292. package/dist/glass/lens/menuContextFit.json +88 -0
  293. package/dist/glass/lens/menuContextOpacity.json +98 -0
  294. package/dist/glass/lens/menuContextPresentation.d.ts +15 -0
  295. package/dist/glass/lens/menuContextPresentation.js +65 -0
  296. package/dist/glass/lens/menuCornerFit.json +252 -0
  297. package/dist/glass/lens/menuCornerMotion.d.ts +9 -0
  298. package/dist/glass/lens/menuCornerMotion.js +5 -0
  299. package/dist/glass/lens/menuDropFit.json +64 -0
  300. package/dist/glass/lens/menuField.d.ts +178 -0
  301. package/dist/glass/lens/menuField.js +564 -0
  302. package/dist/glass/lens/menuGesturePresentation.d.ts +12 -0
  303. package/dist/glass/lens/menuGesturePresentation.js +42 -0
  304. package/dist/glass/lens/menuGlyphDropFit.json +38 -0
  305. package/dist/glass/lens/menuMorphFit.json +564 -0
  306. package/dist/glass/lens/menuMorphMotion.d.ts +70 -0
  307. package/dist/glass/lens/menuMorphMotion.js +219 -0
  308. package/dist/glass/lens/menuMorphPhoneFit.json +85 -0
  309. package/dist/glass/lens/menuMotion.d.ts +81 -0
  310. package/dist/glass/lens/menuMotion.js +323 -0
  311. package/dist/glass/lens/menuPlacement.d.ts +5 -0
  312. package/dist/glass/lens/menuPlacement.js +29 -0
  313. package/dist/glass/lens/menuSpring.d.ts +18 -0
  314. package/dist/glass/lens/menuSpring.js +29 -0
  315. package/dist/glass/lens/menuTouchLight.d.ts +13 -0
  316. package/dist/glass/lens/menuTouchLight.js +147 -0
  317. package/dist/glass/lens/mirrorConstants.d.ts +1 -0
  318. package/dist/glass/lens/mirrorConstants.js +2 -0
  319. package/dist/glass/lens/mirrorExtents.d.ts +52 -0
  320. package/dist/glass/lens/mirrorExtents.js +264 -0
  321. package/dist/glass/lens/mirrorInvalidation.d.ts +6 -0
  322. package/dist/glass/lens/mirrorInvalidation.js +10 -0
  323. package/dist/glass/lens/mirrorReuse.d.ts +20 -0
  324. package/dist/glass/lens/mirrorReuse.js +166 -0
  325. package/dist/glass/lens/motion.d.ts +62 -0
  326. package/dist/glass/lens/motion.js +93 -0
  327. package/dist/glass/lens/recordedMotion.d.ts +6 -0
  328. package/dist/glass/lens/recordedMotion.js +44 -0
  329. package/dist/glass/lens/referenceBackground.d.ts +9 -0
  330. package/dist/glass/lens/referenceBackground.js +151 -0
  331. package/dist/glass/lens/referenceProfiles.d.ts +21 -0
  332. package/dist/glass/lens/referenceProfiles.js +33 -0
  333. package/dist/glass/lens/referenceRegularTint.d.ts +12 -0
  334. package/dist/glass/lens/referenceRegularTint.js +41 -0
  335. package/dist/glass/lens/scopeSegments.d.ts +12 -0
  336. package/dist/glass/lens/scopeSegments.js +18 -0
  337. package/dist/glass/lens/scrollAnchoring.d.ts +15 -0
  338. package/dist/glass/lens/scrollAnchoring.js +17 -0
  339. package/dist/glass/lens/selectionParameters.json +94 -0
  340. package/dist/glass/lens/shapeParameters.json +198 -0
  341. package/dist/glass/lens/tab-motion-native-fits.json +778 -0
  342. package/dist/glass/lens/tabAccessoryMotion.d.ts +52 -0
  343. package/dist/glass/lens/tabAccessoryMotion.js +52 -0
  344. package/dist/glass/lens/tabChromaRimModel.d.ts +43 -0
  345. package/dist/glass/lens/tabChromaRimModel.js +93 -0
  346. package/dist/glass/lens/tabCollapseInkSamples.json +49 -0
  347. package/dist/glass/lens/tabCompactGesture.d.ts +15 -0
  348. package/dist/glass/lens/tabCompactGesture.js +50 -0
  349. package/dist/glass/lens/tabGeometryAttack.json +70 -0
  350. package/dist/glass/lens/tabGlyphColours.d.ts +17 -0
  351. package/dist/glass/lens/tabGlyphColours.js +38 -0
  352. package/dist/glass/lens/tabInterruptedDecaySamples.json +245 -0
  353. package/dist/glass/lens/tabInterruptedRestoreSamples.json +290 -0
  354. package/dist/glass/lens/tabMaterialModel.d.ts +10 -0
  355. package/dist/glass/lens/tabMaterialModel.js +108 -0
  356. package/dist/glass/lens/tabMinimizeInk.d.ts +15 -0
  357. package/dist/glass/lens/tabMinimizeInk.js +14 -0
  358. package/dist/glass/lens/tabMinimizeMotion.d.ts +36 -0
  359. package/dist/glass/lens/tabMinimizeMotion.js +107 -0
  360. package/dist/glass/lens/tabMinimizeSamples.json +411 -0
  361. package/dist/glass/lens/tabMotion.d.ts +91 -0
  362. package/dist/glass/lens/tabMotion.js +478 -0
  363. package/dist/glass/lens/tabMotionFit.d.ts +76 -0
  364. package/dist/glass/lens/tabMotionFit.js +61 -0
  365. package/dist/glass/lens/tabNativeSymbols.d.ts +1 -0
  366. package/dist/glass/lens/tabNativeSymbols.js +7 -0
  367. package/dist/glass/lens/tabPresentation.d.ts +21 -0
  368. package/dist/glass/lens/tabPresentation.js +20 -0
  369. package/dist/glass/lens/tabRelease.d.ts +5 -0
  370. package/dist/glass/lens/tabRelease.js +14 -0
  371. package/dist/glass/lens/tabRestoreMotion.d.ts +19 -0
  372. package/dist/glass/lens/tabRestoreMotion.js +65 -0
  373. package/dist/glass/lens/tabRestoreSamples.json +1272 -0
  374. package/dist/glass/lens/tabSearchMember.d.ts +38 -0
  375. package/dist/glass/lens/tabSearchMember.js +74 -0
  376. package/dist/glass/lens/tabSelectionMaterial.d.ts +20 -0
  377. package/dist/glass/lens/tabSelectionMaterial.js +23 -0
  378. package/dist/glass/lens/tabSelectionMeasurements.test-fixture.d.ts +9 -0
  379. package/dist/glass/lens/tabSelectionMeasurements.test-fixture.js +74 -0
  380. package/dist/glass/lens/tabSettingsSymbol.d.ts +1 -0
  381. package/dist/glass/lens/tabSettingsSymbol.js +2 -0
  382. package/dist/glass/lens/tabShapeResponse.d.ts +7 -0
  383. package/dist/glass/lens/tabShapeResponse.js +30 -0
  384. package/dist/glass/lens/theme.d.ts +18 -0
  385. package/dist/glass/lens/theme.js +40 -0
  386. package/dist/glass/lens/trace.d.ts +2 -0
  387. package/dist/glass/lens/trace.js +27 -0
  388. package/dist/glass/liquidContext.d.ts +32 -0
  389. package/dist/glass/liquidContext.js +2 -0
  390. package/dist/glass/menuPanelPlacement.d.ts +51 -0
  391. package/dist/glass/menuPanelPlacement.js +128 -0
  392. package/dist/glass/menuPresenter.d.ts +34 -0
  393. package/dist/glass/menuPresenter.js +983 -0
  394. package/dist/glass/menuSymbolMasks.d.ts +1 -0
  395. package/dist/glass/menuSymbolMasks.js +1 -0
  396. package/dist/glass/menuSymbolTokens.d.ts +22 -0
  397. package/dist/glass/menuSymbolTokens.js +12 -0
  398. package/dist/glass/menuTriggerGeometry.d.ts +99 -0
  399. package/dist/glass/menuTriggerGeometry.js +126 -0
  400. package/dist/glass/menuTriggerSnapshot.d.ts +77 -0
  401. package/dist/glass/menuTriggerSnapshot.js +69 -0
  402. package/dist/glass/menuTypes.d.ts +22 -0
  403. package/dist/glass/menuTypes.js +1 -0
  404. package/dist/glass/morphField.d.ts +18 -0
  405. package/dist/glass/morphField.js +139 -0
  406. package/dist/glass/presentationFrame.d.ts +43 -0
  407. package/dist/glass/presentationFrame.js +82 -0
  408. package/dist/glass/pressHighlight.d.ts +9 -0
  409. package/dist/glass/pressHighlight.js +158 -0
  410. package/dist/glass/regionRegistry.d.ts +93 -0
  411. package/dist/glass/regionRegistry.js +313 -0
  412. package/dist/glass/regions.d.ts +262 -0
  413. package/dist/glass/regions.js +147 -0
  414. package/dist/glass/regularMaterialContext.d.ts +45 -0
  415. package/dist/glass/regularMaterialContext.js +118 -0
  416. package/dist/glass/regularTriggerMaterial.d.ts +19 -0
  417. package/dist/glass/regularTriggerMaterial.js +111 -0
  418. package/dist/glass/regularTriggerRim.d.ts +163 -0
  419. package/dist/glass/regularTriggerRim.js +436 -0
  420. package/dist/glass/renderSpecs.d.ts +454 -0
  421. package/dist/glass/renderSpecs.js +231 -0
  422. package/dist/glass/rendererContract.d.ts +205 -0
  423. package/dist/glass/rendererContract.js +18 -0
  424. package/dist/glass/shapeTrack.d.ts +53 -0
  425. package/dist/glass/shapeTrack.js +74 -0
  426. package/dist/glass/shapeTrackRegistry.d.ts +40 -0
  427. package/dist/glass/shapeTrackRegistry.js +49 -0
  428. package/dist/glass/sourceDamage.d.ts +6 -0
  429. package/dist/glass/sourceDamage.js +8 -0
  430. package/dist/glass/submenuMotion.d.ts +205 -0
  431. package/dist/glass/submenuMotion.js +306 -0
  432. package/dist/glass/tabBarModel.d.ts +12 -0
  433. package/dist/glass/tabBarModel.js +32 -0
  434. package/dist/glass/testing.d.ts +14 -0
  435. package/dist/glass/testing.js +14 -0
  436. package/dist/glass/tokens.d.ts +79 -0
  437. package/dist/glass/tokens.js +86 -0
  438. package/dist/glass/toolbarMaterialContext.d.ts +28 -0
  439. package/dist/glass/toolbarMaterialContext.js +66 -0
  440. package/dist/glass/topLayer.d.ts +5 -0
  441. package/dist/glass/topLayer.js +10 -0
  442. package/dist/glass/unionOutline.d.ts +11 -0
  443. package/dist/glass/unionOutline.js +98 -0
  444. package/dist/glass/visibleDeadline.d.ts +21 -0
  445. package/dist/glass/visibleDeadline.js +61 -0
  446. package/dist/glass/webgpu/accessoryMorph.d.ts +99 -0
  447. package/dist/glass/webgpu/accessoryMorph.js +473 -0
  448. package/dist/glass/webgpu/accessoryTrack.d.ts +47 -0
  449. package/dist/glass/webgpu/accessoryTrack.js +59 -0
  450. package/dist/glass/webgpu/areaMips.d.ts +50 -0
  451. package/dist/glass/webgpu/areaMips.js +166 -0
  452. package/dist/glass/webgpu/backdrop.d.ts +86 -0
  453. package/dist/glass/webgpu/backdrop.js +243 -0
  454. package/dist/glass/webgpu/backdropLayers.d.ts +29 -0
  455. package/dist/glass/webgpu/backdropLayers.js +182 -0
  456. package/dist/glass/webgpu/backgroundLayers.d.ts +71 -0
  457. package/dist/glass/webgpu/backgroundLayers.js +385 -0
  458. package/dist/glass/webgpu/cadence.d.ts +18 -0
  459. package/dist/glass/webgpu/cadence.js +35 -0
  460. package/dist/glass/webgpu/canvasSubmission.d.ts +6 -0
  461. package/dist/glass/webgpu/canvasSubmission.js +22 -0
  462. package/dist/glass/webgpu/capture.d.ts +77 -0
  463. package/dist/glass/webgpu/capture.js +534 -0
  464. package/dist/glass/webgpu/captureBands.d.ts +39 -0
  465. package/dist/glass/webgpu/captureBands.js +53 -0
  466. package/dist/glass/webgpu/captureContext.d.ts +1 -0
  467. package/dist/glass/webgpu/captureContext.js +6 -0
  468. package/dist/glass/webgpu/captureDemand.d.ts +44 -0
  469. package/dist/glass/webgpu/captureDemand.js +81 -0
  470. package/dist/glass/webgpu/captureRelease.d.ts +18 -0
  471. package/dist/glass/webgpu/captureRelease.js +39 -0
  472. package/dist/glass/webgpu/client.d.ts +49 -0
  473. package/dist/glass/webgpu/client.js +336 -0
  474. package/dist/glass/webgpu/contextBackdrop.d.ts +6 -0
  475. package/dist/glass/webgpu/contextBackdrop.js +13 -0
  476. package/dist/glass/webgpu/contextComposite.d.ts +64 -0
  477. package/dist/glass/webgpu/contextComposite.js +66 -0
  478. package/dist/glass/webgpu/decodedImage.d.ts +1 -0
  479. package/dist/glass/webgpu/decodedImage.js +2 -0
  480. package/dist/glass/webgpu/deviceLimits.d.ts +5 -0
  481. package/dist/glass/webgpu/deviceLimits.js +8 -0
  482. package/dist/glass/webgpu/edgePass.d.ts +9 -0
  483. package/dist/glass/webgpu/edgePass.js +170 -0
  484. package/dist/glass/webgpu/entry.worker.d.ts +1 -0
  485. package/dist/glass/webgpu/entry.worker.js +28 -0
  486. package/dist/glass/webgpu/errorCode.d.ts +3 -0
  487. package/dist/glass/webgpu/errorCode.js +27 -0
  488. package/dist/glass/webgpu/errors.d.ts +8 -0
  489. package/dist/glass/webgpu/errors.js +55 -0
  490. package/dist/glass/webgpu/fieldInk.d.ts +9 -0
  491. package/dist/glass/webgpu/fieldInk.js +62 -0
  492. package/dist/glass/webgpu/foreground.d.ts +29 -0
  493. package/dist/glass/webgpu/foreground.js +313 -0
  494. package/dist/glass/webgpu/frameClock.d.ts +34 -0
  495. package/dist/glass/webgpu/frameClock.js +60 -0
  496. package/dist/glass/webgpu/frameGraph.d.ts +57 -0
  497. package/dist/glass/webgpu/frameGraph.js +287 -0
  498. package/dist/glass/webgpu/frameProbe.d.ts +58 -0
  499. package/dist/glass/webgpu/frameProbe.js +181 -0
  500. package/dist/glass/webgpu/interactionProfiles.d.ts +10 -0
  501. package/dist/glass/webgpu/interactionProfiles.js +25 -0
  502. package/dist/glass/webgpu/keptGlyphs.d.ts +68 -0
  503. package/dist/glass/webgpu/keptGlyphs.js +85 -0
  504. package/dist/glass/webgpu/keyboardBackdrop.d.ts +12 -0
  505. package/dist/glass/webgpu/keyboardBackdrop.js +51 -0
  506. package/dist/glass/webgpu/lagTrace.d.ts +31 -0
  507. package/dist/glass/webgpu/lagTrace.js +22 -0
  508. package/dist/glass/webgpu/layers.d.ts +100 -0
  509. package/dist/glass/webgpu/layers.js +301 -0
  510. package/dist/glass/webgpu/lensDebug.d.ts +4 -0
  511. package/dist/glass/webgpu/lensDebug.js +28 -0
  512. package/dist/glass/webgpu/lensDiffusion.d.ts +2 -0
  513. package/dist/glass/webgpu/lensDiffusion.js +20 -0
  514. package/dist/glass/webgpu/lensLightingFit.json +222 -0
  515. package/dist/glass/webgpu/menuLiftInput.d.ts +30 -0
  516. package/dist/glass/webgpu/menuLiftInput.js +39 -0
  517. package/dist/glass/webgpu/menuSurfaceGuard.d.ts +17 -0
  518. package/dist/glass/webgpu/menuSurfaceGuard.js +26 -0
  519. package/dist/glass/webgpu/minimize.d.ts +184 -0
  520. package/dist/glass/webgpu/minimize.js +470 -0
  521. package/dist/glass/webgpu/navigationAtlasCopy.d.ts +12 -0
  522. package/dist/glass/webgpu/navigationAtlasCopy.js +121 -0
  523. package/dist/glass/webgpu/navigationTracks.d.ts +3 -0
  524. package/dist/glass/webgpu/navigationTracks.js +84 -0
  525. package/dist/glass/webgpu/passes.d.ts +204 -0
  526. package/dist/glass/webgpu/passes.js +394 -0
  527. package/dist/glass/webgpu/pendingSurfaceInput.d.ts +29 -0
  528. package/dist/glass/webgpu/pendingSurfaceInput.js +51 -0
  529. package/dist/glass/webgpu/preparedSourcePixels.d.ts +21 -0
  530. package/dist/glass/webgpu/preparedSourcePixels.js +43 -0
  531. package/dist/glass/webgpu/presentationBackdrop.d.ts +3 -0
  532. package/dist/glass/webgpu/presentationBackdrop.js +33 -0
  533. package/dist/glass/webgpu/presentationDiffusion.d.ts +48 -0
  534. package/dist/glass/webgpu/presentationDiffusion.js +57 -0
  535. package/dist/glass/webgpu/presentationMaterial.d.ts +9 -0
  536. package/dist/glass/webgpu/presentationMaterial.js +156 -0
  537. package/dist/glass/webgpu/presenterViewport.d.ts +11 -0
  538. package/dist/glass/webgpu/presenterViewport.js +193 -0
  539. package/dist/glass/webgpu/production.d.ts +552 -0
  540. package/dist/glass/webgpu/production.js +1929 -0
  541. package/dist/glass/webgpu/productionInstalls.d.ts +53 -0
  542. package/dist/glass/webgpu/productionInstalls.js +225 -0
  543. package/dist/glass/webgpu/productionNavigation.d.ts +5 -0
  544. package/dist/glass/webgpu/productionNavigation.js +360 -0
  545. package/dist/glass/webgpu/productionPinnedTop.d.ts +80 -0
  546. package/dist/glass/webgpu/productionPinnedTop.js +77 -0
  547. package/dist/glass/webgpu/productionPinnedTopPrepare.d.ts +21 -0
  548. package/dist/glass/webgpu/productionPinnedTopPrepare.js +132 -0
  549. package/dist/glass/webgpu/productionPlanes.d.ts +135 -0
  550. package/dist/glass/webgpu/productionPlanes.js +412 -0
  551. package/dist/glass/webgpu/productionPrepare.d.ts +18 -0
  552. package/dist/glass/webgpu/productionPrepare.js +833 -0
  553. package/dist/glass/webgpu/productionTracks.d.ts +73 -0
  554. package/dist/glass/webgpu/productionTracks.js +22 -0
  555. package/dist/glass/webgpu/productionViewport.d.ts +20 -0
  556. package/dist/glass/webgpu/productionViewport.js +52 -0
  557. package/dist/glass/webgpu/profile.d.ts +37 -0
  558. package/dist/glass/webgpu/profile.js +101 -0
  559. package/dist/glass/webgpu/raster.d.ts +337 -0
  560. package/dist/glass/webgpu/raster.js +1360 -0
  561. package/dist/glass/webgpu/rasterMaterial.d.ts +19 -0
  562. package/dist/glass/webgpu/rasterMaterial.js +197 -0
  563. package/dist/glass/webgpu/rasterShaders.d.ts +7 -0
  564. package/dist/glass/webgpu/rasterShaders.js +105 -0
  565. package/dist/glass/webgpu/rasterUniforms.d.ts +304 -0
  566. package/dist/glass/webgpu/rasterUniforms.js +415 -0
  567. package/dist/glass/webgpu/regionBackdrop.d.ts +8 -0
  568. package/dist/glass/webgpu/regionBackdrop.js +12 -0
  569. package/dist/glass/webgpu/regionBridge.d.ts +145 -0
  570. package/dist/glass/webgpu/regionBridge.js +1691 -0
  571. package/dist/glass/webgpu/regionScene.d.ts +294 -0
  572. package/dist/glass/webgpu/regionScene.js +2144 -0
  573. package/dist/glass/webgpu/renderer.d.ts +8 -0
  574. package/dist/glass/webgpu/renderer.js +1478 -0
  575. package/dist/glass/webgpu/residentPlanes.d.ts +69 -0
  576. package/dist/glass/webgpu/residentPlanes.js +104 -0
  577. package/dist/glass/webgpu/restMaterial.d.ts +6 -0
  578. package/dist/glass/webgpu/restMaterial.js +65 -0
  579. package/dist/glass/webgpu/resumeOverlay.d.ts +44 -0
  580. package/dist/glass/webgpu/resumeOverlay.js +82 -0
  581. package/dist/glass/webgpu/sampleTrace.d.ts +11 -0
  582. package/dist/glass/webgpu/sampleTrace.js +50 -0
  583. package/dist/glass/webgpu/scrollEdgeBackdrop.d.ts +89 -0
  584. package/dist/glass/webgpu/scrollEdgeBackdrop.js +177 -0
  585. package/dist/glass/webgpu/scrollEdgePose.d.ts +4 -0
  586. package/dist/glass/webgpu/scrollEdgePose.js +49 -0
  587. package/dist/glass/webgpu/selectionThumb.d.ts +81 -0
  588. package/dist/glass/webgpu/selectionThumb.js +209 -0
  589. package/dist/glass/webgpu/shaders.d.ts +67 -0
  590. package/dist/glass/webgpu/shaders.js +595 -0
  591. package/dist/glass/webgpu/sharedLift.d.ts +7 -0
  592. package/dist/glass/webgpu/sharedLift.js +223 -0
  593. package/dist/glass/webgpu/sourcePixels.d.ts +42 -0
  594. package/dist/glass/webgpu/sourcePixels.js +140 -0
  595. package/dist/glass/webgpu/sourcePixels.worker.d.ts +1 -0
  596. package/dist/glass/webgpu/sourcePixels.worker.js +62 -0
  597. package/dist/glass/webgpu/tabGlyphInk.d.ts +14 -0
  598. package/dist/glass/webgpu/tabGlyphInk.js +72 -0
  599. package/dist/glass/webgpu/touchLight.d.ts +4 -0
  600. package/dist/glass/webgpu/touchLight.js +15 -0
  601. package/dist/glass/worker/client.d.ts +21 -0
  602. package/dist/glass/worker/client.js +152 -0
  603. package/dist/glass/worker/experiment.d.ts +13 -0
  604. package/dist/glass/worker/experiment.js +221 -0
  605. package/dist/glass/worker/fixture.d.ts +21 -0
  606. package/dist/glass/worker/fixture.js +152 -0
  607. package/dist/glass/worker/protocol.d.ts +439 -0
  608. package/dist/glass/worker/protocol.js +5 -0
  609. package/dist/graphicsProbe.d.ts +19 -0
  610. package/dist/graphicsProbe.js +111 -0
  611. package/dist/haptics/SensoryButton.d.ts +21 -0
  612. package/dist/haptics/SensoryButton.js +80 -0
  613. package/dist/image/ContentAdmission.d.ts +19 -0
  614. package/dist/image/ContentAdmission.js +70 -0
  615. package/dist/image/Image.d.ts +30 -0
  616. package/dist/image/Image.js +341 -0
  617. package/dist/image/asset.d.ts +9 -0
  618. package/dist/image/asset.js +1 -0
  619. package/dist/image/contentReadiness.d.ts +7 -0
  620. package/dist/image/contentReadiness.js +54 -0
  621. package/dist/image/imports.d.ts +4 -0
  622. package/dist/image/resource.d.ts +53 -0
  623. package/dist/image/resource.js +286 -0
  624. package/dist/image/vite.d.ts +3 -0
  625. package/dist/image/vite.js +63 -0
  626. package/dist/index.d.ts +87 -0
  627. package/dist/index.js +102 -0
  628. package/dist/install.d.ts +8 -0
  629. package/dist/install.js +8 -0
  630. package/dist/internal.d.ts +96 -0
  631. package/dist/internal.js +80 -0
  632. package/dist/keyboard/adapter.d.ts +82 -0
  633. package/dist/keyboard/adapter.js +727 -0
  634. package/dist/keyboard/avoidance.d.ts +24 -0
  635. package/dist/keyboard/avoidance.js +283 -0
  636. package/dist/keyboard/caretMirror.d.ts +13 -0
  637. package/dist/keyboard/caretMirror.js +122 -0
  638. package/dist/keyboard/expectedKeyboard.d.ts +10 -0
  639. package/dist/keyboard/expectedKeyboard.js +60 -0
  640. package/dist/keyboard/geometry.d.ts +10 -0
  641. package/dist/keyboard/geometry.js +21 -0
  642. package/dist/keyboard/modalTapFocus.d.ts +41 -0
  643. package/dist/keyboard/modalTapFocus.js +224 -0
  644. package/dist/keyboard/motion.d.ts +54 -0
  645. package/dist/keyboard/motion.js +80 -0
  646. package/dist/keyboard/translation.d.ts +12 -0
  647. package/dist/keyboard/translation.js +19 -0
  648. package/dist/layout/adaptiveTabsContext.d.ts +5 -0
  649. package/dist/layout/adaptiveTabsContext.js +2 -0
  650. package/dist/layout/deviceIdiom.d.ts +4 -0
  651. package/dist/layout/deviceIdiom.js +12 -0
  652. package/dist/layout/layoutClass.d.ts +44 -0
  653. package/dist/layout/layoutClass.js +102 -0
  654. package/dist/layout/navigationLayoutContext.d.ts +8 -0
  655. package/dist/layout/navigationLayoutContext.js +5 -0
  656. package/dist/list-form/ListForm.d.ts +158 -0
  657. package/dist/list-form/ListForm.js +427 -0
  658. package/dist/list-form/ListItem.d.ts +30 -0
  659. package/dist/list-form/ListItem.js +251 -0
  660. package/dist/list-form/RowLabel.d.ts +14 -0
  661. package/dist/list-form/RowLabel.js +11 -0
  662. package/dist/list-form/Slider.d.ts +18 -0
  663. package/dist/list-form/Slider.js +235 -0
  664. package/dist/list-form/StepperButton.d.ts +9 -0
  665. package/dist/list-form/StepperButton.js +60 -0
  666. package/dist/list-form/Toggle.d.ts +16 -0
  667. package/dist/list-form/Toggle.js +204 -0
  668. package/dist/list-form/editMotion.d.ts +15 -0
  669. package/dist/list-form/editMotion.js +25 -0
  670. package/dist/list-form/editing.d.ts +102 -0
  671. package/dist/list-form/editing.js +51 -0
  672. package/dist/list-form/listContext.d.ts +4 -0
  673. package/dist/list-form/listContext.js +5 -0
  674. package/dist/list-form/offsets.d.ts +26 -0
  675. package/dist/list-form/offsets.js +34 -0
  676. package/dist/list-form/reorder.d.ts +20 -0
  677. package/dist/list-form/reorder.js +193 -0
  678. package/dist/list-form/rowMotion.d.ts +11 -0
  679. package/dist/list-form/rowMotion.js +236 -0
  680. package/dist/list-form/rowMotionScope.d.ts +14 -0
  681. package/dist/list-form/rowMotionScope.js +61 -0
  682. package/dist/list-form/separatorInsets.d.ts +4 -0
  683. package/dist/list-form/separatorInsets.js +87 -0
  684. package/dist/list-form/sliderContact.d.ts +40 -0
  685. package/dist/list-form/sliderContact.js +98 -0
  686. package/dist/list-form/state.d.ts +5 -0
  687. package/dist/list-form/state.js +8 -0
  688. package/dist/list-form/toggleContact.d.ts +55 -0
  689. package/dist/list-form/toggleContact.js +164 -0
  690. package/dist/media/controller.d.ts +7 -0
  691. package/dist/media/controller.js +612 -0
  692. package/dist/media/react.d.ts +9 -0
  693. package/dist/media/react.js +38 -0
  694. package/dist/media/systemMedia.d.ts +6 -0
  695. package/dist/media/systemMedia.js +200 -0
  696. package/dist/media/types.d.ts +83 -0
  697. package/dist/media/types.js +1 -0
  698. package/dist/menu/menuContact.d.ts +20 -0
  699. package/dist/menu/menuContact.js +286 -0
  700. package/dist/menu/menuGesture.d.ts +84 -0
  701. package/dist/menu/menuGesture.js +502 -0
  702. package/dist/menu/menuInteraction.d.ts +17 -0
  703. package/dist/menu/menuInteraction.js +34 -0
  704. package/dist/menu/menuOutside.d.ts +9 -0
  705. package/dist/menu/menuOutside.js +58 -0
  706. package/dist/menu/menuPanelContact.d.ts +11 -0
  707. package/dist/menu/menuPanelContact.js +77 -0
  708. package/dist/menu/menuTriggerHold.d.ts +3 -0
  709. package/dist/menu/menuTriggerHold.js +52 -0
  710. package/dist/menu/sampledMotion.d.ts +37 -0
  711. package/dist/menu/sampledMotion.js +86 -0
  712. package/dist/modal/lifecycle.d.ts +10 -0
  713. package/dist/modal/lifecycle.js +189 -0
  714. package/dist/motion/TransitionView.d.ts +12 -0
  715. package/dist/motion/TransitionView.js +118 -0
  716. package/dist/motion/animate.d.ts +20 -0
  717. package/dist/motion/animate.js +79 -0
  718. package/dist/motion/animationValue.d.ts +25 -0
  719. package/dist/motion/animationValue.js +42 -0
  720. package/dist/motion/composerMotion.d.ts +3 -0
  721. package/dist/motion/composerMotion.js +15 -0
  722. package/dist/motion/layoutTransaction.d.ts +7 -0
  723. package/dist/motion/layoutTransaction.js +28 -0
  724. package/dist/motion/matchedGeometry.d.ts +55 -0
  725. package/dist/motion/matchedGeometry.js +412 -0
  726. package/dist/motion/springPath.d.ts +27 -0
  727. package/dist/motion/springPath.js +46 -0
  728. package/dist/motion/springTrack.d.ts +33 -0
  729. package/dist/motion/springTrack.js +69 -0
  730. package/dist/motion/transition.d.ts +48 -0
  731. package/dist/motion/transition.js +56 -0
  732. package/dist/motion/transitionImages.d.ts +7 -0
  733. package/dist/motion/transitionImages.js +49 -0
  734. package/dist/motionProbe.d.ts +227 -0
  735. package/dist/motionProbe.js +697 -0
  736. package/dist/motionProbeControls.d.ts +2 -0
  737. package/dist/motionProbeControls.js +118 -0
  738. package/dist/motionProbeDelivery.d.ts +15 -0
  739. package/dist/motionProbeDelivery.js +84 -0
  740. package/dist/navigation/DetailList.d.ts +9 -0
  741. package/dist/navigation/DetailList.js +7 -0
  742. package/dist/navigation/NavigationChrome.d.ts +18 -0
  743. package/dist/navigation/NavigationChrome.js +195 -0
  744. package/dist/navigation/NavigationSearchRow.d.ts +9 -0
  745. package/dist/navigation/NavigationSearchRow.js +101 -0
  746. package/dist/navigation/NavigationTitleSlots.d.ts +18 -0
  747. package/dist/navigation/NavigationTitleSlots.js +64 -0
  748. package/dist/navigation/NavigatorHost.d.ts +17 -0
  749. package/dist/navigation/NavigatorHost.js +534 -0
  750. package/dist/navigation/ScreenContainer.d.ts +31 -0
  751. package/dist/navigation/ScreenContainer.js +219 -0
  752. package/dist/navigation/ScrubSourceFrames.d.ts +18 -0
  753. package/dist/navigation/ScrubSourceFrames.js +67 -0
  754. package/dist/navigation/Sidebar.d.ts +16 -0
  755. package/dist/navigation/Sidebar.js +20 -0
  756. package/dist/navigation/SidebarSymbol.d.ts +4 -0
  757. package/dist/navigation/SidebarSymbol.js +6 -0
  758. package/dist/navigation/ToolbarGlass.d.ts +2 -0
  759. package/dist/navigation/ToolbarGlass.js +429 -0
  760. package/dist/navigation/TransitionEdge.d.ts +4 -0
  761. package/dist/navigation/TransitionEdge.js +33 -0
  762. package/dist/navigation/bottomToolbarGeometry.d.ts +6 -0
  763. package/dist/navigation/bottomToolbarGeometry.js +14 -0
  764. package/dist/navigation/chromeCurves.d.ts +48 -0
  765. package/dist/navigation/chromeCurves.js +255 -0
  766. package/dist/navigation/glassTransition.d.ts +32 -0
  767. package/dist/navigation/glassTransition.js +55 -0
  768. package/dist/navigation/horizontalDrag.d.ts +6 -0
  769. package/dist/navigation/horizontalDrag.js +15 -0
  770. package/dist/navigation/interactivePop.d.ts +45 -0
  771. package/dist/navigation/interactivePop.js +86 -0
  772. package/dist/navigation/interactivePopTypes.d.ts +85 -0
  773. package/dist/navigation/interactivePopTypes.js +36 -0
  774. package/dist/navigation/keyboard.d.ts +9 -0
  775. package/dist/navigation/keyboard.js +55 -0
  776. package/dist/navigation/motion.d.ts +19 -0
  777. package/dist/navigation/motion.js +645 -0
  778. package/dist/navigation/motionTokens.d.ts +43 -0
  779. package/dist/navigation/motionTokens.js +75 -0
  780. package/dist/navigation/nativeScrubExperiment.d.ts +5 -0
  781. package/dist/navigation/nativeScrubExperiment.js +153 -0
  782. package/dist/navigation/nativeScrubSource.d.ts +15 -0
  783. package/dist/navigation/nativeScrubSource.js +88 -0
  784. package/dist/navigation/navigationChromeModel.d.ts +8 -0
  785. package/dist/navigation/navigationChromeModel.js +30 -0
  786. package/dist/navigation/navigationContext.d.ts +22 -0
  787. package/dist/navigation/navigationContext.js +65 -0
  788. package/dist/navigation/navigationEdge.d.ts +4 -0
  789. package/dist/navigation/navigationEdge.js +101 -0
  790. package/dist/navigation/pointerPop.d.ts +32 -0
  791. package/dist/navigation/pointerPop.js +206 -0
  792. package/dist/navigation/probeLayers.d.ts +7 -0
  793. package/dist/navigation/probeLayers.js +8 -0
  794. package/dist/navigation/registry.d.ts +14 -0
  795. package/dist/navigation/registry.js +31 -0
  796. package/dist/navigation/releaseDecision.d.ts +21 -0
  797. package/dist/navigation/releaseDecision.js +94 -0
  798. package/dist/navigation/releaseTrajectory.d.ts +20 -0
  799. package/dist/navigation/releaseTrajectory.js +95 -0
  800. package/dist/navigation/releaseVelocity.d.ts +9 -0
  801. package/dist/navigation/releaseVelocity.js +38 -0
  802. package/dist/navigation/routeCodec.d.ts +33 -0
  803. package/dist/navigation/routeCodec.js +123 -0
  804. package/dist/navigation/scrollEdge.d.ts +18 -0
  805. package/dist/navigation/scrollEdge.js +66 -0
  806. package/dist/navigation/scrubFrameLoop.d.ts +44 -0
  807. package/dist/navigation/scrubFrameLoop.js +129 -0
  808. package/dist/navigation/sidebarSelection.d.ts +5 -0
  809. package/dist/navigation/sidebarSelection.js +8 -0
  810. package/dist/navigation/splitContext.d.ts +17 -0
  811. package/dist/navigation/splitContext.js +9 -0
  812. package/dist/navigation/splitState.d.ts +46 -0
  813. package/dist/navigation/splitState.js +130 -0
  814. package/dist/navigation/stack.d.ts +25 -0
  815. package/dist/navigation/stack.js +136 -0
  816. package/dist/navigation/store.d.ts +80 -0
  817. package/dist/navigation/store.js +464 -0
  818. package/dist/navigation/toolbarGlassMotion.d.ts +40 -0
  819. package/dist/navigation/toolbarGlassMotion.js +202 -0
  820. package/dist/navigation/toolbarMinimization.d.ts +9 -0
  821. package/dist/navigation/toolbarMinimization.js +76 -0
  822. package/dist/navigation/toolbarMotionOwner.d.ts +6 -0
  823. package/dist/navigation/toolbarMotionOwner.js +30 -0
  824. package/dist/navigation/touchArbitration.d.ts +34 -0
  825. package/dist/navigation/touchArbitration.js +550 -0
  826. package/dist/navigation/tracking.d.ts +7 -0
  827. package/dist/navigation/tracking.js +19 -0
  828. package/dist/navigation/transitionBindings.d.ts +31 -0
  829. package/dist/navigation/transitionBindings.js +106 -0
  830. package/dist/navigation/transitionChrome.d.ts +31 -0
  831. package/dist/navigation/transitionChrome.js +380 -0
  832. package/dist/navigation/transitionPose.d.ts +52 -0
  833. package/dist/navigation/transitionPose.js +295 -0
  834. package/dist/navigation/types.d.ts +133 -0
  835. package/dist/navigation/types.js +1 -0
  836. package/dist/navigation/zoomDrag.d.ts +3 -0
  837. package/dist/navigation/zoomDrag.js +125 -0
  838. package/dist/navigation/zoomGeometry.d.ts +48 -0
  839. package/dist/navigation/zoomGeometry.js +94 -0
  840. package/dist/navigation/zoomGlass.d.ts +27 -0
  841. package/dist/navigation/zoomGlass.js +64 -0
  842. package/dist/navigation/zoomMotion.d.ts +73 -0
  843. package/dist/navigation/zoomMotion.js +104 -0
  844. package/dist/navigation/zoomTransition.d.ts +82 -0
  845. package/dist/navigation/zoomTransition.js +975 -0
  846. package/dist/presentation/Presentation.d.ts +61 -0
  847. package/dist/presentation/Presentation.js +92 -0
  848. package/dist/presentation/PresentationSurface.d.ts +29 -0
  849. package/dist/presentation/PresentationSurface.js +586 -0
  850. package/dist/presentation/PresentedSheet.d.ts +2 -0
  851. package/dist/presentation/PresentedSheet.js +571 -0
  852. package/dist/presentation/activity.d.ts +3 -0
  853. package/dist/presentation/activity.js +24 -0
  854. package/dist/presentation/coldLaunch.d.ts +2 -0
  855. package/dist/presentation/coldLaunch.js +19 -0
  856. package/dist/presentation/dismiss.d.ts +26 -0
  857. package/dist/presentation/dismiss.js +30 -0
  858. package/dist/presentation/glassMotion.d.ts +39 -0
  859. package/dist/presentation/glassMotion.js +259 -0
  860. package/dist/presentation/glassReady.d.ts +11 -0
  861. package/dist/presentation/glassReady.js +246 -0
  862. package/dist/presentation/model.d.ts +108 -0
  863. package/dist/presentation/model.js +183 -0
  864. package/dist/presentation/motion.d.ts +56 -0
  865. package/dist/presentation/motion.js +263 -0
  866. package/dist/presentation/presentationMotion.d.ts +10 -0
  867. package/dist/presentation/presentationMotion.js +74 -0
  868. package/dist/presentation/presentationSource.d.ts +2 -0
  869. package/dist/presentation/presentationSource.js +28 -0
  870. package/dist/presentation/sheetChromeContext.d.ts +2 -0
  871. package/dist/presentation/sheetChromeContext.js +3 -0
  872. package/dist/presentation/sheetMaterialTransition.d.ts +14 -0
  873. package/dist/presentation/sheetMaterialTransition.js +33 -0
  874. package/dist/presentation/sheetReleaseMotion.d.ts +18 -0
  875. package/dist/presentation/sheetReleaseMotion.js +123 -0
  876. package/dist/presentation/useAlertKeyboardMotion.d.ts +8 -0
  877. package/dist/presentation/useAlertKeyboardMotion.js +104 -0
  878. package/dist/press/Pressable.d.ts +19 -0
  879. package/dist/press/Pressable.js +16 -0
  880. package/dist/press/activation.d.ts +20 -0
  881. package/dist/press/activation.js +28 -0
  882. package/dist/press/contactReceipt.d.ts +23 -0
  883. package/dist/press/contactReceipt.js +177 -0
  884. package/dist/press/gestureArbitration.d.ts +13 -0
  885. package/dist/press/gestureArbitration.js +38 -0
  886. package/dist/press/stateMachine.d.ts +29 -0
  887. package/dist/press/stateMachine.js +39 -0
  888. package/dist/press/tokens.d.ts +18 -0
  889. package/dist/press/tokens.js +19 -0
  890. package/dist/press/usePressInteraction.d.ts +30 -0
  891. package/dist/press/usePressInteraction.js +247 -0
  892. package/dist/public/Label.d.ts +16 -0
  893. package/dist/public/Label.js +40 -0
  894. package/dist/public/NativeFilePicker.d.ts +19 -0
  895. package/dist/public/NativeFilePicker.js +75 -0
  896. package/dist/public/Screen.d.ts +42 -0
  897. package/dist/public/Screen.js +87 -0
  898. package/dist/public/actions.d.ts +16 -0
  899. package/dist/public/actions.js +15 -0
  900. package/dist/public/buttonBorderShape.d.ts +7 -0
  901. package/dist/public/buttonBorderShape.js +9 -0
  902. package/dist/public/chrome.d.ts +3 -0
  903. package/dist/public/chrome.js +5 -0
  904. package/dist/public/colors.d.ts +29 -0
  905. package/dist/public/colors.js +28 -0
  906. package/dist/public/context.d.ts +19 -0
  907. package/dist/public/context.js +8 -0
  908. package/dist/public/controlStyle.d.ts +93 -0
  909. package/dist/public/controlStyle.js +52 -0
  910. package/dist/public/controls.d.ts +360 -0
  911. package/dist/public/controls.js +301 -0
  912. package/dist/public/definition.d.ts +65 -0
  913. package/dist/public/definition.js +58 -0
  914. package/dist/public/deviceActions.d.ts +23 -0
  915. package/dist/public/deviceActions.js +87 -0
  916. package/dist/public/environment.d.ts +77 -0
  917. package/dist/public/environment.js +171 -0
  918. package/dist/public/fieldContext.d.ts +2 -0
  919. package/dist/public/fieldContext.js +3 -0
  920. package/dist/public/filePickers.d.ts +25 -0
  921. package/dist/public/filePickers.js +11 -0
  922. package/dist/public/glass.d.ts +31 -0
  923. package/dist/public/glass.js +29 -0
  924. package/dist/public/glassValue.d.ts +19 -0
  925. package/dist/public/glassValue.js +32 -0
  926. package/dist/public/keyboard.d.ts +4 -0
  927. package/dist/public/keyboard.js +6 -0
  928. package/dist/public/navigationTransition.d.ts +48 -0
  929. package/dist/public/navigationTransition.js +49 -0
  930. package/dist/public/pickerNavigation.d.ts +7 -0
  931. package/dist/public/pickerNavigation.js +64 -0
  932. package/dist/public/presentation.d.ts +40 -0
  933. package/dist/public/presentation.js +21 -0
  934. package/dist/public/presentationContext.d.ts +2 -0
  935. package/dist/public/presentationContext.js +3 -0
  936. package/dist/public/routeRegistry.d.ts +3 -0
  937. package/dist/public/routeRegistry.js +10 -0
  938. package/dist/public/routes.d.ts +74 -0
  939. package/dist/public/routes.js +105 -0
  940. package/dist/public/runtime.d.ts +134 -0
  941. package/dist/public/runtime.js +292 -0
  942. package/dist/public/screenChrome.d.ts +91 -0
  943. package/dist/public/screenChrome.js +187 -0
  944. package/dist/public/scroll.d.ts +38 -0
  945. package/dist/public/scroll.js +7 -0
  946. package/dist/public/storage.d.ts +9 -0
  947. package/dist/public/storage.js +9 -0
  948. package/dist/public/structure.d.ts +65 -0
  949. package/dist/public/structure.js +40 -0
  950. package/dist/public/toolbar.d.ts +37 -0
  951. package/dist/public/toolbar.js +76 -0
  952. package/dist/push/PushPermissionExplainer.d.ts +14 -0
  953. package/dist/push/PushPermissionExplainer.js +30 -0
  954. package/dist/push/notifications.d.ts +54 -0
  955. package/dist/push/notifications.js +276 -0
  956. package/dist/push/routes.d.ts +20 -0
  957. package/dist/push/routes.js +63 -0
  958. package/dist/push/schema.d.ts +42 -0
  959. package/dist/push/schema.js +41 -0
  960. package/dist/push/urlProjection.d.ts +24 -0
  961. package/dist/push/urlProjection.js +207 -0
  962. package/dist/reachability/controller.d.ts +21 -0
  963. package/dist/reachability/controller.js +202 -0
  964. package/dist/reachability/model.d.ts +94 -0
  965. package/dist/reachability/model.js +131 -0
  966. package/dist/reachability/react.d.ts +29 -0
  967. package/dist/reachability/react.js +69 -0
  968. package/dist/restoration/navigation.d.ts +9 -0
  969. package/dist/restoration/navigation.js +55 -0
  970. package/dist/restoration/react.d.ts +6 -0
  971. package/dist/restoration/react.js +21 -0
  972. package/dist/restoration/routes.d.ts +22 -0
  973. package/dist/restoration/routes.js +166 -0
  974. package/dist/restoration/scene.d.ts +44 -0
  975. package/dist/restoration/scene.js +284 -0
  976. package/dist/root/SatinRoot.d.ts +25 -0
  977. package/dist/root/SatinRoot.js +512 -0
  978. package/dist/root/mountSatin.d.ts +12 -0
  979. package/dist/root/mountSatin.js +60 -0
  980. package/dist/root/runtimeContext.d.ts +26 -0
  981. package/dist/root/runtimeContext.js +30 -0
  982. package/dist/safe-area/Overlay.d.ts +9 -0
  983. package/dist/safe-area/Overlay.js +26 -0
  984. package/dist/safe-area/SafeAreaInset.d.ts +25 -0
  985. package/dist/safe-area/SafeAreaInset.js +138 -0
  986. package/dist/safe-area/bottomInsetGeometry.d.ts +12 -0
  987. package/dist/safe-area/bottomInsetGeometry.js +73 -0
  988. package/dist/safe-area/context.d.ts +15 -0
  989. package/dist/safe-area/context.js +8 -0
  990. package/dist/safe-area/displayCorners.d.ts +21 -0
  991. package/dist/safe-area/displayCorners.js +70 -0
  992. package/dist/safe-area/keyboardCarrier.d.ts +26 -0
  993. package/dist/safe-area/keyboardCarrier.js +394 -0
  994. package/dist/safe-area/keyboardCarrierGeometry.d.ts +37 -0
  995. package/dist/safe-area/keyboardCarrierGeometry.js +49 -0
  996. package/dist/safe-area/modifiers.d.ts +52 -0
  997. package/dist/safe-area/modifiers.js +86 -0
  998. package/dist/safe-area/useSafeAreaMetrics.d.ts +83 -0
  999. package/dist/safe-area/useSafeAreaMetrics.js +367 -0
  1000. package/dist/safe-area/windowChrome.d.ts +7 -0
  1001. package/dist/safe-area/windowChrome.js +14 -0
  1002. package/dist/scroll/RefreshControl.d.ts +8 -0
  1003. package/dist/scroll/RefreshControl.js +135 -0
  1004. package/dist/scroll/ScrollSurface.d.ts +62 -0
  1005. package/dist/scroll/ScrollSurface.js +278 -0
  1006. package/dist/scroll/ScrollTarget.d.ts +6 -0
  1007. package/dist/scroll/ScrollTarget.js +11 -0
  1008. package/dist/scroll/edgePolicy.d.ts +21 -0
  1009. package/dist/scroll/edgePolicy.js +17 -0
  1010. package/dist/scroll/insertionMotion.d.ts +15 -0
  1011. package/dist/scroll/insertionMotion.js +128 -0
  1012. package/dist/scroll/nativeScroll.d.ts +14 -0
  1013. package/dist/scroll/nativeScroll.js +71 -0
  1014. package/dist/scroll/position.d.ts +31 -0
  1015. package/dist/scroll/position.js +273 -0
  1016. package/dist/scroll/pressOwnership.d.ts +4 -0
  1017. package/dist/scroll/pressOwnership.js +65 -0
  1018. package/dist/scroll/refreshMotion.d.ts +9 -0
  1019. package/dist/scroll/refreshMotion.js +15 -0
  1020. package/dist/scroll/refreshable.d.ts +6 -0
  1021. package/dist/scroll/refreshable.js +50 -0
  1022. package/dist/scroll/registry.d.ts +38 -0
  1023. package/dist/scroll/registry.js +261 -0
  1024. package/dist/scroll/screenGeometry.d.ts +8 -0
  1025. package/dist/scroll/screenGeometry.js +50 -0
  1026. package/dist/scroll/scrollIndicator.d.ts +7 -0
  1027. package/dist/scroll/scrollIndicator.js +114 -0
  1028. package/dist/scroll/scrollJump.d.ts +7 -0
  1029. package/dist/scroll/scrollJump.js +16 -0
  1030. package/dist/scroll/types.d.ts +12 -0
  1031. package/dist/scroll/types.js +1 -0
  1032. package/dist/search/SearchDrawer.d.ts +16 -0
  1033. package/dist/search/SearchDrawer.js +421 -0
  1034. package/dist/search/SearchScopesBar.d.ts +6 -0
  1035. package/dist/search/SearchScopesBar.js +12 -0
  1036. package/dist/search/SearchToolbarField.d.ts +8 -0
  1037. package/dist/search/SearchToolbarField.js +115 -0
  1038. package/dist/search/searchBackdrop.d.ts +12 -0
  1039. package/dist/search/searchBackdrop.js +45 -0
  1040. package/dist/search/searchChrome.d.ts +13 -0
  1041. package/dist/search/searchChrome.js +31 -0
  1042. package/dist/search/searchMotion.d.ts +30 -0
  1043. package/dist/search/searchMotion.js +46 -0
  1044. package/dist/search/searchPlacement.d.ts +11 -0
  1045. package/dist/search/searchPlacement.js +15 -0
  1046. package/dist/search/searchable.d.ts +46 -0
  1047. package/dist/search/searchable.js +5 -0
  1048. package/dist/search/useSearchPresentation.d.ts +15 -0
  1049. package/dist/search/useSearchPresentation.js +61 -0
  1050. package/dist/server.d.ts +7 -0
  1051. package/dist/server.js +144 -0
  1052. package/dist/settings/DisclosureIndicator.d.ts +4 -0
  1053. package/dist/settings/DisclosureIndicator.js +6 -0
  1054. package/dist/settings/tokens.d.ts +129 -0
  1055. package/dist/settings/tokens.js +143 -0
  1056. package/dist/shapes/corners.d.ts +14 -0
  1057. package/dist/shapes/corners.js +80 -0
  1058. package/dist/styles.css +9078 -0
  1059. package/dist/styles.css.d.ts +3 -0
  1060. package/dist/sw/activationState.d.ts +20 -0
  1061. package/dist/sw/activationState.js +39 -0
  1062. package/dist/sw/generator.d.ts +14 -0
  1063. package/dist/sw/generator.js +26 -0
  1064. package/dist/sw/manifest.d.ts +32 -0
  1065. package/dist/sw/manifest.js +137 -0
  1066. package/dist/sw/protocol.d.ts +7 -0
  1067. package/dist/sw/protocol.js +7 -0
  1068. package/dist/sw/pushRuntime.d.ts +2 -0
  1069. package/dist/sw/pushRuntime.js +161 -0
  1070. package/dist/sw/registerAppShell.d.ts +25 -0
  1071. package/dist/sw/registerAppShell.js +259 -0
  1072. package/dist/sw/renderServiceWorker.d.ts +10 -0
  1073. package/dist/sw/renderServiceWorker.js +370 -0
  1074. package/dist/sw/requestRouting.d.ts +13 -0
  1075. package/dist/sw/requestRouting.js +26 -0
  1076. package/dist/sw/updateCheck.d.ts +2 -0
  1077. package/dist/sw/updateCheck.js +25 -0
  1078. package/dist/sw/vite.d.ts +20 -0
  1079. package/dist/sw/vite.js +71 -0
  1080. package/dist/symbols/Symbol.d.ts +33 -0
  1081. package/dist/symbols/Symbol.js +59 -0
  1082. package/dist/symbols/catalogue.d.ts +4 -0
  1083. package/dist/symbols/catalogue.js +4139 -0
  1084. package/dist/symbols/exclusions.d.ts +2 -0
  1085. package/dist/symbols/exclusions.js +4 -0
  1086. package/dist/symbols/inheritedWeight.d.ts +3 -0
  1087. package/dist/symbols/inheritedWeight.js +104 -0
  1088. package/dist/symbols/metrics.d.ts +38 -0
  1089. package/dist/symbols/metrics.js +53 -0
  1090. package/dist/symbols/svg.d.ts +3 -0
  1091. package/dist/symbols/svg.js +16 -0
  1092. package/dist/symbols/types.d.ts +30 -0
  1093. package/dist/symbols/types.js +1 -0
  1094. package/dist/tabs/TabSection.d.ts +12 -0
  1095. package/dist/tabs/TabSection.js +4 -0
  1096. package/dist/tabs/TabSidebarSurface.d.ts +7 -0
  1097. package/dist/tabs/TabSidebarSurface.js +29 -0
  1098. package/dist/tabs/TabView.d.ts +28 -0
  1099. package/dist/tabs/TabView.js +258 -0
  1100. package/dist/tabs/accessoryContact.d.ts +2 -0
  1101. package/dist/tabs/accessoryContact.js +42 -0
  1102. package/dist/tabs/compactBar.d.ts +4 -0
  1103. package/dist/tabs/compactBar.js +28 -0
  1104. package/dist/tabs/context.d.ts +8 -0
  1105. package/dist/tabs/context.js +6 -0
  1106. package/dist/tabs/keyboard.d.ts +3 -0
  1107. package/dist/tabs/keyboard.js +23 -0
  1108. package/dist/tabs/model.d.ts +6 -0
  1109. package/dist/tabs/model.js +16 -0
  1110. package/dist/tabs/presentation.d.ts +7 -0
  1111. package/dist/tabs/presentation.js +14 -0
  1112. package/dist/tabs/sourceRevision.d.ts +3 -0
  1113. package/dist/tabs/sourceRevision.js +36 -0
  1114. package/dist/tabs/tabSidebarGlyph.d.ts +2 -0
  1115. package/dist/tabs/tabSidebarGlyph.js +11 -0
  1116. package/dist/tasks/useTask.d.ts +16 -0
  1117. package/dist/tasks/useTask.js +67 -0
  1118. package/dist/testing.d.ts +9 -0
  1119. package/dist/testing.js +11 -0
  1120. package/dist/text-input/TextEditor.d.ts +25 -0
  1121. package/dist/text-input/TextEditor.js +74 -0
  1122. package/dist/text-input/TextField.d.ts +32 -0
  1123. package/dist/text-input/TextField.js +29 -0
  1124. package/dist/text-input/editorGeometry.d.ts +2 -0
  1125. package/dist/text-input/editorGeometry.js +6 -0
  1126. package/dist/text-input/editorTextLayout.d.ts +2 -0
  1127. package/dist/text-input/editorTextLayout.js +31 -0
  1128. package/dist/text-input/focusChain.d.ts +27 -0
  1129. package/dist/text-input/focusChain.js +62 -0
  1130. package/dist/text-input/kinds.d.ts +8 -0
  1131. package/dist/text-input/kinds.js +34 -0
  1132. package/dist/text-input/measureEditor.d.ts +2 -0
  1133. package/dist/text-input/measureEditor.js +50 -0
  1134. package/dist/text-input/submit.d.ts +9 -0
  1135. package/dist/text-input/submit.js +7 -0
  1136. package/dist/unstable.d.ts +16 -0
  1137. package/dist/unstable.js +16 -0
  1138. package/dist/vite.d.ts +3 -0
  1139. package/dist/vite.js +3 -0
  1140. package/dist/web/WebView.d.ts +42 -0
  1141. package/dist/web/WebView.js +115 -0
  1142. package/dist/web/authentication.d.ts +75 -0
  1143. package/dist/web/authentication.js +488 -0
  1144. package/dist/web/openURL.d.ts +37 -0
  1145. package/dist/web/openURL.js +89 -0
  1146. package/dist/web/urlPolicy.d.ts +3 -0
  1147. package/dist/web/urlPolicy.js +19 -0
  1148. package/dist/web/useWebAuthentication.d.ts +3 -0
  1149. package/dist/web/useWebAuthentication.js +6 -0
  1150. package/dist/zoom/Zoomable.d.ts +10 -0
  1151. package/dist/zoom/Zoomable.js +116 -0
  1152. package/dist/zoom/geometry.d.ts +11 -0
  1153. package/dist/zoom/geometry.js +16 -0
  1154. package/package.json +116 -3
@@ -0,0 +1,1360 @@
1
+ import { canvasSubmissionCosts, submitCanvasCommands, trackCanvasWrite, } from './canvasSubmission.js';
2
+ import { morphFieldSampleBounds } from '../morphField.js';
3
+ import { uncoveredSourceRows } from './captureBands.js';
4
+ import { TAB_BAR_BLUR_SIGMA, stableTabSelection } from '../lens/tabSelectionMaterial.js';
5
+ /// <reference types="@webgpu/types" />
6
+ import { contextBackdropFit } from './contextComposite.js';
7
+ import { glassNow, glassTimed, glassTimedAsync, glassTiming } from './profile.js';
8
+ import { lagTraceEnabled } from './lagTrace.js';
9
+ import { traceCapture, traceResult, traceSourcePlane, traceSubmitted } from './sampleTrace.js';
10
+ import { lensDebugIndex } from './lensDebug.js';
11
+ import { FrameGraph } from './frameGraph.js';
12
+ import { Backdrop } from './backdrop.js';
13
+ import { edgesUnderSurface, encodeScrollEdges } from './edgePass.js';
14
+ import { gpuScope, drainGPUErrors } from './errors.js';
15
+ import { LayerDevice } from './layers.js';
16
+ import { Passes, clampScissor, encodePass, viewOf } from './passes.js';
17
+ import { rasterPipelines } from './rasterShaders.js';
18
+ import { areaMipLevels, encodeAreaMips, pyramidClamp, pyramidContent, pyramidStorage, } from './areaMips.js';
19
+ import { encodeMaterial, encodeTabSelection, usesAreaMips } from './rasterMaterial.js';
20
+ import { compositeUniforms, backdropFillEdges, lensLiftUniforms, liftLighting, liftLightingClocks, liftVisibleAmount, materialUniforms, pageBackground, planeCompositeUniforms, sharedLiftUniforms, } from './rasterUniforms.js';
21
+ // Cumulative acquired drawable cost, sampled at both ends of a perf window.
22
+ // Acquisition can precede an abandoned command buffer; submitted area is tracked separately.
23
+ const drawableCost = { pixels: 0, waitMs: 0, count: 0 };
24
+ export const drawableCosts = () => ({ ...drawableCost, ...canvasSubmissionCosts() });
25
+ let nextRaster = 0;
26
+ /** A layer canvas that covers only part of its layer: [x,y,width,height] in layer CSS px. */
27
+ const canvasViewports = new WeakMap();
28
+ /** A canvas's next drawable. WebKit blocks here when the canvas presented again before the
29
+ * compositor released a drawable; that wait stalls the whole worker thread (timed for the probe). */
30
+ function drawable(context, kind, encoder) {
31
+ const at = glassNow();
32
+ const texture = context.getCurrentTexture();
33
+ const waited = glassNow() - at;
34
+ trackCanvasWrite(encoder, context.canvas, texture.width * texture.height);
35
+ drawableCost.pixels += texture.width * texture.height;
36
+ drawableCost.waitMs += waited;
37
+ drawableCost.count++;
38
+ if (waited > 3)
39
+ glassTiming('drawable-wait', at, kind);
40
+ if (lagTraceEnabled())
41
+ presentedCanvases.push(`${texture.width}x${texture.height}`);
42
+ // Whatever is drawn now replaces the canvas content: presentLayer records it again if it is the one drawing.
43
+ presentedLayers.delete(context.canvas);
44
+ return texture;
45
+ }
46
+ /** What each layer canvas last presented through `presentLayer`: every visible surface's result
47
+ * revision and its placement on the canvas.
48
+ *
49
+ * WebKit blocks a worker thread for every canvas a frame draws to, in proportion to the
50
+ * canvas's pixels (measured in the Catalyst host: about 21 ms per megapixel, whatever is drawn).
51
+ * So a frame presents only the layer canvases whose content changed; an untouched canvas keeps
52
+ * showing its last frame. A renderer that runs in the document (page-owned canvases) is not
53
+ * blocked that way: there the skip only spares the GPU the unchanged canvases (a menu morph
54
+ * presents 0.66 MP per frame instead of 1.49 MP). Any other draw to a canvas (a single-surface
55
+ * draw, a clear) forgets its entry, so the next layer present is never skipped. */
56
+ const presentedLayers = new WeakMap();
57
+ /** Lag trace: the pixel size of every canvas drawn to since the last call (each one is presented
58
+ * by WebKit when the frame ends, and the worker waits for it). */
59
+ const presentedCanvases = [];
60
+ export function takePresentedCanvases() {
61
+ return presentedCanvases.splice(0).join(' ');
62
+ }
63
+ /** Thin WebGPU reference candidate. No Pixi imports, contexts, tickers, or DOM reads. */
64
+ /** A retained spec's material at a new appearance. The tab bar's material blur follows the
65
+ * appearance; any other selection (the scope bar's thumb) keeps its region's own material. */
66
+ export function retainedAppearanceSpec(spec, appearance) {
67
+ if (!spec.tabSelection || spec.id !== 'dock')
68
+ return spec;
69
+ return {
70
+ ...spec,
71
+ blurSigmaCssPx: TAB_BAR_BLUR_SIGMA[appearance],
72
+ tabSelection: { ...spec.tabSelection, ...stableTabSelection(appearance) },
73
+ };
74
+ }
75
+ export class WebGPURaster {
76
+ submissionAllowed = () => true;
77
+ setSubmissionGate(allowed) {
78
+ this.submissionAllowed = allowed;
79
+ }
80
+ resultOwner = `raster-result-${++nextRaster}`;
81
+ device;
82
+ context;
83
+ canvas;
84
+ passes;
85
+ setup;
86
+ lensDebug = 0;
87
+ setLensDebug(view) {
88
+ this.lensDebug = lensDebugIndex(view);
89
+ }
90
+ targets = {};
91
+ graph;
92
+ textureLeases = [];
93
+ imageLeases = [];
94
+ bitmaps;
95
+ compositePipeline;
96
+ overlayPipeline;
97
+ presentPipeline;
98
+ format = 'rgba8unorm';
99
+ lost = false;
100
+ suspended = false;
101
+ covered = false;
102
+ initialized = false;
103
+ onLoss = () => { };
104
+ onRestore = () => { };
105
+ /** `presentPixels` counts fragments the layer-sized result/present passes shade; `presentAttachmentPixels` what they would shade unscissored. */
106
+ stats = {
107
+ sourceInstalls: 0,
108
+ sourceBytes: 0,
109
+ draws: 0,
110
+ submissions: 0,
111
+ presentPixels: 0,
112
+ presentAttachmentPixels: 0,
113
+ };
114
+ owner;
115
+ unsubscribe;
116
+ async init(canvas, owner, layer, presenter) {
117
+ if (this.initialized)
118
+ throw Error('WebGPU renderer already initialized');
119
+ this.initialized = true;
120
+ this.canvas = canvas;
121
+ this.owner = owner;
122
+ this.belowScrollEdges = layer.attachment.kind === 'scroll';
123
+ this.context = await owner.attach(layer, canvas, presenter);
124
+ this.bindDevice(owner);
125
+ }
126
+ bindDevice(owner) {
127
+ this.graph = FrameGraph.for(owner);
128
+ this.useDevice(owner.liveDevice);
129
+ this.unsubscribe = owner.subscribe(device => {
130
+ if (!device) {
131
+ this.lost = true;
132
+ this.release();
133
+ this.onLoss();
134
+ return;
135
+ }
136
+ this.useDevice(device);
137
+ this.lost = false;
138
+ this.forgetPresent();
139
+ this.resultEmpty = false;
140
+ if (this.setup && !this.suspended) {
141
+ this.allocate();
142
+ this.upload();
143
+ }
144
+ this.onRestore();
145
+ });
146
+ }
147
+ /** Update retained chrome material before unsuspending its first resume frame. */
148
+ setAppearance(appearance) {
149
+ if (!this.setup)
150
+ return;
151
+ const spec = this.setup.spec;
152
+ this.setup = { ...this.setup, appearance, spec: retainedAppearanceSpec(spec, appearance) };
153
+ }
154
+ dispose() {
155
+ this.unsubscribe?.();
156
+ this.release();
157
+ this.passes.destroy();
158
+ for (const lease of this.imageLeases)
159
+ lease.release();
160
+ this.imageLeases = [];
161
+ this.bitmaps = undefined;
162
+ this.setup = undefined;
163
+ }
164
+ /** Keep only the pixels this surface last presented on its canvas: drop its setup and every
165
+ * image and texture lease (a hidden tab's region must not pin a capture that has left the
166
+ * resident budget). A parked surface cannot draw by any path (motion, device restore, app
167
+ * resume): nothing encodes without a setup. It draws again once it is installed again. */
168
+ park() {
169
+ this.release();
170
+ for (const lease of this.imageLeases)
171
+ lease.release();
172
+ this.imageLeases = [];
173
+ this.bitmaps = undefined;
174
+ this.setup = undefined;
175
+ this.navigation = undefined;
176
+ this.lastBackdropKey = '';
177
+ }
178
+ forkRegion() {
179
+ const region = new WebGPURaster();
180
+ region.setSubmissionGate(this.submissionAllowed);
181
+ region.initialized = true;
182
+ region.canvas = this.canvas;
183
+ region.context = this.context;
184
+ region.owner = this.owner;
185
+ region.bindDevice(this.owner);
186
+ return region;
187
+ }
188
+ useDevice(device) {
189
+ return gpuScope(device, 'useDevice', () => this.useDeviceScoped(device));
190
+ }
191
+ useDeviceScoped(device) {
192
+ this.device = device;
193
+ this.passes = new Passes(device);
194
+ const cached = rasterPipelines(device, this.format);
195
+ this.compositePipeline = cached.composite;
196
+ this.overlayPipeline = cached.overlay;
197
+ this.presentPipeline = cached.present;
198
+ }
199
+ loseDevice() {
200
+ this.owner.loseForTest();
201
+ }
202
+ release() {
203
+ for (const lease of this.textureLeases)
204
+ lease.release();
205
+ this.textureLeases = [];
206
+ this.targets = {};
207
+ }
208
+ allocate() {
209
+ return gpuScope(this.device, 'allocate', () => this.allocateScoped());
210
+ }
211
+ allocateScoped() {
212
+ const { spec, resolution } = this.setup;
213
+ const sampleWidth = spec.sampleWidth;
214
+ const sampleHeight = spec.sampleHeight;
215
+ // Canvas dimensions change only at presentation, after preparation succeeds.
216
+ const target = (name, x, y, mip = false) => {
217
+ const source = ['front', 'rear', 'glyphs'].indexOf(name);
218
+ const lease = this.graph.target(name, x, y, mip, source >= 0
219
+ ? this.imageLeases[source].key
220
+ : name === 'result'
221
+ ? this.resultOwner
222
+ : undefined);
223
+ this.textureLeases.push(lease);
224
+ this.targets[name] = lease.value;
225
+ };
226
+ target('front', this.bitmaps.front.width, this.bitmaps.front.height);
227
+ if (this.setup.navigationAtlas || this.bitmaps.front === this.bitmaps.rear)
228
+ this.targets.rear = this.targets.front;
229
+ else
230
+ target('rear', this.bitmaps.rear.width, this.bitmaps.rear.height);
231
+ target('glyphs', this.bitmaps.glyphs.width, this.bitmaps.glyphs.height);
232
+ for (const name of ['source', 'composed'])
233
+ target(name, sampleWidth * resolution, sampleHeight * resolution);
234
+ // Results (and a menu's material) cover the surface's sample rectangle plus one pixel
235
+ // for its fractional layer offset, not the whole layer: a full-screen intermediate is
236
+ // cleared and stored every frame on a tile GPU. See resultOrigin in drawScoped.
237
+ const [resultWidth, resultHeight] = this.resultSize();
238
+ target('material', spec.materialProfile === 'menu' ? resultWidth : sampleWidth * resolution, spec.materialProfile === 'menu' ? resultHeight : sampleHeight * resolution);
239
+ target('result', resultWidth, resultHeight);
240
+ if (spec.treatment) {
241
+ const presentationWidth = spec.treatment === 'alert' ||
242
+ spec.treatment === 'confirmation' ||
243
+ spec.treatment === 'sheet'
244
+ ? Math.ceil(sampleWidth)
245
+ : sampleWidth * resolution;
246
+ const presentationHeight = spec.treatment === 'alert' ||
247
+ spec.treatment === 'confirmation' ||
248
+ spec.treatment === 'sheet'
249
+ ? Math.ceil(sampleHeight)
250
+ : sampleHeight * resolution;
251
+ target('presentationHorizontal', presentationWidth, presentationHeight);
252
+ target('presentationVertical', presentationWidth, presentationHeight);
253
+ }
254
+ else if (spec.variant === 'clear') {
255
+ target('clearHorizontal', sampleWidth * resolution, sampleHeight * resolution);
256
+ target('clearVertical', sampleWidth * resolution, sampleHeight * resolution);
257
+ }
258
+ else if (spec.tint?.[3])
259
+ target('tinted', sampleWidth * resolution, sampleHeight * resolution);
260
+ if (this.setup.lift?.optics)
261
+ target('liftRest', sampleWidth * resolution, sampleHeight * resolution);
262
+ const scale = spec.materialProfile === 'menu' ? 0.25 : 0.5;
263
+ // WebKit rejects a viewport extending even fractionally past its attachment.
264
+ // Preserve the logical sampling grid and pad storage to contain that viewport. The bar
265
+ // material's pyramid pads to whole coarse texels, so its levels do not follow the surface's
266
+ // size (areaMips.ts).
267
+ const pyramidSize = usesAreaMips(spec) ? pyramidStorage : Math.ceil;
268
+ target('pyramid', pyramidSize(sampleWidth * resolution * scale), pyramidSize(sampleHeight * resolution * scale), true);
269
+ target('horizontal', Math.ceil(sampleWidth * resolution * 0.25), Math.ceil(sampleHeight * resolution * 0.25));
270
+ target('vertical', Math.ceil(sampleWidth * resolution * 0.25), Math.ceil(sampleHeight * resolution * 0.25));
271
+ }
272
+ upload() {
273
+ for (const name of ['front', 'rear', 'glyphs'])
274
+ if (name !== 'rear' || this.targets.rear !== this.targets.front)
275
+ this.graph.upload(this.bitmaps[name], this.targets[name]);
276
+ }
277
+ /** `present:false` prepares storage and uploads without drawing; a batch's final render presents every surface together. */
278
+ install(setup, front, rear, glyphs, present = true) {
279
+ const leases = [];
280
+ try {
281
+ const first = this.graph.image(setup.sourceKey ? setup.sourceKey + ':front' : undefined, front);
282
+ leases.push(first);
283
+ // One immutable capture serves as both composite inputs unless navigation supplies a distinct rear route.
284
+ if (setup.navigationAtlas || rear === front) {
285
+ if (rear !== front && rear !== first.value)
286
+ rear.close();
287
+ leases.push(this.graph.image(first.key, first.value));
288
+ }
289
+ else
290
+ leases.push(this.graph.image(setup.sourceKey ? setup.sourceKey + ':rear' : undefined, rear));
291
+ leases.push(this.graph.image(setup.glyphKey, glyphs));
292
+ }
293
+ catch (error) {
294
+ // Shared slot images stay owned by their graph lease; only unowned transfers are closed.
295
+ for (const lease of leases)
296
+ lease.release();
297
+ for (const image of new Set([front, rear, glyphs]))
298
+ if (!this.graph.owns(image))
299
+ image.close();
300
+ throw error;
301
+ }
302
+ this.installLeases(setup, leases, present);
303
+ }
304
+ /** The scene retains canonical images; each presenter acquires its own leases. */
305
+ installRetained(setup, source, foreground, present = true) {
306
+ const leases = [
307
+ this.graph.image(source.key, source.value),
308
+ this.graph.image(source.key, source.value),
309
+ this.graph.image(foreground.key, foreground.value),
310
+ ];
311
+ return this.installLeases(setup, leases, present);
312
+ }
313
+ installLeases(setup, leases, present = true) {
314
+ const storage = (rasterSetup, images) => JSON.stringify([
315
+ rasterSetup.width,
316
+ rasterSetup.height,
317
+ rasterSetup.resolution,
318
+ rasterSetup.spec.sampleWidth,
319
+ rasterSetup.spec.sampleHeight,
320
+ rasterSetup.spec.materialProfile,
321
+ rasterSetup.spec.variant,
322
+ rasterSetup.spec.treatment,
323
+ !!rasterSetup.spec.tint?.[3],
324
+ !!rasterSetup.lift?.optics,
325
+ !!rasterSetup.navigationAtlas,
326
+ images.map(lease => lease.key),
327
+ ]);
328
+ const replace = !this.targets.front ||
329
+ !this.setup ||
330
+ storage(this.setup, this.imageLeases) !== storage(setup, leases);
331
+ // Acquire replacement storage before releasing the old: a texture whose key
332
+ // survives (shared capture, unchanged glyphs) keeps its upload.
333
+ const previousTextures = replace ? this.textureLeases : [];
334
+ if (replace) {
335
+ this.textureLeases = [];
336
+ this.targets = {};
337
+ }
338
+ const previousImages = this.imageLeases;
339
+ this.imageLeases = leases;
340
+ this.navigation = undefined;
341
+ this.bitmaps = { front: leases[0].value, rear: leases[1].value, glyphs: leases[2].value };
342
+ this.setup = setup;
343
+ // Navigation can restore a scrolled route before the next source-scroll message.
344
+ // The capture and its offset must reach the first presentation together.
345
+ if (setup.sourceScrollY !== undefined)
346
+ this.scrollY = setup.sourceScrollY;
347
+ this.stats.sourceBytes = [...new Set(Object.values(this.bitmaps))].reduce((total, bitmap) => total + bitmap.width * bitmap.height * 4, 0);
348
+ this.stats.sourceInstalls++;
349
+ try {
350
+ if (!this.suspended && !this.lost) {
351
+ if (replace) {
352
+ glassTimed('source-allocate', () => this.allocate());
353
+ glassTimed('source-upload', () => this.upload());
354
+ }
355
+ else
356
+ glassTiming('source-storage-reused');
357
+ if (present)
358
+ glassTimed('source-draw-submit', () => this.draw(0));
359
+ }
360
+ }
361
+ finally {
362
+ for (const lease of previousTextures)
363
+ lease.release();
364
+ for (const lease of previousImages)
365
+ lease.release();
366
+ }
367
+ return replace;
368
+ }
369
+ clear() {
370
+ if (this.lost || this.suspended || !this.submissionAllowed())
371
+ return;
372
+ this.forgetPresent();
373
+ gpuScope(this.device, 'clear presenter', () => {
374
+ const encoder = this.device.createCommandEncoder();
375
+ encodePass(encoder, {
376
+ colorAttachments: [
377
+ {
378
+ view: this.context.getCurrentTexture().createView(),
379
+ loadOp: 'clear',
380
+ storeOp: 'store',
381
+ clearValue: [0, 0, 0, 0],
382
+ },
383
+ ],
384
+ }, () => { });
385
+ submitCanvasCommands(this.device, encoder, encoder.finish());
386
+ this.stats.submissions++;
387
+ });
388
+ }
389
+ setCovered(covered) {
390
+ this.covered = covered;
391
+ this.forgetPresent();
392
+ }
393
+ get isCovered() {
394
+ return this.covered;
395
+ }
396
+ setVisible(visible, deferDraw = false) {
397
+ if (this.suspended === !visible)
398
+ return;
399
+ this.suspended = !visible;
400
+ this.forgetPresent();
401
+ if (!visible)
402
+ this.release();
403
+ else if (this.setup && !this.lost) {
404
+ this.allocate();
405
+ this.upload();
406
+ if (!deferDraw)
407
+ this.draw(this.lastX);
408
+ }
409
+ }
410
+ /** `scissor` ([x,y,w,h] device pixels, clamped to `size`) bounds fragment work to the
411
+ * pixels a pass can change; the clear load op still covers the whole attachment. */
412
+ custom(encoder, pipeline, output, values, textures, load = false, scissor, size) {
413
+ // Present draws carry an opacity slot (1 unless a surface fades, e.g. the bar trigger in a
414
+ // menu morph) and an occluder (none for the passes that compose a result).
415
+ if (pipeline === this.presentPipeline && values.length === 4)
416
+ values = [...values, 1, 0, 0, 0, 0, 0, 0, 0];
417
+ const buffer = this.passes.uniform(new Float32Array(values));
418
+ const group = this.device.createBindGroup({
419
+ layout: pipeline.getBindGroupLayout(0),
420
+ entries: [
421
+ { binding: 0, resource: { buffer } },
422
+ { binding: 1, resource: this.passes.sampler },
423
+ ...textures.map((texture, i) => ({ binding: i + 2, resource: viewOf(texture.texture) })),
424
+ ],
425
+ });
426
+ const timestampWrites = this.timing && (pipeline === this.compositePipeline || pipeline === this.presentPipeline)
427
+ ? {
428
+ querySet: this.timing.queries,
429
+ ...(pipeline === this.compositePipeline
430
+ ? { beginningOfPassWriteIndex: 0 }
431
+ : { endOfPassWriteIndex: 1 }),
432
+ }
433
+ : undefined;
434
+ const rect = scissor && size ? clampScissor(scissor, size[0], size[1]) : undefined;
435
+ if (size) {
436
+ this.stats.presentAttachmentPixels += size[0] * size[1];
437
+ this.stats.presentPixels += rect ? rect[2] * rect[3] : size[0] * size[1];
438
+ }
439
+ encodePass(encoder, {
440
+ colorAttachments: [{ view: output, loadOp: load ? 'load' : 'clear', storeOp: 'store' }],
441
+ timestampWrites,
442
+ }, pass => {
443
+ if (rect)
444
+ pass.setScissorRect(...rect);
445
+ pass.setPipeline(pipeline);
446
+ pass.setBindGroup(0, group);
447
+ pass.draw(3);
448
+ }, pipeline === this.compositePipeline
449
+ ? 'composite'
450
+ : size && size[0] === this.canvas?.width && size[1] === this.canvas?.height
451
+ ? 'present-canvas'
452
+ : 'present');
453
+ this.passes.draws++;
454
+ }
455
+ timing;
456
+ async benchmark(count = 30) {
457
+ if (this.lost || this.suspended || this.covered || !this.setup)
458
+ throw Error('Cannot benchmark an inactive glass scene');
459
+ const timed = this.device.features.has('timestamp-query');
460
+ if (timed)
461
+ this.timing = gpuScope(this.device, 'timestamp allocation', () => ({
462
+ queries: this.device.createQuerySet({ type: 'timestamp', count: 2 }),
463
+ resolve: this.device.createBuffer({
464
+ size: 16,
465
+ usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,
466
+ }),
467
+ read: this.device.createBuffer({
468
+ size: 16,
469
+ usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
470
+ }),
471
+ }));
472
+ const samples = [];
473
+ try {
474
+ for (let i = 0; i < count + 5; i++) {
475
+ const start = performance.now();
476
+ this.draw(i);
477
+ const cpuMs = performance.now() - start;
478
+ let gpuMs = null;
479
+ if (this.timing) {
480
+ await this.timing.read.mapAsync(GPUMapMode.READ);
481
+ const time = new BigUint64Array(this.timing.read.getMappedRange());
482
+ gpuMs = Number(time[1] - time[0]) / 1e6;
483
+ this.timing.read.unmap();
484
+ }
485
+ else
486
+ await this.device.queue.onSubmittedWorkDone();
487
+ if (i >= 5)
488
+ samples.push({ cpuMs, gpuMs });
489
+ }
490
+ }
491
+ finally {
492
+ this.timing?.queries.destroy();
493
+ this.timing?.resolve.destroy();
494
+ this.timing?.read.destroy();
495
+ this.timing = undefined;
496
+ }
497
+ return {
498
+ samples,
499
+ timestampQuery: timed,
500
+ boundary: 'Explicit isolated frame benchmark; excludes source capture/upload and compositor/scanout.',
501
+ };
502
+ }
503
+ get spec() {
504
+ return this.setup?.spec;
505
+ }
506
+ navigation;
507
+ setNavigation(pose) {
508
+ this.navigation = pose;
509
+ }
510
+ /** Route cells in its installed navigation atlas (0 when it composes a settled capture). */
511
+ get navigationRoutes() {
512
+ return (this.setup?.navigationAtlas ?? 0) > 1 ? this.setup.navigationAtlas : 0;
513
+ }
514
+ scrollY = 0;
515
+ setTrigger(trigger) {
516
+ if (this.setup)
517
+ this.setup = { ...this.setup, trigger };
518
+ }
519
+ setScroll(y) {
520
+ this.scrollY = y;
521
+ }
522
+ /** A fixed region's backdrop moved under it: same storage and uploads, new sampling origin. */
523
+ setSourceOrigin(origin) {
524
+ if (this.setup)
525
+ this.setup = { ...this.setup, sourceOrigin: origin };
526
+ }
527
+ /** A region presenter moved in the viewport (its canvas scrolled or relaid out). */
528
+ setViewportOrigin(origin) {
529
+ if (this.setup)
530
+ this.setup = { ...this.setup, viewportOrigin: origin };
531
+ }
532
+ liveViewport;
533
+ /** Moving the canvas changes where it looks, never its retained source or target storage. */
534
+ setViewport(viewport) {
535
+ this.liveViewport = viewport;
536
+ }
537
+ updateSpec(spec) {
538
+ if (!this.setup)
539
+ throw Error('Region source is not installed');
540
+ if (!Number.isFinite(spec.sampleWidth) ||
541
+ !Number.isFinite(spec.sampleHeight) ||
542
+ spec.sampleWidth <= 0 ||
543
+ spec.sampleHeight <= 0)
544
+ throw Error('Invalid glass sampling envelope');
545
+ const changed = spec.sampleWidth !== this.setup.spec.sampleWidth ||
546
+ spec.sampleHeight !== this.setup.spec.sampleHeight;
547
+ this.setup = { ...this.setup, spec };
548
+ if (changed && !this.suspended && !this.lost) {
549
+ this.release();
550
+ this.allocate();
551
+ this.upload();
552
+ glassTiming('envelope-reprepared');
553
+ }
554
+ }
555
+ setLift(lift) {
556
+ if (!this.setup)
557
+ throw Error('Lift source is not installed');
558
+ if (lift?.optics && !this.targets.liftRest && !this.suspended && !this.lost)
559
+ throw Error('Shared lift storage was not prepared');
560
+ this.setup = { ...this.setup, lift };
561
+ }
562
+ lastX = 0;
563
+ draw(x, clear = true) {
564
+ if (!this.submissionAllowed())
565
+ return;
566
+ return gpuScope(this.device, 'draw', () => this.drawScoped(x, clear));
567
+ }
568
+ drawScoped(x, clear = true) {
569
+ if (!this.submissionAllowed())
570
+ return;
571
+ const encoder = this.device?.createCommandEncoder();
572
+ if (!encoder || !this.encodeResult(encoder, x))
573
+ return;
574
+ this.custom(encoder, this.presentPipeline, drawable(this.context, 'single', encoder).createView(), this.presentUniform(), [this.targets.result], !clear, this.presentScissor(), [this.canvas.width, this.canvas.height]);
575
+ if (this.timing) {
576
+ encoder.resolveQuerySet(this.timing.queries, 0, 2, this.timing.resolve, 0);
577
+ encoder.copyBufferToBuffer(this.timing.resolve, 0, this.timing.read, 0, 16);
578
+ }
579
+ submitCanvasCommands(this.device, encoder, encoder.finish());
580
+ this.submitted();
581
+ }
582
+ submitted() {
583
+ this.passes.submitted();
584
+ this.stats.draws = this.passes.draws;
585
+ this.stats.submissions++;
586
+ if (lagTraceEnabled())
587
+ traceSubmitted(this.targets.result.texture, {
588
+ raster: this.resultOwner,
589
+ region: this.setup.spec.id,
590
+ revision: this.resultRevision,
591
+ submission: this.stats.submissions,
592
+ empty: this.resultEmpty,
593
+ scrollY: this.scrollY,
594
+ viewport: JSON.stringify(this.liveViewport ?? null),
595
+ });
596
+ }
597
+ presentRect;
598
+ /** Layer-space device-pixel origin of the result texture (integer, so presents are 1:1). */
599
+ resultOrigin = [0, 0];
600
+ /** Chrome surfaces (a bar or menu on a full-screen layer) keep a local result; a
601
+ * region presenter's layer already is its sample rectangle and keeps layer space. */
602
+ localResult = false;
603
+ /** Device-pixel offset of this layer's canvas within its layer. */
604
+ canvasOffset() {
605
+ const viewport = canvasViewports.get(this.canvas);
606
+ const resolution = this.setup.resolution;
607
+ return viewport ? [viewport[0] * resolution, viewport[1] * resolution] : [0, 0];
608
+ }
609
+ canvasSize() {
610
+ const viewport = canvasViewports.get(this.canvas);
611
+ const { resolution, width, height } = this.setup;
612
+ return viewport
613
+ ? [Math.round(viewport[2] * resolution), Math.round(viewport[3] * resolution)]
614
+ : [Math.round(width * resolution), Math.round(height * resolution)];
615
+ }
616
+ /** Size the shared layer canvas to a band of its layer (the element is placed there by
617
+ * the page): a lift overlay presents a strip, not a second full-screen canvas. */
618
+ setCanvasViewport(viewport) {
619
+ if (viewport)
620
+ canvasViewports.set(this.canvas, viewport);
621
+ else
622
+ canvasViewports.delete(this.canvas);
623
+ this.forgetPresent();
624
+ }
625
+ /** Surface opacity on its layer canvas (spec.opacity; 1 when absent). */
626
+ presentAlpha() {
627
+ return Math.max(0, Math.min(1, this.setup?.spec.opacity ?? 1));
628
+ }
629
+ /** `spec.occluder` on the layer canvas: [radius, centre x, centre y, half width, half height]
630
+ * in canvas pixels, or zeros. */
631
+ presentOccluder() {
632
+ const spec = this.setup?.spec;
633
+ const occluder = spec?.occluder;
634
+ if (!spec || !occluder || occluder.halfWidth <= 0 || occluder.halfHeight <= 0)
635
+ return [0, 0, 0, 0, 0];
636
+ const resolution = this.setup.resolution;
637
+ const [offsetX, offsetY] = this.canvasOffset();
638
+ return [
639
+ occluder.radius * resolution,
640
+ (spec.frameX + occluder.centerX) * resolution - offsetX,
641
+ (spec.frameY + occluder.centerY) * resolution - offsetY,
642
+ occluder.halfWidth * resolution,
643
+ occluder.halfHeight * resolution,
644
+ ];
645
+ }
646
+ /** The present uniform for this surface's layer canvas: placement, opacity and occluder. */
647
+ presentUniform() {
648
+ const [radius, ...occluder] = this.presentOccluder();
649
+ return [...this.presentOrigin(), this.presentAlpha(), radius, 0, 0, ...occluder];
650
+ }
651
+ presentScissor() {
652
+ const rect = this.presentRect;
653
+ if (!rect)
654
+ return rect;
655
+ const [offsetX, offsetY] = this.canvasOffset();
656
+ return [rect[0] - offsetX, rect[1] - offsetY, rect[2], rect[3]];
657
+ }
658
+ /** Present uniform: where the result texture lands on the layer canvas. */
659
+ presentOrigin() {
660
+ const { resolution, width, height } = this.setup;
661
+ const [resultX, resultY] = this.resultOrigin;
662
+ const result = this.targets.result;
663
+ const [offsetX, offsetY] = this.canvasOffset();
664
+ return this.localResult
665
+ ? [resultX - offsetX, resultY - offsetY, result.width, result.height]
666
+ : [-offsetX, -offsetY, width * resolution, height * resolution];
667
+ }
668
+ resultSize() {
669
+ const { spec, resolution, width, height } = this.setup;
670
+ const sampleWidth = spec.sampleWidth;
671
+ const sampleHeight = spec.sampleHeight;
672
+ const local = spec.materialProfile === 'menu'
673
+ ? [
674
+ Math.ceil(Math.ceil(sampleWidth * resolution * 0.25) / 0.25) + 1,
675
+ Math.ceil(Math.ceil(sampleHeight * resolution * 0.25) / 0.25) + 1,
676
+ ]
677
+ : [Math.ceil(sampleWidth * resolution) + 1, Math.ceil(sampleHeight * resolution) + 1];
678
+ this.localResult = local[0] * local[1] * 2 < width * resolution * height * resolution;
679
+ return this.localResult ? local : [width * resolution, height * resolution];
680
+ }
681
+ /** Result holds nothing (a lift overlay at rest): presenting it would only clear. */
682
+ resultEmpty = false;
683
+ /** Counts every re-encode of the result: an unchanged count means unchanged result pixels. */
684
+ resultRevision = 0;
685
+ /** The next layer present of this raster's canvas is never skipped (its content, size or
686
+ * device changed outside `presentLayer`). */
687
+ forgetPresent() {
688
+ presentedLayers.delete(this.canvas);
689
+ }
690
+ /** Present every surface of one canvas layer in a single render pass: one clear, one
691
+ * store of the canvas per frame instead of a load+store per surface. Results are
692
+ * per-raster storage, so presenting after every surface has encoded is safe.
693
+ * Returns false, drawing nothing, when the canvas already shows exactly this (see
694
+ * `presentedLayers`): the same results at the same places, or nothing at all. */
695
+ static presentLayer(encoder, rasters) {
696
+ const root = rasters[0];
697
+ const visible = rasters.filter(raster => !raster.resultEmpty);
698
+ const signature = JSON.stringify([
699
+ root.canvas.width,
700
+ root.canvas.height,
701
+ visible.map(raster => [
702
+ raster.resultOwner,
703
+ raster.resultRevision,
704
+ raster.presentUniform(),
705
+ raster.presentScissor(),
706
+ ]),
707
+ ]);
708
+ if (presentedLayers.get(root.canvas) === signature)
709
+ return false;
710
+ const draws = visible.map(raster => raster.presentDraw());
711
+ const size = [root.canvas.width, root.canvas.height];
712
+ encodePass(encoder, {
713
+ colorAttachments: [
714
+ {
715
+ view: drawable(root.context, 'layer', encoder).createView(),
716
+ loadOp: 'clear',
717
+ storeOp: 'store',
718
+ },
719
+ ],
720
+ }, pass => {
721
+ for (const draw of draws) {
722
+ const rect = draw.rect
723
+ ? clampScissor(draw.rect, size[0], size[1])
724
+ : [0, 0, size[0], size[1]];
725
+ pass.setScissorRect(...rect);
726
+ pass.setPipeline(root.presentPipeline);
727
+ pass.setBindGroup(0, draw.group);
728
+ pass.draw(3);
729
+ draw.raster.stats.presentAttachmentPixels += size[0] * size[1];
730
+ draw.raster.stats.presentPixels += rect[2] * rect[3];
731
+ draw.raster.passes.draws++;
732
+ }
733
+ }, 'canvas-layer');
734
+ presentedLayers.set(root.canvas, signature);
735
+ return true;
736
+ }
737
+ presentDraw() {
738
+ const buffer = this.passes.uniform(new Float32Array(this.presentUniform()));
739
+ const group = this.device.createBindGroup({
740
+ layout: this.presentPipeline.getBindGroupLayout(0),
741
+ entries: [
742
+ { binding: 0, resource: { buffer } },
743
+ { binding: 1, resource: this.passes.sampler },
744
+ { binding: 2, resource: viewOf(this.targets.result.texture) },
745
+ ],
746
+ });
747
+ return { raster: this, group, rect: this.presentScissor() };
748
+ }
749
+ /** Scroll-attached glass is part of the scrolling content, and the navigation bar's scroll-edge
750
+ * effect is painted over that content (CSS, a layer above the scroll container). Its own
751
+ * backdrop is the content behind it, without the edge: composing the edge in as well applied
752
+ * the effect twice where such glass passes under the bar, and redrew it in every scroll frame
753
+ * while it was there. Bar glass sits above the edge and keeps refracting the treated backdrop. */
754
+ belowScrollEdges = false;
755
+ lastBackdropKey = '';
756
+ /** Diagnostics: the backdrop key the last composite used. */
757
+ get composedBackdropKey() {
758
+ return this.lastBackdropKey;
759
+ }
760
+ /** This surface's sample rectangle in viewport coordinates. */
761
+ backdropRect() {
762
+ const { spec, viewportOrigin } = this.setup;
763
+ const viewport = this.liveViewport;
764
+ const scaleX = viewport?.scaleX ?? 1;
765
+ const scaleY = viewport?.scaleY ?? 1;
766
+ return [
767
+ (viewport?.x ?? viewportOrigin?.x ?? 0) + (spec.frameX - spec.sampleInsetX) * scaleX,
768
+ (viewport?.y ?? viewportOrigin?.y ?? 0) + (spec.frameY - spec.sampleInsetY) * scaleY,
769
+ spec.sampleWidth * scaleX,
770
+ spec.sampleHeight * scaleY,
771
+ ];
772
+ }
773
+ /** Whether the backdrop under this surface changed since its last encode (a plane scrolled or moved). */
774
+ backdropStale() {
775
+ const backdrop = Backdrop.for(this.owner);
776
+ return (!!this.setup &&
777
+ backdrop.installed &&
778
+ backdrop.keyFor(this.backdropRect(), this.setup.contentLayer, this.setup.spec.backdropExclusions, this.belowScrollEdges, !!this.setup.spec.backdropMenuOverlay, this.navigation) !== this.lastBackdropKey);
779
+ }
780
+ /** Sample-sized scratch for the scroll-edge blur, acquired only by surfaces under a bar edge. */
781
+ edgeScratch() {
782
+ const targets = this.targets;
783
+ for (const name of ['edgeH', 'edgeV'])
784
+ if (!targets[name]) {
785
+ const lease = this.graph.target(name, targets.source.width, targets.source.height);
786
+ this.textureLeases.push(lease);
787
+ targets[name] = lease.value;
788
+ }
789
+ return [targets.edgeH, targets.edgeV];
790
+ }
791
+ /** Compose the screen-space backdrop under this surface into its source target: the
792
+ * page background, then each plane clipped to its viewport rectangle. The content
793
+ * plane keeps the navigation composite (pose, route atlas) on the raster's own capture. */
794
+ composeBackdrop(encoder, backdrop, rect, content, background) {
795
+ const targets = this.targets;
796
+ const resolution = this.setup.resolution;
797
+ const scaleX = this.liveViewport?.scaleX ?? 1;
798
+ const scaleY = this.liveViewport?.scaleY ?? 1;
799
+ const size = [targets.source.width, targets.source.height];
800
+ const contentLayer = this.setup.contentLayer;
801
+ const draws = backdrop
802
+ .under(rect, this.setup.spec.backdropExclusions, !!this.setup.spec.backdropMenuOverlay)
803
+ .map(({ plane, clip }) => {
804
+ const layer = plane.layer;
805
+ const missing = uncoveredSourceRows(rect, layer, layer.id === contentLayer ? this.setup.navigationCoverage : undefined);
806
+ if (missing)
807
+ throw Error(`Glass ${this.setup.spec.id} samples rows ${missing.top.toFixed(1)}..` +
808
+ `${missing.bottom.toFixed(1)} of plane ${layer.id}, whose capture holds only ` +
809
+ JSON.stringify(layer.id === contentLayer
810
+ ? (this.setup.navigationCoverage?.rows ?? layer.rows)
811
+ : layer.rows));
812
+ const x0 = Math.floor(((clip[0] - rect[0]) / scaleX) * resolution);
813
+ const y0 = Math.floor(((clip[1] - rect[1]) / scaleY) * resolution);
814
+ const scissor = clampScissor([
815
+ x0,
816
+ y0,
817
+ Math.ceil(((clip[0] + clip[2] - rect[0]) / scaleX) * resolution) - x0,
818
+ Math.ceil(((clip[1] + clip[3] - rect[1]) / scaleY) * resolution) - y0,
819
+ ], size[0], size[1]);
820
+ let values;
821
+ let textures;
822
+ if (layer.id === contentLayer) {
823
+ values = [...content];
824
+ if (this.liveViewport) {
825
+ values[4] = rect[0];
826
+ values[5] = rect[1];
827
+ }
828
+ // A route atlas is viewport-space; the settled capture is plane-local.
829
+ if (!this.setup.navigationAtlas) {
830
+ values[3] = layer.width;
831
+ values[4] -= layer.origin.x;
832
+ values[5] -= layer.origin.y;
833
+ // A windowed content plane: its fill beyond the window's open edges (compositeSource).
834
+ values[15] = backdropFillEdges(layer);
835
+ values.splice(53, 3, ...layer.fill.slice(0, 3));
836
+ }
837
+ textures = [targets.front, targets.rear];
838
+ }
839
+ else if (layer.follows === contentLayer && !this.setup.navigationAtlas) {
840
+ // The window pinned at the top of the content plane's list is the content plane there:
841
+ // the same pose and the same treatment beside the capture, with its own pixels.
842
+ const texture = backdrop.texture(plane);
843
+ values = [...content];
844
+ if (this.liveViewport) {
845
+ values[4] = rect[0];
846
+ values[5] = rect[1];
847
+ }
848
+ values[3] = layer.width;
849
+ values[4] -= layer.origin.x;
850
+ values[5] -= layer.origin.y;
851
+ values[12] = layer.height;
852
+ values[13] = layer.height;
853
+ values[15] = backdropFillEdges(layer);
854
+ values.splice(53, 3, ...layer.fill.slice(0, 3));
855
+ textures = [texture, texture];
856
+ }
857
+ else {
858
+ const texture = backdrop.texture(plane);
859
+ values = planeCompositeUniforms(size, resolution, layer, rect);
860
+ textures = [texture, texture];
861
+ }
862
+ values[56] = scaleX;
863
+ values[57] = scaleY;
864
+ const pipeline = layer.menuOverlay ? this.overlayPipeline : this.compositePipeline;
865
+ const uniforms = new Float32Array(values);
866
+ if (lagTraceEnabled() && scissor[2] && scissor[3])
867
+ traceSourcePlane(targets.source.texture, {
868
+ raster: this.resultOwner,
869
+ region: this.setup.spec.id,
870
+ plane: layer.id,
871
+ key: layer.key,
872
+ }, uniforms, scissor, {
873
+ viewport: JSON.stringify(rect),
874
+ originX: layer.origin.x,
875
+ originY: layer.origin.y,
876
+ scrollX: layer.scroll.x,
877
+ scrollY: layer.scroll.y,
878
+ rows: JSON.stringify(layer.rows ?? null),
879
+ follows: layer.follows ?? null,
880
+ overlay: !!layer.menuOverlay,
881
+ });
882
+ const buffer = this.passes.uniform(uniforms);
883
+ const group = this.device.createBindGroup({
884
+ layout: pipeline.getBindGroupLayout(0),
885
+ entries: [
886
+ { binding: 0, resource: { buffer } },
887
+ { binding: 1, resource: this.passes.sampler },
888
+ ...textures.map((texture, i) => ({
889
+ binding: i + 2,
890
+ resource: viewOf(texture.texture),
891
+ })),
892
+ ],
893
+ });
894
+ return { scissor, group, pipeline, overlay: !!layer.menuOverlay };
895
+ });
896
+ encodePass(encoder, {
897
+ colorAttachments: [
898
+ {
899
+ view: viewOf(targets.source.texture),
900
+ loadOp: 'clear',
901
+ clearValue: background,
902
+ storeOp: 'store',
903
+ },
904
+ ],
905
+ }, pass => {
906
+ pass.setPipeline(this.compositePipeline);
907
+ for (const draw of draws) {
908
+ if (draw.overlay || !draw.scissor[2] || !draw.scissor[3])
909
+ continue;
910
+ pass.setScissorRect(...draw.scissor);
911
+ pass.setBindGroup(0, draw.group);
912
+ pass.draw(3);
913
+ this.passes.draws++;
914
+ }
915
+ }, 'composite');
916
+ // Bar glass refracts the scroll-edge-treated backdrop, as native bar buttons do.
917
+ const edges = this.belowScrollEdges
918
+ ? []
919
+ : edgesUnderSurface(backdrop.edgesUnder(rect, this.navigation), this.setup.spec.materialProfile);
920
+ if (edges.length)
921
+ encodeScrollEdges(encoder, this.device, values => this.passes.uniform(values), this.passes.sampler, targets.source, this.edgeScratch(), rect, resolution, edges, [scaleX, scaleY]);
922
+ const overlays = draws.filter(draw => draw.overlay);
923
+ if (overlays.length) {
924
+ encodePass(encoder, {
925
+ colorAttachments: [
926
+ { view: viewOf(targets.source.texture), loadOp: 'load', storeOp: 'store' },
927
+ ],
928
+ }, pass => {
929
+ for (const draw of overlays) {
930
+ if (!draw.scissor[2] || !draw.scissor[3])
931
+ continue;
932
+ pass.setPipeline(draw.pipeline);
933
+ pass.setScissorRect(...draw.scissor);
934
+ pass.setBindGroup(0, draw.group);
935
+ pass.draw(3);
936
+ this.passes.draws++;
937
+ }
938
+ }, 'backdrop-overlay');
939
+ }
940
+ }
941
+ /** Encode this surface's passes up to its result; false when it cannot draw now. */
942
+ encodeResult(encoder, x) {
943
+ if (!this.setup || this.lost || this.suspended || this.covered)
944
+ return false;
945
+ this.lastX = x;
946
+ const setup = this.setup;
947
+ const { spec, appearance, resolution } = setup;
948
+ const targets = this.targets;
949
+ const [canvasWidth, canvasHeight] = this.canvasSize();
950
+ if (this.canvas.width !== canvasWidth)
951
+ this.canvas.width = canvasWidth;
952
+ if (this.canvas.height !== canvasHeight)
953
+ this.canvas.height = canvasHeight;
954
+ const sampleRect = this.sampleRectangle();
955
+ this.presentRect = sampleRect;
956
+ // Result space = layer space shifted by an integer pixel origin, so every kernel
957
+ // rasterizes at the same pixel centres (and sub-pixel phase) as in layer space.
958
+ const local = this.localResult;
959
+ const originX = (spec.frameX - spec.sampleInsetX) * resolution;
960
+ const originY = (spec.frameY - spec.sampleInsetY) * resolution;
961
+ const resultX = local ? Math.floor(originX) : 0;
962
+ const resultY = local ? Math.floor(originY) : 0;
963
+ this.resultOrigin = [resultX, resultY];
964
+ const layout = {
965
+ spec,
966
+ appearance,
967
+ resolution,
968
+ width: setup.width,
969
+ height: setup.height,
970
+ sampleWidth: spec.sampleWidth,
971
+ sampleHeight: spec.sampleHeight,
972
+ local,
973
+ resultSampleX: originX - resultX,
974
+ resultSampleY: originY - resultY,
975
+ result: targets.result,
976
+ };
977
+ const background = pageBackground(appearance);
978
+ const backdrop = Backdrop.for(this.owner);
979
+ const backdropRect = this.backdropRect();
980
+ const backdropKey = backdrop.installed
981
+ ? backdrop.keyFor(backdropRect, setup.contentLayer, setup.spec.backdropExclusions, this.belowScrollEdges, !!setup.spec.backdropMenuOverlay, this.navigation)
982
+ : '';
983
+ this.lastBackdropKey = backdropKey;
984
+ const resultKey = JSON.stringify([
985
+ this.imageLeases.map(lease => lease.key),
986
+ setup,
987
+ this.scrollY,
988
+ this.navigation,
989
+ x,
990
+ this.lensDebug,
991
+ backdropKey,
992
+ ]);
993
+ if (this.timing || !this.graph.matches(targets.result, resultKey)) {
994
+ const liftAtRest = setup.liftOverlay && !(setup.lift && setup.lift.amount > 0);
995
+ if (liftAtRest || spec.restHidden || (spec.opacity === 0 && !spec.prewarmTransparent)) {
996
+ if (!this.resultEmpty)
997
+ this.passes.clear(encoder, targets.result);
998
+ this.resultEmpty = true;
999
+ if (lagTraceEnabled())
1000
+ traceResult(targets.result.texture, null);
1001
+ this.graph.unpublish(targets.result);
1002
+ }
1003
+ else {
1004
+ this.resultEmpty = false;
1005
+ this.encodeVisibleResult({
1006
+ encoder,
1007
+ x,
1008
+ layout,
1009
+ sampleRect,
1010
+ backdrop,
1011
+ backdropRect,
1012
+ backdropKey,
1013
+ background,
1014
+ });
1015
+ }
1016
+ this.graph.mark(targets.result, resultKey);
1017
+ this.resultRevision++;
1018
+ }
1019
+ return true;
1020
+ }
1021
+ /** Outside a surface's sample rectangle its result is exactly transparent (every pass clears,
1022
+ * then writes only inside its output frame), so only that rectangle needs shading. A menu's
1023
+ * material frame is its padded pyramid extent. Device px on the layer. */
1024
+ sampleRectangle() {
1025
+ const { spec, resolution } = this.setup;
1026
+ const left = (spec.frameX - spec.sampleInsetX) * resolution;
1027
+ const top = (spec.frameY - spec.sampleInsetY) * resolution;
1028
+ const fieldBounds = morphFieldSampleBounds(spec);
1029
+ if (fieldBounds) {
1030
+ const [fieldX, fieldY, fieldWidth, fieldHeight] = fieldBounds;
1031
+ return [
1032
+ left + fieldX * resolution,
1033
+ top + fieldY * resolution,
1034
+ fieldWidth * resolution,
1035
+ fieldHeight * resolution,
1036
+ ];
1037
+ }
1038
+ const pyramid = this.targets.pyramid;
1039
+ return spec.materialProfile === 'menu'
1040
+ ? [left, top, pyramid.width / 0.25, pyramid.height / 0.25]
1041
+ : [left, top, spec.sampleWidth * resolution, spec.sampleHeight * resolution];
1042
+ }
1043
+ /** The whole layer, placed relative to this surface's sample rectangle (device px). */
1044
+ layerPresentOrigin(layout) {
1045
+ const { spec, resolution } = layout;
1046
+ return [
1047
+ -(spec.frameX - spec.sampleInsetX) * resolution,
1048
+ -(spec.frameY - spec.sampleInsetY) * resolution,
1049
+ layout.width * resolution,
1050
+ layout.height * resolution,
1051
+ ];
1052
+ }
1053
+ /** The backdrop capture, the material (or presentation treatment), the tab selection and the
1054
+ * lift, each re-encoded only when its inputs changed. */
1055
+ encodeVisibleResult(frame) {
1056
+ const { encoder, x, layout, backdropKey } = frame;
1057
+ const { spec, appearance } = layout;
1058
+ const setup = this.setup;
1059
+ const targets = this.targets;
1060
+ const scale = spec.materialProfile === 'menu' ? 0.25 : 0.5;
1061
+ this.encodeCapture(frame, scale);
1062
+ const material = materialUniforms(layout, setup, targets.pyramid, scale);
1063
+ // The bar pyramid's storage runs past its content (areaMips.ts): reads stop at the content.
1064
+ if (usesAreaMips(spec))
1065
+ material.uInputClamp = pyramidClamp(targets.pyramid, [
1066
+ pyramidContent(layout.sampleWidth * layout.resolution * scale),
1067
+ pyramidContent(layout.sampleHeight * layout.resolution * scale),
1068
+ ]);
1069
+ // A lift overlay's pre-lift result equals the bar's own result (same sources, spec,
1070
+ // scroll and pose); reuse the bar's published result and composed scratch instead
1071
+ // of re-encoding the same material, selection blur and pill passes every frame.
1072
+ const baseKey = JSON.stringify([
1073
+ this.imageLeases.map(lease => lease.key),
1074
+ { ...setup, lift: undefined, liftOverlay: undefined },
1075
+ this.scrollY,
1076
+ this.navigation,
1077
+ x,
1078
+ this.lensDebug,
1079
+ layout.local,
1080
+ targets.result.width,
1081
+ targets.result.height,
1082
+ backdropKey,
1083
+ ]);
1084
+ const published = !this.timing && setup.liftOverlay && setup.lift
1085
+ ? this.graph.publishedResult(baseKey)
1086
+ : undefined;
1087
+ const baseResult = published &&
1088
+ published !== targets.result &&
1089
+ (!spec.tabSelection || this.graph.matches(targets.composed, baseKey))
1090
+ ? published
1091
+ : targets.result;
1092
+ if (spec.treatment === 'contextMenu')
1093
+ material.uMaterialShadowResponse = [1, 0, 0, 0];
1094
+ if (baseResult === targets.result) {
1095
+ encodeMaterial(encoder, this.passes, targets, layout, material);
1096
+ this.encodeResultPresent(encoder, layout, frame.sampleRect);
1097
+ if (spec.tabSelection)
1098
+ encodeTabSelection(encoder, this.passes, targets, this.graph, layout, baseKey);
1099
+ }
1100
+ const lift = setup.lift;
1101
+ // Only a result that is exactly the base (no lift drawn into it) may be shared.
1102
+ if (baseResult === targets.result && !lift)
1103
+ this.graph.publish(baseKey, targets.result);
1104
+ else if (baseResult === targets.result)
1105
+ this.graph.unpublish(targets.result);
1106
+ const lensAmount = liftVisibleAmount(lift, appearance);
1107
+ if (lift && !spec.tabSelection && lift.source === 'composed') {
1108
+ this.graph.mark(targets.composed, 'lift-composed');
1109
+ this.passes.copy(encoder, viewOf(targets.source.texture), viewOf(targets.composed.texture));
1110
+ this.custom(encoder, this.presentPipeline, viewOf(targets.composed.texture), this.layerPresentOrigin(layout), [targets.material], true);
1111
+ }
1112
+ if (lift && lensAmount > 0)
1113
+ this.encodeLift(encoder, layout, lift, lensAmount, baseResult);
1114
+ if (setup.liftOverlay && !(lift && lensAmount > 0)) {
1115
+ this.passes.clear(encoder, targets.result);
1116
+ this.resultEmpty = true;
1117
+ }
1118
+ if (lagTraceEnabled())
1119
+ traceResult(targets.result.texture, this.resultEmpty ? null : targets.source.texture);
1120
+ }
1121
+ /** The composited backdrop under the surface (source target) and its blur pyramid, re-encoded
1122
+ * only when the capture, pose, scroll or backdrop under it changed. */
1123
+ encodeCapture(frame, scale) {
1124
+ const { encoder, x, layout, backdrop, backdropRect, backdropKey, background } = frame;
1125
+ const { spec, appearance, resolution, sampleWidth, sampleHeight } = layout;
1126
+ const setup = this.setup;
1127
+ const targets = this.targets;
1128
+ const passes = this.passes;
1129
+ const captureKey = JSON.stringify([
1130
+ this.imageLeases.slice(0, 2).map(lease => lease.key),
1131
+ setup.sourceWidth,
1132
+ setup.sourceOrigin,
1133
+ appearance,
1134
+ resolution,
1135
+ layout.width,
1136
+ sampleWidth,
1137
+ sampleHeight,
1138
+ spec.frameX - spec.sampleInsetX,
1139
+ spec.frameY - spec.sampleInsetY,
1140
+ spec.materialProfile,
1141
+ spec.treatment,
1142
+ usesAreaMips(spec),
1143
+ this.scrollY,
1144
+ this.navigation,
1145
+ x,
1146
+ setup.navigationAtlas,
1147
+ backdropKey,
1148
+ ]);
1149
+ const captured = !this.timing &&
1150
+ this.graph.matches(targets.source, captureKey) &&
1151
+ this.graph.matches(targets.pyramid, captureKey);
1152
+ if (captured)
1153
+ return;
1154
+ if (lagTraceEnabled())
1155
+ traceCapture(targets.source.texture);
1156
+ const composite = compositeUniforms(setup, this.navigation, this.scrollY, x, background, targets.front.height, targets.rear.height);
1157
+ if (backdrop.installed)
1158
+ this.composeBackdrop(encoder, backdrop, backdropRect, composite, background);
1159
+ else {
1160
+ if (lagTraceEnabled())
1161
+ traceSourcePlane(targets.source.texture, {
1162
+ raster: this.resultOwner,
1163
+ region: spec.id,
1164
+ plane: setup.contentLayer ?? 'own-capture',
1165
+ key: setup.sourceKey ?? 'own-capture',
1166
+ }, new Float32Array(composite), [0, 0, targets.source.width, targets.source.height], { viewport: JSON.stringify(backdropRect), scrollY: this.scrollY });
1167
+ this.custom(encoder, this.compositePipeline, viewOf(targets.source.texture), composite, [
1168
+ targets.front,
1169
+ targets.rear,
1170
+ ]);
1171
+ }
1172
+ if (spec.treatment === 'contextMenu') {
1173
+ const fit = contextBackdropFit[appearance];
1174
+ passes.kernel(encoder, 'contextComposite', targets.composed, {
1175
+ uResolution: [sampleWidth, sampleHeight],
1176
+ uShape: [sampleWidth / 2, sampleHeight / 2, sampleWidth / 2, sampleHeight / 2],
1177
+ uRadius: 0,
1178
+ uFilter: [0, fit.gain, fit.bias, 0],
1179
+ uAxis: [0, 0],
1180
+ uShadow: [0, 0, 0],
1181
+ }, { uTexture: targets.source });
1182
+ passes.copy(encoder, viewOf(targets.composed.texture), viewOf(targets.source.texture));
1183
+ }
1184
+ const pyramidViewport = [
1185
+ 0,
1186
+ 0,
1187
+ sampleWidth * resolution * scale,
1188
+ sampleHeight * resolution * scale,
1189
+ ];
1190
+ if (usesAreaMips(spec)) {
1191
+ // The bar's wide diffusion reads coarse levels: they must weigh the backdrop evenly and
1192
+ // must not follow the surface's size (areaMips.ts).
1193
+ const levelZero = areaMipLevels(targets.pyramid)[0].view;
1194
+ passes.copy(encoder, viewOf(targets.source.texture), levelZero, 'rgba8unorm', false, false, pyramidViewport);
1195
+ encodeAreaMips(encoder, this.device, targets.pyramid, [pyramidContent(pyramidViewport[2]), pyramidContent(pyramidViewport[3])], values => passes.uniform(values));
1196
+ }
1197
+ else
1198
+ passes.pyramid(encoder, targets.source, targets.pyramid, pyramidViewport);
1199
+ this.graph.mark(targets.source, captureKey);
1200
+ this.graph.mark(targets.pyramid, captureKey);
1201
+ }
1202
+ /** The material into the result: a menu copies its padded material; any other surface presents
1203
+ * it inside its sample rectangle (the present shader is zero outside it, which the clear wrote). */
1204
+ encodeResultPresent(encoder, layout, sampleRect) {
1205
+ const { spec, resolution, sampleWidth, sampleHeight, resultSampleX, resultSampleY } = layout;
1206
+ const targets = this.targets;
1207
+ if (spec.materialProfile === 'menu') {
1208
+ this.passes.copy(encoder, viewOf(targets.material.texture), viewOf(targets.result.texture));
1209
+ return;
1210
+ }
1211
+ const sample = [
1212
+ resultSampleX,
1213
+ resultSampleY,
1214
+ sampleWidth * resolution,
1215
+ sampleHeight * resolution,
1216
+ ];
1217
+ this.custom(encoder, this.presentPipeline, viewOf(targets.result.texture), [resultSampleX, resultSampleY, sampleWidth * resolution, sampleHeight * resolution], [targets.material], false, layout.local && spec.shape.members?.length
1218
+ ? [
1219
+ sampleRect[0] - this.resultOrigin[0],
1220
+ sampleRect[1] - this.resultOrigin[1],
1221
+ sampleRect[2],
1222
+ sampleRect[3],
1223
+ ]
1224
+ : layout.local
1225
+ ? sample
1226
+ : sampleRect, [targets.result.width, targets.result.height]);
1227
+ }
1228
+ /** A pressed control's lift: with fitted optics, the shared-lift lens over the unchanged
1229
+ * result underneath (optionally diffused); without, the plain lens kernel. */
1230
+ encodeLift(encoder, layout, lift, lensAmount, baseResult) {
1231
+ const { spec, appearance, resolution, sampleWidth, sampleHeight } = layout;
1232
+ const targets = this.targets;
1233
+ const passes = this.passes;
1234
+ const capsule = lift.capsule ?? spec.tabSelection?.capsule ?? spec.shape.first;
1235
+ if (!lift.optics) {
1236
+ passes.kernel(encoder, 'lens', targets.result, lensLiftUniforms(layout, lift, capsule, targets.source), {
1237
+ uTexture: targets.source,
1238
+ uClearSource: lift.source === 'transmissive' ? targets.source : targets.composed,
1239
+ uGlyphSource: targets.glyphs,
1240
+ }, true);
1241
+ return;
1242
+ }
1243
+ // Capture the unchanged reference result underneath the moving aperture. One
1244
+ // foreground image is composited by sharedLift, never a faded duplicate.
1245
+ passes.copy(encoder, viewOf(targets.source.texture), viewOf(targets.liftRest.texture));
1246
+ this.custom(encoder, this.presentPipeline, viewOf(targets.liftRest.texture), layout.local
1247
+ ? [
1248
+ -layout.resultSampleX,
1249
+ -layout.resultSampleY,
1250
+ targets.result.width,
1251
+ targets.result.height,
1252
+ ]
1253
+ : this.layerPresentOrigin(layout), [baseResult], true);
1254
+ if (this.setup.liftOverlay)
1255
+ passes.clear(encoder, targets.result);
1256
+ const optics = lift.optics;
1257
+ const lighting = liftLighting(lift, spec, appearance);
1258
+ const clocks = liftLightingClocks(lift, optics, appearance);
1259
+ let lensSource = lift.source === 'transmissive' ? targets.source : targets.composed;
1260
+ if (lighting.diffusionSigmaPt > 0 && clocks[0] > 0) {
1261
+ const sigma = lighting.diffusionSigmaPt * clocks[0] * resolution * 0.25;
1262
+ passes.kernel(encoder, 'lensDiffusion', targets.horizontal, { uSigma: sigma, uStep: [1 / (sampleWidth * resolution * 0.25), 0] }, { uTexture: lensSource });
1263
+ passes.kernel(encoder, 'lensDiffusion', targets.vertical, { uSigma: sigma, uStep: [0, 1 / (sampleHeight * resolution * 0.25)] }, { uTexture: targets.horizontal });
1264
+ lensSource = targets.vertical;
1265
+ }
1266
+ passes.kernel(encoder, 'sharedLift', targets.result, sharedLiftUniforms(layout, lift, optics, capsule, this.lensDebug, lensAmount), { uRestSource: targets.liftRest, uClearSource: lensSource, uGlyphSource: targets.glyphs }, true);
1267
+ }
1268
+ async settled() {
1269
+ await glassTimedAsync('gpu-queue-complete', () => this.device.queue.onSubmittedWorkDone());
1270
+ await drainGPUErrors(this.device);
1271
+ if (this.owner.faults.length)
1272
+ throw Error(this.owner.faults.splice(0).join('\n'));
1273
+ }
1274
+ async stageSnapshot(stage, level) {
1275
+ // 'source' and 'composed' are the pre-12o names of the front source and result targets.
1276
+ // A suspended (hidden) or lost raster holds no targets: the diagnostic is a no-op.
1277
+ if (this.suspended || this.lost || !this.setup)
1278
+ return {
1279
+ width: 0,
1280
+ height: 0,
1281
+ pixels: new Uint8Array(0),
1282
+ unavailable: this.lost ? 'lost' : this.suspended ? 'suspended' : 'not-installed',
1283
+ };
1284
+ const name = stage === 'source' ? 'front' : stage === 'composed' ? 'result' : stage;
1285
+ const target = this.targets[name];
1286
+ if (!target)
1287
+ throw Error(`Glass stage "${stage}" is not materialized on this raster`);
1288
+ const width = Math.max(1, target.width >> level);
1289
+ const height = Math.max(1, target.height >> level);
1290
+ const stride = Math.ceil((width * 4) / 256) * 256;
1291
+ const buffer = gpuScope(this.device, 'readback allocation', () => this.device.createBuffer({
1292
+ size: stride * height,
1293
+ usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
1294
+ }));
1295
+ const encoder = this.device.createCommandEncoder();
1296
+ encoder.copyTextureToBuffer({ texture: target.texture, mipLevel: level }, { buffer, bytesPerRow: stride }, [width, height]);
1297
+ submitCanvasCommands(this.device, encoder, encoder.finish());
1298
+ await buffer.mapAsync(GPUMapMode.READ);
1299
+ const mapped = new Uint8Array(buffer.getMappedRange());
1300
+ const pixels = new Uint8Array(width * height * 4);
1301
+ for (let y = 0; y < height; y++)
1302
+ pixels.set(mapped.subarray(y * stride, y * stride + width * 4), y * width * 4);
1303
+ buffer.unmap();
1304
+ buffer.destroy();
1305
+ return { width, height, pixels };
1306
+ }
1307
+ async snapshot() {
1308
+ const width = this.canvas.width;
1309
+ const height = this.canvas.height;
1310
+ const stride = Math.ceil((width * 4) / 256) * 256;
1311
+ const buffer = gpuScope(this.device, 'readback allocation', () => this.device.createBuffer({
1312
+ size: stride * height,
1313
+ usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
1314
+ }));
1315
+ this.draw(this.lastX);
1316
+ const encoder = this.device.createCommandEncoder();
1317
+ encoder.copyTextureToBuffer({ texture: this.context.getCurrentTexture() }, { buffer, bytesPerRow: stride }, [width, height]);
1318
+ submitCanvasCommands(this.device, encoder, encoder.finish());
1319
+ await buffer.mapAsync(GPUMapMode.READ);
1320
+ const mapped = new Uint8Array(buffer.getMappedRange());
1321
+ const pixels = new Uint8Array(width * height * 4);
1322
+ // Match WebGL readPixels' bottom-up rows for the 12u pair method.
1323
+ for (let y = 0; y < height; y++)
1324
+ pixels.set(mapped.subarray(y * stride, y * stride + width * 4), (height - 1 - y) * width * 4);
1325
+ buffer.unmap();
1326
+ buffer.destroy();
1327
+ return { width, height, pixels };
1328
+ }
1329
+ /** What this surface currently presents (diagnostics and the menu-close regression check). */
1330
+ presentation() {
1331
+ const spec = this.setup?.spec;
1332
+ const first = spec?.shape.first;
1333
+ return spec
1334
+ ? {
1335
+ id: spec.id,
1336
+ restHidden: !!spec.restHidden,
1337
+ opacity: spec.opacity ?? 1,
1338
+ empty: this.resultEmpty,
1339
+ covered: this.covered,
1340
+ lift: this.setup?.lift?.amount ?? 0,
1341
+ centre: first
1342
+ ? [+(spec.frameX + first.centerX).toFixed(2), +(spec.frameY + first.centerY).toFixed(2)]
1343
+ : null,
1344
+ radius: first?.radius ?? null,
1345
+ }
1346
+ : null;
1347
+ }
1348
+ report() {
1349
+ return {
1350
+ ...this.stats,
1351
+ appearance: this.setup?.appearance ?? null,
1352
+ gpuBackingBytes: this.graph.report().gpuBytes,
1353
+ sharedGraph: this.graph.report(),
1354
+ ...this.owner.report(),
1355
+ lost: this.lost,
1356
+ suspended: this.suspended,
1357
+ covered: this.covered,
1358
+ };
1359
+ }
1360
+ }