@satinhq/kit 0.0.0-stage → 0.1.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +29 -0
- package/dist/glass/GlassPresentation.js +1041 -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 +176 -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 +38 -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 +32 -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 +833 -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 +116 -3
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { installSteps, serializeInstallPolicy } from './installPolicy.js';
|
|
2
|
+
import { deviceTokens } from './installExperienceDevice.js';
|
|
3
|
+
import { CSS_D, homeScene, homeStep, TIP_GLASS } from './installExperienceHome.js';
|
|
4
|
+
import { installExperienceRuntime, } from './installExperienceRuntime.js';
|
|
5
|
+
import { installQrMatrix } from './installQr.js';
|
|
6
|
+
import { minifySync } from 'vite';
|
|
7
|
+
import { GLYPHS, INSTALL_STRINGS, springEasing } from './installStrings.js';
|
|
8
|
+
export { GLYPHS, INSTALL_STRINGS, springEasing };
|
|
9
|
+
/**
|
|
10
|
+
* The install page as an experience: one screen, the app as the hero, and instructions that
|
|
11
|
+
* point at Safari's real control instead of showing a picture of it.
|
|
12
|
+
*
|
|
13
|
+
* The approved Mist Home Screen design is the default for install and gate pages.
|
|
14
|
+
*/
|
|
15
|
+
const SYSTEM_BLUE = { light: '#007aff', dark: '#0a84ff' };
|
|
16
|
+
const escapeHtml = (text) => text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('"', '"');
|
|
17
|
+
/** Black or white, whichever reads better on the given six-digit hex colour. */
|
|
18
|
+
function labelOn(hex) {
|
|
19
|
+
const channel = (offset) => {
|
|
20
|
+
const value = Number.parseInt(hex.slice(offset, offset + 2), 16) / 255;
|
|
21
|
+
return value <= 0.03928 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4;
|
|
22
|
+
};
|
|
23
|
+
const luminance = 0.2126 * channel(1) + 0.7152 * channel(3) + 0.0722 * channel(5);
|
|
24
|
+
return luminance > 0.36 ? '#000' : '#fff';
|
|
25
|
+
}
|
|
26
|
+
/** Mixes two six-digit hex colours; `amount` is how much of the second one. */
|
|
27
|
+
function mixHex(from, to, amount) {
|
|
28
|
+
const channel = (offset) => {
|
|
29
|
+
const start = Number.parseInt(from.slice(offset, offset + 2), 16);
|
|
30
|
+
const end = Number.parseInt(to.slice(offset, offset + 2), 16);
|
|
31
|
+
return Math.round(start + (end - start) * amount)
|
|
32
|
+
.toString(16)
|
|
33
|
+
.padStart(2, '0');
|
|
34
|
+
};
|
|
35
|
+
return `#${channel(1)}${channel(3)}${channel(5)}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The raised surface for grouped content on a given background, as the system pairs them:
|
|
39
|
+
* white on a light grouped background, light grey on white, and a lifted grey in the dark.
|
|
40
|
+
*/
|
|
41
|
+
function cardOn(background) {
|
|
42
|
+
if (labelOn(background) === '#fff')
|
|
43
|
+
return mixHex(background, '#ffffff', 0.11);
|
|
44
|
+
const nearWhite = mixHex(background, '#000000', 0.05) === mixHex('#ffffff', '#000000', 0.05);
|
|
45
|
+
return nearWhite ? '#f2f2f7' : mixHex(background, '#ffffff', 0.86);
|
|
46
|
+
}
|
|
47
|
+
/** A glyph from the inline symbol sheet. */
|
|
48
|
+
const glyph = (name) => `<svg class="ix-g" aria-hidden="true"><use href="#ix-${name}"/></svg>`;
|
|
49
|
+
/** Fills `{app}` and the glyph placeholders of one string. Glyphs get a spoken name. */
|
|
50
|
+
function phrase(text, app) {
|
|
51
|
+
const spoken = (name) => (name ? `<span class="ix-sr">${name}</span>` : '');
|
|
52
|
+
return escapeHtml(text)
|
|
53
|
+
.replaceAll('{app}', `<bdi>${escapeHtml(app)}</bdi>`)
|
|
54
|
+
.replace('{menu}', spoken(INSTALL_STRINGS.menuName) + glyph('menu'))
|
|
55
|
+
.replace('{share}', spoken(INSTALL_STRINGS.shareName) + glyph('share'))
|
|
56
|
+
.replace('{home}', spoken(INSTALL_STRINGS.homeName) + glyph('home'))
|
|
57
|
+
.replaceAll('{device}', `<span data-device-name>${INSTALL_STRINGS.deviceAny}</span>`);
|
|
58
|
+
}
|
|
59
|
+
/** Joins markup fragments; lets long templates be written one element per line. */
|
|
60
|
+
const join = (...parts) => parts.join('');
|
|
61
|
+
/** The symbol sheet for one page: only the glyphs its markup uses. */
|
|
62
|
+
function sprite(markup) {
|
|
63
|
+
const symbols = Object.entries(GLYPHS)
|
|
64
|
+
.filter(([name]) => markup.includes(`#ix-${name}"`))
|
|
65
|
+
.map(([name, drawing]) => `<symbol id="ix-${name}" viewBox="0 0 24 24">${drawing}</symbol>`);
|
|
66
|
+
return join('<svg class="ix-sprite" width="0" height="0" aria-hidden="true"><defs>', ...symbols, '</defs></svg>');
|
|
67
|
+
}
|
|
68
|
+
/** Foundation for the install experience: tokens, type scale, states, panels, failure styling. */
|
|
69
|
+
function baseCss(colors) {
|
|
70
|
+
const darkPage = labelOn(colors.darkBackground) === '#fff';
|
|
71
|
+
return `
|
|
72
|
+
:root {
|
|
73
|
+
color-scheme: light dark;
|
|
74
|
+
--bg: ${colors.background};
|
|
75
|
+
--card: ${cardOn(colors.background)};
|
|
76
|
+
${deviceTokens(labelOn(colors.background) === '#fff')}
|
|
77
|
+
--label: ${labelOn(colors.background)};
|
|
78
|
+
--tint: ${colors.tint};
|
|
79
|
+
--on-tint: ${labelOn(colors.tint)};
|
|
80
|
+
--spring: ${springEasing()};
|
|
81
|
+
}
|
|
82
|
+
@media (prefers-color-scheme: dark) {
|
|
83
|
+
:root {
|
|
84
|
+
--bg: ${colors.darkBackground};
|
|
85
|
+
--card: ${cardOn(colors.darkBackground)};
|
|
86
|
+
${deviceTokens(darkPage)}
|
|
87
|
+
--label: ${labelOn(colors.darkBackground)};
|
|
88
|
+
${colors.darkTint === colors.tint ? '' : `--tint: ${colors.darkTint}; --on-tint: ${labelOn(colors.darkTint)};`}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
:root {
|
|
92
|
+
--second: color-mix(in srgb, var(--label) 60%, transparent);
|
|
93
|
+
--third: color-mix(in srgb, var(--label) 30%, transparent);
|
|
94
|
+
--fill: color-mix(in srgb, var(--label) 6%, transparent);
|
|
95
|
+
--hair: color-mix(in srgb, var(--label) 14%, transparent);
|
|
96
|
+
--tint-soft: color-mix(in srgb, var(--tint) 15%, transparent);
|
|
97
|
+
}
|
|
98
|
+
html {
|
|
99
|
+
height: 100%;
|
|
100
|
+
background: var(--bg);
|
|
101
|
+
color: var(--label);
|
|
102
|
+
font: 17px/1.294 system-ui, -apple-system, sans-serif;
|
|
103
|
+
-webkit-text-size-adjust: 100%;
|
|
104
|
+
-webkit-tap-highlight-color: transparent;
|
|
105
|
+
}
|
|
106
|
+
@supports (-webkit-touch-callout: none) {
|
|
107
|
+
html { font: -apple-system-body; font-family: system-ui, -apple-system, sans-serif; }
|
|
108
|
+
}
|
|
109
|
+
body { height: 100%; min-height: 100lvh; margin: 0; overflow: hidden; }
|
|
110
|
+
h1, h2, p, ol { margin: 0; padding: 0; }
|
|
111
|
+
ol { list-style: none; }
|
|
112
|
+
.ix {
|
|
113
|
+
box-sizing: border-box;
|
|
114
|
+
height: 100vh;
|
|
115
|
+
height: 100svh;
|
|
116
|
+
overflow-y: auto;
|
|
117
|
+
padding: 0 24px 96px;
|
|
118
|
+
padding-inline: max(24px, env(safe-area-inset-left)) max(24px, env(safe-area-inset-right));
|
|
119
|
+
}
|
|
120
|
+
.ix-sprite { position: absolute; }
|
|
121
|
+
/*
|
|
122
|
+
* No fixed footer (round six): Safari 26 and later extend a fixed element at the bottom edge
|
|
123
|
+
* into the area under its floating toolbar as a flat colour, which cut the tip's shadow off in
|
|
124
|
+
* a hard line. The page's own background already reaches the screen's bottom.
|
|
125
|
+
*/
|
|
126
|
+
.ix-sr {
|
|
127
|
+
position: absolute;
|
|
128
|
+
width: 1px;
|
|
129
|
+
height: 1px;
|
|
130
|
+
overflow: hidden;
|
|
131
|
+
clip-path: inset(50%);
|
|
132
|
+
white-space: nowrap;
|
|
133
|
+
}
|
|
134
|
+
.ix-g {
|
|
135
|
+
width: 1.3em;
|
|
136
|
+
height: 1.3em;
|
|
137
|
+
vertical-align: -0.3em;
|
|
138
|
+
fill: none;
|
|
139
|
+
stroke: currentColor;
|
|
140
|
+
stroke-width: 1.9;
|
|
141
|
+
stroke-linecap: round;
|
|
142
|
+
stroke-linejoin: round;
|
|
143
|
+
}
|
|
144
|
+
h1 { font-size: min(1.294rem, 34px); line-height: 1.27; font-weight: 700; letter-spacing: -0.01em; }
|
|
145
|
+
.ix-about { color: var(--second); font-size: 0.882rem; line-height: 1.33; }
|
|
146
|
+
h2 { font-size: min(1.294rem, 34px); line-height: 1.27; font-weight: 700; letter-spacing: -0.01em; text-wrap: balance; }
|
|
147
|
+
.ix-foot { color: var(--second); font-size: 0.765rem; font-weight: 400; line-height: 1.38; }
|
|
148
|
+
.ix-foot { margin-top: 20px; }
|
|
149
|
+
.ix-hint { display: none; margin-top: 16px; font-size: 0.882rem; font-weight: 600; }
|
|
150
|
+
html[data-state="back"] .ix-hint { display: block; }
|
|
151
|
+
|
|
152
|
+
/* One panel at a time. Without the runtime the steps stay readable. */
|
|
153
|
+
[data-panel], [data-for] { display: none; }
|
|
154
|
+
html:not([data-env]) [data-panel="steps"],
|
|
155
|
+
html[data-env="safari"] [data-panel="steps"],
|
|
156
|
+
html[data-env="inapp"] [data-panel="inapp"],
|
|
157
|
+
html[data-env="browser"] [data-panel="browser"],
|
|
158
|
+
html[data-env="gate"] [data-panel="gate"] { display: block; }
|
|
159
|
+
html:not([data-bar]) [data-for="any"],
|
|
160
|
+
html[data-bar="unknown"] [data-for="any"],
|
|
161
|
+
html[data-bar="compact"] [data-for="compact"],
|
|
162
|
+
html[data-bar="toolbar"] [data-for="toolbar"],
|
|
163
|
+
html[data-bar="top"] [data-for="toolbar"] { display: revert; }
|
|
164
|
+
html:not([data-env="safari"]) .ix-pointer,
|
|
165
|
+
html:not([data-bar]) .ix-pointer,
|
|
166
|
+
html[data-bar="unknown"] .ix-pointer,
|
|
167
|
+
html:not([data-ready]) .ix-pointer { display: none; }
|
|
168
|
+
|
|
169
|
+
/* The deployment check runs silently; this element is only shown when it fails. */
|
|
170
|
+
#satin-install-check { margin-top: 28px; color: var(--second); font-size: 0.882rem; }
|
|
171
|
+
|
|
172
|
+
/* Buttons. */
|
|
173
|
+
.ix-button {
|
|
174
|
+
display: flex;
|
|
175
|
+
align-items: center;
|
|
176
|
+
justify-content: center;
|
|
177
|
+
gap: 0.4em;
|
|
178
|
+
box-sizing: border-box;
|
|
179
|
+
width: 100%;
|
|
180
|
+
min-height: 50px;
|
|
181
|
+
margin-top: 12px;
|
|
182
|
+
padding: 0 20px;
|
|
183
|
+
border: 0;
|
|
184
|
+
border-radius: 25px;
|
|
185
|
+
background: var(--tint);
|
|
186
|
+
color: var(--on-tint);
|
|
187
|
+
font: inherit;
|
|
188
|
+
font-weight: 600;
|
|
189
|
+
text-decoration: none;
|
|
190
|
+
}
|
|
191
|
+
.ix-button.ix-quiet { background: var(--fill); color: var(--tint); }
|
|
192
|
+
.ix-button[data-copied]::after { content: " ✓"; }
|
|
193
|
+
|
|
194
|
+
[data-panel] > p:not([class]) { margin-top: 8px; color: var(--second); }
|
|
195
|
+
[data-panel] > .ix-button:first-of-type { margin-top: 24px; }
|
|
196
|
+
|
|
197
|
+
/* Not an iPhone or iPad: hand the page over. Parts that need the script wait for it. */
|
|
198
|
+
html:not([data-ready]) [data-js], html[data-ready] [data-nojs], [data-copy-failed][hidden] { display: none; }
|
|
199
|
+
.ix-copy-failed { margin-top: 10px; color: var(--second); font-size: 0.882rem; }
|
|
200
|
+
.ix-copy-failed .ix-address { display: block; margin-top: 4px; color: var(--label); }
|
|
201
|
+
.ix-qr {
|
|
202
|
+
box-sizing: border-box;
|
|
203
|
+
width: 176px;
|
|
204
|
+
margin: 22px 0 16px;
|
|
205
|
+
padding: 10px;
|
|
206
|
+
border-radius: 22px;
|
|
207
|
+
background: #fff;
|
|
208
|
+
color: #000;
|
|
209
|
+
box-shadow: 0 0 0 1px var(--hair);
|
|
210
|
+
}
|
|
211
|
+
.ix-qr svg { display: block; }
|
|
212
|
+
.ix-address {
|
|
213
|
+
font: 0.765rem/1.4 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
214
|
+
overflow-wrap: anywhere;
|
|
215
|
+
user-select: all;
|
|
216
|
+
-webkit-user-select: all;
|
|
217
|
+
}
|
|
218
|
+
html[data-env="gate"] .ix { max-width: 440px; margin: 0 auto; }
|
|
219
|
+
|
|
220
|
+
/*
|
|
221
|
+
* The deployment check's failure report keeps its words and gets the page's voice. The
|
|
222
|
+
* check injects its own styles later, so each rule here starts at the body element to outrank them.
|
|
223
|
+
*/
|
|
224
|
+
body:has(#satin-install-check[data-error]) :is(.ix-hero, .ix-pointer) { visibility: hidden; }
|
|
225
|
+
/* Nested, so the long selector is written once. */
|
|
226
|
+
body #satin-install-check {
|
|
227
|
+
&[data-error] {
|
|
228
|
+
padding: 32px 24px;
|
|
229
|
+
background: var(--bg);
|
|
230
|
+
color: var(--label);
|
|
231
|
+
font: inherit;
|
|
232
|
+
}
|
|
233
|
+
& .install-error-content::before {
|
|
234
|
+
content: "!";
|
|
235
|
+
display: grid;
|
|
236
|
+
place-items: center;
|
|
237
|
+
width: 44px;
|
|
238
|
+
height: 44px;
|
|
239
|
+
margin: 0 auto 16px;
|
|
240
|
+
border-radius: 50%;
|
|
241
|
+
background: #ff3b30;
|
|
242
|
+
color: #fff;
|
|
243
|
+
font-size: 26px;
|
|
244
|
+
font-weight: 700;
|
|
245
|
+
line-height: 1;
|
|
246
|
+
}
|
|
247
|
+
& .install-error-content:has(button)::before {
|
|
248
|
+
content: "?";
|
|
249
|
+
background: var(--third);
|
|
250
|
+
}
|
|
251
|
+
& h2 { font-size: 1.294rem; margin: 0 0 8px; }
|
|
252
|
+
& p { margin: 6px 0; color: var(--second); }
|
|
253
|
+
& p:nth-of-type(2) { color: var(--label); }
|
|
254
|
+
& button {
|
|
255
|
+
min-height: 50px;
|
|
256
|
+
margin-top: 20px;
|
|
257
|
+
padding: 0 36px;
|
|
258
|
+
border-radius: 25px;
|
|
259
|
+
background: var(--tint);
|
|
260
|
+
color: var(--on-tint);
|
|
261
|
+
font-weight: 600;
|
|
262
|
+
}
|
|
263
|
+
& ul {
|
|
264
|
+
margin-top: 24px;
|
|
265
|
+
padding: 4px 16px;
|
|
266
|
+
border-radius: 20px;
|
|
267
|
+
background: var(--fill);
|
|
268
|
+
text-align: left;
|
|
269
|
+
}
|
|
270
|
+
& li {
|
|
271
|
+
margin: 0;
|
|
272
|
+
padding: 10px 0;
|
|
273
|
+
color: var(--label);
|
|
274
|
+
font: 0.706rem/1.45 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
275
|
+
}
|
|
276
|
+
& li + li { border-top: 1px solid var(--hair); }
|
|
277
|
+
& .install-error-detail { color: var(--second); }
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
@media (prefers-reduced-motion: reduce) {
|
|
281
|
+
*, *::before, *::after { animation: none !important; transition: none !important; }
|
|
282
|
+
}
|
|
283
|
+
`;
|
|
284
|
+
}
|
|
285
|
+
/** `rgb(255 255 255 / 0.36)` as `#ffffff5c`: the same colour in fewer bytes. */
|
|
286
|
+
const hexColor = (_match, red, green, blue, alpha) => '#' +
|
|
287
|
+
[Number(red), Number(green), Number(blue), Math.round(Number(alpha) * 255)]
|
|
288
|
+
.map(channel => channel.toString(16).padStart(2, '0'))
|
|
289
|
+
.join('');
|
|
290
|
+
const minifyCss = (css) => css
|
|
291
|
+
.replace(/rgb\((\d+) (\d+) (\d+) \/ ([\d.]+)\)/g, hexColor)
|
|
292
|
+
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
293
|
+
.replace(/\s+/g, ' ')
|
|
294
|
+
.replace(/\s*([{};,])\s*/g, '$1')
|
|
295
|
+
.replace(/:\s+/g, ':')
|
|
296
|
+
.replace(/(^|[^\d.])0\.(\d)/g, '$1.$2')
|
|
297
|
+
.replaceAll(';}', '}')
|
|
298
|
+
.trim();
|
|
299
|
+
/**
|
|
300
|
+
* Minifies every inline script of the finished page with Vite's own minifier. The scripts
|
|
301
|
+
* are self-contained expressions, so renaming their locals cannot change what they do; the
|
|
302
|
+
* JSON data block has a `type` attribute and is left alone.
|
|
303
|
+
*/
|
|
304
|
+
/** Minifies every inline classic script (bare, or with only `data-` attributes). */
|
|
305
|
+
export function minifyInlineScripts(html) {
|
|
306
|
+
const inline = /<script((?:\s+data-[\w-]+(?:="[^"]*")?)*)>([\s\S]*?)<\/script>/g;
|
|
307
|
+
return html.replace(inline, (_tag, attributes, source) => {
|
|
308
|
+
const result = minifySync('install-page.js', source);
|
|
309
|
+
if (result.errors.length) {
|
|
310
|
+
throw new Error(`Satin could not minify an install page script: ${result.errors[0].message}`);
|
|
311
|
+
}
|
|
312
|
+
return `<script${attributes}>${result.code.trim()}</script>`;
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
/** One fragment per place Safari keeps Share; the runtime shows the one that applies. */
|
|
316
|
+
function perBar(any, compact, toolbar) {
|
|
317
|
+
return join(`<span data-for="any">${any}</span>`, `<span data-for="compact">${compact}</span>`, `<span data-for="toolbar">${toolbar}</span>`);
|
|
318
|
+
}
|
|
319
|
+
function heroMarkup(name, about, icon, kind) {
|
|
320
|
+
const title = kind === 'gate'
|
|
321
|
+
? 'This app is designed for iPhone and iPad'
|
|
322
|
+
: phrase(INSTALL_STRINGS.addTitle, name);
|
|
323
|
+
return `<header class="ix-hero">${homeScene(escapeHtml(icon))}<h1 class="ix-title">${title}</h1><p class="ix-about" dir="auto">${about}</p></header>`;
|
|
324
|
+
}
|
|
325
|
+
function stepsMarkup(app, browser = 'safari') {
|
|
326
|
+
const rows = (bar) => installSteps(browser, bar, INSTALL_STRINGS);
|
|
327
|
+
const content = (index, part) => {
|
|
328
|
+
const render = (bar) => {
|
|
329
|
+
const value = rows(bar)[index][part];
|
|
330
|
+
return part === 'symbol' ? glyph(value) : phrase(value, app);
|
|
331
|
+
};
|
|
332
|
+
return browser === 'safari' && index === 0 && part !== 'where'
|
|
333
|
+
? perBar(render('unknown'), render('compact'), render('toolbar'))
|
|
334
|
+
: render('unknown');
|
|
335
|
+
};
|
|
336
|
+
return rows('unknown')
|
|
337
|
+
.map((_, index) => homeStep(content(index, 'symbol'), content(index, 'action'), index === 0 && browser === 'safari' ? '' : content(index, 'where')))
|
|
338
|
+
.join('');
|
|
339
|
+
}
|
|
340
|
+
export function installExperiencePage(input) {
|
|
341
|
+
const { app, kind } = input;
|
|
342
|
+
const text = (key) => phrase(INSTALL_STRINGS[key], app.name);
|
|
343
|
+
const dark = app.appearance.darkLaunch === 'match-light'
|
|
344
|
+
? app.appearance.background
|
|
345
|
+
: app.appearance.darkLaunch.background;
|
|
346
|
+
const icons = app.icons.filter(icon => icon.type === 'image/png');
|
|
347
|
+
const largest = (icons.length ? icons : app.icons).reduce((best, icon) => Number.parseInt(icon.sizes, 10) > Number.parseInt(best.sizes, 10) ? icon : best);
|
|
348
|
+
const css = minifyCss(baseCss({
|
|
349
|
+
background: app.appearance.background,
|
|
350
|
+
darkBackground: dark,
|
|
351
|
+
tint: app.appearance.tint ?? SYSTEM_BLUE.light,
|
|
352
|
+
darkTint: app.appearance.tint ?? SYSTEM_BLUE.dark,
|
|
353
|
+
}) + CSS_D);
|
|
354
|
+
// The cue at Safari's real control. Concept a turns its first step into the cue instead.
|
|
355
|
+
const tip = join(`<span data-for="compact">${glyph('menu')}${text('tipMenu')}</span>`, `<span data-for="toolbar">${glyph('share')}${text('tipShare')}</span>`, TIP_GLASS);
|
|
356
|
+
const pointer = `<div class="ix-pointer" aria-hidden="true">${tip}</div>`;
|
|
357
|
+
const browserSteps = stepsMarkup(app.name, 'other');
|
|
358
|
+
const openSafari = (quiet) => `<a class="ix-button${quiet ? ' ix-quiet' : ''}" data-open-safari href="#">${text('openSafari')}</a>`;
|
|
359
|
+
// Copying needs the script and a clipboard that allows it. When it fails, the page says so
|
|
360
|
+
// and shows the address to select (the gate shows it already).
|
|
361
|
+
const copyLink = (withAddress) => join(`<button type="button" class="ix-button ix-quiet" data-js data-copy="${text('copied')}">`, `${text('copyLink')}</button>`, `<p class="ix-copy-failed" data-copy-failed hidden>${text('copyFailed')}`, withAddress ? '<span class="ix-address" data-address></span>' : '', '</p>');
|
|
362
|
+
// One panel per situation; the stylesheet shows the one the runtime selects. The lists
|
|
363
|
+
// carry an explicit role: Safari drops list semantics from lists styled without markers.
|
|
364
|
+
// Nothing the page observes ever replaces the steps: an install cannot be told apart from
|
|
365
|
+
// a cancelled dialog followed by leaving Safari, so "already added" is the person's call.
|
|
366
|
+
const stepsPanel = join('<div data-panel="steps">', `<ol class="ix-steps" role="list">${stepsMarkup(app.name)}</ol>`, `<p class="ix-hint" data-say="back">${text('backHint')}</p>`, `<p class="ix-foot">${text('alreadyAdded')}</p></div>`);
|
|
367
|
+
const inAppPanel = join(`<div data-panel="inapp"><h2>${text('inAppTitle')}</h2><p>${text('inAppBody')}</p>`, openSafari(false), copyLink(true), `<p class="ix-foot">${text('inAppFoot')}</p></div>`);
|
|
368
|
+
const browserPanel = join('<div data-panel="browser">', `<ol class="ix-steps" role="list">${browserSteps}</ol>`, openSafari(true), '</div>');
|
|
369
|
+
// Without scripts there is no code and no copying: the gate then asks for the address bar.
|
|
370
|
+
const gatePanel = join(`<div data-panel="gate"><h2>${text('gateTitle')}</h2>`, '<div class="ix-qr" data-qr data-js></div>', `<p data-js>${text('gateBody')}</p><p class="ix-address" data-address data-js></p>`, `<p data-nojs>${text('gateNoScript')}</p>`, copyLink(false), '</div>');
|
|
371
|
+
const liveRegion = '<p class="ix-sr" role="status" aria-live="polite" data-live></p>';
|
|
372
|
+
const panels = join(stepsPanel, inAppPanel, browserPanel, gatePanel, liveRegion);
|
|
373
|
+
const check = kind === 'install' ? '<section id="satin-install-check" hidden></section>' : '';
|
|
374
|
+
const config = {
|
|
375
|
+
installRoute: input.installRoute,
|
|
376
|
+
kind,
|
|
377
|
+
preview: input.preview === true,
|
|
378
|
+
devices: [INSTALL_STRINGS.devicePhone, INSTALL_STRINGS.devicePad],
|
|
379
|
+
};
|
|
380
|
+
const runtime = join(`<script>(${installExperienceRuntime.toString()})(`, `${JSON.stringify(config).replaceAll('<', '\\u003c')},`, `${installQrMatrix.toString()},${serializeInstallPolicy()})</script>`);
|
|
381
|
+
const gateAttribute = kind === 'gate' ? ' data-env="gate"' : '';
|
|
382
|
+
const rootAttributes = `lang="en" data-install-design="home-screen"${gateAttribute}`;
|
|
383
|
+
// The guide is the page's normal state from the first frame. The deployment check runs
|
|
384
|
+
// behind it and replaces it only on deployment failure.
|
|
385
|
+
const guideAttributes = 'id="satin-install-guide" class="ix-panels"';
|
|
386
|
+
const main = join(heroMarkup(app.name, escapeHtml(app.description), largest.src, kind), check, `<section ${guideAttributes}>${panels}</section>`, pointer);
|
|
387
|
+
const page = join(`<!doctype html><html ${rootAttributes}>`, `<head>${input.head}<style>${css}</style></head>`, `<body data-satin-install-page>${sprite(main)}<main class="ix">${main}</main>`, `${input.scripts}${runtime}</body></html>`);
|
|
388
|
+
return minifyInlineScripts(page);
|
|
389
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Our own drawings of the lower part of an iPhone and an iPad showing a Home Screen, for the
|
|
3
|
+
* install page.
|
|
4
|
+
*
|
|
5
|
+
* Built only from publicly known proportions (iPhone 17 Pro: a 402 x 874 pt screen, about
|
|
6
|
+
* 16 pt of frame and border around it; iPad Pro 11-inch: an 834 x 1210 pt screen, about 44 pt
|
|
7
|
+
* of border). No Apple artwork, product images or Design Resources are used or traced; see
|
|
8
|
+
* the implementation contract Units are points of the drawn screen.
|
|
9
|
+
*
|
|
10
|
+
* Colours come from CSS custom properties, so one drawing serves light and dark:
|
|
11
|
+
* `--metal-a`/`--metal-b` (the frame), `--w1`..`--w3` (the mist wallpaper),
|
|
12
|
+
* `--g1`..`--g4` and `--label-bar` (placeholder apps), `--dock-glass`, `--dock-rim` and `--ink` (page dots, Home
|
|
13
|
+
* indicator).
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* The lower part of an iPhone in portrait, drawn large (owner, round five): the frame and its
|
|
17
|
+
* rounded bottom corners, one row of apps with the app in the next free place, page dots, the
|
|
18
|
+
* dock and the Home indicator. The top of the device is cut off; CSS fades the cut edge.
|
|
19
|
+
*/
|
|
20
|
+
export declare function phoneDrawing(icon: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* The lower part of an iPad in portrait (iPad Pro 11-inch: an 834 x 1210 pt screen, about
|
|
23
|
+
* 44 pt of border), drawn the same way: frame and rounded bottom corners, one row of apps with
|
|
24
|
+
* the app in the next free place, page dots, the floating dock and the Home indicator.
|
|
25
|
+
* Portrait, because the lower part of a landscape iPad is a thin strip with tiny apps.
|
|
26
|
+
*/
|
|
27
|
+
export declare function padDrawing(icon: string): string;
|
|
28
|
+
/** The drawing's tokens and the tip's glass tokens in one appearance, as CSS declarations. */
|
|
29
|
+
export declare function deviceTokens(dark: boolean): string;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Our own drawings of the lower part of an iPhone and an iPad showing a Home Screen, for the
|
|
3
|
+
* install page.
|
|
4
|
+
*
|
|
5
|
+
* Built only from publicly known proportions (iPhone 17 Pro: a 402 x 874 pt screen, about
|
|
6
|
+
* 16 pt of frame and border around it; iPad Pro 11-inch: an 834 x 1210 pt screen, about 44 pt
|
|
7
|
+
* of border). No Apple artwork, product images or Design Resources are used or traced; see
|
|
8
|
+
* the implementation contract Units are points of the drawn screen.
|
|
9
|
+
*
|
|
10
|
+
* Colours come from CSS custom properties, so one drawing serves light and dark:
|
|
11
|
+
* `--metal-a`/`--metal-b` (the frame), `--w1`..`--w3` (the mist wallpaper),
|
|
12
|
+
* `--g1`..`--g4` and `--label-bar` (placeholder apps), `--dock-glass`, `--dock-rim` and `--ink` (page dots, Home
|
|
13
|
+
* indicator).
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* The app's icon in its place, slightly lifted with a soft shadow, as when placing it on the
|
|
17
|
+
* Home Screen (round ten: no dashed outline; iOS never draws one).
|
|
18
|
+
*/
|
|
19
|
+
function appSlot(icon, x, y, size, clip) {
|
|
20
|
+
return `<image class="ix-app" href="${icon}" x="${x}" y="${y}" width="${size}" height="${size}" clip-path="url(#${clip})"/>`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The Home Screen icon shape for the app's own icon, in the icon's bounding box, with the same
|
|
24
|
+
* corner ratio as the placeholder apps. Each device drawing defines its own copy because a
|
|
25
|
+
* hidden drawing's definitions don't apply in WebKit.
|
|
26
|
+
*/
|
|
27
|
+
function iconShape(id) {
|
|
28
|
+
return `<clipPath id="${id}" clipPathUnits="objectBoundingBox"><rect width="1" height="1" rx="0.23"/></clipPath>`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Placeholder apps that read as a Home Screen without being real apps: rounded squares in a few
|
|
32
|
+
* soft tints (`--g1`..`--g4`), with a faint short label under those in the grid.
|
|
33
|
+
*/
|
|
34
|
+
function ghosts(size, y, xs, labels) {
|
|
35
|
+
return xs
|
|
36
|
+
.map((x, index) => {
|
|
37
|
+
const tone = `ix-t${(index % 4) + 1}`;
|
|
38
|
+
const icon = `<rect class="${tone}" x="${x}" y="${y}" width="${size}" height="${size}" rx="${size * 0.23}"/>`;
|
|
39
|
+
const width = size * (index % 2 ? 0.42 : 0.56);
|
|
40
|
+
const label = labels
|
|
41
|
+
? `<rect class="ix-label" x="${x + (size - width) / 2}" y="${y + size + 7}" width="${width}" height="6" rx="3"/>`
|
|
42
|
+
: '';
|
|
43
|
+
return icon + label;
|
|
44
|
+
})
|
|
45
|
+
.join('');
|
|
46
|
+
}
|
|
47
|
+
/** The mist wallpaper over the visible part of the screen: a grey gradient and a soft light. */
|
|
48
|
+
function wallpaper(id, width, height, top) {
|
|
49
|
+
return [
|
|
50
|
+
`<linearGradient id="${id}-w" x2="0" y1="${top}" y2="${height}" gradientUnits="userSpaceOnUse">`,
|
|
51
|
+
'<stop style="stop-color:var(--w1)"/><stop offset="1" style="stop-color:var(--w2)"/></linearGradient>',
|
|
52
|
+
`<radialGradient id="${id}-g"><stop style="stop-color:var(--w3)"/>`,
|
|
53
|
+
'<stop offset="1" style="stop-color:var(--w3);stop-opacity:0"/></radialGradient>',
|
|
54
|
+
`<rect width="${width}" height="${height}" fill="url(#${id}-w)"/>`,
|
|
55
|
+
`<ellipse cx="${width * 0.2}" cy="${top + 20}" rx="${width * 0.8}" ry="${(height - top) * 0.7}" fill="url(#${id}-g)"/>`,
|
|
56
|
+
].join('');
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The lower part of an iPhone in portrait, drawn large (owner, round five): the frame and its
|
|
60
|
+
* rounded bottom corners, one row of apps with the app in the next free place, page dots, the
|
|
61
|
+
* dock and the Home indicator. The top of the device is cut off; CSS fades the cut edge.
|
|
62
|
+
*/
|
|
63
|
+
export function phoneDrawing(icon) {
|
|
64
|
+
const screen = [
|
|
65
|
+
wallpaper('ix-p', 402, 874, 580),
|
|
66
|
+
ghosts(62, 636, [27.5, 122.5], true),
|
|
67
|
+
'<g class="ix-ink"><circle cx="193" cy="737" r="3.5"/><circle cx="209" cy="737" r="3.5" opacity=".4"/></g>',
|
|
68
|
+
'<rect class="ix-dock" x="13" y="755" width="376" height="96" rx="38"/>',
|
|
69
|
+
ghosts(62, 772, [27.5, 122.5, 217.5, 312.5], false),
|
|
70
|
+
'<rect class="ix-ink" x="134" y="861" width="134" height="5" rx="2.5"/>',
|
|
71
|
+
appSlot(icon, 217.5, 636, 62, 'ix-icon-p'),
|
|
72
|
+
].join('');
|
|
73
|
+
return [
|
|
74
|
+
'<svg class="ix-device ix-phone" viewBox="-12 584 458 346" aria-hidden="true">',
|
|
75
|
+
'<linearGradient id="ix-pm" x2="1"><stop style="stop-color:var(--metal-a)"/>',
|
|
76
|
+
'<stop offset=".5" style="stop-color:var(--metal-b)"/><stop offset="1" style="stop-color:var(--metal-a)"/></linearGradient>',
|
|
77
|
+
'<rect class="ix-frame" width="434" height="906" rx="78" fill="url(#ix-pm)"/>',
|
|
78
|
+
'<rect class="ix-border" x="4" y="4" width="426" height="898" rx="74"/>',
|
|
79
|
+
'<clipPath id="ix-ps"><rect width="402" height="874" rx="62"/></clipPath>',
|
|
80
|
+
iconShape('ix-icon-p'),
|
|
81
|
+
`<g transform="translate(16 16)" clip-path="url(#ix-ps)">${screen}</g>`,
|
|
82
|
+
'</svg>',
|
|
83
|
+
].join('');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The lower part of an iPad in portrait (iPad Pro 11-inch: an 834 x 1210 pt screen, about
|
|
87
|
+
* 44 pt of border), drawn the same way: frame and rounded bottom corners, one row of apps with
|
|
88
|
+
* the app in the next free place, page dots, the floating dock and the Home indicator.
|
|
89
|
+
* Portrait, because the lower part of a landscape iPad is a thin strip with tiny apps.
|
|
90
|
+
*/
|
|
91
|
+
export function padDrawing(icon) {
|
|
92
|
+
const screen = [
|
|
93
|
+
wallpaper('ix-t', 834, 1210, 860),
|
|
94
|
+
ghosts(74, 930, [100, 240, 380], true),
|
|
95
|
+
'<g class="ix-ink"><circle cx="409" cy="1042" r="4"/><circle cx="425" cy="1042" r="4" opacity=".4"/></g>',
|
|
96
|
+
'<rect class="ix-dock" x="40" y="1060" width="754" height="110" rx="36"/>',
|
|
97
|
+
ghosts(74, 1078, [92, 188, 284, 380, 476, 572, 668], false),
|
|
98
|
+
'<rect class="ix-ink" x="317" y="1196" width="200" height="5" rx="2.5"/>',
|
|
99
|
+
appSlot(icon, 520, 930, 74, 'ix-icon-t'),
|
|
100
|
+
].join('');
|
|
101
|
+
return [
|
|
102
|
+
'<svg class="ix-device ix-tablet" viewBox="-14 880 950 442" aria-hidden="true">',
|
|
103
|
+
'<linearGradient id="ix-tm" x2="1"><stop style="stop-color:var(--metal-a)"/>',
|
|
104
|
+
'<stop offset=".5" style="stop-color:var(--metal-b)"/><stop offset="1" style="stop-color:var(--metal-a)"/></linearGradient>',
|
|
105
|
+
'<rect class="ix-frame" width="922" height="1298" rx="64" fill="url(#ix-tm)"/>',
|
|
106
|
+
'<rect class="ix-border" x="4" y="4" width="914" height="1290" rx="60"/>',
|
|
107
|
+
'<clipPath id="ix-ts"><rect width="834" height="1210" rx="20"/></clipPath>',
|
|
108
|
+
iconShape('ix-icon-t'),
|
|
109
|
+
`<g transform="translate(44 44)" clip-path="url(#ix-ts)">${screen}</g>`,
|
|
110
|
+
'</svg>',
|
|
111
|
+
].join('');
|
|
112
|
+
}
|
|
113
|
+
/** The mist wallpaper (owner's pick, round five), light and dark: top, bottom, soft light. */
|
|
114
|
+
const MIST = {
|
|
115
|
+
light: ['#dfe1e6', '#b3b7c1', 'rgb(255 255 255 / 0.7)'],
|
|
116
|
+
dark: ['#36373d', '#111114', '#55585f'],
|
|
117
|
+
};
|
|
118
|
+
/** The drawing's tokens and the tip's glass tokens in one appearance, as CSS declarations. */
|
|
119
|
+
export function deviceTokens(dark) {
|
|
120
|
+
const tokens = [
|
|
121
|
+
...MIST[dark ? 'dark' : 'light'].map((color, index) => `--w${index + 1}: ${color}`),
|
|
122
|
+
// Placeholder apps: soft tints, still clearly not real apps.
|
|
123
|
+
...(dark
|
|
124
|
+
? [
|
|
125
|
+
'rgb(150 170 210 / 0.22)',
|
|
126
|
+
'rgb(170 200 170 / 0.2)',
|
|
127
|
+
'rgb(220 180 150 / 0.2)',
|
|
128
|
+
'rgb(190 170 220 / 0.22)',
|
|
129
|
+
]
|
|
130
|
+
: [
|
|
131
|
+
'rgb(214 226 246 / 0.85)',
|
|
132
|
+
'rgb(222 238 222 / 0.85)',
|
|
133
|
+
'rgb(246 230 214 / 0.85)',
|
|
134
|
+
'rgb(232 222 246 / 0.85)',
|
|
135
|
+
]).map((tone, i) => `--g${i + 1}: ${tone}`),
|
|
136
|
+
`--label-bar: rgb(${dark ? '255 255 255 / 0.14' : '255 255 255 / 0.5'})`,
|
|
137
|
+
`--dock-glass: rgb(255 255 255 / ${dark ? 0.12 : 0.4})`,
|
|
138
|
+
`--dock-rim: rgb(255 255 255 / ${dark ? 0.2 : 0.75})`,
|
|
139
|
+
`--ink: ${dark ? 'rgb(255 255 255 / 0.85)' : 'rgb(0 0 0 / 0.72)'}`,
|
|
140
|
+
`--metal-a: ${dark ? '#3a3b40' : '#b9bcc3'}`,
|
|
141
|
+
`--metal-b: ${dark ? '#77797f' : '#eef0f3'}`,
|
|
142
|
+
// The tip's glass, measured from iOS 27's popover tip over these page colours (round six).
|
|
143
|
+
`--glass: color-mix(in srgb, var(--bg), #fff ${dark ? 12.5 : 67}%)`,
|
|
144
|
+
`--glass-band: ${dark ? 'transparent' : 'var(--bg)'}`,
|
|
145
|
+
// Inner light lines (round six's measured strengths): the crisp line at the top edge, a soft
|
|
146
|
+
// falloff inside it, and the bottom's strength relative to the top.
|
|
147
|
+
`--hl-line: ${dark ? 0.27 : 1}`,
|
|
148
|
+
`--hl-soft: ${dark ? 0.08 : 0.45}`,
|
|
149
|
+
`--hl-bottom: ${dark ? 0.74 : 1}`,
|
|
150
|
+
'--one: 1',
|
|
151
|
+
// The squared falloff around the corners, for the top and for the bottom's strength.
|
|
152
|
+
...[0.5625, 0.25, 0.0625].map((q, i) => `--q${i + 1}: ${q}`),
|
|
153
|
+
...[0.5625, 0.25, 0.0625].map((q, i) => `--qb${i + 1}: ${+(q * (dark ? 0.74 : 1)).toFixed(3)}`),
|
|
154
|
+
`--ht: ${dark ? 0 : 0.08}`,
|
|
155
|
+
`--hs: ${dark ? 0.85 : 0.35}`,
|
|
156
|
+
`--hb: ${dark ? 0 : 0.14}`,
|
|
157
|
+
'--zero: 0',
|
|
158
|
+
];
|
|
159
|
+
return tokens.map(token => token + ';').join(' ');
|
|
160
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The install page leads with the action, "Add {app} to Home Screen". Above it, a drawing of the
|
|
3
|
+
* device in hand (an iPhone, or an iPad on an iPad) shows a Home Screen with the app's icon
|
|
4
|
+
* hovering over the next free place among greyed-out apps; the app's description sits under
|
|
5
|
+
* the title. Then the steps in the grammar of Apple's onboarding sheets, one emphasised at a
|
|
6
|
+
* time, and a tip in the style of the system's popover tips at Safari's real control.
|
|
7
|
+
*
|
|
8
|
+
* Layouts: iPhone portrait (one column), iPhone landscape and iPad landscape (the drawing
|
|
9
|
+
* beside the text), iPad portrait (one centred column with room around it), and a narrow
|
|
10
|
+
* iPad window (the phone's column with the iPad drawing).
|
|
11
|
+
*/
|
|
12
|
+
export declare function homeScene(icon: string): string;
|
|
13
|
+
/** One row: a symbol, the bold action, and where to find it. */
|
|
14
|
+
export declare function homeStep(symbol: string, action: string, where?: string): string;
|
|
15
|
+
export declare const TIP_GLASS: string;
|
|
16
|
+
export declare const CSS_D = "\n.ix { text-align: center; padding-inline: max(20px, env(safe-area-inset-left)) max(20px, env(safe-area-inset-right)); }\n.ix-hero { padding-top: clamp(14px, 3svh, 32px); }\n\n/* The drawing. Height drives its size; the large-text levels shrink it. */\n/* The drawing: the lower part of the device, large, its cut edge fading into the page.\n * --art is its width; the large-text levels narrow it. */\n.ix-art { --art: min(100%, 360px, 48svh); display: flex; justify-content: center; }\n.ix-device {\n display: block;\n width: var(--art);\n height: auto;\n max-width: 100%;\n -webkit-mask-image: linear-gradient(transparent, #000 18%);\n mask-image: linear-gradient(transparent, #000 18%);\n}\n.ix-tablet, html[data-device=\"pad\"] .ix-phone { display: none; }\nhtml[data-device=\"pad\"] .ix-tablet { display: block; }\n.ix-frame { filter: drop-shadow(0 10px 14px rgb(0 0 0 / 0.16)); }\n.ix-frame { stroke: rgb(0 0 0 / 0.12); stroke-width: 1; }\n.ix-border { fill: #0b0b0c; }\n.ix-t1 { fill: var(--g1); }\n.ix-t2 { fill: var(--g2); }\n.ix-t3 { fill: var(--g3); }\n.ix-t4 { fill: var(--g4); }\n.ix-label { fill: var(--label-bar); }\n.ix-ink { fill: var(--ink); }\n.ix-dock { fill: var(--dock-glass); stroke: var(--dock-rim); stroke-width: 1.5; }\n.ix-app { filter: drop-shadow(0 6px 8px rgb(0 0 0 / 0.25)); }\n\n/* The action is the title; the description supports it. */\n.ix-title {\n margin-top: 18px;\n font-size: min(1.765rem, 40px);\n font-weight: 700;\n letter-spacing: 0;\n line-height: 1.17;\n text-wrap: balance;\n overflow-wrap: anywhere;\n}\n.ix-about {\n margin-top: 6px;\n color: var(--second);\n font-size: min(1rem, 28px);\n line-height: 1.294;\n text-wrap: balance;\n}\n[data-panel] { margin-top: 22px; }\n[data-panel] h2 { font-size: min(1.176rem, 28px); font-weight: 600; }\n[data-panel] h2 bdi { overflow-wrap: anywhere; }\n\n/* The steps, in the grammar of the system's own onboarding sheets. */\n.ix-steps {\n --sym: min(2.118rem, 52px);\n border-radius: 26px;\n background: var(--card);\n text-align: start;\n}\n[data-panel] h2 + .ix-steps { margin-top: 14px; }\n.ix-steps li {\n position: relative;\n display: grid;\n grid-template-columns: var(--sym) 1fr;\n column-gap: 12px;\n align-items: center;\n min-height: 60px;\n box-sizing: border-box;\n padding-block: 10px;\n padding-inline: 14px 16px;\n}\n.ix-steps li + li::before {\n content: \"\";\n position: absolute;\n top: 0;\n inset-inline: calc(var(--sym) + 26px) 0;\n height: 0.5px;\n background: var(--hair);\n}\n/*\n * Round ten: every row's symbol has the same treatment, as in iOS lists: the symbol in the\n * tint on a soft tinted rounded square. No row is styled as \"current\" and nothing joins them.\n */\n/* A one-line row is a native one-line list row: title centred, 52 pt tall. */\n.ix-steps li:not(:has(.ix-where)) { min-height: 52px; padding-block: 8px; }\n.ix-sym {\n display: grid;\n place-items: center;\n width: var(--sym);\n height: var(--sym);\n border-radius: calc(var(--sym) * 0.27);\n background: var(--tint-soft);\n color: var(--tint);\n}\n.ix-sym .ix-g { width: calc(var(--sym) * 0.61); height: calc(var(--sym) * 0.61); vertical-align: 0; }\n.ix-sym [data-for] { grid-area: 1 / 1; line-height: 0; }\n.ix-row b { display: block; font-size: 1rem; font-weight: 600; line-height: 1.294; }\n.ix-where { display: block; color: var(--second); font-size: 0.882rem; line-height: 1.33; }\n.ix-hint { margin-top: 14px; }\nhtml[data-state=\"back\"] [data-panel=\"steps\"] .ix-foot { display: none; }\n.ix-foot { margin-top: 14px; }\n\n/*\n * The tip: a small one-line callout (round eight: 42 pt tall, 15 pt semibold, corners 17 pt)\n * in round six's material, measured from iOS 27's popover tip. It grows out of Safari's\n * control the way a native popover appears. Round nine: as low as the page can draw. Safari's\n * page area ends about 16 pt above its address bar (measured: 858 pt against 873.7 pt with the\n * compact bar, 794 against 810.3 with the full toolbar), so the tail cannot reach the control;\n * its point sits about 3 pt above the page area's bottom, leaving the shadow room to fade.\n */\n.ix-pointer {\n position: fixed;\n z-index: 2;\n left: 9px;\n bottom: 13px;\n display: flex;\n align-items: center;\n min-height: 42px;\n box-sizing: border-box;\n padding: 0 15px;\n color: var(--label);\n font-size: 15px;\n font-weight: 600;\n line-height: 20px;\n white-space: nowrap;\n transform-origin: 105px calc(100% + 11px);\n}\nhtml[data-ready] .ix-pointer { animation: ix-tip 0.45s 0.3s var(--spring) both; }\n@keyframes ix-tip { from { transform: scale(0.2); opacity: 0; filter: blur(4px); } }\n.ix-glass {\n position: absolute;\n inset: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n overflow: visible;\n}\n.ix-glass-fill { fill: var(--glass); }\n.ix-glass-band { stroke: var(--glass-band); }\n.ix-glass-line { opacity: var(--hl-line); }\n.ix-glass-soft { opacity: var(--hl-soft); }\nhtml[data-state=\"back\"] .ix-pointer { animation: ix-tip-again 0.45s var(--spring) both; }\n/* The symbol scaled with the words: its lines span about 19 x 12 pt. */\n.ix-pointer .ix-g {\n flex: none;\n width: 32px;\n height: 32px;\n margin: -6px 3.5px -6px -6.6px;\n color: var(--tint);\n stroke-width: 1.4;\n}\nhtml[data-bar=\"toolbar\"] .ix-pointer { right: 16px; width: fit-content; margin: 0 auto; transform-origin: 50% calc(100% + 11px); }\nhtml[data-bar=\"top\"] .ix-pointer {\n left: auto;\n right: calc(env(safe-area-inset-right) + 78px);\n bottom: auto;\n top: 12px;\n transform-origin: calc(100% - 42px) -11px;\n}\nhtml:not([data-step=\"1\"]) .ix-pointer { display: none; }\n@keyframes ix-tip-again { from { transform: scale(0.2); opacity: 0; filter: blur(4px); } }\nhtml[data-bar=\"top\"] .ix { padding-top: 80px; }\n\n.ix-qr { margin-inline: auto; }\n@media (min-width: 600px) { .ix-panels, #satin-install-check { max-width: 460px; margin-inline: auto; } }\n\n/*\n * iPad portrait (any window at least 600 wide and 700 tall, upright): one column with space,\n * about centred. The offset is fixed rather than measured, so the page does not move when\n * the deployment check hands over to the steps.\n */\n@media (min-width: 600px) and (min-height: 700px) and (orientation: portrait) {\n .ix-hero, html[data-bar=\"top\"] .ix-hero { padding-top: max(24px, calc(50svh - 400px)); }\n html[data-device=\"pad\"] .ix-art { --art: min(100%, 560px); }\n .ix-title { margin-top: 28px; font-size: min(2.118rem, 44px); }\n .ix-panels, #satin-install-check { width: 100%; max-width: 480px; }\n}\n/* A narrow iPad window: the phone's column, with the iPad drawn. */\n@media (max-width: 599px) { html[data-device=\"pad\"] .ix-art { --art: 100%; } }\n\n/* Landscape with room (iPad): the drawing on the left, the title and steps beside it. */\n@media (orientation: landscape) and (min-width: 900px) and (min-height: 600px) {\n .ix {\n display: grid;\n grid-template-columns: minmax(0, 1fr) minmax(320px, 440px);\n grid-auto-rows: min-content;\n align-content: center;\n column-gap: clamp(32px, 6vw, 88px);\n max-width: 1120px;\n margin-inline: auto;\n text-align: start;\n }\n .ix-hero { display: contents; }\n html .ix-art { grid-column: 1; grid-row: 1 / span 4; align-self: center; --art: min(100%, 540px); }\n .ix-hero > :not(.ix-art), #satin-install-check, .ix-panels { grid-column: 2; }\n .ix-title { margin-top: 0; font-size: min(2.118rem, 44px); }\n .ix-panels, #satin-install-check { max-width: none; margin-inline: 0; }\n .ix-qr { margin-inline: 0; }\n}\n/* iPhone landscape: little height, so the same two columns, tighter. */\n@media (orientation: landscape) and (max-height: 500px) {\n .ix {\n display: grid;\n grid-template-columns: 0.75fr 1.25fr;\n grid-auto-rows: min-content;\n align-content: center;\n column-gap: 24px;\n padding-top: 52px;\n padding-bottom: max(8px, env(safe-area-inset-bottom));\n text-align: start;\n }\n .ix-hero { display: contents; }\n html .ix-art { grid-column: 1; grid-row: 1 / span 4; align-self: center; --art: min(100%, 300px, 88svh); }\n .ix-hero > :not(.ix-art), #satin-install-check, .ix-panels { grid-column: 2; }\n .ix-title { margin-top: 0; font-size: min(1.412rem, 30px); }\n .ix-about { margin-top: 2px; }\n [data-panel] { margin-top: 10px; }\n html[data-tight=\"3x\"] .ix-foot { display: none; }\n .ix-steps li { min-height: 48px; padding-block: 5px; }\n}\n\n/* When the text is large the drawing steps back so the steps keep their room. */\nhtml[data-tight=\"1\"] .ix-art { --art: 260px; }\nhtml[data-tight=\"2\"] .ix-art { --art: 200px; }\nhtml[data-tight=\"3\"] .ix-art { --art: 140px; }\nhtml[data-tight=\"3x\"] :is(.ix-art, .ix-about) { display: none; }\nhtml[data-tight] .ix-hero { padding-top: 6px; }\n";
|