Skip to content

Conversation

@TarunAdobe
Copy link
Contributor

@TarunAdobe TarunAdobe commented Nov 6, 2025

Description

This PR migrates the next-gen Asset component to Spectrum 2 styles and updates Storybook accordingly.

Motivation and context

This PR migrates the Asset component from first-gen to the second-gen architecture, following the established pattern of separating core component logic from Spectrum-specific implementation.

Changes:

  • Migrated CSS to align with Spectrum CSS structure

What changed

First-gen:

  • first-gen/packages/asset/src/Asset.ts - Remains unchanged for backward compatibility

Core (Base):

  • second-gen/packages/core/components/asset/Asset.base.ts - Updates shared functionalities
  • second-gen/packages/core/components/asset/Asset.types.ts - Creates types file for size and static color variants
  • second-gen/packages/core/components/asset/index.ts - Imports and exports types

Second-gen:

  • second-gen/packages/swc/components/asset/Asset.ts - Updates render method to accommodate classes
  • second-gen/packages/swc/components/asset/asset.css - Adds CSS from spectrum-css
  • second-gen/packages/swc/components/asset/stories/asset.stories.ts - Adds comprehensive story coverage

Related issue(s)

  • SWC-1261

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 (Note: I did not add a changeset, I wasn't sure that this was set up for barebones and didn't see any for progress circle or badge, but I'm happy to add one if I'm mistaken!)
  • 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

Run second-gen Storybook:

yarn workspace @swc/components storybook

Storybook functionality:

  • All controls work correctly on Default story

Documentation:

  • All stories render correctly on Docs page
  • Story descriptions are clear and informative

First-gen verification (use the PR preview or run locally):

yarn start
# or
yarn docs:start
  • First-gen Asset remains unchanged and functional

Code review checklist:

  • TypeScript types are correct and properly exported
  • CSS follows second-gen patterns
  • No linter errors
  • Proper separation of concerns between core and SWC packages

Device review

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

@changeset-bot
Copy link

changeset-bot bot commented Nov 6, 2025

⚠️ No Changeset found

Latest commit: 58474d7

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
Contributor

github-actions bot commented Nov 6, 2025

📚 Branch Preview

🔍 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-5858

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.

@TarunAdobe TarunAdobe force-pushed the ttomar/asset-migration branch 3 times, most recently from 8500305 to e550a7e Compare November 6, 2025 11:07
"start": "yarn start:1st-gen & yarn start:2nd-gen",
"start:1st-gen": "yarn workspace @spectrum-web-components/1st-gen start",
"start:2nd-gen": "yarn workspace @adobe/swc start",
"start:2nd-gen": "yarn workspace @adobe/swc storybook",
Copy link
Contributor Author

Choose a reason for hiding this comment

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

There is no yarn start command in 2nd gen swc package

Copy link
Collaborator

Choose a reason for hiding this comment

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

Is this the start command you were looking for? Or does this do something else?

"start": "run-p dev:core dev:analyze storybook",

@TarunAdobe TarunAdobe force-pushed the ttomar/asset-migration branch from e550a7e to 58474d7 Compare November 6, 2025 11:13
@TarunAdobe TarunAdobe marked this pull request as ready for review November 6, 2025 13:54
@TarunAdobe TarunAdobe requested a review from a team as a code owner November 6, 2025 13:54
Copy link
Contributor

@Rajdeepc Rajdeepc left a comment

Choose a reason for hiding this comment

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

Good start!

}

::slotted(*) {
.spectrum-Asset-image {
Copy link
Contributor

@Rajdeepc Rajdeepc Nov 11, 2025

Choose a reason for hiding this comment

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

This is a breaking change for the existing behaviour if consumers are slotting an <img> without class.
You can keep this class with a migration shim.

::slotted() { /* same rules */ }
.spectrum-Asset-image { /* same rules */ }

}
.spectrum-Asset-fileOutline {
fill: var(--spectrum-gray-500);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this intentional? High-contrast users may get incorrect colors or no contrast adjustments.

Copy link
Collaborator

Choose a reason for hiding this comment

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

This was removed in the same PR I mentioned above, where we were removing the mods for asset. Personally, I like this removal after talking with @5t3ph during the app frame side nav WHCM stuff. I don't think this currentcolor is necessary and just adds to the CSS we're shipping for no super strong reason. We can rely on the default handling of high contrast instead of defining this icon background color.

This is with the high contrast variable. I don't think anything is really being added with this query, but I could be wrong.
Screenshot 2025-11-11 at 3 21 35 PM
Screenshot 2025-11-11 at 3 19 40 PM

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks for the explanation. Looks fine.

Comment on lines +87 to +89
class=${classMap({
['spectrum-Asset']: true,
})}
Copy link
Contributor

Choose a reason for hiding this comment

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

only one static class is set you could just set class="spectrum-Asset" directly. minor simplification.

Copy link
Contributor

Choose a reason for hiding this comment

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

i would like to keep the classMap pattern so its easily extensible if it arises... not a deal breaker though

Copy link
Contributor

Choose a reason for hiding this comment

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

ideally there is no performance impact here since it just adds a tiny internal Set to render the class list but yea I’m fine either way unless there’s a strong preference to simplify.

.fileBackground {
fill: var(--spectrum-asset-file-background);
.spectrum-Asset-folderBackground {
fill: var(--spectrum-gray-200);
Copy link
Contributor

Choose a reason for hiding this comment

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

Do these map to the same value? Can you surface up these changes in the PR documentation too for quick reference by reviewers. Its hard to visualize from here

Copy link
Collaborator

@marissahuysentruyt marissahuysentruyt Nov 11, 2025

Choose a reason for hiding this comment

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

These should be the same values, yes (and they look to be mapped correctly).

Before Cassondra left, she started removing some of the complexity from a chunk of components, asset being one of them. You can see the changes (and remove of the --spectrum-asset- variables) here: https://github.com/adobe/spectrum-css/pull/4257/files#diff-3a87a9f21648ac03bf4532993e3cdf48604b9862efd1c0ea68c3f6c2d44b32b3

In a different PR (that does the same and removes mods and some of the --spectrum prefixed variables for asset list and miller), Cassondra left her reasoning as to why: adobe/spectrum-css#4260 (comment)

Hopefully that's useful! I absolutely agree with @Rajdeepc that we should surface the changes in a changeset. None of these migrations have had a changeset yet. (I asked a similar question in Slack when I was working on status light). Do we have the changeset management situation figured out? I've been out, so it might be and we need a changeset!

Copy link
Contributor

Choose a reason for hiding this comment

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

Please surface up a changeset on this, we will check how the tool is scanning it.

@Rajdeepc Rajdeepc added the Status: Ready for review PR ready for review or re-review. label Nov 11, 2025
Copy link
Collaborator

@marissahuysentruyt marissahuysentruyt left a comment

Choose a reason for hiding this comment

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

I don't think I have any true changes to request! I did leave some additional context in response to a few of Rajdeep's comments, though- hopefully they're helpful!

*
* @element swc-asset
* @slot - content to be displayed in the asset when an acceptable value for `file` is not present
* @slot - content to be displayed when no `variant` is set (typically an <img>)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Right now, these docs are missing the <img> tag in the parentheses) in the description in the control table:

Screenshot 2025-11-11 at 12 29 15 PM

just wrapping it in backticks seems to do the trick.

Suggested change
* @slot - content to be displayed when no `variant` is set (typically an <img>)
* @slot - The content to be displayed when no `variant` is set (typically an `<img>`)
Screenshot 2025-11-11 at 12 51 30 PM

Comment on lines +57 to +59
* Use an asset element to visually represent a file, folder, or image.
* File and folder representations center themselves within the available space.
* Images are contained to the element’s size and centered.
Copy link
Collaborator

Choose a reason for hiding this comment

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

This feels like maybe something we would want to display on the docs page. What do you think about moving this JSDoc to the stories file instead, so that it displays under the "Asset" title?

Screenshot 2025-11-11 at 12 35 13 PM

This is something I stole from the divider stories file. 😊

public variant: AssetVariant | undefined;

/**
* Accessible label for the asset’s SVG variant.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Super nit pick: our variants are technically named them "file" or "folder," and not "SVG." Is it odd or confusing to mention an SVG variant? I'll leave it up to you if you want to change it.

Suggested change
* Accessible label for the asset’s SVG variant.
* Accessible label for the asset’s file and folder variants.

.fileBackground {
fill: var(--spectrum-asset-file-background);
.spectrum-Asset-folderBackground {
fill: var(--spectrum-gray-200);
Copy link
Collaborator

@marissahuysentruyt marissahuysentruyt Nov 11, 2025

Choose a reason for hiding this comment

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

These should be the same values, yes (and they look to be mapped correctly).

Before Cassondra left, she started removing some of the complexity from a chunk of components, asset being one of them. You can see the changes (and remove of the --spectrum-asset- variables) here: https://github.com/adobe/spectrum-css/pull/4257/files#diff-3a87a9f21648ac03bf4532993e3cdf48604b9862efd1c0ea68c3f6c2d44b32b3

In a different PR (that does the same and removes mods and some of the --spectrum prefixed variables for asset list and miller), Cassondra left her reasoning as to why: adobe/spectrum-css#4260 (comment)

Hopefully that's useful! I absolutely agree with @Rajdeepc that we should surface the changes in a changeset. None of these migrations have had a changeset yet. (I asked a similar question in Slack when I was working on status light). Do we have the changeset management situation figured out? I've been out, so it might be and we need a changeset!

}
.spectrum-Asset-fileOutline {
fill: var(--spectrum-gray-500);
}
Copy link
Collaborator

Choose a reason for hiding this comment

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

This was removed in the same PR I mentioned above, where we were removing the mods for asset. Personally, I like this removal after talking with @5t3ph during the app frame side nav WHCM stuff. I don't think this currentcolor is necessary and just adds to the CSS we're shipping for no super strong reason. We can rely on the default handling of high contrast instead of defining this icon background color.

This is with the high contrast variable. I don't think anything is really being added with this query, but I could be wrong.
Screenshot 2025-11-11 at 3 21 35 PM
Screenshot 2025-11-11 at 3 19 40 PM

"start": "yarn start:1st-gen & yarn start:2nd-gen",
"start:1st-gen": "yarn workspace @spectrum-web-components/1st-gen start",
"start:2nd-gen": "yarn workspace @adobe/swc start",
"start:2nd-gen": "yarn workspace @adobe/swc storybook",
Copy link
Collaborator

Choose a reason for hiding this comment

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

Is this the start command you were looking for? Or does this do something else?

"start": "run-p dev:core dev:analyze storybook",

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

Labels

Status: Ready for review PR ready for review or re-review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants