@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,304 @@
|
|
|
1
|
+
import { padDrawing, phoneDrawing } from './installExperienceDevice.js';
|
|
2
|
+
/**
|
|
3
|
+
* The install page leads with the action, "Add {app} to Home Screen". Above it, a drawing of the
|
|
4
|
+
* device in hand (an iPhone, or an iPad on an iPad) shows a Home Screen with the app's icon
|
|
5
|
+
* hovering over the next free place among greyed-out apps; the app's description sits under
|
|
6
|
+
* the title. Then the steps in the grammar of Apple's onboarding sheets, one emphasised at a
|
|
7
|
+
* time, and a tip in the style of the system's popover tips at Safari's real control.
|
|
8
|
+
*
|
|
9
|
+
* Layouts: iPhone portrait (one column), iPhone landscape and iPad landscape (the drawing
|
|
10
|
+
* beside the text), iPad portrait (one centred column with room around it), and a narrow
|
|
11
|
+
* iPad window (the phone's column with the iPad drawing).
|
|
12
|
+
*/
|
|
13
|
+
export function homeScene(icon) {
|
|
14
|
+
return `<div class="ix-art">${phoneDrawing(icon)}${padDrawing(icon)}</div>`;
|
|
15
|
+
}
|
|
16
|
+
/** One row: a symbol, the bold action, and where to find it. */
|
|
17
|
+
export function homeStep(symbol, action, where = '') {
|
|
18
|
+
// Show the location detail when supplied; otherwise keep the action on one line.
|
|
19
|
+
const label = `<b>${action}</b>${where ? `<span class="ix-where">${where}</span>` : ''}`;
|
|
20
|
+
return `<li><span class="ix-sym">${symbol}</span><span class="ix-row">${label}</span></li>`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The tip's glass, copied from iOS 27's own popover tip (TipKit `.popoverTip`) rendered in the
|
|
24
|
+
* Simulator on the page's colours and measured at 3x (numbers in the notes). Panel
|
|
25
|
+
* and tail are one shape. Drawn in CSS pixels (no viewBox), sized to the tip by percentages,
|
|
26
|
+
* with three tail placements, one shown per Safari layout. Layers, as measured:
|
|
27
|
+
* - fill: the page colour lifted towards white (more at the centre in light: an edge band of
|
|
28
|
+
* the page colour about 16 pt wide fades into it);
|
|
29
|
+
* - inner light lines along the top and bottom edges only (none at the sides), with a short
|
|
30
|
+
* falloff;
|
|
31
|
+
* - a thin dark line just outside the edge, strongest at the sides (the lens edge);
|
|
32
|
+
* - a soft, low shadow.
|
|
33
|
+
*/
|
|
34
|
+
const everywhere = 'maskUnits="userSpaceOnUse" x="-50%" y="-100%" width="200%" height="300%"';
|
|
35
|
+
const stop = (offset, alpha) => `<stop offset="${offset}" style="stop-color:#fff;stop-opacity:var(${alpha})"/>`;
|
|
36
|
+
const shape = '<use href="#ix-shape"/>';
|
|
37
|
+
/*
|
|
38
|
+
* Round eight: panel and tail are one path, `#ix-shape`, which the runtime draws for the tip's
|
|
39
|
+
* size and Safari's layout (see `shapeTip`), so fill and outline have no seam or step where the
|
|
40
|
+
* tail meets the panel. The layers are round six's, which the owner liked; only the bottom
|
|
41
|
+
* inner line is now an inner stroke of that path, so it follows the tail instead of crossing it.
|
|
42
|
+
*/
|
|
43
|
+
export const TIP_GLASS = [
|
|
44
|
+
'<svg class="ix-glass" aria-hidden="true"><defs>',
|
|
45
|
+
`<path id="ix-shape" d="M0 0"/><clipPath id="ix-in">${shape}</clipPath>`,
|
|
46
|
+
// Round nine: the inner light lines are strokes of the tip's own path, weighted by the edge's
|
|
47
|
+
// angle the way iOS lights its rims: full along the straight top and bottom, fading around the
|
|
48
|
+
// 17 pt corner arcs to nothing where the edge turns vertical. On a circular arc the cosine of
|
|
49
|
+
// the edge's angle is linear in height over one corner radius; native fades about as its
|
|
50
|
+
// square (measured in dark at 3x), so the stops are 1, 0.56, 0.25, 0.06, 0.
|
|
51
|
+
'<linearGradient id="ix-lt" gradientUnits="userSpaceOnUse" x2="0" y2="17">',
|
|
52
|
+
`${stop(0, '--one')}${stop(0.25, '--q1')}${stop(0.5, '--q2')}${stop(0.75, '--q3')}${stop(1, '--zero')}</linearGradient>`,
|
|
53
|
+
'<linearGradient id="ix-lb" gradientUnits="userSpaceOnUse" x2="0" y2="-17">',
|
|
54
|
+
`${stop(0, '--hl-bottom')}${stop(0.25, '--qb1')}${stop(0.5, '--qb2')}${stop(0.75, '--qb3')}${stop(1, '--zero')}</linearGradient>`,
|
|
55
|
+
`<mask id="ix-lm" ${everywhere} style="mask-type:alpha">`,
|
|
56
|
+
'<rect x="-50%" y="-100%" width="200%" height="100%" fill="#fff"/><rect x="-50%" width="200%" height="17" fill="url(#ix-lt)"/>',
|
|
57
|
+
'<svg y="100%" width="100%" height="1" overflow="visible"><rect x="-50%" y="-17" width="200%" height="17" fill="url(#ix-lb)"/>',
|
|
58
|
+
'<rect x="-50%" width="200%" height="40" style="fill:#fff;fill-opacity:var(--hl-bottom)"/></svg></mask>',
|
|
59
|
+
'<filter id="ix-hblur" x="-20%" y="-60%" width="140%" height="220%"><feGaussianBlur stdDeviation="2"/></filter>',
|
|
60
|
+
// The outer dark line: its strength at the top, the sides and the bottom.
|
|
61
|
+
'<linearGradient id="ix-hg" gradientUnits="userSpaceOnUse" x2="0" y2="100%">',
|
|
62
|
+
`${stop(0, '--ht')}${stop(0.4, '--hs')}${stop(0.6, '--hs')}${stop(1, '--hb')}</linearGradient>`,
|
|
63
|
+
`<mask id="ix-hm" ${everywhere} style="mask-type:alpha"><rect x="-50%" y="-100%" width="200%" height="300%" fill="url(#ix-hg)"/></mask>`,
|
|
64
|
+
`<mask id="ix-out" ${everywhere}><rect x="-50%" y="-100%" width="200%" height="300%" fill="#fff"/><g fill="#000">${shape}</g></mask>`,
|
|
65
|
+
'<filter id="ix-blur" x="-20%" y="-60%" width="140%" height="220%"><feGaussianBlur stdDeviation="5"/></filter>',
|
|
66
|
+
// The shadow is the shape's own and fades out before the bottom of Safari's page area.
|
|
67
|
+
`<filter id="ix-shadow" ${everywhere.replace('maskUnits', 'filterUnits')}>`,
|
|
68
|
+
'<feGaussianBlur in="SourceAlpha" stdDeviation="8"/><feOffset dy="3"/>',
|
|
69
|
+
'<feComponentTransfer><feFuncA type="linear" slope=".06"/></feComponentTransfer></filter></defs>',
|
|
70
|
+
`<g filter="url(#ix-shadow)">${shape}</g>`,
|
|
71
|
+
`<g clip-path="url(#ix-in)"><g class="ix-glass-fill">${shape}</g>`,
|
|
72
|
+
`<g class="ix-glass-band" fill="none" stroke-width="20" filter="url(#ix-blur)">${shape}</g>`,
|
|
73
|
+
`<g mask="url(#ix-lm)" fill="none" stroke="#fff"><g class="ix-glass-soft" stroke-width="6" filter="url(#ix-hblur)">${shape}</g>`,
|
|
74
|
+
`<g class="ix-glass-line" stroke-width="1.34">${shape}</g></g></g>`,
|
|
75
|
+
`<g mask="url(#ix-out)"><g mask="url(#ix-hm)"><g stroke="#000" stroke-width="1.34" fill="none">${shape}</g></g></g>`,
|
|
76
|
+
'</svg>',
|
|
77
|
+
].join('');
|
|
78
|
+
export const CSS_D = `
|
|
79
|
+
.ix { text-align: center; padding-inline: max(20px, env(safe-area-inset-left)) max(20px, env(safe-area-inset-right)); }
|
|
80
|
+
.ix-hero { padding-top: clamp(14px, 3svh, 32px); }
|
|
81
|
+
|
|
82
|
+
/* The drawing. Height drives its size; the large-text levels shrink it. */
|
|
83
|
+
/* The drawing: the lower part of the device, large, its cut edge fading into the page.
|
|
84
|
+
* --art is its width; the large-text levels narrow it. */
|
|
85
|
+
.ix-art { --art: min(100%, 360px, 48svh); display: flex; justify-content: center; }
|
|
86
|
+
.ix-device {
|
|
87
|
+
display: block;
|
|
88
|
+
width: var(--art);
|
|
89
|
+
height: auto;
|
|
90
|
+
max-width: 100%;
|
|
91
|
+
-webkit-mask-image: linear-gradient(transparent, #000 18%);
|
|
92
|
+
mask-image: linear-gradient(transparent, #000 18%);
|
|
93
|
+
}
|
|
94
|
+
.ix-tablet, html[data-device="pad"] .ix-phone { display: none; }
|
|
95
|
+
html[data-device="pad"] .ix-tablet { display: block; }
|
|
96
|
+
.ix-frame { filter: drop-shadow(0 10px 14px rgb(0 0 0 / 0.16)); }
|
|
97
|
+
.ix-frame { stroke: rgb(0 0 0 / 0.12); stroke-width: 1; }
|
|
98
|
+
.ix-border { fill: #0b0b0c; }
|
|
99
|
+
.ix-t1 { fill: var(--g1); }
|
|
100
|
+
.ix-t2 { fill: var(--g2); }
|
|
101
|
+
.ix-t3 { fill: var(--g3); }
|
|
102
|
+
.ix-t4 { fill: var(--g4); }
|
|
103
|
+
.ix-label { fill: var(--label-bar); }
|
|
104
|
+
.ix-ink { fill: var(--ink); }
|
|
105
|
+
.ix-dock { fill: var(--dock-glass); stroke: var(--dock-rim); stroke-width: 1.5; }
|
|
106
|
+
.ix-app { filter: drop-shadow(0 6px 8px rgb(0 0 0 / 0.25)); }
|
|
107
|
+
|
|
108
|
+
/* The action is the title; the description supports it. */
|
|
109
|
+
.ix-title {
|
|
110
|
+
margin-top: 18px;
|
|
111
|
+
font-size: min(1.765rem, 40px);
|
|
112
|
+
font-weight: 700;
|
|
113
|
+
letter-spacing: 0;
|
|
114
|
+
line-height: 1.17;
|
|
115
|
+
text-wrap: balance;
|
|
116
|
+
overflow-wrap: anywhere;
|
|
117
|
+
}
|
|
118
|
+
.ix-about {
|
|
119
|
+
margin-top: 6px;
|
|
120
|
+
color: var(--second);
|
|
121
|
+
font-size: min(1rem, 28px);
|
|
122
|
+
line-height: 1.294;
|
|
123
|
+
text-wrap: balance;
|
|
124
|
+
}
|
|
125
|
+
[data-panel] { margin-top: 22px; }
|
|
126
|
+
[data-panel] h2 { font-size: min(1.176rem, 28px); font-weight: 600; }
|
|
127
|
+
[data-panel] h2 bdi { overflow-wrap: anywhere; }
|
|
128
|
+
|
|
129
|
+
/* The steps, in the grammar of the system's own onboarding sheets. */
|
|
130
|
+
.ix-steps {
|
|
131
|
+
--sym: min(2.118rem, 52px);
|
|
132
|
+
border-radius: 26px;
|
|
133
|
+
background: var(--card);
|
|
134
|
+
text-align: start;
|
|
135
|
+
}
|
|
136
|
+
[data-panel] h2 + .ix-steps { margin-top: 14px; }
|
|
137
|
+
.ix-steps li {
|
|
138
|
+
position: relative;
|
|
139
|
+
display: grid;
|
|
140
|
+
grid-template-columns: var(--sym) 1fr;
|
|
141
|
+
column-gap: 12px;
|
|
142
|
+
align-items: center;
|
|
143
|
+
min-height: 60px;
|
|
144
|
+
box-sizing: border-box;
|
|
145
|
+
padding-block: 10px;
|
|
146
|
+
padding-inline: 14px 16px;
|
|
147
|
+
}
|
|
148
|
+
.ix-steps li + li::before {
|
|
149
|
+
content: "";
|
|
150
|
+
position: absolute;
|
|
151
|
+
top: 0;
|
|
152
|
+
inset-inline: calc(var(--sym) + 26px) 0;
|
|
153
|
+
height: 0.5px;
|
|
154
|
+
background: var(--hair);
|
|
155
|
+
}
|
|
156
|
+
/*
|
|
157
|
+
* Round ten: every row's symbol has the same treatment, as in iOS lists: the symbol in the
|
|
158
|
+
* tint on a soft tinted rounded square. No row is styled as "current" and nothing joins them.
|
|
159
|
+
*/
|
|
160
|
+
/* A one-line row is a native one-line list row: title centred, 52 pt tall. */
|
|
161
|
+
.ix-steps li:not(:has(.ix-where)) { min-height: 52px; padding-block: 8px; }
|
|
162
|
+
.ix-sym {
|
|
163
|
+
display: grid;
|
|
164
|
+
place-items: center;
|
|
165
|
+
width: var(--sym);
|
|
166
|
+
height: var(--sym);
|
|
167
|
+
border-radius: calc(var(--sym) * 0.27);
|
|
168
|
+
background: var(--tint-soft);
|
|
169
|
+
color: var(--tint);
|
|
170
|
+
}
|
|
171
|
+
.ix-sym .ix-g { width: calc(var(--sym) * 0.61); height: calc(var(--sym) * 0.61); vertical-align: 0; }
|
|
172
|
+
.ix-sym [data-for] { grid-area: 1 / 1; line-height: 0; }
|
|
173
|
+
.ix-row b { display: block; font-size: 1rem; font-weight: 600; line-height: 1.294; }
|
|
174
|
+
.ix-where { display: block; color: var(--second); font-size: 0.882rem; line-height: 1.33; }
|
|
175
|
+
.ix-hint { margin-top: 14px; }
|
|
176
|
+
html[data-state="back"] [data-panel="steps"] .ix-foot { display: none; }
|
|
177
|
+
.ix-foot { margin-top: 14px; }
|
|
178
|
+
|
|
179
|
+
/*
|
|
180
|
+
* The tip: a small one-line callout (round eight: 42 pt tall, 15 pt semibold, corners 17 pt)
|
|
181
|
+
* in round six's material, measured from iOS 27's popover tip. It grows out of Safari's
|
|
182
|
+
* control the way a native popover appears. Round nine: as low as the page can draw. Safari's
|
|
183
|
+
* page area ends about 16 pt above its address bar (measured: 858 pt against 873.7 pt with the
|
|
184
|
+
* compact bar, 794 against 810.3 with the full toolbar), so the tail cannot reach the control;
|
|
185
|
+
* its point sits about 3 pt above the page area's bottom, leaving the shadow room to fade.
|
|
186
|
+
*/
|
|
187
|
+
.ix-pointer {
|
|
188
|
+
position: fixed;
|
|
189
|
+
z-index: 2;
|
|
190
|
+
left: 9px;
|
|
191
|
+
bottom: 13px;
|
|
192
|
+
display: flex;
|
|
193
|
+
align-items: center;
|
|
194
|
+
min-height: 42px;
|
|
195
|
+
box-sizing: border-box;
|
|
196
|
+
padding: 0 15px;
|
|
197
|
+
color: var(--label);
|
|
198
|
+
font-size: 15px;
|
|
199
|
+
font-weight: 600;
|
|
200
|
+
line-height: 20px;
|
|
201
|
+
white-space: nowrap;
|
|
202
|
+
transform-origin: 105px calc(100% + 11px);
|
|
203
|
+
}
|
|
204
|
+
html[data-ready] .ix-pointer { animation: ix-tip 0.45s 0.3s var(--spring) both; }
|
|
205
|
+
@keyframes ix-tip { from { transform: scale(0.2); opacity: 0; filter: blur(4px); } }
|
|
206
|
+
.ix-glass {
|
|
207
|
+
position: absolute;
|
|
208
|
+
inset: 0;
|
|
209
|
+
z-index: -1;
|
|
210
|
+
width: 100%;
|
|
211
|
+
height: 100%;
|
|
212
|
+
overflow: visible;
|
|
213
|
+
}
|
|
214
|
+
.ix-glass-fill { fill: var(--glass); }
|
|
215
|
+
.ix-glass-band { stroke: var(--glass-band); }
|
|
216
|
+
.ix-glass-line { opacity: var(--hl-line); }
|
|
217
|
+
.ix-glass-soft { opacity: var(--hl-soft); }
|
|
218
|
+
html[data-state="back"] .ix-pointer { animation: ix-tip-again 0.45s var(--spring) both; }
|
|
219
|
+
/* The symbol scaled with the words: its lines span about 19 x 12 pt. */
|
|
220
|
+
.ix-pointer .ix-g {
|
|
221
|
+
flex: none;
|
|
222
|
+
width: 32px;
|
|
223
|
+
height: 32px;
|
|
224
|
+
margin: -6px 3.5px -6px -6.6px;
|
|
225
|
+
color: var(--tint);
|
|
226
|
+
stroke-width: 1.4;
|
|
227
|
+
}
|
|
228
|
+
html[data-bar="toolbar"] .ix-pointer { right: 16px; width: fit-content; margin: 0 auto; transform-origin: 50% calc(100% + 11px); }
|
|
229
|
+
html[data-bar="top"] .ix-pointer {
|
|
230
|
+
left: auto;
|
|
231
|
+
right: calc(env(safe-area-inset-right) + 78px);
|
|
232
|
+
bottom: auto;
|
|
233
|
+
top: 12px;
|
|
234
|
+
transform-origin: calc(100% - 42px) -11px;
|
|
235
|
+
}
|
|
236
|
+
html:not([data-step="1"]) .ix-pointer { display: none; }
|
|
237
|
+
@keyframes ix-tip-again { from { transform: scale(0.2); opacity: 0; filter: blur(4px); } }
|
|
238
|
+
html[data-bar="top"] .ix { padding-top: 80px; }
|
|
239
|
+
|
|
240
|
+
.ix-qr { margin-inline: auto; }
|
|
241
|
+
@media (min-width: 600px) { .ix-panels, #satin-install-check { max-width: 460px; margin-inline: auto; } }
|
|
242
|
+
|
|
243
|
+
/*
|
|
244
|
+
* iPad portrait (any window at least 600 wide and 700 tall, upright): one column with space,
|
|
245
|
+
* about centred. The offset is fixed rather than measured, so the page does not move when
|
|
246
|
+
* the deployment check hands over to the steps.
|
|
247
|
+
*/
|
|
248
|
+
@media (min-width: 600px) and (min-height: 700px) and (orientation: portrait) {
|
|
249
|
+
.ix-hero, html[data-bar="top"] .ix-hero { padding-top: max(24px, calc(50svh - 400px)); }
|
|
250
|
+
html[data-device="pad"] .ix-art { --art: min(100%, 560px); }
|
|
251
|
+
.ix-title { margin-top: 28px; font-size: min(2.118rem, 44px); }
|
|
252
|
+
.ix-panels, #satin-install-check { width: 100%; max-width: 480px; }
|
|
253
|
+
}
|
|
254
|
+
/* A narrow iPad window: the phone's column, with the iPad drawn. */
|
|
255
|
+
@media (max-width: 599px) { html[data-device="pad"] .ix-art { --art: 100%; } }
|
|
256
|
+
|
|
257
|
+
/* Landscape with room (iPad): the drawing on the left, the title and steps beside it. */
|
|
258
|
+
@media (orientation: landscape) and (min-width: 900px) and (min-height: 600px) {
|
|
259
|
+
.ix {
|
|
260
|
+
display: grid;
|
|
261
|
+
grid-template-columns: minmax(0, 1fr) minmax(320px, 440px);
|
|
262
|
+
grid-auto-rows: min-content;
|
|
263
|
+
align-content: center;
|
|
264
|
+
column-gap: clamp(32px, 6vw, 88px);
|
|
265
|
+
max-width: 1120px;
|
|
266
|
+
margin-inline: auto;
|
|
267
|
+
text-align: start;
|
|
268
|
+
}
|
|
269
|
+
.ix-hero { display: contents; }
|
|
270
|
+
html .ix-art { grid-column: 1; grid-row: 1 / span 4; align-self: center; --art: min(100%, 540px); }
|
|
271
|
+
.ix-hero > :not(.ix-art), #satin-install-check, .ix-panels { grid-column: 2; }
|
|
272
|
+
.ix-title { margin-top: 0; font-size: min(2.118rem, 44px); }
|
|
273
|
+
.ix-panels, #satin-install-check { max-width: none; margin-inline: 0; }
|
|
274
|
+
.ix-qr { margin-inline: 0; }
|
|
275
|
+
}
|
|
276
|
+
/* iPhone landscape: little height, so the same two columns, tighter. */
|
|
277
|
+
@media (orientation: landscape) and (max-height: 500px) {
|
|
278
|
+
.ix {
|
|
279
|
+
display: grid;
|
|
280
|
+
grid-template-columns: 0.75fr 1.25fr;
|
|
281
|
+
grid-auto-rows: min-content;
|
|
282
|
+
align-content: center;
|
|
283
|
+
column-gap: 24px;
|
|
284
|
+
padding-top: 52px;
|
|
285
|
+
padding-bottom: max(8px, env(safe-area-inset-bottom));
|
|
286
|
+
text-align: start;
|
|
287
|
+
}
|
|
288
|
+
.ix-hero { display: contents; }
|
|
289
|
+
html .ix-art { grid-column: 1; grid-row: 1 / span 4; align-self: center; --art: min(100%, 300px, 88svh); }
|
|
290
|
+
.ix-hero > :not(.ix-art), #satin-install-check, .ix-panels { grid-column: 2; }
|
|
291
|
+
.ix-title { margin-top: 0; font-size: min(1.412rem, 30px); }
|
|
292
|
+
.ix-about { margin-top: 2px; }
|
|
293
|
+
[data-panel] { margin-top: 10px; }
|
|
294
|
+
html[data-tight="3x"] .ix-foot { display: none; }
|
|
295
|
+
.ix-steps li { min-height: 48px; padding-block: 5px; }
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* When the text is large the drawing steps back so the steps keep their room. */
|
|
299
|
+
html[data-tight="1"] .ix-art { --art: 260px; }
|
|
300
|
+
html[data-tight="2"] .ix-art { --art: 200px; }
|
|
301
|
+
html[data-tight="3"] .ix-art { --art: 140px; }
|
|
302
|
+
html[data-tight="3x"] :is(.ix-art, .ix-about) { display: none; }
|
|
303
|
+
html[data-tight] .ix-hero { padding-top: 6px; }
|
|
304
|
+
`;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface InstallExperienceConfig {
|
|
2
|
+
readonly installRoute: string;
|
|
3
|
+
readonly kind: 'install' | 'gate';
|
|
4
|
+
/** Scratch review builds accept `?env=`, `?state=` and `?device=`. Never set in production. */
|
|
5
|
+
readonly preview: boolean;
|
|
6
|
+
/** The words for this device, iPhone first: the page is written with "iPhone or iPad". */
|
|
7
|
+
readonly devices: readonly [string, string];
|
|
8
|
+
}
|
|
9
|
+
type QrEncoder = (text: string) => boolean[][] | null;
|
|
10
|
+
/**
|
|
11
|
+
* Browser half of the install experience. It never invents progress: it classifies the
|
|
12
|
+
* browser once, places the pointer where Safari's control really is, and reacts only to
|
|
13
|
+
* events the page actually receives while the share sheet covers it.
|
|
14
|
+
*
|
|
15
|
+
* Measured on iOS 27.0 Safari (see the implementation contract):
|
|
16
|
+
* - opening the page menu or the compact share sheet sends the page nothing;
|
|
17
|
+
* - the full-height share sheet takes focus (window `blur`);
|
|
18
|
+
* - the Add to Home Screen dialog raises the keyboard (`visualViewport` shrinks), and so
|
|
19
|
+
* does Add Bookmark, so a keyboard alone never proves which dialog was open;
|
|
20
|
+
* - Add closes that dialog and iOS shows the Home Screen, so the page is hidden: in the
|
|
21
|
+
* Simulator one to two seconds after the keyboard goes, on a real iPad while the keyboard
|
|
22
|
+
* still counts as up, with the dialog gone when the page is next visible;
|
|
23
|
+
* - Cancel closes the dialog and the page stays visible;
|
|
24
|
+
* - a sheet closed with its own close button often returns no focus event at all, and stray
|
|
25
|
+
* focus events arrive while one sheet replaces another;
|
|
26
|
+
* - cancelling the dialog and then leaving Safari looks the same as Add, so the page never
|
|
27
|
+
* concludes that the app was added and never takes the steps away.
|
|
28
|
+
*
|
|
29
|
+
* Self-contained: embedded verbatim in the page, so it must not reference module scope.
|
|
30
|
+
*/
|
|
31
|
+
export declare function installExperienceRuntime(config: InstallExperienceConfig, encodeQr: QrEncoder, policy?: {
|
|
32
|
+
classifyInstallSignals: typeof import("./installPolicy.js").classifyInstallSignals;
|
|
33
|
+
safariBarGeometry: typeof import("./installPolicy.js").safariBarGeometry;
|
|
34
|
+
safariToolbarCollapse: typeof import("./installPolicy.js").safariToolbarCollapse;
|
|
35
|
+
tipPath: typeof import("./installPolicy.js").tipPath;
|
|
36
|
+
}): void;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { installPolicy } from './installPolicy.js';
|
|
2
|
+
/**
|
|
3
|
+
* Browser half of the install experience. It never invents progress: it classifies the
|
|
4
|
+
* browser once, places the pointer where Safari's control really is, and reacts only to
|
|
5
|
+
* events the page actually receives while the share sheet covers it.
|
|
6
|
+
*
|
|
7
|
+
* Measured on iOS 27.0 Safari (see the implementation contract):
|
|
8
|
+
* - opening the page menu or the compact share sheet sends the page nothing;
|
|
9
|
+
* - the full-height share sheet takes focus (window `blur`);
|
|
10
|
+
* - the Add to Home Screen dialog raises the keyboard (`visualViewport` shrinks), and so
|
|
11
|
+
* does Add Bookmark, so a keyboard alone never proves which dialog was open;
|
|
12
|
+
* - Add closes that dialog and iOS shows the Home Screen, so the page is hidden: in the
|
|
13
|
+
* Simulator one to two seconds after the keyboard goes, on a real iPad while the keyboard
|
|
14
|
+
* still counts as up, with the dialog gone when the page is next visible;
|
|
15
|
+
* - Cancel closes the dialog and the page stays visible;
|
|
16
|
+
* - a sheet closed with its own close button often returns no focus event at all, and stray
|
|
17
|
+
* focus events arrive while one sheet replaces another;
|
|
18
|
+
* - cancelling the dialog and then leaving Safari looks the same as Add, so the page never
|
|
19
|
+
* concludes that the app was added and never takes the steps away.
|
|
20
|
+
*
|
|
21
|
+
* Self-contained: embedded verbatim in the page, so it must not reference module scope.
|
|
22
|
+
*/
|
|
23
|
+
export function installExperienceRuntime(config, encodeQr, policy = installPolicy) {
|
|
24
|
+
const root = document.documentElement;
|
|
25
|
+
const guide = document.getElementById('satin-install-guide');
|
|
26
|
+
if (!guide)
|
|
27
|
+
return;
|
|
28
|
+
const query = new URLSearchParams(config.preview ? location.search : '');
|
|
29
|
+
const userAgent = navigator.userAgent;
|
|
30
|
+
const signals = policy.classifyInstallSignals(userAgent, navigator.platform, navigator.maxTouchPoints);
|
|
31
|
+
const forcedDevice = query.get('device');
|
|
32
|
+
const tablet = forcedDevice ? forcedDevice === 'pad' : signals.device === 'ipad';
|
|
33
|
+
const iosWebKit = signals.device !== 'other';
|
|
34
|
+
const pageUrl = location.origin + config.installRoute;
|
|
35
|
+
const environment = query.get('env') ??
|
|
36
|
+
(config.kind === 'gate' || !iosWebKit
|
|
37
|
+
? 'gate'
|
|
38
|
+
: signals.browser === 'in-app'
|
|
39
|
+
? 'inapp'
|
|
40
|
+
: signals.browser === 'other'
|
|
41
|
+
? 'browser'
|
|
42
|
+
: 'safari');
|
|
43
|
+
root.dataset.env = ['gate', 'inapp', 'browser'].includes(environment) ? environment : 'safari';
|
|
44
|
+
root.dataset.device = tablet ? 'pad' : 'phone';
|
|
45
|
+
// On an iPhone or an iPad the page names that device; anywhere else it keeps both names.
|
|
46
|
+
if (iosWebKit || forcedDevice) {
|
|
47
|
+
for (const word of document.querySelectorAll('[data-device-name]')) {
|
|
48
|
+
word.textContent = config.devices[tablet ? 1 : 0];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Where Safari keeps the control that starts the flow. The dynamic toolbar's size tells
|
|
52
|
+
// the layouts apart: Compact collapses by about 40 pt, Bottom by 100, Top by 152.
|
|
53
|
+
const classifyBar = () => {
|
|
54
|
+
const forced = query.get('env');
|
|
55
|
+
if (forced && ['compact', 'toolbar', 'top', 'unknown'].includes(forced))
|
|
56
|
+
return forced;
|
|
57
|
+
return policy.safariBarGeometry(signals.safariVersion, signals.device, innerWidth, innerHeight, policy.safariToolbarCollapse(signals.safariVersion, signals.device, innerWidth, innerHeight));
|
|
58
|
+
};
|
|
59
|
+
// The tip's panel and tail are one path, drawn for the tip's size and Safari's layout, so
|
|
60
|
+
// fill and outline have no seam where the tail meets the panel (round eight). The tail is
|
|
61
|
+
// TipKit's, scaled: wide curved shoulders, straight sides, a round point.
|
|
62
|
+
const tip = document.querySelector('.ix-pointer');
|
|
63
|
+
const tipShape = document.getElementById('ix-shape');
|
|
64
|
+
const shapeTip = () => {
|
|
65
|
+
const bar = root.dataset.bar;
|
|
66
|
+
if (!tip || !tipShape || !bar || bar === 'unknown')
|
|
67
|
+
return;
|
|
68
|
+
const w = tip.offsetWidth;
|
|
69
|
+
const h = tip.offsetHeight;
|
|
70
|
+
if (!w || !h)
|
|
71
|
+
return;
|
|
72
|
+
tipShape.setAttribute('d', policy.tipPath(w, h, bar));
|
|
73
|
+
};
|
|
74
|
+
const placePointer = () => {
|
|
75
|
+
if (root.dataset.env === 'safari')
|
|
76
|
+
root.dataset.bar = classifyBar();
|
|
77
|
+
shapeTip();
|
|
78
|
+
};
|
|
79
|
+
placePointer();
|
|
80
|
+
addEventListener('resize', placePointer);
|
|
81
|
+
if (tip && typeof ResizeObserver === 'function')
|
|
82
|
+
new ResizeObserver(shapeTip).observe(tip);
|
|
83
|
+
// Large text can push the steps below the fold. The scene yields its height first, in
|
|
84
|
+
// steps (smaller, smaller still, only the icon, then without the description), before the
|
|
85
|
+
// page is left to scroll.
|
|
86
|
+
const main = guide.parentElement;
|
|
87
|
+
const fit = () => {
|
|
88
|
+
if (!main || guide.hidden)
|
|
89
|
+
return;
|
|
90
|
+
for (const level of ['', '1', '2', '3', '3x']) {
|
|
91
|
+
if (level)
|
|
92
|
+
root.dataset.tight = level;
|
|
93
|
+
else
|
|
94
|
+
delete root.dataset.tight;
|
|
95
|
+
if (main.scrollHeight <= main.clientHeight + 1)
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
addEventListener('resize', fit);
|
|
100
|
+
const live = guide.querySelector('[data-live]');
|
|
101
|
+
const setState = (state) => {
|
|
102
|
+
if (root.dataset.state === state)
|
|
103
|
+
return;
|
|
104
|
+
root.dataset.state = state;
|
|
105
|
+
const spoken = guide.querySelector('[data-say="' + state + '"]');
|
|
106
|
+
if (live && spoken) {
|
|
107
|
+
// Announce, then empty the region so VoiceOver does not find the same words twice.
|
|
108
|
+
const words = spoken.textContent;
|
|
109
|
+
live.textContent = words;
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
if (live.textContent === words)
|
|
112
|
+
live.textContent = '';
|
|
113
|
+
}, 3000);
|
|
114
|
+
}
|
|
115
|
+
fit();
|
|
116
|
+
};
|
|
117
|
+
// Environments where Safari's own flow is not available here.
|
|
118
|
+
const link = (selector, href) => {
|
|
119
|
+
for (const anchor of guide.querySelectorAll(selector))
|
|
120
|
+
anchor.href = href;
|
|
121
|
+
};
|
|
122
|
+
link('[data-open-safari]', 'x-safari-' + pageUrl);
|
|
123
|
+
for (const address of guide.querySelectorAll('[data-address]')) {
|
|
124
|
+
address.textContent = pageUrl.replace(/^https?:\/\//, '');
|
|
125
|
+
}
|
|
126
|
+
for (const button of guide.querySelectorAll('[data-copy]')) {
|
|
127
|
+
button.addEventListener('click', () => {
|
|
128
|
+
const done = () => {
|
|
129
|
+
button.dataset.copied = 'true';
|
|
130
|
+
if (live)
|
|
131
|
+
live.textContent = button.dataset.copy ?? '';
|
|
132
|
+
};
|
|
133
|
+
// Blocked or missing clipboard: say so, and show the address to select instead.
|
|
134
|
+
const failed = () => {
|
|
135
|
+
const note = button.parentElement?.querySelector('[data-copy-failed]');
|
|
136
|
+
if (!note)
|
|
137
|
+
return;
|
|
138
|
+
note.hidden = false;
|
|
139
|
+
if (live)
|
|
140
|
+
live.textContent = note.textContent;
|
|
141
|
+
};
|
|
142
|
+
try {
|
|
143
|
+
navigator.clipboard.writeText(pageUrl).then(done, failed);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
failed();
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (root.dataset.env === 'gate') {
|
|
151
|
+
const rows = encodeQr(pageUrl);
|
|
152
|
+
const code = guide.querySelector('[data-qr]');
|
|
153
|
+
if (rows && code) {
|
|
154
|
+
let path = '';
|
|
155
|
+
rows.forEach((row, y) => {
|
|
156
|
+
row.forEach((dark, x) => {
|
|
157
|
+
if (dark)
|
|
158
|
+
path += 'M' + x + ' ' + y + 'h1v1h-1z';
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
const size = rows.length;
|
|
162
|
+
code.innerHTML =
|
|
163
|
+
'<svg viewBox="-2 -2 ' +
|
|
164
|
+
(size + 4) +
|
|
165
|
+
' ' +
|
|
166
|
+
(size + 4) +
|
|
167
|
+
'" shape-rendering="crispEdges"><path fill="currentColor" d="' +
|
|
168
|
+
path +
|
|
169
|
+
'"/></svg>';
|
|
170
|
+
}
|
|
171
|
+
else if (code) {
|
|
172
|
+
code.remove();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// The share-sheet round trip, from real events only. Times are performance.now() values.
|
|
176
|
+
let covered = false; // a full-height sheet has taken focus from the page
|
|
177
|
+
let sawBlur = false; // some sheet took focus during this attempt; stray focus does not clear it
|
|
178
|
+
let keyboardUp = false; // a dialog over the page has raised the keyboard
|
|
179
|
+
let coveredAt = 0;
|
|
180
|
+
let settle;
|
|
181
|
+
let relax;
|
|
182
|
+
const safari = root.dataset.env === 'safari';
|
|
183
|
+
// The layout viewport ignores the keyboard; the visual viewport shrinks by its height.
|
|
184
|
+
// Read through `window`: a browser without the API must not throw on the bare name.
|
|
185
|
+
const viewport = window.visualViewport;
|
|
186
|
+
const keyboardShowing = () => (viewport?.height ?? innerHeight) < innerHeight - 120;
|
|
187
|
+
// Emphasis only: which step is most plausibly next. It never claims a step was done.
|
|
188
|
+
const setStep = (step) => {
|
|
189
|
+
root.dataset.step = String(step);
|
|
190
|
+
};
|
|
191
|
+
// Nothing was added if the page is still in view well after a sheet or dialog closed: Add
|
|
192
|
+
// hides the page one to two seconds after its dialog closes.
|
|
193
|
+
const settleBack = () => {
|
|
194
|
+
clearTimeout(settle);
|
|
195
|
+
settle = setTimeout(() => {
|
|
196
|
+
if (document.visibilityState === 'hidden')
|
|
197
|
+
return;
|
|
198
|
+
setStep(1);
|
|
199
|
+
setState('back');
|
|
200
|
+
}, 2800);
|
|
201
|
+
};
|
|
202
|
+
const uncover = () => {
|
|
203
|
+
covered = false;
|
|
204
|
+
clearTimeout(relax);
|
|
205
|
+
setStep(1);
|
|
206
|
+
};
|
|
207
|
+
addEventListener('blur', () => {
|
|
208
|
+
if (!safari || document.visibilityState === 'hidden')
|
|
209
|
+
return;
|
|
210
|
+
clearTimeout(settle);
|
|
211
|
+
clearTimeout(relax);
|
|
212
|
+
covered = true;
|
|
213
|
+
sawBlur = true;
|
|
214
|
+
coveredAt = performance.now();
|
|
215
|
+
setStep(2);
|
|
216
|
+
// On iPhone the sheet hides the page, and closing it with its own button returns no
|
|
217
|
+
// focus event, so the assumption that it is still open must not outlive a short while.
|
|
218
|
+
if (!tablet)
|
|
219
|
+
relax = setTimeout(() => setStep(1), 6000);
|
|
220
|
+
});
|
|
221
|
+
viewport?.addEventListener('resize', () => {
|
|
222
|
+
// The page has no text fields, so a keyboard after a sheet means a dialog over it. Stray
|
|
223
|
+
// focus events arrive while sheets change, so this must not depend on the sheet still
|
|
224
|
+
// counting as open.
|
|
225
|
+
if (safari && sawBlur && !keyboardUp && keyboardShowing()) {
|
|
226
|
+
keyboardUp = true;
|
|
227
|
+
covered = true;
|
|
228
|
+
clearTimeout(settle);
|
|
229
|
+
clearTimeout(relax);
|
|
230
|
+
setStep(3);
|
|
231
|
+
}
|
|
232
|
+
else if (keyboardUp && !keyboardShowing()) {
|
|
233
|
+
keyboardUp = false;
|
|
234
|
+
settleBack();
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
addEventListener('focus', () => {
|
|
238
|
+
if (!covered || keyboardUp)
|
|
239
|
+
return;
|
|
240
|
+
uncover();
|
|
241
|
+
settleBack();
|
|
242
|
+
});
|
|
243
|
+
// A touch on the page proves no sheet covers it, even when focus never came back.
|
|
244
|
+
addEventListener('pointerdown', () => {
|
|
245
|
+
sawBlur = false;
|
|
246
|
+
if (covered && !keyboardUp)
|
|
247
|
+
uncover();
|
|
248
|
+
});
|
|
249
|
+
document.addEventListener('visibilitychange', () => {
|
|
250
|
+
if (document.visibilityState === 'hidden') {
|
|
251
|
+
// Leaving Safari (by Add, or by anything else) says nothing about the install. Whatever
|
|
252
|
+
// was pending is dropped, and the page starts again from the first step.
|
|
253
|
+
clearTimeout(settle);
|
|
254
|
+
if (covered && performance.now() - coveredAt < 500)
|
|
255
|
+
sawBlur = false;
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
setTimeout(() => {
|
|
259
|
+
if (keyboardShowing())
|
|
260
|
+
return;
|
|
261
|
+
keyboardUp = false;
|
|
262
|
+
covered = false;
|
|
263
|
+
sawBlur = false;
|
|
264
|
+
uncover();
|
|
265
|
+
}, 600);
|
|
266
|
+
});
|
|
267
|
+
const start = () => {
|
|
268
|
+
const forced = query.get('state');
|
|
269
|
+
setState(forced ?? 'steps');
|
|
270
|
+
setStep(Number(query.get('step') ?? 1));
|
|
271
|
+
root.dataset.ready = 'true';
|
|
272
|
+
fit();
|
|
273
|
+
};
|
|
274
|
+
if (!guide.hidden)
|
|
275
|
+
start();
|
|
276
|
+
else {
|
|
277
|
+
const observer = new MutationObserver(() => {
|
|
278
|
+
if (guide.hidden)
|
|
279
|
+
return;
|
|
280
|
+
observer.disconnect();
|
|
281
|
+
start();
|
|
282
|
+
});
|
|
283
|
+
observer.observe(guide, { attributes: true, attributeFilter: ['hidden'] });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { InstallBrowser, InstallDevice } from './installContext.js';
|
|
2
|
+
import type { SafariBar } from './installTipPath.js';
|
|
3
|
+
import type { GLYPHS, INSTALL_STRINGS } from './installStrings.js';
|
|
4
|
+
/** Pure naming policy. App admission deliberately requires additional WebKit signals. */
|
|
5
|
+
export declare function classifyInstallSignals(userAgent: string, platform: string, maxTouchPoints: number): {
|
|
6
|
+
device: InstallDevice;
|
|
7
|
+
browser: InstallBrowser;
|
|
8
|
+
safariVersion: number | null;
|
|
9
|
+
};
|
|
10
|
+
/** Geometry stays pure; callers supply the measured dynamic viewport collapse. */
|
|
11
|
+
export declare function safariBarGeometry(version: number | null, device: InstallDevice, width: number, height: number, collapse: number): SafariBar;
|
|
12
|
+
export declare function safariToolbarCollapse(version: number | null, device: InstallDevice, width: number, height: number): number;
|
|
13
|
+
export interface InstallStep {
|
|
14
|
+
readonly symbol: keyof typeof GLYPHS;
|
|
15
|
+
readonly action: string;
|
|
16
|
+
readonly where: string;
|
|
17
|
+
}
|
|
18
|
+
/** Static HTML and React render this same step model. */
|
|
19
|
+
export declare function installSteps(browser: InstallBrowser, bar: SafariBar, text: typeof INSTALL_STRINGS): readonly InstallStep[];
|
|
20
|
+
export declare const installPolicy: {
|
|
21
|
+
classifyInstallSignals: typeof classifyInstallSignals;
|
|
22
|
+
safariBarGeometry: typeof safariBarGeometry;
|
|
23
|
+
safariToolbarCollapse: typeof safariToolbarCollapse;
|
|
24
|
+
tipPath: typeof tipPath;
|
|
25
|
+
};
|
|
26
|
+
/** Only browser-safe functions are embedded; no React or app startup dependency. */
|
|
27
|
+
export declare function serializeInstallPolicy(): string;
|
|
28
|
+
export declare function tipPath(w: number, h: number, bar: Exclude<SafariBar, 'unknown'>): string;
|