Repository navigation
Refresh portable blocks and align component contracts - #267
Merged
Merged
Conversation
Omit presence flags when false in dropdown menu items and labels, serialize a null dropdown defaultValue as an empty attribute, scope carousel parts to their own root, sync theme toggles after page loads, forward Layout lang and type Video props as iframe attributes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mark Banner container, Logo, LogoText, Marquee, Price, PriceValue, PriceUnit, Rating, Video and Icon with data-slot. Banner, Header and Section default their variant so data-variant reflects the cva default, PriceValue exposes its variant on the root, and Carousel controls emit their resolved data-variant and data-size like Button. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…markers in UI components Typography and TOC wrappers use logical inline directions, NavigationMenuLink sets aria-current from active, Item and Logo pick a link from href presence, ToastAction exposes its variant and size, Video and the newly marked roots let callers override title and data-slot, and ThemeToggle accepts disabled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Doc1 marks its page-copy button with data-doc-copy and its content with data-doc-content, so code-block decoration and copy delegation no longer depend on the docs-copy-page ID prefix or touch unrelated Typography. Doc1 and Blocks1 accept native div attributes on the outer container and group their open-in links in DropdownMenuGroup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Header1, Header2 and Header3 accept navigation active and pass it to NavigationMenuLink, and all five headers set aria-current on the matching mobile SheetClose links. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sidebar1 takes an optional githubStars number and formats it, keeping the Stars fallback, so the block no longer fetches during render. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocks keep their index, featured and position based styles and map button data explicitly, so caller data can no longer override them. The docs callout button becomes a plain link in the global schema. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Badges, headings, descriptions, social proof, feature lists, button rows and item labels that belong to each block's design are now required and render directly. Article badges and the Features2/5 and Services2/5 button rows had no caller and are removed. CTA1 social proof and FAQ1 buttons stay optional because real callers omit them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Header menus, footer navigation, pricing, service links, ratings, carousel arrows, doc code copy, the assistant prompt and Sidebar1 labels no longer fall back to English in block code. Headers render their own sheet close so its label comes from props, and placeholder images default to an empty alt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Articles1-4 and Services7 no longer fall back to href="#"; a card without an href renders as a div with the same styling, and Services7 shows its link row only for linked cards. Optional service links check for a missing href instead of a falsy one. Also restores the Articles2 Badge import that the category badge still needs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Article and Articles items without a badge, Features2/5 and Services5 without a button row drop those dependencies. Headers import the close icon directly and list @lucide/astro. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BannerContainer gains optional closeLabel and Sidebar optional mobileTitle/mobileDescription, defaulting to the previous text. Banner1 requires closeLabel and takes an optional storageKey; Banner2 drops its unused key. Banner1 separator is a middle dot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Astro emits a native element's hardcoded attribute and a spread attribute of the same name both, and the browser keeps the first, so a caller's aria-label (such as Sidebar1 labels.breadcrumb) never applied. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviews3 takes required labels {previous, next, carousel, slide}.
Carousel and CarouselItem render a caller's aria-roledescription once,
defaulting to "carousel" and "slide", since Astro emits both a native
hardcoded attribute and a same-named spread attribute.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
✅ Deploy Preview for fulldev-ui ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… images Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…te the changeset Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xactly Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A disabled or aria-disabled toggle no longer counts as a pause control, so the marquee stays static. The fallback tab stop is only managed when the caller set no tabindex, and disabled, hidden, inert or tabindex=-1 content no longer counts as reachable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
github-light-default comments (#6E7781) measure 4.32:1 on the code background. Every token of the high-contrast theme clears 4.5:1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Button transitions were sometimes still running when axe measured colors, so it reported in-between colors as contrast failures. The wait is bounded to 5 seconds and skips endless animations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A toggle disabled through its fieldset, or with a hidden or display:none parent, no longer counts as a pause control. Rows also stop when a toggle is later disabled, made inert, or hidden at a breakpoint, and start again with the user's pause kept when it becomes usable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The marquee now shows and hides its toggle through a private display:contents wrapper, so the button's hidden attribute, class and style stay the caller's and count when deciding whether the toggle can be seen. Instead of a document-wide observer, it watches class, style, hidden, disabled, aria-disabled and inert on each toggle and its ancestors, and the sizes of the toggle's path inside the marquee, so a toggle hidden at a breakpoint stops motion even when the row keeps its width. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
These sections switch to the dark theme variables but inherited the page's text color, so the Hero4 and Hero9 checklists and the CTA4 outline link were dark on dark under a light page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NavigationMenuLink lays out in a row, so the promotional card put its label and description beside the full-width image, over the link column. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A paused finite animation never finishes, so it held the scan for the full 5s and failed it. Running finite animations are still awaited, endless ones still skipped, and the timeout is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Refresh the existing UI component contracts and complete the quality pass through all 82 portable blocks. Blocks accept plain content, templates own schema mapping and data gathering, and local block code owns button styling and composition. The matching consumer migration is https://github.com/fulldotdev/astro-template/pull/38.
pnpm a11yscan with route/node diagnostics and honest manual-check results. Ordinary build/check remains browser-free. Fix dark block foregrounds, Header5 promotional-card composition and light syntax-comment contrast.This contains intentional pre-1.0 API changes: template callers must migrate the SectionContainer layout, header/footer labels and plain link/button data, price data, contact form composition and marquee controls. The changeset and migrated Astro-template provide the corresponding implementation.
Validation on render/registry head
da7bf9467f3aaa22d95bf6ff1367fe1924b1d28e, againsted03f9519e9962baaff3c71e017c9e25fc7e3630: build (90 pages, 176 links), check (21 tests), independent general and boundary reviews, and exact registry validation pass. All 148 registry items and 3,864 transformed style files match their source/metadata/dependencies. The rendered accessibility scan has zero block-page failures and 28 existing unrelated documentation failures, independently matched to baseline; the full scan therefore exits nonzero.All eight presets pass actual-template installations, strict type checks and builds with every one of the 82 blocks and exact installed file content. Independent rendered review covers all 82 blocks, 270 before/after page pairs and the final light/dark/menu/marquee deltas. CI and the deployed preview passed on that render head.
Final head
5b37bbed56a3087a09e72c08ce6ea7fd814e828eadds only the shared scanner fix excluding paused finite animations, confirmed from the companion CodeRabbit PR review. Running finite animations still settle; endless/paused animations are skipped. Independent fix-delta verification passes: paused finite animations skip immediately, running finite animations still finish, and infinite animations skip. Repeated check/scan matches the results above. Current-head CI passes and Netlify deploy6ac91a65ca4eb50008751cb3is verified at this exact commit. Hosted preview checks pass for mobile menu focus/Escape, Header5 composition, dark-block foregrounds and marquee motion/pause/reduced motion. Preview: https://deploy-preview-267--fulldev-ui.netlify.app/CodeRabbit CLI: not reviewed. The full completed-PR attempt reports 1,096 eligible files against its 300-file maximum (1,097 Git changed files). No narrower review was substituted. CodeRabbit PR review: not reviewed, deliberately skipped under the user-approved replacement for its 150-file limit. The user explicitly approved replacing both CodeRabbit reviews and marking this PR ready at head
5b37bbed56a3087a09e72c08ce6ea7fd814e828e. The replacement controls are the completed independent general/boundary/visual reviews, full registry/source-output validation, eight actual-template preset installations/builds, build/check, current-head CI and verified deploy preview. The 28 pre-existing accessibility failures outside block pages remain explicit above. No unresolved introduced findings remain. The user has authorized full Dispatch: merge to main and verify the published result.@coderabbitai ignore
Dispatch completed and independently verified: UI source merged as
942467396e22097cbd7a76c10a41a6acd12fb510, release PR268 merged as7aef7eb1c772baf8609abfcb047dc00be4bffce6, and Astro-template PR38 merged asa523c833965391474bd1521abb94f051a3a40b66. Netlify production deploy6ac92341592b720008bbee2fis built/published at the exact UI release commit. All 1,341 live registry JSON files match the release; affected menus, marquee and readability pass independent browser checks.fulldev-ui@0.20.0is npm latest and its standard tarball URL is accessible; published SHA512/SHA1 integrity and all 1,341 registry plus 468 source files match the release. Template merged tree equals the reviewed source, required PR CI passed, and six NL/EN page/navigation checks pass; the template has no separate main-CI or hosted deployment configured. The 28 existing unrelated UI documentation accessibility failures remain recorded above.