@satinhq/kit 0.0.0-stage → 0.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +96 -0
- package/README.md +454 -2
- package/THIRD_PARTY_NOTICES.md +65 -0
- package/bin/satin.mjs +13 -0
- package/dist/acknowledgements/Acknowledgements.d.ts +4 -0
- package/dist/acknowledgements/Acknowledgements.js +42 -0
- package/dist/acknowledgements/bundledNotices.d.ts +4 -0
- package/dist/acknowledgements/bundledNotices.js +58 -0
- package/dist/acknowledgements/inventory.d.ts +17 -0
- package/dist/acknowledgements/inventory.js +10 -0
- package/dist/acknowledgements/inventory.json +39 -0
- package/dist/actions/ActionMenu.d.ts +30 -0
- package/dist/actions/ActionMenu.js +103 -0
- package/dist/actions/RowActions.d.ts +42 -0
- package/dist/actions/RowActions.js +820 -0
- package/dist/actions/contextMotion.d.ts +78 -0
- package/dist/actions/contextMotion.js +329 -0
- package/dist/actions/motion.d.ts +19 -0
- package/dist/actions/motion.js +74 -0
- package/dist/actions/nativeContextAppearance.json +86 -0
- package/dist/actions/nativeContextMotion.json +734 -0
- package/dist/actions/nativeMotion.json +388 -0
- package/dist/actions/preview.d.ts +27 -0
- package/dist/actions/preview.js +217 -0
- package/dist/actions/recognizers.d.ts +24 -0
- package/dist/actions/recognizers.js +87 -0
- package/dist/actions/rowScrub.d.ts +59 -0
- package/dist/actions/rowScrub.js +400 -0
- package/dist/actions/swipeSpring.d.ts +14 -0
- package/dist/actions/swipeSpring.js +35 -0
- package/dist/actions/types.d.ts +71 -0
- package/dist/actions/types.js +28 -0
- package/dist/app/InstallComponents.d.ts +16 -0
- package/dist/app/InstallComponents.js +104 -0
- package/dist/app/InstallationDiagnostics.d.ts +7 -0
- package/dist/app/InstallationDiagnostics.js +23 -0
- package/dist/app/OrientationGuard.d.ts +8 -0
- package/dist/app/OrientationGuard.js +9 -0
- package/dist/app/appearance.d.ts +18 -0
- package/dist/app/appearance.js +15 -0
- package/dist/app/appearanceStore.d.ts +30 -0
- package/dist/app/appearanceStore.js +228 -0
- package/dist/app/backgroundUpdate.d.ts +20 -0
- package/dist/app/backgroundUpdate.js +151 -0
- package/dist/app/buildInfo.d.ts +11 -0
- package/dist/app/buildInfo.js +12 -0
- package/dist/app/buildInfoBuild.d.ts +3 -0
- package/dist/app/buildInfoBuild.js +12 -0
- package/dist/app/checkCli.d.ts +1 -0
- package/dist/app/checkCli.js +73 -0
- package/dist/app/coldLaunchUpdate.d.ts +14 -0
- package/dist/app/coldLaunchUpdate.js +384 -0
- package/dist/app/definition.d.ts +85 -0
- package/dist/app/definition.js +347 -0
- package/dist/app/deployment.d.ts +28 -0
- package/dist/app/deployment.js +352 -0
- package/dist/app/deploymentBuild.d.ts +3 -0
- package/dist/app/deploymentBuild.js +55 -0
- package/dist/app/earlyWorker.d.ts +3 -0
- package/dist/app/earlyWorker.js +77 -0
- package/dist/app/head.d.ts +10 -0
- package/dist/app/head.js +120 -0
- package/dist/app/icons.d.ts +4 -0
- package/dist/app/icons.js +35 -0
- package/dist/app/install.d.ts +18 -0
- package/dist/app/install.js +82 -0
- package/dist/app/installCheck.d.ts +2 -0
- package/dist/app/installCheck.js +148 -0
- package/dist/app/installContext.d.ts +35 -0
- package/dist/app/installContext.js +45 -0
- package/dist/app/installCustom.d.ts +25 -0
- package/dist/app/installCustom.js +55 -0
- package/dist/app/installExperience.d.ts +22 -0
- package/dist/app/installExperience.js +389 -0
- package/dist/app/installExperienceDevice.d.ts +29 -0
- package/dist/app/installExperienceDevice.js +160 -0
- package/dist/app/installExperienceHome.d.ts +16 -0
- package/dist/app/installExperienceHome.js +304 -0
- package/dist/app/installExperienceRuntime.d.ts +37 -0
- package/dist/app/installExperienceRuntime.js +285 -0
- package/dist/app/installPolicy.d.ts +28 -0
- package/dist/app/installPolicy.js +90 -0
- package/dist/app/installQr.d.ts +10 -0
- package/dist/app/installQr.js +139 -0
- package/dist/app/installStrings.d.ts +52 -0
- package/dist/app/installStrings.js +75 -0
- package/dist/app/installTipPath.d.ts +12 -0
- package/dist/app/installTipPath.js +9 -0
- package/dist/app/installationFailure.d.ts +14 -0
- package/dist/app/installationFailure.js +38 -0
- package/dist/app/launch.d.ts +7 -0
- package/dist/app/launch.js +241 -0
- package/dist/app/launchReadiness.d.ts +9 -0
- package/dist/app/launchReadiness.js +72 -0
- package/dist/app/launchScreen.d.ts +16 -0
- package/dist/app/launchScreen.js +14 -0
- package/dist/app/launchScreenRuntime.d.ts +19 -0
- package/dist/app/launchScreenRuntime.js +313 -0
- package/dist/app/launchWatchdog.d.ts +1 -0
- package/dist/app/launchWatchdog.js +202 -0
- package/dist/app/manifests.d.ts +19 -0
- package/dist/app/manifests.js +20 -0
- package/dist/app/mdm.d.ts +3 -0
- package/dist/app/mdm.js +20 -0
- package/dist/app/mediaCheck.d.ts +9 -0
- package/dist/app/mediaCheck.js +122 -0
- package/dist/app/mediaTypes.d.ts +2 -0
- package/dist/app/mediaTypes.js +13 -0
- package/dist/app/platformPolicy.d.ts +3 -0
- package/dist/app/platformPolicy.js +10 -0
- package/dist/app/platformScripts.d.ts +6 -0
- package/dist/app/platformScripts.js +65 -0
- package/dist/app/releaseUpdates.d.ts +7 -0
- package/dist/app/releaseUpdates.js +53 -0
- package/dist/app/runtime.d.ts +9 -0
- package/dist/app/runtime.js +38 -0
- package/dist/app/startup.d.ts +30 -0
- package/dist/app/startup.js +24 -0
- package/dist/app/statusBand.d.ts +11 -0
- package/dist/app/statusBand.js +257 -0
- package/dist/app/viewport.d.ts +3 -0
- package/dist/app/viewport.js +42 -0
- package/dist/app/viewportValue.d.ts +5 -0
- package/dist/app/viewportValue.js +14 -0
- package/dist/app/vite.d.ts +27 -0
- package/dist/app/vite.js +440 -0
- package/dist/app/warmImage.d.ts +3 -0
- package/dist/app/warmImage.js +59 -0
- package/dist/content/content.d.ts +153 -0
- package/dist/content/content.js +315 -0
- package/dist/content/layout.d.ts +26 -0
- package/dist/content/layout.js +114 -0
- package/dist/content/scaledMetric.d.ts +3 -0
- package/dist/content/scaledMetric.js +68 -0
- package/dist/content/typography.d.ts +83 -0
- package/dist/content/typography.js +32 -0
- package/dist/controls/ActivityIndicatorSegments.d.ts +4 -0
- package/dist/controls/ActivityIndicatorSegments.js +5 -0
- package/dist/controls/ColorPicker.d.ts +20 -0
- package/dist/controls/ColorPicker.js +70 -0
- package/dist/controls/ControlRow.d.ts +5 -0
- package/dist/controls/ControlRow.js +10 -0
- package/dist/controls/DatePicker.d.ts +41 -0
- package/dist/controls/DatePicker.js +148 -0
- package/dist/controls/ProgressView.d.ts +17 -0
- package/dist/controls/ProgressView.js +24 -0
- package/dist/controls/civilDate.d.ts +49 -0
- package/dist/controls/civilDate.js +112 -0
- package/dist/data/database.d.ts +154 -0
- package/dist/data/database.js +710 -0
- package/dist/data/value-equal.d.ts +2 -0
- package/dist/data/value-equal.js +36 -0
- package/dist/data/write-store.d.ts +38 -0
- package/dist/data/write-store.js +192 -0
- package/dist/dev-menu/DevMenu.d.ts +1 -0
- package/dist/dev-menu/DevMenu.js +121 -0
- package/dist/dev-menu/actions.d.ts +12 -0
- package/dist/dev-menu/actions.js +99 -0
- package/dist/dev-menu/build.d.ts +5 -0
- package/dist/dev-menu/build.js +40 -0
- package/dist/dev-menu/gesture.d.ts +18 -0
- package/dist/dev-menu/gesture.js +109 -0
- package/dist/dev-menu/shake.d.ts +2 -0
- package/dist/dev-menu/shake.js +36 -0
- package/dist/dev-menu/types.d.ts +8 -0
- package/dist/dev-menu/types.js +1 -0
- package/dist/diagnostics.d.ts +3 -0
- package/dist/diagnostics.js +4 -0
- package/dist/docs/app-recipes.md +411 -0
- package/dist/docs/components/file-importer.md +54 -0
- package/dist/docs/components/paste-button.md +48 -0
- package/dist/docs/components/photos-picker.md +53 -0
- package/dist/docs/components/share-link.md +58 -0
- package/dist/docs/content.md +159 -0
- package/dist/docs/controls.md +151 -0
- package/dist/docs/data.md +332 -0
- package/dist/docs/limitations.md +40 -0
- package/dist/docs/messaging-scroll.md +234 -0
- package/dist/docs/networking.md +190 -0
- package/dist/docs/push.md +215 -0
- package/dist/docs/swiftui-reference.md +1895 -0
- package/dist/docs/symbols.md +293 -0
- package/dist/docs/tokens.md +60 -0
- package/dist/fidelity/devAssertions.d.ts +21 -0
- package/dist/fidelity/devAssertions.js +199 -0
- package/dist/focus/focusIntentMachine.d.ts +106 -0
- package/dist/focus/focusIntentMachine.js +359 -0
- package/dist/focus/navigationFocus.d.ts +42 -0
- package/dist/focus/navigationFocus.js +241 -0
- package/dist/focus/programmaticFocus.d.ts +15 -0
- package/dist/focus/programmaticFocus.js +152 -0
- package/dist/gestures/GestureView.d.ts +12 -0
- package/dist/gestures/GestureView.js +321 -0
- package/dist/gestures/arena.d.ts +138 -0
- package/dist/gestures/arena.js +417 -0
- package/dist/gestures/existingCompetitors.d.ts +79 -0
- package/dist/gestures/existingCompetitors.js +82 -0
- package/dist/gestures/gesture.d.ts +62 -0
- package/dist/gestures/gesture.js +107 -0
- package/dist/glass/ControlLens.d.ts +46 -0
- package/dist/glass/ControlLens.js +88 -0
- package/dist/glass/GlassBar.d.ts +9 -0
- package/dist/glass/GlassBar.js +22 -0
- package/dist/glass/GlassConfusionReview.d.ts +3 -0
- package/dist/glass/GlassConfusionReview.js +185 -0
- package/dist/glass/GlassEffect.d.ts +69 -0
- package/dist/glass/GlassEffect.js +550 -0
- package/dist/glass/GlassMaterialRoot.d.ts +7 -0
- package/dist/glass/GlassMaterialRoot.js +39 -0
- package/dist/glass/GlassPresentation.d.ts +28 -0
- package/dist/glass/GlassPresentation.js +1038 -0
- package/dist/glass/GlassProbeIcons.d.ts +8 -0
- package/dist/glass/GlassProbeIcons.js +12 -0
- package/dist/glass/GlassProbeOverlay.d.ts +52 -0
- package/dist/glass/GlassProbeOverlay.js +45 -0
- package/dist/glass/GlassTextField.d.ts +22 -0
- package/dist/glass/GlassTextField.js +12 -0
- package/dist/glass/MaterialEffectRoot.d.ts +9 -0
- package/dist/glass/MaterialEffectRoot.js +189 -0
- package/dist/glass/Menu.d.ts +3 -0
- package/dist/glass/Menu.js +35 -0
- package/dist/glass/MenuStack.d.ts +23 -0
- package/dist/glass/MenuStack.js +371 -0
- package/dist/glass/MenuSymbol.d.ts +7 -0
- package/dist/glass/MenuSymbol.js +16 -0
- package/dist/glass/MorphEllipsisArtwork.d.ts +2 -0
- package/dist/glass/MorphEllipsisArtwork.js +6 -0
- package/dist/glass/TabBar.d.ts +29 -0
- package/dist/glass/TabBar.js +169 -0
- package/dist/glass/capability.d.ts +25 -0
- package/dist/glass/capability.js +63 -0
- package/dist/glass/captureWindow.d.ts +60 -0
- package/dist/glass/captureWindow.js +119 -0
- package/dist/glass/confusionSession.d.ts +41 -0
- package/dist/glass/confusionSession.js +44 -0
- package/dist/glass/contactPhysics.d.ts +130 -0
- package/dist/glass/contactPhysics.js +214 -0
- package/dist/glass/context.d.ts +37 -0
- package/dist/glass/context.js +11 -0
- package/dist/glass/errorAlert.d.ts +6 -0
- package/dist/glass/errorAlert.js +57 -0
- package/dist/glass/errors.d.ts +22 -0
- package/dist/glass/errors.js +78 -0
- package/dist/glass/failurePolicy.d.ts +4 -0
- package/dist/glass/failurePolicy.js +20 -0
- package/dist/glass/fallback/material.d.ts +16 -0
- package/dist/glass/fallback/material.js +87 -0
- package/dist/glass/fallback/regions.d.ts +16 -0
- package/dist/glass/fallback/regions.js +249 -0
- package/dist/glass/fallback/runtime.d.ts +72 -0
- package/dist/glass/fallback/runtime.js +278 -0
- package/dist/glass/fallback/selection.d.ts +2 -0
- package/dist/glass/fallback/selection.js +9 -0
- package/dist/glass/fieldGeometry.d.ts +28 -0
- package/dist/glass/fieldGeometry.js +64 -0
- package/dist/glass/fieldMotion.d.ts +42 -0
- package/dist/glass/fieldMotion.js +47 -0
- package/dist/glass/glassContact.d.ts +76 -0
- package/dist/glass/glassContact.js +153 -0
- package/dist/glass/glassProbeSettings.d.ts +18 -0
- package/dist/glass/glassProbeSettings.js +133 -0
- package/dist/glass/lens/Scene.d.ts +108 -0
- package/dist/glass/lens/Scene.js +553 -0
- package/dist/glass/lens/backgrounds.json +103 -0
- package/dist/glass/lens/bitmapBackdrop.d.ts +14 -0
- package/dist/glass/lens/bitmapBackdrop.js +35 -0
- package/dist/glass/lens/controlLift.d.ts +94 -0
- package/dist/glass/lens/controlLift.js +78 -0
- package/dist/glass/lens/data.d.ts +19 -0
- package/dist/glass/lens/data.js +161 -0
- package/dist/glass/lens/drawableTop.d.ts +16 -0
- package/dist/glass/lens/drawableTop.js +15 -0
- package/dist/glass/lens/icons.d.ts +9 -0
- package/dist/glass/lens/icons.js +34 -0
- package/dist/glass/lens/interactiveContact.d.ts +33 -0
- package/dist/glass/lens/interactiveContact.js +158 -0
- package/dist/glass/lens/interactivePress.d.ts +95 -0
- package/dist/glass/lens/interactivePress.js +169 -0
- package/dist/glass/lens/ios27GlyphFit.json +126 -0
- package/dist/glass/lens/lensLightingSamples.json +1 -0
- package/dist/glass/lens/lensPress.d.ts +22 -0
- package/dist/glass/lens/lensPress.js +68 -0
- package/dist/glass/lens/lensPressSamples.json +1 -0
- package/dist/glass/lens/liquidMotion.d.ts +50 -0
- package/dist/glass/lens/liquidMotion.js +239 -0
- package/dist/glass/lens/materialGlassRecipes.json +776 -0
- package/dist/glass/lens/materialUniforms.d.ts +22 -0
- package/dist/glass/lens/materialUniforms.js +117 -0
- package/dist/glass/lens/menu-closing-close-fit.json +380 -0
- package/dist/glass/lens/menu-opening-native-fits.json +911 -0
- package/dist/glass/lens/menuContextFit.json +88 -0
- package/dist/glass/lens/menuContextOpacity.json +98 -0
- package/dist/glass/lens/menuContextPresentation.d.ts +15 -0
- package/dist/glass/lens/menuContextPresentation.js +65 -0
- package/dist/glass/lens/menuCornerFit.json +252 -0
- package/dist/glass/lens/menuCornerMotion.d.ts +9 -0
- package/dist/glass/lens/menuCornerMotion.js +5 -0
- package/dist/glass/lens/menuDropFit.json +64 -0
- package/dist/glass/lens/menuField.d.ts +178 -0
- package/dist/glass/lens/menuField.js +564 -0
- package/dist/glass/lens/menuGesturePresentation.d.ts +12 -0
- package/dist/glass/lens/menuGesturePresentation.js +42 -0
- package/dist/glass/lens/menuGlyphDropFit.json +38 -0
- package/dist/glass/lens/menuMorphFit.json +564 -0
- package/dist/glass/lens/menuMorphMotion.d.ts +70 -0
- package/dist/glass/lens/menuMorphMotion.js +219 -0
- package/dist/glass/lens/menuMorphPhoneFit.json +85 -0
- package/dist/glass/lens/menuMotion.d.ts +81 -0
- package/dist/glass/lens/menuMotion.js +323 -0
- package/dist/glass/lens/menuPlacement.d.ts +5 -0
- package/dist/glass/lens/menuPlacement.js +29 -0
- package/dist/glass/lens/menuSpring.d.ts +18 -0
- package/dist/glass/lens/menuSpring.js +29 -0
- package/dist/glass/lens/menuTouchLight.d.ts +13 -0
- package/dist/glass/lens/menuTouchLight.js +147 -0
- package/dist/glass/lens/mirrorConstants.d.ts +1 -0
- package/dist/glass/lens/mirrorConstants.js +2 -0
- package/dist/glass/lens/mirrorExtents.d.ts +52 -0
- package/dist/glass/lens/mirrorExtents.js +264 -0
- package/dist/glass/lens/mirrorInvalidation.d.ts +6 -0
- package/dist/glass/lens/mirrorInvalidation.js +10 -0
- package/dist/glass/lens/mirrorReuse.d.ts +20 -0
- package/dist/glass/lens/mirrorReuse.js +166 -0
- package/dist/glass/lens/motion.d.ts +62 -0
- package/dist/glass/lens/motion.js +93 -0
- package/dist/glass/lens/recordedMotion.d.ts +6 -0
- package/dist/glass/lens/recordedMotion.js +44 -0
- package/dist/glass/lens/referenceBackground.d.ts +9 -0
- package/dist/glass/lens/referenceBackground.js +151 -0
- package/dist/glass/lens/referenceProfiles.d.ts +21 -0
- package/dist/glass/lens/referenceProfiles.js +33 -0
- package/dist/glass/lens/referenceRegularTint.d.ts +12 -0
- package/dist/glass/lens/referenceRegularTint.js +41 -0
- package/dist/glass/lens/scopeSegments.d.ts +12 -0
- package/dist/glass/lens/scopeSegments.js +18 -0
- package/dist/glass/lens/scrollAnchoring.d.ts +15 -0
- package/dist/glass/lens/scrollAnchoring.js +17 -0
- package/dist/glass/lens/selectionParameters.json +94 -0
- package/dist/glass/lens/shapeParameters.json +198 -0
- package/dist/glass/lens/tab-motion-native-fits.json +778 -0
- package/dist/glass/lens/tabAccessoryMotion.d.ts +52 -0
- package/dist/glass/lens/tabAccessoryMotion.js +52 -0
- package/dist/glass/lens/tabChromaRimModel.d.ts +43 -0
- package/dist/glass/lens/tabChromaRimModel.js +93 -0
- package/dist/glass/lens/tabCollapseInkSamples.json +49 -0
- package/dist/glass/lens/tabCompactGesture.d.ts +15 -0
- package/dist/glass/lens/tabCompactGesture.js +50 -0
- package/dist/glass/lens/tabGeometryAttack.json +70 -0
- package/dist/glass/lens/tabGlyphColours.d.ts +17 -0
- package/dist/glass/lens/tabGlyphColours.js +37 -0
- package/dist/glass/lens/tabInterruptedDecaySamples.json +245 -0
- package/dist/glass/lens/tabInterruptedRestoreSamples.json +290 -0
- package/dist/glass/lens/tabMaterialModel.d.ts +10 -0
- package/dist/glass/lens/tabMaterialModel.js +108 -0
- package/dist/glass/lens/tabMinimizeInk.d.ts +15 -0
- package/dist/glass/lens/tabMinimizeInk.js +14 -0
- package/dist/glass/lens/tabMinimizeMotion.d.ts +36 -0
- package/dist/glass/lens/tabMinimizeMotion.js +107 -0
- package/dist/glass/lens/tabMinimizeSamples.json +411 -0
- package/dist/glass/lens/tabMotion.d.ts +91 -0
- package/dist/glass/lens/tabMotion.js +478 -0
- package/dist/glass/lens/tabMotionFit.d.ts +76 -0
- package/dist/glass/lens/tabMotionFit.js +61 -0
- package/dist/glass/lens/tabNativeSymbols.d.ts +1 -0
- package/dist/glass/lens/tabNativeSymbols.js +7 -0
- package/dist/glass/lens/tabPresentation.d.ts +21 -0
- package/dist/glass/lens/tabPresentation.js +20 -0
- package/dist/glass/lens/tabRelease.d.ts +5 -0
- package/dist/glass/lens/tabRelease.js +14 -0
- package/dist/glass/lens/tabRestoreMotion.d.ts +19 -0
- package/dist/glass/lens/tabRestoreMotion.js +65 -0
- package/dist/glass/lens/tabRestoreSamples.json +1272 -0
- package/dist/glass/lens/tabSearchMember.d.ts +38 -0
- package/dist/glass/lens/tabSearchMember.js +74 -0
- package/dist/glass/lens/tabSelectionMaterial.d.ts +20 -0
- package/dist/glass/lens/tabSelectionMaterial.js +23 -0
- package/dist/glass/lens/tabSelectionMeasurements.test-fixture.d.ts +9 -0
- package/dist/glass/lens/tabSelectionMeasurements.test-fixture.js +74 -0
- package/dist/glass/lens/tabSettingsSymbol.d.ts +1 -0
- package/dist/glass/lens/tabSettingsSymbol.js +2 -0
- package/dist/glass/lens/tabShapeResponse.d.ts +7 -0
- package/dist/glass/lens/tabShapeResponse.js +30 -0
- package/dist/glass/lens/theme.d.ts +18 -0
- package/dist/glass/lens/theme.js +40 -0
- package/dist/glass/lens/trace.d.ts +2 -0
- package/dist/glass/lens/trace.js +27 -0
- package/dist/glass/liquidContext.d.ts +31 -0
- package/dist/glass/liquidContext.js +2 -0
- package/dist/glass/menuPanelPlacement.d.ts +51 -0
- package/dist/glass/menuPanelPlacement.js +128 -0
- package/dist/glass/menuPresenter.d.ts +34 -0
- package/dist/glass/menuPresenter.js +983 -0
- package/dist/glass/menuSymbolMasks.d.ts +1 -0
- package/dist/glass/menuSymbolMasks.js +1 -0
- package/dist/glass/menuSymbolTokens.d.ts +22 -0
- package/dist/glass/menuSymbolTokens.js +12 -0
- package/dist/glass/menuTriggerGeometry.d.ts +99 -0
- package/dist/glass/menuTriggerGeometry.js +126 -0
- package/dist/glass/menuTriggerSnapshot.d.ts +77 -0
- package/dist/glass/menuTriggerSnapshot.js +69 -0
- package/dist/glass/menuTypes.d.ts +22 -0
- package/dist/glass/menuTypes.js +1 -0
- package/dist/glass/morphField.d.ts +18 -0
- package/dist/glass/morphField.js +139 -0
- package/dist/glass/presentationFrame.d.ts +43 -0
- package/dist/glass/presentationFrame.js +82 -0
- package/dist/glass/pressHighlight.d.ts +9 -0
- package/dist/glass/pressHighlight.js +158 -0
- package/dist/glass/regionRegistry.d.ts +93 -0
- package/dist/glass/regionRegistry.js +313 -0
- package/dist/glass/regions.d.ts +262 -0
- package/dist/glass/regions.js +147 -0
- package/dist/glass/regularMaterialContext.d.ts +45 -0
- package/dist/glass/regularMaterialContext.js +118 -0
- package/dist/glass/regularTriggerMaterial.d.ts +19 -0
- package/dist/glass/regularTriggerMaterial.js +111 -0
- package/dist/glass/regularTriggerRim.d.ts +163 -0
- package/dist/glass/regularTriggerRim.js +436 -0
- package/dist/glass/renderSpecs.d.ts +454 -0
- package/dist/glass/renderSpecs.js +231 -0
- package/dist/glass/rendererContract.d.ts +205 -0
- package/dist/glass/rendererContract.js +18 -0
- package/dist/glass/shapeTrack.d.ts +53 -0
- package/dist/glass/shapeTrack.js +74 -0
- package/dist/glass/shapeTrackRegistry.d.ts +40 -0
- package/dist/glass/shapeTrackRegistry.js +49 -0
- package/dist/glass/sourceDamage.d.ts +6 -0
- package/dist/glass/sourceDamage.js +8 -0
- package/dist/glass/submenuMotion.d.ts +205 -0
- package/dist/glass/submenuMotion.js +306 -0
- package/dist/glass/tabBarModel.d.ts +12 -0
- package/dist/glass/tabBarModel.js +32 -0
- package/dist/glass/testing.d.ts +14 -0
- package/dist/glass/testing.js +14 -0
- package/dist/glass/tokens.d.ts +79 -0
- package/dist/glass/tokens.js +86 -0
- package/dist/glass/toolbarMaterialContext.d.ts +28 -0
- package/dist/glass/toolbarMaterialContext.js +66 -0
- package/dist/glass/topLayer.d.ts +5 -0
- package/dist/glass/topLayer.js +10 -0
- package/dist/glass/unionOutline.d.ts +11 -0
- package/dist/glass/unionOutline.js +98 -0
- package/dist/glass/visibleDeadline.d.ts +21 -0
- package/dist/glass/visibleDeadline.js +61 -0
- package/dist/glass/webgpu/accessoryMorph.d.ts +99 -0
- package/dist/glass/webgpu/accessoryMorph.js +473 -0
- package/dist/glass/webgpu/accessoryTrack.d.ts +47 -0
- package/dist/glass/webgpu/accessoryTrack.js +59 -0
- package/dist/glass/webgpu/areaMips.d.ts +50 -0
- package/dist/glass/webgpu/areaMips.js +166 -0
- package/dist/glass/webgpu/backdrop.d.ts +86 -0
- package/dist/glass/webgpu/backdrop.js +243 -0
- package/dist/glass/webgpu/backdropLayers.d.ts +29 -0
- package/dist/glass/webgpu/backdropLayers.js +182 -0
- package/dist/glass/webgpu/backgroundLayers.d.ts +71 -0
- package/dist/glass/webgpu/backgroundLayers.js +385 -0
- package/dist/glass/webgpu/cadence.d.ts +18 -0
- package/dist/glass/webgpu/cadence.js +35 -0
- package/dist/glass/webgpu/canvasSubmission.d.ts +6 -0
- package/dist/glass/webgpu/canvasSubmission.js +22 -0
- package/dist/glass/webgpu/capture.d.ts +77 -0
- package/dist/glass/webgpu/capture.js +534 -0
- package/dist/glass/webgpu/captureBands.d.ts +39 -0
- package/dist/glass/webgpu/captureBands.js +53 -0
- package/dist/glass/webgpu/captureContext.d.ts +1 -0
- package/dist/glass/webgpu/captureContext.js +6 -0
- package/dist/glass/webgpu/captureDemand.d.ts +44 -0
- package/dist/glass/webgpu/captureDemand.js +81 -0
- package/dist/glass/webgpu/captureRelease.d.ts +18 -0
- package/dist/glass/webgpu/captureRelease.js +39 -0
- package/dist/glass/webgpu/client.d.ts +49 -0
- package/dist/glass/webgpu/client.js +336 -0
- package/dist/glass/webgpu/contextBackdrop.d.ts +6 -0
- package/dist/glass/webgpu/contextBackdrop.js +13 -0
- package/dist/glass/webgpu/contextComposite.d.ts +64 -0
- package/dist/glass/webgpu/contextComposite.js +66 -0
- package/dist/glass/webgpu/decodedImage.d.ts +1 -0
- package/dist/glass/webgpu/decodedImage.js +2 -0
- package/dist/glass/webgpu/deviceLimits.d.ts +5 -0
- package/dist/glass/webgpu/deviceLimits.js +8 -0
- package/dist/glass/webgpu/edgePass.d.ts +9 -0
- package/dist/glass/webgpu/edgePass.js +170 -0
- package/dist/glass/webgpu/entry.worker.d.ts +1 -0
- package/dist/glass/webgpu/entry.worker.js +28 -0
- package/dist/glass/webgpu/errorCode.d.ts +3 -0
- package/dist/glass/webgpu/errorCode.js +27 -0
- package/dist/glass/webgpu/errors.d.ts +8 -0
- package/dist/glass/webgpu/errors.js +55 -0
- package/dist/glass/webgpu/fieldInk.d.ts +9 -0
- package/dist/glass/webgpu/fieldInk.js +62 -0
- package/dist/glass/webgpu/foreground.d.ts +29 -0
- package/dist/glass/webgpu/foreground.js +313 -0
- package/dist/glass/webgpu/frameClock.d.ts +34 -0
- package/dist/glass/webgpu/frameClock.js +60 -0
- package/dist/glass/webgpu/frameGraph.d.ts +57 -0
- package/dist/glass/webgpu/frameGraph.js +287 -0
- package/dist/glass/webgpu/frameProbe.d.ts +58 -0
- package/dist/glass/webgpu/frameProbe.js +181 -0
- package/dist/glass/webgpu/interactionProfiles.d.ts +10 -0
- package/dist/glass/webgpu/interactionProfiles.js +25 -0
- package/dist/glass/webgpu/keptGlyphs.d.ts +68 -0
- package/dist/glass/webgpu/keptGlyphs.js +85 -0
- package/dist/glass/webgpu/keyboardBackdrop.d.ts +12 -0
- package/dist/glass/webgpu/keyboardBackdrop.js +51 -0
- package/dist/glass/webgpu/lagTrace.d.ts +31 -0
- package/dist/glass/webgpu/lagTrace.js +22 -0
- package/dist/glass/webgpu/layers.d.ts +100 -0
- package/dist/glass/webgpu/layers.js +301 -0
- package/dist/glass/webgpu/lensDebug.d.ts +4 -0
- package/dist/glass/webgpu/lensDebug.js +28 -0
- package/dist/glass/webgpu/lensDiffusion.d.ts +2 -0
- package/dist/glass/webgpu/lensDiffusion.js +20 -0
- package/dist/glass/webgpu/lensLightingFit.json +222 -0
- package/dist/glass/webgpu/menuLiftInput.d.ts +30 -0
- package/dist/glass/webgpu/menuLiftInput.js +39 -0
- package/dist/glass/webgpu/menuSurfaceGuard.d.ts +17 -0
- package/dist/glass/webgpu/menuSurfaceGuard.js +26 -0
- package/dist/glass/webgpu/minimize.d.ts +184 -0
- package/dist/glass/webgpu/minimize.js +470 -0
- package/dist/glass/webgpu/navigationAtlasCopy.d.ts +12 -0
- package/dist/glass/webgpu/navigationAtlasCopy.js +121 -0
- package/dist/glass/webgpu/navigationTracks.d.ts +3 -0
- package/dist/glass/webgpu/navigationTracks.js +84 -0
- package/dist/glass/webgpu/passes.d.ts +204 -0
- package/dist/glass/webgpu/passes.js +394 -0
- package/dist/glass/webgpu/pendingSurfaceInput.d.ts +29 -0
- package/dist/glass/webgpu/pendingSurfaceInput.js +51 -0
- package/dist/glass/webgpu/preparedSourcePixels.d.ts +21 -0
- package/dist/glass/webgpu/preparedSourcePixels.js +43 -0
- package/dist/glass/webgpu/presentationBackdrop.d.ts +3 -0
- package/dist/glass/webgpu/presentationBackdrop.js +33 -0
- package/dist/glass/webgpu/presentationDiffusion.d.ts +48 -0
- package/dist/glass/webgpu/presentationDiffusion.js +57 -0
- package/dist/glass/webgpu/presentationMaterial.d.ts +9 -0
- package/dist/glass/webgpu/presentationMaterial.js +156 -0
- package/dist/glass/webgpu/presenterViewport.d.ts +11 -0
- package/dist/glass/webgpu/presenterViewport.js +193 -0
- package/dist/glass/webgpu/production.d.ts +552 -0
- package/dist/glass/webgpu/production.js +1929 -0
- package/dist/glass/webgpu/productionInstalls.d.ts +53 -0
- package/dist/glass/webgpu/productionInstalls.js +225 -0
- package/dist/glass/webgpu/productionNavigation.d.ts +5 -0
- package/dist/glass/webgpu/productionNavigation.js +360 -0
- package/dist/glass/webgpu/productionPinnedTop.d.ts +80 -0
- package/dist/glass/webgpu/productionPinnedTop.js +77 -0
- package/dist/glass/webgpu/productionPinnedTopPrepare.d.ts +21 -0
- package/dist/glass/webgpu/productionPinnedTopPrepare.js +132 -0
- package/dist/glass/webgpu/productionPlanes.d.ts +135 -0
- package/dist/glass/webgpu/productionPlanes.js +412 -0
- package/dist/glass/webgpu/productionPrepare.d.ts +18 -0
- package/dist/glass/webgpu/productionPrepare.js +832 -0
- package/dist/glass/webgpu/productionTracks.d.ts +73 -0
- package/dist/glass/webgpu/productionTracks.js +22 -0
- package/dist/glass/webgpu/productionViewport.d.ts +20 -0
- package/dist/glass/webgpu/productionViewport.js +52 -0
- package/dist/glass/webgpu/profile.d.ts +37 -0
- package/dist/glass/webgpu/profile.js +101 -0
- package/dist/glass/webgpu/raster.d.ts +337 -0
- package/dist/glass/webgpu/raster.js +1360 -0
- package/dist/glass/webgpu/rasterMaterial.d.ts +19 -0
- package/dist/glass/webgpu/rasterMaterial.js +197 -0
- package/dist/glass/webgpu/rasterShaders.d.ts +7 -0
- package/dist/glass/webgpu/rasterShaders.js +105 -0
- package/dist/glass/webgpu/rasterUniforms.d.ts +304 -0
- package/dist/glass/webgpu/rasterUniforms.js +415 -0
- package/dist/glass/webgpu/regionBackdrop.d.ts +8 -0
- package/dist/glass/webgpu/regionBackdrop.js +12 -0
- package/dist/glass/webgpu/regionBridge.d.ts +145 -0
- package/dist/glass/webgpu/regionBridge.js +1691 -0
- package/dist/glass/webgpu/regionScene.d.ts +294 -0
- package/dist/glass/webgpu/regionScene.js +2144 -0
- package/dist/glass/webgpu/renderer.d.ts +8 -0
- package/dist/glass/webgpu/renderer.js +1478 -0
- package/dist/glass/webgpu/residentPlanes.d.ts +69 -0
- package/dist/glass/webgpu/residentPlanes.js +104 -0
- package/dist/glass/webgpu/restMaterial.d.ts +6 -0
- package/dist/glass/webgpu/restMaterial.js +65 -0
- package/dist/glass/webgpu/resumeOverlay.d.ts +44 -0
- package/dist/glass/webgpu/resumeOverlay.js +82 -0
- package/dist/glass/webgpu/sampleTrace.d.ts +11 -0
- package/dist/glass/webgpu/sampleTrace.js +50 -0
- package/dist/glass/webgpu/scrollEdgeBackdrop.d.ts +89 -0
- package/dist/glass/webgpu/scrollEdgeBackdrop.js +177 -0
- package/dist/glass/webgpu/scrollEdgePose.d.ts +4 -0
- package/dist/glass/webgpu/scrollEdgePose.js +49 -0
- package/dist/glass/webgpu/selectionThumb.d.ts +81 -0
- package/dist/glass/webgpu/selectionThumb.js +209 -0
- package/dist/glass/webgpu/shaders.d.ts +67 -0
- package/dist/glass/webgpu/shaders.js +595 -0
- package/dist/glass/webgpu/sharedLift.d.ts +7 -0
- package/dist/glass/webgpu/sharedLift.js +223 -0
- package/dist/glass/webgpu/sourcePixels.d.ts +42 -0
- package/dist/glass/webgpu/sourcePixels.js +140 -0
- package/dist/glass/webgpu/sourcePixels.worker.d.ts +1 -0
- package/dist/glass/webgpu/sourcePixels.worker.js +62 -0
- package/dist/glass/webgpu/tabGlyphInk.d.ts +14 -0
- package/dist/glass/webgpu/tabGlyphInk.js +72 -0
- package/dist/glass/webgpu/touchLight.d.ts +4 -0
- package/dist/glass/webgpu/touchLight.js +15 -0
- package/dist/glass/worker/client.d.ts +21 -0
- package/dist/glass/worker/client.js +152 -0
- package/dist/glass/worker/experiment.d.ts +13 -0
- package/dist/glass/worker/experiment.js +221 -0
- package/dist/glass/worker/fixture.d.ts +21 -0
- package/dist/glass/worker/fixture.js +152 -0
- package/dist/glass/worker/protocol.d.ts +439 -0
- package/dist/glass/worker/protocol.js +5 -0
- package/dist/graphicsProbe.d.ts +19 -0
- package/dist/graphicsProbe.js +111 -0
- package/dist/haptics/SensoryButton.d.ts +21 -0
- package/dist/haptics/SensoryButton.js +80 -0
- package/dist/image/ContentAdmission.d.ts +19 -0
- package/dist/image/ContentAdmission.js +70 -0
- package/dist/image/Image.d.ts +30 -0
- package/dist/image/Image.js +341 -0
- package/dist/image/asset.d.ts +9 -0
- package/dist/image/asset.js +1 -0
- package/dist/image/contentReadiness.d.ts +7 -0
- package/dist/image/contentReadiness.js +54 -0
- package/dist/image/imports.d.ts +4 -0
- package/dist/image/resource.d.ts +53 -0
- package/dist/image/resource.js +286 -0
- package/dist/image/vite.d.ts +3 -0
- package/dist/image/vite.js +63 -0
- package/dist/index.d.ts +87 -0
- package/dist/index.js +102 -0
- package/dist/install.d.ts +8 -0
- package/dist/install.js +8 -0
- package/dist/internal.d.ts +96 -0
- package/dist/internal.js +80 -0
- package/dist/keyboard/adapter.d.ts +82 -0
- package/dist/keyboard/adapter.js +727 -0
- package/dist/keyboard/avoidance.d.ts +24 -0
- package/dist/keyboard/avoidance.js +283 -0
- package/dist/keyboard/caretMirror.d.ts +13 -0
- package/dist/keyboard/caretMirror.js +122 -0
- package/dist/keyboard/expectedKeyboard.d.ts +10 -0
- package/dist/keyboard/expectedKeyboard.js +60 -0
- package/dist/keyboard/geometry.d.ts +10 -0
- package/dist/keyboard/geometry.js +21 -0
- package/dist/keyboard/modalTapFocus.d.ts +41 -0
- package/dist/keyboard/modalTapFocus.js +224 -0
- package/dist/keyboard/motion.d.ts +54 -0
- package/dist/keyboard/motion.js +80 -0
- package/dist/keyboard/translation.d.ts +12 -0
- package/dist/keyboard/translation.js +19 -0
- package/dist/layout/adaptiveTabsContext.d.ts +5 -0
- package/dist/layout/adaptiveTabsContext.js +2 -0
- package/dist/layout/deviceIdiom.d.ts +4 -0
- package/dist/layout/deviceIdiom.js +12 -0
- package/dist/layout/layoutClass.d.ts +44 -0
- package/dist/layout/layoutClass.js +102 -0
- package/dist/layout/navigationLayoutContext.d.ts +8 -0
- package/dist/layout/navigationLayoutContext.js +5 -0
- package/dist/list-form/ListForm.d.ts +158 -0
- package/dist/list-form/ListForm.js +427 -0
- package/dist/list-form/ListItem.d.ts +30 -0
- package/dist/list-form/ListItem.js +251 -0
- package/dist/list-form/RowLabel.d.ts +14 -0
- package/dist/list-form/RowLabel.js +11 -0
- package/dist/list-form/Slider.d.ts +18 -0
- package/dist/list-form/Slider.js +235 -0
- package/dist/list-form/StepperButton.d.ts +9 -0
- package/dist/list-form/StepperButton.js +60 -0
- package/dist/list-form/Toggle.d.ts +16 -0
- package/dist/list-form/Toggle.js +204 -0
- package/dist/list-form/editMotion.d.ts +15 -0
- package/dist/list-form/editMotion.js +25 -0
- package/dist/list-form/editing.d.ts +102 -0
- package/dist/list-form/editing.js +51 -0
- package/dist/list-form/listContext.d.ts +4 -0
- package/dist/list-form/listContext.js +5 -0
- package/dist/list-form/offsets.d.ts +26 -0
- package/dist/list-form/offsets.js +34 -0
- package/dist/list-form/reorder.d.ts +20 -0
- package/dist/list-form/reorder.js +193 -0
- package/dist/list-form/rowMotion.d.ts +11 -0
- package/dist/list-form/rowMotion.js +236 -0
- package/dist/list-form/rowMotionScope.d.ts +14 -0
- package/dist/list-form/rowMotionScope.js +61 -0
- package/dist/list-form/separatorInsets.d.ts +4 -0
- package/dist/list-form/separatorInsets.js +87 -0
- package/dist/list-form/sliderContact.d.ts +40 -0
- package/dist/list-form/sliderContact.js +98 -0
- package/dist/list-form/state.d.ts +5 -0
- package/dist/list-form/state.js +8 -0
- package/dist/list-form/toggleContact.d.ts +55 -0
- package/dist/list-form/toggleContact.js +164 -0
- package/dist/media/controller.d.ts +7 -0
- package/dist/media/controller.js +612 -0
- package/dist/media/react.d.ts +9 -0
- package/dist/media/react.js +38 -0
- package/dist/media/systemMedia.d.ts +6 -0
- package/dist/media/systemMedia.js +200 -0
- package/dist/media/types.d.ts +83 -0
- package/dist/media/types.js +1 -0
- package/dist/menu/menuContact.d.ts +20 -0
- package/dist/menu/menuContact.js +286 -0
- package/dist/menu/menuGesture.d.ts +84 -0
- package/dist/menu/menuGesture.js +502 -0
- package/dist/menu/menuInteraction.d.ts +17 -0
- package/dist/menu/menuInteraction.js +34 -0
- package/dist/menu/menuOutside.d.ts +9 -0
- package/dist/menu/menuOutside.js +58 -0
- package/dist/menu/menuPanelContact.d.ts +11 -0
- package/dist/menu/menuPanelContact.js +77 -0
- package/dist/menu/menuTriggerHold.d.ts +3 -0
- package/dist/menu/menuTriggerHold.js +52 -0
- package/dist/menu/sampledMotion.d.ts +37 -0
- package/dist/menu/sampledMotion.js +86 -0
- package/dist/modal/lifecycle.d.ts +10 -0
- package/dist/modal/lifecycle.js +189 -0
- package/dist/motion/TransitionView.d.ts +12 -0
- package/dist/motion/TransitionView.js +118 -0
- package/dist/motion/animate.d.ts +20 -0
- package/dist/motion/animate.js +79 -0
- package/dist/motion/animationValue.d.ts +25 -0
- package/dist/motion/animationValue.js +42 -0
- package/dist/motion/composerMotion.d.ts +3 -0
- package/dist/motion/composerMotion.js +15 -0
- package/dist/motion/layoutTransaction.d.ts +7 -0
- package/dist/motion/layoutTransaction.js +28 -0
- package/dist/motion/matchedGeometry.d.ts +55 -0
- package/dist/motion/matchedGeometry.js +412 -0
- package/dist/motion/springPath.d.ts +27 -0
- package/dist/motion/springPath.js +46 -0
- package/dist/motion/springTrack.d.ts +33 -0
- package/dist/motion/springTrack.js +69 -0
- package/dist/motion/transition.d.ts +48 -0
- package/dist/motion/transition.js +56 -0
- package/dist/motion/transitionImages.d.ts +7 -0
- package/dist/motion/transitionImages.js +49 -0
- package/dist/motionProbe.d.ts +227 -0
- package/dist/motionProbe.js +697 -0
- package/dist/motionProbeControls.d.ts +2 -0
- package/dist/motionProbeControls.js +118 -0
- package/dist/motionProbeDelivery.d.ts +15 -0
- package/dist/motionProbeDelivery.js +84 -0
- package/dist/navigation/DetailList.d.ts +9 -0
- package/dist/navigation/DetailList.js +7 -0
- package/dist/navigation/NavigationChrome.d.ts +18 -0
- package/dist/navigation/NavigationChrome.js +195 -0
- package/dist/navigation/NavigationSearchRow.d.ts +9 -0
- package/dist/navigation/NavigationSearchRow.js +101 -0
- package/dist/navigation/NavigationTitleSlots.d.ts +18 -0
- package/dist/navigation/NavigationTitleSlots.js +64 -0
- package/dist/navigation/NavigatorHost.d.ts +17 -0
- package/dist/navigation/NavigatorHost.js +534 -0
- package/dist/navigation/ScreenContainer.d.ts +31 -0
- package/dist/navigation/ScreenContainer.js +219 -0
- package/dist/navigation/ScrubSourceFrames.d.ts +18 -0
- package/dist/navigation/ScrubSourceFrames.js +67 -0
- package/dist/navigation/Sidebar.d.ts +16 -0
- package/dist/navigation/Sidebar.js +20 -0
- package/dist/navigation/SidebarSymbol.d.ts +4 -0
- package/dist/navigation/SidebarSymbol.js +6 -0
- package/dist/navigation/ToolbarGlass.d.ts +2 -0
- package/dist/navigation/ToolbarGlass.js +429 -0
- package/dist/navigation/TransitionEdge.d.ts +4 -0
- package/dist/navigation/TransitionEdge.js +33 -0
- package/dist/navigation/bottomToolbarGeometry.d.ts +6 -0
- package/dist/navigation/bottomToolbarGeometry.js +14 -0
- package/dist/navigation/chromeCurves.d.ts +48 -0
- package/dist/navigation/chromeCurves.js +255 -0
- package/dist/navigation/glassTransition.d.ts +32 -0
- package/dist/navigation/glassTransition.js +55 -0
- package/dist/navigation/horizontalDrag.d.ts +6 -0
- package/dist/navigation/horizontalDrag.js +15 -0
- package/dist/navigation/interactivePop.d.ts +45 -0
- package/dist/navigation/interactivePop.js +86 -0
- package/dist/navigation/interactivePopTypes.d.ts +85 -0
- package/dist/navigation/interactivePopTypes.js +36 -0
- package/dist/navigation/keyboard.d.ts +9 -0
- package/dist/navigation/keyboard.js +55 -0
- package/dist/navigation/motion.d.ts +19 -0
- package/dist/navigation/motion.js +645 -0
- package/dist/navigation/motionTokens.d.ts +43 -0
- package/dist/navigation/motionTokens.js +75 -0
- package/dist/navigation/nativeScrubExperiment.d.ts +5 -0
- package/dist/navigation/nativeScrubExperiment.js +153 -0
- package/dist/navigation/nativeScrubSource.d.ts +15 -0
- package/dist/navigation/nativeScrubSource.js +88 -0
- package/dist/navigation/navigationChromeModel.d.ts +8 -0
- package/dist/navigation/navigationChromeModel.js +30 -0
- package/dist/navigation/navigationContext.d.ts +22 -0
- package/dist/navigation/navigationContext.js +65 -0
- package/dist/navigation/navigationEdge.d.ts +4 -0
- package/dist/navigation/navigationEdge.js +101 -0
- package/dist/navigation/pointerPop.d.ts +32 -0
- package/dist/navigation/pointerPop.js +206 -0
- package/dist/navigation/probeLayers.d.ts +7 -0
- package/dist/navigation/probeLayers.js +8 -0
- package/dist/navigation/registry.d.ts +14 -0
- package/dist/navigation/registry.js +31 -0
- package/dist/navigation/releaseDecision.d.ts +21 -0
- package/dist/navigation/releaseDecision.js +94 -0
- package/dist/navigation/releaseTrajectory.d.ts +20 -0
- package/dist/navigation/releaseTrajectory.js +95 -0
- package/dist/navigation/releaseVelocity.d.ts +9 -0
- package/dist/navigation/releaseVelocity.js +38 -0
- package/dist/navigation/routeCodec.d.ts +33 -0
- package/dist/navigation/routeCodec.js +123 -0
- package/dist/navigation/scrollEdge.d.ts +18 -0
- package/dist/navigation/scrollEdge.js +66 -0
- package/dist/navigation/scrubFrameLoop.d.ts +44 -0
- package/dist/navigation/scrubFrameLoop.js +129 -0
- package/dist/navigation/sidebarSelection.d.ts +5 -0
- package/dist/navigation/sidebarSelection.js +8 -0
- package/dist/navigation/splitContext.d.ts +17 -0
- package/dist/navigation/splitContext.js +9 -0
- package/dist/navigation/splitState.d.ts +46 -0
- package/dist/navigation/splitState.js +130 -0
- package/dist/navigation/stack.d.ts +25 -0
- package/dist/navigation/stack.js +136 -0
- package/dist/navigation/store.d.ts +80 -0
- package/dist/navigation/store.js +464 -0
- package/dist/navigation/toolbarGlassMotion.d.ts +40 -0
- package/dist/navigation/toolbarGlassMotion.js +202 -0
- package/dist/navigation/toolbarMinimization.d.ts +9 -0
- package/dist/navigation/toolbarMinimization.js +76 -0
- package/dist/navigation/toolbarMotionOwner.d.ts +6 -0
- package/dist/navigation/toolbarMotionOwner.js +30 -0
- package/dist/navigation/touchArbitration.d.ts +34 -0
- package/dist/navigation/touchArbitration.js +550 -0
- package/dist/navigation/tracking.d.ts +7 -0
- package/dist/navigation/tracking.js +19 -0
- package/dist/navigation/transitionBindings.d.ts +31 -0
- package/dist/navigation/transitionBindings.js +106 -0
- package/dist/navigation/transitionChrome.d.ts +31 -0
- package/dist/navigation/transitionChrome.js +380 -0
- package/dist/navigation/transitionPose.d.ts +52 -0
- package/dist/navigation/transitionPose.js +295 -0
- package/dist/navigation/types.d.ts +133 -0
- package/dist/navigation/types.js +1 -0
- package/dist/navigation/zoomDrag.d.ts +3 -0
- package/dist/navigation/zoomDrag.js +125 -0
- package/dist/navigation/zoomGeometry.d.ts +48 -0
- package/dist/navigation/zoomGeometry.js +94 -0
- package/dist/navigation/zoomGlass.d.ts +27 -0
- package/dist/navigation/zoomGlass.js +64 -0
- package/dist/navigation/zoomMotion.d.ts +73 -0
- package/dist/navigation/zoomMotion.js +104 -0
- package/dist/navigation/zoomTransition.d.ts +82 -0
- package/dist/navigation/zoomTransition.js +975 -0
- package/dist/presentation/Presentation.d.ts +61 -0
- package/dist/presentation/Presentation.js +92 -0
- package/dist/presentation/PresentationSurface.d.ts +29 -0
- package/dist/presentation/PresentationSurface.js +586 -0
- package/dist/presentation/PresentedSheet.d.ts +2 -0
- package/dist/presentation/PresentedSheet.js +571 -0
- package/dist/presentation/activity.d.ts +3 -0
- package/dist/presentation/activity.js +24 -0
- package/dist/presentation/coldLaunch.d.ts +2 -0
- package/dist/presentation/coldLaunch.js +19 -0
- package/dist/presentation/dismiss.d.ts +26 -0
- package/dist/presentation/dismiss.js +30 -0
- package/dist/presentation/glassMotion.d.ts +39 -0
- package/dist/presentation/glassMotion.js +259 -0
- package/dist/presentation/glassReady.d.ts +11 -0
- package/dist/presentation/glassReady.js +246 -0
- package/dist/presentation/model.d.ts +108 -0
- package/dist/presentation/model.js +183 -0
- package/dist/presentation/motion.d.ts +56 -0
- package/dist/presentation/motion.js +263 -0
- package/dist/presentation/presentationMotion.d.ts +10 -0
- package/dist/presentation/presentationMotion.js +74 -0
- package/dist/presentation/presentationSource.d.ts +2 -0
- package/dist/presentation/presentationSource.js +28 -0
- package/dist/presentation/sheetChromeContext.d.ts +2 -0
- package/dist/presentation/sheetChromeContext.js +3 -0
- package/dist/presentation/sheetMaterialTransition.d.ts +14 -0
- package/dist/presentation/sheetMaterialTransition.js +33 -0
- package/dist/presentation/sheetReleaseMotion.d.ts +18 -0
- package/dist/presentation/sheetReleaseMotion.js +123 -0
- package/dist/presentation/useAlertKeyboardMotion.d.ts +8 -0
- package/dist/presentation/useAlertKeyboardMotion.js +104 -0
- package/dist/press/Pressable.d.ts +19 -0
- package/dist/press/Pressable.js +16 -0
- package/dist/press/activation.d.ts +20 -0
- package/dist/press/activation.js +28 -0
- package/dist/press/contactReceipt.d.ts +23 -0
- package/dist/press/contactReceipt.js +177 -0
- package/dist/press/gestureArbitration.d.ts +13 -0
- package/dist/press/gestureArbitration.js +38 -0
- package/dist/press/stateMachine.d.ts +29 -0
- package/dist/press/stateMachine.js +39 -0
- package/dist/press/tokens.d.ts +18 -0
- package/dist/press/tokens.js +19 -0
- package/dist/press/usePressInteraction.d.ts +30 -0
- package/dist/press/usePressInteraction.js +247 -0
- package/dist/public/Label.d.ts +16 -0
- package/dist/public/Label.js +40 -0
- package/dist/public/NativeFilePicker.d.ts +19 -0
- package/dist/public/NativeFilePicker.js +75 -0
- package/dist/public/Screen.d.ts +42 -0
- package/dist/public/Screen.js +87 -0
- package/dist/public/actions.d.ts +16 -0
- package/dist/public/actions.js +15 -0
- package/dist/public/buttonBorderShape.d.ts +7 -0
- package/dist/public/buttonBorderShape.js +9 -0
- package/dist/public/chrome.d.ts +3 -0
- package/dist/public/chrome.js +5 -0
- package/dist/public/colors.d.ts +29 -0
- package/dist/public/colors.js +28 -0
- package/dist/public/context.d.ts +19 -0
- package/dist/public/context.js +8 -0
- package/dist/public/controlStyle.d.ts +93 -0
- package/dist/public/controlStyle.js +52 -0
- package/dist/public/controls.d.ts +360 -0
- package/dist/public/controls.js +301 -0
- package/dist/public/definition.d.ts +65 -0
- package/dist/public/definition.js +58 -0
- package/dist/public/deviceActions.d.ts +23 -0
- package/dist/public/deviceActions.js +87 -0
- package/dist/public/environment.d.ts +77 -0
- package/dist/public/environment.js +171 -0
- package/dist/public/fieldContext.d.ts +2 -0
- package/dist/public/fieldContext.js +3 -0
- package/dist/public/filePickers.d.ts +25 -0
- package/dist/public/filePickers.js +11 -0
- package/dist/public/glass.d.ts +31 -0
- package/dist/public/glass.js +29 -0
- package/dist/public/glassValue.d.ts +19 -0
- package/dist/public/glassValue.js +32 -0
- package/dist/public/keyboard.d.ts +4 -0
- package/dist/public/keyboard.js +6 -0
- package/dist/public/navigationTransition.d.ts +48 -0
- package/dist/public/navigationTransition.js +49 -0
- package/dist/public/pickerNavigation.d.ts +7 -0
- package/dist/public/pickerNavigation.js +64 -0
- package/dist/public/presentation.d.ts +40 -0
- package/dist/public/presentation.js +21 -0
- package/dist/public/presentationContext.d.ts +2 -0
- package/dist/public/presentationContext.js +3 -0
- package/dist/public/routeRegistry.d.ts +3 -0
- package/dist/public/routeRegistry.js +10 -0
- package/dist/public/routes.d.ts +74 -0
- package/dist/public/routes.js +105 -0
- package/dist/public/runtime.d.ts +134 -0
- package/dist/public/runtime.js +292 -0
- package/dist/public/screenChrome.d.ts +91 -0
- package/dist/public/screenChrome.js +187 -0
- package/dist/public/scroll.d.ts +38 -0
- package/dist/public/scroll.js +7 -0
- package/dist/public/storage.d.ts +9 -0
- package/dist/public/storage.js +9 -0
- package/dist/public/structure.d.ts +65 -0
- package/dist/public/structure.js +40 -0
- package/dist/public/toolbar.d.ts +37 -0
- package/dist/public/toolbar.js +76 -0
- package/dist/push/PushPermissionExplainer.d.ts +14 -0
- package/dist/push/PushPermissionExplainer.js +30 -0
- package/dist/push/notifications.d.ts +54 -0
- package/dist/push/notifications.js +276 -0
- package/dist/push/routes.d.ts +20 -0
- package/dist/push/routes.js +63 -0
- package/dist/push/schema.d.ts +42 -0
- package/dist/push/schema.js +41 -0
- package/dist/push/urlProjection.d.ts +24 -0
- package/dist/push/urlProjection.js +207 -0
- package/dist/reachability/controller.d.ts +21 -0
- package/dist/reachability/controller.js +202 -0
- package/dist/reachability/model.d.ts +94 -0
- package/dist/reachability/model.js +131 -0
- package/dist/reachability/react.d.ts +29 -0
- package/dist/reachability/react.js +69 -0
- package/dist/restoration/navigation.d.ts +9 -0
- package/dist/restoration/navigation.js +55 -0
- package/dist/restoration/react.d.ts +6 -0
- package/dist/restoration/react.js +21 -0
- package/dist/restoration/routes.d.ts +22 -0
- package/dist/restoration/routes.js +166 -0
- package/dist/restoration/scene.d.ts +44 -0
- package/dist/restoration/scene.js +284 -0
- package/dist/root/SatinRoot.d.ts +25 -0
- package/dist/root/SatinRoot.js +512 -0
- package/dist/root/mountSatin.d.ts +12 -0
- package/dist/root/mountSatin.js +60 -0
- package/dist/root/runtimeContext.d.ts +26 -0
- package/dist/root/runtimeContext.js +30 -0
- package/dist/safe-area/Overlay.d.ts +9 -0
- package/dist/safe-area/Overlay.js +26 -0
- package/dist/safe-area/SafeAreaInset.d.ts +25 -0
- package/dist/safe-area/SafeAreaInset.js +138 -0
- package/dist/safe-area/bottomInsetGeometry.d.ts +12 -0
- package/dist/safe-area/bottomInsetGeometry.js +73 -0
- package/dist/safe-area/context.d.ts +15 -0
- package/dist/safe-area/context.js +8 -0
- package/dist/safe-area/displayCorners.d.ts +21 -0
- package/dist/safe-area/displayCorners.js +70 -0
- package/dist/safe-area/keyboardCarrier.d.ts +26 -0
- package/dist/safe-area/keyboardCarrier.js +394 -0
- package/dist/safe-area/keyboardCarrierGeometry.d.ts +37 -0
- package/dist/safe-area/keyboardCarrierGeometry.js +49 -0
- package/dist/safe-area/modifiers.d.ts +52 -0
- package/dist/safe-area/modifiers.js +86 -0
- package/dist/safe-area/useSafeAreaMetrics.d.ts +83 -0
- package/dist/safe-area/useSafeAreaMetrics.js +367 -0
- package/dist/safe-area/windowChrome.d.ts +7 -0
- package/dist/safe-area/windowChrome.js +14 -0
- package/dist/scroll/RefreshControl.d.ts +8 -0
- package/dist/scroll/RefreshControl.js +135 -0
- package/dist/scroll/ScrollSurface.d.ts +62 -0
- package/dist/scroll/ScrollSurface.js +278 -0
- package/dist/scroll/ScrollTarget.d.ts +6 -0
- package/dist/scroll/ScrollTarget.js +11 -0
- package/dist/scroll/edgePolicy.d.ts +21 -0
- package/dist/scroll/edgePolicy.js +17 -0
- package/dist/scroll/insertionMotion.d.ts +15 -0
- package/dist/scroll/insertionMotion.js +128 -0
- package/dist/scroll/nativeScroll.d.ts +14 -0
- package/dist/scroll/nativeScroll.js +71 -0
- package/dist/scroll/position.d.ts +31 -0
- package/dist/scroll/position.js +273 -0
- package/dist/scroll/pressOwnership.d.ts +4 -0
- package/dist/scroll/pressOwnership.js +65 -0
- package/dist/scroll/refreshMotion.d.ts +9 -0
- package/dist/scroll/refreshMotion.js +15 -0
- package/dist/scroll/refreshable.d.ts +6 -0
- package/dist/scroll/refreshable.js +50 -0
- package/dist/scroll/registry.d.ts +38 -0
- package/dist/scroll/registry.js +261 -0
- package/dist/scroll/screenGeometry.d.ts +8 -0
- package/dist/scroll/screenGeometry.js +50 -0
- package/dist/scroll/scrollIndicator.d.ts +7 -0
- package/dist/scroll/scrollIndicator.js +114 -0
- package/dist/scroll/scrollJump.d.ts +7 -0
- package/dist/scroll/scrollJump.js +16 -0
- package/dist/scroll/types.d.ts +12 -0
- package/dist/scroll/types.js +1 -0
- package/dist/search/SearchDrawer.d.ts +16 -0
- package/dist/search/SearchDrawer.js +421 -0
- package/dist/search/SearchScopesBar.d.ts +6 -0
- package/dist/search/SearchScopesBar.js +12 -0
- package/dist/search/SearchToolbarField.d.ts +8 -0
- package/dist/search/SearchToolbarField.js +115 -0
- package/dist/search/searchBackdrop.d.ts +12 -0
- package/dist/search/searchBackdrop.js +45 -0
- package/dist/search/searchChrome.d.ts +13 -0
- package/dist/search/searchChrome.js +31 -0
- package/dist/search/searchMotion.d.ts +30 -0
- package/dist/search/searchMotion.js +46 -0
- package/dist/search/searchPlacement.d.ts +11 -0
- package/dist/search/searchPlacement.js +15 -0
- package/dist/search/searchable.d.ts +46 -0
- package/dist/search/searchable.js +5 -0
- package/dist/search/useSearchPresentation.d.ts +15 -0
- package/dist/search/useSearchPresentation.js +61 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.js +144 -0
- package/dist/settings/DisclosureIndicator.d.ts +4 -0
- package/dist/settings/DisclosureIndicator.js +6 -0
- package/dist/settings/tokens.d.ts +129 -0
- package/dist/settings/tokens.js +143 -0
- package/dist/shapes/corners.d.ts +14 -0
- package/dist/shapes/corners.js +80 -0
- package/dist/styles.css +9078 -0
- package/dist/styles.css.d.ts +3 -0
- package/dist/sw/activationState.d.ts +20 -0
- package/dist/sw/activationState.js +39 -0
- package/dist/sw/generator.d.ts +14 -0
- package/dist/sw/generator.js +26 -0
- package/dist/sw/manifest.d.ts +32 -0
- package/dist/sw/manifest.js +137 -0
- package/dist/sw/protocol.d.ts +7 -0
- package/dist/sw/protocol.js +7 -0
- package/dist/sw/pushRuntime.d.ts +2 -0
- package/dist/sw/pushRuntime.js +161 -0
- package/dist/sw/registerAppShell.d.ts +25 -0
- package/dist/sw/registerAppShell.js +259 -0
- package/dist/sw/renderServiceWorker.d.ts +10 -0
- package/dist/sw/renderServiceWorker.js +370 -0
- package/dist/sw/requestRouting.d.ts +13 -0
- package/dist/sw/requestRouting.js +26 -0
- package/dist/sw/updateCheck.d.ts +2 -0
- package/dist/sw/updateCheck.js +25 -0
- package/dist/sw/vite.d.ts +20 -0
- package/dist/sw/vite.js +71 -0
- package/dist/symbols/Symbol.d.ts +33 -0
- package/dist/symbols/Symbol.js +59 -0
- package/dist/symbols/catalogue.d.ts +4 -0
- package/dist/symbols/catalogue.js +4139 -0
- package/dist/symbols/exclusions.d.ts +2 -0
- package/dist/symbols/exclusions.js +4 -0
- package/dist/symbols/inheritedWeight.d.ts +3 -0
- package/dist/symbols/inheritedWeight.js +104 -0
- package/dist/symbols/metrics.d.ts +38 -0
- package/dist/symbols/metrics.js +53 -0
- package/dist/symbols/svg.d.ts +3 -0
- package/dist/symbols/svg.js +16 -0
- package/dist/symbols/types.d.ts +30 -0
- package/dist/symbols/types.js +1 -0
- package/dist/tabs/TabSection.d.ts +12 -0
- package/dist/tabs/TabSection.js +4 -0
- package/dist/tabs/TabSidebarSurface.d.ts +7 -0
- package/dist/tabs/TabSidebarSurface.js +29 -0
- package/dist/tabs/TabView.d.ts +28 -0
- package/dist/tabs/TabView.js +258 -0
- package/dist/tabs/accessoryContact.d.ts +2 -0
- package/dist/tabs/accessoryContact.js +42 -0
- package/dist/tabs/compactBar.d.ts +4 -0
- package/dist/tabs/compactBar.js +28 -0
- package/dist/tabs/context.d.ts +8 -0
- package/dist/tabs/context.js +6 -0
- package/dist/tabs/keyboard.d.ts +3 -0
- package/dist/tabs/keyboard.js +23 -0
- package/dist/tabs/model.d.ts +6 -0
- package/dist/tabs/model.js +16 -0
- package/dist/tabs/presentation.d.ts +7 -0
- package/dist/tabs/presentation.js +14 -0
- package/dist/tabs/sourceRevision.d.ts +3 -0
- package/dist/tabs/sourceRevision.js +36 -0
- package/dist/tabs/tabSidebarGlyph.d.ts +2 -0
- package/dist/tabs/tabSidebarGlyph.js +11 -0
- package/dist/tasks/useTask.d.ts +16 -0
- package/dist/tasks/useTask.js +67 -0
- package/dist/testing.d.ts +9 -0
- package/dist/testing.js +11 -0
- package/dist/text-input/TextEditor.d.ts +25 -0
- package/dist/text-input/TextEditor.js +74 -0
- package/dist/text-input/TextField.d.ts +32 -0
- package/dist/text-input/TextField.js +29 -0
- package/dist/text-input/editorGeometry.d.ts +2 -0
- package/dist/text-input/editorGeometry.js +6 -0
- package/dist/text-input/editorTextLayout.d.ts +2 -0
- package/dist/text-input/editorTextLayout.js +31 -0
- package/dist/text-input/focusChain.d.ts +27 -0
- package/dist/text-input/focusChain.js +62 -0
- package/dist/text-input/kinds.d.ts +8 -0
- package/dist/text-input/kinds.js +34 -0
- package/dist/text-input/measureEditor.d.ts +2 -0
- package/dist/text-input/measureEditor.js +50 -0
- package/dist/text-input/submit.d.ts +9 -0
- package/dist/text-input/submit.js +7 -0
- package/dist/unstable.d.ts +16 -0
- package/dist/unstable.js +16 -0
- package/dist/vite.d.ts +3 -0
- package/dist/vite.js +3 -0
- package/dist/web/WebView.d.ts +42 -0
- package/dist/web/WebView.js +115 -0
- package/dist/web/authentication.d.ts +75 -0
- package/dist/web/authentication.js +488 -0
- package/dist/web/openURL.d.ts +37 -0
- package/dist/web/openURL.js +89 -0
- package/dist/web/urlPolicy.d.ts +3 -0
- package/dist/web/urlPolicy.js +19 -0
- package/dist/web/useWebAuthentication.d.ts +3 -0
- package/dist/web/useWebAuthentication.js +6 -0
- package/dist/zoom/Zoomable.d.ts +10 -0
- package/dist/zoom/Zoomable.js +116 -0
- package/dist/zoom/geometry.d.ts +11 -0
- package/dist/zoom/geometry.js +16 -0
- package/package.json +115 -3
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import { keyboardBackdropAnchor } from './keyboardBackdrop.js';
|
|
2
|
+
import { searchBackdropAnchor } from '../../search/searchBackdrop.js';
|
|
3
|
+
import { withZoomAtRest, zoomRestRect } from '../../navigation/zoomGlass.js';
|
|
4
|
+
import { releaseCaptureCanvas } from './captureRelease.js';
|
|
5
|
+
import { CAPTURE_CONTEXT } from './captureContext.js';
|
|
6
|
+
import { captureRegionForeground } from './foreground.js';
|
|
7
|
+
import { tabInkBand } from './tabGlyphInk.js';
|
|
8
|
+
import { lastUnstableMeasurement, measureMirrorLayout, measureMirrorLayoutRelative, } from '../lens/Scene.js';
|
|
9
|
+
import { ICON_SVG } from '../lens/icons.js';
|
|
10
|
+
import { measureOrReuse } from '../lens/mirrorReuse.js';
|
|
11
|
+
import { makeReferenceBackgroundCanvas } from '../lens/referenceBackground.js';
|
|
12
|
+
import { SupersededImage, settleContentImage } from '../../image/resource.js';
|
|
13
|
+
import { decodedGlassImage } from './decodedImage.js';
|
|
14
|
+
import { glassNow, glassTiming } from './profile.js';
|
|
15
|
+
import { drawBackgroundLayers } from './backgroundLayers.js';
|
|
16
|
+
import { reportGlassError } from '../errors.js';
|
|
17
|
+
import { texelCount } from '../captureWindow.js';
|
|
18
|
+
/** A compositor transform may advance between synchronous DOM reads. Reject that
|
|
19
|
+
* snapshot and retry at a bounded frame boundary before anything is rasterized. */
|
|
20
|
+
export async function measureProductionSource(host, moving = false, capture = 'viewport', captureRange,
|
|
21
|
+
/** Return the previous measurement when nothing it read has changed (mirrorReuse.ts). */
|
|
22
|
+
reuse = false,
|
|
23
|
+
/** Wait only for motion that moves `host` itself (a capture that glass is waiting for). */
|
|
24
|
+
ownMotionOnly = false) {
|
|
25
|
+
const started = glassNow();
|
|
26
|
+
let reused = false;
|
|
27
|
+
// A route inside a running navigation transform moves on every read; its own layout
|
|
28
|
+
// is still stable, so it is measured relative to itself (two identical readings).
|
|
29
|
+
const read = () => withZoomAtRest(host, () => measureMirrorLayout(host, 'root', true, capture, captureRange) ??
|
|
30
|
+
(moving
|
|
31
|
+
? measureMirrorLayoutRelative(host, 'root', true, capture, captureRange)
|
|
32
|
+
: undefined));
|
|
33
|
+
const measure = () => {
|
|
34
|
+
if (!reuse || moving)
|
|
35
|
+
return read();
|
|
36
|
+
const kept = measureOrReuse(host, capture, captureRange, read);
|
|
37
|
+
reused = kept.reused;
|
|
38
|
+
return kept.layout;
|
|
39
|
+
};
|
|
40
|
+
const nextFrame = () => new Promise(resolve => requestAnimationFrame(() => resolve()));
|
|
41
|
+
let layout;
|
|
42
|
+
for (let attempt = 0; !layout && attempt < 8; attempt++) {
|
|
43
|
+
// Scheduling can precede a presentation transition. Do not spend the stable-layout
|
|
44
|
+
// retry budget on its intentionally moving frames, or discard resident glass pixels.
|
|
45
|
+
// Detached hosts must not keep a superseded preparation waiting on another dialog.
|
|
46
|
+
const motion = '[data-satin-transition-active="true"],[data-satin-presentation-moving]';
|
|
47
|
+
while (!moving &&
|
|
48
|
+
host.isConnected &&
|
|
49
|
+
(host.hasAttribute('data-satin-search-moving') ||
|
|
50
|
+
(ownMotionOnly ? host.closest(motion) : document.querySelector(motion))))
|
|
51
|
+
await nextFrame();
|
|
52
|
+
layout = measure();
|
|
53
|
+
if (!layout)
|
|
54
|
+
await nextFrame();
|
|
55
|
+
}
|
|
56
|
+
if (!layout)
|
|
57
|
+
throw Error(`Glass source moved during all 8 layout measurement attempts${moving && lastUnstableMeasurement ? ` (${lastUnstableMeasurement})` : ''}`);
|
|
58
|
+
// A moving route's own rect includes its navigation transform (applied later as the
|
|
59
|
+
// pose); its column origin is the screen container's untransformed parent.
|
|
60
|
+
const column = moving
|
|
61
|
+
? (host.closest('[data-satin-screen-container]')?.parentElement ?? host)
|
|
62
|
+
: host;
|
|
63
|
+
glassTiming('capture-measure', started, () => JSON.stringify({
|
|
64
|
+
host: host.dataset.satinScroll ?? host.dataset.satinScreen ?? host.tagName,
|
|
65
|
+
nodes: layout.nodes.length,
|
|
66
|
+
moving,
|
|
67
|
+
reused,
|
|
68
|
+
}));
|
|
69
|
+
return {
|
|
70
|
+
layout,
|
|
71
|
+
searchAnchor: searchBackdropAnchor(host),
|
|
72
|
+
keyboardAnchor: keyboardBackdropAnchor(host),
|
|
73
|
+
top: zoomRestRect(host)?.y ?? host.getBoundingClientRect().top,
|
|
74
|
+
left: column.getBoundingClientRect().left,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Every input of `rasterProductionSource`. Equal keys produce identical pixels. */
|
|
78
|
+
export function productionSourceKey({ layout, top, left }, width, height, resolution, dark) {
|
|
79
|
+
return JSON.stringify([
|
|
80
|
+
width,
|
|
81
|
+
height,
|
|
82
|
+
resolution,
|
|
83
|
+
dark,
|
|
84
|
+
top,
|
|
85
|
+
left,
|
|
86
|
+
layout.contentHeight,
|
|
87
|
+
layout.nodes,
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
export const productionSourceHeight = ({ layout, top }, height) => Math.max(height, layout.contentHeight + top);
|
|
91
|
+
const imageUrl = (node) => node.kind === 'icon' && node.icon
|
|
92
|
+
? 'data:image/svg+xml;charset=utf-8,' +
|
|
93
|
+
encodeURIComponent(ICON_SVG[node.icon].replace('<svg ', '<svg fill="#ffffff" '))
|
|
94
|
+
: node.kind === 'image'
|
|
95
|
+
? (node.imageReady ?? node.imageSource)
|
|
96
|
+
: undefined;
|
|
97
|
+
/** Keep capture diagnostics attached to the DOM element even after measurement. */
|
|
98
|
+
function captureFailure(node, reason, cause) {
|
|
99
|
+
const detail = cause instanceof Error ? cause.message : String(cause);
|
|
100
|
+
const url = node.imageSource?.split(/[?#]/, 1)[0];
|
|
101
|
+
const source = url
|
|
102
|
+
? ` src=${(url.startsWith('data:') ? url.split(',', 1)[0] : url).slice(0, 200)}`
|
|
103
|
+
: '';
|
|
104
|
+
const element = node.sourceElement ? `${node.sourceElement} (${node.id})` : node.id;
|
|
105
|
+
const error = new Error(`${element}${source}: ${detail}`);
|
|
106
|
+
reportGlassError('presentation', error, 'backdrop capture', reason);
|
|
107
|
+
return error;
|
|
108
|
+
}
|
|
109
|
+
/** Decode every icon and image first (shared decode cache), so each raster is one synchronous pass. */
|
|
110
|
+
async function decodeIcons(measured) {
|
|
111
|
+
const icons = new Map();
|
|
112
|
+
const urls = new Map();
|
|
113
|
+
for (const { layout } of measured) {
|
|
114
|
+
for (const node of layout.nodes) {
|
|
115
|
+
if (node.regionId)
|
|
116
|
+
continue;
|
|
117
|
+
const url = imageUrl(node);
|
|
118
|
+
if (!url)
|
|
119
|
+
continue;
|
|
120
|
+
const instances = urls.get(url) ?? [];
|
|
121
|
+
instances.push(node);
|
|
122
|
+
urls.set(url, instances);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
await Promise.all([...urls].map(async ([url, nodes]) => {
|
|
126
|
+
try {
|
|
127
|
+
const ready = typeof url === 'string' ? decodedGlassImage(url) : url;
|
|
128
|
+
// Page artwork can fail offline or be corrupt. Its CSS background has
|
|
129
|
+
// already been measured in paint order; omit only the unavailable pixels.
|
|
130
|
+
const image = nodes.every(node => node.kind === 'image')
|
|
131
|
+
? await settleContentImage(ready)
|
|
132
|
+
: await ready;
|
|
133
|
+
if (image)
|
|
134
|
+
icons.set(url, image);
|
|
135
|
+
}
|
|
136
|
+
catch (cause) {
|
|
137
|
+
// A superseded image is not a failure: the caller measures the page again.
|
|
138
|
+
if (!(cause instanceof SupersededImage))
|
|
139
|
+
for (const node of nodes)
|
|
140
|
+
captureFailure(node, 'image-decode-failed', cause);
|
|
141
|
+
throw cause;
|
|
142
|
+
}
|
|
143
|
+
}));
|
|
144
|
+
return icons;
|
|
145
|
+
}
|
|
146
|
+
function context2d(canvas, width, height) {
|
|
147
|
+
if (canvas.width !== width)
|
|
148
|
+
canvas.width = width;
|
|
149
|
+
if (canvas.height !== height)
|
|
150
|
+
canvas.height = height;
|
|
151
|
+
const ctx = canvas.getContext('2d', CAPTURE_CONTEXT);
|
|
152
|
+
if (!ctx)
|
|
153
|
+
throw Error(`Glass capture canvas ${width}x${height} has no 2D context`);
|
|
154
|
+
// Every node draws inside save/restore; only the transform persists between revisions.
|
|
155
|
+
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
156
|
+
ctx.globalAlpha = 1;
|
|
157
|
+
ctx.globalCompositeOperation = 'source-over';
|
|
158
|
+
return ctx;
|
|
159
|
+
}
|
|
160
|
+
const NO_CLIPS = [];
|
|
161
|
+
/** Whether two nodes are clipped by the same ancestor clips, in the same order. */
|
|
162
|
+
export function sameClipChain(first, second) {
|
|
163
|
+
if (first === second)
|
|
164
|
+
return true;
|
|
165
|
+
if (first.length !== second.length)
|
|
166
|
+
return false;
|
|
167
|
+
return first.every((clip, index) => {
|
|
168
|
+
const other = second[index];
|
|
169
|
+
return (clip.x === other.x &&
|
|
170
|
+
clip.y === other.y &&
|
|
171
|
+
clip.width === other.width &&
|
|
172
|
+
clip.height === other.height &&
|
|
173
|
+
clip.radii.length === other.radii.length &&
|
|
174
|
+
clip.radii.every((radius, corner) => radius === other.radii[corner]));
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/** Draws measured nodes in capture space (the transform maps capture points to pixels).
|
|
178
|
+
*
|
|
179
|
+
* Consecutive nodes under the same ancestor clips share ONE clip: the clip is set once for the
|
|
180
|
+
* run, and each node still draws inside its own save/restore. Every node is clipped by exactly
|
|
181
|
+
* the same paths as before, so the pixels are identical. Clipping per node made a long grouped
|
|
182
|
+
* list quadratic: a canvas taller than 8,192 px is rasterized on the CPU in WebKit, where every
|
|
183
|
+
* clip() of the list's rounded container builds a mask of the whole container (measured: 246
|
|
184
|
+
* nodes in a 15,018 px capture, 1,259 ms per-node against 44 ms shared). */
|
|
185
|
+
function drawSourceNodes(ctx, { layout, top, left }, icons, resolution, visible) {
|
|
186
|
+
ctx.translate(left, top);
|
|
187
|
+
let runClips;
|
|
188
|
+
try {
|
|
189
|
+
for (const node of layout.nodes) {
|
|
190
|
+
// Region foreground stays above its own material; never bake it into that backdrop.
|
|
191
|
+
if (node.regionId)
|
|
192
|
+
continue;
|
|
193
|
+
// Culling margin far exceeds any node's paint overflow; the clip bounds the result.
|
|
194
|
+
if (visible &&
|
|
195
|
+
(node.y + top + node.height < visible.top - 64 || node.y + top > visible.bottom + 64))
|
|
196
|
+
continue;
|
|
197
|
+
const clips = node.clips ?? NO_CLIPS;
|
|
198
|
+
if (!runClips || !sameClipChain(runClips, clips)) {
|
|
199
|
+
if (runClips)
|
|
200
|
+
ctx.restore();
|
|
201
|
+
ctx.save();
|
|
202
|
+
for (const clip of clips) {
|
|
203
|
+
ctx.beginPath();
|
|
204
|
+
if (clip.width <= 0 || clip.height <= 0)
|
|
205
|
+
ctx.rect(0, 0, 0, 0);
|
|
206
|
+
else
|
|
207
|
+
ctx.roundRect(clip.x, clip.y, clip.width, clip.height, [...clip.radii]);
|
|
208
|
+
ctx.clip();
|
|
209
|
+
}
|
|
210
|
+
runClips = clips;
|
|
211
|
+
}
|
|
212
|
+
ctx.save();
|
|
213
|
+
try {
|
|
214
|
+
ctx.translate(node.x, node.y);
|
|
215
|
+
ctx.fillStyle = node.color;
|
|
216
|
+
if (node.kind === 'rect') {
|
|
217
|
+
ctx.beginPath();
|
|
218
|
+
ctx.roundRect(0, 0, node.width, node.height, node.radius ?? 0);
|
|
219
|
+
ctx.fill();
|
|
220
|
+
}
|
|
221
|
+
else if (node.kind === 'chevron') {
|
|
222
|
+
ctx.beginPath();
|
|
223
|
+
ctx.moveTo(1.2, 1.2);
|
|
224
|
+
ctx.lineTo(Math.max(2, node.width - 1.2), node.height / 2);
|
|
225
|
+
ctx.lineTo(1.2, Math.max(2, node.height - 1.2));
|
|
226
|
+
ctx.strokeStyle = node.color;
|
|
227
|
+
ctx.lineWidth = 1.87;
|
|
228
|
+
ctx.lineCap = 'round';
|
|
229
|
+
ctx.lineJoin = 'round';
|
|
230
|
+
ctx.stroke();
|
|
231
|
+
}
|
|
232
|
+
else if (node.kind === 'icon' && node.icon) {
|
|
233
|
+
ctx.drawImage(icons.get(imageUrl(node)), 0, 0, node.width, node.height);
|
|
234
|
+
}
|
|
235
|
+
else if (node.kind === 'image' && node.imageSource && icons.has(imageUrl(node))) {
|
|
236
|
+
const image = icons.get(imageUrl(node)), natural = [image.naturalWidth, image.naturalHeight], cover = node.imageFit === 'cover', contain = node.imageFit === 'contain', scale = (cover ? Math.max : Math.min)(node.width / natural[0], node.height / natural[1]);
|
|
237
|
+
ctx.beginPath();
|
|
238
|
+
ctx.rect(0, 0, node.width, node.height);
|
|
239
|
+
ctx.clip();
|
|
240
|
+
if (cover || contain) {
|
|
241
|
+
const w = natural[0] * scale, h = natural[1] * scale;
|
|
242
|
+
ctx.drawImage(image, (node.width - w) / 2, (node.height - h) / 2, w, h);
|
|
243
|
+
}
|
|
244
|
+
else
|
|
245
|
+
ctx.drawImage(image, 0, 0, node.width, node.height);
|
|
246
|
+
}
|
|
247
|
+
else if (node.kind === 'reference-background' && node.referenceBackground) {
|
|
248
|
+
ctx.drawImage(makeReferenceBackgroundCanvas(node.referenceBackground, node.sourceOffsetY ?? 0, node.width, node.height, resolution), 0, 0, node.width, node.height);
|
|
249
|
+
}
|
|
250
|
+
else if (node.kind === 'background' && node.background)
|
|
251
|
+
drawBackgroundLayers(ctx, node.background, node.width, node.height, node.radius ?? 0, error => captureFailure(node, 'background-raster-failed', error));
|
|
252
|
+
else if (node.kind === 'text') {
|
|
253
|
+
ctx.font = `${node.fontWeight ?? '400'} ${node.fontSize ?? 17}px ${node.fontFamily ?? 'system-ui'}`;
|
|
254
|
+
ctx.textBaseline = 'middle';
|
|
255
|
+
ctx.letterSpacing = `${node.letterSpacing ?? 0}px`;
|
|
256
|
+
const lineHeight = node.lineHeight ?? node.height, words = (node.text ?? '').split(/\s+/), lines = [];
|
|
257
|
+
let line = '';
|
|
258
|
+
for (const word of words) {
|
|
259
|
+
const next = line ? line + ' ' + word : word;
|
|
260
|
+
if (line &&
|
|
261
|
+
node.height > lineHeight * 1.4 &&
|
|
262
|
+
ctx.measureText(next).width > node.width) {
|
|
263
|
+
lines.push(line);
|
|
264
|
+
line = word;
|
|
265
|
+
}
|
|
266
|
+
else
|
|
267
|
+
line = next;
|
|
268
|
+
}
|
|
269
|
+
lines.push(line);
|
|
270
|
+
lines.forEach((value, i) => ctx.fillText(value, 0, (i + 0.5) * lineHeight));
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch (cause) {
|
|
274
|
+
throw captureFailure(node, 'node-raster-failed', cause);
|
|
275
|
+
}
|
|
276
|
+
finally {
|
|
277
|
+
ctx.restore();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
if (runClips)
|
|
283
|
+
ctx.restore();
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const background = (dark) => (dark ? '#000' : '#f2f2f7');
|
|
287
|
+
/** Up to three probe points per photo (device pixels in the capture, source pixels in the image). */
|
|
288
|
+
export function photoProbes(measured, natural, resolution, canvasWidth, canvasHeight) {
|
|
289
|
+
const out = [], nodes = measured.layout.nodes, W = canvasWidth / resolution, H = canvasHeight / resolution;
|
|
290
|
+
nodes.forEach((node, index) => {
|
|
291
|
+
if (node.kind !== 'image' || node.regionId || !node.imageSource)
|
|
292
|
+
return;
|
|
293
|
+
const size = natural(imageUrl(node));
|
|
294
|
+
if (!size || !size[0] || !size[1])
|
|
295
|
+
return;
|
|
296
|
+
const nx = measured.left + node.x, ny = measured.top + node.y;
|
|
297
|
+
let x0 = nx, y0 = ny, x1 = nx + node.width, y1 = ny + node.height;
|
|
298
|
+
for (const clip of node.clips ?? []) {
|
|
299
|
+
x0 = Math.max(x0, measured.left + clip.x);
|
|
300
|
+
y0 = Math.max(y0, measured.top + clip.y);
|
|
301
|
+
x1 = Math.min(x1, measured.left + clip.x + clip.width);
|
|
302
|
+
y1 = Math.min(y1, measured.top + clip.y + clip.height);
|
|
303
|
+
}
|
|
304
|
+
x0 = Math.max(x0, 0);
|
|
305
|
+
y0 = Math.max(y0, 0);
|
|
306
|
+
x1 = Math.min(x1, W);
|
|
307
|
+
y1 = Math.min(y1, H);
|
|
308
|
+
if (x1 - x0 < 4 || y1 - y0 < 4)
|
|
309
|
+
return;
|
|
310
|
+
const cover = node.imageFit === 'cover', contain = node.imageFit === 'contain', scale = (cover ? Math.max : Math.min)(node.width / size[0], node.height / size[1]);
|
|
311
|
+
const later = nodes.slice(index + 1).filter(other => !other.regionId);
|
|
312
|
+
for (const t of [0.3, 0.5, 0.7]) {
|
|
313
|
+
const cx = x0 + (x1 - x0) * t, cy = y0 + (y1 - y0) * t;
|
|
314
|
+
// A later node painting over this point hides the photo there: no verdict from it.
|
|
315
|
+
if (later.some(o => cx >= measured.left + o.x &&
|
|
316
|
+
cx <= measured.left + o.x + o.width &&
|
|
317
|
+
cy >= measured.top + o.y &&
|
|
318
|
+
cy <= measured.top + o.y + o.height))
|
|
319
|
+
continue;
|
|
320
|
+
const ix = cover || contain
|
|
321
|
+
? (cx - nx - (node.width - size[0] * scale) / 2) / scale
|
|
322
|
+
: ((cx - nx) / node.width) * size[0];
|
|
323
|
+
const iy = cover || contain
|
|
324
|
+
? (cy - ny - (node.height - size[1] * scale) / 2) / scale
|
|
325
|
+
: ((cy - ny) / node.height) * size[1];
|
|
326
|
+
if (ix < 0 || iy < 0 || ix >= size[0] || iy >= size[1])
|
|
327
|
+
continue;
|
|
328
|
+
out.push({
|
|
329
|
+
url: imageUrl(node),
|
|
330
|
+
node: index,
|
|
331
|
+
px: Math.floor(cx * resolution),
|
|
332
|
+
py: Math.floor(cy * resolution),
|
|
333
|
+
ix: Math.floor(ix),
|
|
334
|
+
iy: Math.floor(iy),
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
return out;
|
|
339
|
+
}
|
|
340
|
+
const near = (a, b, tolerance) => Math.abs(a[0] - b[0]) <= tolerance &&
|
|
341
|
+
Math.abs(a[1] - b[1]) <= tolerance &&
|
|
342
|
+
Math.abs(a[2] - b[2]) <= tolerance;
|
|
343
|
+
/** A photo is missing when every usable probe shows the fill; a probe is usable when the
|
|
344
|
+
* image's own pixel there is opaque and clearly not the fill. No usable probe: drawn. */
|
|
345
|
+
export function photoMissing(samples, fill) {
|
|
346
|
+
const usable = samples.filter(({ image }) => image[3] >= 250 && !near(image, fill, 12));
|
|
347
|
+
return usable.length > 0 && usable.every(({ canvas }) => near(canvas, fill, 2));
|
|
348
|
+
}
|
|
349
|
+
/** Pixel readers (tests replace them). Image pixels come from a cached CPU canvas. */
|
|
350
|
+
export const captureReaders = {
|
|
351
|
+
fill(fill) {
|
|
352
|
+
let rgb = fills.get(fill);
|
|
353
|
+
if (!rgb) {
|
|
354
|
+
const c = document.createElement('canvas');
|
|
355
|
+
c.width = c.height = 1;
|
|
356
|
+
const x = c.getContext('2d', { willReadFrequently: true });
|
|
357
|
+
x.fillStyle = fill;
|
|
358
|
+
x.fillRect(0, 0, 1, 1);
|
|
359
|
+
rgb = [...x.getImageData(0, 0, 1, 1).data];
|
|
360
|
+
fills.set(fill, rgb);
|
|
361
|
+
}
|
|
362
|
+
return rgb;
|
|
363
|
+
},
|
|
364
|
+
image(image, ix, iy) {
|
|
365
|
+
let cache = imagePixels.get(image);
|
|
366
|
+
if (!cache) {
|
|
367
|
+
cache = new Map();
|
|
368
|
+
imagePixels.set(image, cache);
|
|
369
|
+
}
|
|
370
|
+
const key = ix + ',' + iy;
|
|
371
|
+
let rgba = cache.get(key);
|
|
372
|
+
if (!rgba) {
|
|
373
|
+
sampler ??= document.createElement('canvas');
|
|
374
|
+
sampler.width = sampler.height = 1;
|
|
375
|
+
const x = sampler.getContext('2d', { willReadFrequently: true });
|
|
376
|
+
x.clearRect(0, 0, 1, 1);
|
|
377
|
+
x.drawImage(image, ix, iy, 1, 1, 0, 0, 1, 1);
|
|
378
|
+
rgba = [...x.getImageData(0, 0, 1, 1).data];
|
|
379
|
+
cache.set(key, rgba);
|
|
380
|
+
}
|
|
381
|
+
return rgba;
|
|
382
|
+
},
|
|
383
|
+
canvas(ctx, px, py) {
|
|
384
|
+
return ctx.getImageData(px, py, 1, 1).data;
|
|
385
|
+
},
|
|
386
|
+
frame: () => new Promise(resolve => requestAnimationFrame(() => resolve())),
|
|
387
|
+
};
|
|
388
|
+
const fills = new Map(), imagePixels = new WeakMap();
|
|
389
|
+
let sampler;
|
|
390
|
+
const incomplete = new WeakSet();
|
|
391
|
+
/** The last raster into `canvas` is missing a photo (see photoMissing). */
|
|
392
|
+
export const captureIncomplete = (canvas) => incomplete.has(canvas);
|
|
393
|
+
/** Same measured scene-node contract as reference; raster ownership is Canvas2D.
|
|
394
|
+
* Draws into `canvas` (reused across revisions); the whole bitmap is overwritten. */
|
|
395
|
+
export async function rasterProductionSource(canvas, measured, width, height, resolution, dark, fill = background(dark)) {
|
|
396
|
+
const started = glassNow(), icons = await decodeIcons([measured]);
|
|
397
|
+
glassTiming('capture-decode', started);
|
|
398
|
+
const drawStarted = glassNow();
|
|
399
|
+
const ctx = context2d(canvas, texelCount(width, resolution), texelCount(productionSourceHeight(measured, height), resolution));
|
|
400
|
+
// The whole composition, in paint order: a retry redraws everything, never one node on top.
|
|
401
|
+
const compose = () => {
|
|
402
|
+
ctx.setTransform(resolution, 0, 0, resolution, 0, 0);
|
|
403
|
+
ctx.fillStyle = fill;
|
|
404
|
+
ctx.fillRect(0, 0, canvas.width / resolution, canvas.height / resolution);
|
|
405
|
+
drawSourceNodes(ctx, measured, icons, resolution);
|
|
406
|
+
};
|
|
407
|
+
compose();
|
|
408
|
+
glassTiming('capture-draw', drawStarted);
|
|
409
|
+
incomplete.delete(canvas);
|
|
410
|
+
const verifyStarted = glassNow();
|
|
411
|
+
let canvasReadMs = 0, imageReadMs = 0, verificationPasses = 0;
|
|
412
|
+
const probes = photoProbes(measured, url => {
|
|
413
|
+
const image = icons.get(url);
|
|
414
|
+
return image ? [image.naturalWidth, image.naturalHeight] : undefined;
|
|
415
|
+
}, resolution, canvas.width, canvas.height);
|
|
416
|
+
if (probes.length) {
|
|
417
|
+
const fillPixel = captureReaders.fill(fill);
|
|
418
|
+
const missing = () => {
|
|
419
|
+
verificationPasses++;
|
|
420
|
+
// Judged per painted instance: two cards showing the same photo are verified separately
|
|
421
|
+
// (one drawn card must not vouch for a dropped one). Decoded pixels stay shared per image.
|
|
422
|
+
const byNode = new Map();
|
|
423
|
+
for (const probe of probes) {
|
|
424
|
+
const canvasAt = glassNow(), canvasPixel = captureReaders.canvas(ctx, probe.px, probe.py);
|
|
425
|
+
canvasReadMs += glassNow() - canvasAt;
|
|
426
|
+
const imageAt = glassNow(), imagePixel = captureReaders.image(icons.get(probe.url), probe.ix, probe.iy);
|
|
427
|
+
imageReadMs += glassNow() - imageAt;
|
|
428
|
+
const list = byNode.get(probe.node) ?? [];
|
|
429
|
+
list.push({ canvas: canvasPixel, image: imagePixel });
|
|
430
|
+
byNode.set(probe.node, list);
|
|
431
|
+
}
|
|
432
|
+
return [...byNode]
|
|
433
|
+
.filter(([, samples]) => photoMissing(samples, fillPixel))
|
|
434
|
+
.map(([index]) => measured.layout.nodes[index]);
|
|
435
|
+
};
|
|
436
|
+
for (let attempt = 0;; attempt++) {
|
|
437
|
+
const absent = missing();
|
|
438
|
+
if (!absent.length)
|
|
439
|
+
break;
|
|
440
|
+
if (attempt === 3) {
|
|
441
|
+
for (const node of absent)
|
|
442
|
+
captureFailure(node, 'image-raster-missing', 'Image pixels missing after four compositions');
|
|
443
|
+
incomplete.add(canvas);
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
glassTiming('capture-image-redraw', glassNow());
|
|
447
|
+
await captureReaders.frame();
|
|
448
|
+
compose();
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
glassTiming('capture-verify', verifyStarted, () => JSON.stringify({
|
|
452
|
+
probes: probes.length,
|
|
453
|
+
verificationPasses,
|
|
454
|
+
canvasReadMs,
|
|
455
|
+
imageReadMs,
|
|
456
|
+
incomplete: incomplete.has(canvas),
|
|
457
|
+
}));
|
|
458
|
+
glassTiming('capture-raster', started, () => JSON.stringify({
|
|
459
|
+
width: canvas.width,
|
|
460
|
+
height: canvas.height,
|
|
461
|
+
bytes: canvas.width * canvas.height * 4,
|
|
462
|
+
measuredNodes: measured.layout.nodes.length,
|
|
463
|
+
imageNodes: measured.layout.nodes.filter(node => node.kind === 'image' && !node.regionId)
|
|
464
|
+
.length,
|
|
465
|
+
excludedRegionNodes: measured.layout.nodes.filter(node => node.regionId).length,
|
|
466
|
+
}));
|
|
467
|
+
return canvas;
|
|
468
|
+
}
|
|
469
|
+
/** Navigation composite: each route's visible viewport, side by side. Draws only
|
|
470
|
+
* the viewport rows of each route (never its full scroll height) directly into its cell. */
|
|
471
|
+
export async function rasterNavigationAtlas(atlas, routes, width, height, resolution, dark, viewportTop = 0) {
|
|
472
|
+
const icons = await decodeIcons(routes.map(route => route.measured));
|
|
473
|
+
const cell = width * resolution, ctx = context2d(atlas, Math.round(cell * routes.length), Math.round(height * resolution));
|
|
474
|
+
ctx.clearRect(0, 0, atlas.width, atlas.height);
|
|
475
|
+
routes.forEach(({ measured, scrollTop }, i) => {
|
|
476
|
+
// Only the route's own column is opaque (its nodes are placed at the column by drawSourceNodes):
|
|
477
|
+
// beside a split column the cell stays transparent, so a route moving across the viewport never
|
|
478
|
+
// paints the page background over the routes it passes.
|
|
479
|
+
const left = Math.max(0, measured.left);
|
|
480
|
+
ctx.fillStyle = background(dark);
|
|
481
|
+
ctx.fillRect(i * cell + left * resolution, 0, Math.min(cell - left * resolution, measured.layout.width * resolution), height * resolution);
|
|
482
|
+
ctx.save();
|
|
483
|
+
ctx.beginPath();
|
|
484
|
+
ctx.rect(i * cell, 0, cell, height * resolution);
|
|
485
|
+
ctx.clip();
|
|
486
|
+
ctx.setTransform(resolution, 0, 0, resolution, i * cell, -(scrollTop + viewportTop) * resolution);
|
|
487
|
+
drawSourceNodes(ctx, measured, icons, resolution, {
|
|
488
|
+
top: scrollTop + viewportTop,
|
|
489
|
+
bottom: scrollTop + viewportTop + height,
|
|
490
|
+
});
|
|
491
|
+
ctx.restore();
|
|
492
|
+
});
|
|
493
|
+
return atlas;
|
|
494
|
+
}
|
|
495
|
+
/** One-shot capture into a new canvas. Production reuses canvases through `rasterProductionSource`. */
|
|
496
|
+
export async function captureProductionSource(host, width, height, resolution, dark, canvas = document.createElement('canvas')) {
|
|
497
|
+
return rasterProductionSource(canvas, await measureProductionSource(host), width, height, resolution, dark);
|
|
498
|
+
}
|
|
499
|
+
export async function captureProductionGlyphs(dock, spec, resolution, canvas = document.createElement('canvas')) {
|
|
500
|
+
const layers = spec.tabSelection?.glyphLayers ? 2 : 1, band = layers === 2 ? tabInkBand(spec, resolution) : undefined, w = Math.ceil(spec.sampleWidth * resolution), planeHeight = band?.pixels ?? Math.ceil(spec.sampleHeight * resolution), h = planeHeight * layers;
|
|
501
|
+
if (canvas.width !== w || canvas.height !== h) {
|
|
502
|
+
canvas.width = w;
|
|
503
|
+
canvas.height = h;
|
|
504
|
+
}
|
|
505
|
+
const ctx = canvas.getContext('2d', CAPTURE_CONTEXT);
|
|
506
|
+
if (!ctx)
|
|
507
|
+
throw Error(`Glass glyph canvas ${w}x${h} has no 2D context`);
|
|
508
|
+
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
509
|
+
ctx.globalAlpha = 1;
|
|
510
|
+
ctx.clearRect(0, 0, w, h);
|
|
511
|
+
ctx.scale(resolution, resolution);
|
|
512
|
+
const rect = dock.getBoundingClientRect();
|
|
513
|
+
for (const tab of dock.querySelectorAll('[role="tab"]')) {
|
|
514
|
+
const style = getComputedStyle(tab), box = tab.getBoundingClientRect();
|
|
515
|
+
const foreground = await captureRegionForeground(tab, resolution, 0, {
|
|
516
|
+
icon: style.getPropertyValue('--tab-selected-icon').trim() || style.color,
|
|
517
|
+
label: style.getPropertyValue('--tab-selected-label').trim() || style.color,
|
|
518
|
+
}, { tabLayers: layers === 2 });
|
|
519
|
+
try {
|
|
520
|
+
for (let layer = 0; layer < layers; layer++) {
|
|
521
|
+
const sourceHeight = foreground.height / layers;
|
|
522
|
+
ctx.drawImage(foreground, 0, layer * sourceHeight, foreground.width, sourceHeight, spec.sampleInsetX + box.left - rect.left, spec.sampleInsetY -
|
|
523
|
+
(band?.top ?? 0) +
|
|
524
|
+
box.top -
|
|
525
|
+
rect.top +
|
|
526
|
+
(layer * planeHeight) / resolution, box.width, box.height);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
finally {
|
|
530
|
+
releaseCaptureCanvas(foreground);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
return canvas;
|
|
534
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Capture bands as the renderer sees them: no DOM (the glass worker imports this). The page
|
|
2
|
+
* side that chooses bands is captureDemand.ts. */
|
|
3
|
+
/** A viewport rectangle a glass surface composes its backdrop from: x, y, width, height (points).
|
|
4
|
+
* It is the surface's sample envelope (`raster.ts` backdropRect): its frame and sampling halo. */
|
|
5
|
+
export type SampleRect = readonly [number, number, number, number];
|
|
6
|
+
/** Content rows of a plane's capture that hold pixels, in points from the top of its content. */
|
|
7
|
+
export type CaptureBand = {
|
|
8
|
+
readonly top: number;
|
|
9
|
+
readonly bottom: number;
|
|
10
|
+
};
|
|
11
|
+
/** Expand a point interval to complete capture texels. The tiny tolerance removes only
|
|
12
|
+
* floating-point multiplication noise at an exact texel edge, never a visible fraction. */
|
|
13
|
+
export declare function snapCaptureBand(band: CaptureBand, resolution: number): CaptureBand;
|
|
14
|
+
/** Whether the captured rows hold every texel needed by the sample. Held bounds describe
|
|
15
|
+
* actual pixels: rounding them outward here would invent rows that were never captured. */
|
|
16
|
+
export declare function bandsCover(held: readonly CaptureBand[], needed: readonly CaptureBand[], resolution?: number): boolean;
|
|
17
|
+
/** The rows of `rect` (viewport points) that a banded layer is asked for but does not hold.
|
|
18
|
+
* Undefined when it holds them: the rows of `rect` its clip lets through, placed at the layer's
|
|
19
|
+
* live origin and limited to its content, lie in one of its bands. Outside real content no
|
|
20
|
+
* captured row is required; the compositor applies the plane's fill/extension policy. */
|
|
21
|
+
export declare function uncoveredRows(rect: SampleRect, layer: {
|
|
22
|
+
origin: {
|
|
23
|
+
y: number;
|
|
24
|
+
};
|
|
25
|
+
scroll: {
|
|
26
|
+
y: number;
|
|
27
|
+
};
|
|
28
|
+
height: number;
|
|
29
|
+
resolution?: number;
|
|
30
|
+
clip: readonly [number, number, number, number];
|
|
31
|
+
rows?: readonly CaptureBand[];
|
|
32
|
+
}): CaptureBand | undefined;
|
|
33
|
+
/** Validate the texture actually selected for the content plane. Navigation replaces the
|
|
34
|
+
* settled banded capture with viewport-space atlas cells, whose rows have their own receipt. */
|
|
35
|
+
export declare function uncoveredSourceRows(rect: SampleRect, layer: Parameters<typeof uncoveredRows>[1], navigation?: {
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
rows: readonly CaptureBand[];
|
|
39
|
+
}): CaptureBand | undefined;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** Capture bands as the renderer sees them: no DOM (the glass worker imports this). The page
|
|
2
|
+
* side that chooses bands is captureDemand.ts. */
|
|
3
|
+
/** Expand a point interval to complete capture texels. The tiny tolerance removes only
|
|
4
|
+
* floating-point multiplication noise at an exact texel edge, never a visible fraction. */
|
|
5
|
+
export function snapCaptureBand(band, resolution) {
|
|
6
|
+
return {
|
|
7
|
+
top: Math.floor(band.top * resolution + 1e-7) / resolution,
|
|
8
|
+
bottom: Math.ceil(band.bottom * resolution - 1e-7) / resolution,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/** Whether the captured rows hold every texel needed by the sample. Held bounds describe
|
|
12
|
+
* actual pixels: rounding them outward here would invent rows that were never captured. */
|
|
13
|
+
export function bandsCover(held, needed, resolution = 1) {
|
|
14
|
+
return needed.every(band => {
|
|
15
|
+
const sample = snapCaptureBand(band, resolution);
|
|
16
|
+
return held.some(holder => holder.top * resolution <= sample.top * resolution + 1e-7 &&
|
|
17
|
+
holder.bottom * resolution >= sample.bottom * resolution - 1e-7);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** The rows of `rect` (viewport points) that a banded layer is asked for but does not hold.
|
|
21
|
+
* Undefined when it holds them: the rows of `rect` its clip lets through, placed at the layer's
|
|
22
|
+
* live origin and limited to its content, lie in one of its bands. Outside real content no
|
|
23
|
+
* captured row is required; the compositor applies the plane's fill/extension policy. */
|
|
24
|
+
export function uncoveredRows(rect, layer) {
|
|
25
|
+
if (!layer.rows)
|
|
26
|
+
return;
|
|
27
|
+
const top = Math.max(rect[1], layer.clip[1]);
|
|
28
|
+
const bottom = Math.min(rect[1] + rect[3], layer.clip[1] + layer.clip[3]);
|
|
29
|
+
if (!(bottom > top))
|
|
30
|
+
return;
|
|
31
|
+
const from = layer.origin.y - layer.scroll.y;
|
|
32
|
+
const needed = snapCaptureBand({
|
|
33
|
+
top: Math.max(0, top - from),
|
|
34
|
+
bottom: Math.min(layer.height, bottom - from),
|
|
35
|
+
}, layer.resolution ?? 1);
|
|
36
|
+
if (needed.bottom <= needed.top || bandsCover(layer.rows, [needed], layer.resolution))
|
|
37
|
+
return;
|
|
38
|
+
return needed;
|
|
39
|
+
}
|
|
40
|
+
/** Validate the texture actually selected for the content plane. Navigation replaces the
|
|
41
|
+
* settled banded capture with viewport-space atlas cells, whose rows have their own receipt. */
|
|
42
|
+
export function uncoveredSourceRows(rect, layer, navigation) {
|
|
43
|
+
return uncoveredRows(rect, navigation
|
|
44
|
+
? {
|
|
45
|
+
origin: { y: 0 },
|
|
46
|
+
scroll: { y: 0 },
|
|
47
|
+
height: navigation.height,
|
|
48
|
+
resolution: layer.resolution,
|
|
49
|
+
clip: [0, 0, navigation.width, navigation.height],
|
|
50
|
+
rows: navigation.rows,
|
|
51
|
+
}
|
|
52
|
+
: layer);
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CAPTURE_CONTEXT: CanvasRenderingContext2DSettings;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Capture canvases are CPU-backed (willReadFrequently). An accelerated (IOSurface) canvas that WebKit
|
|
2
|
+
// has snapshotted for an upload or drawImage is copied whole by the GPU process when it is redrawn
|
|
3
|
+
// or released (CoreGraphics copy-on-write, CA::CG::AccelDataProvider::detach): about 52 ms for an
|
|
4
|
+
// 880x1912 capture, which held the page's rendering updates (Catalyst Time Profiler, Oct 4). They
|
|
5
|
+
// are only rastered and read back, so they need no GPU backing.
|
|
6
|
+
export const CAPTURE_CONTEXT = { willReadFrequently: true };
|