Repository navigation
ActivityTimeline date grouping and status filter, TxRow mobile fixes, Skeleton reduced motion, Separator flex collapse - #996
Merged
Conversation
… large-list rendering (Sorokit#960) Adds All/Succeeded/Unsuccessful status filter chips, Today/Yesterday relative date labels for the two most recent groups, sticky date headers so a transaction's date stays visible while scrolling, and content-visibility on each row so a long list skips layout and paint for rows scrolled out of view without adding a virtualization dependency. Also hardens loadTimeline against a stale response landing after a newer request or unmount, matching the fetchId-guard pattern already used in TransactionHistory.
…de decorative status icon (Sorokit#961) Adds a truncate class to the memo span so a long memo clips instead of pushing the timestamp and fee columns off-screen on narrow viewports. Adds a copy-hash control with an accessible name and a Copy transaction hash tooltip, matching the pattern already used in ActivityTimeline; it renders as role=button rather than a native button since the row itself can be an anchor linking to the block explorer, and a button nested inside an anchor is invalid HTML. Marks the status icon aria-hidden since the adjacent Success/Failed badge already announces the same status as real text.
…orokit#962) Gates both animation variants on motion-safe with a static motion-reduce fallback, since Tailwind's animate-pulse and the custom skeleton-shimmer keyframe both kept animating under prefers-reduced-motion otherwise. Adds a SkeletonTable primitive for table loading states, exported alongside the other pre-composed skeletons. Left the surface color tokens unchanged: dark and light theme already use the same semantic --color-surface/--color-surface-2 pair with near-identical contrast in both themes (roughly 1.08:1 either way), so there was no dark-mode specific contrast gap to fix.
…support (Sorokit#963) Adds self-stretch and min-h-full to the vertical separator so it keeps its height inside a flex container using align-items: stretch, where an unconstrained h-full alone collapses to 0px. Adds a decorative prop that switches role=separator/aria-orientation to role=none/aria-hidden=true for purely visual separators, so they stop being announced as a separator landmark on every render.
|
@iduhtheman Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
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
Batches four assigned issues: date grouping, status filtering, and large-list rendering in ActivityTimeline, mobile and accessibility fixes in TxRow, prefers-reduced-motion support plus a new SkeletonTable primitive, and a flex-collapse fix plus decorative role support in Separator.
#960: ActivityTimeline date grouping, status filter, and virtualization
Date grouping by calendar day already existed server-side via
TimelineGroup, but headers always showed a full weekday/month/day label. Added Today/Yesterday labels for the two most recent groups, made the date headers sticky so the current group's date stays visible while scrolling, and added All/Succeeded/Unsuccessful status filter chips (client-side, since the current page's transactions are already loaded). For large lists, usedcontent-visibility: autoon each row rather than adding a virtualization dependency, switching tovisibleon the expanded row so its operation details stay rendered and measurable.Also hardened
loadTimelineagainst a stale response landing after a newer request or an unmount, matching thefetchId-guard pattern already used inTransactionHistory. This surfaced while adding tests: the status filter chips' "Succeeded"/"Unsuccessful" labels needed to be visibly distinct from the row-level "Success"/"Failed" badge text, since an earlier attempt at "Success"/"Failed" chip labels collided with existinggetByText("Success")assertions elsewhere in the suite and intermittently let a test proceed before the real transaction data had loaded.#961: TxRow mobile truncation, copy-hash tooltip, icon accessibility
Added a
truncateclass to the memo span so a long memo clips instead of pushing the timestamp and fee columns off-screen on narrow viewports. Added a copy-hash control with an accessible name and a "Copy transaction hash" tooltip, matching the pattern already used inActivityTimeline'sGroupedTxRow. It renders withrole="button"on aspanrather than a nativebutton, since the row itself can be an<a>linking to the block explorer, and abuttonnested inside anais invalid HTML. Marked the status iconaria-hiddensince the adjacent Success/Failed badge already announces the same status as real, readable text.#962: Skeleton reduced-motion support and SkeletonTable
Neither Tailwind's
animate-pulsenor the customskeleton-shimmerkeyframe respectedprefers-reduced-motionon their own. Gated both onmotion-safe:with a staticmotion-reduce:fallback, matching the convention already established inWalletStatusBadge. Added aSkeletonTableprimitive (header row + N body rows of M cell placeholders, grid-aligned) for table loading states, exported alongside the other pre-composed skeletons.Left the surface color tokens unchanged: this app's dark and light themes already use the same semantic
--color-surface/--color-surface-2pair, and computing their actual contrast ratio shows dark mode (approximately 1.08:1) is not meaningfully worse than light mode (also approximately 1.08:1). There wasn't a real dark-mode-specific contrast gap to fix, and changing the palette without one risked a visual regression.#963: Separator flex collapse and decorative role
Added
self-stretch min-h-fullto the vertical separator so it keeps its height inside a flex container usingalign-items: stretch, where an unconstrainedh-fullalone collapses to 0px. Added adecorativeprop that switchesrole="separator"/aria-orientationtorole="none"/aria-hidden="true"for purely visual separators, so they stop being announced as a separator landmark on every render.Verification
npm run lintcleannpm run typecheckcleannpm run buildsucceedsnpm run test:exportscleannpm test: 1953 passed, 1 pre-existing failure unrelated to this change (BudgetScreen.test.tsx, confirmed failing identically on a clean checkout of upstreammainbefore any of these commits)npm run size: ES module and CommonJS bundles both within the configured gzip budgetActivityTimeline.test.tsxsuite was run 15+ times after each change to confirm no flakiness remainscloses #960
closes #961
closes #962
closes #963