Erste Schritte
Kopiere einen Setup-Prompt mit den Installationsschritten und dem vollständigen Markdown-Guide für dieses Plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-sheets`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/docs/plugins/sheets/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
Installation
Abschnitt mit dem Titel „Installation“Du kannst unser KI-gestütztes Setup nutzen, um das Plugin zu installieren. Füge die Capgo Skills mit dem folgenden Befehl deinem KI-Tool hinzu:
npx skills add https://github.com/Cap-go/capgo-skills --skill capacitor-pluginsNutze dann diesen Prompt:
Use the `capacitor-plugins` skill from `Cap-go/capgo-skills` to install the `@capgo/capacitor-sheets` plugin in my project.Wenn du ein manuelles Setup bevorzugst, installiere das Plugin mit den folgenden Befehlen und befolge die plattformspezifischen Anweisungen unten:
-
Paket installieren
Terminalfenster bun add @capgo/capacitor-sheets -
Web-Komponenten registrieren
import '@capgo/capacitor-sheets'; -
Viewport-Einstellung für Safe Areas hinzufügen
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> -
Ein Sheet rendern
<cap-sheet-trigger for="booking-sheet" action="present">Open route</cap-sheet-trigger><cap-sheet id="booking-sheet" detents="18em 32em" content-placement="bottom"><cap-sheet-portal><cap-sheet-view><cap-sheet-backdrop></cap-sheet-backdrop><cap-sheet-content class="route-sheet"><cap-sheet-bleeding-background></cap-sheet-bleeding-background><cap-sheet-handle></cap-sheet-handle><cap-sheet-title>Evening route</cap-sheet-title><cap-sheet-description>Choose a route and confirm pickup.</cap-sheet-description><cap-sheet-trigger action="dismiss">Done</cap-sheet-trigger></cap-sheet-content></cap-sheet-view></cap-sheet-portal></cap-sheet>.route-sheet {width: min(100%, 34em);padding: 0 1.25em 1.25em;}
Häufige Stolperfallen
Abschnitt „Häufige Fallstricke“- Komponenten registrieren: importiere
@capgo/capacitor-sheetseinmal beim Bootstrap, sonst werden die Elemente nicht upgegradet. - Viewport-Anpassung: fehlt
viewport-fit=coverstört das Safe-Area-Padding auf Smartphones mit Notch. - Tastatur: Aktivieren Sie die dokumentierte Fokus-Scroll-Prävention, wenn Eingabefelder in Bottom Sheets platziert sind.
Capacitor Sichere Bereiche
Abschnitt mit dem Titel „Capacitor Safe Areas“Safe Areas sind standardmäßig über safe-area="auto"aktiviert. Die Sheet-Viewport liest sowohl Browser-Umgebungsvariablen als auch Capacitor-Fallback-Variablen:
env(safe-area-inset-top)env(safe-area-inset-bottom)env(safe-area-inset-left)env(safe-area-inset-right)var(--safe-area-inset-top)var(--safe-area-inset-bottom)var(--safe-area-inset-left)var(--safe-area-inset-right)Wählen Sie die geschützten Kanten pro Sheet:
<cap-sheet safe-area="auto"></cap-sheet><cap-sheet safe-area="bottom left right"></cap-sheet><cap-sheet safe-area="none"></cap-sheet>Für Apps mit Overlay-Statusleisten oder Systemleisten: Behalte die nativen Plugins bei, die für die Bereitstellung der korrekten Inset-Werte verantwortlich sind:
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { plugins: { StatusBar: { overlaysWebView: true, }, Keyboard: { resize: 'body', resizeOnFullScreen: true, }, SystemBars: { insetsHandling: 'css', }, },};
export default config;Die Tastatursteuerung wird über native-focus-scroll-preventiongesteuert, was standardmäßig auf truesteht. Deaktiviere sie nur, wenn deine App Keyboard Avoidance bereits selbst übernimmt:
<cap-sheet native-focus-scroll-prevention="false"></cap-sheet>Imperative Steuerung
Abschnitt mit dem Titel „Imperative Steuerung“Alle Framework-Helper konfigurieren dasselbe zugrunde liegende Custom Element. Du kannst ein Sheet auch direkt steuern:
const sheet = document.querySelector('cap-sheet');
await sheet?.present();await sheet?.stepTo(2);await sheet?.step('down');await sheet?.dismiss();Höre auf Events für kontrollierten State, Analytics oder koordinierte Animation:
sheet?.addEventListener('cap-sheet-presented-change', (event) => { console.log(event.detail.presented);});
sheet?.addEventListener('cap-sheet-active-detent-change', (event) => { console.log(event.detail.activeDetent);});
sheet?.addEventListener('cap-sheet-travel', (event) => { console.log(event.detail.progress);});import { useEffect, useRef } from 'react';import { setupSheet } from '@capgo/capacitor-sheets/react';import '@capgo/capacitor-sheets';
export function BookingSheet() { const sheetRef = useRef<HTMLElement>(null);
useEffect(() => { if (!sheetRef.current) return;
return setupSheet(sheetRef.current, { detents: ['18em', '32em'], contentPlacement: 'bottom', onPresentedChange: ({ presented }) => console.log({ presented }), }); }, []);
return ( <cap-sheet id="booking-sheet" ref={sheetRef}> <cap-sheet-trigger action="present">Open</cap-sheet-trigger> <cap-sheet-view> <cap-sheet-backdrop /> <cap-sheet-content> <cap-sheet-handle /> <cap-sheet-title>React sheet</cap-sheet-title> </cap-sheet-content> </cap-sheet-view> </cap-sheet> );}Import von @capgo/capacitor-sheets/react registriert außerdem die JSX-Typisierungen für die Custom Elements. Falls TypeScript weiterhin unbekannte Tags meldet, füge eine Deklarationsdatei in deinem Source-Tree hinzu:
import '@capgo/capacitor-sheets/react';<script setup lang="ts">import { onMounted, onUnmounted, ref } from 'vue';import { setupSheet } from '@capgo/capacitor-sheets/vue';import '@capgo/capacitor-sheets';
const sheetRef = ref<HTMLElement | null>(null);let cleanup: (() => void) | undefined;
onMounted(() => { if (sheetRef.value) { cleanup = setupSheet(sheetRef.value, { detents: ['18em', '32em'], contentPlacement: 'bottom', }); }});
onUnmounted(() => cleanup?.());</script>
<template> <cap-sheet id="booking-sheet" ref="sheetRef"> <cap-sheet-trigger action="present">Open</cap-sheet-trigger> <cap-sheet-view> <cap-sheet-backdrop /> <cap-sheet-content> <cap-sheet-handle /> <cap-sheet-title>Vue sheet</cap-sheet-title> </cap-sheet-content> </cap-sheet-view> </cap-sheet></template>import { AfterViewInit, Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, ViewChild } from '@angular/core';import { setupSheet } from '@capgo/capacitor-sheets/angular';import '@capgo/capacitor-sheets';
@Component({ selector: 'app-root', standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA], template: ` <cap-sheet id="booking-sheet" #sheet> <cap-sheet-trigger action="present">Open</cap-sheet-trigger> <cap-sheet-view> <cap-sheet-backdrop></cap-sheet-backdrop> <cap-sheet-content> <cap-sheet-handle></cap-sheet-handle> <cap-sheet-title>Angular sheet</cap-sheet-title> </cap-sheet-content> </cap-sheet-view> </cap-sheet> `,})export class AppComponent implements AfterViewInit { @ViewChild('sheet', { static: true }) sheet?: ElementRef<HTMLElement>;
ngAfterViewInit(): void { if (this.sheet?.nativeElement) { setupSheet(this.sheet.nativeElement, { detents: ['18em', '32em'], contentPlacement: 'bottom', }); } }}<script lang="ts"> import { sheet } from '@capgo/capacitor-sheets/svelte'; import '@capgo/capacitor-sheets';</script>
<cap-sheet id="booking-sheet" use:sheet={{ detents: ['18em', '32em'], contentPlacement: 'bottom' }}> <cap-sheet-trigger action="present">Open</cap-sheet-trigger> <cap-sheet-view> <cap-sheet-backdrop /> <cap-sheet-content> <cap-sheet-handle /> <cap-sheet-title>Svelte sheet</cap-sheet-title> </cap-sheet-content> </cap-sheet-view></cap-sheet>import { onCleanup, onMount } from 'solid-js';import { setupSheet } from '@capgo/capacitor-sheets/solid';import '@capgo/capacitor-sheets';
export function BookingSheet() { let sheetEl!: HTMLElement;
onMount(() => { const cleanup = setupSheet(sheetEl, { detents: ['18em', '32em'], contentPlacement: 'bottom', });
onCleanup(cleanup); });
return ( <cap-sheet id="booking-sheet" ref={sheetEl}> <cap-sheet-trigger action="present">Open</cap-sheet-trigger> <cap-sheet-view> <cap-sheet-backdrop /> <cap-sheet-content> <cap-sheet-handle /> <cap-sheet-title>Solid sheet</cap-sheet-title> </cap-sheet-content> </cap-sheet-view> </cap-sheet> );}Komponenten
Abschnitt „Komponenten“| Element | Zweck |
|---|---|
cap-sheet | Sheet-Zustand, Detents, Gesten, Modal-Verhalten und Events |
cap-sheet-trigger | Deklarative present-, dismiss-, toggle- und step-Aktionen |
cap-sheet-portal | Optionales Body-Portal für Overlay-Ebenen |
cap-sheet-view | Fester Viewport-Host mit Safe-Area- und Keyboard-Padding |
cap-sheet-backdrop | Progress-synchronisierter Backdrop |
cap-sheet-content | Barrierefreie Sheet-Oberfläche |
cap-sheet-bleeding-background | Hintergrund-Erweiterung für Sheets mit abgerundeten Kanten |
cap-sheet-handle | Ziehbarer und per Tastatur bedienbarer Detent-Handle |
cap-sheet-title | Barrierefreier Titel |
cap-sheet-description | Barrierefreie Beschreibung |
cap-sheet-special-wrapper | Composition-Hook für getrennte Sheets, Cards und Lightboxes |
cap-sheet-stack | Gruppierte gestapelte Sheets |
cap-sheet-outlet | Progress-Outlet für Tiefe, Parallaxe und Seiteneffekte |
cap-scroll | Scroll-Fortschritts-Helfer |
cap-fixed | Fester Layer-Helfer |
cap-island | Zugehörige Floating-Island-Inhalte |
cap-external-overlay | Overlay-Inhalte außerhalb des Sheet-Baums verwaltet |
Hauptoptionen
Abschnitt mit dem Titel „Hauptoptionen“| Option | Attribut | Standard | Beschreibung |
|---|---|---|---|
contentPlacement | content-placement | bottom | top, bottom, left, right, oder center |
detents | detents | Keine | Durch Leerzeichen getrennte CSS-Längen wie 18em 32em |
safeArea | safe-area | auto | Geschützte Safe-Area-Ränder |
swipe | swipe | true | Pointer-, Touch-, Trackpad- und Wheel-Gesten aktivieren |
swipeDismissal | swipe-dismissal | true | Gesten zum Schließen auf Detent zulassen 0 |
inertOutside | inert-outside | true | Interaktion hinter modalen Sheets verhindern |
focusTrap | focus-trap | true | Tastaturfokus im Sheet halten |
closeOnOutsideClick | close-on-outside-click | true | Schließen beim Klick auf Backdrop oder View |
closeOnEscape | close-on-escape | true | Schließen beim Drücken von Escape |
nativeFocusScrollPrevention | native-focus-scroll-prevention | true | Fokussierte Inputs über der Tastatur sichtbar halten |
themeColorDimming | theme-color-dimming | auto | WebView-Theme-Farbe bei geöffnetem Modal abdunkeln |
Verfügbare Entrypoints
Abschnitt mit dem Titel „Verfügbare Entrypoints“@capgo/capacitor-sheets@capgo/capacitor-sheets/react@capgo/capacitor-sheets/vue@capgo/capacitor-sheets/angular@capgo/capacitor-sheets/svelte@capgo/capacitor-sheets/solid
Weiter geht's nach Getting Started
Abschnitt: „Weiter geht’s mit Getting Started“Wenn du es nutzt Erste Schritte Um die Arbeit an nativen Plugins zu planen, verbinde sie mit Capgo Plugin-Verzeichnis für den Produkt-Workflow im Capgo Plugin-Verzeichnis, Capacitor Plugins von Capgo für das Implementierungsdetail in Capacitor Plugins von Capgo, Plugins hinzufügen oder aktualisieren für die Implementierungsdetails unter „Plugins hinzufügen oder aktualisieren“, Ionic Enterprise Plugin-Alternativen für den Produkt-Workflow in Ionic Enterprise Plugin-Alternativen und Capgo Native Builds optimieren für den Produkt-Workflow in Capgo Native Builds.