diff --git a/.changeset/ninety-dogs-pump.md b/.changeset/ninety-dogs-pump.md new file mode 100644 index 0000000000..b3dc8dc68d --- /dev/null +++ b/.changeset/ninety-dogs-pump.md @@ -0,0 +1,10 @@ +--- +"@stackoverflow/stacks": minor +"@stackoverflow/stacks-svelte": minor +--- + +Add .bg-loading delete skeleton + +BREAKING CHANGES: + +Skeleton component deleted \ No newline at end of file diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index 84dfd45d2e..e58bbe6496 100755 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -16,6 +16,10 @@ - `.blr-sm` removed - `.blr-lg` removed +#### Background +- Add `.bg-loading` +- Skeleton component deleted + #### Colors - `gold`, `silver`, `bronze` colors removed diff --git a/packages/stacks-classic/lib/atomic/__snapshots__/misc.less.test.ts.snap b/packages/stacks-classic/lib/atomic/__snapshots__/misc.less.test.ts.snap index 1e6f9f27d8..3724a544e5 100644 --- a/packages/stacks-classic/lib/atomic/__snapshots__/misc.less.test.ts.snap +++ b/packages/stacks-classic/lib/atomic/__snapshots__/misc.less.test.ts.snap @@ -125,6 +125,28 @@ exports[`atomic: misc > should output all atomic css classes 1`] = ` background-image: none !important; } +.bg-loading { + animation: loadingBgAnimation 1.5s ease-out infinite; + animation-delay: 1ms; +} + +@keyframes loadingBgAnimation { + 0% { + background-color: var(--black-150); + opacity: 1; + } + + 50% { + background-color: var(--black-100); + opacity: 0.7; + } + + 100% { + background-color: var(--black-150); + opacity: 1; + } +} + .bg-confetti-animated { background-repeat: repeat-x; background-position: top -10px center; diff --git a/packages/stacks-classic/lib/atomic/misc.less b/packages/stacks-classic/lib/atomic/misc.less index 5d6bb5e5b4..0e84027cc9 100644 --- a/packages/stacks-classic/lib/atomic/misc.less +++ b/packages/stacks-classic/lib/atomic/misc.less @@ -67,6 +67,26 @@ // ---------------------------------------------------------------------------- .bg-image-none { background-image: none !important; } +.bg-loading { + animation: loadingBgAnimation 1.5s ease-out infinite; + animation-delay: 1ms; +} + +@keyframes loadingBgAnimation { + 0% { + background-color: var(--black-150); + opacity: 1; + } + 50% { + background-color: var(--black-100); + opacity: 0.7; + } + 100% { + background-color: var(--black-150); + opacity: 1; + } +} + .bg-confetti-animated { background-repeat: repeat-x; background-position: top -10px center; diff --git a/packages/stacks-classic/lib/components/skeleton/skeleton.a11y.test.ts b/packages/stacks-classic/lib/components/skeleton/skeleton.a11y.test.ts deleted file mode 100644 index a0158a40fb..0000000000 --- a/packages/stacks-classic/lib/components/skeleton/skeleton.a11y.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { runA11yTests } from "../../test/a11y-test-utils"; -import "../../index"; - -describe("skeleton", () => { - runA11yTests({ - baseClass: "s-skeleton", - variants: ["ai"], - }); -}); diff --git a/packages/stacks-classic/lib/components/skeleton/skeleton.less b/packages/stacks-classic/lib/components/skeleton/skeleton.less deleted file mode 100644 index c61c52a119..0000000000 --- a/packages/stacks-classic/lib/components/skeleton/skeleton.less +++ /dev/null @@ -1,73 +0,0 @@ -.s-skeleton { - // BASE COMPONENT-SPECIFIC CUSTOM PROPERTIES - // TODO verify colors with design - --_sk-bg-1: var(--black-400); - --_sk-bg-2: var(--black-350); - --_sk-bg-3: var(--black-300); - --_sk-o: 0.25; - - // CONTEXTUAL STYLES - .highcontrast-mode({ - --_sk-o: 0.4; - }); - - @keyframes flow { - 0% { - background-position: 400% 50%; - } - 100% { - background-position: 0% 50%; - } - } - - // VARIANTS - &&__ai { - --_sk-bg-1: #ac76f0; - --_sk-bg-2: #297fff; - --_sk-bg-3: #6abcf8; - } - - &, - &:after, - &:before { - @media (prefers-reduced-motion: no-preference) { - animation: flow 8s linear infinite; - } - - background-image: linear-gradient( - to right, - var(--_sk-bg-1) 8%, - var(--_sk-bg-2) 16%, - var(--_sk-bg-3) 25%, - var(--_sk-bg-1) 42%, - var(--_sk-bg-2) 58%, - var(--_sk-bg-3) 75%, - var(--_sk-bg-1) 83% - ); - background-size: 400% 100%; - border-radius: var(--br-md); - display: block; - height: var(--su16); - position: relative; - } - - &:after, - &:before { - content: ''; - position: relative; - } - - &:after { - top: calc(var(--su4)); - width: calc(2/3 * 100%); - } - - &:before { - top: calc(var(--su32) + var(--su8)); - width: calc(1/3 * 100%); - } - - margin-bottom: var(--su48); - opacity: var(--_sk-o); - width: 100%; -} \ No newline at end of file diff --git a/packages/stacks-classic/lib/components/skeleton/skeleton.visual.test.ts b/packages/stacks-classic/lib/components/skeleton/skeleton.visual.test.ts deleted file mode 100644 index 0b3fb4fbbc..0000000000 --- a/packages/stacks-classic/lib/components/skeleton/skeleton.visual.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { html } from "@open-wc/testing"; -import { runVisualTests } from "../../test/visual-test-utils"; -import "../../index"; - -describe("skeleton", () => { - runVisualTests({ - baseClass: "s-skeleton", - variants: ["ai"], - template: ({ component, testid }) => html` -
The Loading utility applies a shimmering gradient animation to a container's background. Use this class to create flexible 'skeleton' placeholders that mimic the shape and layout of content while it loads.
+Adding the confetti background utility adds confetti to any block-level element. You can choose the animated version, or static version. The animated version respects prefers-reduced-motion and displays the static version of the background when necessary. No JavaScript required.
| Class | -Applied to | -Description | -
|---|---|---|
{{ item.class }} |
- {% if item.applies == "N/A" %}{{ item.applies }}{% else %}{{ item.applies }}{% endif %} |
- {{ item.description }} | -
The default skeleton should be used when loading large blocks will render multiple rows of content.
-The ai variant of the skeleton should be used when loading AI responses.
For accessibility, it’s important to add fallback loading text that is visible to screen readers. Additionally, you should add aria-busy="true" to the component that triggered the loading state while the skeleton is shown.