@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,24 @@
|
|
|
1
|
+
type Editor = HTMLInputElement | HTMLTextAreaElement;
|
|
2
|
+
/** Where the keyboard leaves room, in visual-viewport coordinates. */
|
|
3
|
+
export type KeyboardClearance = Readonly<{
|
|
4
|
+
/** The visual viewport's pan: layout coordinates minus this are on-screen coordinates. */
|
|
5
|
+
offsetTop: number;
|
|
6
|
+
/** The bottom of the room above the keyboard (the tallest one measured at this size). */
|
|
7
|
+
bottom: number;
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Keyboard avoidance for the focused editor, as SwiftUI's keyboard safe area does it: every
|
|
11
|
+
* scroll surface around the editor gets room below its content for the keyboard and scrolls the
|
|
12
|
+
* editor (a tall editor: its caret line) above the keyboard, innermost first. An editor on a page
|
|
13
|
+
* whose surfaces cannot bring it up (a screen without a scroll surface, or a nested scroller pinned
|
|
14
|
+
* under the keyboard) lifts the screen's content layer by scrolling that layer, which clips its
|
|
15
|
+
* content and is never touch-scrollable; the navigation bar stays where it is. The document and
|
|
16
|
+
* the visual viewport never move. Everything is restored when editing ends, and whenever no
|
|
17
|
+
* keyboard shows while the field stays focused (rotation, the app in the background, a hardware
|
|
18
|
+
* keyboard attached, the keyboard hidden by its own key); it is applied again when one returns.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createKeyboardAvoidance(): {
|
|
21
|
+
reveal: (editor: Editor, presentation: Element | null, clearance: KeyboardClearance, withCaret: boolean, keyboardShown?: boolean) => void;
|
|
22
|
+
releaseAll: () => void;
|
|
23
|
+
};
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { caretLineAt } from './caretMirror.js';
|
|
2
|
+
import { revealDelta } from './geometry.js';
|
|
3
|
+
const SURFACE = '[data-satin-scroll-axis="vertical"]';
|
|
4
|
+
const SCREEN_LAYER = '[data-satin-navigation-motion-layer="true"]';
|
|
5
|
+
const NAVIGATION_CHROME = '[data-satin-navigation-chrome="true"]';
|
|
6
|
+
/** Space kept between a revealed field (or caret line) and the keyboard or the bar above it. */
|
|
7
|
+
const REVEAL_GAP = 12;
|
|
8
|
+
/**
|
|
9
|
+
* A caret-line reveal can stop at any offset that keeps the caret line in the room; prefer one
|
|
10
|
+
* that keeps the whole editor inside the surface's box. Measured on the iPhone Simulator (Tall
|
|
11
|
+
* lab, a TextEditor capped to the room): ~20 ms after the keyboard arrives WebKit centres a focused
|
|
12
|
+
* editor that a scroll ancestor cuts off, in that ancestor's full box with the keyboard ignored,
|
|
13
|
+
* which put the caret line back under the keyboard. An editor wholly inside is left alone.
|
|
14
|
+
*/
|
|
15
|
+
function keepEditorInBox(delta, editor, box, offsetTop, room) {
|
|
16
|
+
// Keeping the whole card in its box is never a reason to move an already visible caret.
|
|
17
|
+
if (delta === 0)
|
|
18
|
+
return 0;
|
|
19
|
+
// Every offset in [lowest, highest] keeps the caret line in the room.
|
|
20
|
+
const lowest = room.targetBottom - (room.bottom - REVEAL_GAP);
|
|
21
|
+
const highest = room.targetTop - (room.top + REVEAL_GAP);
|
|
22
|
+
// Every offset in [inside, outside] keeps the editor inside the box.
|
|
23
|
+
const inside = editor.bottom - (box.bottom - offsetTop);
|
|
24
|
+
const outside = editor.top - (box.top - offsetTop);
|
|
25
|
+
const low = Math.max(lowest, inside);
|
|
26
|
+
const high = Math.min(highest, outside);
|
|
27
|
+
if (low > high)
|
|
28
|
+
return delta;
|
|
29
|
+
return Math.min(high, Math.max(low, delta));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Keyboard avoidance for the focused editor, as SwiftUI's keyboard safe area does it: every
|
|
33
|
+
* scroll surface around the editor gets room below its content for the keyboard and scrolls the
|
|
34
|
+
* editor (a tall editor: its caret line) above the keyboard, innermost first. An editor on a page
|
|
35
|
+
* whose surfaces cannot bring it up (a screen without a scroll surface, or a nested scroller pinned
|
|
36
|
+
* under the keyboard) lifts the screen's content layer by scrolling that layer, which clips its
|
|
37
|
+
* content and is never touch-scrollable; the navigation bar stays where it is. The document and
|
|
38
|
+
* the visual viewport never move. Everything is restored when editing ends, and whenever no
|
|
39
|
+
* keyboard shows while the field stays focused (rotation, the app in the background, a hardware
|
|
40
|
+
* keyboard attached, the keyboard hidden by its own key); it is applied again when one returns.
|
|
41
|
+
*/
|
|
42
|
+
export function createKeyboardAvoidance() {
|
|
43
|
+
const avoiding = new Map();
|
|
44
|
+
// An app render can rewrite a surface's inline style (ScrollSurface spreads `style`): put the
|
|
45
|
+
// keyboard room back on top of the app's new padding.
|
|
46
|
+
const styleObserver = typeof MutationObserver === 'undefined'
|
|
47
|
+
? undefined
|
|
48
|
+
: new MutationObserver(records => {
|
|
49
|
+
for (const record of records) {
|
|
50
|
+
const surface = record.target;
|
|
51
|
+
const state = avoiding.get(surface);
|
|
52
|
+
if (!state || state.lift || surface.style.paddingBottom === state.written)
|
|
53
|
+
continue;
|
|
54
|
+
const room = parseFloat(state.written) - state.originalPadding;
|
|
55
|
+
state.restorePadding = surface.style.paddingBottom;
|
|
56
|
+
state.originalPadding = parseFloat(getComputedStyle(surface).paddingBottom) || 0;
|
|
57
|
+
state.written = `${state.originalPadding + room}px`;
|
|
58
|
+
surface.style.paddingBottom = state.written;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const release = (surface) => {
|
|
62
|
+
const state = avoiding.get(surface);
|
|
63
|
+
if (!state)
|
|
64
|
+
return;
|
|
65
|
+
avoiding.delete(surface);
|
|
66
|
+
if (avoiding.size === 0)
|
|
67
|
+
styleObserver?.disconnect();
|
|
68
|
+
// A node React has already removed (a new screen key) has nothing to put back.
|
|
69
|
+
if (!surface.isConnected)
|
|
70
|
+
return;
|
|
71
|
+
if (state.lift) {
|
|
72
|
+
state.lift.spacer?.remove();
|
|
73
|
+
surface.scrollTop = state.lift.scrollTop;
|
|
74
|
+
}
|
|
75
|
+
else
|
|
76
|
+
surface.style.paddingBottom = state.restorePadding;
|
|
77
|
+
surface.removeAttribute('data-satin-keyboard-avoiding');
|
|
78
|
+
};
|
|
79
|
+
const releaseAll = () => {
|
|
80
|
+
for (const surface of [...avoiding.keys()])
|
|
81
|
+
release(surface);
|
|
82
|
+
};
|
|
83
|
+
/** Room below a surface's content for the part of it the keyboard covers. */
|
|
84
|
+
const makeRoom = (surface, clearance) => {
|
|
85
|
+
let state = avoiding.get(surface);
|
|
86
|
+
if (!state) {
|
|
87
|
+
state = {
|
|
88
|
+
restorePadding: surface.style.paddingBottom,
|
|
89
|
+
originalPadding: parseFloat(getComputedStyle(surface).paddingBottom) || 0,
|
|
90
|
+
written: '',
|
|
91
|
+
lift: null,
|
|
92
|
+
};
|
|
93
|
+
avoiding.set(surface, state);
|
|
94
|
+
styleObserver?.observe(surface, { attributes: true, attributeFilter: ['style'] });
|
|
95
|
+
}
|
|
96
|
+
const overlap = Math.max(0, surface.getBoundingClientRect().bottom - clearance.offsetTop - clearance.bottom);
|
|
97
|
+
state.written = `${state.originalPadding + overlap}px`;
|
|
98
|
+
surface.style.paddingBottom = state.written;
|
|
99
|
+
surface.dataset.satinKeyboardAvoiding = 'true';
|
|
100
|
+
};
|
|
101
|
+
/** Room to lift a screen layer: a spacer under its box (its own padding may not count as overflow). */
|
|
102
|
+
const makeLiftRoom = (layer, clearance, requiredLift) => {
|
|
103
|
+
let state = avoiding.get(layer);
|
|
104
|
+
if (!state) {
|
|
105
|
+
state = {
|
|
106
|
+
restorePadding: '',
|
|
107
|
+
originalPadding: 0,
|
|
108
|
+
written: '',
|
|
109
|
+
lift: { scrollTop: layer.scrollTop, spacer: null },
|
|
110
|
+
};
|
|
111
|
+
avoiding.set(layer, state);
|
|
112
|
+
}
|
|
113
|
+
const lift = state.lift;
|
|
114
|
+
// React may have replaced the layer's children (a remount): the spacer went with them.
|
|
115
|
+
if (lift.spacer && lift.spacer.parentElement !== layer)
|
|
116
|
+
lift.spacer = null;
|
|
117
|
+
if (!lift.spacer) {
|
|
118
|
+
// Its own element name, every declaration important: page rules cannot change its box.
|
|
119
|
+
const spacer = layer.ownerDocument.createElement('satin-keyboard-spacer');
|
|
120
|
+
spacer.setAttribute('aria-hidden', 'true');
|
|
121
|
+
const box = {
|
|
122
|
+
display: 'block',
|
|
123
|
+
position: 'absolute',
|
|
124
|
+
top: '100%',
|
|
125
|
+
left: '0',
|
|
126
|
+
width: '1px',
|
|
127
|
+
margin: '0',
|
|
128
|
+
padding: '0',
|
|
129
|
+
visibility: 'hidden',
|
|
130
|
+
'pointer-events': 'none',
|
|
131
|
+
};
|
|
132
|
+
for (const [property, value] of Object.entries(box))
|
|
133
|
+
spacer.style.setProperty(property, value, 'important');
|
|
134
|
+
layer.append(spacer);
|
|
135
|
+
lift.spacer = spacer;
|
|
136
|
+
}
|
|
137
|
+
const overlap = Math.max(0, layer.getBoundingClientRect().bottom - clearance.offsetTop - clearance.bottom);
|
|
138
|
+
// Rotation can leave app content taller than the new layer. Keyboard overlap alone
|
|
139
|
+
// cannot provide enough scroll range to reveal a field beyond that layer's bottom.
|
|
140
|
+
const room = Math.max(overlap, requiredLift);
|
|
141
|
+
lift.spacer.style.setProperty('height', `${room}px`, 'important');
|
|
142
|
+
layer.dataset.satinKeyboardAvoiding = 'true';
|
|
143
|
+
};
|
|
144
|
+
/** The bottom of the navigation bar drawn over this editor's screen (none in a presentation). */
|
|
145
|
+
const barBottom = (editor, offsetTop) => {
|
|
146
|
+
const field = editor.getBoundingClientRect();
|
|
147
|
+
let bottom = 0;
|
|
148
|
+
const bars = document.querySelectorAll?.(NAVIGATION_CHROME) ?? [];
|
|
149
|
+
for (const bar of bars) {
|
|
150
|
+
const rect = bar.getBoundingClientRect();
|
|
151
|
+
if (rect.height <= 0 || rect.right <= field.left || rect.left >= field.right)
|
|
152
|
+
continue;
|
|
153
|
+
bottom = Math.max(bottom, rect.bottom - offsetTop);
|
|
154
|
+
}
|
|
155
|
+
return bottom;
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Bring the editor (a tall one: its caret line) into the room above the keyboard.
|
|
159
|
+
* `withCaret` measures the caret line; it is set after a focus or a keyboard change, not while
|
|
160
|
+
* typing (WebKit keeps the caret in view as the text changes). With no keyboard on screen
|
|
161
|
+
* (`keyboardShown` false) owned geometry is released and no surface is scrolled.
|
|
162
|
+
*/
|
|
163
|
+
function reveal(editor, presentation, clearance, withCaret, keyboardShown = true) {
|
|
164
|
+
for (const tracked of [...avoiding.keys()])
|
|
165
|
+
if (!tracked.isConnected)
|
|
166
|
+
release(tracked);
|
|
167
|
+
if (!keyboardShown) {
|
|
168
|
+
releaseAll();
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
// A safe-area accessory already participates in the keyboard's layout region.
|
|
172
|
+
// Only its own nested scrollers may reveal a caret. Lifting the presenting
|
|
173
|
+
// screen would apply avoidance twice and move the conversation with it.
|
|
174
|
+
const accessory = editor.closest('[data-satin-inset-accessory="true"]');
|
|
175
|
+
const surfaces = [];
|
|
176
|
+
let surface = editor.closest(SURFACE);
|
|
177
|
+
while (surface) {
|
|
178
|
+
// A top-layer field is not part of the presenting page's scroll geometry.
|
|
179
|
+
if (presentation && !presentation.contains(surface))
|
|
180
|
+
break;
|
|
181
|
+
if (accessory && !accessory.contains(surface))
|
|
182
|
+
break;
|
|
183
|
+
surfaces.push(surface);
|
|
184
|
+
surface = surface.parentElement?.closest(SURFACE) ?? null;
|
|
185
|
+
}
|
|
186
|
+
const screenLayer = presentation || accessory || !keyboardShown ? null : editor.closest(SCREEN_LAYER);
|
|
187
|
+
// A layer that is itself a declared surface is revealed as a surface.
|
|
188
|
+
const layer = screenLayer && !surfaces.includes(screenLayer) ? screenLayer : null;
|
|
189
|
+
for (const tracked of [...avoiding.keys()]) {
|
|
190
|
+
if (!surfaces.includes(tracked) && tracked !== layer)
|
|
191
|
+
release(tracked);
|
|
192
|
+
}
|
|
193
|
+
// A keyboard subscriber can move the field after our first reveal. Recompute a screen
|
|
194
|
+
// lift from its resting position, otherwise a now-visible caret preserves the old lift
|
|
195
|
+
// and applies avoidance twice. This is synchronous with the replacement reveal, so an
|
|
196
|
+
// unchanged layout keeps the same painted position. Typing keeps WebKit's caret ownership.
|
|
197
|
+
if (layer && (withCaret || !(editor instanceof HTMLTextAreaElement)))
|
|
198
|
+
release(layer);
|
|
199
|
+
if (keyboardShown)
|
|
200
|
+
for (const declared of surfaces)
|
|
201
|
+
makeRoom(declared, clearance);
|
|
202
|
+
// Once editing is established, WebKit keeps the caret visible. A textarea's card
|
|
203
|
+
// is not the reveal target: aligning its bottom on input moves readable content.
|
|
204
|
+
// Focus and keyboard changes explicitly request a fresh caret-line reveal.
|
|
205
|
+
if (editor instanceof HTMLTextAreaElement && !withCaret)
|
|
206
|
+
return;
|
|
207
|
+
const offsetTop = clearance.offsetTop;
|
|
208
|
+
const clearTop = presentation ? 0 : barBottom(editor, offsetTop);
|
|
209
|
+
const room = clearance.bottom - clearTop - 2 * REVEAL_GAP;
|
|
210
|
+
const fieldRect = () => {
|
|
211
|
+
const rect = editor.getBoundingClientRect();
|
|
212
|
+
return { top: rect.top - offsetTop, bottom: rect.bottom - offsetTop };
|
|
213
|
+
};
|
|
214
|
+
const fits = fieldRect().bottom - fieldRect().top <= room;
|
|
215
|
+
const scrollsInside = editor.scrollHeight > editor.clientHeight + 1;
|
|
216
|
+
// A field that does not fit, or text scrolled inside its editor: the caret line is the target.
|
|
217
|
+
let caret = null;
|
|
218
|
+
if (withCaret && (editor instanceof HTMLTextAreaElement || !fits || scrollsInside)) {
|
|
219
|
+
const end = editor.selectionDirection === 'backward' ? editor.selectionStart : editor.selectionEnd;
|
|
220
|
+
const line = caretLineAt(editor, end ?? 0);
|
|
221
|
+
caret = line && { top: line.top - offsetTop, bottom: line.bottom - offsetTop };
|
|
222
|
+
}
|
|
223
|
+
// While typing in a field taller than the room, WebKit keeps its caret in view.
|
|
224
|
+
if (!fits && !caret)
|
|
225
|
+
return;
|
|
226
|
+
const scrollBy = (scroller, delta) => {
|
|
227
|
+
const before = scroller.scrollTop;
|
|
228
|
+
scroller.scrollTop = before + delta;
|
|
229
|
+
const moved = scroller.scrollTop - before;
|
|
230
|
+
if (caret)
|
|
231
|
+
caret = { top: caret.top - moved, bottom: caret.bottom - moved };
|
|
232
|
+
return moved;
|
|
233
|
+
};
|
|
234
|
+
// The caret line inside the editor's own scrolled text first.
|
|
235
|
+
if (caret && scrollsInside) {
|
|
236
|
+
const box = editor.getBoundingClientRect();
|
|
237
|
+
const style = getComputedStyle(editor);
|
|
238
|
+
const top = box.top - offsetTop + (parseFloat(style.paddingTop) || 0);
|
|
239
|
+
const bottom = box.bottom - offsetTop - (parseFloat(style.paddingBottom) || 0);
|
|
240
|
+
const delta = revealDelta(caret.top, caret.bottom, top, bottom, Infinity, 0);
|
|
241
|
+
if (delta)
|
|
242
|
+
scrollBy(editor, delta);
|
|
243
|
+
}
|
|
244
|
+
const target = () => caret ?? fieldRect();
|
|
245
|
+
// Innermost first; a second pass reveals within an inner surface that an outer one brought up.
|
|
246
|
+
for (let pass = 0; pass < 2; pass++) {
|
|
247
|
+
for (const scroller of [...surfaces, ...(layer ? [layer] : [])]) {
|
|
248
|
+
const box = scroller.getBoundingClientRect();
|
|
249
|
+
const top = Math.max(box.top - offsetTop, clearTop);
|
|
250
|
+
const bottom = Math.min(box.bottom - offsetTop, clearance.bottom);
|
|
251
|
+
const { top: targetTop, bottom: targetBottom } = target();
|
|
252
|
+
// This surface's visible part cannot hold the target (it is under the keyboard): an outer
|
|
253
|
+
// surface or the screen layer moves it first.
|
|
254
|
+
if (scroller !== layer && bottom - top - 2 * REVEAL_GAP < targetBottom - targetTop)
|
|
255
|
+
continue;
|
|
256
|
+
// A visible caret already satisfies the reveal contract. Do not align the rest of its
|
|
257
|
+
// card or add a preferred gap by scrolling content that the user can already read.
|
|
258
|
+
if (caret && targetTop >= top && targetBottom <= bottom)
|
|
259
|
+
continue;
|
|
260
|
+
let delta = revealDelta(targetTop, targetBottom, top, bottom, clearance.bottom, REVEAL_GAP);
|
|
261
|
+
if (!fits && scroller !== layer)
|
|
262
|
+
delta = keepEditorInBox(delta, fieldRect(), box, offsetTop, {
|
|
263
|
+
targetTop,
|
|
264
|
+
targetBottom,
|
|
265
|
+
top,
|
|
266
|
+
bottom,
|
|
267
|
+
});
|
|
268
|
+
if (!delta)
|
|
269
|
+
continue;
|
|
270
|
+
// The screen layer only lifts content that is under the keyboard; it never pushes it down
|
|
271
|
+
// below where the app laid it out.
|
|
272
|
+
if (scroller === layer) {
|
|
273
|
+
if (delta > 0)
|
|
274
|
+
makeLiftRoom(layer, clearance, layer.scrollTop + delta);
|
|
275
|
+
else if (!avoiding.has(layer))
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
scrollBy(scroller, delta);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return { reveal, releaseAll };
|
|
283
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type Editor = HTMLInputElement | HTMLTextAreaElement;
|
|
2
|
+
export type CaretLine = Readonly<{
|
|
3
|
+
top: number;
|
|
4
|
+
bottom: number;
|
|
5
|
+
}>;
|
|
6
|
+
/** The text offset under a point of the editor (WebKit hides the input's internal text node). */
|
|
7
|
+
export declare function caretOffsetAt(editor: Editor, x: number, y: number): number | null;
|
|
8
|
+
/**
|
|
9
|
+
* The line box of the caret at `offset` in a multi-line editor, in viewport coordinates, as the
|
|
10
|
+
* editor draws it now (its own scroll included). Null for single-line fields (the field is the line).
|
|
11
|
+
*/
|
|
12
|
+
export declare function caretLineAt(editor: Editor, offset: number): CaretLine | null;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { EDITOR_TEXT_LAYOUT_PROPERTIES } from '../text-input/editorTextLayout.js';
|
|
2
|
+
/** A password is drawn as discs: the mirror draws the same discs and never holds the text. */
|
|
3
|
+
function isSecure(editor, computed) {
|
|
4
|
+
const security = computed.getPropertyValue('-webkit-text-security');
|
|
5
|
+
return editor.type === 'password' || (security !== '' && security !== 'none');
|
|
6
|
+
}
|
|
7
|
+
function setImportant(element, property, value) {
|
|
8
|
+
element.style.setProperty(property, value, 'important');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A hidden copy of the editor's text box at the editor's place, isolated from the page's styles
|
|
12
|
+
* (`all: initial`, its own element name, every declaration important), so that inherited body
|
|
13
|
+
* styles and `div` rules cannot move its text. Removed by the caller.
|
|
14
|
+
*/
|
|
15
|
+
function createMirror(editor, text, marker) {
|
|
16
|
+
const document = editor.ownerDocument;
|
|
17
|
+
const rect = editor.getBoundingClientRect();
|
|
18
|
+
const computed = getComputedStyle(editor);
|
|
19
|
+
const secure = isSecure(editor, computed);
|
|
20
|
+
const mirror = document.createElement('satin-caret-mirror');
|
|
21
|
+
setImportant(mirror, 'all', 'initial');
|
|
22
|
+
for (const property of EDITOR_TEXT_LAYOUT_PROPERTIES)
|
|
23
|
+
setImportant(mirror, property, computed.getPropertyValue(property));
|
|
24
|
+
const layout = {
|
|
25
|
+
display: 'block',
|
|
26
|
+
position: 'fixed',
|
|
27
|
+
left: `${rect.left}px`,
|
|
28
|
+
top: `${rect.top}px`,
|
|
29
|
+
width: `${rect.width}px`,
|
|
30
|
+
height: `${rect.height}px`,
|
|
31
|
+
margin: '0',
|
|
32
|
+
'box-sizing': 'border-box',
|
|
33
|
+
'border-style': 'solid',
|
|
34
|
+
'border-color': 'transparent',
|
|
35
|
+
opacity: '0',
|
|
36
|
+
visibility: 'visible',
|
|
37
|
+
'pointer-events': 'auto',
|
|
38
|
+
'z-index': '2147483647',
|
|
39
|
+
overflow: 'hidden',
|
|
40
|
+
'white-space': editor instanceof HTMLTextAreaElement ? 'pre-wrap' : 'pre',
|
|
41
|
+
'-webkit-text-security': secure ? 'disc' : 'none',
|
|
42
|
+
};
|
|
43
|
+
for (const [property, value] of Object.entries(layout))
|
|
44
|
+
setImportant(mirror, property, value);
|
|
45
|
+
// A secure field's characters are all drawn as the same disc: the mirror holds placeholders.
|
|
46
|
+
const shown = secure ? '*'.repeat(text.length) : text;
|
|
47
|
+
const content = document.createTextNode(marker ? shown.slice(0, marker.before) : shown);
|
|
48
|
+
mirror.append(content);
|
|
49
|
+
const caret = marker ? createMarker(document) : null;
|
|
50
|
+
if (caret)
|
|
51
|
+
mirror.append(caret, shown.slice(marker.before));
|
|
52
|
+
(editor.closest('dialog') ?? document.body).append(mirror);
|
|
53
|
+
// A dialog has `contain: layout`, which makes it the containing block of a fixed box: measure
|
|
54
|
+
// where the mirror landed and move it onto the editor.
|
|
55
|
+
const placed = mirror.getBoundingClientRect();
|
|
56
|
+
if (placed.left !== rect.left || placed.top !== rect.top) {
|
|
57
|
+
setImportant(mirror, 'left', `${2 * rect.left - placed.left}px`);
|
|
58
|
+
setImportant(mirror, 'top', `${2 * rect.top - placed.top}px`);
|
|
59
|
+
}
|
|
60
|
+
mirror.scrollLeft = editor.scrollLeft;
|
|
61
|
+
mirror.scrollTop = editor.scrollTop;
|
|
62
|
+
return { mirror, content, caret };
|
|
63
|
+
}
|
|
64
|
+
/** An inline box at the caret, inheriting the mirror's text style and nothing from the page. */
|
|
65
|
+
function createMarker(document) {
|
|
66
|
+
const marker = document.createElement('satin-caret-marker');
|
|
67
|
+
setImportant(marker, 'all', 'inherit');
|
|
68
|
+
const reset = {
|
|
69
|
+
display: 'inline',
|
|
70
|
+
position: 'static',
|
|
71
|
+
width: 'auto',
|
|
72
|
+
height: 'auto',
|
|
73
|
+
margin: '0',
|
|
74
|
+
padding: '0',
|
|
75
|
+
'border-width': '0',
|
|
76
|
+
'text-indent': '0',
|
|
77
|
+
overflow: 'visible',
|
|
78
|
+
};
|
|
79
|
+
for (const [property, value] of Object.entries(reset))
|
|
80
|
+
setImportant(marker, property, value);
|
|
81
|
+
marker.textContent = '\u200b';
|
|
82
|
+
return marker;
|
|
83
|
+
}
|
|
84
|
+
/** The text offset under a point of the editor (WebKit hides the input's internal text node). */
|
|
85
|
+
export function caretOffsetAt(editor, x, y) {
|
|
86
|
+
const document = editor.ownerDocument;
|
|
87
|
+
const { mirror, content } = createMirror(editor, editor.value || '');
|
|
88
|
+
try {
|
|
89
|
+
const caret = document.caretPositionFromPoint?.(x, y);
|
|
90
|
+
if (caret?.offsetNode === content)
|
|
91
|
+
return Math.min(caret.offset, editor.value.length);
|
|
92
|
+
const range = document.caretRangeFromPoint?.(x, y);
|
|
93
|
+
if (range?.startContainer === content)
|
|
94
|
+
return Math.min(range.startOffset, editor.value.length);
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
mirror.remove();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The line box of the caret at `offset` in a multi-line editor, in viewport coordinates, as the
|
|
103
|
+
* editor draws it now (its own scroll included). Null for single-line fields (the field is the line).
|
|
104
|
+
*/
|
|
105
|
+
export function caretLineAt(editor, offset) {
|
|
106
|
+
if (!(editor instanceof HTMLTextAreaElement))
|
|
107
|
+
return null;
|
|
108
|
+
const before = Math.max(0, Math.min(offset, editor.value.length));
|
|
109
|
+
const { mirror, caret } = createMirror(editor, editor.value, { before });
|
|
110
|
+
try {
|
|
111
|
+
const line = caret.getBoundingClientRect();
|
|
112
|
+
const box = mirror.getBoundingClientRect();
|
|
113
|
+
const editorBox = editor.getBoundingClientRect();
|
|
114
|
+
const lineHeight = parseFloat(getComputedStyle(editor).lineHeight) || line.height || 22;
|
|
115
|
+
// The mirror scrolled like the editor; place the line relative to the editor itself.
|
|
116
|
+
const top = editorBox.top + (line.top - box.top);
|
|
117
|
+
return { top, bottom: top + Math.max(line.height, lineHeight) };
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
mirror.remove();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** A viewport occlusion this tall is a software keyboard (the iPad hardware-keyboard bar is 55-70 pt). */
|
|
2
|
+
export declare const SOFTWARE_KEYBOARD_MIN_HEIGHT = 120;
|
|
3
|
+
/** Apply the same plausibility limit to live reports and remembered geometry. */
|
|
4
|
+
export declare function isPlausibleKeyboardHeight(width: number, layoutHeight: number, keyboardHeight: number): boolean;
|
|
5
|
+
export declare function defaultSoftwareKeyboardHeight(width: number, height: number): number;
|
|
6
|
+
/** The tallest software keyboard WebKit has reported at this window size, in an earlier launch too. */
|
|
7
|
+
export declare function readMeasuredKeyboardHeight(width: number, height: number): number | null;
|
|
8
|
+
export declare function rememberKeyboardHeight(width: number, height: number, keyboardHeight: number): void;
|
|
9
|
+
/** The keyboard height to plan for: the tallest measured one, else the device default. */
|
|
10
|
+
export declare function expectedKeyboardHeight(width: number, height: number): number;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { readDeviceIdiom } from '../layout/deviceIdiom.js';
|
|
2
|
+
/** A viewport occlusion this tall is a software keyboard (the iPad hardware-keyboard bar is 55-70 pt). */
|
|
3
|
+
export const SOFTWARE_KEYBOARD_MIN_HEIGHT = 120;
|
|
4
|
+
const STORAGE_PREFIX = 'satin-keyboard-height:';
|
|
5
|
+
/** Baseline upper share, with the existing short phone landscape allowance below. */
|
|
6
|
+
const MAX_KEYBOARD_SHARE = 0.7;
|
|
7
|
+
/** Apply the same plausibility limit to live reports and remembered geometry. */
|
|
8
|
+
export function isPlausibleKeyboardHeight(width, layoutHeight, keyboardHeight) {
|
|
9
|
+
// The phone landscape default can exceed 70% in a short window. Preserve that
|
|
10
|
+
// existing allowance instead of rejecting the geometry we already plan for.
|
|
11
|
+
const maximum = Math.min(layoutHeight, Math.max(layoutHeight * MAX_KEYBOARD_SHARE, defaultSoftwareKeyboardHeight(width, layoutHeight)));
|
|
12
|
+
return Number.isFinite(keyboardHeight) && keyboardHeight >= 0 && keyboardHeight <= maximum;
|
|
13
|
+
}
|
|
14
|
+
/*
|
|
15
|
+
* The software keyboard's height before WebKit has ever reported one at this window size.
|
|
16
|
+
*
|
|
17
|
+
* It only has to be at least as tall as the real keyboard: presentations use it to keep a text
|
|
18
|
+
* field clear of the keyboard that has not arrived yet, and the first report replaces it.
|
|
19
|
+
* References: iPad Pro 13-inch landscape (1366 x 1024) reports 498 pt with the predictive bar
|
|
20
|
+
* (installed, iOS 27.0); iPhone 17 Pro Max portrait raises a stock alert for a 347 pt keyboard
|
|
21
|
+
* (measured-reference native recording), and a web text field adds the 44 pt form accessory bar.
|
|
22
|
+
* The other classes are estimates until a device reports them.
|
|
23
|
+
*/
|
|
24
|
+
export function defaultSoftwareKeyboardHeight(width, height) {
|
|
25
|
+
const landscape = width > height;
|
|
26
|
+
if (readDeviceIdiom() === 'pad')
|
|
27
|
+
return Math.round(height * (landscape ? 0.4865 : 0.31));
|
|
28
|
+
if (landscape)
|
|
29
|
+
return 250;
|
|
30
|
+
return height >= 800 ? 391 : 304;
|
|
31
|
+
}
|
|
32
|
+
const storageKey = (width, height) => `${STORAGE_PREFIX}${width}x${height}`;
|
|
33
|
+
/** The tallest software keyboard WebKit has reported at this window size, in an earlier launch too. */
|
|
34
|
+
export function readMeasuredKeyboardHeight(width, height) {
|
|
35
|
+
try {
|
|
36
|
+
if (typeof localStorage === 'undefined')
|
|
37
|
+
return null;
|
|
38
|
+
const stored = Number(localStorage.getItem(storageKey(width, height)));
|
|
39
|
+
const plausible = stored >= SOFTWARE_KEYBOARD_MIN_HEIGHT && isPlausibleKeyboardHeight(width, height, stored);
|
|
40
|
+
return plausible ? stored : null;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Storage can be unavailable (private mode, a test double): the default stands in.
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export function rememberKeyboardHeight(width, height, keyboardHeight) {
|
|
48
|
+
try {
|
|
49
|
+
if (typeof localStorage === 'undefined')
|
|
50
|
+
return;
|
|
51
|
+
localStorage.setItem(storageKey(width, height), String(keyboardHeight));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// A full or unavailable store only costs the next launch its measured height.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** The keyboard height to plan for: the tallest measured one, else the device default. */
|
|
58
|
+
export function expectedKeyboardHeight(width, height) {
|
|
59
|
+
return readMeasuredKeyboardHeight(width, height) ?? defaultSoftwareKeyboardHeight(width, height);
|
|
60
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** The keyboard overlap and viewport dimensions in points. */
|
|
2
|
+
export type KeyboardGeometry = Readonly<{
|
|
3
|
+
height: number;
|
|
4
|
+
visible: boolean;
|
|
5
|
+
viewportHeight: number;
|
|
6
|
+
offsetTop: number;
|
|
7
|
+
layoutHeight: number;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function keyboardGeometry(layoutHeight: number, visualHeight: number, offsetTop: number, scale: number, engaged: boolean): KeyboardGeometry;
|
|
10
|
+
export declare function revealDelta(fieldTop: number, fieldBottom: number, surfaceTop: number, surfaceBottom: number, viewportBottom: number, gap?: number): number;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function keyboardGeometry(layoutHeight, visualHeight, offsetTop, scale, engaged) {
|
|
2
|
+
// Zoom is not keyboard occlusion. Hardware keyboards produce zero occlusion.
|
|
3
|
+
const height = engaged && Math.abs(scale - 1) < 0.01 ? Math.max(0, layoutHeight - visualHeight) : 0;
|
|
4
|
+
return {
|
|
5
|
+
height,
|
|
6
|
+
visible: height > 0,
|
|
7
|
+
viewportHeight: Math.max(0, layoutHeight - height),
|
|
8
|
+
offsetTop: height > 0 ? Math.max(0, offsetTop) : 0,
|
|
9
|
+
layoutHeight,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function revealDelta(fieldTop, fieldBottom, surfaceTop, surfaceBottom, viewportBottom, gap = 12) {
|
|
13
|
+
const top = Math.max(0, surfaceTop) + gap;
|
|
14
|
+
const bottom = Math.min(surfaceBottom, viewportBottom) - gap;
|
|
15
|
+
if (fieldTop < top)
|
|
16
|
+
return fieldTop - top;
|
|
17
|
+
// Tall editors reveal their top; the native textarea owns caret scrolling.
|
|
18
|
+
if (fieldBottom - fieldTop > bottom - top)
|
|
19
|
+
return fieldTop - top;
|
|
20
|
+
return Math.max(0, fieldBottom - bottom);
|
|
21
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
type Editor = HTMLInputElement | HTMLTextAreaElement;
|
|
2
|
+
/**
|
|
3
|
+
* Own every focus of an editor, so that each one carries `preventScroll`.
|
|
4
|
+
*
|
|
5
|
+
* Measured on the iPad (1366 x 1024, the alert's field): a focus WebKit makes itself pans the
|
|
6
|
+
* visual viewport by 238.5 pt in one step when the keyboard arrives, and the page is drawn there
|
|
7
|
+
* until the next script frame puts it back. On a phone WebKit always centres a field it focused
|
|
8
|
+
* (WKContentView forces the scroll where the form accessory bar is shown). A focus made with
|
|
9
|
+
* `preventScroll` is never revealed by WebKit; the keyboard adapter reveals it. The ways a finger
|
|
10
|
+
* focuses an editor:
|
|
11
|
+
* - a short tap: focused at pointer-up, inside the activation the keyboard needs;
|
|
12
|
+
* - a tap held longer than that, or one that moved: its mouse press is prevented and focused here
|
|
13
|
+
* (a 450 ms tap panned the page before this; repeating the focus afterwards did not help);
|
|
14
|
+
* - a label: its click is prevented and its editor focused here;
|
|
15
|
+
* - focus moving from an owned editor to another one in the same scope while the keyboard is up
|
|
16
|
+
* and no Tab key was pressed (the keyboard's next/previous keys; an app's focus call between two
|
|
17
|
+
* fields is indistinguishable and ends on the same field): the new editor is focused with
|
|
18
|
+
* `preventScroll` from the old one's focusout, so WebKit abandons the call that would have
|
|
19
|
+
* panned (it pans at once while the keyboard is up). Never for an inert field, across a dialog
|
|
20
|
+
* boundary, or while a presentation is still moving;
|
|
21
|
+
* - anything else (a long press, an app's focus call with no editor focused, an assistive
|
|
22
|
+
* technology or keyboard activation of a label): the focus is repeated with `preventScroll` in
|
|
23
|
+
* its focusin, which WebKit accepts while its keyboard is not up yet.
|
|
24
|
+
* A mouse or trackpad press stays native from pointer-down to click: its drag selects text.
|
|
25
|
+
*
|
|
26
|
+
* Every gesture in an editor that is already focused stays native (caret taps, double-tap word
|
|
27
|
+
* selection, selection and caret drags), whether or not a keyboard shrinks the viewport (a hardware
|
|
28
|
+
* keyboard, an undocked keyboard, the ~100 ms before WebKit reports a software keyboard) and
|
|
29
|
+
* however it was focused. An editor focused without a press (by the app, Tab, or the next key)
|
|
30
|
+
* while no keyboard shows gets one more framework focus with `preventScroll` at the pointer-down
|
|
31
|
+
* of its first tap, so the editing session that tap starts is not revealed with a pan; the tap
|
|
32
|
+
* itself stays WebKit's.
|
|
33
|
+
*/
|
|
34
|
+
export declare function installModalTapFocus(root: HTMLElement, isEditable: (target: EventTarget | null) => target is Editor,
|
|
35
|
+
/** Called once this tap has focused the editor (its keyboard is on the way). */
|
|
36
|
+
onTapFocus?: (editor: Editor) => void,
|
|
37
|
+
/** False while no keyboard is shown: a tap on the focused editor must then bring it back. */
|
|
38
|
+
keyboardShowing?: () => boolean,
|
|
39
|
+
/** Which editors are owned. The keyboard adapter owns every editor in its root (pages too). */
|
|
40
|
+
owns?: (editor: Element) => boolean): () => void;
|
|
41
|
+
export {};
|