createSheet
Creates a sheet (slide-out panel) modal controller.
Signature
tsx
function createSheet<T extends ComponentType<any>>(
component: T
): ModalController<T>;Usage
tsx
import { createSheet } from "@hirotoshioi/hiraku";
const mySheet = createSheet(MySheetComponent);With Return Type
tsx
const mySheet = createSheet(MySheetComponent).returns<ResultType>();Controller Methods
Same as createDialog:
open(props)- Opens the sheetclose(result?)- Closes the sheetonDidClose()- Promise that resolves on closeisOpen()- Check if sheet is open
Example
tsx
import { createSheet } from "@hirotoshioi/hiraku";
import {
SheetContent,
SheetHeader,
SheetTitle,
} from "@/components/ui/sheet";
interface FilterProps {
categories: string[];
}
function FilterSheet({ categories }: FilterProps) {
const [selected, setSelected] = useState<string[]>([]);
return (
<SheetContent>
<SheetHeader>
<SheetTitle>Filter</SheetTitle>
</SheetHeader>
<div>
{categories.map((cat) => (
<label key={cat}>
<input
type="checkbox"
checked={selected.includes(cat)}
onChange={(e) => {
if (e.target.checked) {
setSelected([...selected, cat]);
} else {
setSelected(selected.filter((c) => c !== cat));
}
}}
/>
{cat}
</label>
))}
</div>
<button onClick={() => filterSheet.close({ data: selected, role: "confirm" })}>
Apply Filters
</button>
</SheetContent>
);
}
export const filterSheet = createSheet(FilterSheet).returns<string[]>();
// Usage
await filterSheet.open({ categories: ["Electronics", "Books", "Clothing"] });
const result = await filterSheet.onDidClose();
if (result.data) {
applyFilters(result.data);
}