algorithmic-color-pale…
Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours. Use when building…
View modes, row selection, mass actions, sorting, filters, search and table patterns. Use when designing data tables, listings, file browsers or any collection.
Claude Code
$ npx -y skills add dembrandt/dembrandt-skills --skill data-display-and-selection --agent claude-code
Codex
$ npx skills add dembrandt/dembrandt-skills --skill data-display-and-selection -a codex -y
Cursor
$ npx skills add dembrandt/dembrandt-skills --skill data-display-and-selection -a cursor -y
Gemini CLI
$ npx skills add dembrandt/dembrandt-skills --skill data-display-and-selection -a gemini-cli -y
GitHub Copilot
$ npx skills add dembrandt/dembrandt-skills --skill data-display-and-selection -a github-copilot -y
OpenCode
$ npx skills add dembrandt/dembrandt-skills --skill data-display-and-selection -a opencode -y
Windsurf
$ npx skills add dembrandt/dembrandt-skills --skill data-display-and-selection -a windsurf -y
name: data-display-and-selection
description: View modes, row selection, mass actions, sorting, filters, search and table patterns. Use when designing data tables, listings, file browsers or any collection.
metadata:
priority: 7
pathPatterns:
- "components/**"
- "src/components/**"
- "**/*.tsx"
- "**/*.jsx"
- "design-system/**"
- "ui/**"
promptSignals:
phrases:
- "data table"
- "list view"
- "grid view"
- "mass action"
- "bulk action"
- "row selection"
- "select all"
- "item selection"
- "view toggle"
- "collection"
- "search"
- "autocomplete"
- "typeahead"
- "search results"
- "chart"
- "infographic"
- "metric"
retrieval:
aliases:
- data table
- list view
- grid view
- mass actions
- bulk actions
- row selection
- view modes
- collection UI
- search and autocomplete
- typeahead search
- instant search results
- chart type choice
- infographic colour
- making numbers comprehensible
intents:
- design a data table
- add grid and list view toggle
- implement row selection
- add bulk actions
- design a product listing
- make selection easier
- design a search with instant results
- choose a familiar chart type
- present a number or metric clearly
examples:
- add grid and list view to this product listing
- design row selection for this table
- add bulk delete to this list
- make it easier to select multiple items
- add an autocomplete search to this app
- what chart should I use for this trend
- make this number easier to understandComplex data collections — products, files, users, orders, tasks — have no single correct view. Different tasks call for different views. Browsing benefits from grid; comparing details benefits from list or table; bulk management benefits from a dense table with mass actions. Give users the choice.
---
Offer multiple views when the data has both visual and detailed dimensions.
| View | Best for | When to default | |---|---|---| | **Grid** | Visual items: products, images, files, cards | When items are visually distinct and browsing is the primary task | | **List** | Moderate detail: tasks, emails, articles | When a key piece of text or metadata drives selection | | **Table** | Dense data: orders, reports, user management | When multiple columns of data must be compared |
**View toggle placement:** top-right of the collection, adjacent to sort/filter controls. Use icon buttons with tooltips (`grid`, `list`, `table`). Persist the user's choice in localStorage.
[Filter ▾] [Sort ▾] [⊞ Grid] [☰ List] [⊟ Table]
On mobile, collapse to the view that works best for the content — grid for visual items, list for text. Do not offer a view toggle on small screens unless both views are genuinely usable.
A card earns its border when it is one of a few things a reader compares side by side. Repeat that border fifteen times down a page and it separates nothing: every row is boxed, so the boxes carry no information and the reader pays for them in noise.
**Past roughly six items, drop to a table.** Keep a horizontal rule between rows or stripe them, and drop the side and outer rules entirely. Vertical edges do no work in a list already bounded by the page's own column, and the eye groups by proximity and alignment long before it needs a drawn line.
**The exception is a card that contains something a row cannot.** An image, a chart, a per-item control set, a body of text that has to wrap: those keep their card at any count, because the border is holding a composition together rather than separating one line from the next. A product grid, a gallery, a set of dashboard tiles are not covered by this rule. The test is what the border encloses. If it encloses a line of text and a value, it is decoration on a table row. If it encloses a layout, it is a card.
Then give the header the emphasis the boxes were pretending to provide: a heavier weight, or a smaller size in caps with letterspacing, or a darker ground. Choose by how much the reader needs to navigate the list. A long reference table wants a header that anchors scanning; a short one can let the first column do it.
---
Checkboxes are small targets. Requiring users to hit a 16×16px checkbox to select a row is unnecessary friction — especially on touch devices.
**Default: the entire row or card is the selection target.**
.row {
cursor: pointer;
background: var(--color-surface);
transition: background 100ms ease-out;
}
.row:hover {
background: var(--color-grey-50);
}
.row.selected {
background: var(--color-primary-subtle); /* subtle brand tint */
}For cards in a grid, the entire card is the selection area — not just a checkbox in the corner.
---
Selected items communicate their state through a background colour shift — not just a checkbox tick.
**Background:** `--color-primary-subtle` — the brand primary colour heavily desaturated and lightened to ~5–8% opacity. Perceptible but not jarring.
**Left border accent (optional):** A 3px left border in `--color-primary` reinforces the selected state for list and table rows.
**Checkbox:** Checked and filled with `--color-primary`. The checkbox is a secondary signal, not the primary one.
.row.selected {
background: var(--color-primary-subtle); /* e.g. hsl(224, 21%, 94%) */
border-left: 3px solid var(--color-priEnterprise UX secrets, now built into your AI agent. Your agent writes the component in seconds. It does not know the modal should be a drawer, or that the grey it picked fails contrast. These skills carry that judgment: what to do, and what breaks otherwise.
Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours. Use when building…
Top bar, sidebar rail, app launcher, tenant and environment cue, status bar. Use when designing the persistent shell, a…
Product visuals must show the real product with real data. Use when building landing pages, hero sections, screenshots or demo…
Shape language across type, radius and icons carries brand personality. Use when starting a design system, picking icons or…
Rest, hover, active, focus, disabled and loading states, derived from the base colour. Use when designing buttons, links, inputs…
Rebuild a live web page 1:1 from measurement into Figma, Penpot or code, then verify it. Use when reproducing a page or checking…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.