packages/lynx-ui-sheet/SKILL.md
# lynx-ui-sheet SKILL ## What It Is `lynx-ui-sheet` is a headless Sheet primitive for ReactLynx. It supports bottom-sheet semantics and side-drawer semantics through the same composition model, state model, drag handling, backdrop, and snap-point APIs. Use it when a UI needs a dismissible panel that slides from an edge of the viewport and may be controlled by refs, external state, snap points, or drag gestures. ## Building Blocks - **`SheetRoot`**: Owns visibility state, side, snap points,
npx skillsauth add lynx-family/lynx-ui packages/lynx-ui-sheetInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
lynx-ui-sheet is a headless Sheet primitive for ReactLynx. It supports bottom-sheet semantics and side-drawer semantics through the same composition model, state model, drag handling, backdrop, and snap-point APIs.
Use it when a UI needs a dismissible panel that slides from an edge of the viewport and may be controlled by refs, external state, snap points, or drag gestures.
SheetRoot: Owns visibility state, side, snap points, drag behavior, and imperative methods.SheetView: Renders the sheet subtree in the overlay layer and controls mount/unmount.SheetBackdrop: Renders the scrim behind the sheet and optionally closes the sheet on tap.SheetContent: Renders the moving sheet or drawer surface and receives consumer sizing/styling.SheetHandle: Optional drag handle. It renders its children, so custom handle visuals can be placed directly inside the draggable target. Use it for bottom sheets when a visible handle is desired; horizontal drawers usually do not need it unless the design intentionally calls for a side grip.side="bottom" for bottom sheets. This is the default and preserves existing behavior.side="top" for top sheets.side="left" or side="right" for drawer-style panels that should stay on a physical edge.side="start" or side="end" for drawer-style panels that should follow writing direction. These resolve to the physical edge from enableRTL.top and bottom mode, percentage snap points resolve against the vertical main-axis basis: screenHeight when provided, otherwise viewport height.left, right, start, end), percentage snap points resolve against the horizontal main-axis basis: screenWidth when provided, otherwise viewport width.'fit' snap point resolves to measured content height for top / bottom, and measured content width for horizontal modes.maxSnapSize, the highest resolved snapPoints value, as its stable main-axis size so flex: 1 children have a snap-related height/width basis. Pure 'fit' snap point sheets stay content-driven.screenHeight can override the height basis for top / bottom; screenWidth can override the width basis for horizontal modes.top / bottom and disabled for horizontal modes. Use rubberBand to override the default.defaultShow for uncontrolled initial visibility.show with onShowChange for controlled visibility.SheetRootRef to call open, close, snapTo, expand, or collapse imperatively.show state from onShowChange; the component will not own that state for you.onOpen runs after the enter animation completes. onClose runs after the exit animation completes.Sheet headless: do not add default visual classes or styles in the component package.SheetContent.innerClassName / innerStyle for content layout, padding, and panel sizing.innerClassName / innerStyle so 'fit' can resolve from the measured drawer width.SheetHandle instead of layering a separate invisible hit target over a visual handle.pnpm --filter @lynx-js/lynx-ui-sheet test -- --run after changing snap, side, or drag helpers.pnpm --filter @lynx-js/lynx-ui-sheet build after public API or type changes.pnpm --filter @lynx-example/lynx-ui-sheet build after example changes.pnpm check:exports when exported types or aggregate exports change.enableRTL={false} and enableRTL={true} coverage for logical drawer sides.Use this formula when asking an agent to build with Sheet:
Side (
bottom/top/left/right/start/end) + RTL mode (enableRTL, when logical drawers matter) + State model (defaultShow, controlledshow, or ref methods) + Snap-point behavior (fit, pixels, or percentages) + Surface sizing/styling + Close behavior.
Examples:
SheetRoot side=\"start\" enableRTL, controlled by a ref, with snapPoints={['72%']} and backdrop tap to close."SheetRoot side=\"left\" when the panel should stay on the physical left edge regardless of enableRTL."snapPoints={['fit', '80%']}, a custom visual inside SheetHandle, and an inner content layout using L.U.N.A tokens."SheetContent and move drawer width plus inner padding to innerClassName."development
# lynx-ui-sortable SKILL `Sortable` is a headless drag-to-reorder list primitive for ReactLynx. It performs reordering on the main thread for smooth, gesture-driven animations and exposes a composable `SortableRoot` / `SortableItem` / `SortableItemArea` API. For massive datasets, prefer `List` or `FeedList`; `Sortable` targets small to medium reorder-able lists. ## 1. Core Capabilities - **Headless Composition**: Three building blocks — `SortableRoot`, `SortableItem`, and (optional) `Sortable
development
# Lynx UI Popover SKILL `lynx-ui-popover` is a headless primitive for building accessible, positioned floating elements. It handles the complex logic of positioning, stacking context, and enter/exit animations via `usePresence`. ## 1. Core Capabilities - **Headless & Composable**: Provides raw functional components (`Root`, `Trigger`, `Positioner`, `Content`) that you compose to build custom UIs. - **Auto Positioning**: The `PopoverPositioner` automatically calculates coordinates to anchor th
development
# lynx-ui-dialog SKILL `Dialog` is a dialog component, used to display important information or require user interaction, interrupting the current workflow. `lynx-ui-dialog` is a composite component built on `primitives`, offering high flexibility and customizability. ## 1. Core Capabilities - **Composite Component Structure**: Composed of `DialogRoot`, `DialogView`, `DialogBackdrop`, `DialogContent`, `DialogTrigger`, and `DialogClose`, allowing for free assembly of the dialog's structure. -
data-ai
# lynx-ui-list SKILL ## 1. Core Capabilities - **Virtual Scrolling**: **List** and **FeedList** is the **only two** scroll container that can only renders visible items, ensuring smooth scrolling performance even with **massive** amounts of data. If the count of children has more than 10 items, you **MUST** use **List** or **FeedList**. - **Multiple Layouts**: Supports three layout modes: `single` (single-column list), `flow` (multi-column grid layout), and `waterfall` (multi-column waterfall