Skip to content

fix(webkit): render the paginator page buttons as one segmented strip - #975

Merged
isaque-bock-azion merged 5 commits into
mainfrom
fix/paginator-segmented-strip
Sep 17, 2026
Merged

isaque-bock-azion merged 5 commits into
mainfrom
fix/paginator-segmented-strip

Conversation

@gabriel-lisboa-azion

Copy link
Copy Markdown
Contributor

Summary

  • The page buttons were detached, individually-rounded chips separated by a gap. They now sit in one bordered container at zero gap, rounding only the outer corners at the two ends — the segmented strip the design calls for.
  • previous / next are icon-only and carry no surface of their own; number / more keep var(--bg-surface). Hover and active became mutually exclusive, so a pressed button reads one step below hover instead of stacking both layers. Disabled now keeps the kind's own surface and only mutes the foreground, so it no longer punches a lighter hole in the strip.
  • The rows-per-page select drops to 28px to match the strip height, and the page-info text moves to .text-body-xs. The spec and story were updated to match.

How to test

  1. pnpm --filter @aziontech/webkit test — the 37 assertions in paginator.test.ts pass (verified locally in Chromium).
  2. pnpm storybook:dev, open Components / Data / Paginator → Default. The page buttons read as one continuous bordered strip with no gaps; only the leftmost and rightmost corners are rounded. Previous/Next are chevrons with no text label.
  3. Press and hold a page button. The pressed surface should read darker than nothing but one step below hover — hover and active must not stack.
  4. Open the Buttons story. Both rows render inside a Paginator root, so the disabled row shows disabled controls that keep their surface and only mute their glyph.
  5. Toggle the Storybook theme. The strip border, the selected page and the disabled foreground should all hold in dark mode.

Notes

  • Visual baselines need regenerating. Both the Default and Buttons stories change appearance, so the visual-regression job will fail until a regen-baselines pass lands on this branch. Happy to run it once CI reports.
  • Not breaking: no prop, event, slot or export changed. previous / next already rendered their default slot only for kind="number" on main, so dropping the slot text from the examples matches existing behaviour — the accessible name comes from aria-label, as the data-driven root already does.
  • No new dependency. No related issue.

The page buttons were detached, individually-rounded chips with a gap between
them. They now sit in a single bordered container at zero gap, rounding only the
outer corners at the two ends, which is the strip the design calls for.

- previous/next are icon-only and carry no surface of their own; number/more
  keep var(--bg-surface). Hover and active are mutually exclusive, so a pressed
  button reads one step below hover instead of stacking both layers.
- The rows-per-page select drops to 28px to match the strip height, and the
  page-info text moves to .text-body-xs.
- Disabled keeps the kind's own surface and only mutes the foreground, so a
  disabled control no longer punches a lighter hole in the strip.
…ed strip

The paginator footer row is 30px instead of 32px (28px buttons plus the strip
border, replacing the 32px page-size select that used to drive the height), so
the three Paginator stories and the seven Table stories that render a footer
paginator all shift by 2px. The four Table stories with no paginator
(compact-header, compact-header-with-sticky-column, composition, empty) are
untouched.
@isaque-bock-azion
isaque-bock-azion merged commit 7a4a4b1 into main Sep 17, 2026
23 checks passed
@isaque-bock-azion
isaque-bock-azion deleted the fix/paginator-segmented-strip branch September 17, 2026 20:06
@github-actions github-actions Bot mentioned this pull request Sep 17, 2026
gabriel-lisboa-azion added a commit that referenced this pull request Sep 21, 2026
demo/vue-sample had drifted 540 ahead / 31 behind main while most of its
webkit work was reviewed and landed upstream (#941 command-menu, #942
GlobalHeader placements, #943 NavigationMenu, #952 Menu, #960 sidebar
collapse, #973 floating-panel placement, #975 paginator, #977 templates
exports, #921 amount ladder), after which main swept comments (#951) and
reworked the CLI onto a derived bundle (#968/#970).

Main is the source for everything the two share. Of the 28 conflicted
source files, 17 differed from main only in comments — their code was
byte-identical — and 6 more were genuinely newer on main, so all 23 take
main verbatim, including the use-placement TypeScript rewrite that
replaces the old index.js.

Three carve-outs keep demo work main does not have yet:

- sidebar: main's CSS-driven collapse is the base; the `side` axis is
  re-applied on top of it as data-[side=end] variants rather than the JS
  edge map it used to be, and the drag sign moves into the rail
  composable. The one test that asserted the removed inline transform now
  asserts the panel's published edge, since the direction is CSS the
  unstyled test env cannot see.
- theme: texts.data.js keeps demo's 13 extra text-wrap and 10 extra
  tracking declarations (PR #982, in flight). Both sides carry the same
  34 entries, so an entry count would not have caught the loss.
- doc-prose keeps its chrome-padding fix (PR #981, in flight).

catalog.json, authoring-baseline.json, the theme dist and the lockfile
are regenerated rather than hand-resolved; the 13 conflicted visual
baselines take main's and are regenerated from CI next.

Verified: every file main touched is byte-identical to main except the
22 accounted for above; 2364 browser tests, 179 toolkit tests, lint,
vue-tsc, 99.98% type coverage, both ratchets, the Storybook build and
the webkit-sample build all pass.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants