Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
9059882
docs: PMS hero demo design spec
blove Jun 10, 2026
bb3edac
docs: PMS hero demo implementation plan
blove Jun 10, 2026
d230b46
feat(website): PositionRow type + synthetic portfolio roster
blove Jun 10, 2026
12cb33d
feat(website): currency/percent formatting helpers for PMS hero
blove Jun 10, 2026
ccedc35
feat(website): position sort comparators (weight-desc default)
blove Jun 10, 2026
e883842
feat(website): PMS columns with flashing price + wrapped analyst cells
blove Jun 10, 2026
8f3922d
feat(website): deterministic PMS recording generator + analyst scripts
blove Jun 10, 2026
e15ddd4
feat(website): commit generated PMS recording
blove Jun 10, 2026
3483e03
feat(website): portfolio replay engine (tick/commentary/flag events)
blove Jun 10, 2026
2d03f96
feat(website): PortfolioSummary sidebar (NAV, P&L, allocation, AI ale…
blove Jun 10, 2026
3be4319
feat(website): wire HeroGrid to PositionRow + flash-direction reducer
blove Jun 10, 2026
2a1e19c
feat(website): relabel hero control bar to market ticks/s
blove Jun 10, 2026
21dfde9
style(website): drop leader-row skin; fit PMS cockpit split
blove Jun 10, 2026
6a1c0c7
copy(website): reframe hero for live AI-augmented portfolio data
blove Jun 10, 2026
fe504ec
feat(website): PMS hero positioning in README; remove race demo
blove Jun 10, 2026
a122dd9
test(website): PMS hero smoke + row-drift; reduced-motion snapshot
blove Jun 10, 2026
b1f7b19
polish(website): fmtPct unsigned at zero; fix tickAllowed comment
blove Jun 10, 2026
2e95d4c
fix(react): measure row height from cell content, not the stretched box
blove Jun 11, 2026
ef188aa
fix(react): keep empty wrapped cells idempotent in row measurement
blove Jun 11, 2026
93f82dd
fix(react): preserve selection & focus across streaming row updates
blove Jun 11, 2026
6e112ef
docs: hero cockpit enrichment design spec (sub-project A)
blove Jun 12, 2026
bbbed0d
docs: hero enrichment — sidebar-hosted controls (layout C) + A3 filte…
blove Jun 15, 2026
9d53802
docs: hero enrichment — qty editor uses a cell-anchored popover for l…
blove Jun 16, 2026
2dc7395
docs: hero cockpit enrichment implementation plan (sub-project A)
blove Jun 16, 2026
5c337a6
feat(website): NAV + derived-weight helpers for the cockpit
blove Jun 16, 2026
089a06f
feat(website): qty edit sanity/guardrail/desk-rejection logic
blove Jun 16, 2026
1f036f0
feat(website): filter-state → engine filters builder
blove Jun 16, 2026
a8cbfb7
feat(website): selection-range summary helper
blove Jun 16, 2026
26b2b2f
feat(website): QtyEditor with cell-anchored lifecycle popover
blove Jun 16, 2026
a84f44d
feat(website): positionColumns factory — symbol+name value, sector co…
blove Jun 16, 2026
e470c78
test(website): fix guardrail fixture NAV so a small qty is genuinely …
blove Jun 16, 2026
612d539
feat(website): sidebar FilterSection (search + sector chips)
blove Jun 16, 2026
3e601f0
feat(website): sidebar SelectionSection (live summary + copied)
blove Jun 16, 2026
4ce53cc
feat(website): PortfolioSummary hosts Filter + Selection sections
blove Jun 16, 2026
e8f39be
fix(website): import PretableSelectionState from @pretable/core (not …
blove Jun 16, 2026
4860ea4
feat(website): wire editing, filtering, selection + copy into the coc…
blove Jun 16, 2026
2501117
feat(website): legend caption, qty pencil affordance, sidebar fit
blove Jun 16, 2026
71137d2
test(website): smoke for cockpit editing, filtering, selection+copy u…
blove Jun 16, 2026
accfc98
polish(website): scope qty pencil to body cells, debounce search, gua…
blove Jun 16, 2026
9b0bcd5
docs(website): spec for homepage showcase strip (sub-project B)
blove Jun 17, 2026
257793b
docs(website): implementation plan for homepage showcase strip
blove Jun 17, 2026
d72e7d2
feat(website): useInView one-shot lazy-mount hook
blove Jun 17, 2026
9eea720
feat(website): scale-grid data generators (2,500 x 500, lazy cells)
blove Jun 17, 2026
36a34bc
feat(website): useRenderedCellCount live DOM-cell counter
blove Jun 17, 2026
0d76ab8
feat(website): column-layout demo data (portfolio slice)
blove Jun 17, 2026
16ea9ec
fix(website): satisfy typecheck + lint for showcase modules
blove Jun 17, 2026
8cb5b03
fix(website): make useInView SSR-safe (avoid hydration mismatch)
blove Jun 17, 2026
8e80f09
feat(website): scale showcase section (2,500 x 500 virtualization + l…
blove Jun 17, 2026
8a2b3f9
feat(website): column-layout showcase section (resize/reorder + reset)
blove Jun 17, 2026
8edab7a
feat(website): add scale + column-layout showcases to homepage
blove Jun 17, 2026
656dd72
test(website): smoke for scale virtualization + column resize/reset
blove Jun 17, 2026
bc62655
fix: clear CI blockers on branch (react lint error + slow scale-grid …
blove Jun 17, 2026
599b232
style: apply repo-wide prettier formatting
blove Jun 17, 2026
17fae78
fix(website): block-disable react-hooks/refs in HeroGrid (survive pre…
blove Jun 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
[![CI](https://github.com/cacheplane/pretable/actions/workflows/ci.yml/badge.svg)](https://github.com/cacheplane/pretable/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-2563eb.svg)](./LICENSE)

Pretable is a React data grid for AI product teams that need to render messy,
high-signal data: chat transcripts, eval results, support queues, research
tables, tool-call logs, and other text-heavy workflows where fixed-height rows
break down.
Pretable is a React data grid for teams rendering live, high-signal data: a
portfolio cockpit where prices tick beside an AI analyst's streaming commentary,
agent transcripts, eval results, support queues, and other workflows that mix
dense numbers with wrapped, variable-height text where fixed-height rows break
down.

It focuses on wrapped text, variable row heights, column virtualization,
streaming-compatible updates, keyboard/selection primitives, and a small public
Expand Down Expand Up @@ -90,6 +91,8 @@ streaming responses, nested metadata, and high-frequency inspection workflows.

Pretable is built around that shape:

- Live numbers and streaming AI narrative coexist in one grid — ticking prices
beside wrapped, variable-height analyst text, with no row drift.
- Variable-height rows and wrapped content are first-class.
- Column virtualization is part of the proof surface, not a later add-on.
- Sorting, filtering, focus, copy, and selection live in a framework-neutral
Expand Down
4 changes: 3 additions & 1 deletion apps/website/__tests__/components/DrawerHero.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ describe("DrawerHero", () => {
expect(
screen.getByRole("heading", { level: 1, name: /fastest data grid/i }),
).toBeInTheDocument();
expect(screen.getByText(/60fps under streaming load/i)).toBeInTheDocument();
expect(
screen.getByText(/60fps under live market load/i),
).toBeInTheDocument();
});

it("renders all three CTAs: copy prompt + npm install + docs link", () => {
Expand Down
193 changes: 0 additions & 193 deletions apps/website/__tests__/components/heroGrid/Scoreboard.test.tsx

This file was deleted.

26 changes: 26 additions & 0 deletions apps/website/app/components/ColumnLayoutShowcase.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { ColumnLayoutGrid } from "./showcase/ColumnLayoutGrid";

export function ColumnLayoutShowcase() {
return (
<section
id="column-layout"
className="text-text-primary px-7 py-16 md:px-10 md:py-28"
>
<div className="mx-auto max-w-[1240px]">
<p className="font-mono text-[11px] uppercase tracking-[0.14em] text-accent">
09 · columns, your way
</p>
<h2 className="mt-4 font-display text-[36px] leading-[1.05] tracking-[-0.025em] md:text-[44px]">
Resize and reorder. <em className="italic text-accent">Built in.</em>
</h2>
<p className="mt-5 max-w-[64ch] font-display text-[17px] leading-[1.55] text-text-secondary">
Drag a column border to resize, drag a header to reorder — no config,
no plugins. Make a mess, then hit reset.
</p>
<div className="mt-10">
<ColumnLayoutGrid />
</div>
</div>
</section>
);
}
9 changes: 6 additions & 3 deletions apps/website/app/components/DrawerHero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ export function DrawerHero() {
Built for the AI era.
</h1>
<p className="mx-auto mt-5 max-w-[56ch] font-display text-[17px] leading-[1.55] text-text-secondary">
60fps under streaming load. Zero row drift. A deterministic engine
designed for live data, agent output, and real-time telemetry — not
retrofitted from a batch-era grid.
60fps under live market load. Zero row drift while an AI analyst
streams wrapped commentary beside ticking prices — the grid built for
live, AI-augmented data, not retrofitted from a batch-era table.
</p>
<div className="mt-8 flex flex-wrap items-center justify-center gap-3">
<CopyPromptButton prompt={DRAWER_HERO_PROMPT} />
Expand All @@ -51,6 +51,9 @@ export function DrawerHero() {
<p className="mt-8 font-mono text-[11px] text-text-muted">
MIT licensed · open source
</p>
<p className="mt-2 font-mono text-[10px] text-text-muted">
Demo uses illustrative, synthetic market data — not investment advice.
</p>
</div>
</section>
);
Expand Down
Loading
Loading