feat!: attributes only (BON-26) - #58
Merged
hunterbecton merged 18 commits intoAug 30, 2026
Merged
Conversation
…ON-26) Inferred rules stay in @layer bones-auto; explicit data-bones-type and data-bones-lines rules are unlayered. data-bones-lines paints N bars in one element with a masked ::before. An img with no src gets a box and a transparent pixel. Old data-bone* names are gone. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Renames the overlay's animate attribute to data-bones-animate and moves every browser test to the new attributes. visual.test.tsx drops React and gains fixtures for data-bones-lines, a block on a div, and an img with no src. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ON-26) The rewrite dropped the rule that keeps data-bones-auto="off" subtrees visible under a measured boundary's shadow-side visibility: hidden. Restored as the last rule in @layer bones-auto, comment included. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t data (BON-26) Adds Await (use() behind a Suspense boundary) and TRANSPARENT_PIXEL for next/image. Components take data, forward rest props to their root, and get aria-busy from the caller. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
React 19 requires awaited act scope when Suspense suspends during render. Split test into pending and resolved cases with proper async act handling. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drops createBones, forceBones, minMax, repeat, and lines from every demo component. Static labels carry data-bones-auto="off", stat fills are explicit blocks, paragraphs carry data-bones-lines. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Four "no data" shell tests never asserted aria-busy reached the root, so a
dropped {...rest} spread would have passed unnoticed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…BON-26) Pages wrap promises in Await and render each fallback as the same component with aria-busy and no data. Showcase sections and the compare mirrors follow. The body carries data-bones-animate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…up (BON-26) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… (BON-26) createBones, forceBones, readPromise, minMax, isMinMax, resolveLength, boneAttributes, TRANSPARENT_PIXEL, the React BonesBoundary wrapper, and the /react and /element entries are gone. import "@camp.dev/bones" registers <bones-boundary>. No React dependency remains. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The React IntrinsicElements augmentation for <bones-boundary> was missing
onbones:show/onbones:hide, so the snippet above it that uses onbones:hide
didn't typecheck. The Animations example rendered nothing because it still
used the promise-era `user={fetchUser()}` prop instead of aria-busy.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Round out the review's demo and test fixes: drop a vacuous moves-panel assertion, refresh the stale layout metadata, make Forced Skeletons put the same loaded cards behind aria-busy instead of an empty grid (and update its test for the real names/img count that follows), document why MovesInteractive is the one component that sets its own aria-busy, and add computed-style browser coverage for the data-bones-lines and no-src img shapes the visual baselines cover. The forced-skeletons "twelve skeleton cards" test now overrides fetchPokemonList for just that test so the busy grid has 12 real items to count, since the busy path renders exactly the pokemon it's given rather than always defaulting to 12 placeholders. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Important Review skippedToo many files! This PR contains 104 files, which is 4 over the limit of 100. To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch. Upgrade to a paid plan to raise the limit. This review is too large to run within your organization's remaining usage spending cap. Raise or remove your spending cap in the billing tab, then retry. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (7)
📒 Files selected for processing (104)
You can disable this status message by setting the Comment |
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Regenerated on CI with a temporary --update run; the workflow tweak is reverted in this same commit. Unchanged fixtures regenerate byte-identically, so only the new and renamed shots differ. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Merged
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.
The stylesheet is now the whole rendering API. Under
aria-busy="true"(on or above an element), every leaf paints as a bar and every image or control as a box;data-bones-type,data-bones-lines,data-bones-auto, anddata-bones-animateadjust that and are inert otherwise. Inferred rules live in@layer bones-auto; explicit rules are unlayered.data-bones-lines="N"paints N bars in one element (enumerated 2–8 everywhere, any integer where advancedattr()exists). Animgwith nosrcgets a box and a transparent pixel.Removed:
createBones,forceBones,readPromise,minMax,isMinMax,resolveLength,boneAttributes,TRANSPARENT_PIXEL, the ReactBonesBoundarywrapper, the/reactand/elemententries, and the React peer dependency.import "@camp.dev/bones"registers<bones-boundary>; exports are.,./server,./css. The demo, docs, vanilla sandbox, and stream app use thearia-busypattern. Oneminorchangeset.Linear: BON-26. Absorbs BON-12 (selector collapse and scope-selector pinning). Spec and plan are local docs under
docs/superpowers/.Verified: root
vp check(apart from the pre-existing stale worktree under.claude/worktrees/); package unit and browser projects (175 tests); demo check, tests (111), and build; docs check and build; stream check and tests; vanilla check, tests, and build. Cross-engine check ofpackages/bones/sandbox/auto.htmlin Safari and Firefox: pending (only Chromium is installed locally).The visual job fails on the first run: Linux baselines for the new fixtures (
explicit-force,lines-16,lines-24,block-div,img-no-src) do not exist yet andreact-forcewas removed. They get regenerated with the temporary--updatecommit and artifact harvest.