diff --git a/1st-gen/projects/documentation/scripts/component-template-parts.js b/1st-gen/projects/documentation/scripts/component-template-parts.js index babfe2c070..3c1ed49658 100644 --- a/1st-gen/projects/documentation/scripts/component-template-parts.js +++ b/1st-gen/projects/documentation/scripts/component-template-parts.js @@ -157,17 +157,21 @@ ${ tag.members.length && tag.attributes.filter((attribute) => { const member = tag.members.find((member) => { - return member.name === attribute.name; + const attrName = attribute.fieldName || attribute.name; + return member.name === attrName; }); - return member?.privacy === 'public'; + // Treat missing privacy as public; skip only explicit private + return member && member.privacy !== 'private'; }).length ? buildTable( 'Attributes and Properties', tag.attributes.filter((attribute) => { const member = tag.members.find((member) => { - return member.name === attribute.fieldName; + const attrName = attribute.fieldName || attribute.name; + return member.name === attrName; }); - return member?.privacy === 'public'; + // Treat missing privacy as public; skip only explicit private + return !!member && member.privacy !== 'private'; }), ['Property', 'Attribute', 'Type', 'Default', 'Description'], [ diff --git a/1st-gen/tools/theme/README.md b/1st-gen/tools/theme/README.md index c4d0ca9cbe..96c5fbd9da 100644 --- a/1st-gen/tools/theme/README.md +++ b/1st-gen/tools/theme/README.md @@ -1,63 +1,16 @@ -## Description +## Overview -`sp-theme` applies a Spectrum theme by using CSS custom properties to set default sizes & colors for all of the components in its scope. The Spectrum design system provides four color themes (`lightest`, `light`, `dark`, and `darkest`) and two different scales (`medium` and `large`) to support desktop & mobile UI. +`` provides Spectrum design tokens (CSS custom properties) to everything in its DOM scope. Components inside a theme use these tokens to render correctly. The element itself does not visually “apply” styles to your app; it exposes the tokens so your components (and any of your CSS) can consume them. -### Usage - -[![See it on NPM!](https://img.shields.io/npm/v/@spectrum-web-components/theme?style=for-the-badge)](https://www.npmjs.com/package/@spectrum-web-components/theme) -[![How big is this package in your project?](https://img.shields.io/bundlephobia/minzip/@spectrum-web-components/theme?style=for-the-badge)](https://bundlephobia.com/result?p=@spectrum-web-components/theme) - -``` -yarn add @spectrum-web-components/theme -``` +Spectrum offers multiple variants: -#### Quick start +- **System**: `spectrum`, `express`, `spectrum-two` +- **Color**: `light`, `dark` (legacy: `lightest`, `darkest` – deprecated) +- **Scale**: `medium`, `large` -``` -import '@spectrum-web-components/theme/sp-theme.js'; -import '@spectrum-web-components/theme/src/themes.js'; -``` - -The above import statements do two things: the first will get you started using the `` wrapper element, and the second includes all four (4) color options (`lightest`, `light`, `dark`, and `darkest`) and both (2) scale options (`medium` and `large`) for the Spectrum Classic theme. Having all of these options available together is the easiest way to get a handle on the theming possibilities offered by the package and empowers you to prototype and test various deliveries of your application. However, reserving the download and parse time for all of the variants may not be required for all applications. See the "Advanced usage" section below for instructions on tuning the performance of an application that leverages this package. - -Below are more ways to import the different scale and color options individually, in case you didn't want to import all of them as we did above. You'll use these statements in combination with the side effectful registration import statement `import '@spectrum-web-components/theme/sp-theme.js'`. - -The various Classic themes can be imported en masse, as in the example above: - -``` -import '@spectrum-web-components/theme/src/themes.js'; -``` - -The various Spectrum Express themes can also be imported en masse: - -``` -import '@spectrum-web-components/theme/src/express/themes.js'; -``` - -Or you can import the themes and scales individually: - -``` -import '@spectrum-web-components/theme/theme-darkest.js'; -import '@spectrum-web-components/theme/theme-dark.js'; -import '@spectrum-web-components/theme/theme-light.js'; -import '@spectrum-web-components/theme/theme-lightest.js'; -import '@spectrum-web-components/theme/scale-medium.js'; -import '@spectrum-web-components/theme/scale-large.js'; -import '@spectrum-web-components/theme/express/theme-darkest.js'; -import '@spectrum-web-components/theme/express/theme-dark.js'; -import '@spectrum-web-components/theme/express/theme-light.js'; -import '@spectrum-web-components/theme/express/theme-lightest.js'; -import '@spectrum-web-components/theme/express/scale-medium.js'; -import '@spectrum-web-components/theme/express/scale-large.js'; -``` - -When looking to leverage the `Theme` base class as a type and/or for extension purposes, do so via: - -``` -import { Theme } from '@spectrum-web-components/theme'; -``` +By default, `` uses the `spectrum` system, `light` color, and `medium` scale. -## What it's doing +### How sp-theme works Visually, all Spectrum Web Components are an expression of the design tokens specified by Spectrum, Adobe's design system. On the web, these tokens are made available as CSS Custom Properties. Using `sp-theme` as a parent element for your components ensures that those CSS Custom Properties can be leveraged by the elements within your application. This ensures consistent delivery of not only the color and scale you've specified in your particular instance, but for _all_ the other color, scale, and content direction specifications across Spectrum. @@ -96,176 +49,95 @@ To make the above concepts a little more concrete, take a look at the table belo observer.observe(varsViewer); -When you're ready to look into more advanced usage of the components and themes in your application, there are vanilla CSS implementations of these tokens available in the `@spectrum-web-components/styles` package. +When you're ready to look into more advanced usage of the components and themes in your application, there are vanilla CSS implementations of these tokens available in the [`@spectrum-web-components/styles`](https://opensource.adobe.com/spectrum-web-components/tools/styles/) package. -## Example +### Usage -An `` element expects a value for each of its `color` and `scale` attributes to be provided on the element. While not required, you can also use the `system` attribute to specify whether the theme you're using is Spectrum Classic (the default), Spectrum 2 (upcoming release) or Spectrum Express. +[![See it on NPM!](https://img.shields.io/npm/v/@spectrum-web-components/theme?style=for-the-badge)](https://www.npmjs.com/package/@spectrum-web-components/theme) +[![How big is this package in your project?](https://img.shields.io/bundlephobia/minzip/@spectrum-web-components/theme?style=for-the-badge)](https://bundlephobia.com/result?p=@spectrum-web-components/theme) -```html - - - Click me! - - +```bash +yarn add @spectrum-web-components/theme ``` -## Advanced usage - -Once you've moved beyond the prototype phase of an application, it is likely that you will only use one combination of `color` and `scale` in your application, and even if not, you'll likely benefit from lazily loading the variants you don't leverage by default. For single combination applications, or to power a _default_ theme, the following imports can be used to ensure only the code your application requires is loaded: - -### Classic +Register the element and load the theme fragments you intend to use: ```js -/** - * Power a site using - * - * - **/ -import '@spectrum-web-components/theme/theme-darkest.js'; -import '@spectrum-web-components/theme/scale-large.js'; - +// Registers the custom element import '@spectrum-web-components/theme/sp-theme.js'; -``` - -### Express - -```js -/** - * Power a site using - * - * - **/ -import '@spectrum-web-components/theme/express/theme-light.js'; -import '@spectrum-web-components/theme/express/scale-medium.js'; -import '@spectrum-web-components/theme/sp-theme.js'; +// Load the specific variants you will use (recommended) +import '@spectrum-web-components/theme/theme-light.js'; +import '@spectrum-web-components/theme/scale-medium.js'; +// Optionally choose a different system +// import '@spectrum-web-components/theme/express/theme-light.js'; +// import '@spectrum-web-components/theme/express/scale-medium.js'; ``` -When subsequent theme variants are needed, you can ensure those are lazily loaded by leveraging dynamic imports via something like: +If you’re prototyping and want everything available: ```js -const themeElement = document.querySelector('sp-theme'); - -const updateTheme = async (color, scale) => { - Promise.all([ - import(`@spectrum-web-components/theme/theme-${color}.js`), - import(`@spectrum-web-components/theme/scale-${scale}.js`), - ]).then(() => { - themeElement.color = color; - themeElement.scale = scale; - }); -}; - -updateTheme('light', 'medium'); +import '@spectrum-web-components/theme/sp-theme.js'; +import '@spectrum-web-components/theme/src/themes.js'; // spectrum +import '@spectrum-web-components/theme/src/express/themes.js'; // express +import '@spectrum-web-components/theme/src/spectrum-two/themes.js'; // spectrum-two ``` -When bundling your application, be sure to consult the documentation of your bundler for the correct way to ensure proper packaging of the programatic dependency graph that this will create. - -## Light theme - -```html demo - - - - - - - - -``` +### Examples -## Dark theme +#### Light color, medium scale -```html demo +```html - - + +
+ Email + + We’ll only use this to send a receipt. + + Submit + Cancel + +
- - - - ``` -## Large scale +#### Dark color, large scale -The large scale of `` will switch to using Spectrum's larger mobile [Platform Scale](https://spectrum.adobe.com/page/platform-scale/) +The large scale of `` will switch to using Spectrum's larger mobile Platform Scale. -```html demo +```html - -
-
- -
-
Overdrive
- - Cancel - Continue - + +
+ Volume + + Overdrive
``` -## Embedding themes +#### Embedded color systems and directional content -There are a few cases where it is necessary to embed one theme within another. -For example, if you have an application that is using a dark theme with a left to right text direction that is -previewing or editing content that will be displayed in a light theme with a right to left text direction. +There are a few cases where it is necessary to embed one theme within another. For example, if you have an application that is using a dark color system with a left to right text direction that is previewing or editing content that will be displayed in a light color system with a right to left text direction. ```html