Skip to content

docs: add comprehensive .sf-* class coverage audit page - #619

Merged
jackgranatowski merged 6 commits into
mainfrom
claude/framework-class-audit-demo-ilpxbj
Jul 15, 2026
Merged

docs: add comprehensive .sf-* class coverage audit page#619
jackgranatowski merged 6 commits into
mainfrom
claude/framework-class-audit-demo-ilpxbj

Conversation

@jackgranatowski

@jackgranatowski jackgranatowski commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds demo-audit.html, a comprehensive, self-contained audit page that visually demonstrates every .sf-* class documented in docs/classes.md. The page loads only dist/slashed.full.css with no custom CSS, scripts, or third-party resources, making it a reliable reference for framework coverage and a visual regression baseline.

The audit is organized by source file (layout primitives, macros, states, accessibility, motion, print, themes, forms, components, and utilities) with realistic markup examples for each class and its modifiers. This serves as both developer documentation and a QA tool for verifying that all documented classes render correctly.

Type

  • docs
  • feat
  • fix
  • chore / tooling

Checklist

  • Conventional Commit messages (feat:, fix:, docs:, …) — enforced by commitlint
  • npm run lint:css passes (stylelint) — no CSS changes
  • npm run build rebuilds dist/ — no source changes
  • npm test passes (unit + Playwright e2e) — no code changes
  • Version references in sync if any version-related file changed — no version changes
  • LLM guide reviewed/updated if core/*.css, optional/*.css, or token-registry.json changed — no token changes
  • Generated artifacts regenerated, not hand-edited — no generated files modified
  • CHANGELOG.md updated under ## [Unreleased] — documentation-only change, no user-facing API change
  • Breaking changes include migration docs — N/A

Notes

This is a static HTML audit page with no build or test impact. It serves as a living reference for framework class coverage and can be opened directly in a browser (open demo-audit.html or serve via a local HTTP server). The page is self-documenting and requires no additional tooling or scripts to function.

https://claude.ai/code/session_01XnmdrS2b2HnP2gjyTKoa2Y

Summary by CodeRabbit

  • Breaking Changes

    • Removed the .sf-corner-scoop macro, its directional variants, and related customization tokens.
    • Use direct masking styles to create concave corners when needed.
  • Documentation

    • Updated API references, demos, configurator content, and token counts.
    • Added expanded overlap macro guidance and a new text-gradient preview.
  • Tests

    • Updated coverage and snapshots to reflect the revised public API.

claude added 2 commits July 15, 2026 14:05
Standalone page loading only dist/slashed.full.css (no overrides, no
scripts) that exercises all 294 .sf-* classes and 28 .sf-is-* state
classes documented in docs/classes.md, organized by source file.
@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@jackgranatowski, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 24 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: bb28f52f-daeb-45b5-8193-387ec81b5187

📥 Commits

Reviewing files that changed from the base of the PR and between d516667 and 47c52b0.

⛔ Files ignored due to path filters (1)
  • configurator/src/data/classes.generated.json is excluded by !**/*.generated.*
📒 Files selected for processing (12)
  • CHANGELOG.md
  • demo-audit.html
  • demos/full-api-demo-with-overrides.html
  • demos/full-api-demo.html
  • docs/api-index.json
  • docs/api-index.md
  • docs/classes.md
  • docs/demo.html
  • docs/llm-guide.md
  • docs/migration.md
  • docs/registry.json
  • docs/token-annotations.json
📝 Walkthrough

Walkthrough

The PR removes the .sf-corner-scoop macro, its placement variants, and customization tokens. It updates previews, demos, documentation, API metadata, tests, token snapshots, and adds a comprehensive HTML coverage audit page.

Changes

Corner-scoop removal

Layer / File(s) Summary
Remove implementation and preview wiring
core/macros.css, core/tokens.macros.css, configurator/..., demos/generate.mjs, demos/ultimate-override.css, tests/*
Removes the macro, tokens, overrides, preview section, and dedicated tests; updates the parser regression fixture.
Update demos and documentation
CHANGELOG.md, docs/*.md, demos/full-api-demo*.html
Removes corner-scoop examples and documents the reduced macro surface and replacement overlap recipes.
Refresh API and token metadata
docs/*.json, docs/token-index.*, reports/..., token-registry.json, tests/token-api.snapshot.json
Removes the macro and tokens from indexes and snapshots, marks the tokens as removed, and adjusts aggregate counts.
Add framework coverage audit
demo-audit.html
Adds static coverage examples for layout, macro, state, accessibility, motion, theme, forms, components, and utility classes.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Suggested labels: codex

Suggested reviewers: claude, kiro-agent

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the new comprehensive .sf-* coverage audit page added by the PR.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/framework-class-audit-demo-ilpxbj

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jul 15, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds demo-audit.html, a new static HTML page that demonstrates every .sf-* class documented in docs/classes.md, organised by source file and relying solely on dist/slashed.full.css.

  • The page covers the full breadth of the framework's class surface (layout primitives, macros, states, accessibility, motion, print, themes, forms, components, and utilities) with realistic markup examples for each class and its modifiers.
  • Two concrete rendering problems exist: the sf-imposter--fixed demo wraps the element in a position: relative div which does not contain position: fixed children in CSS — the button will be viewport-fixed and float over page content while scrolling; and a bare <li> at line 486 is a direct child of a grid <div>, which is invalid HTML with browser-dependent rendering.
  • The file's own intro text describes it as "automated", which is inaccurate and risks confusing future maintainers who may not update it when new classes are added.

Confidence Score: 3/5

The file is documentation-only with no build or test impact, but two of its demos are actively incorrect and will render incorrectly or inconsistently in browsers.

The sf-imposter--fixed demo will attach a floating button to the viewport as users scroll through the 800-line page, covering other audit content — the opposite of the isolated demo box it appears to show. The bare <li> outside a list element is invalid HTML whose rendering is browser-defined. Both issues undermine the stated purpose of the page as a reliable visual regression baseline and developer reference.

demo-audit.html — the imposter--fixed demo (lines 221–223) and the orphaned <li> (line 486) need correction before this page can serve as a trustworthy reference.

Important Files Changed

Filename Overview
demo-audit.html New 815-line static HTML audit page demonstrating every .sf-* class. Contains an invalid bare <li> in a grid div, a misleading sf-imposter--fixed demo that will render fixed to the viewport (not the parent box), and a description claiming the page is "automated" when it is hand-crafted.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Browser opens demo-audit.html] --> B[Loads dist/slashed.full.css]
    B --> C{CSS file present?}
    C -- Yes --> D[Renders audit sections]
    C -- No --> E[Page renders unstyled / broken]
    D --> F[Layout primitives section]
    D --> G[Macro classes section]
    D --> H[State classes section]
    D --> I[Accessibility section]
    D --> J[Motion section]
    D --> K[Print / Theme sections]
    D --> L[Forms section]
    D --> M[Components section]
    D --> N[Utilities section]
    F & G & H & I & J & K & L & M & N --> O[Visual QA baseline]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[Browser opens demo-audit.html] --> B[Loads dist/slashed.full.css]
    B --> C{CSS file present?}
    C -- Yes --> D[Renders audit sections]
    C -- No --> E[Page renders unstyled / broken]
    D --> F[Layout primitives section]
    D --> G[Macro classes section]
    D --> H[State classes section]
    D --> I[Accessibility section]
    D --> J[Motion section]
    D --> K[Print / Theme sections]
    D --> L[Forms section]
    D --> M[Components section]
    D --> N[Utilities section]
    F & G & H & I & J & K & L & M & N --> O[Visual QA baseline]
Loading

Reviews (1): Last reviewed commit: "docs: add commented CDN link for local t..." | Re-trigger Greptile

Comment thread demo-audit.html
Comment on lines +221 to +223

<h3>Overlay helper</h3>
<div class="sf-box" style="position: relative; min-block-size: 6rem">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 position: fixed escapes the parent positioning context

sf-imposter--fixed (assumed to apply position: fixed) is demonstrated inside a div that only carries position: relative. CSS position: fixed elements are positioned relative to the viewport, not position: relative ancestors — the only exceptions are when a parent has transform, filter, or perspective applied. As a result, when someone opens this audit page and scrolls, this button will be anchored to the viewport and float over whatever content is currently visible, rather than being centered inside its apparent parent box. The demo is both visually broken and misleading about what the class actually does in practice.

Consider wrapping the imposter demo in a scrollable overflow: hidden container, or applying transform: translateZ(0) to the parent box to create a new stacking/fixed context, so the fixed-positioned element stays contained within the demo region.

Comment thread demo-audit.html
<div class="sf-box sf-is-highlighted">is-highlighted</div>
<div class="sf-box sf-is-open">is-open panel</div>
<div class="sf-box sf-is-collapsed">is-collapsed panel</div>
<button class="sf-btn" aria-expanded="true">

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Bare <li> outside a list element is invalid HTML

The <li> here is a direct child of <div class="sf-grid sf-grid--s">, which is not a <ul>, <ol>, or <menu>. Per the HTML spec, <li> is only permitted as a child of those three elements. Browsers apply differing error correction, so the rendered output is implementation-defined and may look inconsistent across Chrome, Firefox, and Safari. The aria-selected attribute on an element that isn't inside a role="listbox" also won't carry its intended semantics for screen readers. Wrapping the element in a <ul style="list-style:none"> (or switching to a <div>) would make the markup valid and the demo reliable.

Comment thread demo-audit.html Outdated

<div class="sf-container">
<div class="sf-box sf-surface--info">
<p>This page is an automated coverage audit for the SLASHED framework. Every

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 "Automated" misdescribes this hand-authored file

The intro paragraph calls this "an automated coverage audit", which implies the page is programmatically generated from docs/classes.md. It is actually a manually-authored static file. If future contributors believe it is auto-generated, they may not think to update it when new classes are added — or they may search for a script that doesn't exist.

Suggested change
<p>This page is an automated coverage audit for the SLASHED framework. Every
<p>This page is a hand-authored coverage audit for the SLASHED framework. Every

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

claude added 2 commits July 15, 2026 14:38
- Address CodeRabbit/Greptile review feedback: fix imposter--fixed
  escaping its host via a containing-block transform, wrap the
  orphaned <li> in a <ul>, and correct the "automated" -> "hand-authored"
  wording.
- Set --sf-box-border-width once on <body> so .sf-box demos (invisible
  by default, border-width: 0) are actually visible throughout the page.
- Fix low-contrast text on .sf-card instances nested inside
  .sf-surface--neutral sections (corner-scoop, clickable-parent, hover
  cards) by dropping the ambient dark-surface wrapper where cards were
  affected.
- Give the overlap/overlap-host row clearance so .sf-overlap no longer
  intrudes into the heading above it.
- Fix .sf-is-pressed / .sf-is-expanded button demos (contrast + text
  overflow).
- Reset --sf-sticky-offset to 0 on the sticky demo boxes so the sticky
  element isn't pushed down by the page-header-height token this page
  doesn't have.
Remove the .sf-corner-scoop macro (and its --top-left/--top-right/
--bottom-left/--bottom-right modifiers plus the --sf-corner-scoop-size/
--sf-corner-scoop-at knobs). Judged too niche for the public API
relative to its cost while still pre-1.0:

- a single absolute --sf-corner-scoop-size needs per-element tuning to
  read well across control-sized and hero-sized boxes (no size tier);
- the mask clips box-shadow/border at the cut and can't compose with the
  other mask-based macros (.sf-overflow-fade, .sf-scroll-shadow) on the
  same element.

Source removed from core/macros.css + core/tokens.macros.css; all
generated docs/registry/configurator/demo artifacts regenerated; the
hand-authored guides (macros.md, llm-guide.md, roadmap.md, CHANGELOG,
token-annotations) and the static QA artifacts (token-reference coverage
page, full-api tokens report, token-api snapshot) updated to match. The
parse-lib regression test that used corner-scoop as an inline fixture was
repointed to a neutral synthetic fixture, preserving its coverage.

To keep a concave corner, apply the mask directly on the element:
  style="-webkit-mask-image: radial-gradient(circle at 100% 0, transparent 24px, black 24.5px);
         mask-image: radial-gradient(circle at 100% 0, transparent 24px, black 24.5px)"

BREAKING CHANGE: .sf-corner-scoop and its modifiers/tokens are removed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XnmdrS2b2HnP2gjyTKoa2Y
@coderabbitai coderabbitai Bot added the codex label Jul 15, 2026
claude added 2 commits July 15, 2026 19:06
Reconcile the corner-scoop removal with main's concurrent changes:
- CHANGELOG: keep both Breaking Changes bullets (corner-scoop removal +
  .sf-bento--compact/--tall → --row-compact/--row-tall rename).
- demo-audit.html: adopt the new .sf-bento--row-compact/--row-tall names.
- Regenerated all docs/api-index/registry artifacts from the merged
  source so generated-file conflicts resolve to the combined state.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XnmdrS2b2HnP2gjyTKoa2Y
The corner-scoop removal is a breaking change (refactor(macros)!), so the
CI "Check migration docs for breaking changes" gate requires a
docs/migration.md entry. Add one under 0.7.8 → 0.8.0 documenting the
removal and the inline mask-image replacement.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XnmdrS2b2HnP2gjyTKoa2Y
@jackgranatowski
jackgranatowski merged commit e3646cd into main Jul 15, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants