diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 88b4cca5..84bc2841 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -171,7 +171,7 @@ jobs: run: | git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - git add package.json package-lock.json docs/roadmap.md docs/llm-guide.md CHANGELOG.md configurator/package.json configurator/package-lock.json + git add package.json package-lock.json docs/roadmap.md docs/llm-guide.md llms.txt CHANGELOG.md configurator/package.json configurator/package-lock.json if git diff --cached --quiet; then echo "Nothing to commit — version artifacts on main already match ${{ steps.ver.outputs.tag }}." echo "pushed=false" >> "$GITHUB_OUTPUT" diff --git a/configurator/src/data/classes.generated.json b/configurator/src/data/classes.generated.json index e09ad391..6e6ecb76 100644 --- a/configurator/src/data/classes.generated.json +++ b/configurator/src/data/classes.generated.json @@ -2005,12 +2005,12 @@ "layer": "slashed.states" }, { - "name": "sf-is-skeleton", - "selector": ".sf-is-skeleton", + "name": "sf-is-shimmer", + "selector": ".sf-is-shimmer", "kind": "state", "category": "State classes", "group": "LOADING / ASYNC FEEDBACK", - "description": "Skeleton loading placeholder state. Applies a shimmer animation over the element to indicate that content is loading. Works on both img and non-media elements.", + "description": "Shimmer loading placeholder state. Applies a shimmer animation over the element to indicate that content is loading. Works on both img and non-media elements. (Renamed from .sf-is-skeleton so \"skeleton\" refers only to the planned .sf-skeleton component.)", "optional": false, "layer": "slashed.states" }, @@ -3104,6 +3104,146 @@ "optional": true, "layer": "slashed.utilities" }, + { + "name": "sf-width-10", + "selector": ".sf-width-10", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-20", + "selector": ".sf-width-20", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-30", + "selector": ".sf-width-30", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-40", + "selector": ".sf-width-40", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-50", + "selector": ".sf-width-50", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-60", + "selector": ".sf-width-60", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-70", + "selector": ".sf-width-70", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-80", + "selector": ".sf-width-80", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-90", + "selector": ".sf-width-90", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-auto", + "selector": ".sf-width-auto", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-fit", + "selector": ".sf-width-fit", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-full", + "selector": ".sf-width-full", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-max", + "selector": ".sf-width-max", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, + { + "name": "sf-width-min", + "selector": ".sf-width-min", + "kind": "utility", + "category": "Utilities", + "group": "CONTENT-WIDTH UTILITIES (.sf-width-*)", + "description": "Constrain an element to a fraction of the content column (--sf-content-width) and centre it in normal flow. inline-size:100% lets it shrink below the cap on a narrower parent; margin-inline:auto absorbs the leftover space to centre it. The keyword variants map to CSS width…", + "optional": true, + "layer": "slashed.utilities" + }, { "name": "skip-link", "selector": ".skip-link", diff --git a/core/states.css b/core/states.css index bc073bbd..380aa1dc 100644 --- a/core/states.css +++ b/core/states.css @@ -72,12 +72,16 @@ they filled — [aria-busy="true"] covers the semantic, and the visual is two lines to hand-roll in your own component CSS if you want it. */ - img.sf-is-skeleton, - .sf-is-skeleton img { + /* Shimmer loading placeholder (was .sf-is-skeleton pre-Unreleased; renamed so + "skeleton" names only the planned .sf-skeleton component, not a state — + see docs/migration.md and roadmap.md #575). The class name now mirrors its + driving token, --sf-animation-shimmer. */ + img.sf-is-shimmer, + .sf-is-shimmer img { opacity: 0 !important; } - .sf-is-skeleton { + .sf-is-shimmer { color: transparent !important; background: linear-gradient( 90deg, diff --git a/demo/index.html b/demo/index.html index f66d0efd..c03fcbf7 100644 --- a/demo/index.html +++ b/demo/index.html @@ -1426,11 +1426,11 @@
.sf-is-skeleton
+.sf-is-shimmer
.sf-is-skeleton publicSkeleton loading placeholder state. Applies a shimmer animation over the element to indicate that content is loading. Works on both img and non-media elements.
.sf-is-shimmer publicShimmer loading placeholder state. Applies a shimmer animation over the element to indicate that content is loading. Works on both img and non-media elements. (Renamed from .sf-is-skeleton so "skeleton" refers only to the planned .sf-skeleton component.)
.sf-is-success publicSuccess status state — applies success color tokens. Use for confirmation messages, completed form steps, and positive feedback.
.sf-sticky--s publicSticky positioning with an extra small gap (--sf-space-s) above the header-aware offset.
.sf-touch-target publicOpt-in WCAG 2.5.5 minimum hit area — enforces a 44px min-block/inline-size on a control you own. Counterpart to the automatic floor, which only backstops controls with no class.
.sf-width-10 publicCaps the element at 10% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-20 publicCaps the element at 20% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-30 publicCaps the element at 30% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-40 publicCaps the element at 40% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-50 publicCaps the element at 50% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-60 publicCaps the element at 60% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-70 publicCaps the element at 70% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-80 publicCaps the element at 80% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-90 publicCaps the element at 90% of the content column (--sf-content-width) and centres it; inline-size:100% lets it shrink on narrow parents.
.sf-width-full publicFull width (100%), uncapped (max-inline-size: none).
.sf-width-auto publicIntrinsic auto width (inline-size: auto) — the element sizes to its normal-flow default.
.sf-width-fit publicShrink-to-fit width (fit-content) — as wide as its content, up to the available space.
.sf-width-min publicMinimum-content width (min-content) — as narrow as the content's longest unbreakable run.
.sf-width-max publicMaximum-content width (max-content) — as wide as the content prefers, without wrapping.
.sf-text-2xl publicApplies the 2xl text-size role: font-size, line-height, font-weight, letter-spacing, and measure (max-inline-size) in one class.
.sf-focus-shadow publicApplies the standard focus ring as a box-shadow to any element. Use on custom controls where the native :focus-visible ring doesn't render correctly.
.sf-touch-target publicOpt-in WCAG 2.5.5 minimum hit area — enforces a 44px min-block/inline-size on a control you own. Counterpart to the automatic floor, which only backstops controls with no class.
.skip-link publicAccessible skip-navigation link. Hidden until focused; jumps keyboard users past repeated navigation blocks. Place as the very first element in <body>.
--sf-z-tooltip