reis-mobile 0.3.6 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +24 -0
- package/README.md +175 -168
- package/THIRD_PARTY_NOTICES.md +224 -4
- package/agents/android-architect.md +89 -0
- package/agents/android-performance-engineer.md +92 -0
- package/agents/android-test-engineer.md +97 -0
- package/agents/flutter-test-engineer.md +2 -0
- package/agents/ios-architect.md +93 -0
- package/agents/ios-performance-engineer.md +92 -0
- package/agents/ios-test-engineer.md +95 -0
- package/agents/lead-mobile.md +10 -1
- package/agents/mobile-staff-engineer.md +1 -1
- package/agents/rn-architect.md +94 -0
- package/agents/rn-performance-engineer.md +92 -0
- package/agents/rn-test-engineer.md +98 -0
- package/bin/reis-mobile.mjs +59 -17
- package/commands/debate.md +10 -1
- package/commands/debug.md +60 -0
- package/commands/reis-mobile.md +7 -2
- package/core/config/project.mjs +59 -0
- package/core/registry/frontmatter.mjs +15 -4
- package/core/registry/registry.mjs +21 -1
- package/core/router/intents.mjs +2 -0
- package/core/router/router.mjs +10 -5
- package/package.json +1 -1
- package/skills/android-adaptive/SKILL.md +304 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md +112 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md +69 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md +81 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md +170 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md +415 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md +51 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md +73 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md +170 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md +333 -0
- package/skills/android-adaptive/references/android/develop/ui/compose/tooling/debug.md +114 -0
- package/skills/android-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/android-agp-9-upgrade/SKILL.md +106 -0
- package/skills/android-agp-9-upgrade/references/android/build/migrate-to-built-in-kotlin.md +416 -0
- package/skills/android-agp-9-upgrade/references/android/build/releases/agp-9-0-0-release-notes.md +554 -0
- package/skills/android-agp-9-upgrade/references/buildconfig.md +54 -0
- package/skills/android-agp-9-upgrade/references/ksp-kapt.md +39 -0
- package/skills/android-agp-9-upgrade/references/paparazzi-gradle-9.md +30 -0
- package/skills/android-agp-9-upgrade/references/recipes.md +62 -0
- package/skills/android-appfunctions/SKILL.md +74 -0
- package/skills/android-appfunctions/references/adb-interaction-testing.md +95 -0
- package/skills/android-appfunctions/references/context.md +26 -0
- package/skills/android-appfunctions/references/feature-discovery-analysis.md +71 -0
- package/skills/android-appfunctions/references/implementation-configuration.md +282 -0
- package/skills/android-appfunctions/references/kdoc-refinement-optimization.md +75 -0
- package/skills/android-appfunctions/references/migrate-to-service-entry-point.md +226 -0
- package/skills/android-camerax/SKILL.md +135 -0
- package/skills/android-camerax/references/camera1-to-camerax.md +198 -0
- package/skills/android-camerax/references/camera2-to-camerax.md +193 -0
- package/skills/android-camerax/references/expert-blueprints.md +58 -0
- package/skills/android-camerax/references/foldables.md +83 -0
- package/skills/android-camerax/references/immutability.md +60 -0
- package/skills/android-camerax/references/low-light.md +124 -0
- package/skills/android-camerax/references/mlkit-spatial.md +75 -0
- package/skills/android-camerax/references/modern-apis.md +42 -0
- package/skills/android-camerax/references/testing.md +69 -0
- package/skills/android-camerax/references/thermals.md +85 -0
- package/skills/android-camerax/references/wear-os.md +76 -0
- package/skills/android-camerax/references/xr.md +54 -0
- package/skills/android-cli/SKILL.md +474 -0
- package/skills/android-cli/references/interact.md +113 -0
- package/skills/android-cli/references/journeys.md +120 -0
- package/skills/android-code-review/SKILL.md +58 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/SKILL.md +340 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/design/ui/ai-glasses/guides/interaction/inputs.md +67 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/access-hardware-projected-context.md +388 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/buttons.md +139 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/cards.md +148 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/focus.md +107 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/icons.md +90 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/text.md +69 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/jetpack-compose-glimmer/title-chips.md +82 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/android/develop/xr/jetpack-xr-sdk/request-hardware-permissions.md +213 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-samples-source.md +176 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/button-source.md +203 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-samples-source.md +296 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/card-source.md +515 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md +224 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffectlevels-source.md +105 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmersansflextypography-source.md +270 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/glimmertheme-source.md +182 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/icon-source.md +388 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconbutton-source.md +126 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/iconsizes-source.md +78 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/list-source.md +27 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/listitem-source.md +272 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/liststate-source.md +427 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/material-hct-source.md +217 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/projectedcontext-source.md +265 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stack-source.md +368 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackitemscope-source.md +440 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/stackstate-source.md +325 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/surface-source.md +1211 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-samples-source.md +101 -0
- package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/titlechip-source.md +131 -0
- package/skills/android-edge-to-edge/SKILL.md +429 -0
- package/skills/android-engage-sdk-integration/SKILL.md +130 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/faq.md +439 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/food.md +1149 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/healthandfitness.md +1055 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/listen.md +1050 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/otherverticals.md +1301 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/read.md +910 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/shopping.md +1224 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/social.md +719 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/travel.md +1413 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/continue-watching/index.md +19 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/entitlements.md +353 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/getting-started.md +202 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/tv/recommendations.md +471 -0
- package/skills/android-engage-sdk-integration/references/android/guide/playcore/engage/watch.md +1081 -0
- package/skills/android-engage-sdk-integration/references/clusters.md +154 -0
- package/skills/android-engage-sdk-integration/references/common.md +519 -0
- package/skills/android-engage-sdk-integration/references/patterns.md +527 -0
- package/skills/android-engage-sdk-integration/references/requests.md +260 -0
- package/skills/android-engage-sdk-integration/references/schemas/food.md +509 -0
- package/skills/android-engage-sdk-integration/references/schemas/listen.md +842 -0
- package/skills/android-engage-sdk-integration/references/schemas/other.md +220 -0
- package/skills/android-engage-sdk-integration/references/schemas/read.md +412 -0
- package/skills/android-engage-sdk-integration/references/schemas/shopping.md +357 -0
- package/skills/android-engage-sdk-integration/references/schemas/social.md +228 -0
- package/skills/android-engage-sdk-integration/references/schemas/travel.md +923 -0
- package/skills/android-engage-sdk-integration/references/schemas/tv.md +1226 -0
- package/skills/android-engage-sdk-integration/references/schemas/watch.md +1137 -0
- package/skills/android-engage-sdk-integration/references/troubleshooting.md +39 -0
- package/skills/android-gradle-build-debug/SKILL.md +71 -0
- package/skills/android-intent-security/SKILL.md +550 -0
- package/skills/android-leanback-to-compose-tv-migration/SKILL.md +743 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/get-started/navigation.md +372 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/browse.md +243 -0
- package/skills/android-leanback-to-compose-tv-migration/references/android/training/tv/playback/compose/index.md +153 -0
- package/skills/android-media3-cast-integration/SKILL.md +236 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/create-castplayer.md +390 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/customize-castoptions.md +93 -0
- package/skills/android-media3-cast-integration/references/android/media/media3/cast/index.md +21 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/SKILL.md +127 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/analysis-of-the-project-and-layout.md +42 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/designsystems/migrate-xml-theme-to-compose.md +171 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/compose-in-views.md +299 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/migrate/interoperability-apis/views-in-compose.md +286 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/android/develop/ui/compose/setup-compose-dependencies-and-compiler.md +197 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/identify-optimal-xml-candidate.md +31 -0
- package/skills/android-migrate-xml-views-to-jetpack-compose/references/xml-layout-migration.md +86 -0
- package/skills/android-ml-kit-genai-prompt-api/SKILL.md +124 -0
- package/skills/android-ml-kit-genai-prompt-api/references/get-started.md +272 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prefix-caching.md +146 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prompt-design.md +55 -0
- package/skills/android-ml-kit-genai-prompt-api/references/prompt-optimization.md +74 -0
- package/skills/android-ml-kit-genai-prompt-api/references/structured-output.md +219 -0
- package/skills/android-ml-kit-genai-prompt-api/references/system-instructions.md +71 -0
- package/skills/android-navigation-3/SKILL.md +122 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/index.md +51 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/migration-guide.md +670 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/animations.md +147 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basic.md +89 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicdsl.md +85 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/basicsaveable.md +90 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/bottomsheet.md +195 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/common-ui.md +200 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional-transitions.md +182 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/conditional.md +230 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-custommatcher.md +176 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-staticuri.md +140 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/deeplinks-syntheticbackstack.md +184 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/dialog.md +107 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/lifecycle-owner.md +185 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md +141 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/material-supportingpane.md +145 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-hilt.md +283 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/modular-koin.md +287 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/multiple-backstacks.md +468 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/passingarguments.md +371 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-event.md +273 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/results-state.md +266 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-listdetail.md +435 -0
- package/skills/android-navigation-3/references/android/guide/navigation/navigation-3/recipes/scenes-twopane.md +244 -0
- package/skills/android-navigation-3/references/android/guide/navigation/type-safe-destinations.md +129 -0
- package/skills/android-navigation-event/SKILL.md +312 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/dispatcher.md +134 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/handle-back.md +217 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/index.md +83 -0
- package/skills/android-navigation-event/references/android/guide/navigation/navigation-event/setup.md +32 -0
- package/skills/android-play-billing-library-version-upgrade/SKILL.md +96 -0
- package/skills/android-play-billing-library-version-upgrade/references/android/google/play/billing/release-notes.md +1240 -0
- package/skills/android-play-billing-library-version-upgrade/references/migration-logic.md +78 -0
- package/skills/android-play-billing-library-version-upgrade/references/version-checklist.md +54 -0
- package/skills/android-play-policy-insights/SKILL.md +172 -0
- package/skills/android-play-policy-insights/resources/common_mandates.md +100 -0
- package/skills/android-play-policy-insights/resources/compliance_report_template.md +59 -0
- package/skills/android-play-policy-insights/resources/critic.md +86 -0
- package/skills/android-play-policy-insights/resources/goal_data_safety.md +212 -0
- package/skills/android-play-policy-insights/resources/goal_permissions_and_apis.md +459 -0
- package/skills/android-play-policy-insights/resources/goal_user_account.md +106 -0
- package/skills/android-play-policy-insights/resources/policies.json +321 -0
- package/skills/android-play-policy-insights/resources/scanner_config.json +843 -0
- package/skills/android-play-policy-insights/scripts/generate_report.py +860 -0
- package/skills/android-play-policy-insights/scripts/orchestrator.py +1313 -0
- package/skills/android-play-policy-insights/scripts/play_store_scraper.py +410 -0
- package/skills/android-play-policy-insights/scripts/scanner.py +261 -0
- package/skills/android-play-policy-insights/scripts/template_engine.py +243 -0
- package/skills/android-profiler/SKILL.md +60 -0
- package/skills/android-profiler/analysis/analysis_orchestrator.md +32 -0
- package/skills/android-profiler/analysis/workflows/perfetto-sql/perfetto_sql.md +28 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/perfetto_trace_analysis.md +121 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/guiding_principles.md +51 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/domain_hints_template.md +7 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_cpu.md +56 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_graphics.md +51 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_io.md +46 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_ipc.md +41 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_memory.md +55 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/hints/subsystems/hints_power.md +33 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/per_candidate_analysis.md +172 -0
- package/skills/android-profiler/analysis/workflows/perfetto-trace-analysis/references/triage.md +94 -0
- package/skills/android-profiler/recording/recording_orchestrator.md +36 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/perfetto_trace_recording.md +148 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/app_jank.pftxt +43 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/cpu_profile.pftxt +35 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/java_heap_dump.pftxt +21 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/long_background.pftxt +37 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/memory_counters.pftxt +45 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/native_heap.pftxt +21 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/example-configs/sched_cpu.pftxt +33 -0
- package/skills/android-profiler/recording/workflows/perfetto-trace-recording/references/trace_config_reference.md +102 -0
- package/skills/android-profiler/references/env_setup.md +15 -0
- package/skills/android-profiler/references/perfetto/setup.md +29 -0
- package/skills/android-profiler/references/perfetto/sql.md +327 -0
- package/skills/android-r8-analyzer/SKILL.md +72 -0
- package/skills/android-r8-analyzer/references/CONFIGURATION-ANALYZER.md +287 -0
- package/skills/android-r8-analyzer/references/CONFIGURATION.md +44 -0
- package/skills/android-r8-analyzer/references/KEEP-RULES-IMPACT-HIERARCHY.md +83 -0
- package/skills/android-r8-analyzer/references/REDUNDANT-RULES.md +222 -0
- package/skills/android-r8-analyzer/references/REFLECTION-GUIDE.md +139 -0
- package/skills/android-r8-analyzer/references/REPORT_FORMAT.md +51 -0
- package/skills/android-r8-analyzer/references/android/topic/performance/app-optimization/enable-app-optimization.md +252 -0
- package/skills/android-r8-analyzer/references/android/training/testing/other-components/ui-automator.md +312 -0
- package/skills/android-restore-credentials/SKILL.md +359 -0
- package/skills/android-restore-credentials/references/android/guide/topics/manifest/application-element.md +832 -0
- package/skills/android-restore-credentials/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/android-restore-credentials/references/android/identity/passkeys/sign-in-with-passkeys.md +219 -0
- package/skills/android-styles/SKILL.md +229 -0
- package/skills/android-styles/references/android/develop/ui/compose/designsystems/custom.md +459 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/fundamentals.md +421 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/state-animations.md +461 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/styles-vs-modifiers.md +48 -0
- package/skills/android-styles/references/android/develop/ui/compose/styles/theming.md +269 -0
- package/skills/android-verified-email/SKILL.md +432 -0
- package/skills/android-verified-email/references/android/identity/credential-manager/index.md +67 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/credential-verifier.md +166 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification-implementation.md +313 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/email-verification.md +158 -0
- package/skills/android-verified-email/references/android/identity/digital-credentials/index.md +112 -0
- package/skills/android-verified-email/references/android/identity/passkeys/create-passkeys.md +327 -0
- package/skills/android-verified-email/references/android/identity/sign-in/credential-manager-webview.md +84 -0
- package/skills/android-wear-compose-m3/SKILL.md +365 -0
- package/skills/android-wear-compose-m3/references/android/training/wearables/compose/migrate-to-material3.md +677 -0
- package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md +123 -0
- package/skills/android-wear-compose-m3/references/foundation/AmbientModeSample.kt.md.txt +123 -0
- package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md +430 -0
- package/skills/android-wear-compose-m3/references/foundation/CurvedWorldSample.kt.md.txt +430 -0
- package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md +99 -0
- package/skills/android-wear-compose-m3/references/foundation/ExpandableSample.kt.md.txt +99 -0
- package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md +141 -0
- package/skills/android-wear-compose-m3/references/foundation/HierarchicalFocusSample.kt.md.txt +141 -0
- package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md +56 -0
- package/skills/android-wear-compose-m3/references/foundation/PagerSamples.kt.md.txt +56 -0
- package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md +153 -0
- package/skills/android-wear-compose-m3/references/foundation/RotarySamples.kt.md.txt +153 -0
- package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md +131 -0
- package/skills/android-wear-compose-m3/references/foundation/ScalingLazyColumnSample.kt.md.txt +131 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md +169 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToDismissBoxSample.kt.md.txt +169 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md +282 -0
- package/skills/android-wear-compose-m3/references/foundation/SwipeToRevealSample.kt.md.txt +282 -0
- package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md +335 -0
- package/skills/android-wear-compose-m3/references/foundation/TransformingLazyColumnSample.kt.md.txt +335 -0
- package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md +377 -0
- package/skills/android-wear-compose-m3/references/material3/AlertDialogSample.kt.md.txt +377 -0
- package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md +165 -0
- package/skills/android-wear-compose-m3/references/material3/AnimatedTextSample.kt.md.txt +165 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md +91 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonGroupSample.kt.md.txt +91 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md +496 -0
- package/skills/android-wear-compose-m3/references/material3/ButtonSample.kt.md.txt +496 -0
- package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md +470 -0
- package/skills/android-wear-compose-m3/references/material3/CardSample.kt.md.txt +470 -0
- package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md +67 -0
- package/skills/android-wear-compose-m3/references/material3/CheckboxButtonSample.kt.md.txt +67 -0
- package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md +162 -0
- package/skills/android-wear-compose-m3/references/material3/ConfirmationDialogSample.kt.md.txt +162 -0
- package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md +78 -0
- package/skills/android-wear-compose-m3/references/material3/CurvedTextSamples.kt.md.txt +78 -0
- package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md +131 -0
- package/skills/android-wear-compose-m3/references/material3/DatePickerSample.kt.md.txt +131 -0
- package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md +74 -0
- package/skills/android-wear-compose-m3/references/material3/DynamicColorSchemeSample.kt.md.txt +74 -0
- package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md +63 -0
- package/skills/android-wear-compose-m3/references/material3/EdgeButtonSample.kt.md.txt +63 -0
- package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md +60 -0
- package/skills/android-wear-compose-m3/references/material3/FadingExpandingLabelSample.kt.md.txt +60 -0
- package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md +125 -0
- package/skills/android-wear-compose-m3/references/material3/IconButtonSample.kt.md.txt +125 -0
- package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md +116 -0
- package/skills/android-wear-compose-m3/references/material3/IconToggleButtonSample.kt.md.txt +116 -0
- package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md +68 -0
- package/skills/android-wear-compose-m3/references/material3/LevelIndicatorSample.kt.md.txt +68 -0
- package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md +50 -0
- package/skills/android-wear-compose-m3/references/material3/LinearProgressIndicatorSample.kt.md.txt +50 -0
- package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md +177 -0
- package/skills/android-wear-compose-m3/references/material3/ListHeaderSample.kt.md.txt +177 -0
- package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md +651 -0
- package/skills/android-wear-compose-m3/references/material3/OneHandedGestureSamples.kt.md.txt +651 -0
- package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md +57 -0
- package/skills/android-wear-compose-m3/references/material3/OpenOnPhoneDialogSample.kt.md.txt +57 -0
- package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md +110 -0
- package/skills/android-wear-compose-m3/references/material3/PageIndicatorSample.kt.md.txt +110 -0
- package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md +204 -0
- package/skills/android-wear-compose-m3/references/material3/PagerScaffoldSample.kt.md.txt +204 -0
- package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md +139 -0
- package/skills/android-wear-compose-m3/references/material3/PickerGroupSample.kt.md.txt +139 -0
- package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md +111 -0
- package/skills/android-wear-compose-m3/references/material3/PickerSample.kt.md.txt +111 -0
- package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md +184 -0
- package/skills/android-wear-compose-m3/references/material3/PlaceholderSample.kt.md.txt +184 -0
- package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md +263 -0
- package/skills/android-wear-compose-m3/references/material3/ProgressIndicatorSample.kt.md.txt +263 -0
- package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md +105 -0
- package/skills/android-wear-compose-m3/references/material3/RadioButtonSample.kt.md.txt +105 -0
- package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md +146 -0
- package/skills/android-wear-compose-m3/references/material3/ScaffoldSample.kt.md.txt +146 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md +97 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollAwaySample.kt.md.txt +97 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md +66 -0
- package/skills/android-wear-compose-m3/references/material3/ScrollIndicatorSample.kt.md.txt +66 -0
- package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md +86 -0
- package/skills/android-wear-compose-m3/references/material3/SliderSample.kt.md.txt +86 -0
- package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md +148 -0
- package/skills/android-wear-compose-m3/references/material3/StepperSample.kt.md.txt +148 -0
- package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md +166 -0
- package/skills/android-wear-compose-m3/references/material3/SurfaceTransformationSample.kt.md.txt +166 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md +172 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToDismissBoxSample.kt.md.txt +172 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md +367 -0
- package/skills/android-wear-compose-m3/references/material3/SwipeToRevealSample.kt.md.txt +367 -0
- package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md +66 -0
- package/skills/android-wear-compose-m3/references/material3/SwitchButtonSample.kt.md.txt +66 -0
- package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md +115 -0
- package/skills/android-wear-compose-m3/references/material3/TextButtonSample.kt.md.txt +115 -0
- package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md +71 -0
- package/skills/android-wear-compose-m3/references/material3/TextToggleButtonSample.kt.md.txt +71 -0
- package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md +151 -0
- package/skills/android-wear-compose-m3/references/material3/TimePickerSample.kt.md.txt +151 -0
- package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md +65 -0
- package/skills/android-wear-compose-m3/references/material3/TimeTextSample.kt.md.txt +65 -0
- package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md +246 -0
- package/skills/android-wear-compose-m3/references/material3/TransformationSpecSample.kt.md.txt +246 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md +89 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnNotificationsSample.kt.md.txt +89 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md +309 -0
- package/skills/android-wear-compose-m3/references/material3/TransformingLazyColumnSample.kt.md.txt +309 -0
- package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md +205 -0
- package/skills/android-wear-compose-m3/references/navigation3/SwipeDismissableSceneStrategySample.kt.md.txt +205 -0
- package/skills/{architecture-feature-first → flutter-architecture-feature-first}/SKILL.md +1 -1
- package/skills/{bloc → flutter-bloc}/SKILL.md +1 -1
- package/skills/flutter-build-debug/SKILL.md +66 -0
- package/skills/{code-review → flutter-code-review}/SKILL.md +1 -1
- package/skills/{dart-3-updates → flutter-dart-3-updates}/SKILL.md +1 -1
- package/skills/{dart-fix-runtime-errors → flutter-dart-fix-runtime-errors}/SKILL.md +1 -1
- package/skills/{dart-resolve-package-conflicts → flutter-dart-resolve-package-conflicts}/SKILL.md +1 -1
- package/skills/{dart-run-static-analysis → flutter-dart-run-static-analysis}/SKILL.md +1 -1
- package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/SKILL.md +1 -1
- package/skills/{effective-dart → flutter-effective-dart}/SKILL.md +1 -1
- package/skills/{provider → flutter-provider}/SKILL.md +1 -1
- package/skills/{riverpod → flutter-riverpod}/SKILL.md +1 -1
- package/skills/ios-cocoapods-debug/SKILL.md +65 -0
- package/skills/ios-code-review/SKILL.md +56 -0
- package/skills/ios-xcode-build-debug/SKILL.md +66 -0
- package/skills/{detect-mobile-stack → mobile-detect-stack}/SKILL.md +1 -1
- package/skills/mobile-firebase/SKILL.md +54 -0
- package/skills/mobile-firebase/references/android/ai-logic.md +31 -0
- package/skills/mobile-firebase/references/android/analytics.md +33 -0
- package/skills/mobile-firebase/references/android/app-check.md +36 -0
- package/skills/mobile-firebase/references/android/auth.md +44 -0
- package/skills/mobile-firebase/references/android/crashlytics.md +31 -0
- package/skills/mobile-firebase/references/android/firestore.md +44 -0
- package/skills/mobile-firebase/references/android/functions.md +33 -0
- package/skills/mobile-firebase/references/android/in-app-messaging.md +28 -0
- package/skills/mobile-firebase/references/android/messaging.md +41 -0
- package/skills/mobile-firebase/references/android/realtime-database.md +50 -0
- package/skills/mobile-firebase/references/android/remote-config.md +43 -0
- package/skills/mobile-firebase/references/android/sql-connect.md +31 -0
- package/skills/mobile-firebase/references/android/storage.md +39 -0
- package/skills/mobile-firebase/references/android.md +30 -0
- package/skills/{firebase-ai/SKILL.md → mobile-firebase/references/flutter/ai-logic.md} +2 -8
- package/skills/{firebase-analytics/SKILL.md → mobile-firebase/references/flutter/analytics.md} +2 -8
- package/skills/{firebase-app-check/SKILL.md → mobile-firebase/references/flutter/app-check.md} +2 -8
- package/skills/{firebase-auth/SKILL.md → mobile-firebase/references/flutter/auth.md} +2 -8
- package/skills/{firebase-crashlytics/SKILL.md → mobile-firebase/references/flutter/crashlytics.md} +2 -8
- package/skills/{firebase-cloud-firestore/SKILL.md → mobile-firebase/references/flutter/firestore.md} +2 -8
- package/skills/{firebase-cloud-functions/SKILL.md → mobile-firebase/references/flutter/functions.md} +2 -8
- package/skills/{firebase-in-app-messaging/SKILL.md → mobile-firebase/references/flutter/in-app-messaging.md} +2 -8
- package/skills/{firebase-messaging/SKILL.md → mobile-firebase/references/flutter/messaging.md} +2 -8
- package/skills/{firebase-database/SKILL.md → mobile-firebase/references/flutter/realtime-database.md} +2 -8
- package/skills/{firebase-remote-config/SKILL.md → mobile-firebase/references/flutter/remote-config.md} +2 -8
- package/skills/{flutterfire-configure/SKILL.md → mobile-firebase/references/flutter/setup-flutterfire.md} +1 -8
- package/skills/{firebase-data-connect/SKILL.md → mobile-firebase/references/flutter/sql-connect.md} +2 -8
- package/skills/{firebase-storage/SKILL.md → mobile-firebase/references/flutter/storage.md} +2 -8
- package/skills/mobile-firebase/references/flutter.md +36 -0
- package/skills/mobile-firebase/references/ios/ai-logic.md +30 -0
- package/skills/mobile-firebase/references/ios/analytics.md +33 -0
- package/skills/mobile-firebase/references/ios/app-check.md +36 -0
- package/skills/mobile-firebase/references/ios/auth.md +48 -0
- package/skills/mobile-firebase/references/ios/crashlytics.md +34 -0
- package/skills/mobile-firebase/references/ios/firestore.md +53 -0
- package/skills/mobile-firebase/references/ios/functions.md +35 -0
- package/skills/mobile-firebase/references/ios/in-app-messaging.md +26 -0
- package/skills/mobile-firebase/references/ios/messaging.md +45 -0
- package/skills/mobile-firebase/references/ios/realtime-database.md +49 -0
- package/skills/mobile-firebase/references/ios/remote-config.md +44 -0
- package/skills/mobile-firebase/references/ios/sql-connect.md +33 -0
- package/skills/mobile-firebase/references/ios/storage.md +36 -0
- package/skills/mobile-firebase/references/ios.md +28 -0
- package/skills/mobile-firebase/references/react-native/ai-logic.md +32 -0
- package/skills/mobile-firebase/references/react-native/analytics.md +43 -0
- package/skills/mobile-firebase/references/react-native/app-check.md +35 -0
- package/skills/mobile-firebase/references/react-native/auth.md +50 -0
- package/skills/mobile-firebase/references/react-native/crashlytics.md +36 -0
- package/skills/mobile-firebase/references/react-native/firestore.md +45 -0
- package/skills/mobile-firebase/references/react-native/functions.md +28 -0
- package/skills/mobile-firebase/references/react-native/in-app-messaging.md +27 -0
- package/skills/mobile-firebase/references/react-native/messaging.md +46 -0
- package/skills/mobile-firebase/references/react-native/realtime-database.md +46 -0
- package/skills/mobile-firebase/references/react-native/remote-config.md +32 -0
- package/skills/mobile-firebase/references/react-native/sql-connect.md +11 -0
- package/skills/mobile-firebase/references/react-native/storage.md +30 -0
- package/skills/mobile-firebase/references/react-native.md +29 -0
- package/skills/mobile-test/SKILL.md +63 -0
- package/skills/mobile-test/references/android/setup/GUIDE.md +183 -0
- package/skills/mobile-test/references/android/setup/references/android/develop/ui/compose/testing/common-patterns.md +181 -0
- package/skills/mobile-test/references/android/setup/references/android/studio/preview/compose-screenshot-testing.md +255 -0
- package/skills/mobile-test/references/android/setup/references/android/training/dependency-injection/hilt-testing.md +447 -0
- package/skills/mobile-test/references/android.md +83 -0
- package/skills/{dart-collect-coverage/SKILL.md → mobile-test/references/flutter/coverage.md} +2 -11
- package/skills/{dart-generate-test-mocks/SKILL.md → mobile-test/references/flutter/generate-mocks.md} +2 -11
- package/skills/{flutter-add-integration-test/SKILL.md → mobile-test/references/flutter/integration-tests.md} +2 -11
- package/skills/{dart-migrate-to-checks-package/SKILL.md → mobile-test/references/flutter/migrate-to-checks.md} +2 -13
- package/skills/{mockito/SKILL.md → mobile-test/references/flutter/mockito.md} +1 -8
- package/skills/{mocktail/SKILL.md → mobile-test/references/flutter/mocktail.md} +1 -8
- package/skills/{patrol-e2e-testing/SKILL.md → mobile-test/references/flutter/patrol.md} +1 -8
- package/skills/{testing/SKILL.md → mobile-test/references/flutter/testing-guidelines.md} +1 -8
- package/skills/{dart-add-unit-test/SKILL.md → mobile-test/references/flutter/unit-tests.md} +2 -11
- package/skills/{flutter-add-widget-test/SKILL.md → mobile-test/references/flutter/widget-tests.md} +2 -11
- package/skills/mobile-test/references/flutter.md +44 -0
- package/skills/mobile-test/references/ios.md +79 -0
- package/skills/mobile-test/references/react-native.md +62 -0
- /package/skills/{dart-use-pattern-matching → flutter-dart-use-pattern-matching}/examples/json_patterns.dart +0 -0
package/skills/android-display-glasses-with-jetpack-compose-glimmer/references/deptheffect-source.md
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
When simulating depth on AI glasses using shadows, refer to the following source
|
|
2
|
+
code in `DepthEffect.kt`:
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
```kotlin
|
|
6
|
+
/*
|
|
7
|
+
* Copyright 2025 The Android Open Source Project
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
package androidx.xr.glimmer
|
|
23
|
+
|
|
24
|
+
import androidx.compose.runtime.Immutable
|
|
25
|
+
import androidx.compose.ui.Modifier
|
|
26
|
+
import androidx.compose.ui.draw.ShadowScope
|
|
27
|
+
import androidx.compose.ui.draw.dropShadow
|
|
28
|
+
import androidx.compose.ui.geometry.Offset
|
|
29
|
+
import androidx.compose.ui.graphics.DefaultAlpha
|
|
30
|
+
import androidx.compose.ui.graphics.Shape
|
|
31
|
+
import androidx.compose.ui.graphics.drawscope.ContentDrawScope
|
|
32
|
+
import androidx.compose.ui.graphics.shadow.DropShadowPainter
|
|
33
|
+
import androidx.compose.ui.graphics.shadow.Shadow
|
|
34
|
+
import androidx.compose.ui.graphics.shadow.lerp
|
|
35
|
+
import androidx.compose.ui.node.DrawModifierNode
|
|
36
|
+
import androidx.compose.ui.node.ModifierNodeElement
|
|
37
|
+
import androidx.compose.ui.node.requireGraphicsContext
|
|
38
|
+
import androidx.compose.ui.platform.InspectorInfo
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The depth effect establishes a sense of hierarchy by using shadows to occlude content underneath.
|
|
42
|
+
* It consists of two shadow layers, [layer1] and [layer2]. [layer2] is drawn on top of [layer1]:
|
|
43
|
+
*
|
|
44
|
+
* _________________
|
|
45
|
+
* | _________ |
|
|
46
|
+
* | | content | |
|
|
47
|
+
* | |_________| |
|
|
48
|
+
* | ___________ |
|
|
49
|
+
* | | layer 2 | |
|
|
50
|
+
* | |___________| |
|
|
51
|
+
* | _____________ |
|
|
52
|
+
* | | layer 1 | |
|
|
53
|
+
* | |_____________| |
|
|
54
|
+
* |_________________|
|
|
55
|
+
*
|
|
56
|
+
* [GlimmerTheme.depthEffectLevels] provides theme defined depth effect levels that should be used
|
|
57
|
+
* to add depth to surfaces.
|
|
58
|
+
*
|
|
59
|
+
* Higher level components apply the depth effect automatically when needed. The depth effect can
|
|
60
|
+
* also be configured through [surface]. To manually render depth shadows for advanced use-cases,
|
|
61
|
+
* see the [depthEffect] [Modifier].
|
|
62
|
+
*
|
|
63
|
+
* @property layer1 the 'base' [Shadow] layer, drawn first
|
|
64
|
+
* @property layer2 the second [Shadow] layer, drawn on top of [layer1]
|
|
65
|
+
*/
|
|
66
|
+
@Immutable
|
|
67
|
+
public class DepthEffect(public val layer1: Shadow, public val layer2: Shadow) {
|
|
68
|
+
override fun equals(other: Any?): Boolean {
|
|
69
|
+
if (this === other) return true
|
|
70
|
+
if (other !is DepthEffect) return false
|
|
71
|
+
|
|
72
|
+
if (layer1 != other.layer1) return false
|
|
73
|
+
if (layer2 != other.layer2) return false
|
|
74
|
+
|
|
75
|
+
return true
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
override fun hashCode(): Int {
|
|
79
|
+
var result = layer1.hashCode()
|
|
80
|
+
result = 31 * result + layer2.hashCode()
|
|
81
|
+
return result
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Renders shadows for the provided [depthEffect].
|
|
87
|
+
*
|
|
88
|
+
* @param depthEffect Depth effect to render shadows for. If `null`, no shadows will be rendered.
|
|
89
|
+
* @param shape [Shape] of the shadows
|
|
90
|
+
*/
|
|
91
|
+
public fun Modifier.depthEffect(depthEffect: DepthEffect?, shape: Shape): Modifier {
|
|
92
|
+
if (depthEffect == null) return this
|
|
93
|
+
return this then DepthEffectElement(depthEffect, shape)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Renders depth effect shadows by lerping between the provided [from] and [to] depth effects using
|
|
98
|
+
* [progress]. This allows for efficient animation - to render a static depth effect, see the other
|
|
99
|
+
* overload.
|
|
100
|
+
*
|
|
101
|
+
* @param from Depth effect to render shadows for when [progress] is 0.
|
|
102
|
+
* @param to Depth effect to render shadows for when [progress] is 1.
|
|
103
|
+
* @param shape [Shape] of the shadows
|
|
104
|
+
* @param progress progress of the animation between [from] and [to], from 0 to 1. Values may go
|
|
105
|
+
* outside these bounds for overshoot / undershoot.
|
|
106
|
+
*/
|
|
107
|
+
// TODO: can be simplified with style API in the future
|
|
108
|
+
internal fun Modifier.depthEffect(
|
|
109
|
+
from: DepthEffect?,
|
|
110
|
+
to: DepthEffect?,
|
|
111
|
+
shape: Shape,
|
|
112
|
+
progress: () -> Float,
|
|
113
|
+
): Modifier {
|
|
114
|
+
// dropShadow draws the shadow, and then the content on top. So in order to get layer2 to
|
|
115
|
+
// render on top of layer1, we draw layer1 first - this means that layer1's dropShadow will
|
|
116
|
+
// draw its shadow, and then its content on top (since the 'content' includes children
|
|
117
|
+
// modifiers, this includes layer2's shadow).
|
|
118
|
+
return this.dropShadow(shape) {
|
|
119
|
+
val shadow = lerp(from?.layer1, to?.layer1, progress())
|
|
120
|
+
if (shadow != null) {
|
|
121
|
+
updateFrom(shadow)
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
.dropShadow(shape) {
|
|
125
|
+
val shadow = lerp(from?.layer2, to?.layer2, progress())
|
|
126
|
+
if (shadow != null) {
|
|
127
|
+
updateFrom(shadow)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private fun ShadowScope.updateFrom(shadow: Shadow) {
|
|
133
|
+
this.radius = shadow.radius.toPx()
|
|
134
|
+
this.spread = shadow.spread.toPx()
|
|
135
|
+
this.offset = Offset(shadow.offset.x.toPx(), shadow.offset.y.toPx())
|
|
136
|
+
this.color = shadow.color
|
|
137
|
+
this.brush = shadow.brush
|
|
138
|
+
this.alpha = shadow.alpha
|
|
139
|
+
this.blendMode = shadow.blendMode
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
private class DepthEffectElement(private val depthEffect: DepthEffect, private val shape: Shape) :
|
|
143
|
+
ModifierNodeElement<DepthEffectNode>() {
|
|
144
|
+
|
|
145
|
+
override fun create(): DepthEffectNode = DepthEffectNode(depthEffect, shape)
|
|
146
|
+
|
|
147
|
+
override fun update(node: DepthEffectNode) {
|
|
148
|
+
node.update(depthEffect, shape)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
override fun equals(other: Any?): Boolean {
|
|
152
|
+
if (this === other) return true
|
|
153
|
+
if (other !is DepthEffectElement) return false
|
|
154
|
+
|
|
155
|
+
if (depthEffect != other.depthEffect) return false
|
|
156
|
+
if (shape != other.shape) return false
|
|
157
|
+
|
|
158
|
+
return true
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
override fun hashCode(): Int {
|
|
162
|
+
var result = depthEffect.hashCode()
|
|
163
|
+
result = 31 * result + shape.hashCode()
|
|
164
|
+
return result
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
override fun InspectorInfo.inspectableProperties() {
|
|
168
|
+
name = "depthEffect"
|
|
169
|
+
properties["depthEffect"] = depthEffect
|
|
170
|
+
properties["shape"] = shape
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Renders shadows for the provided [shape] and [depthEffect].
|
|
176
|
+
*
|
|
177
|
+
* @param depthEffect Depth effect to render shadows for.
|
|
178
|
+
* @param shape [Shape] of the shadows.
|
|
179
|
+
*/
|
|
180
|
+
internal class DepthEffectNode(private var depthEffect: DepthEffect, private var shape: Shape) :
|
|
181
|
+
Modifier.Node(), DrawModifierNode {
|
|
182
|
+
|
|
183
|
+
private var layer1ShadowPainter: DropShadowPainter? = null
|
|
184
|
+
private var layer2ShadowPainter: DropShadowPainter? = null
|
|
185
|
+
|
|
186
|
+
fun update(depthEffect: DepthEffect, shape: Shape) {
|
|
187
|
+
if (this.depthEffect.layer1 != depthEffect.layer1) layer1ShadowPainter = null
|
|
188
|
+
if (this.depthEffect.layer2 != depthEffect.layer2) layer2ShadowPainter = null
|
|
189
|
+
if (this.shape != shape) {
|
|
190
|
+
layer1ShadowPainter = null
|
|
191
|
+
layer2ShadowPainter = null
|
|
192
|
+
}
|
|
193
|
+
this.shape = shape
|
|
194
|
+
this.depthEffect = depthEffect
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
override fun ContentDrawScope.draw() {
|
|
198
|
+
drawDepthEffect()
|
|
199
|
+
drawContent()
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
internal fun ContentDrawScope.drawDepthEffect(alpha: Float = DefaultAlpha) {
|
|
203
|
+
// In order to get layer2 to render on top of layer1, we draw layer1 first.
|
|
204
|
+
with(obtainLayer1ShadowPainter()) { draw(size, alpha = alpha) }
|
|
205
|
+
with(obtainLayer2ShadowPainter()) { draw(size, alpha = alpha) }
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
private fun obtainLayer1ShadowPainter(): DropShadowPainter =
|
|
209
|
+
layer1ShadowPainter
|
|
210
|
+
?: requireGraphicsContext()
|
|
211
|
+
.shadowContext
|
|
212
|
+
.createDropShadowPainter(shape, depthEffect.layer1)
|
|
213
|
+
.also { layer1ShadowPainter = it }
|
|
214
|
+
|
|
215
|
+
private fun obtainLayer2ShadowPainter(): DropShadowPainter =
|
|
216
|
+
layer2ShadowPainter
|
|
217
|
+
?: requireGraphicsContext()
|
|
218
|
+
.shadowContext
|
|
219
|
+
.createDropShadowPainter(shape, depthEffect.layer2)
|
|
220
|
+
.also { layer2ShadowPainter = it }
|
|
221
|
+
}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
<br />
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
When simulating depth on AI glasses using shadows, refer to the following source
|
|
2
|
+
code in `DepthEffectLevels.kt`:
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
```kotlin
|
|
6
|
+
/*
|
|
7
|
+
* Copyright 2025 The Android Open Source Project
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
package androidx.xr.glimmer
|
|
23
|
+
|
|
24
|
+
import androidx.compose.runtime.Immutable
|
|
25
|
+
import androidx.compose.ui.graphics.Color
|
|
26
|
+
import androidx.compose.ui.graphics.shadow.Shadow
|
|
27
|
+
import androidx.compose.ui.unit.dp
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Jetpack Compose Glimmer components can use [DepthEffect] to establish a sense of hierarchy.
|
|
31
|
+
* [DepthEffectLevels] contains different levels of [DepthEffect] to express this hierarchy. Higher
|
|
32
|
+
* levels contain larger shadows, and represent components with a higher z-order than lower levels.
|
|
33
|
+
* In their baseline state (not focused) most components should have no (`null`) [DepthEffect].
|
|
34
|
+
*
|
|
35
|
+
* @property level1 the lowest level of [DepthEffect]. This level will have the smallest shadows.
|
|
36
|
+
* @property level2 a level of [DepthEffect] higher than [level1] and lower than [level3].
|
|
37
|
+
* @property level3 a level of [DepthEffect] higher than [level2] and lower than [level4].
|
|
38
|
+
* @property level4 a level of [DepthEffect] higher than [level3] and lower than [level5].
|
|
39
|
+
* @property level5 the highest level of [DepthEffect]. This level will have the largest shadows.
|
|
40
|
+
* @see DepthEffect
|
|
41
|
+
* @see depthEffect
|
|
42
|
+
*/
|
|
43
|
+
@Immutable
|
|
44
|
+
public class DepthEffectLevels(
|
|
45
|
+
public val level1: DepthEffect = DepthEffectLevel1,
|
|
46
|
+
public val level2: DepthEffect = DepthEffectLevel2,
|
|
47
|
+
public val level3: DepthEffect = DepthEffectLevel3,
|
|
48
|
+
public val level4: DepthEffect = DepthEffectLevel4,
|
|
49
|
+
public val level5: DepthEffect = DepthEffectLevel5,
|
|
50
|
+
) {
|
|
51
|
+
override fun equals(other: Any?): Boolean {
|
|
52
|
+
if (this === other) return true
|
|
53
|
+
if (other !is DepthEffectLevels) return false
|
|
54
|
+
|
|
55
|
+
if (level1 != other.level1) return false
|
|
56
|
+
if (level2 != other.level2) return false
|
|
57
|
+
if (level3 != other.level3) return false
|
|
58
|
+
if (level4 != other.level4) return false
|
|
59
|
+
if (level5 != other.level5) return false
|
|
60
|
+
|
|
61
|
+
return true
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
override fun hashCode(): Int {
|
|
65
|
+
var result = level1.hashCode()
|
|
66
|
+
result = 31 * result + level2.hashCode()
|
|
67
|
+
result = 31 * result + level3.hashCode()
|
|
68
|
+
result = 31 * result + level4.hashCode()
|
|
69
|
+
result = 31 * result + level5.hashCode()
|
|
70
|
+
return result
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
override fun toString(): String {
|
|
74
|
+
return "DepthEffectLevels(level1=$level1, level2=$level2, level3=$level3, level4=$level4, level5=$level5)"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private val DepthEffectLevel1 =
|
|
79
|
+
DepthEffect(
|
|
80
|
+
layer1 = Shadow(radius = 12.dp, color = Color.Black, spread = 6.dp, alpha = 0.90f),
|
|
81
|
+
layer2 = Shadow(radius = 6.dp, color = Color.Black, spread = 2.dp),
|
|
82
|
+
)
|
|
83
|
+
private val DepthEffectLevel2 =
|
|
84
|
+
DepthEffect(
|
|
85
|
+
layer1 = Shadow(radius = 23.dp, color = Color.Black, spread = 13.dp, alpha = 0.90f),
|
|
86
|
+
layer2 = Shadow(radius = 8.dp, color = Color.Black, spread = 5.dp),
|
|
87
|
+
)
|
|
88
|
+
private val DepthEffectLevel3 =
|
|
89
|
+
DepthEffect(
|
|
90
|
+
layer1 = Shadow(radius = 34.dp, color = Color.Black, spread = 19.dp, alpha = 0.90f),
|
|
91
|
+
layer2 = Shadow(radius = 9.dp, color = Color.Black, spread = 7.dp),
|
|
92
|
+
)
|
|
93
|
+
private val DepthEffectLevel4 =
|
|
94
|
+
DepthEffect(
|
|
95
|
+
layer1 = Shadow(radius = 45.dp, color = Color.Black, spread = 26.dp, alpha = 0.90f),
|
|
96
|
+
layer2 = Shadow(radius = 11.dp, color = Color.Black, spread = 10.dp),
|
|
97
|
+
)
|
|
98
|
+
private val DepthEffectLevel5 =
|
|
99
|
+
DepthEffect(
|
|
100
|
+
layer1 = Shadow(radius = 56.dp, color = Color.Black, spread = 32.dp, alpha = 0.90f),
|
|
101
|
+
layer2 = Shadow(radius = 12.dp, color = Color.Black, spread = 12.dp),
|
|
102
|
+
)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
<br />
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
When creating a `Typography` instance with the Google Sans Flex configuration,
|
|
2
|
+
refer to the following source code in `GoogleSansFlexTypography.kt`:
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
```kotlin
|
|
6
|
+
/*
|
|
7
|
+
* Copyright 2026 The Android Open Source Project
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
@file:Suppress("MentionsGoogle")
|
|
23
|
+
|
|
24
|
+
package androidx.xr.glimmer.googlefonts
|
|
25
|
+
|
|
26
|
+
import androidx.compose.ui.text.TextStyle
|
|
27
|
+
import androidx.compose.ui.text.font.FontFamily
|
|
28
|
+
import androidx.compose.ui.text.font.FontVariation
|
|
29
|
+
import androidx.compose.ui.text.font.FontWeight
|
|
30
|
+
import androidx.compose.ui.text.googlefonts.Font
|
|
31
|
+
import androidx.compose.ui.text.googlefonts.GoogleFont
|
|
32
|
+
import androidx.compose.ui.text.style.LineHeightStyle
|
|
33
|
+
import androidx.compose.ui.unit.sp
|
|
34
|
+
import androidx.xr.glimmer.Typography
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Returns a [Typography] instance configured with Google Sans Flex and customized with the
|
|
38
|
+
* recommended settings for Jetpack Compose Glimmer.
|
|
39
|
+
*
|
|
40
|
+
* Note: Google Sans Flex is a variable font. It is recommended to configure attributes such as
|
|
41
|
+
* weight, slant, and grade by using [FontVariation.Settings] (e.g. [FontVariation.weight]) rather
|
|
42
|
+
* than the [TextStyle] properties.
|
|
43
|
+
*
|
|
44
|
+
* @sample androidx.xr.glimmer.googlefonts.samples.GoogleSansFlexTypographySample
|
|
45
|
+
* @param titleLarge the [TextStyle] for [Typography.titleLarge]
|
|
46
|
+
* @param titleLargeVariationSettings the [FontVariation.Settings] for [Typography.titleLarge].
|
|
47
|
+
* @param titleMedium the [TextStyle] for [Typography.titleMedium].
|
|
48
|
+
* @param titleMediumVariationSettings the [FontVariation.Settings] for [Typography.titleMedium].
|
|
49
|
+
* @param titleSmall the [TextStyle] for [Typography.titleSmall].
|
|
50
|
+
* @param titleSmallVariationSettings the [FontVariation.Settings] for [Typography.titleSmall].
|
|
51
|
+
* @param bodyLarge the [TextStyle] for [Typography.bodyLarge].
|
|
52
|
+
* @param bodyLargeVariationSettings the [FontVariation.Settings] for [Typography.bodyLarge].
|
|
53
|
+
* @param bodyMedium the [TextStyle] for [Typography.bodyMedium].
|
|
54
|
+
* @param bodyMediumVariationSettings the [FontVariation.Settings] for [Typography.bodyMedium].
|
|
55
|
+
* @param bodySmall the [TextStyle] for [Typography.bodySmall].
|
|
56
|
+
* @param bodySmallVariationSettings the [FontVariation.Settings] for [Typography.bodySmall].
|
|
57
|
+
* @param caption the [TextStyle] for [Typography.caption].
|
|
58
|
+
* @param captionVariationSettings the [FontVariation.Settings] for [Typography.caption].
|
|
59
|
+
*/
|
|
60
|
+
@Suppress("MentionsGoogle")
|
|
61
|
+
public fun createGoogleSansFlexTypography(
|
|
62
|
+
titleLarge: TextStyle = GoogleSansFlexTypographyDefaults.TitleLarge,
|
|
63
|
+
titleLargeVariationSettings: FontVariation.Settings =
|
|
64
|
+
GoogleSansFlexTypographyDefaults.TitleLargeVariationSettings,
|
|
65
|
+
titleMedium: TextStyle = GoogleSansFlexTypographyDefaults.TitleMedium,
|
|
66
|
+
titleMediumVariationSettings: FontVariation.Settings =
|
|
67
|
+
GoogleSansFlexTypographyDefaults.TitleMediumVariationSettings,
|
|
68
|
+
titleSmall: TextStyle = GoogleSansFlexTypographyDefaults.TitleSmall,
|
|
69
|
+
titleSmallVariationSettings: FontVariation.Settings =
|
|
70
|
+
GoogleSansFlexTypographyDefaults.TitleSmallVariationSettings,
|
|
71
|
+
bodyLarge: TextStyle = GoogleSansFlexTypographyDefaults.BodyLarge,
|
|
72
|
+
bodyLargeVariationSettings: FontVariation.Settings =
|
|
73
|
+
GoogleSansFlexTypographyDefaults.BodyLargeVariationSettings,
|
|
74
|
+
bodyMedium: TextStyle = GoogleSansFlexTypographyDefaults.BodyMedium,
|
|
75
|
+
bodyMediumVariationSettings: FontVariation.Settings =
|
|
76
|
+
GoogleSansFlexTypographyDefaults.BodyMediumVariationSettings,
|
|
77
|
+
bodySmall: TextStyle = GoogleSansFlexTypographyDefaults.BodySmall,
|
|
78
|
+
bodySmallVariationSettings: FontVariation.Settings =
|
|
79
|
+
GoogleSansFlexTypographyDefaults.BodySmallVariationSettings,
|
|
80
|
+
caption: TextStyle = GoogleSansFlexTypographyDefaults.Caption,
|
|
81
|
+
captionVariationSettings: FontVariation.Settings =
|
|
82
|
+
GoogleSansFlexTypographyDefaults.CaptionVariationSettings,
|
|
83
|
+
): Typography {
|
|
84
|
+
val titleLargeFontFamily = FontFamily(GoogleSansFlexFont, titleLargeVariationSettings)
|
|
85
|
+
val titleMediumFontFamily = FontFamily(GoogleSansFlexFont, titleMediumVariationSettings)
|
|
86
|
+
val titleSmallFontFamily = FontFamily(GoogleSansFlexFont, titleSmallVariationSettings)
|
|
87
|
+
val bodyLargeFontFamily = FontFamily(GoogleSansFlexFont, bodyLargeVariationSettings)
|
|
88
|
+
val bodyMediumFontFamily = FontFamily(GoogleSansFlexFont, bodyMediumVariationSettings)
|
|
89
|
+
val bodySmallFontFamily = FontFamily(GoogleSansFlexFont, bodySmallVariationSettings)
|
|
90
|
+
val captionFontFamily = FontFamily(GoogleSansFlexFont, captionVariationSettings)
|
|
91
|
+
|
|
92
|
+
return Typography(
|
|
93
|
+
titleLarge = titleLarge.copy(fontFamily = titleLargeFontFamily),
|
|
94
|
+
titleMedium = titleMedium.copy(fontFamily = titleMediumFontFamily),
|
|
95
|
+
titleSmall = titleSmall.copy(fontFamily = titleSmallFontFamily),
|
|
96
|
+
bodyLarge = bodyLarge.copy(fontFamily = bodyLargeFontFamily),
|
|
97
|
+
bodyMedium = bodyMedium.copy(fontFamily = bodyMediumFontFamily),
|
|
98
|
+
bodySmall = bodySmall.copy(fontFamily = bodySmallFontFamily),
|
|
99
|
+
caption = caption.copy(fontFamily = captionFontFamily),
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Default variable font configurations for using Google Sans Flex in Jetpack Compose Glimmer */
|
|
104
|
+
@Suppress("MentionsGoogle")
|
|
105
|
+
public object GoogleSansFlexTypographyDefaults {
|
|
106
|
+
private val RoundVariationSetting = FontVariation.Setting("ROND", 100.0f)
|
|
107
|
+
|
|
108
|
+
/** Default [TextStyle] for [Typography.titleLarge]. */
|
|
109
|
+
public val TitleLarge: TextStyle =
|
|
110
|
+
TextStyle(
|
|
111
|
+
fontWeight = FontWeight.Normal,
|
|
112
|
+
fontSize = 30.sp,
|
|
113
|
+
lineHeight = 36.sp,
|
|
114
|
+
letterSpacing = DefaultLetterSpacing,
|
|
115
|
+
lineHeightStyle = DefaultLineHeightStyle,
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
/** Default [FontVariation.Settings] for [Typography.titleLarge]. */
|
|
119
|
+
public val TitleLargeVariationSettings: FontVariation.Settings =
|
|
120
|
+
FontVariation.Settings(
|
|
121
|
+
FontVariation.grade(0),
|
|
122
|
+
FontVariation.weight(750),
|
|
123
|
+
FontVariation.slant(0f),
|
|
124
|
+
FontVariation.width(100f),
|
|
125
|
+
FontVariation.opticalSizing(9.sp),
|
|
126
|
+
RoundVariationSetting,
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
/** Default [TextStyle] for [Typography.titleMedium]. */
|
|
130
|
+
public val TitleMedium: TextStyle =
|
|
131
|
+
TextStyle(
|
|
132
|
+
fontWeight = FontWeight.Normal,
|
|
133
|
+
fontSize = 24.sp,
|
|
134
|
+
lineHeight = 28.sp,
|
|
135
|
+
letterSpacing = DefaultLetterSpacing,
|
|
136
|
+
lineHeightStyle = DefaultLineHeightStyle,
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
/** Default [FontVariation.Settings] for [Typography.titleMedium]. */
|
|
140
|
+
public val TitleMediumVariationSettings: FontVariation.Settings =
|
|
141
|
+
FontVariation.Settings(
|
|
142
|
+
FontVariation.grade(0),
|
|
143
|
+
FontVariation.weight(750),
|
|
144
|
+
FontVariation.slant(0f),
|
|
145
|
+
FontVariation.width(100f),
|
|
146
|
+
FontVariation.opticalSizing(9.sp),
|
|
147
|
+
RoundVariationSetting,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
/** Default [TextStyle] for [Typography.titleSmall]. */
|
|
151
|
+
public val TitleSmall: TextStyle =
|
|
152
|
+
TextStyle(
|
|
153
|
+
fontWeight = FontWeight.Normal,
|
|
154
|
+
fontSize = 20.sp,
|
|
155
|
+
lineHeight = 28.sp,
|
|
156
|
+
letterSpacing = DefaultLetterSpacing,
|
|
157
|
+
lineHeightStyle = DefaultLineHeightStyle,
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
/** Default [FontVariation.Settings] for [Typography.titleSmall]. */
|
|
161
|
+
public val TitleSmallVariationSettings: FontVariation.Settings =
|
|
162
|
+
FontVariation.Settings(
|
|
163
|
+
FontVariation.grade(0),
|
|
164
|
+
FontVariation.weight(750),
|
|
165
|
+
FontVariation.slant(0f),
|
|
166
|
+
FontVariation.width(100f),
|
|
167
|
+
FontVariation.opticalSizing(9.sp),
|
|
168
|
+
RoundVariationSetting,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
/** Default [TextStyle] for [Typography.bodyLarge]. */
|
|
172
|
+
public val BodyLarge: TextStyle =
|
|
173
|
+
TextStyle(
|
|
174
|
+
fontWeight = FontWeight.Normal,
|
|
175
|
+
fontSize = 30.sp,
|
|
176
|
+
lineHeight = 36.sp,
|
|
177
|
+
letterSpacing = DefaultLetterSpacing,
|
|
178
|
+
lineHeightStyle = DefaultLineHeightStyle,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
/** Default [FontVariation.Settings] for [Typography.bodyLarge]. */
|
|
182
|
+
public val BodyLargeVariationSettings: FontVariation.Settings =
|
|
183
|
+
FontVariation.Settings(
|
|
184
|
+
FontVariation.grade(0),
|
|
185
|
+
FontVariation.weight(520),
|
|
186
|
+
FontVariation.slant(0f),
|
|
187
|
+
FontVariation.width(100f),
|
|
188
|
+
FontVariation.opticalSizing(9.sp),
|
|
189
|
+
RoundVariationSetting,
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
/** Default [TextStyle] for [Typography.bodyMedium]. */
|
|
193
|
+
public val BodyMedium: TextStyle =
|
|
194
|
+
TextStyle(
|
|
195
|
+
fontWeight = FontWeight.Normal,
|
|
196
|
+
fontSize = 24.sp,
|
|
197
|
+
lineHeight = 36.sp,
|
|
198
|
+
letterSpacing = DefaultLetterSpacing,
|
|
199
|
+
lineHeightStyle = DefaultLineHeightStyle,
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
/** Default [FontVariation.Settings] for [Typography.bodyMedium]. */
|
|
203
|
+
public val BodyMediumVariationSettings: FontVariation.Settings =
|
|
204
|
+
FontVariation.Settings(
|
|
205
|
+
FontVariation.grade(0),
|
|
206
|
+
FontVariation.weight(520),
|
|
207
|
+
FontVariation.slant(0f),
|
|
208
|
+
FontVariation.width(100f),
|
|
209
|
+
FontVariation.opticalSizing(9.sp),
|
|
210
|
+
RoundVariationSetting,
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
/** Default [TextStyle] for [Typography.bodySmall]. */
|
|
214
|
+
public val BodySmall: TextStyle =
|
|
215
|
+
TextStyle(
|
|
216
|
+
fontWeight = FontWeight.Normal,
|
|
217
|
+
fontSize = 20.sp,
|
|
218
|
+
lineHeight = 28.sp,
|
|
219
|
+
letterSpacing = DefaultLetterSpacing,
|
|
220
|
+
lineHeightStyle = DefaultLineHeightStyle,
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
/** Default [FontVariation.Settings] for [Typography.bodySmall]. */
|
|
224
|
+
public val BodySmallVariationSettings: FontVariation.Settings =
|
|
225
|
+
FontVariation.Settings(
|
|
226
|
+
FontVariation.grade(0),
|
|
227
|
+
FontVariation.weight(520),
|
|
228
|
+
FontVariation.slant(0f),
|
|
229
|
+
FontVariation.width(100f),
|
|
230
|
+
FontVariation.opticalSizing(9.sp),
|
|
231
|
+
RoundVariationSetting,
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
/** Default [TextStyle] for [Typography.caption]. */
|
|
235
|
+
public val Caption: TextStyle =
|
|
236
|
+
TextStyle(
|
|
237
|
+
fontWeight = FontWeight.Normal,
|
|
238
|
+
fontSize = 18.sp,
|
|
239
|
+
lineHeight = 24.sp,
|
|
240
|
+
letterSpacing = DefaultLetterSpacing,
|
|
241
|
+
lineHeightStyle = DefaultLineHeightStyle,
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
/** Default [FontVariation.Settings] for [Typography.caption]. */
|
|
245
|
+
public val CaptionVariationSettings: FontVariation.Settings =
|
|
246
|
+
FontVariation.Settings(
|
|
247
|
+
FontVariation.grade(0),
|
|
248
|
+
FontVariation.weight(650),
|
|
249
|
+
FontVariation.slant(0f),
|
|
250
|
+
FontVariation.width(100f),
|
|
251
|
+
FontVariation.opticalSizing(9.sp),
|
|
252
|
+
RoundVariationSetting,
|
|
253
|
+
)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private val GoogleSansFlexFont = GoogleFont("Google Sans Flex")
|
|
257
|
+
|
|
258
|
+
private val DefaultLetterSpacing = 0.sp
|
|
259
|
+
|
|
260
|
+
private val DefaultLineHeightStyle: LineHeightStyle =
|
|
261
|
+
LineHeightStyle(
|
|
262
|
+
alignment = LineHeightStyle.Alignment.Proportional,
|
|
263
|
+
trim = LineHeightStyle.Trim.FirstLineTop,
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
private fun FontFamily(font: GoogleFont, variationSettings: FontVariation.Settings): FontFamily =
|
|
267
|
+
FontFamily(Font(googleFont = font, variationSettings = variationSettings))
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
<br />
|