feat(date-picker): DateRangePicker + RangeCalendar + DataTable range filter (pp-1373)#388
Open
interacsean wants to merge 3 commits into
Open
feat(date-picker): DateRangePicker + RangeCalendar + DataTable range filter (pp-1373)#388interacsean wants to merge 3 commits into
interacsean wants to merge 3 commits into
Conversation
interacsean
force-pushed
the
claude/date-picker-range-pp-1373
branch
from
July 16, 2026 03:36
67c5899 to
ce883c5
Compare
…on in DataTable between filters
Adds the two deferred-but-designed-for range components from the DatePicker
proposal (pp#1373), mirroring react-aria's DateRangePicker interaction spec:
- useCalendarGridState: selection-agnostic grid/focus/keyboard engine extracted
from useCalendarState (behaviour preserved), with a selection adapter so the
single and range hooks share everything but their selection model.
- useRangeCalendarState + RangeCalendar: two-click anchor→commit selection,
live hover/keyboard preview (focus follows the highlight), backwards-pick
endpoint swap, Escape cancel, contiguous-range clamping around unavailable
dates, and the pre-wired data-selection-start/end cell styling plus a new
data-in-range band painted on the gridcell.
- DateRangePicker: start/end segmented inputs (cross-field arrow navigation,
per-field blur normalization, QuickBooks shortcuts) in one labelled group
with a single trigger and shared popover that closes only when the second
pick completes the range; a range typed in reverse flags invalid with a
localized message instead of silently swapping.
- DataTable date filters: the between operator now renders one DateRangePicker
instead of two stacked DatePickers. The committed {min,max} value shape is
unchanged (GraphQL/URL serialization untouched); reversed ranges can no
longer be applied; switching a date filter to between seeds both bounds;
malformed URL date values no longer crash the editor; an emptied range
disables Apply (remove stays on the chip's ✕).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the static 3-row Table on the vite example Orders page with a DataTable over ~22 mock orders, mirroring the Products demo: - mock-orders.ts: an async useOrdersQuery hook (~800ms latency, loading window) that filters/sorts/paginates in memory, so the DataTable's loading state (skeleton rows) is exercised on every fetch. - Filter/sort/pagination synced to the URL via useURLCollectionVariables. - A `date`-typed "Placed on" column, so its between filter renders the new DateRangePicker — exercising this branch's feature end to end. - Row click / "View details" action navigate to the order detail page. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
interacsean
force-pushed
the
claude/date-picker-range-pp-1373
branch
from
July 16, 2026 07:27
ce883c5 to
a20f5c0
Compare
interacsean
marked this pull request as ready for review
July 16, 2026 07:39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the two deferred-but-designed-for range components from the DatePicker proposal —
DateRangePickerandRangeCalendar— with a{ start, end }range value (exported asDateRange), and wires the range picker into the DataTable datebetweenfilter.Planning issue: https://github.com/tailor-inc/platform-planning/issues/1373 (fast-follow of #1093; builds on the keyboard-shortcuts work merged in #364).
What's included
RangeCalendar(standalone) +DateRangePicker(segmented start/end inputs sharing one popover calendar), mirroring the Adobe React ARIA interaction spec:Enter/Spaceanchors then commits (focus auto-advances one day after anchoring so plain arrows extend);Escapecancels an in-progress selection; contiguous-range clamping around unavailable datesuseCalendarGridState, with a selection adapter so the single-valueuseCalendarStateand the newuseRangeCalendarStateshare everything but their selection model. The single-dateCalendar/DatePickerbehavior is unchanged.betweenfilter now renders oneDateRangePicker(a single shared range calendar) instead of two stacked date pickers. The committed{ min, max }value shape is unchanged, so GraphQL/URL serialization and chip formatting are untouched. A reversed range can no longer be applied; switching a date filter tobetweenseeds both bounds; a malformed URL date no longer crashes the editor.docs/components/date-picker.md) and a changeset (minor).DataTableover an async mock (useOrdersQuery, ~800 ms latency) so loading/pagination/filter behavior — including the new range filter on thePlaced ondate column — is demoable end to end.Testing
pnpm type-check— green across all 9 packagespnpm --filter @tailor-platform/app-shell test— 1383 passing (new suites:range-calendar.test.tsx,date-range-picker.test.tsx, plus expandedtoolbar/calendar/date-fieldcoverage)pnpm lint— cleanbetween→ range-calendar filter)Notes for reviewers
🤖 Generated with Claude Code