Data Grid Keyboard Shortcuts
tablecn/data-grid-keyboard-shortcutsFreeComponent
A keyboard shortcuts dialog component for the data grid showing all available shortcuts
Install it
npx shadcn@latest add https://tablecn.com/r/data-grid-keyboard-shortcuts.jsonSource
1"use client";23import { SearchIcon, XIcon } from "lucide-react";4import * as React from "react";5import { Button } from "@/components/ui/button";6import {7 Dialog,8 DialogClose,9 DialogContent,10 DialogDescription,11 DialogHeader,12 DialogTitle,13} from "@/components/ui/dialog";14import { useDirection } from "@/components/ui/direction";15import { Input } from "@/components/ui/input";16import { Kbd, KbdGroup } from "@/components/ui/kbd";17import { Separator } from "@/components/ui/separator";1819const SHORTCUT_KEY = "/";2021interface ShortcutGroup {22 title: string;23 shortcuts: Array<{24 keys: string[];25 description: string;26 }>;27}2829interface DataGridKeyboardShortcutsProps {30 enableSearch?: boolean;31 enableUndoRedo?: boolean;32 enablePaste?: boolean;33 enableRowAdd?: boolean;34 enableRowsDelete?: boolean;35}3637export const DataGridKeyboardShortcuts = React.memo(38 DataGridKeyboardShortcutsImpl,39 (prev, next) => {40 return (41 prev.enableSearch === next.enableSearch &&42 prev.enableUndoRedo === next.enableUndoRedo &&43 prev.enablePaste === next.enablePaste &&44 prev.enableRowAdd === next.enableRowAdd &&45 prev.enableRowsDelete === next.enableRowsDelete46 );47 },48);4950function DataGridKeyboardShortcutsImpl({51 enableSearch = false,52 enableUndoRedo = false,53 enablePaste = false,54 enableRowAdd = false,55 enableRowsDelete = false,56}: DataGridKeyboardShortcutsProps) {57 const dir = useDirection();58 const [open, setOpen] = React.useState(false);59 const [input, setInput] = React.useState("");60 const inputRef = React.useRef<HTMLInputElement>(null);6162 const isMac =63 typeof navigator !== "undefined"64 ? /Mac|iPhone|iPad|iPod/.test(navigator.userAgent)65 : false;6667 const modKey = isMac ? "⌘" : "Ctrl";6869 const onOpenChange = React.useCallback((isOpen: boolean) => {70 setOpen(isOpen);71 if (!isOpen) {72 setInput("");73 }74 }, []);7576 const onOpenAutoFocus = React.useCallback((event: Event) => {77 event.preventDefault();78 inputRef.current?.focus();79 }, []);8081 const onInputChange = React.useCallback(82 (event: React.ChangeEvent<HTMLInputElement>) => {83 setInput(event.target.value);84 },85 [],86 );8788 const shortcutGroups: ShortcutGroup[] = React.useMemo(89 () => [90 {91 title: "Navigation",92 shortcuts: [93 {94 keys: ["↑", "↓", "←", "→"],95 description: "Navigate between cells",96 },97 {98 keys: ["Tab"],99// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from tablecn
All 13 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Data Griddata-grid | tablecn | Components | Free | 4 deps · 21 files | |
| Data Grid Filter Menudata-grid-filter-menu | tablecn | Components | Free | 2 deps · 8 files | |
| Data Grid Row Height Menudata-grid-row-height-menu | tablecn | Components | Free | 2 deps | |
| Data Grid Select Columndata-grid-select-column | tablecn | Components | Free | 1 dep | |
| Data Grid Skeletondata-grid-skeleton | tablecn | Components | Free | no deps | |
| Data Grid Sort Menudata-grid-sort-menu | tablecn | Components | Free | 2 deps · 4 files | |
| Data Grid View Menudata-grid-view-menu | tablecn | Components | Free | 2 deps · 2 files | |
| Data Tabledata-table | tablecn | Components | Free | 3 deps · 17 files |
