@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,727 @@
|
|
|
1
|
+
import { lagMark, lagTraceEnabled } from '../glass/webgpu/lagTrace.js';
|
|
2
|
+
import { SCROLL_PRESS_SLOP_PX } from '../scroll/pressOwnership.js';
|
|
3
|
+
import { useSyncExternalStore } from 'react';
|
|
4
|
+
import { defaultSoftwareKeyboardHeight, isPlausibleKeyboardHeight, readMeasuredKeyboardHeight, rememberKeyboardHeight, SOFTWARE_KEYBOARD_MIN_HEIGHT, } from './expectedKeyboard.js';
|
|
5
|
+
import { createKeyboardAvoidance } from './avoidance.js';
|
|
6
|
+
import { keyboardGeometry } from './geometry.js';
|
|
7
|
+
import { installModalTapFocus } from './modalTapFocus.js';
|
|
8
|
+
import { KEYBOARD_DURATION_MS, KEYBOARD_HIDE_LEAD_MS, KEYBOARD_REPORT_HIDE_LEAD_MS, KEYBOARD_REPORT_SHOW_LEAD_MS, KEYBOARD_SHOW_LEAD_MS, keyboardEasing, } from './motion.js';
|
|
9
|
+
/** A tap focus waits this long for its keyboard before the anticipated geometry is withdrawn. */
|
|
10
|
+
const KEYBOARD_ANTICIPATION_MS = 600;
|
|
11
|
+
/** Wait for viewport and layout resize events to agree before revealing again. */
|
|
12
|
+
const VIEWPORT_SETTLE_MS = 120;
|
|
13
|
+
/**
|
|
14
|
+
* After a focus or a keyboard change the caret line is measured for this long, so that the reveal
|
|
15
|
+
* in the next frame sees an editor that resized for the keyboard (TextEditor does).
|
|
16
|
+
*/
|
|
17
|
+
const CARET_REVEAL_MS = 400;
|
|
18
|
+
/** Only a software keyboard is anticipated (the iPad hardware-keyboard bar is 55-70 pt). */
|
|
19
|
+
const ANTICIPATED_KEYBOARD_MIN_HEIGHT = SOFTWARE_KEYBOARD_MIN_HEIGHT;
|
|
20
|
+
const empty = {
|
|
21
|
+
presentation: null,
|
|
22
|
+
anticipated: false,
|
|
23
|
+
expectedHeight: 0,
|
|
24
|
+
height: 0,
|
|
25
|
+
visible: false,
|
|
26
|
+
viewportHeight: 0,
|
|
27
|
+
offsetTop: 0,
|
|
28
|
+
layoutHeight: 0,
|
|
29
|
+
};
|
|
30
|
+
let snapshot = empty;
|
|
31
|
+
let layoutWidth = 0;
|
|
32
|
+
const listeners = new Set();
|
|
33
|
+
const motionListeners = new Set();
|
|
34
|
+
/**
|
|
35
|
+
* Called synchronously whenever the keyboard height the page lays out for changes, in the same
|
|
36
|
+
* task as the report, so a carrier can start its compositor motion in the one frame WebKit draws
|
|
37
|
+
* before the keyboard travels. Returns the unsubscribe function.
|
|
38
|
+
*/
|
|
39
|
+
export function onKeyboardMotion(listener) {
|
|
40
|
+
motionListeners.add(listener);
|
|
41
|
+
return () => {
|
|
42
|
+
motionListeners.delete(listener);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** The keyboard height the page currently lays out for (0 when hidden). */
|
|
46
|
+
export function currentKeyboardHeight() {
|
|
47
|
+
return snapshot.height;
|
|
48
|
+
}
|
|
49
|
+
/** Longest a keyboard reader waits for the carrier's frame before it reads the new geometry. */
|
|
50
|
+
const READERS_FRAME_DEADLINE_MS = 100;
|
|
51
|
+
/** Keyboard readers (the hooks below). Internal: tests observe when readers are notified. */
|
|
52
|
+
export const subscribeKeyboardMetrics = (listener) => {
|
|
53
|
+
listeners.add(listener);
|
|
54
|
+
return () => {
|
|
55
|
+
listeners.delete(listener);
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
/** Keep framework chrome on the pre-focus layout while WebKit pans/resizes its window. */
|
|
59
|
+
export function readKeyboardLayoutHeight(width, fallback) {
|
|
60
|
+
return snapshot.visible && width === layoutWidth ? snapshot.layoutHeight : fallback;
|
|
61
|
+
}
|
|
62
|
+
const subscribeWithoutKeyboard = () => () => { };
|
|
63
|
+
/** The software keyboard's live geometry. Most apps never need it: Satin keeps focused fields,
|
|
64
|
+
* bottom insets and bars above the keyboard. */
|
|
65
|
+
export function useKeyboardMetrics() {
|
|
66
|
+
return useObservedKeyboardMetrics(true);
|
|
67
|
+
}
|
|
68
|
+
/** Internal presentation readers can suspend observation while absent. */
|
|
69
|
+
export function useObservedKeyboardMetrics(enabled) {
|
|
70
|
+
return useSyncExternalStore(enabled ? subscribeKeyboardMetrics : subscribeWithoutKeyboard, () => snapshot, () => empty);
|
|
71
|
+
}
|
|
72
|
+
export function editable(target) {
|
|
73
|
+
const textControl = target instanceof HTMLTextAreaElement ||
|
|
74
|
+
(target instanceof HTMLInputElement &&
|
|
75
|
+
['text', 'password', 'email', 'url', 'tel', 'search', 'number'].includes(target.type));
|
|
76
|
+
return textControl && !target.disabled && !target.readOnly;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The elements that read the keyboard's geometry properties (styles.css). The properties are
|
|
80
|
+
* registered and not inherited, so a write restyles only the element written. Inherited, a write on
|
|
81
|
+
* the root restyled every element of a long chat (22,279 elements, 142-287 ms per write on iPad)
|
|
82
|
+
* right after WebKit's keyboard report, and the keyboard then travelled over a frozen page.
|
|
83
|
+
*/
|
|
84
|
+
const KEYBOARD_PROPERTY_READERS = [
|
|
85
|
+
"[data-satin-status-band-source='scene']",
|
|
86
|
+
'.satin-presentation:is([data-satin-presentation="alert"], [data-satin-presentation="sheet"])',
|
|
87
|
+
"[data-satin-bottom-boundary='root']",
|
|
88
|
+
"[data-satin-navigation-toolbar-slot='bottom']",
|
|
89
|
+
"[data-satin-search-placement='toolbar']",
|
|
90
|
+
].join(', ');
|
|
91
|
+
let keyboardProperties = {};
|
|
92
|
+
const keyboardReaders = new WeakMap();
|
|
93
|
+
function collectKeyboardReaders(root, records) {
|
|
94
|
+
let readers = keyboardReaders.get(root);
|
|
95
|
+
if (!readers) {
|
|
96
|
+
readers = new Set(root.querySelectorAll?.(KEYBOARD_PROPERTY_READERS) ?? []);
|
|
97
|
+
keyboardReaders.set(root, readers);
|
|
98
|
+
}
|
|
99
|
+
for (const record of records ?? []) {
|
|
100
|
+
for (const node of record.addedNodes) {
|
|
101
|
+
if (!(node instanceof HTMLElement))
|
|
102
|
+
continue;
|
|
103
|
+
if (node.matches(KEYBOARD_PROPERTY_READERS))
|
|
104
|
+
readers.add(node);
|
|
105
|
+
for (const reader of node.querySelectorAll(KEYBOARD_PROPERTY_READERS))
|
|
106
|
+
readers.add(reader);
|
|
107
|
+
}
|
|
108
|
+
if (record.type === 'attributes' && record.target instanceof HTMLElement) {
|
|
109
|
+
if (record.target.matches(KEYBOARD_PROPERTY_READERS))
|
|
110
|
+
readers.add(record.target);
|
|
111
|
+
else
|
|
112
|
+
readers.delete(record.target);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
for (const reader of readers)
|
|
116
|
+
if (!root.contains(reader))
|
|
117
|
+
readers.delete(reader);
|
|
118
|
+
return readers;
|
|
119
|
+
}
|
|
120
|
+
/** Write keyboard properties on the root and on each element that reads them. */
|
|
121
|
+
function writeKeyboardProperties(root, values) {
|
|
122
|
+
keyboardProperties = { ...keyboardProperties, ...values };
|
|
123
|
+
copyKeyboardProperties(root, values);
|
|
124
|
+
}
|
|
125
|
+
/** Give readers mounted since the last write (a new screen, a sheet) the current values. */
|
|
126
|
+
function copyKeyboardProperties(root, values = keyboardProperties) {
|
|
127
|
+
const readers = collectKeyboardReaders(root);
|
|
128
|
+
for (const element of [root, ...readers]) {
|
|
129
|
+
// An unchanged inline value is not a style change.
|
|
130
|
+
for (const [name, value] of Object.entries(values)) {
|
|
131
|
+
if (element.style.getPropertyValue?.(name) !== value)
|
|
132
|
+
element.style.setProperty(name, value);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** The installed adapter's navigation hook (one adapter per SatinRoot; the last one installed). */
|
|
137
|
+
let beforeNavigation = null;
|
|
138
|
+
/**
|
|
139
|
+
* Called by the navigation store before a push, pop, replace or back swipe starts (before it
|
|
140
|
+
* captures scroll state or publishes the transition): ends editing and puts any keyboard room and
|
|
141
|
+
* screen-layer lift back now, so no transition frame, scroll snapshot or navigation-glass capture
|
|
142
|
+
* sees a lifted offset, and nothing moves mid-slide.
|
|
143
|
+
*/
|
|
144
|
+
export function prepareKeyboardForNavigation() {
|
|
145
|
+
beforeNavigation?.();
|
|
146
|
+
}
|
|
147
|
+
export function dismissKeyboard() {
|
|
148
|
+
if (editable(document.activeElement))
|
|
149
|
+
document.activeElement.blur();
|
|
150
|
+
}
|
|
151
|
+
/** One adapter per SatinRoot. Owns viewport listeners, never cancels editing gestures. */
|
|
152
|
+
/**
|
|
153
|
+
* Tapping a control keeps the editor's keyboard, as a UIKit or SwiftUI button tap keeps the first
|
|
154
|
+
* responder: a hand-rolled composer's Send must not close the keyboard (iPad, October 12, 0/5 kept).
|
|
155
|
+
* Controls that leave the editor end editing themselves: navigation and tab switches dismiss
|
|
156
|
+
* explicitly, and a presented modal takes focus through showModal().
|
|
157
|
+
*/
|
|
158
|
+
const KEYBOARD_KEEPING_CONTROLS = 'button, a[href], summary, [role="button"], [role="link"], [role="switch"], [role="checkbox"]';
|
|
159
|
+
export function installKeyboardAdapter(root) {
|
|
160
|
+
collectKeyboardReaders(root);
|
|
161
|
+
const viewport = window.visualViewport;
|
|
162
|
+
let frame = 0;
|
|
163
|
+
let engaged = false;
|
|
164
|
+
let width = window.innerWidth;
|
|
165
|
+
let layoutHeight = window.innerHeight;
|
|
166
|
+
const avoidance = createKeyboardAvoidance();
|
|
167
|
+
let revealFrame = 0;
|
|
168
|
+
// The editor and keyboard the last reveal was for; a change re-measures the caret line.
|
|
169
|
+
let revealedFor = '';
|
|
170
|
+
let caretRevealUntil = -Infinity;
|
|
171
|
+
let revealedEditor = null;
|
|
172
|
+
let observedPresentation = null;
|
|
173
|
+
let motionObserver;
|
|
174
|
+
let pointer;
|
|
175
|
+
// The software keyboard's height as last measured at this window size, and the tap focus
|
|
176
|
+
// that is waiting for that keyboard to be reported.
|
|
177
|
+
let measured = null;
|
|
178
|
+
let anticipation = null;
|
|
179
|
+
let anticipationTimer;
|
|
180
|
+
let resizeTimer;
|
|
181
|
+
let resizing = false;
|
|
182
|
+
// When WebKit last reported the visual viewport: the system keyboard starts moving then.
|
|
183
|
+
let reportedAt = performance.now();
|
|
184
|
+
// The last reported keyboard motion, while its curve can still be retimed.
|
|
185
|
+
let lastMotion = null;
|
|
186
|
+
let motionTimer;
|
|
187
|
+
// The visual viewport's width at the last report: a rotation changes it.
|
|
188
|
+
let viewportWidth = viewport?.width ?? window.innerWidth;
|
|
189
|
+
let readersFrame = 0;
|
|
190
|
+
let readersTimer;
|
|
191
|
+
const notifyReaders = () => {
|
|
192
|
+
cancelAnimationFrame(readersFrame);
|
|
193
|
+
clearTimeout(readersTimer);
|
|
194
|
+
readersFrame = 0;
|
|
195
|
+
readersTimer = undefined;
|
|
196
|
+
for (const listener of listeners)
|
|
197
|
+
listener();
|
|
198
|
+
};
|
|
199
|
+
const notifyAfterNextFrame = () => {
|
|
200
|
+
if (readersFrame || readersTimer)
|
|
201
|
+
return;
|
|
202
|
+
readersFrame = requestAnimationFrame(() => {
|
|
203
|
+
readersFrame = 0;
|
|
204
|
+
clearTimeout(readersTimer);
|
|
205
|
+
readersTimer = setTimeout(notifyReaders, 0);
|
|
206
|
+
});
|
|
207
|
+
// A hidden page draws no frame.
|
|
208
|
+
readersTimer = setTimeout(notifyReaders, READERS_FRAME_DEADLINE_MS);
|
|
209
|
+
};
|
|
210
|
+
// The tallest software keyboard reported at this window size, in this launch or an earlier one.
|
|
211
|
+
let tallest = { width: 0, layoutHeight: 0, height: null };
|
|
212
|
+
const tallestMeasured = () => {
|
|
213
|
+
if (tallest.width !== width || tallest.layoutHeight !== layoutHeight) {
|
|
214
|
+
const stored = readMeasuredKeyboardHeight(width, layoutHeight);
|
|
215
|
+
tallest = { width, layoutHeight, height: stored };
|
|
216
|
+
}
|
|
217
|
+
return tallest.height;
|
|
218
|
+
};
|
|
219
|
+
const releaseSurface = () => {
|
|
220
|
+
cancelAnimationFrame(revealFrame);
|
|
221
|
+
revealFrame = 0;
|
|
222
|
+
avoidance.releaseAll();
|
|
223
|
+
};
|
|
224
|
+
const navigationMoving = () => root.querySelector('[data-satin-transition-active="true"]') !== null;
|
|
225
|
+
const suspended = () => document.visibilityState === 'hidden' || navigationMoving() || resizing;
|
|
226
|
+
const resetReveal = () => {
|
|
227
|
+
releaseSurface();
|
|
228
|
+
revealedFor = '';
|
|
229
|
+
revealedEditor = null;
|
|
230
|
+
};
|
|
231
|
+
const update = () => {
|
|
232
|
+
const tracing = lagTraceEnabled();
|
|
233
|
+
let phaseStarted = tracing ? performance.now() : 0;
|
|
234
|
+
const phase = (name) => {
|
|
235
|
+
if (!tracing)
|
|
236
|
+
return;
|
|
237
|
+
const now = performance.now();
|
|
238
|
+
lagMark({
|
|
239
|
+
stage: `keyboard-update-${name}`,
|
|
240
|
+
at: performance.timeOrigin + phaseStarted,
|
|
241
|
+
ms: now - phaseStarted,
|
|
242
|
+
});
|
|
243
|
+
phaseStarted = now;
|
|
244
|
+
};
|
|
245
|
+
cancelAnimationFrame(frame);
|
|
246
|
+
frame = 0;
|
|
247
|
+
if (suspended()) {
|
|
248
|
+
resetReveal();
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
const active = editable(document.activeElement) && root.contains(document.activeElement)
|
|
252
|
+
? document.activeElement
|
|
253
|
+
: null;
|
|
254
|
+
const windowWidth = window.innerWidth;
|
|
255
|
+
const windowHeight = window.innerHeight;
|
|
256
|
+
const rotated = width !== windowWidth;
|
|
257
|
+
if (rotated || !engaged) {
|
|
258
|
+
width = windowWidth;
|
|
259
|
+
layoutHeight = windowHeight;
|
|
260
|
+
}
|
|
261
|
+
// A translucent standalone viewport can grow after focus/launch. Keep
|
|
262
|
+
// keyboard shrinkage from moving chrome, but accept a larger layout frame.
|
|
263
|
+
else
|
|
264
|
+
layoutHeight = Math.max(layoutHeight, windowHeight);
|
|
265
|
+
engaged ||= Boolean(active);
|
|
266
|
+
// Normalize the document before sampling its visual pan. Writing the old
|
|
267
|
+
// offset and then resetting scroll leaves fixed frames compensated for a
|
|
268
|
+
// pan that WebKit has already removed, until its next viewport event.
|
|
269
|
+
if (engaged && (window.scrollX || window.scrollY))
|
|
270
|
+
window.scrollTo(0, 0);
|
|
271
|
+
const viewportHeight = viewport?.height ?? windowHeight;
|
|
272
|
+
const viewportOffset = viewport?.offsetTop ?? 0;
|
|
273
|
+
const viewportScale = viewport?.scale ?? 1;
|
|
274
|
+
let reported = keyboardGeometry(layoutHeight, viewportHeight, viewportOffset, viewportScale, engaged);
|
|
275
|
+
// WebKit can briefly report a viewport much smaller than the native keyboard
|
|
276
|
+
// leaves available (iPad: 310 pt instead of 967 in a 1334 pt layout). Never
|
|
277
|
+
// publish or remember that occlusion. Retain visible geometry; after a resume
|
|
278
|
+
// from hidden, recover only a measured keyboard for this exact window size.
|
|
279
|
+
let recoveringMeasuredGeometry = false;
|
|
280
|
+
if (!isPlausibleKeyboardHeight(width, layoutHeight, reported.height)) {
|
|
281
|
+
if (snapshot.visible && layoutWidth === width && snapshot.layoutHeight === layoutHeight)
|
|
282
|
+
return;
|
|
283
|
+
const rememberedHeight = measured?.width === width && measured.layoutHeight === layoutHeight
|
|
284
|
+
? measured.height
|
|
285
|
+
: tallestMeasured();
|
|
286
|
+
if (!active || rememberedHeight === null)
|
|
287
|
+
return;
|
|
288
|
+
reported = keyboardGeometry(layoutHeight, layoutHeight - rememberedHeight, 0, 1, true);
|
|
289
|
+
recoveringMeasuredGeometry = true;
|
|
290
|
+
}
|
|
291
|
+
if (reported.visible) {
|
|
292
|
+
anticipation = null;
|
|
293
|
+
if (reported.height >= ANTICIPATED_KEYBOARD_MIN_HEIGHT)
|
|
294
|
+
measured = { height: reported.height, width, layoutHeight };
|
|
295
|
+
if (reported.height >= SOFTWARE_KEYBOARD_MIN_HEIGHT &&
|
|
296
|
+
reported.height > (tallestMeasured() ?? 0)) {
|
|
297
|
+
tallest.height = reported.height;
|
|
298
|
+
rememberKeyboardHeight(width, layoutHeight, reported.height);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else if (anticipation &&
|
|
302
|
+
(active !== anticipation.editor || performance.now() >= anticipation.until)) {
|
|
303
|
+
// Still editing and no keyboard came (a hardware keyboard): stop expecting one.
|
|
304
|
+
if (active === anticipation.editor)
|
|
305
|
+
measured = null;
|
|
306
|
+
anticipation = null;
|
|
307
|
+
}
|
|
308
|
+
const anticipated = recoveringMeasuredGeometry ||
|
|
309
|
+
(anticipation !== null &&
|
|
310
|
+
measured !== null &&
|
|
311
|
+
measured.width === width &&
|
|
312
|
+
measured.layoutHeight === layoutHeight);
|
|
313
|
+
const geometry = anticipated && measured
|
|
314
|
+
? {
|
|
315
|
+
height: measured.height,
|
|
316
|
+
visible: true,
|
|
317
|
+
viewportHeight: layoutHeight - measured.height,
|
|
318
|
+
offsetTop: 0,
|
|
319
|
+
layoutHeight,
|
|
320
|
+
}
|
|
321
|
+
: reported;
|
|
322
|
+
const next = {
|
|
323
|
+
...geometry,
|
|
324
|
+
anticipated,
|
|
325
|
+
expectedHeight: tallestMeasured() ?? defaultSoftwareKeyboardHeight(width, layoutHeight),
|
|
326
|
+
presentation: geometry.visible
|
|
327
|
+
? (active?.closest('dialog[open]') ?? snapshot.presentation)
|
|
328
|
+
: null,
|
|
329
|
+
};
|
|
330
|
+
if (!active && next.height === 0)
|
|
331
|
+
engaged = false;
|
|
332
|
+
layoutWidth = width;
|
|
333
|
+
phase('geometry');
|
|
334
|
+
let motion;
|
|
335
|
+
if (next.height !== snapshot.height) {
|
|
336
|
+
// The bottom inset chain follows the keyboard on its own curve (styles.css). A reported
|
|
337
|
+
// keyboard is already moving: start that far into the curve. An anticipated one is not.
|
|
338
|
+
const rises = next.height > snapshot.height;
|
|
339
|
+
const reportLead = rises ? KEYBOARD_SHOW_LEAD_MS : KEYBOARD_HIDE_LEAD_MS;
|
|
340
|
+
const lead = anticipated ? 0 : reportLead + performance.now() - reportedAt;
|
|
341
|
+
// The carrier anchors to the report's stamp, not to the frame the page draws next.
|
|
342
|
+
const stampLead = rises ? KEYBOARD_REPORT_SHOW_LEAD_MS : KEYBOARD_REPORT_HIDE_LEAD_MS;
|
|
343
|
+
motion = {
|
|
344
|
+
height: next.height,
|
|
345
|
+
leadMs: anticipated ? 0 : stampLead + performance.now() - reportedAt,
|
|
346
|
+
};
|
|
347
|
+
lastMotion = anticipated
|
|
348
|
+
? null
|
|
349
|
+
: { height: next.height, reportLead: stampLead, reportedAt, at: performance.now() };
|
|
350
|
+
writeKeyboardProperties(root, { '--satin-keyboard-phase': `${-Math.round(lead)}ms` });
|
|
351
|
+
// The scene is in motion until the inset arrives: glass samples its installed planes
|
|
352
|
+
// instead of capturing a moving page (glass/webgpu/production.ts).
|
|
353
|
+
root.dataset.satinKeyboardMoving = 'true';
|
|
354
|
+
clearTimeout(motionTimer);
|
|
355
|
+
motionTimer = setTimeout(() => delete root.dataset.satinKeyboardMoving, Math.max(0, KEYBOARD_DURATION_MS - lead) + 34);
|
|
356
|
+
}
|
|
357
|
+
writeKeyboardProperties(root, {
|
|
358
|
+
'--satin-keyboard-height': `${next.height}px`,
|
|
359
|
+
'--satin-keyboard-viewport-height': `${next.viewportHeight}px`,
|
|
360
|
+
'--satin-keyboard-offset-top': `${next.offsetTop}px`,
|
|
361
|
+
'--satin-keyboard-layout-height': `${next.layoutHeight}px`,
|
|
362
|
+
});
|
|
363
|
+
root.dataset.satinKeyboard = next.visible ? 'visible' : 'hidden';
|
|
364
|
+
const carried = motion !== undefined && !anticipated && motionListeners.size > 0;
|
|
365
|
+
phase('properties');
|
|
366
|
+
if (motion)
|
|
367
|
+
for (const listener of motionListeners)
|
|
368
|
+
listener(motion);
|
|
369
|
+
phase('carrier');
|
|
370
|
+
if (Object.keys(next).some(key => next[key] !== snapshot[key])) {
|
|
371
|
+
snapshot = next;
|
|
372
|
+
// A reported keyboard is already moving, and the carrier's compositor motion starts only
|
|
373
|
+
// when this page draws its next frame. Keyboard readers re-render a whole screen (a long
|
|
374
|
+
// chat: ~110 ms on iPad); in this task they would hold that frame back while the keyboard
|
|
375
|
+
// travels. They read the new geometry in the task after it, as the carrier moves.
|
|
376
|
+
if (carried)
|
|
377
|
+
notifyAfterNextFrame();
|
|
378
|
+
else
|
|
379
|
+
notifyReaders();
|
|
380
|
+
}
|
|
381
|
+
phase('readers');
|
|
382
|
+
const presentation = active?.closest('dialog[open]') ?? null;
|
|
383
|
+
if (observedPresentation !== presentation) {
|
|
384
|
+
motionObserver?.disconnect();
|
|
385
|
+
observedPresentation = presentation;
|
|
386
|
+
motionObserver =
|
|
387
|
+
presentation && typeof MutationObserver !== 'undefined'
|
|
388
|
+
? new MutationObserver(() => schedule())
|
|
389
|
+
: undefined;
|
|
390
|
+
if (presentation)
|
|
391
|
+
motionObserver?.observe(presentation, {
|
|
392
|
+
attributes: true,
|
|
393
|
+
attributeFilter: ['data-satin-presentation-moving'],
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
if (!active) {
|
|
397
|
+
releaseSurface();
|
|
398
|
+
revealedFor = '';
|
|
399
|
+
revealedEditor = null;
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
// Measured on the iPad: the keyboard arrives 460 pt tall and grows to 498 pt 13-15 ms later
|
|
403
|
+
// (the predictive bar). A caret that is visible above the first and covered by the second
|
|
404
|
+
// makes WebKit scroll the document, so the field is revealed above the tallest keyboard
|
|
405
|
+
// measured at this window size, not only the one on screen.
|
|
406
|
+
const softwareKeyboard = next.visible && next.height >= SOFTWARE_KEYBOARD_MIN_HEIGHT;
|
|
407
|
+
const clearance = {
|
|
408
|
+
offsetTop: next.offsetTop,
|
|
409
|
+
bottom: softwareKeyboard
|
|
410
|
+
? layoutHeight - Math.max(next.height, tallestMeasured() ?? 0)
|
|
411
|
+
: next.viewportHeight,
|
|
412
|
+
};
|
|
413
|
+
const revealKey = `${next.visible}:${next.height}:${layoutHeight}`;
|
|
414
|
+
if (revealedFor !== revealKey || revealedEditor !== active) {
|
|
415
|
+
revealedFor = revealKey;
|
|
416
|
+
revealedEditor = active;
|
|
417
|
+
caretRevealUntil = performance.now() + CARET_REVEAL_MS;
|
|
418
|
+
}
|
|
419
|
+
const reveal = () => {
|
|
420
|
+
revealFrame = 0;
|
|
421
|
+
if (suspended()) {
|
|
422
|
+
resetReveal();
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
if (!snapshot.visible) {
|
|
426
|
+
resetReveal();
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
if (document.activeElement !== active ||
|
|
430
|
+
presentation?.hasAttribute('data-satin-presentation-moving'))
|
|
431
|
+
return;
|
|
432
|
+
// No keyboard on screen (rotated, backgrounded, hardware keyboard, hidden by its key): the
|
|
433
|
+
// room and the lift are put back while the field stays focused, and applied again on return.
|
|
434
|
+
const keyboardShown = snapshot.visible && document.visibilityState !== 'hidden';
|
|
435
|
+
avoidance.reveal(active, presentation, clearance, performance.now() < caretRevealUntil, keyboardShown);
|
|
436
|
+
};
|
|
437
|
+
cancelAnimationFrame(revealFrame);
|
|
438
|
+
// Keyboard subscribers can move both sheets and page fields in the next React layout
|
|
439
|
+
// pass. Reveal after that owner commits: lifting from the old field rect first would
|
|
440
|
+
// apply avoidance twice for one painted frame. Focus and transition guards are checked
|
|
441
|
+
// again in reveal, without polling throughout the animation.
|
|
442
|
+
if (presentation || performance.now() < caretRevealUntil)
|
|
443
|
+
revealFrame = requestAnimationFrame(reveal);
|
|
444
|
+
};
|
|
445
|
+
const schedule = () => {
|
|
446
|
+
cancelAnimationFrame(frame);
|
|
447
|
+
if (document.visibilityState !== 'hidden')
|
|
448
|
+
frame = requestAnimationFrame(update);
|
|
449
|
+
};
|
|
450
|
+
const settleResize = () => {
|
|
451
|
+
resizing = true;
|
|
452
|
+
cancelAnimationFrame(frame);
|
|
453
|
+
resetReveal();
|
|
454
|
+
clearTimeout(resizeTimer);
|
|
455
|
+
resizeTimer = setTimeout(() => {
|
|
456
|
+
resizing = false;
|
|
457
|
+
schedule();
|
|
458
|
+
}, VIEWPORT_SETTLE_MS);
|
|
459
|
+
};
|
|
460
|
+
const viewportResize = (event) => {
|
|
461
|
+
// WebKit stamps the visual viewport's report when the keyboard starts to move, but a busy page
|
|
462
|
+
// dispatches it after the window's resize, whose stamp is the late dispatch (~240 ms on an
|
|
463
|
+
// iPad hide). The motion starts from the first report; a later visual viewport report of the
|
|
464
|
+
// same change with an earlier stamp moves it back onto the keyboard's clock.
|
|
465
|
+
const started = lastMotion;
|
|
466
|
+
const earlier = started !== null &&
|
|
467
|
+
event.currentTarget === viewport &&
|
|
468
|
+
event.timeStamp < started.reportedAt - 1 &&
|
|
469
|
+
performance.now() - started.at < KEYBOARD_DURATION_MS;
|
|
470
|
+
reportedAt = event.timeStamp;
|
|
471
|
+
// Viewport growth can precede innerWidth during rotation, so growth while an editor is still
|
|
472
|
+
// focused waits for the geometry to settle. One growth is not a rotation: the viewport back at
|
|
473
|
+
// exactly the layout height at the same width is the keyboard leaving (its dismiss key keeps
|
|
474
|
+
// the field focused). It applies now, so the composer leaves with the keyboard, not 120 ms
|
|
475
|
+
// after it. Keyboard arrival, and the keyboard leaving after editing ended, apply now too.
|
|
476
|
+
const editing = editable(document.activeElement) && root.contains(document.activeElement);
|
|
477
|
+
const dismissed = editing &&
|
|
478
|
+
snapshot.visible &&
|
|
479
|
+
viewport !== null &&
|
|
480
|
+
viewport.width === viewportWidth &&
|
|
481
|
+
Math.abs(viewport.height - layoutHeight) <= 1;
|
|
482
|
+
viewportWidth = viewport?.width ?? viewportWidth;
|
|
483
|
+
if (resizing ||
|
|
484
|
+
(!dismissed &&
|
|
485
|
+
(window.innerWidth !== width ||
|
|
486
|
+
(editing && viewport && viewport.height > snapshot.viewportHeight))))
|
|
487
|
+
settleResize();
|
|
488
|
+
else
|
|
489
|
+
update();
|
|
490
|
+
if (earlier && lastMotion === started && !resizing && snapshot.height === started.height) {
|
|
491
|
+
started.reportedAt = event.timeStamp;
|
|
492
|
+
const motion = {
|
|
493
|
+
height: started.height,
|
|
494
|
+
leadMs: started.reportLead + performance.now() - event.timeStamp,
|
|
495
|
+
};
|
|
496
|
+
for (const listener of motionListeners)
|
|
497
|
+
listener(motion);
|
|
498
|
+
}
|
|
499
|
+
};
|
|
500
|
+
// Measured on the iPad: WebKit reports the keyboard 100-120 ms after a tap focus, and scrolls
|
|
501
|
+
// the document for 300 ms when the keyboard then covers the field (11-15 scroll events, the
|
|
502
|
+
// page 2.5-3 pt off in 9-12 frames). An alert that leaves for its keyboard position at the tap
|
|
503
|
+
// is clear of the keyboard when it arrives: no scroll event and no moved frame.
|
|
504
|
+
const anticipate = (editor) => {
|
|
505
|
+
if (snapshot.visible || !measured || measured.width !== window.innerWidth)
|
|
506
|
+
return;
|
|
507
|
+
if (editor.closest('dialog[open]')?.getAttribute('data-satin-presentation') !== 'alert')
|
|
508
|
+
return;
|
|
509
|
+
anticipation = { editor, until: performance.now() + KEYBOARD_ANTICIPATION_MS };
|
|
510
|
+
engaged = true;
|
|
511
|
+
clearTimeout(anticipationTimer);
|
|
512
|
+
anticipationTimer = setTimeout(schedule, KEYBOARD_ANTICIPATION_MS);
|
|
513
|
+
update();
|
|
514
|
+
};
|
|
515
|
+
// Every editor in the app, on a page as well as in an alert or a sheet (keyboard construction update).
|
|
516
|
+
const navigationHook = () => {
|
|
517
|
+
releaseSurface();
|
|
518
|
+
revealedFor = '';
|
|
519
|
+
revealedEditor = null;
|
|
520
|
+
// Navigation ends editing, as a pushed or popped SwiftUI screen dismisses its keyboard.
|
|
521
|
+
if (editable(document.activeElement) && root.contains(document.activeElement))
|
|
522
|
+
document.activeElement.blur();
|
|
523
|
+
};
|
|
524
|
+
beforeNavigation = navigationHook;
|
|
525
|
+
const releaseTapFocus = installModalTapFocus(root, editable, anticipate, () => snapshot.visible, editor => editor.isConnected && root.contains(editor));
|
|
526
|
+
const focus = (event) => {
|
|
527
|
+
if (editable(event.target))
|
|
528
|
+
engaged = true;
|
|
529
|
+
schedule();
|
|
530
|
+
};
|
|
531
|
+
const down = (event) => {
|
|
532
|
+
pointer = {
|
|
533
|
+
x: event.clientX,
|
|
534
|
+
y: event.clientY,
|
|
535
|
+
target: event.target,
|
|
536
|
+
editor: document.activeElement,
|
|
537
|
+
};
|
|
538
|
+
};
|
|
539
|
+
const up = (event) => {
|
|
540
|
+
if (!pointer ||
|
|
541
|
+
Math.hypot(event.clientX - pointer.x, event.clientY - pointer.y) >= SCROLL_PRESS_SLOP_PX) {
|
|
542
|
+
pointer = undefined;
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
const target = pointer.target instanceof Element ? pointer.target : null;
|
|
546
|
+
const editor = pointer.editor;
|
|
547
|
+
pointer = undefined;
|
|
548
|
+
if (!target ||
|
|
549
|
+
document.activeElement !== editor ||
|
|
550
|
+
target.closest('input, textarea, label, [contenteditable], [data-satin-keep-keyboard], [data-satin-inset-accessory]') ||
|
|
551
|
+
target.closest(KEYBOARD_KEEPING_CONTROLS))
|
|
552
|
+
return;
|
|
553
|
+
// A button may have mounted and focused another editor before this bubbling pointerup.
|
|
554
|
+
// Tap-away dismissal belongs only to the editor that was active when the press began.
|
|
555
|
+
// Native callouts/selection live outside this root; they never enter here.
|
|
556
|
+
dismissKeyboard();
|
|
557
|
+
};
|
|
558
|
+
root.addEventListener('focusin', focus);
|
|
559
|
+
root.addEventListener('focusout', schedule);
|
|
560
|
+
root.addEventListener('input', schedule);
|
|
561
|
+
const cancelPointer = () => {
|
|
562
|
+
pointer = undefined;
|
|
563
|
+
};
|
|
564
|
+
root.addEventListener('pointercancel', cancelPointer, { passive: true });
|
|
565
|
+
root.addEventListener('pointerdown', down, { passive: true });
|
|
566
|
+
root.addEventListener('pointerup', up, { passive: true });
|
|
567
|
+
// Document focus scrolling can arrive after WebKit's final viewport event.
|
|
568
|
+
// This listens only to the window; declared scroll surfaces retain ownership.
|
|
569
|
+
window.addEventListener('scroll', update);
|
|
570
|
+
window.addEventListener('resize', viewportResize);
|
|
571
|
+
window.addEventListener('pageshow', schedule);
|
|
572
|
+
root.style.setProperty('--satin-keyboard-easing', keyboardEasing());
|
|
573
|
+
root.style.setProperty('--satin-keyboard-duration', `${KEYBOARD_DURATION_MS}ms`);
|
|
574
|
+
const visibilityChanged = () => {
|
|
575
|
+
// A hidden document can suspend animation frames before the scheduled update runs.
|
|
576
|
+
// Restore owned geometry in this event, before the system snapshots the backgrounded app.
|
|
577
|
+
if (document.visibilityState === 'hidden') {
|
|
578
|
+
cancelAnimationFrame(frame);
|
|
579
|
+
frame = 0;
|
|
580
|
+
resetReveal();
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
583
|
+
schedule();
|
|
584
|
+
};
|
|
585
|
+
document.addEventListener('visibilitychange', visibilityChanged);
|
|
586
|
+
viewport?.addEventListener('resize', viewportResize);
|
|
587
|
+
viewport?.addEventListener('scroll', update);
|
|
588
|
+
// Safe-area changes can precede innerHeight/visualViewport events on launch.
|
|
589
|
+
const geometryObserver = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule);
|
|
590
|
+
for (const selector of ['[data-satin-safe-area-sensor]', '[data-satin-viewport-ruler="lvh"]']) {
|
|
591
|
+
const element = document.querySelector?.(selector);
|
|
592
|
+
if (element)
|
|
593
|
+
geometryObserver?.observe(element);
|
|
594
|
+
}
|
|
595
|
+
// Observe the navigator's committed lifecycle, including held/cancelling back swipes.
|
|
596
|
+
// Incoming layout-effect autofocus may precede this callback; every reveal checks the flag too.
|
|
597
|
+
let wasMoving = navigationMoving();
|
|
598
|
+
const navigationObserver = new MutationObserver(records => {
|
|
599
|
+
collectKeyboardReaders(root, records);
|
|
600
|
+
const mounted = records.some(record => [...record.addedNodes].some(node => node.nodeType === Node.ELEMENT_NODE));
|
|
601
|
+
if (mounted && snapshot.visible)
|
|
602
|
+
copyKeyboardProperties(root);
|
|
603
|
+
const moving = navigationMoving();
|
|
604
|
+
if (moving === wasMoving)
|
|
605
|
+
return;
|
|
606
|
+
wasMoving = moving;
|
|
607
|
+
if (moving) {
|
|
608
|
+
cancelAnimationFrame(frame);
|
|
609
|
+
resetReveal();
|
|
610
|
+
}
|
|
611
|
+
else
|
|
612
|
+
schedule();
|
|
613
|
+
});
|
|
614
|
+
navigationObserver.observe(root, {
|
|
615
|
+
subtree: true,
|
|
616
|
+
attributes: true,
|
|
617
|
+
attributeFilter: [
|
|
618
|
+
'data-satin-transition-active',
|
|
619
|
+
'data-satin-bottom-boundary',
|
|
620
|
+
'data-satin-status-band-source',
|
|
621
|
+
'data-satin-presentation',
|
|
622
|
+
'data-satin-navigation-toolbar-slot',
|
|
623
|
+
'data-satin-search-placement',
|
|
624
|
+
],
|
|
625
|
+
childList: true,
|
|
626
|
+
});
|
|
627
|
+
update();
|
|
628
|
+
return () => {
|
|
629
|
+
if (beforeNavigation === navigationHook)
|
|
630
|
+
beforeNavigation = null;
|
|
631
|
+
releaseTapFocus();
|
|
632
|
+
clearTimeout(anticipationTimer);
|
|
633
|
+
clearTimeout(resizeTimer);
|
|
634
|
+
clearTimeout(motionTimer);
|
|
635
|
+
cancelAnimationFrame(readersFrame);
|
|
636
|
+
clearTimeout(readersTimer);
|
|
637
|
+
delete root.dataset.satinKeyboardMoving;
|
|
638
|
+
navigationObserver.disconnect();
|
|
639
|
+
keyboardReaders.delete(root);
|
|
640
|
+
geometryObserver?.disconnect();
|
|
641
|
+
motionObserver?.disconnect();
|
|
642
|
+
cancelAnimationFrame(frame);
|
|
643
|
+
releaseSurface();
|
|
644
|
+
root.removeEventListener('focusin', focus);
|
|
645
|
+
root.removeEventListener('focusout', schedule);
|
|
646
|
+
root.removeEventListener('input', schedule);
|
|
647
|
+
root.removeEventListener('pointercancel', cancelPointer);
|
|
648
|
+
root.removeEventListener('pointerdown', down);
|
|
649
|
+
root.removeEventListener('pointerup', up);
|
|
650
|
+
window.removeEventListener('scroll', update);
|
|
651
|
+
window.removeEventListener('resize', viewportResize);
|
|
652
|
+
window.removeEventListener('pageshow', schedule);
|
|
653
|
+
document.removeEventListener('visibilitychange', visibilityChanged);
|
|
654
|
+
viewport?.removeEventListener('resize', viewportResize);
|
|
655
|
+
viewport?.removeEventListener('scroll', update);
|
|
656
|
+
for (const name of [
|
|
657
|
+
'height',
|
|
658
|
+
'viewport-height',
|
|
659
|
+
'offset-top',
|
|
660
|
+
'layout-height',
|
|
661
|
+
'phase',
|
|
662
|
+
'easing',
|
|
663
|
+
'duration',
|
|
664
|
+
])
|
|
665
|
+
root.style.removeProperty(`--satin-keyboard-${name}`);
|
|
666
|
+
delete root.dataset.satinKeyboard;
|
|
667
|
+
snapshot = empty;
|
|
668
|
+
for (const listener of listeners)
|
|
669
|
+
listener();
|
|
670
|
+
};
|
|
671
|
+
}
|
|
672
|
+
export function installScrollKeyboardDismissal(surface, mode) {
|
|
673
|
+
let start;
|
|
674
|
+
// The editor in a bottom inset accessory edits with the scroll content its inset holds.
|
|
675
|
+
const editsWith = (editor) => surface.contains(editor) ||
|
|
676
|
+
editor.closest('[data-satin-safe-area-inset]')?.contains(surface) === true;
|
|
677
|
+
const down = (event) => {
|
|
678
|
+
start = { x: event.clientX, y: event.clientY };
|
|
679
|
+
};
|
|
680
|
+
const move = (event) => {
|
|
681
|
+
const editor = document.activeElement;
|
|
682
|
+
if (!start || mode === 'never' || !editable(editor) || !editsWith(editor))
|
|
683
|
+
return;
|
|
684
|
+
if (Math.hypot(event.clientX - start.x, event.clientY - start.y) < SCROLL_PRESS_SLOP_PX)
|
|
685
|
+
return;
|
|
686
|
+
// An inner editor keeps native caret/selection and internal scroll ownership.
|
|
687
|
+
if (event.target instanceof Element && event.target.closest('[data-satin-role="text-input"]'))
|
|
688
|
+
return;
|
|
689
|
+
if (mode === 'interactively') {
|
|
690
|
+
const viewport = window.visualViewport;
|
|
691
|
+
const keyboardTop = viewport ? viewport.offsetTop + viewport.height : window.innerHeight;
|
|
692
|
+
if (event.clientY <= start.y || event.clientY < keyboardTop)
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
dismissKeyboard();
|
|
696
|
+
start = undefined;
|
|
697
|
+
};
|
|
698
|
+
const touchStart = (event) => {
|
|
699
|
+
const touch = event.touches[0];
|
|
700
|
+
if (touch)
|
|
701
|
+
start = { x: touch.clientX, y: touch.clientY };
|
|
702
|
+
};
|
|
703
|
+
const touchMove = (event) => {
|
|
704
|
+
const touch = event.touches[0];
|
|
705
|
+
if (touch)
|
|
706
|
+
move({ clientX: touch.clientX, clientY: touch.clientY, target: event.target });
|
|
707
|
+
};
|
|
708
|
+
const end = () => {
|
|
709
|
+
start = undefined;
|
|
710
|
+
};
|
|
711
|
+
surface.addEventListener('touchstart', touchStart, { passive: true });
|
|
712
|
+
surface.addEventListener('touchmove', touchMove, { passive: true });
|
|
713
|
+
surface.addEventListener('touchend', end, { passive: true });
|
|
714
|
+
surface.addEventListener('touchcancel', end, { passive: true });
|
|
715
|
+
surface.addEventListener('pointerdown', down, { passive: true });
|
|
716
|
+
surface.addEventListener('pointermove', move, { passive: true });
|
|
717
|
+
surface.addEventListener('pointerup', end, { passive: true });
|
|
718
|
+
return () => {
|
|
719
|
+
surface.removeEventListener('pointerdown', down);
|
|
720
|
+
surface.removeEventListener('pointermove', move);
|
|
721
|
+
surface.removeEventListener('pointerup', end);
|
|
722
|
+
surface.removeEventListener('touchstart', touchStart);
|
|
723
|
+
surface.removeEventListener('touchmove', touchMove);
|
|
724
|
+
surface.removeEventListener('touchend', end);
|
|
725
|
+
surface.removeEventListener('touchcancel', end);
|
|
726
|
+
};
|
|
727
|
+
}
|