- Prop
open- Type
boolean- Default
- —
- Requirement
- required
Docs Components Overlays
Sheet
React example follows below.
Vue example follows below.
Angular example follows below.
Svelte example follows below.
Solid example follows below.
- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
import * as React from "react";const sheetFixture = { id: "sheet", trigger: "Edit service", side: "right", eyebrow: "Service", title: "ledger-api", field: { label: "Replicas", value: "6" }, dismissable: true,} satisfies { id: string; trigger: string; side: "left" | "right"; eyebrow: string; title: string; field: { label: string; value: string }; dismissable: boolean;}; import { Button, Input, Sheet } from "@grassroot/ui-react"; export default function SheetDemo() { const [open, setOpen] = React.useState(false); return ( <div> <Button variant="secondary" onClick={() => setOpen(true)}> {sheetFixture.trigger} </Button> <Sheet open={open} onOpenChange={setOpen} side={sheetFixture.side} eyebrow={sheetFixture.eyebrow} title={sheetFixture.title} dismissable={sheetFixture.dismissable} > <Input label={sheetFixture.field.label} mono defaultValue={sheetFixture.field.value} /> </Sheet> </div> );}- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
<script setup lang="ts">import { ref } from "vue";import { Button, Sheet, Input } from "@grassroot/ui-vue";const sheetFixture = { id: "sheet", trigger: "Edit service", side: "right", eyebrow: "Service", title: "ledger-api", field: { label: "Replicas", value: "6" }, dismissable: true,} satisfies { id: string; trigger: string; side: "left" | "right"; eyebrow: string; title: string; field: { label: string; value: string }; dismissable: boolean;}; const open = ref(false);</script> <template> <div> <Button variant="secondary" @click="open = true">{{ sheetFixture.trigger }}</Button> <Sheet v-model:open="open" :side="sheetFixture.side" :eyebrow="sheetFixture.eyebrow" :dismissable="sheetFixture.dismissable" > <template #title>{{ sheetFixture.title }}</template> <Input :label="sheetFixture.field.label" mono :default-value="sheetFixture.field.value" /> </Sheet> </div></template>- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
import { Component, signal } from "@angular/core";import { GrassrootButton, GrassrootSheet, GrassrootSheetTitle, GrassrootInput,} from "@grassroot/ui-angular";const sheetFixture = { id: "sheet", trigger: "Edit service", side: "right", eyebrow: "Service", title: "ledger-api", field: { label: "Replicas", value: "6" }, dismissable: true,} satisfies { id: string; trigger: string; side: "left" | "right"; eyebrow: string; title: string; field: { label: string; value: string }; dismissable: boolean;}; @Component({ selector: "app-sheet-demo", standalone: true, imports: [GrassrootButton, GrassrootSheet, GrassrootSheetTitle, GrassrootInput], template: ` <div> <grassroot-button variant="secondary" (click)="open.set(true)">{{ fixture.trigger }}</grassroot-button> <grassroot-sheet [open]="open()" (openChange)="open.set($event)" [side]="fixture.side" [eyebrow]="fixture.eyebrow" [dismissable]="fixture.dismissable" > <h4 grassrootSheetTitle>{{ fixture.title }}</h4> <grassroot-input [label]="fixture.field.label" [mono]="true" [defaultValue]="fixture.field.value" /> </grassroot-sheet> </div> `,})export class SheetDemoComponent { readonly open = signal(false); protected readonly fixture = sheetFixture;} export default SheetDemoComponent;- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
<script lang="ts"> import { Button, Sheet, Input } from "@grassroot/ui-svelte"; const sheetFixture = { id: "sheet", trigger: "Edit service", side: "right", eyebrow: "Service", title: "ledger-api", field: { label: "Replicas", value: "6" }, dismissable: true, } satisfies { id: string; trigger: string; side: "left" | "right"; eyebrow: string; title: string; field: { label: string; value: string }; dismissable: boolean; }; let open = $state(false);</script> {#snippet title()}{sheetFixture.title}{/snippet}{#snippet children()}<Input label={sheetFixture.field.label} mono defaultValue={sheetFixture.field.value} />{/snippet}<div> <Button variant="secondary" onClick={() => (open = true)}>{sheetFixture.trigger}</Button> <Sheet {open} onOpenChange={(next) => (open = next)} side={sheetFixture.side} eyebrow={sheetFixture.eyebrow} dismissable={sheetFixture.dismissable} {title} {children} /></div>- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
/** @jsxImportSource solid-js */import { createSignal } from "solid-js";import { Button, Sheet, Input } from "@grassroot/ui-solid";const sheetFixture = { id: "sheet", trigger: "Edit service", side: "right", eyebrow: "Service", title: "ledger-api", field: { label: "Replicas", value: "6" }, dismissable: true,} satisfies { id: string; trigger: string; side: "left" | "right"; eyebrow: string; title: string; field: { label: string; value: string }; dismissable: boolean;}; export default function SheetDemo() { const [open, setOpen] = createSignal(false); return ( <div> <Button variant="secondary" onClick={() => setOpen(true)}> {sheetFixture.trigger} </Button> <Sheet open={open()} onOpenChange={setOpen} side={sheetFixture.side} eyebrow={sheetFixture.eyebrow} title={sheetFixture.title} dismissable={sheetFixture.dismissable} > <Input label={sheetFixture.field.label} mono value={sheetFixture.field.value} /> </Sheet> </div> );}Installation
API Reference
Import
import * as React from "react";
import { Button, Input, Sheet } from "@grassroot/ui-react";
Props
Prop
Type
Default
Requirement
openboolean—
required
onOpenChange(open: boolean) => void—
required
side"right" | "left" | undefined—
optional
eyebrowstring | undefined—
optional
dismissableboolean | undefined—
optional
classNamestring | undefined—
optional
- Prop
onOpenChange- Type
(open: boolean) => void- Default
- —
- Requirement
- required
- Prop
side- Type
"right" | "left" | undefined- Default
- —
- Requirement
- optional
- Prop
eyebrow- Type
string | undefined- Default
- —
- Requirement
- optional
- Prop
dismissable- Type
boolean | undefined- Default
- —
- Requirement
- optional
- Prop
className- Type
string | undefined- Default
- —
- Requirement
- optional
Events
| Event | Payload |
|---|---|
onOpenChange | (open: boolean) => void |
Content regions
childrentitle
Import
import { ref } from "vue";
import { Button, Sheet, Input } from "@grassroot/ui-vue";
Props
Prop
Type
Default
Requirement
openboolean—
required
side"left" | "right""right"optional
eyebrowstring—
optional
dismissablebooleantrueoptional
- Prop
open- Type
boolean- Default
- —
- Requirement
- required
- Prop
side- Type
"left" | "right"- Default
"right"- Requirement
- optional
- Prop
eyebrow- Type
string- Default
- —
- Requirement
- optional
- Prop
dismissable- Type
boolean- Default
true- Requirement
- optional
Events
| Event | Payload |
|---|---|
update:open | (_open: boolean) => true |
Content regions
defaulttitle
Import
import { Component, signal } from "@angular/core";
import {
GrassrootButton,
GrassrootSheet,
GrassrootSheetTitle,
GrassrootInput,
} from "@grassroot/ui-angular";
Props
Prop
Type
Default
Requirement
openboolean—
required
side"left" | "right""right"optional
eyebrowstring | undefinedundefinedoptional
dismissablebooleantrueoptional
classNamestring—
optional
- Prop
open- Type
boolean- Default
- —
- Requirement
- required
- Prop
side- Type
"left" | "right"- Default
"right"- Requirement
- optional
- Prop
eyebrow- Type
string | undefined- Default
undefined- Requirement
- optional
- Prop
dismissable- Type
boolean- Default
true- Requirement
- optional
- Prop
className- Type
string- Default
- —
- Requirement
- optional
Events
| Event | Payload |
|---|---|
openChange | boolean |
Content regions
defaulttitle
Import
import { Button, Sheet, Input } from "@grassroot/ui-svelte";
Props
Prop
Type
Default
Requirement
openboolean—
required
side"left" | "right""right"optional
eyebrowstring—
optional
dismissablebooleantrueoptional
onOpenChange(open: boolean) => void—
required
classNamestring—
optional
- Prop
open- Type
boolean- Default
- —
- Requirement
- required
- Prop
side- Type
"left" | "right"- Default
"right"- Requirement
- optional
- Prop
eyebrow- Type
string- Default
- —
- Requirement
- optional
- Prop
dismissable- Type
boolean- Default
true- Requirement
- optional
- Prop
onOpenChange- Type
(open: boolean) => void- Default
- —
- Requirement
- required
- Prop
className- Type
string- Default
- —
- Requirement
- optional
Events
| Event | Payload |
|---|---|
onOpenChange | (open: boolean) => void |
Content regions
childrentitle
Import
import { createSignal } from "solid-js";
import { Button, Sheet, Input } from "@grassroot/ui-solid";
Props
Prop
Type
Default
Requirement
openboolean—
required
onOpenChange(open: boolean) => void—
required
side"left" | "right""right"optional
eyebrowstring—
optional
dismissablebooleantrueoptional
classNamestring—
optional
- Prop
open- Type
boolean- Default
- —
- Requirement
- required
- Prop
onOpenChange- Type
(open: boolean) => void- Default
- —
- Requirement
- required
- Prop
side- Type
"left" | "right"- Default
"right"- Requirement
- optional
- Prop
eyebrow- Type
string- Default
- —
- Requirement
- optional
- Prop
dismissable- Type
boolean- Default
true- Requirement
- optional
- Prop
className- Type
string- Default
- —
- Requirement
- optional
Events
| Event | Payload |
|---|---|
onOpenChange | (open: boolean) => void |
Content regions
childrentitle