Skip to content

[SWC-1668] feat: migrate poc components to full-fidelity production#6122

Draft
rise-erpelding wants to merge 14 commits intomainfrom
swc-1668/poc-components
Draft

[SWC-1668] feat: migrate poc components to full-fidelity production#6122
rise-erpelding wants to merge 14 commits intomainfrom
swc-1668/poc-components

Conversation

@rise-erpelding
Copy link
Copy Markdown
Collaborator

@rise-erpelding rise-erpelding commented Apr 1, 2026

Description

Apply the standards and code quality patterns to Badge, Progress Circle, Status Light, and Divider components that were used to establish 2nd-gen POC. We will be disabling Asset from storybook until we can reach alignment with Design on a path forward for that pattern.

DOD for all 4 components:

Includes an a11y migration doc in the component project planning directory of CONTRIBUTOR-DOCS
Meets full s2 visual fidelity
Conform to the code style guides
Includes all necessary tests
includes complete documentation in storybook
Is fully accessible and aligns with a11y patterns
Establishes a starting migration guide in the component source directory

DOD for Asset:

Disable this component from Storybook until we align with design

Motivation and context

Related issue(s)

  • addresses epic SWC-1668

Issues & tasks in epic

Oustanding issues related to this work not addressed here

  • SWC-1831: S2 Badge: Add notification and indicator badge components
  • SWC-1847: S2 Badge, Divider: Resolve default size discrepancy between Spectrum design and t-shirt API
  • SWC-1852: S2 Badge: Add Chromatic VRT for icon-only badges across all sizes
  • SWC-1853: S2 Badge: Icon slot control - select from allowed icons
  • SWC-1848: S2 Divider: Add Chromatic VRT for WHCM and static-color size coverage
  • SWC-1891: S2 Progress-Circle: Spike/RFC to look into if we want default indeterminate vs value
  • chore: converted mixins to controllers and refactored badge #6130 would convert Mixins in Badge to Controllers, so that @todo comment would be addressed there

Screenshots (if appropriate)


Author's checklist

  • I have read the CONTRIBUTING and PULL_REQUESTS documents.
  • I have reviewed at the Accessibility Practices for this feature, see: Aria Practices
  • I have added automated tests to cover my changes.
  • I have included a well-written changeset if my change needs to be published.
  • I have included updated documentation if my change required it.

Reviewer's checklist

  • Includes a Github Issue with appropriate flag or Jira ticket number without a link
  • Includes thoughtfully written changeset if changes suggested include patch, minor, or major features
  • Automated tests cover all use cases and follow best practices for writing
  • Validated on all supported browsers
  • All VRTs are approved before the author can update Golden Hash

Manual review test cases

  • Descriptive Test Statement

    1. Go here
    2. Do this action
    3. Expect this result
  • Descriptive Test Statement

    1. Go here
    2. Do this action
    3. Expect this result

Device review

  • Did it pass in Desktop?
  • Did it pass in (emulated) Mobile?
  • Did it pass in (emulated) iPad?

Accessibility testing checklist

Required: Complete each applicable item and document your testing steps (replace the placeholders with your component-specific instructions).

  • Keyboard (required — document steps below) — What to test for: Focus order is logical; Tab reaches the component and all interactive descendants; Enter/Space activate where appropriate; arrow keys work for tabs, menus, sliders, etc.; no focus traps; Escape dismisses when applicable; focus indicator is visible.

    1. Go here
    2. Do this action
    3. Expect this result
  • Screen reader (required — document steps below) — What to test for: Role and name are announced correctly; state changes (e.g. expanded, selected) are announced; labels and relationships are clear; no unnecessary or duplicate announcements.

    1. Go here
    2. Do this action
    3. Expect this result

@rise-erpelding rise-erpelding self-assigned this Apr 1, 2026
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Apr 1, 2026

⚠️ No Changeset found

Latest commit: b147afa

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 1, 2026

📚 Branch Preview Links

🔍 First Generation Visual Regression Test Results

When a visual regression test fails (or has previously failed while working on this branch), its results can be found in the following URLs:

Deployed to Azure Blob Storage: pr-6122

If the changes are expected, update the current_golden_images_cache hash in the circleci config to accept the new images. Instructions are included in that file.
If the changes are unexpected, you can investigate the cause of the differences and update the code accordingly.

@rise-erpelding rise-erpelding force-pushed the swc-1668/poc-components branch 2 times, most recently from 59b1cda to 2147d55 Compare April 6, 2026 16:07
@marissahuysentruyt marissahuysentruyt force-pushed the swc-1668/poc-components branch from 419e8bf to 5038447 Compare April 8, 2026 13:08
@rise-erpelding rise-erpelding force-pushed the swc-1668/poc-components branch from a099390 to 06a2855 Compare April 9, 2026 13:42
rise-erpelding and others added 8 commits April 14, 2026 10:02
* docs(divider): follows a11y rec for real content in stories

* docs(divider): define default size and add todo for chromatic
- adds a todo comment to capture vrts for WHCM and more sizes in the
static color dividers
- adds medium as the default in the control table

* docs(divider): update content with realistic text
* docs(badge): update rendering-and-styling migration analysis
Clarify that fixed positioning is documented in design system guidance
and note new S2 badge variants (notification, indicator) tracked in SWC-1831.

* feat(badge): add no-label CSS class when label slot is empty
Add `swc-Badge--no-label` class via classMap when the default slot
has no text content, enabling CSS targeting of icon-only badges.

* fix(badge): updates padding block tokens and icon-only gap

* feat(badge): support for swc-icon internal

* feat(badge): icon only accessibility examples

* fix(badge): size types passing into swc-icon

* docs(badge): adds todo for missing variants

* fix(badge): dynamically passes size to slotted icon

* test(badge): anatomy test checks for children elements
previously, we were checking for text content when the badge icon slot
was just accepting strings. Now the anatomy story is using the swc-icon
internal component, so it never has text content (it's got HTML). the
badge test now checks for children.length instead.

* fix(badge): disabled text control for icon-slot

* fix(badge): a11y roles for icon only badges

* fix(badge): inline padding
- adds new --swc-badge-padding-inline-start custom prop to control the
inline padding start of a badge. it changes when there's an icon + label
vs. just the text label
- also fixes the gap property so that we just redefine the custom prop
for the badge gap instead

* docs(badge): add todo for icon only badge size story

* docs(rules): update docs on template vs custom html rendering

* docs: badge examples updated

* fix(badge): correct fallbacks for sized badge padding
Without this fallback, the start padding on a badge without an icon would
always resolve to the 75-scale token regardless of size, because
--swc-badge-padding-inline-start was never set in the size override blocks.

Adding --swc-badge-padding-inline as an intermediate fallback means
size overrides propagate to both sides automatically, while the :has()
rules can still override --swc-badge-padding-inline-start for the icon case.

* revert(badge): medium stays default size; neutral is default variant

* test(badge): update new default assertions

* docs(badge): adds @todo to default sizing discrepancy comment

* fix(badge): reduce selector specificity and refactor private padding tokens

* fix(badge): padding block properties corrected

* docs: correct updated css style guides with badge examples

* docs: fix typo

* docs(badge): use different badge variants per design docs

* docs(badge): adds tickets to todo comments
* feat(statuslight): export status light type for sizes

* feat(statuslight): map through status light sizes in story

* fix(statuslight): padding block uses padding-vertical tokens

* docs(status-light): add argType defaults and clean up story args
- Declare defaultValue summaries in argTypes for variant and size
  so Storybook's controls table shows the defaults
- Remove redundant hardcoded args from Playground, Overview, and
  Anatomy now that defaults are reflected through argTypes
- Add semantic variant usage note to SemanticVariants story

* docs(statuslight): extra a11y explanations

* style(statuslight): fixes according to style guides

* docs: update status light contributor examples

* docs: update more status light examples in guides

* fix(statuslight): use new line-height tokens

* docs(statuslight): clarify where to see i18n status light story

* docs(statuslight): remove tags from i18n story

* fix(statuslight): remove exposed color prop and redundant properties
* refactor: rename STATUSLIGHT to STATUS_LIGHT type

* refactor: reorg types file

* refactor: standardized debug warnings

* refactor: update jsdoc comments

---------

Co-authored-by: Casey Eickhoff <48574582+caseyisonit@users.noreply.github.com>
@cdransf cdransf force-pushed the swc-1668/poc-components branch from e0d3061 to b446021 Compare April 14, 2026 17:03
cdransf and others added 6 commits April 14, 2026 10:43
* chore(core): remove 1st-gen type references from 2nd-gen core

* chore(badge): move properties to badge base

* chore(badge): update badge todo

* chore(status-light): restore removed comments

* chore(status-light): remove doc block line in status light
* feat(progresscircle): ensure s2 visual fidelity

- Exports `ProgressCircleSize` type from core
- Adds `prefers-reduced-motion` CSS media query
- Adds `dashOffset` variable to ensure contrast at 0% progress
- Replaces hardcoded size templates with `PROGRESS_CIRCLE_VALID_SIZES.map()`
- Removes sizing antipattern in render
- Removes canvas WHCM track color
- Implements a11y improvements per migration analysis

Also includes minor cross-component cleanup:
- Renames `STATUSLIGHT_*` constants to `STATUS_LIGHT_*` convention
- Adds `{ type: String }` to `@property()` decorators in Asset and Icon base classes
- Fixes `customElements` path in swc package.json
- Tags icon internal stories as migrated
- Updates Storybook source type from auto to dynamic
- Minor avatar stories and status-light stories updates

fixes swc-1670
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants