@jhm1909/ag-kit 0.1.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/.agent/ARCHITECTURE.md +189 -0
- package/.agent/known-registries.json +181 -0
- package/.agent/mcp_config.json +19 -0
- package/.agent/rules/clean-code.md +107 -0
- package/.agent/rules/documents.md +177 -0
- package/.agent/rules/git-workflow.md +68 -0
- package/.agent/rules/nano-banana.md +46 -0
- package/.agent/rules/research.md +35 -0
- package/.agent/rules/skill-loading.md +100 -0
- package/.agent/rules/skill-suggestion.md +47 -0
- package/.agent/rules/testing.md +52 -0
- package/.agent/rules/workflow-advisor.md +108 -0
- package/.agent/rules/workflow-skill-convention.md +127 -0
- package/.agent/skills/ai-engineer/SKILL.md +824 -0
- package/.agent/skills/ai-engineer/references/agentic-patterns.md +329 -0
- package/.agent/skills/ai-engineer/references/evaluation.md +493 -0
- package/.agent/skills/ai-engineer/references/llm.md +490 -0
- package/.agent/skills/ai-engineer/references/rag-advanced.md +444 -0
- package/.agent/skills/ai-engineer/references/serving-optimization.md +531 -0
- package/.agent/skills/ai-engineer/vector-db/README.md +137 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +41 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/backend-developer/SKILL.md +763 -0
- package/.agent/skills/backend-developer/references/general-patterns.md +65 -0
- package/.agent/skills/backend-developer/references/go-echo.md +68 -0
- package/.agent/skills/backend-developer/references/go-gin.md +76 -0
- package/.agent/skills/backend-developer/references/java-springboot.md +83 -0
- package/.agent/skills/backend-developer/references/node-express.md +64 -0
- package/.agent/skills/backend-developer/references/node-nestjs.md +69 -0
- package/.agent/skills/backend-developer/references/python-django.md +67 -0
- package/.agent/skills/backend-developer/references/python-fastapi.md +80 -0
- package/.agent/skills/blockchain-engineer/SKILL.md +975 -0
- package/.agent/skills/blockchain-engineer/references/deployment.md +28 -0
- package/.agent/skills/blockchain-engineer/references/evm.md +14 -0
- package/.agent/skills/blockchain-engineer/references/mechanisms.md +32 -0
- package/.agent/skills/blockchain-engineer/references/solidity.md +32 -0
- package/.agent/skills/business-analysis/SKILL.md +85 -0
- package/.agent/skills/business-analysis/references/best-practices/diagrams.md +141 -0
- package/.agent/skills/business-analysis/references/domains/ai-agent.md +94 -0
- package/.agent/skills/business-analysis/references/domains/blockchain-dapp.md +86 -0
- package/.agent/skills/business-analysis/references/domains/ecommerce.md +77 -0
- package/.agent/skills/business-analysis/references/domains/education.md +42 -0
- package/.agent/skills/business-analysis/references/domains/fintech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/fnb.md +82 -0
- package/.agent/skills/business-analysis/references/domains/healthtech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/internal-tools.md +38 -0
- package/.agent/skills/business-analysis/references/domains/marketplace.md +52 -0
- package/.agent/skills/business-analysis/references/domains/saas.md +36 -0
- package/.agent/skills/business-analysis/references/workflows/collaboration.md +41 -0
- package/.agent/skills/business-analysis/scripts/verify_mermaid.py +86 -0
- package/.agent/skills/business-analysis/templates/brd.md +46 -0
- package/.agent/skills/business-analysis/templates/change-request.md +41 -0
- package/.agent/skills/business-analysis/templates/prd-functional.md +38 -0
- package/.agent/skills/business-analysis/templates/use-case.md +40 -0
- package/.agent/skills/business-analysis/templates/user-story-detailed.md +36 -0
- package/.agent/skills/code-review/SKILL.md +113 -0
- package/.agent/skills/code-review/references/code-review-reception.md +209 -0
- package/.agent/skills/code-review/references/differential_review.md +59 -0
- package/.agent/skills/code-review/references/requesting-code-review.md +105 -0
- package/.agent/skills/code-review/references/spec_compliance.md +43 -0
- package/.agent/skills/code-review/references/verification-before-completion.md +139 -0
- package/.agent/skills/context-engineering/SKILL.md +68 -0
- package/.agent/skills/context-engineering/references/context-compression.md +84 -0
- package/.agent/skills/context-engineering/references/context-degradation.md +93 -0
- package/.agent/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/.agent/skills/context-engineering/references/context-optimization.md +82 -0
- package/.agent/skills/context-engineering/references/evaluation.md +89 -0
- package/.agent/skills/context-engineering/references/memory-systems.md +88 -0
- package/.agent/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/.agent/skills/context-engineering/references/project-development.md +97 -0
- package/.agent/skills/context-engineering/references/tool-design.md +86 -0
- package/.agent/skills/debugging/SKILL.md +60 -0
- package/.agent/skills/debugging/references/defense-in-depth.md +130 -0
- package/.agent/skills/debugging/references/root-cause-tracing.md +177 -0
- package/.agent/skills/debugging/references/systematic-debugging.md +295 -0
- package/.agent/skills/debugging/references/verification-before-completion.md +142 -0
- package/.agent/skills/designer/SKILL.md +159 -0
- package/.agent/skills/designer/concepts/apple-glass.md +48 -0
- package/.agent/skills/designer/concepts/aurora-gradients.md +26 -0
- package/.agent/skills/designer/concepts/bento-grids.md +14 -0
- package/.agent/skills/designer/concepts/claymorphism.md +27 -0
- package/.agent/skills/designer/concepts/neo-brutalism.md +32 -0
- package/.agent/skills/designer/data/app-interface.csv +31 -0
- package/.agent/skills/designer/data/charts.csv +26 -0
- package/.agent/skills/designer/data/colors.csv +162 -0
- package/.agent/skills/designer/data/design.csv +1776 -0
- package/.agent/skills/designer/data/icons.csv +106 -0
- package/.agent/skills/designer/data/landing.csv +35 -0
- package/.agent/skills/designer/data/products.csv +162 -0
- package/.agent/skills/designer/data/react-performance.csv +45 -0
- package/.agent/skills/designer/data/styles.csv +85 -0
- package/.agent/skills/designer/data/typography.csv +74 -0
- package/.agent/skills/designer/data/ui-reasoning.csv +162 -0
- package/.agent/skills/designer/data/ux-guidelines.csv +100 -0
- package/.agent/skills/designer/references/accessibility.md +172 -0
- package/.agent/skills/designer/references/branding.md +88 -0
- package/.agent/skills/designer/references/color-theory.md +139 -0
- package/.agent/skills/designer/references/creation.md +118 -0
- package/.agent/skills/designer/references/design-systems.md +219 -0
- package/.agent/skills/designer/references/frontend_design_aesthetics.md +57 -0
- package/.agent/skills/designer/references/layout.md +200 -0
- package/.agent/skills/designer/references/motion.md +92 -0
- package/.agent/skills/designer/references/review.md +100 -0
- package/.agent/skills/designer/references/trends.md +209 -0
- package/.agent/skills/designer/references/typography.md +190 -0
- package/.agent/skills/designer/scripts/remove_background.py +135 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/core.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/design_system.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/core.py +217 -0
- package/.agent/skills/designer/scripts/ui-search/design_system.py +1067 -0
- package/.agent/skills/designer/scripts/ui-search/search.py +114 -0
- package/.agent/skills/designer/templates/design-motion-spec.md +30 -0
- package/.agent/skills/devops-engineer/SKILL.md +90 -0
- package/.agent/skills/devops-engineer/docker-compose/README.md +47 -0
- package/.agent/skills/devops-engineer/references/ci-cd-pipelines.md +76 -0
- package/.agent/skills/devops-engineer/references/cloud-providers.md +57 -0
- package/.agent/skills/devops-engineer/references/codebase-normalization.md +104 -0
- package/.agent/skills/devops-engineer/references/container-orchestration.md +69 -0
- package/.agent/skills/devops-engineer/references/iac-tools.md +63 -0
- package/.agent/skills/devops-engineer/references/observability-security.md +45 -0
- package/.agent/skills/devops-engineer/references/vercel-supabase.md +17 -0
- package/.agent/skills/devops-engineer/templates/release-notes.md +8 -0
- package/.agent/skills/frontend-developer/SKILL.md +125 -0
- package/.agent/skills/frontend-developer/react-nextjs/README.md +90 -0
- package/.agent/skills/frontend-developer/references/angular.md +52 -0
- package/.agent/skills/frontend-developer/references/composition_patterns.md +60 -0
- package/.agent/skills/frontend-developer/references/core-performance.md +68 -0
- package/.agent/skills/frontend-developer/references/modern-signals.md +43 -0
- package/.agent/skills/frontend-developer/references/react_performance_rules.md +55 -0
- package/.agent/skills/frontend-developer/references/vue-nuxt.md +55 -0
- package/.agent/skills/frontend-developer/scripts/validate_compliance.py +65 -0
- package/.agent/skills/frontend-developer/threejs/README.md +89 -0
- package/.agent/skills/frontend-developer/threejs/animation.md +552 -0
- package/.agent/skills/frontend-developer/threejs/fundamentals.md +488 -0
- package/.agent/skills/frontend-developer/threejs/geometry.md +548 -0
- package/.agent/skills/frontend-developer/threejs/interaction.md +660 -0
- package/.agent/skills/frontend-developer/threejs/lighting.md +481 -0
- package/.agent/skills/frontend-developer/threejs/loaders.md +623 -0
- package/.agent/skills/frontend-developer/threejs/materials.md +520 -0
- package/.agent/skills/frontend-developer/threejs/postprocessing.md +602 -0
- package/.agent/skills/frontend-developer/threejs/router.json +181 -0
- package/.agent/skills/frontend-developer/threejs/shaders.md +642 -0
- package/.agent/skills/frontend-developer/threejs/textures.md +628 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/lead-architect/SKILL.md +85 -0
- package/.agent/skills/lead-architect/references/application-architecture.md +70 -0
- package/.agent/skills/lead-architect/references/infrastructure.md +51 -0
- package/.agent/skills/lead-architect/references/process.md +42 -0
- package/.agent/skills/lead-architect/references/system-architecture.md +62 -0
- package/.agent/skills/lead-architect/references/web-fullstack.md +82 -0
- package/.agent/skills/lead-architect/templates/adr.md +62 -0
- package/.agent/skills/lead-architect/templates/rfc.md +46 -0
- package/.agent/skills/lead-architect/templates/sdd.md +62 -0
- package/.agent/skills/lead-architect/templates/technical-spec.md +61 -0
- package/.agent/skills/marketer/SKILL.md +66 -0
- package/.agent/skills/marketer/remotion-best-practices/SKILL.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/3d.md +86 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/animations.md +29 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets.md +78 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/audio.md +172 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/can-decode.md +75 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/charts.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/compositions.md +146 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/display-captions.md +126 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/extract-frames.md +229 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/fonts.md +152 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/gifs.md +138 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/images.md +130 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/lottie.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-text.md +143 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/sequencing.md +106 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/timing.md +179 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transitions.md +122 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/trimming.md +53 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/videos.md +171 -0
- package/.agent/skills/mcp-builder/SKILL.md +76 -0
- package/.agent/skills/mcp-builder/references/evaluation.md +602 -0
- package/.agent/skills/mcp-builder/references/mcp_best_practices.md +249 -0
- package/.agent/skills/mcp-builder/references/node_mcp_server.md +970 -0
- package/.agent/skills/mcp-builder/references/python_mcp_server.md +719 -0
- package/.agent/skills/mobile-developer/SKILL.md +83 -0
- package/.agent/skills/mobile-developer/api-routes/SKILL.md +389 -0
- package/.agent/skills/mobile-developer/building-ui/SKILL.md +335 -0
- package/.agent/skills/mobile-developer/building-ui/references/animations.md +220 -0
- package/.agent/skills/mobile-developer/building-ui/references/controls.md +270 -0
- package/.agent/skills/mobile-developer/building-ui/references/form-sheet.md +227 -0
- package/.agent/skills/mobile-developer/building-ui/references/gradients.md +106 -0
- package/.agent/skills/mobile-developer/building-ui/references/icons.md +213 -0
- package/.agent/skills/mobile-developer/building-ui/references/media.md +198 -0
- package/.agent/skills/mobile-developer/building-ui/references/route-structure.md +229 -0
- package/.agent/skills/mobile-developer/building-ui/references/search.md +248 -0
- package/.agent/skills/mobile-developer/building-ui/references/storage.md +121 -0
- package/.agent/skills/mobile-developer/building-ui/references/tabs.md +368 -0
- package/.agent/skills/mobile-developer/building-ui/references/visual-effects.md +197 -0
- package/.agent/skills/mobile-developer/building-ui/references/webgpu-three.md +605 -0
- package/.agent/skills/mobile-developer/cicd-workflows/SKILL.md +107 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/fetch.js +109 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/package.json +11 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/validate.js +84 -0
- package/.agent/skills/mobile-developer/data-fetching/SKILL.md +508 -0
- package/.agent/skills/mobile-developer/deployment/SKILL.md +207 -0
- package/.agent/skills/mobile-developer/deployment/references/app-store-metadata.md +479 -0
- package/.agent/skills/mobile-developer/deployment/references/ios-app-store.md +355 -0
- package/.agent/skills/mobile-developer/deployment/references/play-store.md +246 -0
- package/.agent/skills/mobile-developer/deployment/references/testflight.md +58 -0
- package/.agent/skills/mobile-developer/deployment/references/workflows.md +200 -0
- package/.agent/skills/mobile-developer/dev-client/SKILL.md +181 -0
- package/.agent/skills/mobile-developer/tailwind-setup/SKILL.md +501 -0
- package/.agent/skills/mobile-developer/upgrading-expo/SKILL.md +116 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/new-architecture.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-19.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-compiler.md +59 -0
- package/.agent/skills/mobile-developer/use-dom/SKILL.md +434 -0
- package/.agent/skills/modern-python/SKILL.md +122 -0
- package/.agent/skills/project-manager/SKILL.md +110 -0
- package/.agent/skills/project-manager/references/ba-collaboration.md +62 -0
- package/.agent/skills/project-manager/references/discovery_process.md +52 -0
- package/.agent/skills/project-manager/references/jobs_to_be_done.md +51 -0
- package/.agent/skills/project-manager/references/prd_development.md +52 -0
- package/.agent/skills/project-manager/references/rules-guide.md +55 -0
- package/.agent/skills/project-manager/references/skill-creation.md +98 -0
- package/.agent/skills/project-manager/references/strategic-frameworks.md +62 -0
- package/.agent/skills/project-manager/references/task-decomposition.md +194 -0
- package/.agent/skills/project-manager/references/workflows-guide.md +44 -0
- package/.agent/skills/project-manager/router.json +160 -0
- package/.agent/skills/project-manager/scripts/compare_skill.py +177 -0
- package/.agent/skills/project-manager/scripts/encoding_utils.py +36 -0
- package/.agent/skills/project-manager/scripts/init_skill.py +190 -0
- package/.agent/skills/project-manager/scripts/quick_validate.py +123 -0
- package/.agent/skills/project-manager/templates/pm-strategy-one-pager.md +6 -0
- package/.agent/skills/project-manager/templates/prd-strategic.md +38 -0
- package/.agent/skills/project-manager/templates/skill-questionnaire.md +118 -0
- package/.agent/skills/project-manager/templates/user-story-simple.md +14 -0
- package/.agent/skills/prompt-engineer/SKILL.md +319 -0
- package/.agent/skills/prompt-engineer/skill-creator/README.md +47 -0
- package/.agent/skills/qa-tester/SKILL.md +142 -0
- package/.agent/skills/qa-tester/assets/README.md +8 -0
- package/.agent/skills/qa-tester/references/accessibility_testing.md +35 -0
- package/.agent/skills/qa-tester/references/agent_browser.md +38 -0
- package/.agent/skills/qa-tester/references/automation/api_testing.md +23 -0
- package/.agent/skills/qa-tester/references/automation/best_practices.md +14 -0
- package/.agent/skills/qa-tester/references/automation/jest_vitest.md +26 -0
- package/.agent/skills/qa-tester/references/automation/playwright.md +30 -0
- package/.agent/skills/qa-tester/references/e2e_testing.md +46 -0
- package/.agent/skills/qa-tester/references/integration_testing.md +39 -0
- package/.agent/skills/qa-tester/references/performance_testing.md +44 -0
- package/.agent/skills/qa-tester/references/property_based_testing.md +44 -0
- package/.agent/skills/qa-tester/references/security_audit.md +53 -0
- package/.agent/skills/qa-tester/references/security_testing.md +30 -0
- package/.agent/skills/qa-tester/references/sharp_edges.md +49 -0
- package/.agent/skills/qa-tester/references/static_analysis.md +52 -0
- package/.agent/skills/qa-tester/references/supply_chain_audit.md +54 -0
- package/.agent/skills/qa-tester/references/test_case_standards.md +96 -0
- package/.agent/skills/qa-tester/references/test_report_template.md +32 -0
- package/.agent/skills/qa-tester/references/unit_testing.md +50 -0
- package/.agent/skills/qa-tester/references/visual_testing.md +32 -0
- package/.agent/skills/qa-tester/templates/uat-plan.md +34 -0
- package/.agent/skills/research-first/SKILL.md +118 -0
- package/.agent/skills-manifest.json +264 -0
- package/.agent/workflows/absorb.md +176 -0
- package/.agent/workflows/bootstrap.md +91 -0
- package/.agent/workflows/brainstorm.md +168 -0
- package/.agent/workflows/break-tasks.md +77 -0
- package/.agent/workflows/commit.md +349 -0
- package/.agent/workflows/custom-behavior.md +64 -0
- package/.agent/workflows/debug.md +65 -0
- package/.agent/workflows/development.md +49 -0
- package/.agent/workflows/documentation.md +221 -0
- package/.agent/workflows/gen-tests.md +53 -0
- package/.agent/workflows/guide.md +196 -0
- package/.agent/workflows/implement-feature.md +182 -0
- package/.agent/workflows/install-skill.md +193 -0
- package/.agent/workflows/qa.md +54 -0
- package/.agent/workflows/ui-ux-design.md +108 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/cli/index.js +345 -0
- package/cli/migrate-skills.js +113 -0
- package/cli/verify.js +291 -0
- package/package.json +49 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
# Native Tabs
|
|
2
|
+
|
|
3
|
+
Always prefer NativeTabs from 'expo-router/unstable-native-tabs' for the best iOS experience.
|
|
4
|
+
|
|
5
|
+
**Requires SDK 54+**
|
|
6
|
+
|
|
7
|
+
## Basic Usage
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import {
|
|
11
|
+
NativeTabs,
|
|
12
|
+
Icon,
|
|
13
|
+
Label,
|
|
14
|
+
Badge,
|
|
15
|
+
} from "expo-router/unstable-native-tabs";
|
|
16
|
+
|
|
17
|
+
export default function TabLayout() {
|
|
18
|
+
return (
|
|
19
|
+
<NativeTabs minimizeBehavior="onScrollDown">
|
|
20
|
+
<NativeTabs.Trigger name="index">
|
|
21
|
+
<Label>Home</Label>
|
|
22
|
+
<Icon sf="house.fill" />
|
|
23
|
+
<Badge>9+</Badge>
|
|
24
|
+
</NativeTabs.Trigger>
|
|
25
|
+
<NativeTabs.Trigger name="settings">
|
|
26
|
+
<Icon sf="gear" />
|
|
27
|
+
<Label>Settings</Label>
|
|
28
|
+
</NativeTabs.Trigger>
|
|
29
|
+
<NativeTabs.Trigger name="(search)" role="search">
|
|
30
|
+
<Label>Search</Label>
|
|
31
|
+
</NativeTabs.Trigger>
|
|
32
|
+
</NativeTabs>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Rules
|
|
38
|
+
|
|
39
|
+
- You must include a trigger for each tab
|
|
40
|
+
- The `NativeTabs.Trigger` 'name' must match the route name, including parentheses (e.g. `<NativeTabs.Trigger name="(search)">`)
|
|
41
|
+
- Prefer search tab to be last in the list so it can combine with the search bar
|
|
42
|
+
- Use the 'role' prop for common tab types
|
|
43
|
+
|
|
44
|
+
## Platform Features
|
|
45
|
+
|
|
46
|
+
Native Tabs use platform-specific tab bar implementations:
|
|
47
|
+
|
|
48
|
+
- **iOS 26+**: Liquid glass effects with system-native appearance
|
|
49
|
+
- **Android**: Material 3 bottom navigation
|
|
50
|
+
- Better performance and native feel
|
|
51
|
+
|
|
52
|
+
## Icon Component
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
// SF Symbol only (iOS)
|
|
56
|
+
<Icon sf="house.fill" />
|
|
57
|
+
|
|
58
|
+
// With Android drawable
|
|
59
|
+
<Icon sf="house.fill" drawable="ic_home" />
|
|
60
|
+
|
|
61
|
+
// Custom image source
|
|
62
|
+
<Icon src={require('./icon.png')} />
|
|
63
|
+
|
|
64
|
+
// State variants (default/selected)
|
|
65
|
+
<Icon sf={{ default: "house", selected: "house.fill" }} />
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Label Component
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
// Basic label
|
|
72
|
+
<Label>Home</Label>
|
|
73
|
+
|
|
74
|
+
// Hidden label (icon only)
|
|
75
|
+
<Label hidden>Home</Label>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Badge Component
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
// Numeric badge
|
|
82
|
+
<Badge>9+</Badge>
|
|
83
|
+
|
|
84
|
+
// Dot indicator (empty badge)
|
|
85
|
+
<Badge />
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## iOS 26 Features
|
|
89
|
+
|
|
90
|
+
### Liquid Glass Tab Bar
|
|
91
|
+
|
|
92
|
+
The tab bar automatically adopts liquid glass appearance on iOS 26+.
|
|
93
|
+
|
|
94
|
+
### Minimize on Scroll
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
<NativeTabs minimizeBehavior="onScrollDown">
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Search Tab
|
|
101
|
+
|
|
102
|
+
Add a dedicated search tab that integrates with the tab bar search field:
|
|
103
|
+
|
|
104
|
+
```tsx
|
|
105
|
+
<NativeTabs.Trigger name="(search)" role="search">
|
|
106
|
+
<Label>Search</Label>
|
|
107
|
+
</NativeTabs.Trigger>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Note**: Place search tab last for best UX.
|
|
111
|
+
|
|
112
|
+
### Role Prop
|
|
113
|
+
|
|
114
|
+
Use semantic roles for special tab types:
|
|
115
|
+
|
|
116
|
+
```tsx
|
|
117
|
+
<NativeTabs.Trigger name="search" role="search" />
|
|
118
|
+
<NativeTabs.Trigger name="favorites" role="favorites" />
|
|
119
|
+
<NativeTabs.Trigger name="more" role="more" />
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Available roles: `search` | `more` | `favorites` | `bookmarks` | `contacts` | `downloads` | `featured` | `history` | `mostRecent` | `mostViewed` | `recents` | `topRated`
|
|
123
|
+
|
|
124
|
+
## Customization
|
|
125
|
+
|
|
126
|
+
### Tint Color
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
<NativeTabs tintColor="#007AFF">
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Dynamic Colors (iOS)
|
|
133
|
+
|
|
134
|
+
Use DynamicColorIOS for colors that adapt to liquid glass:
|
|
135
|
+
|
|
136
|
+
```tsx
|
|
137
|
+
import { DynamicColorIOS, Platform } from 'react-native';
|
|
138
|
+
|
|
139
|
+
const adaptiveBlue = Platform.select({
|
|
140
|
+
ios: DynamicColorIOS({ light: '#007AFF', dark: '#0A84FF' }),
|
|
141
|
+
default: '#007AFF',
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
<NativeTabs tintColor={adaptiveBlue}>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Conditional Tabs
|
|
148
|
+
|
|
149
|
+
Hide tabs conditionally:
|
|
150
|
+
|
|
151
|
+
```tsx
|
|
152
|
+
<NativeTabs.Trigger name="admin" hidden={!isAdmin}>
|
|
153
|
+
<Label>Admin</Label>
|
|
154
|
+
<Icon sf="shield.fill" />
|
|
155
|
+
</NativeTabs.Trigger>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Behavior Options
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
<NativeTabs.Trigger
|
|
162
|
+
name="home"
|
|
163
|
+
disablePopToTop // Don't pop stack when tapping active tab
|
|
164
|
+
disableScrollToTop // Don't scroll to top when tapping active tab
|
|
165
|
+
>
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Using Vector Icons
|
|
169
|
+
|
|
170
|
+
If you must use @expo/vector-icons instead of SF Symbols:
|
|
171
|
+
|
|
172
|
+
```tsx
|
|
173
|
+
import { VectorIcon } from "expo-router/unstable-native-tabs";
|
|
174
|
+
import Ionicons from "@expo/vector-icons/Ionicons";
|
|
175
|
+
|
|
176
|
+
<NativeTabs.Trigger name="home">
|
|
177
|
+
<VectorIcon vector={Ionicons} name="home" />
|
|
178
|
+
<Label>Home</Label>
|
|
179
|
+
</NativeTabs.Trigger>;
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Prefer SF Symbols over vector icons for native feel on Apple platforms.**
|
|
183
|
+
|
|
184
|
+
## Structure with Stacks
|
|
185
|
+
|
|
186
|
+
Native tabs don't render headers. Nest Stacks inside each tab for navigation headers:
|
|
187
|
+
|
|
188
|
+
```tsx
|
|
189
|
+
// app/(tabs)/_layout.tsx
|
|
190
|
+
import { NativeTabs, Icon, Label } from "expo-router/unstable-native-tabs";
|
|
191
|
+
|
|
192
|
+
export default function TabLayout() {
|
|
193
|
+
return (
|
|
194
|
+
<NativeTabs>
|
|
195
|
+
<NativeTabs.Trigger name="(home)">
|
|
196
|
+
<Label>Home</Label>
|
|
197
|
+
<Icon sf="house.fill" />
|
|
198
|
+
</NativeTabs.Trigger>
|
|
199
|
+
</NativeTabs>
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// app/(tabs)/(home)/_layout.tsx
|
|
204
|
+
import Stack from "expo-router/stack";
|
|
205
|
+
|
|
206
|
+
export default function HomeStack() {
|
|
207
|
+
return (
|
|
208
|
+
<Stack>
|
|
209
|
+
<Stack.Screen
|
|
210
|
+
name="index"
|
|
211
|
+
options={{ title: "Home", headerLargeTitle: true }}
|
|
212
|
+
/>
|
|
213
|
+
<Stack.Screen name="details" options={{ title: "Details" }} />
|
|
214
|
+
</Stack>
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Migration from JS Tabs
|
|
220
|
+
|
|
221
|
+
### Before (JS Tabs)
|
|
222
|
+
|
|
223
|
+
```tsx
|
|
224
|
+
import { Tabs } from "expo-router";
|
|
225
|
+
|
|
226
|
+
export default function TabLayout() {
|
|
227
|
+
return (
|
|
228
|
+
<Tabs>
|
|
229
|
+
<Tabs.Screen
|
|
230
|
+
name="index"
|
|
231
|
+
options={{
|
|
232
|
+
title: "Home",
|
|
233
|
+
tabBarIcon: ({ color }) => (
|
|
234
|
+
<IconSymbol name="house.fill" color={color} />
|
|
235
|
+
),
|
|
236
|
+
}}
|
|
237
|
+
/>
|
|
238
|
+
<Tabs.Screen
|
|
239
|
+
name="settings"
|
|
240
|
+
options={{
|
|
241
|
+
title: "Settings",
|
|
242
|
+
tabBarIcon: ({ color }) => <IconSymbol name="gear" color={color} />,
|
|
243
|
+
}}
|
|
244
|
+
/>
|
|
245
|
+
</Tabs>
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### After (Native Tabs)
|
|
251
|
+
|
|
252
|
+
```tsx
|
|
253
|
+
import { NativeTabs, Icon, Label } from "expo-router/unstable-native-tabs";
|
|
254
|
+
|
|
255
|
+
export default function TabLayout() {
|
|
256
|
+
return (
|
|
257
|
+
<NativeTabs>
|
|
258
|
+
<NativeTabs.Trigger name="index">
|
|
259
|
+
<Label>Home</Label>
|
|
260
|
+
<Icon sf="house.fill" />
|
|
261
|
+
</NativeTabs.Trigger>
|
|
262
|
+
<NativeTabs.Trigger name="settings">
|
|
263
|
+
<Label>Settings</Label>
|
|
264
|
+
<Icon sf="gear" />
|
|
265
|
+
</NativeTabs.Trigger>
|
|
266
|
+
</NativeTabs>
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Key Differences
|
|
272
|
+
|
|
273
|
+
| JS Tabs | Native Tabs |
|
|
274
|
+
| -------------------------- | ------------------------- |
|
|
275
|
+
| `<Tabs.Screen>` | `<NativeTabs.Trigger>` |
|
|
276
|
+
| `options={{ title }}` | `<Label>Title</Label>` |
|
|
277
|
+
| `options={{ tabBarIcon }}` | `<Icon sf="symbol" />` |
|
|
278
|
+
| Props-based API | React component-based API |
|
|
279
|
+
| `tabBarBadge` option | `<Badge>` component |
|
|
280
|
+
|
|
281
|
+
### Migration Steps
|
|
282
|
+
|
|
283
|
+
1. **Change imports**
|
|
284
|
+
|
|
285
|
+
```tsx
|
|
286
|
+
// Remove
|
|
287
|
+
import { Tabs } from "expo-router";
|
|
288
|
+
|
|
289
|
+
// Add
|
|
290
|
+
import {
|
|
291
|
+
NativeTabs,
|
|
292
|
+
Icon,
|
|
293
|
+
Label,
|
|
294
|
+
Badge,
|
|
295
|
+
} from "expo-router/unstable-native-tabs";
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
2. **Replace Tabs with NativeTabs**
|
|
299
|
+
|
|
300
|
+
```tsx
|
|
301
|
+
// Before
|
|
302
|
+
<Tabs screenOptions={{ ... }}>
|
|
303
|
+
|
|
304
|
+
// After
|
|
305
|
+
<NativeTabs>
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
3. **Convert each Screen to Trigger**
|
|
309
|
+
|
|
310
|
+
```tsx
|
|
311
|
+
// Before
|
|
312
|
+
<Tabs.Screen
|
|
313
|
+
name="home"
|
|
314
|
+
options={{
|
|
315
|
+
title: 'Home',
|
|
316
|
+
tabBarIcon: ({ color }) => <Icon name="house" color={color} />,
|
|
317
|
+
tabBarBadge: 3,
|
|
318
|
+
}}
|
|
319
|
+
/>
|
|
320
|
+
|
|
321
|
+
// After
|
|
322
|
+
<NativeTabs.Trigger name="home">
|
|
323
|
+
<Label>Home</Label>
|
|
324
|
+
<Icon sf="house.fill" />
|
|
325
|
+
<Badge>3</Badge>
|
|
326
|
+
</NativeTabs.Trigger>
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
4. **Move headers to nested Stack** - Native tabs don't render headers
|
|
330
|
+
```
|
|
331
|
+
app/
|
|
332
|
+
(tabs)/
|
|
333
|
+
_layout.tsx <- NativeTabs
|
|
334
|
+
(home)/
|
|
335
|
+
_layout.tsx <- Stack with headers
|
|
336
|
+
index.tsx
|
|
337
|
+
(settings)/
|
|
338
|
+
_layout.tsx <- Stack with headers
|
|
339
|
+
index.tsx
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
## Limitations
|
|
343
|
+
|
|
344
|
+
- **Android**: Maximum 5 tabs (Material Design constraint)
|
|
345
|
+
- **Nesting**: Native tabs cannot nest inside other native tabs
|
|
346
|
+
- **Tab bar height**: Cannot be measured programmatically
|
|
347
|
+
- **FlatList transparency**: Use `disableTransparentOnScrollEdge` to fix issues
|
|
348
|
+
|
|
349
|
+
## Keyboard Handling (Android)
|
|
350
|
+
|
|
351
|
+
Configure in app.json:
|
|
352
|
+
|
|
353
|
+
```json
|
|
354
|
+
{
|
|
355
|
+
"expo": {
|
|
356
|
+
"android": {
|
|
357
|
+
"softwareKeyboardLayoutMode": "resize"
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Common Issues
|
|
364
|
+
|
|
365
|
+
1. **Icons not showing on Android**: Add `drawable` prop or use `VectorIcon`
|
|
366
|
+
2. **Headers missing**: Nest a Stack inside each tab group
|
|
367
|
+
3. **Trigger name mismatch**: Ensure `name` matches exact route name including parentheses
|
|
368
|
+
4. **Badge not visible**: Badge must be a child of Trigger, not a prop
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Visual Effects
|
|
2
|
+
|
|
3
|
+
## Backdrop Blur
|
|
4
|
+
|
|
5
|
+
Use `expo-blur` for blur effects. Prefer systemMaterial tints as they adapt to dark mode.
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { BlurView } from "expo-blur";
|
|
9
|
+
|
|
10
|
+
<BlurView tint="systemMaterial" intensity={100} />;
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Tint Options
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
// System materials (adapt to dark mode)
|
|
17
|
+
<BlurView tint="systemMaterial" />
|
|
18
|
+
<BlurView tint="systemThinMaterial" />
|
|
19
|
+
<BlurView tint="systemUltraThinMaterial" />
|
|
20
|
+
<BlurView tint="systemThickMaterial" />
|
|
21
|
+
<BlurView tint="systemChromeMaterial" />
|
|
22
|
+
|
|
23
|
+
// Basic tints
|
|
24
|
+
<BlurView tint="light" />
|
|
25
|
+
<BlurView tint="dark" />
|
|
26
|
+
<BlurView tint="default" />
|
|
27
|
+
|
|
28
|
+
// Prominent (more visible)
|
|
29
|
+
<BlurView tint="prominent" />
|
|
30
|
+
|
|
31
|
+
// Extra light/dark
|
|
32
|
+
<BlurView tint="extraLight" />
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Intensity
|
|
36
|
+
|
|
37
|
+
Control blur strength with `intensity` (0-100):
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
<BlurView tint="systemMaterial" intensity={50} /> // Subtle
|
|
41
|
+
<BlurView tint="systemMaterial" intensity={100} /> // Full
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Rounded Corners
|
|
45
|
+
|
|
46
|
+
BlurView requires `overflow: 'hidden'` to clip rounded corners:
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
<BlurView
|
|
50
|
+
tint="systemMaterial"
|
|
51
|
+
intensity={100}
|
|
52
|
+
style={{
|
|
53
|
+
borderRadius: 16,
|
|
54
|
+
overflow: 'hidden',
|
|
55
|
+
}}
|
|
56
|
+
/>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Overlay Pattern
|
|
60
|
+
|
|
61
|
+
Common pattern for overlaying blur on content:
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
<View style={{ position: 'relative' }}>
|
|
65
|
+
<Image source={{ uri: '...' }} style={{ width: '100%', height: 200 }} />
|
|
66
|
+
<BlurView
|
|
67
|
+
tint="systemUltraThinMaterial"
|
|
68
|
+
intensity={80}
|
|
69
|
+
style={{
|
|
70
|
+
position: 'absolute',
|
|
71
|
+
bottom: 0,
|
|
72
|
+
left: 0,
|
|
73
|
+
right: 0,
|
|
74
|
+
padding: 16,
|
|
75
|
+
}}
|
|
76
|
+
>
|
|
77
|
+
<Text style={{ color: 'white' }}>Caption</Text>
|
|
78
|
+
</BlurView>
|
|
79
|
+
</View>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Glass Effects (iOS 26+)
|
|
83
|
+
|
|
84
|
+
Use `expo-glass-effect` for liquid glass backdrops on iOS 26+.
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
import { GlassView } from "expo-glass-effect";
|
|
88
|
+
|
|
89
|
+
<GlassView style={{ borderRadius: 16, padding: 16 }}>
|
|
90
|
+
<Text>Content inside glass</Text>
|
|
91
|
+
</GlassView>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Interactive Glass
|
|
95
|
+
|
|
96
|
+
Add `isInteractive` for buttons and pressable glass:
|
|
97
|
+
|
|
98
|
+
```tsx
|
|
99
|
+
import { GlassView } from "expo-glass-effect";
|
|
100
|
+
import { SymbolView } from "expo-symbols";
|
|
101
|
+
import { PlatformColor } from "react-native";
|
|
102
|
+
|
|
103
|
+
<GlassView isInteractive style={{ borderRadius: 50 }}>
|
|
104
|
+
<Pressable style={{ padding: 12 }} onPress={handlePress}>
|
|
105
|
+
<SymbolView name="plus" tintColor={PlatformColor("label")} size={36} />
|
|
106
|
+
</Pressable>
|
|
107
|
+
</GlassView>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Glass Buttons
|
|
111
|
+
|
|
112
|
+
Create liquid glass buttons:
|
|
113
|
+
|
|
114
|
+
```tsx
|
|
115
|
+
function GlassButton({ icon, onPress }) {
|
|
116
|
+
return (
|
|
117
|
+
<GlassView isInteractive style={{ borderRadius: 50 }}>
|
|
118
|
+
<Pressable style={{ padding: 12 }} onPress={onPress}>
|
|
119
|
+
<SymbolView name={icon} tintColor={PlatformColor("label")} size={24} />
|
|
120
|
+
</Pressable>
|
|
121
|
+
</GlassView>
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Usage
|
|
126
|
+
<GlassButton icon="plus" onPress={handleAdd} />
|
|
127
|
+
<GlassButton icon="gear" onPress={handleSettings} />
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Glass Card
|
|
131
|
+
|
|
132
|
+
```tsx
|
|
133
|
+
<GlassView style={{ borderRadius: 20, padding: 20 }}>
|
|
134
|
+
<Text style={{ fontSize: 18, fontWeight: '600', color: PlatformColor("label") }}>
|
|
135
|
+
Card Title
|
|
136
|
+
</Text>
|
|
137
|
+
<Text style={{ color: PlatformColor("secondaryLabel"), marginTop: 8 }}>
|
|
138
|
+
Card content goes here
|
|
139
|
+
</Text>
|
|
140
|
+
</GlassView>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Checking Availability
|
|
144
|
+
|
|
145
|
+
```tsx
|
|
146
|
+
import { isLiquidGlassAvailable } from "expo-glass-effect";
|
|
147
|
+
|
|
148
|
+
if (isLiquidGlassAvailable()) {
|
|
149
|
+
// Use GlassView
|
|
150
|
+
} else {
|
|
151
|
+
// Fallback to BlurView or solid background
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Fallback Pattern
|
|
156
|
+
|
|
157
|
+
```tsx
|
|
158
|
+
import { GlassView, isLiquidGlassAvailable } from "expo-glass-effect";
|
|
159
|
+
import { BlurView } from "expo-blur";
|
|
160
|
+
|
|
161
|
+
function AdaptiveGlass({ children, style }) {
|
|
162
|
+
if (isLiquidGlassAvailable()) {
|
|
163
|
+
return <GlassView style={style}>{children}</GlassView>;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return (
|
|
167
|
+
<BlurView tint="systemMaterial" intensity={80} style={style}>
|
|
168
|
+
{children}
|
|
169
|
+
</BlurView>
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Sheet with Glass Background
|
|
175
|
+
|
|
176
|
+
Make sheet backgrounds liquid glass on iOS 26+:
|
|
177
|
+
|
|
178
|
+
```tsx
|
|
179
|
+
<Stack.Screen
|
|
180
|
+
name="sheet"
|
|
181
|
+
options={{
|
|
182
|
+
presentation: "formSheet",
|
|
183
|
+
sheetGrabberVisible: true,
|
|
184
|
+
sheetAllowedDetents: [0.5, 1.0],
|
|
185
|
+
contentStyle: { backgroundColor: "transparent" },
|
|
186
|
+
}}
|
|
187
|
+
/>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Best Practices
|
|
191
|
+
|
|
192
|
+
- Use `systemMaterial` tints for automatic dark mode support
|
|
193
|
+
- Always set `overflow: 'hidden'` on BlurView for rounded corners
|
|
194
|
+
- Use `isInteractive` on GlassView for buttons and pressables
|
|
195
|
+
- Check `isLiquidGlassAvailable()` and provide fallbacks
|
|
196
|
+
- Avoid nesting blur views (performance impact)
|
|
197
|
+
- Keep blur intensity reasonable (50-100) for readability
|