Skip to content

feat: dataview timeline component - #860

Merged
rohanchkrabrty merged 4 commits into
mainfrom
feat-timeline
Jul 27, 2026
Merged

feat: dataview timeline component#860
rohanchkrabrty merged 4 commits into
mainfrom
feat-timeline

Conversation

@rohanchkrabrty

Copy link
Copy Markdown
Contributor

Summary

  • Adds DataView.Timeline, a renderer that positions the shared DataView row model as cards on a continuous, horizontally scrollable time axis — the card interior is fully consumer-owned via renderCard(row, context), while the Timeline owns the time scale, lane packing, sticky two-tier axis (ticks, month/year bands, today + custom markers, gridlines), and native x/y scrolling with drag-to-pan, momentum glide, and a snapped hover cursor.
  • Supports range-window data loading: explicit range for a stable coordinate space, onVisibleRangeChange (rAF-throttled, deduped by ms window), and time-anchored scrolling so the content never jumps when the domain shifts; imperative navigation ships via actionsRef (scrollTo, getVisibleRange).
  • Performance: memoized card wrapper so per-frame cursor/viewport state never re-renders card interiors, and binary-search horizontal culling behind virtualized.
  • Fixes from review: scroll position is restored when a gated view is re-activated, and point-marker lanes pack with estimatedPointWidth so content-sized cards don't overlap; rowHeight is renamed to estimatedRowHeight to match DataView.List.
  • Includes docs (guide + props tables), playground demos, an order-desk example page, and 52 unit tests covering geometry, axis, panning, culling, and the imperative handle.

@rohanchkrabrty rohanchkrabrty self-assigned this Jul 21, 2026
@vercel

vercel Bot commented Jul 21, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
apsara Ready Ready Preview, Comment Jul 27, 2026 7:59am

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a76b8e0d-ec9e-4747-9781-2b33ba705080

📥 Commits

Reviewing files that changed from the base of the PR and between 75a3e00 and f69695b.

📒 Files selected for processing (1)
  • packages/raystack/components/data-view/data-view.module.css
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/raystack/components/data-view/data-view.module.css

📝 Walkthrough

Walkthrough

Introduces DataView.Timeline with time-scaled cards, point markers, lane packing, virtualization, axis controls, panning, visible-range callbacks, and imperative navigation. Adds public timeline types and utilities with comprehensive tests. Documentation and demos cover interval, grouped, and point timelines. A new order-management example demonstrates shared timeline/list views, filters, details dialogs, and month-based prefetching.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant DataViewTimeline
  participant OrderPage
  participant OrdersAPI
  User->>DataViewTimeline: scroll timeline
  DataViewTimeline->>OrderPage: report visible date range
  OrderPage->>OrdersAPI: fetch missing month ranges
  OrdersAPI-->>OrderPage: return orders
  OrderPage-->>DataViewTimeline: merge loaded rows
  User->>DataViewTimeline: select Today
  DataViewTimeline->>DataViewTimeline: scrollTo today
Loading

Suggested reviewers: rohilsurana, shreyag02

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 55.56% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: adding a DataView timeline component.
Description check ✅ Passed The description matches the timeline renderer, docs, demos, example page, and tests added in the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/www/src/app/examples/timeline/page.tsx`:
- Around line 573-612: Update the fetch handling in loadWindow so rejected
requests always decrement inflightRef and clear isLoading when no runs remain,
while removing each failed month range from requestedRef to allow retries. Add
rejection handling without changing the existing successful order-merging
behavior.

In `@apps/www/src/content/docs/components/dataview/props.ts`:
- Around line 178-197: Make DataViewTimelineProps generic as
DataViewTimelineProps<TData>, and update renderCard to receive the TanStack
Row<TData> wrapper rather than raw row data. Keep the existing
TimelineCardContext parameter and ensure the interface consistently uses the
generic type for the callback.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 99b881ad-cfdb-4cc2-867c-91dbff8f72f5

📥 Commits

Reviewing files that changed from the base of the PR and between 1812fa0 and b63fcfe.

📒 Files selected for processing (15)
  • apps/www/src/app/examples/timeline/page.tsx
  • apps/www/src/components/dataview-demo.tsx
  • apps/www/src/components/demo/demo.tsx
  • apps/www/src/content/docs/components/dataview/demo.ts
  • apps/www/src/content/docs/components/dataview/index.mdx
  • apps/www/src/content/docs/components/dataview/props.ts
  • packages/raystack/components/data-view/__tests__/timeline.test.tsx
  • packages/raystack/components/data-view/components/timeline.tsx
  • packages/raystack/components/data-view/data-view.module.css
  • packages/raystack/components/data-view/data-view.tsx
  • packages/raystack/components/data-view/data-view.types.tsx
  • packages/raystack/components/data-view/index.ts
  • packages/raystack/components/data-view/utils/pack-lanes.tsx
  • packages/raystack/components/data-view/utils/time-scale.tsx
  • packages/raystack/index.tsx

Comment thread apps/www/src/app/examples/timeline/page.tsx
Comment on lines +178 to +197
export interface DataViewTimelineProps {
/** Multi-view name. When set, the renderer gates itself on the active view. */
name?: string;

/** Optional view-scoped field override (full replacement). */
fields?: DataViewField[];

/** Accessor key on the row yielding the start date. Rows with a missing/invalid value are skipped. (Required) */
startField: string;

/** Accessor key for the end date. Omitted → point markers; present → variable-width span cards. */
endField?: string;

/**
* Renders the card interior. The Timeline owns positioning (x from start,
* width from span, lane from packing, scroll); the consumer owns the card
* visual entirely. Compose `DataView.DisplayAccess` inside for Display
* Properties support. (Required)
*/
renderCard: (row: T, context: TimelineCardContext) => ReactNode;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

DataViewTimelineProps uses T but is declared non-generic; renderCard row type is also inaccurate.

Two issues here:

  1. DataViewTimelineProps (Line 178) declares no generic, but renderCard: (row: T, ...) (Line 197) references T — same unbound-name concern as DataViewListColumn. The canonical type is DataViewTimelineProps<TData>.
  2. Per the tests and the real contract, renderCard's first arg is a TanStack Row<T> (consumers read row.original), not the row data T. Documenting it as row: T will mislead consumers.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/src/content/docs/components/dataview/props.ts` around lines 178 -
197, Make DataViewTimelineProps generic as DataViewTimelineProps<TData>, and
update renderCard to receive the TanStack Row<TData> wrapper rather than raw row
data. Keep the existing TimelineCardContext parameter and ensure the interface
consistently uses the generic type for the callback.

@rohilsurana rohilsurana left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: DataView.Timeline (in progress)

Reviewing this outside-in over a few passes. Covered so far: the public API/types, the pure utils (time-scale, pack-lanes), and the component itself. Styles, the 52 tests, and the docs/demo are still to come.

Overall this is strong, careful work. The renderer contract mirrors DataView.List and the actionsRef pattern from tour-beta closely, so the API stays consistent with the rest of the library. The scroll/pan/momentum machinery and the scroll-anchoring on domain shift are thoughtfully done, hooks are all called before the early returns, and rAF throttling plus cleanup are handled properly.

Confirmed the data scrub this PR exists for: the only change from the previous PR is the demo mock data in examples/timeline/page.tsx, real org/file names are gone, and no proprietary terms remain in any of the 15 files or in the branch's own commits. Note this only protects main going forward; the earlier data still lives in the previous PR's branch and commits on the remote if that matters.

Inline notes below, tagged by severity. The only one I would treat as a real gate is the unitWidth <= 0 guard in time-scale.tsx. The rest are API/doc/a11y polish. Nothing here blocks the concept.

Comment thread packages/raystack/components/data-view/utils/time-scale.tsx
Comment thread packages/raystack/components/data-view/utils/time-scale.tsx
Comment thread packages/raystack/components/data-view/utils/pack-lanes.tsx Outdated
Comment thread packages/raystack/components/data-view/data-view.types.tsx
Comment thread packages/raystack/components/data-view/data-view.types.tsx
Comment thread packages/raystack/components/data-view/data-view.types.tsx
Comment thread packages/raystack/components/data-view/components/timeline.tsx
Comment thread packages/raystack/components/data-view/components/timeline.tsx
Comment thread packages/raystack/components/data-view/components/timeline.tsx Outdated

@rohilsurana rohilsurana left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Step 4: styles (data-view.module.css)

Checked the Timeline styles against house conventions. Tokens all resolve to real definitions in styles/colors.css and are the same ones the existing data-view CSS uses, so light/dark theming comes for free. The 0.5px borders match the codebase convention (used in ~31 component stylesheets). Layering, sticky axis/footer, and overscroll-behavior: contain are all sensible. Two low-priority notes inline.

Comment thread packages/raystack/components/data-view/data-view.module.css Outdated
Comment thread packages/raystack/components/data-view/data-view.module.css

@rohilsurana rohilsurana left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Step 5: tests (52 cases, __tests__/timeline.test.tsx)

This is a genuinely strong suite, well above what most feature PRs ship. It does not just assert "renders" — it checks exact geometry (px positions, widths, lane indices) and it exercises the hard, stateful machinery I was most worried about:

  • momentum glide after a fling, plus wheel-cancels-glide, plus hold-still-then-release does not glide
  • drag-to-pan on both axes, and correctly not panning from a card or a touch pointer
  • binary-search horizontal culling under virtualized (overscan window)
  • scroll anchoring: the left-edge time stays put when the domain is extended leftward
  • onVisibleRangeChange dedup on identity churn, and re-fire on a real scroll
  • scroll-position restore when a gated view is switched away and back
  • the memoized card wrapper: a hover-cursor root re-render does not re-render card interiors
  • the full actionsRef surface, including no-op-with-warning while hidden

Two gaps worth closing, both inline:

  1. quarter scale is untested — and it is the only scale with hand-rolled (non-dayjs) logic, so it is the highest-value missing case.
  2. rAF is flushed with real timers, which makes the momentum/timing tests the most likely to flake on CI and slows the suite.

One more, tied to my step-2 note: the unitWidth <= 0 path (the potential hang) has no test because the guard does not exist yet. If the guard is added, a one-line test should come with it.

Net: coverage is not the concern here. The two items above are quality/robustness polish.

Comment thread packages/raystack/components/data-view/__tests__/timeline.test.tsx
Comment thread packages/raystack/components/data-view/__tests__/timeline.test.tsx

@rohilsurana rohilsurana left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Step 6: docs and demo (final pass)

The guide (index.mdx) is genuinely excellent: accurate to the real API (scale set, unitWidth defaults, minCardWidth, estimatedPointWidth, actionsRef, the range-window loading walkthrough), well-structured, and its code examples correctly use row.original. The TimelineCardContext/TimelineMarker/TimelineActions tables are wired up via auto-type-table, and the demo exports (timelinePreview, timelinePointPreview) resolve.

I also verified the two existing CodeRabbit findings rather than take them at face value:

  • props.ts "unbound T" (Major): false positive. T is a deliberate = any placeholder (line 5). The only real sliver is that renderCard's arg is a Row wrapper; minor, and the guide already teaches row.original. Details inline.
  • page.tsx unhandled rejection (Critical): the code observation is right, but the mock never rejects, so it cannot happen here. Worth fixing only because the guide sells this as the recommended pattern and examples get copied. Downgraded to example-quality. Details inline.

Also worth noting for the author: the estimatedRowHeight doc here (line 263) already has to add "cards render at exactly this height" to undo the misleading name, which reinforces the naming point from my earlier types comment.


Overall (steps 1-6 complete)

This is strong, careful work: a well-designed API consistent with DataView.List and tour-beta, solid scroll/pan/momentum and scroll-anchoring, correct and optimal lane packing, a comprehensive 52-test suite, on-pattern theming, and excellent docs. The data scrub this PR exists for is complete and clean.

Nothing I found blocks the concept. In priority order, before merge I would want:

  1. the unitWidth <= 0 guard in time-scale.tsx (only issue that can hang the render);
  2. a quarter-scale test (the one untested hand-rolled path).

Everything else (the estimatedRowHeight name, renderCard/memo stability docs, keyboard a11y on the scroll region, the CSS 52px de-dup, marker-line z-order, real-timer test flake, and the example's fetch error handling) is polish the author can take or leave.

Comment thread apps/www/src/app/examples/timeline/page.tsx Outdated
Comment thread apps/www/src/content/docs/components/dataview/props.ts
@Shreyag02

Copy link
Copy Markdown
Contributor

Ordering and grouping doesn't work in the timeline mode so it should be disabled in that view

const from = timeScale.timeAt(viewport.left);
const to = timeScale.timeAt(viewport.left + viewport.width);
const prev = lastNotifiedRangeRef.current;
if (prev && prev.from === from && prev.to === to) return;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment above says this dedupes "by ms window," but it's comparing raw decimals. When the domain shifts, the browser rounds the scroll position, so these never quite line up and the callback fires again — an extra fetch each time. Rounding both sides to whole ms before comparing would fix it.

* Initial horizontal scroll target.
* @defaultValue "today"
*/
defaultScrollTo?: TimelineDateInput | 'today' | 'start' | 'end';

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the rendered props table shows just TimelineDateInput for defaultScrollTo, so readers can't tell that 'today' | 'start' | 'end' are accepted — they only show up in the prose.

Cause: auto-type-table resolves the type through the compiler, and since TimelineDateInput includes string, the literals get folded into it. Same for scrollTo's target (L331).

Runtime type is fine — this is purely cosmetic.
Simplest fix is to name the values in the JSDoc, which survives extraction:

/**
 * Initial horizontal scroll target: a date, or `'today'` | `'start'` | `'end'`.
 * @defaultValue "today"
 */
defaultScrollTo?: TimelineDateInput | 'today' | 'start' | 'end';

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
packages/raystack/components/data-view/__tests__/timeline.test.tsx (2)

1202-1217: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

renderGrouped lets props.classNames silently disable the band marker.

...props is spread after classNames, so any caller passing classNames drops the groupHeader: 'band' hook and bands() returns []. Combined with the toHaveLength(0) assertion at Line 1291, a class-wiring regression would pass vacuously. Merge the marker last (or assert on the module class like the slot query does).

♻️ Proposed merge-order fix
   return renderTimeline(
-    { classNames: { groupHeader: 'band' }, ...props },
+    {
+      ...props,
+      classNames: { ...props.classNames, groupHeader: 'band' }
+    },
     data,

Also applies to: 1289-1292

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/raystack/components/data-view/__tests__/timeline.test.tsx` around
lines 1202 - 1217, Update the test helper renderGrouped so the required
classNames.groupHeader: 'band' marker is merged after props, preventing
caller-provided classNames from overriding it. Preserve existing custom props
while ensuring bands() always targets the group headers, so the related length
assertion cannot pass vacuously.

1134-1160: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

These tests only cover mount-time sort, not a sort change on a live timeline.

Both cases unmount and mount a fresh tree with a different defaultSort, so the "layout unchanged" assertion in the second test compares two independent mounts and is trivially satisfied. The regression worth guarding is lane reassignment (and its absence under auto packing) when the sort flips on an already-mounted timeline — drive that through the DataView sort API (or a rerender that changes the active sort) on a single instance.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/raystack/components/data-view/__tests__/timeline.test.tsx` around
lines 1134 - 1160, Update the timeline tests to change the active sort on a
single mounted instance instead of unmounting and remounting with a different
defaultSort. In the one-per-row case, assert lanes are reassigned after flipping
sort; in the packed-layout case, capture lane/top positions before the change
and verify they remain unchanged afterward. Use the existing DataView sort API
or rerender path to drive the live sort update.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/www/src/components/dataview-demo.tsx`:
- Around line 905-908: Disable grouping in timeline mode by adding hideGrouping
to DataView.DisplayControls at apps/www/src/components/dataview-demo.tsx:905-908
and using hideOrdering hideGrouping in the primary preview at
apps/www/src/content/docs/components/dataview/demo.ts:357-359. Remove the
grouped timeline demos at apps/www/src/components/dataview-demo.tsx:938-980 and
apps/www/src/content/docs/components/dataview/demo.ts:382-419, then remove their
import at apps/www/src/components/demo/demo.tsx:56 and default-scope entry at
apps/www/src/components/demo/demo.tsx:93-95.

---

Nitpick comments:
In `@packages/raystack/components/data-view/__tests__/timeline.test.tsx`:
- Around line 1202-1217: Update the test helper renderGrouped so the required
classNames.groupHeader: 'band' marker is merged after props, preventing
caller-provided classNames from overriding it. Preserve existing custom props
while ensuring bands() always targets the group headers, so the related length
assertion cannot pass vacuously.
- Around line 1134-1160: Update the timeline tests to change the active sort on
a single mounted instance instead of unmounting and remounting with a different
defaultSort. In the one-per-row case, assert lanes are reassigned after flipping
sort; in the packed-layout case, capture lane/top positions before the change
and verify they remain unchanged afterward. Use the existing DataView sort API
or rerender path to drive the live sort update.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: dd292c02-1a48-493c-ac6a-0161fe67705e

📥 Commits

Reviewing files that changed from the base of the PR and between 711ec31 and 75a3e00.

📒 Files selected for processing (10)
  • apps/www/src/app/examples/timeline/page.tsx
  • apps/www/src/components/dataview-demo.tsx
  • apps/www/src/components/demo/demo.tsx
  • apps/www/src/content/docs/components/dataview/demo.ts
  • apps/www/src/content/docs/components/dataview/index.mdx
  • apps/www/src/content/docs/components/dataview/props.ts
  • packages/raystack/components/data-view/__tests__/timeline.test.tsx
  • packages/raystack/components/data-view/components/timeline.tsx
  • packages/raystack/components/data-view/data-view.module.css
  • packages/raystack/components/data-view/data-view.types.tsx
🚧 Files skipped from review as they are similar to previous changes (6)
  • packages/raystack/components/data-view/data-view.types.tsx
  • packages/raystack/components/data-view/data-view.module.css
  • apps/www/src/content/docs/components/dataview/props.ts
  • packages/raystack/components/data-view/components/timeline.tsx
  • apps/www/src/content/docs/components/dataview/index.mdx
  • apps/www/src/app/examples/timeline/page.tsx

Comment on lines +905 to +908
{/* Sort can't move a card horizontally (x is time) and `auto`
packing is chronological, so Ordering is hidden. Grouping is
left in: it renders swim-lane sections — try Team or Status. */}
<DataView.DisplayControls hideOrdering />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Disable grouping everywhere in timeline mode.

The stated review feedback says grouping is currently incorrect for timelines, but these changes leave it selectable and add demos/docs that present it as supported.

  • apps/www/src/components/dataview-demo.tsx#L905-L908: pass hideGrouping alongside hideOrdering.
  • apps/www/src/components/dataview-demo.tsx#L938-L980: remove or defer the grouped timeline demo until renderer support is corrected.
  • apps/www/src/components/demo/demo.tsx#L56-L56: remove the grouped timeline demo import if the demo is removed.
  • apps/www/src/components/demo/demo.tsx#L93-L95: remove the grouped timeline demo from the default scope.
  • apps/www/src/content/docs/components/dataview/demo.ts#L357-L359: use hideOrdering hideGrouping in the primary preview.
  • apps/www/src/content/docs/components/dataview/demo.ts#L382-L419: remove the grouped timeline preview until grouping works correctly.
📍 Affects 3 files
  • apps/www/src/components/dataview-demo.tsx#L905-L908 (this comment)
  • apps/www/src/components/dataview-demo.tsx#L938-L980
  • apps/www/src/components/demo/demo.tsx#L56-L56
  • apps/www/src/components/demo/demo.tsx#L93-L95
  • apps/www/src/content/docs/components/dataview/demo.ts#L357-L359
  • apps/www/src/content/docs/components/dataview/demo.ts#L382-L419
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/www/src/components/dataview-demo.tsx` around lines 905 - 908, Disable
grouping in timeline mode by adding hideGrouping to DataView.DisplayControls at
apps/www/src/components/dataview-demo.tsx:905-908 and using hideOrdering
hideGrouping in the primary preview at
apps/www/src/content/docs/components/dataview/demo.ts:357-359. Remove the
grouped timeline demos at apps/www/src/components/dataview-demo.tsx:938-980 and
apps/www/src/content/docs/components/dataview/demo.ts:382-419, then remove their
import at apps/www/src/components/demo/demo.tsx:56 and default-scope entry at
apps/www/src/components/demo/demo.tsx:93-95.

@rohanchkrabrty
rohanchkrabrty merged commit dd983bb into main Jul 27, 2026
5 checks passed
@rohanchkrabrty
rohanchkrabrty deleted the feat-timeline branch July 27, 2026 08:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants