mirror of
https://github.com/shoelace-style/webawesome.git
synced 2026-01-13 12:39:14 +00:00
Compare commits
1 Commits
button-foc
...
dropdown-e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03da8e9b56 |
28
README.md
28
README.md
@@ -21,7 +21,7 @@ Twitter: [@webawesomer](https://twitter.com/webawesomer)
|
||||
|
||||
## Developers ✨
|
||||
|
||||
Developers can use this documentation to learn how to build Web Awesome from source. You will need Node.js 14.17 or later to build and run the project locally.
|
||||
Developers can use this documentation to learn how to build Web Awesome from source. You will need Node >= 14.17 to build and run the project locally.
|
||||
|
||||
**You don't need to do any of this to use Web Awesome!** This page is for people who want to contribute to the project, tinker with the source, or create a custom build of Web Awesome.
|
||||
|
||||
@@ -29,29 +29,31 @@ If that's not what you're trying to do, the [documentation website](https://weba
|
||||
|
||||
### What are you using to build Web Awesome?
|
||||
|
||||
Components are built with [Lit](https://lit.dev/), a custom elements base class that provides an intuitive API and reactive data binding. The build is a custom script with bundling powered by [esbuild](https://esbuild.github.io/).
|
||||
Components are built with [LitElement](https://lit-element.polymer-project.org/), a custom elements base class that provides an intuitive API and reactive data binding. The build is a custom script with bundling powered by [esbuild](https://esbuild.github.io/).
|
||||
|
||||
### Understanding the Web Awesome monorepo
|
||||
|
||||
Web Awesome uses [npm workspaces](https://docs.npmjs.com/cli/v11/using-npm/workspaces) for its monorepo structure and is fairly minimal in what it provides.
|
||||
Web Awesome uses [NPM workspaces](https://docs.npmjs.com/cli/v11/using-npm/workspaces) for its monorepo structure and is fairly minimal in what it provides.
|
||||
|
||||
By using npm workspaces and a monorepo structure, we can get consistent builds, shared configurations, and reduced duplication across repositories which reduces regressions and forces consistency across `webawesome`, `webawesome-pro`, and `webawesome-app`.
|
||||
By using a NPM workspaces and a monorepo structure, we can get consistent builds, shared configurations, and reduced duplication across repositories which reduces regressions and forces consistency across `webawesome`, `webawesome-pro`, and `webawesome-app`.
|
||||
|
||||
Generally, if you plan to only work with the free version of `webawesome` it is easiest to go to `packages/webawesome` and run all commands from there.
|
||||
|
||||
### Where do npm dependencies go?
|
||||
### Where do NPM dependencies go?
|
||||
|
||||
Any dependencies intended to be used across all packages (i.e., `prettier`, `eslint`) that are **not** used at runtime should be in the root `devDependencies` of `package.json`.
|
||||
Any dependencies intended to be used across all packages (IE: `prettier`, `eslint`) that are _NOT_ used at runtime should be in the root `devDependencies` of `package.json`.
|
||||
|
||||
```bash
|
||||
npm install -D -w prettier
|
||||
```
|
||||
|
||||
Any dependencies that will be used at runtime by a package should be part of the specific package's `dependencies` such as `lit`. This is required because if that dependency is not in the `packages/*/package.json`, it will not be installed when used via npm.
|
||||
Any dependencies that will be used at runtime by a package should be part of the specific package's `"dependencies"` such as `lit`. This is required because if that dependency is not in the `packages/*/package.json`, it will not be installed when used via NPM.
|
||||
|
||||
Individual packages are also free to install `devDependencies` as needed as long as they are specific to that package only.
|
||||
Individual packages are also free to install devDependencies as needed as long as they are specific to that package only.
|
||||
|
||||
To install a package specific to a Web Awesome package, change your working directory to that package's root (i.e., `cd packages/webawesome && npm install <package-name>`).
|
||||
To do install a package specific to a package, change your working directory to that package's root
|
||||
|
||||
IE: `cd packages/webawesome && npm install <package-name>`
|
||||
|
||||
### Forking the Repo
|
||||
|
||||
@@ -65,14 +67,14 @@ npm install
|
||||
|
||||
### Developing
|
||||
|
||||
Once you've cloned the repo, run the following command from the respective directory within `packages/*`.
|
||||
Once you've cloned the repo, run the following command from the respective directory within `packages/*`
|
||||
|
||||
```bash
|
||||
cd packages/webawesome
|
||||
npm start
|
||||
```
|
||||
|
||||
This will spin up the dev server. After the initial build, a browser will open automatically. There is currently no hot module reloading (HMR), as browsers don't provide a way to reregister custom elements, but most changes to the source will reload the browser automatically.
|
||||
This will spin up the dev server. After the initial build, a browser will open automatically. There is currently no hot module reloading (HMR), as browser's don't provide a way to reregister custom elements, but most changes to the source will reload the browser automatically.
|
||||
|
||||
### Building
|
||||
|
||||
@@ -100,7 +102,7 @@ This will generate a source file, a stylesheet, and a docs page for you. When yo
|
||||
|
||||
Right now the only additional packages are in private repositories.
|
||||
|
||||
To add additional packages from other repositories, run `git clone <url> packages/<package-name>` to clone your repo into `packages/`.
|
||||
To add additional packages from other repositories, run: `git clone <url> packages/<package-name>` to clone your repo into `packages/`.
|
||||
|
||||
Make sure to run `npm install` at the root of the monorepo after adding your package!
|
||||
|
||||
@@ -110,4 +112,4 @@ Web Awesome is an open source project and contributions are encouraged! If you'r
|
||||
|
||||
## License
|
||||
|
||||
Web Awesome is available under the terms of the [MIT License](LICENSE.md).
|
||||
Web Awesome is available under the terms of the MIT license.
|
||||
@@ -1,6 +0,0 @@
|
||||
3.0.0-beta.1
|
||||
3.0.0-beta.2
|
||||
3.0.0-beta.3
|
||||
3.0.0-beta.4
|
||||
3.0.0-beta.5
|
||||
3.0.0-beta.6
|
||||
33
package-lock.json
generated
33
package-lock.json
generated
@@ -6478,16 +6478,6 @@
|
||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/eleventy-plugin-git-commit-date": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "https://registry.npmjs.org/eleventy-plugin-git-commit-date/-/eleventy-plugin-git-commit-date-0.1.3.tgz",
|
||||
"integrity": "sha512-dmdkGpMuRj8apWptC1QGqAsLHCguddFlfPjbjflGCqXdJ8cdhEjrzzvI/rL0XUvzCC4ETgGl9i/wDU6ujZ94gA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cross-spawn": "^7.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "10.4.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
|
||||
@@ -13018,6 +13008,12 @@
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/style-observer": {
|
||||
"version": "0.0.7",
|
||||
"resolved": "https://registry.npmjs.org/style-observer/-/style-observer-0.0.7.tgz",
|
||||
"integrity": "sha512-t75H3CRy+vd5q3yqyrf/De4tkz33hPQTiCcfh0NTesI5G7kJnZ227LEYTwqjKTtaFOCJvqZcYFHpJlF8bsk3bQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
@@ -13981,10 +13977,10 @@
|
||||
},
|
||||
"packages/webawesome": {
|
||||
"name": "@awesome.me/webawesome",
|
||||
"version": "3.0.0-beta.6",
|
||||
"version": "3.0.0-beta.5",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ctrl/tinycolor": "4.1.0",
|
||||
"@ctrl/tinycolor": "^4.1.0",
|
||||
"@floating-ui/dom": "^1.6.13",
|
||||
"@lit/react": "^1.0.8",
|
||||
"@shoelace-style/animations": "^1.2.0",
|
||||
@@ -13992,11 +13988,11 @@
|
||||
"composed-offset-position": "^0.0.6",
|
||||
"lit": "^3.2.1",
|
||||
"nanoid": "^5.1.5",
|
||||
"qr-creator": "^1.0.0"
|
||||
"qr-creator": "^1.0.0",
|
||||
"style-observer": "^0.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@wc-toolkit/jsx-types": "^1.3.0",
|
||||
"eleventy-plugin-git-commit-date": "^0.1.3"
|
||||
"@wc-toolkit/jsx-types": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.17.0"
|
||||
@@ -14004,9 +14000,9 @@
|
||||
},
|
||||
"packages/webawesome-pro": {
|
||||
"name": "@shoelace-style/webawesome-pro",
|
||||
"version": "3.0.0-beta.6",
|
||||
"version": "3.0.0-beta.4",
|
||||
"dependencies": {
|
||||
"@ctrl/tinycolor": "4.1.0",
|
||||
"@ctrl/tinycolor": "^4.1.0",
|
||||
"@floating-ui/dom": "^1.6.13",
|
||||
"@lit/react": "^1.0.8",
|
||||
"@shoelace-style/animations": "^1.2.0",
|
||||
@@ -14014,7 +14010,8 @@
|
||||
"composed-offset-position": "^0.0.6",
|
||||
"lit": "^3.2.1",
|
||||
"nanoid": "^5.1.5",
|
||||
"qr-creator": "^1.0.0"
|
||||
"qr-creator": "^1.0.0",
|
||||
"style-observer": "^0.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@wc-toolkit/jsx-types": "^1.3.0"
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
Copyright (c) 2025 Fonticons, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -1,6 +1,4 @@
|
||||
import { nanoid } from 'nanoid';
|
||||
import { parse as HTMLParse } from 'node-html-parser';
|
||||
import { execFileSync } from 'node:child_process';
|
||||
import * as fs from 'node:fs';
|
||||
import * as path from 'node:path';
|
||||
import { anchorHeadingsTransformer } from './_transformers/anchor-headings.js';
|
||||
@@ -21,7 +19,6 @@ import { replaceTextPlugin } from './_plugins/replace-text.js';
|
||||
import { searchPlugin } from './_plugins/search.js';
|
||||
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
|
||||
const isDev = process.argv.includes('--develop');
|
||||
const ignoreGit = process.env.ELEVENTY_IGNORE_GIT === 'true';
|
||||
const passThroughExtensions = ['js', 'css', 'png', 'svg', 'jpg', 'mp4'];
|
||||
|
||||
async function getPackageData() {
|
||||
@@ -60,15 +57,6 @@ export default async function (eleventyConfig) {
|
||||
if (updateComponentData) {
|
||||
allComponents = getComponents();
|
||||
}
|
||||
|
||||
// Invalidate last-modified cache for changed content files during watch
|
||||
if (Array.isArray(changedFiles)) {
|
||||
for (const file of changedFiles) {
|
||||
if (/\.(md|njk|html)$/i.test(file)) {
|
||||
lastModCache.delete(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -88,6 +76,7 @@ export default async function (eleventyConfig) {
|
||||
//
|
||||
eleventyConfig.addGlobalData('package', packageData);
|
||||
eleventyConfig.addGlobalData('layout', 'page.njk');
|
||||
eleventyConfig.addGlobalData('pageType', 'docs'); // Default page type
|
||||
eleventyConfig.addGlobalData('server', {
|
||||
head: '',
|
||||
loginOrAvatar: '',
|
||||
@@ -99,97 +88,12 @@ export default async function (eleventyConfig) {
|
||||
eleventyConfig.addFilter('markdown', content => markdown.render(content || ''));
|
||||
eleventyConfig.addFilter('stripExtension', string => path.parse(string + '').name);
|
||||
eleventyConfig.addFilter('stripPrefix', content => content.replace(/^wa-/, ''));
|
||||
eleventyConfig.addFilter('uniqueId', (_value, length = 8) => nanoid(length));
|
||||
// Returns last modified date as ISO 8601 (UTC, Z-suffixed)
|
||||
// Fallback order: front matter override -> Git last commit date -> filesystem mtime -> now
|
||||
// Caching: in-memory per inputPath during one build/dev session
|
||||
// Override: pass a Date or string: {{ page.inputPath | gitLastModifiedISO(lastUpdated) }}
|
||||
const lastModCache = new Map();
|
||||
let repoRoot = null; // lazily resolved; null => not resolved, undefined => failed
|
||||
|
||||
function getLastModifiedISO(inputPath, overrideDate) {
|
||||
if (overrideDate instanceof Date) {
|
||||
return overrideDate.toISOString();
|
||||
}
|
||||
if (typeof overrideDate === 'string' && overrideDate) {
|
||||
const parsed = new Date(overrideDate);
|
||||
if (!isNaN(parsed.getTime())) return parsed.toISOString();
|
||||
}
|
||||
if (!inputPath) return new Date().toISOString();
|
||||
if (lastModCache.has(inputPath)) return lastModCache.get(inputPath);
|
||||
|
||||
// Try Git (ISO via %cI). Use a repo-root-relative path for portability.
|
||||
if (!ignoreGit) {
|
||||
try {
|
||||
if (repoRoot === null) {
|
||||
try {
|
||||
repoRoot = execFileSync('git', ['rev-parse', '--show-toplevel'], {
|
||||
stdio: ['ignore', 'pipe', 'ignore'],
|
||||
cwd: __dirname,
|
||||
})
|
||||
.toString()
|
||||
.trim();
|
||||
} catch (_) {
|
||||
repoRoot = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
const gitPath = repoRoot ? path.relative(repoRoot, inputPath) : inputPath;
|
||||
const args = ['log', '-1', '--format=%cI', '--follow', '--', gitPath];
|
||||
const result = execFileSync('git', args, {
|
||||
stdio: ['ignore', 'pipe', 'ignore'],
|
||||
cwd: repoRoot || path.dirname(inputPath),
|
||||
})
|
||||
.toString()
|
||||
.trim();
|
||||
if (result) {
|
||||
const iso = new Date(result).toISOString();
|
||||
lastModCache.set(inputPath, iso);
|
||||
return iso;
|
||||
}
|
||||
} catch (_) {
|
||||
// continue to fs fallback
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to filesystem mtime
|
||||
try {
|
||||
const stats = fs.statSync(inputPath);
|
||||
const iso = new Date(stats.mtime).toISOString();
|
||||
lastModCache.set(inputPath, iso);
|
||||
return iso;
|
||||
} catch (_) {
|
||||
const now = new Date().toISOString();
|
||||
lastModCache.set(inputPath, now);
|
||||
return now;
|
||||
}
|
||||
}
|
||||
|
||||
eleventyConfig.addFilter('gitLastModifiedISO', function (inputPath, overrideDate) {
|
||||
return getLastModifiedISO(inputPath, overrideDate);
|
||||
});
|
||||
|
||||
// Attach lastUpdatedISO to page data so templates can use {{ lastUpdatedISO }} directly
|
||||
eleventyConfig.addGlobalData('eleventyComputed', {
|
||||
lastUpdatedISO: data => getLastModifiedISO(data.page?.inputPath, data.lastUpdated),
|
||||
});
|
||||
// Trims whitespace and pipes from the start and end of a string. Useful for CEM types, which can be pipe-delimited.
|
||||
// With Prettier 3, this means a leading pipe will exist be present when the line wraps.
|
||||
eleventyConfig.addFilter('trimPipes', content => {
|
||||
return typeof content === 'string' ? content.replace(/^(\s|\|)/g, '').replace(/(\s|\|)$/g, '') : content;
|
||||
});
|
||||
|
||||
/**
|
||||
* @example
|
||||
{% set foo = {foo: "bar"} %}
|
||||
{% set bar = {bar: "baz"} %}
|
||||
{% set merged = foo | merge(bar) %}
|
||||
{{ merged | dump }}
|
||||
*/
|
||||
eleventyConfig.addFilter('merge', function (obj1, obj2) {
|
||||
return Object.assign({}, obj1, obj2);
|
||||
});
|
||||
|
||||
// Custom filter to sort with a priority item first, e.g.
|
||||
// {{ collection | sortWithFirst('fileSlug', 'default') }} => the item with the fileSlug of 'default' will be first
|
||||
eleventyConfig.addFilter('sortWithFirst', function (collection, property, firstValue) {
|
||||
|
||||
@@ -1,312 +0,0 @@
|
||||
---
|
||||
title: Web Awesome is Undergoing Maintenance
|
||||
description: We're performing routine maintenance to keep things running smoothly. Check back soon!
|
||||
layout: blank
|
||||
permalink: 503.html
|
||||
noindex: true
|
||||
unlisted: true
|
||||
---
|
||||
|
||||
{% block head %}
|
||||
|
||||
<link id="site-stylesheet" rel="stylesheet" href="/assets/styles/theme-site.css" />
|
||||
<link id="site-stylesheet" rel="stylesheet" href="/assets/styles/site.css" />
|
||||
{% endblock %}
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--scene-vertical-offset: calc(var(--wa-space-2xs) * -1);
|
||||
--wa-font-family-heading: cera-round-pro;
|
||||
--vehicle-offset: 25ch;
|
||||
--vehicle-duration: 20s;
|
||||
--vehicle-start: calc(-1 * var(--vehicle-offset));
|
||||
--vehicle-end: calc(100% + var(--vehicle-offset));
|
||||
}
|
||||
|
||||
html, wa-page {
|
||||
background-color: var(--wa-color-surface-lowered);
|
||||
}
|
||||
|
||||
wa-icon[name='traffic-cone'] {
|
||||
--primary-color: var(--wa-color-brand-70);
|
||||
--secondary-color: var(--wa-color-text-normal);
|
||||
--secondary-opacity: 1.0;
|
||||
}
|
||||
|
||||
wa-page.background-grid {
|
||||
--grid-line-color: color-mix(in oklab, var(--wa-color-text-normal), transparent 96%);
|
||||
--subgrid-line-color: color-mix(in oklab, var(--wa-color-text-normal), transparent 98%);
|
||||
}
|
||||
|
||||
wa-page > [slot='main-footer'] {
|
||||
border-block-end: var(--wa-border-style) calc(var(--wa-border-width-l) * 10) var(--wa-color-text-normal);
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.header-content {
|
||||
margin-inline: auto;
|
||||
max-width: var(--content-width-l);
|
||||
padding-inline: var(--content-padding-inline);
|
||||
}
|
||||
|
||||
.icon-brand-logo {
|
||||
font-size: var(--wa-font-size-xl);
|
||||
color: var(--wa-brand-orange);
|
||||
}
|
||||
|
||||
/* centering main-content */
|
||||
wa-page::part(main-content) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#content {
|
||||
max-width: var(--content-width-m);
|
||||
padding-inline: var(--content-padding-inline);
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
.heading-stacked-subtitle {
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
}
|
||||
|
||||
.heading-stacked-subtitle wa-icon {
|
||||
position: relative;
|
||||
inset-block-start: calc(var(--wa-space-3xs) * -0.75);
|
||||
font-size: 0.75em;
|
||||
}
|
||||
|
||||
.heading-stacked-subtitle wa-icon[name="traffic-cone"] {
|
||||
--secondary-color: var(--wa-color-text-normal);
|
||||
--primary-color: var(--wa-color-brand-70);
|
||||
margin-inline: calc(var(--wa-space-xs) * -1.15) calc(var(--wa-space-xs) * -0.75);
|
||||
}
|
||||
|
||||
.copy {
|
||||
code {
|
||||
font-size: 0.75em;
|
||||
}
|
||||
|
||||
strong {
|
||||
text-decoration: underline;
|
||||
text-decoration-color: var(--wa-color-brand-70);
|
||||
text-decoration-thickness: var(--wa-border-width-m);
|
||||
text-underline-offset: var(--wa-space-2xs);
|
||||
}
|
||||
}
|
||||
|
||||
.status {
|
||||
width: 100%;
|
||||
--min-column-size: 30ch;
|
||||
|
||||
wa-callout {
|
||||
background-color: var(--wa-color-surface-default);
|
||||
}
|
||||
}
|
||||
|
||||
.linkies {
|
||||
/* nudge those linkies left */
|
||||
margin-inline-start: calc(var(--wa-space-xs) * -1);
|
||||
|
||||
a {
|
||||
padding-inline: var(--wa-space-xs);
|
||||
}
|
||||
}
|
||||
|
||||
.scene {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
overflow-x: clip;
|
||||
inset-block-end: var(--scene-vertical-offset);
|
||||
|
||||
.vehicle {
|
||||
position: absolute;
|
||||
inset-inline-start: var(--vehicle-start);
|
||||
inset-block-end: 0; /* align all vehicles to bottom */
|
||||
animation: driveAcross var(--vehicle-duration) linear infinite;
|
||||
transform-origin: center;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.vehicle-with-object {
|
||||
white-space: nowrap;
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: var(--wa-space-3xs);
|
||||
}
|
||||
|
||||
.scene-left {
|
||||
position: absolute;
|
||||
inset-block-end: 0;
|
||||
inset-inline-start: var(--wa-space-l);
|
||||
}
|
||||
|
||||
.scene-left wa-icon[name='toilet-portable'] {
|
||||
position: relative;
|
||||
inset-block-start: var(--scene-vertical-offset);
|
||||
margin-inline: calc(var(--wa-space-xs) * -1);
|
||||
}
|
||||
|
||||
.scene-left wa-icon[name='traffic-cone'] {
|
||||
position: relative;
|
||||
inset-block-start: var(--scene-vertical-offset);
|
||||
}
|
||||
|
||||
.blocks {
|
||||
position: absolute;
|
||||
inset-inline-end: calc(var(--wa-space-l) * -1);
|
||||
inset-block-end: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.blocks wa-icon[name='block-brick'] {
|
||||
margin-inline: calc(var(--wa-space-xs) * -1);
|
||||
}
|
||||
|
||||
.blocks-bottom {
|
||||
margin-block-start: calc(var(--wa-space-2xs) * -1);
|
||||
}
|
||||
|
||||
wa-icon[family='duotone'] {
|
||||
--secondary-opacity: 1.0;
|
||||
}
|
||||
|
||||
wa-icon[name='bulldozer'],
|
||||
wa-icon[name='excavator'] {
|
||||
--secondary-color: var(--wa-color-brand-70);
|
||||
}
|
||||
|
||||
wa-icon[name='block-brick'],
|
||||
wa-icon[name='toilet-portable'] {
|
||||
--secondary-color: var(--wa-color-neutral-70);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes driveAcross {
|
||||
0% {
|
||||
left: var(--vehicle-start);
|
||||
}
|
||||
100% {
|
||||
left: var(--vehicle-end);
|
||||
}
|
||||
}
|
||||
|
||||
/* Unique rumble animations for each vehicle type */
|
||||
@keyframes rumble-bulldozer {
|
||||
0%, 100% { transform: translateY(0px) rotate(0deg); }
|
||||
25% { transform: translateY(-1px) rotate(0.5deg); }
|
||||
50% { transform: translateY(1px) rotate(-0.3deg); }
|
||||
75% { transform: translateY(-0.5px) rotate(0.2deg); }
|
||||
}
|
||||
|
||||
|
||||
/* Apply rumble animation to the single vehicle */
|
||||
.vehicle-driving { animation: driveAcross var(--vehicle-duration) linear infinite; }
|
||||
.vehicle wa-icon[name="bulldozer"] { animation: rumble-bulldozer 0.1s ease-in-out infinite; }
|
||||
</style>
|
||||
|
||||
<wa-page disable-sticky="header" class="background-grid">
|
||||
<header slot="header">
|
||||
<div class="header-content wa-split" style="flex-wrap: nowrap;">
|
||||
<wa-icon variant="brands" name="web-awesome" class="icon-brand-logo"></wa-icon>
|
||||
<div>
|
||||
<wa-button id="contact-us-button" appearance="plain" href="mailto:hello@webawesome.com?subject=Help%2C%20Web%20Awesome">
|
||||
<wa-icon variant="regular" name="headset" label="Need help? Contact Us" class="icon-embiggen"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-tooltip for="contact-us-button" aria-hidden="true">Contact Us</wa-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main id="content">
|
||||
<div class="content-container wa-stack wa-gap-xl wa-align-items-center">
|
||||
<h1 class="brand-font wa-stack wa-gap-s heading heading-stacked" style="text-align: center;">
|
||||
<span class="wa-heading-l heading-stacked-subtitle">
|
||||
under
|
||||
<span class="wa-visually-hidden">maintenance</span>
|
||||
<span aria-hidden="true">
|
||||
m
|
||||
<wa-icon family="duotone" variant="solid" name="traffic-cone"></wa-icon>
|
||||
inten
|
||||
<wa-icon family="duotone" variant="solid" name="traffic-cone"></wa-icon>
|
||||
nce
|
||||
</span>
|
||||
</span>
|
||||
<span class="wa-heading-4xl heading-stacked-title">Hey! We're Workin' Here</span>
|
||||
</h1>
|
||||
<p class="copy wa-body-l line-length line-length-m" style="text-align: center;">Mind the <code>wa-gap</code>! webawesome.com is undergoing maintenance and will be back shortly.</p>
|
||||
<div class="wa-grid wa-gap-xl status">
|
||||
<wa-callout appearance="plain" variant="neutral">
|
||||
<wa-icon slot="icon" family="duotone" variant="regular" name="diamond-exclamation" class="icon-embiggen" style="--secondary-opacity: 1; --secondary-color: var(--wa-color-warning-fill-normal);"></wa-icon>
|
||||
<strong>Temporarily Unavailable</strong><br />
|
||||
Access to Docs, Accounts, and Teams
|
||||
</wa-callout>
|
||||
<wa-callout appearance="plain" variant="neutral">
|
||||
<wa-icon slot="icon" family="duotone" variant="regular" name="bolt" class="icon-embiggen" style="--secondary-opacity: 1; --secondary-color: var(--wa-color-success-fill-normal);"></wa-icon>
|
||||
<strong>Fully Operational</strong><br />
|
||||
Services (such as CDNs) and Support
|
||||
</wa-callout>
|
||||
</div>
|
||||
<div class="wa-cluster wa-gap-xs linkies">
|
||||
<h2 class="wa-visually-hidden">Web Awesome Elsewhere</h2>
|
||||
<a href="https://github.com/shoelace-style/webawesome" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="github" label="GitHub"></wa-icon>
|
||||
</a>
|
||||
<a href="https://bsky.app/profile/webawesome.com" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="bluesky" label="Bluesky"></wa-icon>
|
||||
</a>
|
||||
<a href="https://mastodon.social/@webawesome" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="mastodon" label="Mastodon"></wa-icon>
|
||||
</a>
|
||||
<a href="https://x.com/webawesomer" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="x-twitter" label="Twitter (X)"></wa-icon>
|
||||
</a>
|
||||
<a href="https://www.threads.com/@web.awesome" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="threads" label="Threads"></wa-icon>
|
||||
</a>
|
||||
<a href="mailto:hello@webawesome.com?subject=Help%2C%20Web%20Awesome" class="appearance-plain">
|
||||
<wa-icon variant="regular" name="envelope" label="Email Web Awesome"></wa-icon>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<div slot="main-footer" class="footer">
|
||||
<div class="scene">
|
||||
<div class="scene-left wa-cluster wa-align-items-end">
|
||||
<wa-icon family="duotone" variant="solid" name="traffic-cone"></wa-icon>
|
||||
<div class="wa-cluster wa-gap-0">
|
||||
<wa-icon family="duotone" variant="regular" name="toilet-portable" class="wa-font-size-2xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="toilet-portable" class="wa-font-size-2xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="toilet-portable" class="wa-font-size-2xl"></wa-icon>
|
||||
</div>
|
||||
<wa-icon family="duotone" variant="regular" name="excavator" class="wa-font-size-3xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="solid" name="traffic-cone"></wa-icon>
|
||||
</div>
|
||||
<div class="blocks wa-stack wa-align-items-center wa-gap-0">
|
||||
<div class="blocks-top wa-cluster wa-gap-0">
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl"></wa-icon>
|
||||
</div>
|
||||
<div class="blocks-bottom wa-cluster wa-gap-0">
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl"></wa-icon>
|
||||
</div>
|
||||
</div>
|
||||
<div class="track">
|
||||
<wa-icon family="duotone" variant="regular" name="bulldozer" class="spacer-dot-gif wa-font-size-3xl" style="opacity: 0;"></wa-icon>
|
||||
<span class="vehicle vehicle-driving vehicle-with-object">
|
||||
<wa-icon family="duotone" variant="regular" name="bulldozer" class="wa-font-size-3xl"></wa-icon>
|
||||
<wa-icon family="duotone" variant="regular" name="block-brick" class="wa-font-size-2xl" style="position: relative; inset-inline-start: calc(var(--wa-space-2xs) * -1);"></wa-icon>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</wa-page>
|
||||
@@ -74,12 +74,12 @@ export const themes = [
|
||||
body: {
|
||||
name: 'Quicksand',
|
||||
css: 'Quicksand, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Quicksand:wght@300..700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Crimson+Pro:ital,wght@0,200..900;1,200..900&family=Quicksand:wght@300..700&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'Quicksand',
|
||||
css: 'Quicksand, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Quicksand:wght@300..700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Crimson+Pro:ital,wght@0,200..900;1,200..900&family=Quicksand:wght@300..700&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'OS Default',
|
||||
@@ -89,7 +89,7 @@ export const themes = [
|
||||
longform: {
|
||||
name: 'Crimson Pro',
|
||||
css: '"Crimson Pro", serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Crimson+Pro:ital,wght@0,200..900;1,200..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Crimson+Pro:ital,wght@0,200..900;1,200..900&family=Quicksand:wght@300..700&display=swap',
|
||||
},
|
||||
},
|
||||
icons: {
|
||||
@@ -194,22 +194,22 @@ export const themes = [
|
||||
body: {
|
||||
name: 'Inter',
|
||||
css: 'Inter, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Inter:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Aleo:ital,wght@0,100..900;1,100..900&family=Geist+Mono:wght@100..900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'Inter',
|
||||
css: 'Inter, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Inter:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Aleo:ital,wght@0,100..900;1,100..900&family=Geist+Mono:wght@100..900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'Geist Mono',
|
||||
css: '"Geist Mono", monospace',
|
||||
href: 'https://fonts.bunny.net/css2?family=Geist+Mono:wght@100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Aleo:ital,wght@0,100..900;1,100..900&family=Geist+Mono:wght@100..900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap',
|
||||
},
|
||||
longform: {
|
||||
name: 'Aleo',
|
||||
css: 'Aleo, serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Aleo:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Aleo:ital,wght@0,100..900;1,100..900&family=Geist+Mono:wght@100..900&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap',
|
||||
},
|
||||
},
|
||||
icons: {
|
||||
@@ -254,22 +254,22 @@ export const themes = [
|
||||
body: {
|
||||
name: 'Space Grotesk',
|
||||
css: '"Space Grotesk", sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Space+Grotesk:wght@300..700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=IBM+Plex+Sans+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Podkova:wght@400..800&family=Space+Grotesk:wght@300..700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'IBM Plex Sans Condensed',
|
||||
css: '"IBM Plex Sans Condensed", sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=IBM+Plex+Sans+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=IBM+Plex+Sans+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Podkova:wght@400..800&family=Space+Grotesk:wght@300..700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'Space Mono',
|
||||
css: '"Space Mono", monospace',
|
||||
href: 'https://fonts.bunny.net/css2?family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=IBM+Plex+Sans+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Podkova:wght@400..800&family=Space+Grotesk:wght@300..700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap',
|
||||
},
|
||||
longform: {
|
||||
name: 'Podkova',
|
||||
css: 'Podkova, serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Podkova:wght@400..800&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=IBM+Plex+Sans+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Podkova:wght@400..800&family=Space+Grotesk:wght@300..700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap',
|
||||
},
|
||||
},
|
||||
icons: {
|
||||
@@ -314,22 +314,22 @@ export const themes = [
|
||||
body: {
|
||||
name: 'Figtree',
|
||||
css: 'Figtree, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Chivo+Mono:ital,wght@0,100..900;1,100..900&family=Figtree:ital,wght@0,300..900;1,300..900&family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'Figtree',
|
||||
css: 'Figtree, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Figtree:ital,wght@0,300..900;1,300..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Chivo+Mono:ital,wght@0,100..900;1,100..900&family=Figtree:ital,wght@0,300..900;1,300..900&family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'Chivo Mono',
|
||||
css: '"Chivo Mono", monospace',
|
||||
href: 'https://fonts.bunny.net/css2?family=Chivo+Mono:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Chivo+Mono:ital,wght@0,100..900;1,100..900&family=Figtree:ital,wght@0,300..900;1,300..900&family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap',
|
||||
},
|
||||
longform: {
|
||||
name: 'Fraunces',
|
||||
css: 'Fraunces, serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Fraunces:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Chivo+Mono:ital,wght@0,100..900;1,100..900&family=Figtree:ital,wght@0,300..900;1,300..900&family=Fraunces:ital,opsz,wght@0,9..144,100..900;1,9..144,100..900&display=swap',
|
||||
},
|
||||
},
|
||||
icons: {
|
||||
@@ -374,22 +374,22 @@ export const themes = [
|
||||
body: {
|
||||
name: 'Wix Madefor Text',
|
||||
css: '"Wix Madefor Text", sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Wix+Madefor+Text:ital,wght@0,400..800;1,400..800&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&family=Roboto+Serif:ital,opsz,wght@0,8..144,100..900;1,8..144,100..900&family=Roboto:ital,wght@0,100..900;1,100..900&family=Wix+Madefor+Text:ital,wght@0,400..800;1,400..800&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'Wix Madefor Text',
|
||||
css: '"Wix Madefor Text", sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Wix+Madefor+Text:ital,wght@0,400..800;1,400..800&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&family=Roboto+Serif:ital,opsz,wght@0,8..144,100..900;1,8..144,100..900&family=Roboto:ital,wght@0,100..900;1,100..900&family=Wix+Madefor+Text:ital,wght@0,400..800;1,400..800&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'Roboto Mono',
|
||||
css: '"Roboto Mono", monospace',
|
||||
href: 'https://fonts.bunny.net/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&family=Roboto+Serif:ital,opsz,wght@0,8..144,100..900;1,8..144,100..900&family=Roboto:ital,wght@0,100..900;1,100..900&family=Wix+Madefor+Text:ital,wght@0,400..800;1,400..800&display=swap',
|
||||
},
|
||||
longform: {
|
||||
name: 'Roboto Serif',
|
||||
css: '"Roboto Serif", serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Roboto+Serif:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&family=Roboto+Serif:ital,opsz,wght@0,8..144,100..900;1,8..144,100..900&family=Roboto:ital,wght@0,100..900;1,100..900&family=Wix+Madefor+Text:ital,wght@0,400..800;1,400..800&display=swap',
|
||||
},
|
||||
},
|
||||
icons: {
|
||||
@@ -434,12 +434,12 @@ export const themes = [
|
||||
body: {
|
||||
name: 'Mulish',
|
||||
css: 'Mulish, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Mulish:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Lora:ital,wght@0,400..700;1,400..700&family=Mulish:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'Lora',
|
||||
css: 'Lora, serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Lora:ital,wght@0,400..700;1,400..700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Lora:ital,wght@0,400..700;1,400..700&family=Mulish:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'OS Default',
|
||||
@@ -449,7 +449,7 @@ export const themes = [
|
||||
longform: {
|
||||
name: 'Lora',
|
||||
css: 'Lora, serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Lora:ital,wght@0,400..700;1,400..700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Lora:ital,wght@0,400..700;1,400..700&family=Mulish:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
},
|
||||
},
|
||||
icons: {
|
||||
@@ -494,22 +494,22 @@ export const themes = [
|
||||
body: {
|
||||
name: 'Nunito',
|
||||
css: 'Nunito, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Azeret+Mono:ital,wght@0,100..900;1,100..900&family=BioRhyme:wght@200..800&family=Fredoka:wght@300..700&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'Fredoka',
|
||||
css: 'Fredoka, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Fredoka:wght@300..700&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Azeret+Mono:ital,wght@0,100..900;1,100..900&family=BioRhyme:wght@200..800&family=Fredoka:wght@300..700&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'Azeret Mono',
|
||||
css: '"Azeret Mono", monospace',
|
||||
href: 'https://fonts.bunny.net/css2?family=Azeret+Mono:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Azeret+Mono:ital,wght@0,100..900;1,100..900&family=BioRhyme:wght@200..800&family=Fredoka:wght@300..700&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
},
|
||||
longform: {
|
||||
name: 'BioRhyme',
|
||||
css: 'BioRhyme, serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=BioRhyme:wght@200..800&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Azeret+Mono:ital,wght@0,100..900;1,100..900&family=BioRhyme:wght@200..800&family=Fredoka:wght@300..700&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap',
|
||||
},
|
||||
},
|
||||
icons: {
|
||||
@@ -554,12 +554,12 @@ export const themes = [
|
||||
body: {
|
||||
name: 'DM Sans',
|
||||
css: '"DM Sans", sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=DM+Sans:ital,wght@0,100..1000;1,100..1000&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Playfair+Display:ital,wght@0,400..900;1,400..900&family=Playfair:ital,opsz,wght@0,5..1200,300..900;1,5..1200,300..900&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'Playfair Display',
|
||||
css: '"Playfair Display", serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Playfair+Display:ital,wght@0,400..900;1,400..900&family=Playfair:ital,opsz,wght@0,5..1200,300..900;1,5..1200,300..900&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'OS Default',
|
||||
@@ -569,7 +569,7 @@ export const themes = [
|
||||
longform: {
|
||||
name: 'Playfair',
|
||||
css: 'Playfair, serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Playfair:ital,wght@0,300..900;1,300..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Playfair+Display:ital,wght@0,400..900;1,400..900&family=Playfair:ital,opsz,wght@0,5..1200,300..900;1,5..1200,300..900&display=swap',
|
||||
},
|
||||
},
|
||||
icons: {
|
||||
@@ -614,12 +614,12 @@ export const themes = [
|
||||
body: {
|
||||
name: 'Inter',
|
||||
css: 'Inter, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Inter:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap',
|
||||
},
|
||||
heading: {
|
||||
name: 'Inter',
|
||||
css: 'Inter, sans-serif',
|
||||
href: 'https://fonts.bunny.net/css2?family=Inter:ital,wght@0,100..900;1,100..900&display=swap',
|
||||
href: 'https://fonts.bunny.net/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap',
|
||||
},
|
||||
code: {
|
||||
name: 'OS Default',
|
||||
|
||||
@@ -15,9 +15,16 @@
|
||||
{% if hasSidebar %}<script type="module" src="/assets/scripts/sidebar.js"></script>{% endif %}
|
||||
<script defer data-domain="webawesome.com" src="https://plausible.io/js/script.js"></script>
|
||||
|
||||
{% block head %}
|
||||
{% if pageType == 'marketing' %}
|
||||
{# Marketing styles #}
|
||||
<link rel="stylesheet" href="/assets/styles/marketing.css" />
|
||||
{% else %}
|
||||
{# Docs styles (default) #}
|
||||
<link rel="stylesheet" href="/assets/styles/docs.css" />
|
||||
{% endblock %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% block head %}{% endblock %}
|
||||
|
||||
<script type="module">
|
||||
// Set the initial color scheme before the page renders to prevent flashing
|
||||
@@ -25,60 +32,79 @@
|
||||
const isDark = value === 'dark' || (value === 'auto' && matchMedia('(prefers-color-scheme: dark)').matches);
|
||||
document.documentElement.classList.toggle('wa-dark', isDark);
|
||||
</script>
|
||||
|
||||
<script type="module">
|
||||
// Set the initial theme before the page renders to prevent flashing
|
||||
const savedTheme = localStorage.getItem('theme') || 'default';
|
||||
|
||||
// Update the theme stylesheet link first
|
||||
const themeStylesheet = document.getElementById('theme-stylesheet');
|
||||
if (themeStylesheet) {
|
||||
themeStylesheet.href = `/dist/styles/themes/${savedTheme}.css`;
|
||||
}
|
||||
|
||||
if (savedTheme !== 'default') {
|
||||
document.documentElement.classList.add(`wa-theme-${savedTheme}`);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="layout-{{ layout | stripExtension }} page-{{ pageClass or page.fileSlug or 'home' }}{{ ' page-wide' if wide }}">
|
||||
{% set defaultWaPageAttributes = defaultWaPageAttributes or { view: 'desktop', 'disable-navigation-toggle': true, 'mobile-breakpoint': 1180 } %}
|
||||
{% set waPageAttributes = waPageAttributes or {} %}
|
||||
{% set mergedWaPageAttributes = defaultWaPageAttributes | merge(waPageAttributes) %}
|
||||
<wa-page
|
||||
{% for key, value in mergedWaPageAttributes %}
|
||||
{% if value != null and value != false %}
|
||||
{{ key }}="{{ value }}"
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
>
|
||||
{% block pageHeader %}
|
||||
<header slot="header" class="wa-split">
|
||||
<body class="layout-{{ layout | stripExtension }} page-{{ page.fileSlug or 'home' }}{{ ' page-wide' if wide }} page-{{ pageType or 'docs' }}">
|
||||
<!-- use view="desktop" as default to reduce layout jank on desktop site. -->
|
||||
<wa-page view="desktop" disable-navigation-toggle {% if pageType == 'marketing' %}disable-sticky="header"{% endif %} mobile-breakpoint="1180">
|
||||
{% if pageHeader %}
|
||||
{% include pageHeader %}
|
||||
{% else %}
|
||||
<header slot="header" class="wa-split">
|
||||
{# Logo #}
|
||||
<div id="docs-branding">
|
||||
{# Nav toggle #}
|
||||
<wa-button appearance="plain" size="small" data-toggle-nav>
|
||||
<wa-icon name="bars" label="Toggle navigation" class="icon-default icon-embiggen"></wa-icon>
|
||||
<wa-icon name="burger" aria-hidden="true" class="icon-hover icon-embiggen"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-button appearance="plain" size="small" data-toggle-nav>
|
||||
<wa-icon name="bars" label="Toggle navigation"></wa-icon>
|
||||
</wa-button>
|
||||
|
||||
{# Logo - Desktop #}
|
||||
<a class="brand-logo wa-desktop-only" href="/" aria-label="Web Awesome">
|
||||
{% include "logo.njk" %}
|
||||
</a>
|
||||
|
||||
{#- Logo - mobile branding -#}
|
||||
<a href="/" class="brand-logo wa-mobile-only" aria-label="Web Awesome">
|
||||
{# Logo - Mobile #}
|
||||
{% include "logo-simple.njk" %}
|
||||
<a href="/" aria-label="Web Awesome">
|
||||
<span class="wa-desktop-only">{% include "logo.njk" %}</span>
|
||||
<span class="wa-mobile-only">{% include "logo-simple.njk" %}</span>
|
||||
</a>
|
||||
<small id="version-number" class="wa-desktop-only">{{ package.version }}</small>
|
||||
<wa-badge variant="brand" appearance="filled" class="wa-desktop-only">Beta</wa-badge>
|
||||
</div>
|
||||
|
||||
<div id="docs-toolbar" class="wa-cluster gap-s">
|
||||
<div class="wa-desktop-only wa-cluster wa-gap-2xs">
|
||||
{% include "theme-selector.njk" %}
|
||||
{% include "color-scheme-selector.njk" %}
|
||||
{% include "github-icon-buttons.njk" %}
|
||||
</div>
|
||||
{#- Login -#}
|
||||
{% include "login-or-avatar.njk" ignore missing %}
|
||||
<div id="docs-toolbar" class="wa-cluster">
|
||||
{# Desktop selectors #}
|
||||
<div class="wa-desktop-only wa-cluster wa-gap-xs">
|
||||
{% include "theme-selector.njk" %}
|
||||
{% include "color-scheme-selector.njk" %}
|
||||
</div>
|
||||
</header>
|
||||
{% endblock %}
|
||||
|
||||
<wa-divider orientation="vertical" class="wa-desktop-only"></wa-divider>
|
||||
|
||||
<div id="github-buttons" class="wa-cluster wa-gap-xs">
|
||||
<wa-button id="github-repo-button" href="https://github.com/shoelace-style/webawesome" rel="noopener noreferrer" target="_blank" appearance="filled" size="small">
|
||||
<wa-icon family="brands" name="github" label="GitHub"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-tooltip for="github-repo-button" distance="2">GitHub</wa-tooltip>
|
||||
<wa-button id="github-star-button" href="https://github.com/shoelace-style/webawesome/stargazers" rel="noopener noreferrer" target="_blank" appearance="filled" size="small">
|
||||
<wa-icon name="star" variant="regular" label="Star this repository"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-tooltip for="github-star-button" distance="2">Star this repository</wa-tooltip>
|
||||
</div>
|
||||
|
||||
<wa-divider orientation="vertical"></wa-divider>
|
||||
|
||||
{# Login #}
|
||||
{% server "loginOrAvatar" %}
|
||||
</div>
|
||||
</header>
|
||||
{% endif %}
|
||||
|
||||
{# Sidebar #}
|
||||
{% if hasSidebar %}
|
||||
{# Mobile selectors #}
|
||||
<div class="wa-mobile-only" slot="navigation-header">
|
||||
<div class="wa-cluster wa-gap-s">
|
||||
<a class="brand-logo" href="/" aria-label="Web Awesome">{% include "logo-simple.njk" %}</a>
|
||||
<div class="wa-cluster wa-gap-2xs" style="flex-wrap: nowrap;">
|
||||
{% include "theme-selector.njk" %}
|
||||
{% include "color-scheme-selector.njk" %}
|
||||
{% include "github-icon-buttons.njk" %}
|
||||
</div>
|
||||
<div class="wa-cluster wa-gap-xs" style="flex-wrap: nowrap;">
|
||||
{% include "theme-selector.njk" %}
|
||||
{% include "color-scheme-selector.njk" %}
|
||||
</div>
|
||||
</div>
|
||||
<div slot="navigation" id="sidebar" class="docs-aside" data-remember-scroll>
|
||||
@@ -124,7 +150,9 @@
|
||||
{% include 'search.njk' %}
|
||||
|
||||
{# Footer #}
|
||||
{% block pageFooter %}{% endblock %}
|
||||
{% if pageFooter %}
|
||||
{% include pageFooter %}
|
||||
{% endif %}
|
||||
</wa-page>
|
||||
|
||||
</body>
|
||||
|
||||
@@ -1,35 +1,25 @@
|
||||
<wa-dropdown class="color-scheme-selector" title="Press \ to toggle">
|
||||
<wa-button slot="trigger" id="color-scheme-selector-trigger" appearance="plain">
|
||||
<wa-icon name="sun-bright" variant="regular" class="icon-embiggen only-light"></wa-icon>
|
||||
<wa-icon name="moon-stars" variant="regular" class="icon-embiggen only-dark"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-dropdown-item value="light">
|
||||
<wa-icon slot="icon" name="sun-bright" variant="regular" class="icon-embiggen"></wa-icon>
|
||||
<wa-select class="color-scheme-selector" appearance="filled" size="small" value="auto" title="Press \ to toggle">
|
||||
<wa-icon class="only-light" slot="start" name="sun" variant="regular"></wa-icon>
|
||||
<wa-icon class="only-dark" slot="start" name="moon" variant="regular"></wa-icon>
|
||||
<wa-option value="light">
|
||||
<wa-icon slot="start" name="sun" variant="regular"></wa-icon>
|
||||
Light
|
||||
</wa-dropdown-item>
|
||||
<wa-dropdown-item value="dark">
|
||||
<wa-icon slot="icon" name="moon-stars" variant="regular" class="icon-embiggen"></wa-icon>
|
||||
</wa-option>
|
||||
<wa-option value="dark">
|
||||
<wa-icon slot="start" name="moon" variant="regular"></wa-icon>
|
||||
Dark
|
||||
</wa-dropdown-item>
|
||||
</wa-option>
|
||||
<wa-divider></wa-divider>
|
||||
<wa-dropdown-item value="auto">
|
||||
<wa-icon slot="icon" name="sun-bright" variant="regular" class="only-light icon-embiggen"></wa-icon>
|
||||
<wa-icon slot="icon" name="moon-stars" variant="regular" class="only-dark icon-embiggen"></wa-icon>
|
||||
<wa-option value="auto">
|
||||
<wa-icon class="only-light" slot="start" name="sun" variant="regular"></wa-icon>
|
||||
<wa-icon class="only-dark" slot="start" name="moon" variant="regular"></wa-icon>
|
||||
System
|
||||
</wa-dropdown-item>
|
||||
</wa-dropdown>
|
||||
<wa-tooltip for="color-scheme-selector-trigger" id="color-scheme-tooltip">Select Color Scheme</wa-tooltip>
|
||||
</wa-option>
|
||||
</wa-select>
|
||||
|
||||
<script>
|
||||
// Handle dropdown selection and trigger input event for color-scheme.js
|
||||
document.querySelectorAll('wa-dropdown.color-scheme-selector').forEach(el => {
|
||||
el.addEventListener('wa-select', (event) => {
|
||||
const selectedValue = event.detail.item.value;
|
||||
|
||||
// Trigger input event for color-scheme.js
|
||||
el.value = selectedValue;
|
||||
el.dispatchEvent(new Event('input', { bubbles: true }));
|
||||
});
|
||||
// Immediately set the correct value from storage
|
||||
document.querySelectorAll('wa-select.color-scheme-selector').forEach(el => {
|
||||
el.setAttribute('value', localStorage.getItem('color-scheme') || 'auto');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<wa-button id="github-repo-button" href="https://github.com/shoelace-style/webawesome" rel="noopener noreferrer" target="_blank" appearance="plain">
|
||||
<wa-icon family="brands" name="github" label="View Repository on GitHub" class="icon-embiggen"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-tooltip for="github-repo-button" distance="2">View on GitHub</wa-tooltip>
|
||||
<wa-button id="github-star-button" href="https://github.com/shoelace-style/webawesome/stargazers" rel="noopener noreferrer" target="_blank" appearance="plain">
|
||||
<wa-icon name="star" variant="regular" label="Star Repository on GitHub" class="icon-embiggen"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-tooltip for="github-star-button" distance="2">Star on GitHub</wa-tooltip>
|
||||
@@ -21,7 +21,9 @@
|
||||
<script type="module" src="/dist/webawesome.loader.js"></script>
|
||||
|
||||
<link id="theme-stylesheet" rel="stylesheet" href="/dist/styles/themes/default.css" render="blocking" fetchpriority="high" />
|
||||
|
||||
{% for palette in themer.palettes %}
|
||||
<link rel="stylesheet" href="/dist/styles/color/palettes/{{palette.filename}}" />
|
||||
{% endfor %}
|
||||
<link rel="stylesheet" href="/dist/styles/webawesome.css" />
|
||||
|
||||
<script type="module">
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" fill="none" viewBox="0 0 20 15"><path fill="var(--wa-brand-orange, #f36944)" d="M11.63 1.625c0 .654-.387 1.218-.944 1.476L14 6l3.262-.652A1.5 1.5 0 1 1 18.55 6l-3.52 7.82A2 2 0 0 1 13.208 15H6.793a2 2 0 0 1-1.824-1.18L1.45 6a1.5 1.5 0 1 1 1.289-.652L6 6l3.317-2.902a1.625 1.625 0 1 1 2.313-1.473"/></svg>
|
||||
<svg width="20" height="15" viewBox="0 0 20 15" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.63 1.625C11.63 2.27911 11.2435 2.84296 10.6865 3.10064L14 6L17.2622 5.34755C17.0968 5.10642 17 4.81452 17 4.5C17 3.67157 17.6716 3 18.5 3C19.3284 3 20 3.67157 20 4.5C20 5.31157 19.3555 5.9726 18.5504 5.99917L15.0307 13.8207C14.7077 14.5384 13.9939 15 13.2068 15H6.79317C6.00615 15 5.29229 14.5384 4.96933 13.8207L1.44963 5.99917C0.64452 5.9726 0 5.31157 0 4.5C0 3.67157 0.671573 3 1.5 3C2.32843 3 3 3.67157 3 4.5C3 4.81452 2.9032 5.10642 2.73777 5.34755L6 6L9.31702 3.09761C8.76346 2.83855 8.38 2.27656 8.38 1.625C8.38 0.727537 9.10754 0 10.005 0C10.9025 0 11.63 0.727537 11.63 1.625Z" fill="var(--wa-brand-orange, #f36944)"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 368 B After Width: | Height: | Size: 742 B |
@@ -1 +1,13 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="105" height="16" fill="none" viewBox="0 0 105 16"><path fill="currentColor" d="M78.052 11.86c.412.386 1.175.64 1.816.64 1.193 0 2.122-.667 2.122-1.807 0-.85-.517-1.342-1.482-1.746l-.667-.28c-.36-.15-.5-.255-.5-.474 0-.263.22-.368.518-.368.31 0 .479.13.633.25q.057.044.112.083a.64.64 0 0 0 .386.132c.334 0 .676-.29.676-.676a.66.66 0 0 0-.176-.447C81.35 7 80.86 6.49 79.841 6.5c-1.149 0-2.026.676-2.026 1.71 0 .816.544 1.343 1.465 1.746l.596.263c.404.176.588.264.588.535 0 .281-.193.422-.596.422-.504 0-.843-.28-1.02-.424q-.053-.045-.086-.068a.63.63 0 0 0-.342-.105.673.673 0 0 0-.675.667c0 .228.114.43.307.614M97.912 7.28c0-.447-.316-.78-.755-.78-.307 0-.517.15-.763.553l-1.43 2.298-1.43-2.298c-.245-.404-.456-.553-.763-.553-.438 0-.754.333-.754.78v4.457a.74.74 0 0 0 .754.763.74.74 0 0 0 .755-.763V9.71l.754 1.201c.21.334.403.465.684.465.28 0 .474-.131.684-.465l.755-1.201v2.026a.74.74 0 0 0 .754.763.74.74 0 0 0 .755-.763zM100.516 11.632c0 .438.324.763.763.763h2.754a.67.67 0 0 0 .693-.684c0-.386-.289-.676-.693-.676h-2.009v-1.009h1.211a.62.62 0 0 0 .64-.631.62.62 0 0 0-.64-.632h-1.211v-.798h1.904a.67.67 0 0 0 .693-.684c0-.386-.29-.676-.693-.676h-2.649a.74.74 0 0 0-.763.764z"/><path fill="currentColor" fill-rule="evenodd" d="M86.878 6.5c1.754 0 3.131 1.325 3.131 3 0 1.684-1.377 3-3.131 3s-3.114-1.316-3.114-3 1.368-3 3.114-3m.009 1.386c-.939 0-1.58.658-1.58 1.614 0 .965.632 1.614 1.58 1.614.93 0 1.579-.667 1.579-1.614 0-.939-.658-1.614-1.58-1.614" clip-rule="evenodd"/><path fill="currentColor" d="M72.172 12.395a.74.74 0 0 1-.763-.763V7.369c0-.44.325-.764.763-.764h2.65c.403 0 .692.29.692.676a.67.67 0 0 1-.693.684h-1.903v.798h1.21a.62.62 0 0 1 .64.632.62.62 0 0 1-.64.631h-1.21v1.01h2.008c.404 0 .693.289.693.675a.67.67 0 0 1-.693.684zM69.443 7.237a.75.75 0 0 0-.754-.737.72.72 0 0 0-.702.5l-1.044 2.86-.965-2.79c-.131-.368-.395-.57-.745-.57-.351 0-.615.202-.746.57l-.965 2.79-1.053-2.886c-.105-.298-.368-.474-.693-.474a.75.75 0 0 0-.754.737c0 .105.018.202.079.342l1.71 4.412c.123.334.369.509.702.509.325 0 .57-.175.693-.509l1.026-2.78 1.027 2.78c.123.334.368.509.693.509.333 0 .579-.175.701-.509l1.711-4.412a.9.9 0 0 0 .079-.342"/><path fill="currentColor" fill-rule="evenodd" d="M60.027 11.412c.053.132.079.263.079.369 0 .412-.316.719-.746.719-.324 0-.57-.184-.71-.544l-.123-.307h-2.07l-.123.307c-.14.36-.386.544-.71.544-.43 0-.746-.307-.746-.72 0-.104.026-.236.079-.368L56.773 7c.131-.324.377-.5.719-.5s.588.176.72.5zm-2.535-2.666-.588 1.693h1.176z" clip-rule="evenodd"/><path fill="currentColor" d="M35.667 6.5a.75.75 0 0 1 .754.737c0 .114-.026.21-.08.342l-1.71 4.412c-.122.334-.368.509-.701.509-.325 0-.57-.175-.693-.509l-1.027-2.78-1.026 2.78c-.123.334-.368.509-.693.509-.333 0-.579-.175-.702-.509L28.08 7.58A.8.8 0 0 1 28 7.237a.75.75 0 0 1 .754-.737c.325 0 .588.176.693.474L30.5 9.86l.965-2.79c.131-.368.395-.57.745-.57.351 0 .614.202.746.57l.965 2.79L34.965 7a.72.72 0 0 1 .701-.5M38.387 11.632c0 .438.324.763.763.763h2.754c.395 0 .693-.29.693-.684 0-.386-.29-.676-.693-.676h-2.008v-1.009h1.21a.62.62 0 0 0 .64-.631.62.62 0 0 0-.64-.632h-1.21v-.798h1.903a.67.67 0 0 0 .693-.684c0-.386-.29-.676-.693-.676H39.15a.74.74 0 0 0-.763.764z"/><path fill="currentColor" fill-rule="evenodd" d="M49.502 10.675c0-.657-.36-1.14-.965-1.385.228-.255.351-.588.351-.974 0-1-.816-1.71-1.956-1.71h-1.325a.74.74 0 0 0-.763.763v4.263c0 .438.325.763.764.763h1.938c1.132 0 1.956-.72 1.956-1.72m-3.21-2.798h.544c.35 0 .578.193.578.509s-.228.509-.578.509h-.544zm1.736 2.737c0 .325-.21.509-.578.509h-1.158v-1.018h1.158c.368 0 .578.184.578.509" clip-rule="evenodd"/><path fill="var(--wa-brand-orange, #f36944)" d="M11.63 1.625c0 .654-.387 1.218-.944 1.476L14 6l3.262-.652A1.5 1.5 0 1 1 18.55 6l-3.52 7.82A2 2 0 0 1 13.208 15H6.793a2 2 0 0 1-1.824-1.18L1.45 6a1.5 1.5 0 1 1 1.289-.652L6 6l3.317-2.902a1.625 1.625 0 1 1 2.313-1.473"/></svg>
|
||||
<svg width="105" height="16" viewBox="0 0 105 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M78.0517 11.8597C78.464 12.2456 79.2272 12.5 79.8675 12.5C81.0605 12.5 81.9903 11.8333 81.9903 10.693C81.9903 9.84215 81.4727 9.35093 80.5078 8.94743L79.8412 8.66674C79.4815 8.51762 79.3412 8.41235 79.3412 8.19306C79.3412 7.92991 79.5605 7.82465 79.8587 7.82465C80.169 7.82465 80.3376 7.95507 80.4921 8.07458C80.5297 8.1037 80.5665 8.1322 80.6043 8.15797C80.7359 8.25446 80.8675 8.28955 80.9903 8.28955C81.3236 8.28955 81.6657 8.00008 81.6657 7.61413C81.6657 7.47378 81.6219 7.31589 81.4903 7.16677C81.3499 7.0001 80.8587 6.49134 79.8412 6.50011C78.6921 6.50011 77.8149 7.17554 77.8149 8.2106C77.8149 9.02638 78.3588 9.55268 79.2798 9.95618L79.8763 10.2193C80.2798 10.3948 80.464 10.4825 80.464 10.7544C80.464 11.0351 80.271 11.1755 79.8675 11.1755C79.3642 11.1755 79.0247 10.8964 78.8489 10.752C78.8133 10.7228 78.7844 10.699 78.7623 10.6842C78.657 10.6141 78.5342 10.579 78.4202 10.579C78.0781 10.579 77.7535 10.8421 77.7447 11.2456C77.7447 11.4737 77.8588 11.6754 78.0517 11.8597Z" fill="currentColor"/>
|
||||
<path d="M97.9115 7.2808C97.9115 6.83344 97.5957 6.50012 97.1572 6.50011C96.8502 6.50011 96.6396 6.64923 96.394 7.05274L94.9642 9.35094L93.5344 7.05274C93.2888 6.64923 93.0783 6.50011 92.7713 6.50011C92.3327 6.50011 92.0169 6.83344 92.0169 7.2808V11.7369C92.0169 12.1754 92.3415 12.5 92.7713 12.5C93.2011 12.5 93.5257 12.1754 93.5257 11.7369V9.71058L94.28 10.9123C94.4906 11.2456 94.6835 11.3772 94.9642 11.3772C95.2449 11.3772 95.4379 11.2456 95.6484 10.9123L96.4028 9.71058V11.7369C96.4028 12.1754 96.7273 12.5 97.1572 12.5C97.587 12.5 97.9115 12.1754 97.9115 11.7369L97.9115 7.2808Z" fill="currentColor"/>
|
||||
<path d="M100.516 11.6316C100.516 12.0702 100.84 12.3947 101.279 12.3947L104.033 12.3947C104.428 12.3947 104.726 12.1053 104.726 11.7105C104.726 11.3246 104.437 11.0351 104.033 11.0351L102.024 11.0351V10.0264L103.235 10.0264C103.603 10.0264 103.875 9.75445 103.875 9.3948C103.875 9.03516 103.603 8.76324 103.235 8.76324L102.024 8.76324V7.96501L103.928 7.96501C104.323 7.96501 104.621 7.67554 104.621 7.28081C104.621 6.89485 104.331 6.60539 103.928 6.60539L101.279 6.60538C100.84 6.60538 100.516 6.92994 100.516 7.36853V11.6316Z" fill="currentColor"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M86.8778 6.50011C88.6322 6.50011 90.0094 7.82465 90.0094 9.50006C90.0094 11.1842 88.6322 12.5 86.8778 12.5C85.1235 12.5 83.7639 11.1842 83.7639 9.50006C83.7639 7.81588 85.1323 6.50011 86.8778 6.50011ZM86.8866 7.88605C85.948 7.88605 85.3077 8.54393 85.3077 9.50006C85.3077 10.4649 85.9393 11.1141 86.8866 11.1141C87.8164 11.1141 88.4655 10.4474 88.4655 9.50006C88.4655 8.56148 87.8076 7.88605 86.8866 7.88605Z" fill="currentColor"/>
|
||||
<path d="M72.1721 12.3947C71.7335 12.3947 71.4089 12.0702 71.4089 11.6316V7.36852C71.4089 6.92993 71.7335 6.60538 72.1721 6.60538L74.8211 6.60538C75.2246 6.60538 75.5141 6.89485 75.5141 7.2808C75.5141 7.67553 75.2159 7.965 74.8211 7.965L72.9177 7.965V8.76323L74.1282 8.76323C74.4966 8.76323 74.7685 9.03515 74.7685 9.3948C74.7685 9.75444 74.4966 10.0264 74.1282 10.0264L72.9177 10.0264V11.0351L74.9264 11.0351C75.3299 11.0351 75.6194 11.3246 75.6194 11.7105C75.6194 12.1053 75.3211 12.3947 74.9264 12.3947L72.1721 12.3947Z" fill="currentColor"/>
|
||||
<path d="M69.4429 7.23694C69.443 6.83344 69.1009 6.50012 68.6886 6.50012C68.364 6.50012 68.1009 6.68432 67.9868 7.00011L66.943 9.8597L65.9781 7.07028C65.8465 6.70187 65.5834 6.50011 65.2325 6.50011C64.8816 6.50011 64.6185 6.70187 64.4869 7.07028L63.522 9.8597L62.4694 6.97379C62.3641 6.67555 62.101 6.50011 61.7764 6.50011C61.3642 6.50011 61.0221 6.83344 61.0221 7.23694C61.0221 7.3422 61.0396 7.43869 61.101 7.57904L62.8115 11.9912C62.9343 12.3246 63.1799 12.5 63.5132 12.5C63.8378 12.5 64.0834 12.3246 64.2062 11.9912L65.2325 9.21059L66.2588 11.9912C66.3816 12.3246 66.6272 12.5 66.9518 12.5C67.2851 12.5 67.5307 12.3246 67.6535 11.9912L69.364 7.57904C69.4166 7.44747 69.4429 7.35098 69.4429 7.23694Z" fill="currentColor"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M60.0269 11.4123C60.0795 11.5439 60.1058 11.6755 60.1058 11.7807C60.1058 12.193 59.7901 12.5 59.3602 12.5C59.0357 12.5 58.7901 12.3158 58.6497 11.9561L58.5269 11.6491L56.4568 11.6491L56.334 11.9561C56.1936 12.3158 55.948 12.5 55.6235 12.5C55.1936 12.5 54.8779 12.193 54.8779 11.7807C54.8779 11.6755 54.9042 11.5439 54.9568 11.4123L56.7726 7.0001C56.9041 6.67555 57.1498 6.50011 57.4919 6.50011C57.834 6.50011 58.0796 6.67555 58.2111 7.00011L60.0269 11.4123ZM57.4919 8.74568L56.9041 10.4386L58.0796 10.4386L57.4919 8.74568Z" fill="currentColor"/>
|
||||
<path d="M35.6665 6.50013C36.0788 6.50013 36.4209 6.83346 36.4209 7.23696C36.4209 7.35099 36.3946 7.44748 36.3419 7.57906L34.6314 11.9912C34.5086 12.3246 34.263 12.5 33.9297 12.5C33.6051 12.5 33.3595 12.3246 33.2367 11.9912L32.2104 9.2106L31.1841 11.9912C31.0613 12.3246 30.8157 12.5 30.4912 12.5C30.1578 12.5 29.9122 12.3246 29.7894 11.9912L28.0789 7.57906C28.0175 7.43871 28 7.34222 28 7.23696C28 6.83346 28.3421 6.50013 28.7544 6.50013C29.0789 6.50013 29.3421 6.67557 29.4473 6.97381L30.4999 9.85971L31.4648 7.07029C31.5964 6.70188 31.8596 6.50013 32.2104 6.50013C32.5613 6.50013 32.8245 6.70188 32.956 7.07029L33.9209 9.85971L34.9648 7.00012C35.0788 6.68434 35.3419 6.50013 35.6665 6.50013Z" fill="currentColor"/>
|
||||
<path d="M38.3868 11.6316C38.3868 12.0702 38.7114 12.3947 39.15 12.3947H41.9043C42.299 12.3947 42.5973 12.1052 42.5973 11.7105C42.5973 11.3246 42.3078 11.0351 41.9043 11.0351H39.8956V10.0263H41.1061C41.4745 10.0263 41.7464 9.75442 41.7464 9.39478C41.7464 9.03514 41.4745 8.76321 41.1061 8.76321H39.8956V7.96498H41.799C42.1938 7.96498 42.492 7.67552 42.492 7.28079C42.492 6.89483 42.2025 6.60536 41.799 6.60536H39.15C38.7114 6.60536 38.3868 6.92992 38.3868 7.36851V11.6316Z" fill="currentColor"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M49.5021 10.6754C49.5021 10.0176 49.1425 9.53512 48.5372 9.28952C48.7653 9.03514 48.8881 8.70181 48.8881 8.31585C48.8881 7.31587 48.0723 6.60536 46.932 6.60536H45.6075C45.1689 6.60536 44.8443 6.92992 44.8443 7.36851V11.6316C44.8443 12.0702 45.1689 12.3947 45.6075 12.3947H47.546C48.6776 12.3947 49.5021 11.6754 49.5021 10.6754ZM46.2917 7.87727H46.8355C47.1864 7.87727 47.4145 8.07024 47.4145 8.38603C47.4145 8.70181 47.1864 8.89479 46.8355 8.89479H46.2917V7.87727ZM48.0285 10.614C48.0285 10.9386 47.818 11.1228 47.4496 11.1228H46.2917V10.1053H47.4496C47.818 10.1053 48.0285 10.2895 48.0285 10.614Z" fill="currentColor"/>
|
||||
<path d="M11.63 1.625C11.63 2.27911 11.2435 2.84296 10.6865 3.10064L14 6L17.2622 5.34755C17.0968 5.10642 17 4.81452 17 4.5C17 3.67157 17.6716 3 18.5 3C19.3284 3 20 3.67157 20 4.5C20 5.31157 19.3555 5.9726 18.5504 5.99917L15.0307 13.8207C14.7077 14.5384 13.9939 15 13.2068 15H6.79317C6.00615 15 5.29229 14.5384 4.96933 13.8207L1.44963 5.99917C0.64452 5.9726 0 5.31157 0 4.5C0 3.67157 0.671573 3 1.5 3C2.32843 3 3 3.67157 3 4.5C3 4.81452 2.9032 5.10642 2.73777 5.34755L6 6L9.31702 3.09761C8.76346 2.83855 8.38 2.27656 8.38 1.625C8.38 0.727537 9.10754 0 10.005 0C10.9025 0 11.63 0.727537 11.63 1.625Z" fill="var(--wa-brand-orange, #F36944)"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 7.0 KiB |
@@ -1,5 +0,0 @@
|
||||
{% macro plannedBadge(plannedBadgeDescription, plannedBadgeId) %}
|
||||
{% set badgeId = plannedBadgeId or ("planned-badge-" + ("" | uniqueId(8))) %}
|
||||
<wa-badge appearance="filled" variant="neutral" pill class="planned" id="{{ badgeId }}">Planned</wa-badge>
|
||||
<wa-tooltip for="{{ badgeId }}">{{ plannedBadgeDescription or "This is a planned feature" }}</wa-tooltip>
|
||||
{% endmacro %}
|
||||
@@ -1,6 +0,0 @@
|
||||
{% macro proBadge(params) %}
|
||||
{% set description = params.description or "This requires access to Web Awesome Pro" %}
|
||||
{% set badgeId = params.id or ("pro-badge-" + ("" | uniqueId(8))) %}
|
||||
<wa-badge appearance="accent" pill class="pro" id="{{ badgeId }}">Pro</wa-badge>
|
||||
<wa-tooltip for="{{ badgeId }}">{{ description }}</wa-tooltip>
|
||||
{% endmacro %}
|
||||
@@ -1,5 +0,0 @@
|
||||
<wa-button id="search-trigger" appearance="outlined" size="small" data-search>
|
||||
<wa-icon slot="start" name="magnifying-glass"></wa-icon>
|
||||
Search the Docs for…
|
||||
<kbd slot="end" class="wa-desktop-only">/</kbd>
|
||||
</wa-button>
|
||||
@@ -1,7 +1,9 @@
|
||||
{# Search #}
|
||||
{% include "search-trigger-button.njk" %}
|
||||
{% from "pro-badge.njk" import proBadge %}
|
||||
{% from "planned-badge.njk" import plannedBadge %}
|
||||
<wa-button id="search-trigger" appearance="outlined" size="small" data-search>
|
||||
<wa-icon slot="start" name="magnifying-glass"></wa-icon>
|
||||
Search
|
||||
<kbd slot="end" class="wa-desktop-only">/</kbd>
|
||||
</wa-button>
|
||||
|
||||
{# Getting started #}
|
||||
<h2>Getting Started</h2>
|
||||
@@ -18,12 +20,6 @@
|
||||
<ul>
|
||||
<li><a href="https://github.com/shoelace-style/webawesome/discussions" target="_blank">Help & Support</a></li>
|
||||
<li><a href="https://github.com/shoelace-style/webawesome/">Source Code</a></li>
|
||||
<li>
|
||||
<span class="wa-split">
|
||||
<a href="/docs/resources/figma">Figma Design Kit</a></li>
|
||||
{{ proBadge() }}
|
||||
</span>
|
||||
</li>
|
||||
<li><a href="/docs/resources/community">Community</a></li>
|
||||
<li><a href="/docs/resources/accessibility">Accessibility</a></li>
|
||||
<li><a href="/docs/resources/browser-support">Browser Support</a></li>
|
||||
@@ -44,9 +40,9 @@
|
||||
<li>
|
||||
<span class="wa-split">
|
||||
<a class="wa-cluster wa-gap-xs" href="/docs/components/page/">
|
||||
Page <wa-icon name="flask" aria-hidden="true" class="icon-shrink"></wa-icon>
|
||||
Page <wa-icon name="flask" aria-hidden="true"></wa-icon>
|
||||
</a>
|
||||
{{ proBadge() }}
|
||||
<wa-badge class="pro" appearance="accent" attention="none">PRO</wa-badge>
|
||||
</span>
|
||||
</li>
|
||||
<li><a href="/docs/components/animated-image/">Animated Image</a></li>
|
||||
@@ -66,30 +62,26 @@
|
||||
<li>
|
||||
<a class="wa-cluster wa-gap-xs" href="/docs/components/carousel/">
|
||||
Carousel
|
||||
<wa-icon name="flask" aria-hidden="true" class="icon-shrink"></wa-icon>
|
||||
<wa-icon name="flask" aria-hidden="true"></wa-icon>
|
||||
</a>
|
||||
<ul>
|
||||
<li>
|
||||
<a class="wa-cluster wa-gap-xs" href="/docs/components/carousel-item/">
|
||||
Carousel Item
|
||||
<wa-icon name="flask" aria-hidden="true" class="icon-shrink"></wa-icon>
|
||||
<wa-icon name="flask" aria-hidden="true"></wa-icon>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><span class="is-planned wa-split">Charts <a href="https://github.com/shoelace-style/webawesome/issues/1073" target="_blank">{{ plannedBadge("A Web Awesome Kickstarter stretch goal!") }}</a></span></li>
|
||||
<li><a href="/docs/components/checkbox/">Checkbox</a></li>
|
||||
<li><a href="/docs/components/color-picker/">Color Picker</a></li>
|
||||
<li><span class="is-planned wa-split">Combobox <a href="https://github.com/shoelace-style/webawesome/issues/1074" target="_blank">{{ plannedBadge("A Web Awesome Kickstarter stretch goal!") }}</a></span></li>
|
||||
<li><a href="/docs/components/comparison/">Comparison</a></li>
|
||||
<li>
|
||||
<a class="wa-cluster wa-gap-xs" href="/docs/components/copy-button/">
|
||||
Copy Button
|
||||
<wa-icon name="flask" aria-hidden="true" class="icon-shrink"></wa-icon>
|
||||
<wa-icon name="flask" aria-hidden="true"></wa-icon>
|
||||
</a>
|
||||
</li>
|
||||
<li><span class="is-planned wa-split">Data Grid <a href="https://github.com/shoelace-style/webawesome/issues/1072" target="_blank">{{ plannedBadge("A Web Awesome Kickstarter stretch goal!") }}</a></span></li>
|
||||
<li><span class="is-planned wa-split">Datepicker <a href="https://github.com/shoelace-style/webawesome/issues/1075" target="_blank">{{ plannedBadge("A Web Awesome Kickstarter stretch goal!") }}</a></span></li>
|
||||
<li><a href="/docs/components/details/">Details</a></li>
|
||||
<li><a href="/docs/components/dialog/">Dialog</a></li>
|
||||
<li><a href="/docs/components/divider/">Divider</a></li>
|
||||
@@ -189,9 +181,9 @@
|
||||
<li>
|
||||
<span class="wa-split">
|
||||
<a class="wa-cluster wa-gap-xs" href="/docs/components/page/">
|
||||
Page <wa-icon name="flask" aria-hidden="true" class="icon-shrink"></wa-icon>
|
||||
Page <wa-icon name="flask" aria-hidden="true"></wa-icon>
|
||||
</a>
|
||||
{{ proBadge() }}
|
||||
<wa-badge class="pro" appearance="accent" attention="none">PRO</wa-badge>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -209,7 +201,7 @@
|
||||
<li>
|
||||
<span class="wa-split">
|
||||
<a href="/docs/patterns/app/">App</a>
|
||||
{{ proBadge() }}
|
||||
<wa-badge class="pro" appearance="accent" attention="none">PRO</wa-badge>
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
@@ -255,7 +247,7 @@
|
||||
<li>
|
||||
<span class="wa-split">
|
||||
<a href="/docs/patterns/blog-news/">Blog & News</a>
|
||||
{{ proBadge() }}
|
||||
<wa-badge class="pro" appearance="accent" attention="none">PRO</wa-badge>
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
@@ -317,7 +309,7 @@
|
||||
<li>
|
||||
<span class="wa-split">
|
||||
<a href="/docs/patterns/ecommerce/">Ecommerce</a>
|
||||
{{ proBadge() }}
|
||||
<wa-badge class="pro" appearance="accent" attention="none">PRO</wa-badge>
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
@@ -358,7 +350,7 @@
|
||||
<li>
|
||||
<span class="wa-split">
|
||||
<a href="/docs/patterns/layouts/">Layouts</a>
|
||||
{{ proBadge() }}
|
||||
<wa-badge class="pro" appearance="accent" attention="none">PRO</wa-badge>
|
||||
</span>
|
||||
<ul>
|
||||
<li>
|
||||
@@ -380,6 +372,12 @@
|
||||
<ul>
|
||||
<li><a href="/docs/color-palettes">Color Palettes</a></li>
|
||||
<li><a href="/docs/themes">Themes</a></li>
|
||||
<li>
|
||||
<span class="wa-split">
|
||||
<a href="/themer" data-turbo="false">Theme Builder</a>
|
||||
<wa-badge class="pro" appearance="accent" attention="none">PRO</wa-badge>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- Design tokens -->
|
||||
@@ -401,47 +399,3 @@
|
||||
<li><a href="/docs/tokens/component-groups/">Component Groups</a></li>
|
||||
</ul>
|
||||
</wa-details>
|
||||
|
||||
{# Policies #}
|
||||
<h2>Terms & Policies</h2>
|
||||
<ul>
|
||||
<li><a href="/license"><span class="wa-visually-hidden">Web Awesome </span>Free License</a></li>
|
||||
<li><a href="/license/pro"><span class="wa-visually-hidden">Web Awesome </span>Pro License</a></li>
|
||||
<li><a href="/tos">Terms of Service</a></li>
|
||||
<li><a href="/privacy">Privacy Policy</a></li>
|
||||
<li><a href="/refunds">Refund Policy</a></li>
|
||||
</ul>
|
||||
|
||||
<wa-divider style="--spacing: var(--wa-space-xl);"></wa-divider>
|
||||
|
||||
<div class="wa-stack wa-gap-xl" id="colophon">
|
||||
<div class="wa-stack wa-gap-xs">
|
||||
{% include "logo-simple.njk" %}
|
||||
<h2 class="wa-heading-s">Web Awesome</h2>
|
||||
<p class="wa-caption-xs wa-cluster wa-gap-xs">
|
||||
Version {{ package.version }}
|
||||
<wa-icon id="version-icon-info" family="duotone" variant="regular" name="party-horn"></wa-icon>
|
||||
<wa-tooltip for="version-icon-info" distance="2" class="wa-font-size-xs">Here be freshly launched Awesome and no wa-dragons</wa-tooltip>
|
||||
</p>
|
||||
<p class="wa-caption-xs">© Fonticons, Inc.</p>
|
||||
</div>
|
||||
|
||||
<div class="wa-cluster wa-gap-0 wa-caption-xs the-socials">
|
||||
<h2 class="wa-visually-hidden">Web Awesome Elsewhere</h2>
|
||||
<a href="https://github.com/shoelace-style/webawesome" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="github" label="GitHub"></wa-icon>
|
||||
</a>
|
||||
<a href="https://bsky.app/profile/webawesome.com" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="bluesky" label="Bluesky"></wa-icon>
|
||||
</a>
|
||||
<a href="https://mastodon.social/@webawesome" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="mastodon" label="Mastodon"></wa-icon>
|
||||
</a>
|
||||
<a href="https://x.com/webawesomer" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="x-twitter" label="Twitter (X)"></wa-icon>
|
||||
</a>
|
||||
<a href="https://www.threads.com/@web.awesome" rel="noopener noreferrer" target="_blank" class="appearance-plain">
|
||||
<wa-icon family="brands" name="threads" label="Threads"></wa-icon>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
<wa-dropdown class="theme-selector" title="Select Theme">
|
||||
<wa-button slot="trigger" id="theme-selector-trigger" appearance="plain">
|
||||
<wa-icon name="paintbrush" variant="regular" class="icon-embiggen"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-select appearance="filled" size="small" value="default" class="theme-selector">
|
||||
<wa-icon slot="start" name="paintbrush" variant="regular"></wa-icon>
|
||||
|
||||
{# Free themes #}
|
||||
{% for theme in themer.themes %}
|
||||
{% if not theme.isPro %}
|
||||
<wa-dropdown-item
|
||||
<wa-option
|
||||
value="{{ theme.filename | stripExtension }}"
|
||||
data-brand="{{ theme.colorBrand.color }}"
|
||||
data-palette="{{ theme.palette.filename | stripExtension }}"
|
||||
>
|
||||
{{ theme.name }}
|
||||
</wa-dropdown-item>
|
||||
</wa-option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
@@ -20,27 +18,24 @@
|
||||
{% for theme in themer.themes %}
|
||||
{% if loop.first %}<wa-divider></wa-divider>{% endif %}
|
||||
{% if theme.isPro %}
|
||||
<wa-dropdown-item
|
||||
<wa-option
|
||||
value="{{ theme.filename | stripExtension }}"
|
||||
data-brand="{{ theme.colorBrand.color }}"
|
||||
data-palette="{{ theme.palette.filename | stripExtension }}"
|
||||
>
|
||||
{{ theme.name }}
|
||||
</wa-dropdown-item>
|
||||
</wa-option>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</wa-dropdown>
|
||||
<wa-tooltip for="theme-selector-trigger" id="theme-tooltip">Select Theme</wa-tooltip>
|
||||
</wa-select>
|
||||
|
||||
<script>
|
||||
// Handle dropdown selection and trigger input event for theme.js
|
||||
document.querySelectorAll('wa-dropdown.theme-selector').forEach(el => {
|
||||
el.addEventListener('wa-select', (event) => {
|
||||
const selectedValue = event.detail.item.value;
|
||||
|
||||
// Trigger input event for theme.js
|
||||
el.value = selectedValue;
|
||||
el.dispatchEvent(new Event('input', { bubbles: true }));
|
||||
});
|
||||
// Immediately set the correct values from storage
|
||||
document.querySelectorAll('wa-select.theme-selector').forEach(el => {
|
||||
el.setAttribute('value', localStorage.getItem('theme') || 'default');
|
||||
});
|
||||
|
||||
// Apply saved brand and palette classes
|
||||
document.documentElement.classList.add(`wa-brand-${localStorage.getItem('brand') || 'blue'}`);
|
||||
document.documentElement.classList.add(`wa-palette-${localStorage.getItem('palette') || 'default'}`);
|
||||
</script>
|
||||
|
||||
@@ -33,11 +33,11 @@
|
||||
<th><code>filled</code> + <code>outlined</code></th>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge variant="brand" appearance="filled-outlined">Brand</wa-badge>
|
||||
<wa-badge variant="neutral" appearance="filled-outlined">Neutral</wa-badge>
|
||||
<wa-badge variant="success" appearance="filled-outlined">Success</wa-badge>
|
||||
<wa-badge variant="warning" appearance="filled-outlined">Warning</wa-badge>
|
||||
<wa-badge variant="danger" appearance="filled-outlined">Danger</wa-badge>
|
||||
<wa-badge variant="brand" appearance="filled outlined">Brand</wa-badge>
|
||||
<wa-badge variant="neutral" appearance="filled outlined">Neutral</wa-badge>
|
||||
<wa-badge variant="success" appearance="filled outlined">Success</wa-badge>
|
||||
<wa-badge variant="warning" appearance="filled outlined">Warning</wa-badge>
|
||||
<wa-badge variant="danger" appearance="filled outlined">Danger</wa-badge>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
@@ -174,11 +174,11 @@
|
||||
<th><code>filled</code> + <code>outlined</code></th>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button variant="brand" appearance="filled-outlined">Brand</wa-button>
|
||||
<wa-button variant="neutral" appearance="filled-outlined">Neutral</wa-button>
|
||||
<wa-button variant="success" appearance="filled-outlined">Success</wa-button>
|
||||
<wa-button variant="warning" appearance="filled-outlined">Warning</wa-button>
|
||||
<wa-button variant="danger" appearance="filled-outlined">Danger</wa-button>
|
||||
<wa-button variant="brand" appearance="filled outlined">Brand</wa-button>
|
||||
<wa-button variant="neutral" appearance="filled outlined">Neutral</wa-button>
|
||||
<wa-button variant="success" appearance="filled outlined">Success</wa-button>
|
||||
<wa-button variant="warning" appearance="filled outlined">Warning</wa-button>
|
||||
<wa-button variant="danger" appearance="filled outlined">Danger</wa-button>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
@@ -375,23 +375,23 @@
|
||||
<th><code>filled</code> + <code>outlined</code></th>
|
||||
<td>
|
||||
<div class="wa-grid wa-gap-2xs">
|
||||
<wa-callout variant="brand" appearance="filled-outlined">
|
||||
<wa-callout variant="brand" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Brand
|
||||
</wa-callout>
|
||||
<wa-callout variant="neutral" appearance="filled-outlined">
|
||||
<wa-callout variant="neutral" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-info"></wa-icon>
|
||||
Neutral
|
||||
</wa-callout>
|
||||
<wa-callout variant="success" appearance="filled-outlined">
|
||||
<wa-callout variant="success" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-check"></wa-icon>
|
||||
Success
|
||||
</wa-callout>
|
||||
<wa-callout variant="warning" appearance="filled-outlined">
|
||||
<wa-callout variant="warning" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-exclamation"></wa-icon>
|
||||
Warning
|
||||
</wa-callout>
|
||||
<wa-callout variant="danger" appearance="filled-outlined">
|
||||
<wa-callout variant="danger" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-xmark"></wa-icon>
|
||||
Danger
|
||||
</wa-callout>
|
||||
@@ -636,11 +636,11 @@
|
||||
<th><code>filled</code> + <code>outlined</code></th>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag variant="brand" appearance="filled-outlined">Brand</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="filled-outlined">Neutral</wa-tag>
|
||||
<wa-tag variant="success" appearance="filled-outlined">Success</wa-tag>
|
||||
<wa-tag variant="warning" appearance="filled-outlined">Warning</wa-tag>
|
||||
<wa-tag variant="danger" appearance="filled-outlined">Danger</wa-tag>
|
||||
<wa-tag variant="brand" appearance="filled outlined">Brand</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="filled outlined">Neutral</wa-tag>
|
||||
<wa-tag variant="success" appearance="filled outlined">Success</wa-tag>
|
||||
<wa-tag variant="warning" appearance="filled outlined">Warning</wa-tag>
|
||||
<wa-tag variant="danger" appearance="filled outlined">Danger</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
@@ -775,4 +775,4 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -13,7 +13,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge variant="brand" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge variant="brand" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge variant="brand" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge variant="brand" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge variant="brand" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -21,7 +21,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge class="wa-brand" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge class="wa-brand" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge class="wa-brand" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge class="wa-brand" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge class="wa-brand" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -32,7 +32,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge variant="neutral" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge variant="neutral" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge variant="neutral" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge variant="neutral" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge variant="neutral" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -40,7 +40,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge class="wa-neutral" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge class="wa-neutral" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge class="wa-neutral" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge class="wa-neutral" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge class="wa-neutral" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -51,7 +51,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge variant="success" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge variant="success" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge variant="success" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge variant="success" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge variant="success" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -59,7 +59,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge class="wa-success" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge class="wa-success" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge class="wa-success" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge class="wa-success" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge class="wa-success" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -70,7 +70,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge variant="warning" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge variant="warning" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge variant="warning" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge variant="warning" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge variant="warning" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -78,7 +78,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge class="wa-warning" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge class="wa-warning" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge class="wa-warning" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge class="wa-warning" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge class="wa-warning" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -89,7 +89,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge variant="danger" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge variant="danger" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge variant="danger" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge variant="danger" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge variant="danger" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -97,7 +97,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-badge class="wa-danger" appearance="accent">Accent</wa-badge>
|
||||
<wa-badge class="wa-danger" appearance="filled-outlined">Filled-Outlined</wa-badge>
|
||||
<wa-badge class="wa-danger" appearance="filled outlined">Filled + Outlined</wa-badge>
|
||||
<wa-badge class="wa-danger" appearance="filled">Filled</wa-badge>
|
||||
<wa-badge class="wa-danger" appearance="outlined">Outlined</wa-badge>
|
||||
</div>
|
||||
@@ -123,7 +123,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button variant="brand" appearance="accent">Accent</wa-button>
|
||||
<wa-button variant="brand" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button variant="brand" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button variant="brand" appearance="filled">Filled</wa-button>
|
||||
<wa-button variant="brand" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button variant="brand" appearance="plain">Plain</wa-button>
|
||||
@@ -132,7 +132,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button class="wa-brand" appearance="accent">Accent</wa-button>
|
||||
<wa-button class="wa-brand" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button class="wa-brand" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button class="wa-brand" appearance="filled">Filled</wa-button>
|
||||
<wa-button class="wa-brand" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button class="wa-brand" appearance="plain">Plain</wa-button>
|
||||
@@ -144,7 +144,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button variant="neutral" appearance="accent">Accent</wa-button>
|
||||
<wa-button variant="neutral" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button variant="neutral" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button variant="neutral" appearance="filled">Filled</wa-button>
|
||||
<wa-button variant="neutral" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button variant="neutral" appearance="plain">Plain</wa-button>
|
||||
@@ -153,7 +153,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button class="wa-neutral" appearance="accent">Accent</wa-button>
|
||||
<wa-button class="wa-neutral" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button class="wa-neutral" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button class="wa-neutral" appearance="filled">Filled</wa-button>
|
||||
<wa-button class="wa-neutral" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button class="wa-neutral" appearance="plain">Plain</wa-button>
|
||||
@@ -165,7 +165,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button variant="success" appearance="accent">Accent</wa-button>
|
||||
<wa-button variant="success" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button variant="success" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button variant="success" appearance="filled">Filled</wa-button>
|
||||
<wa-button variant="success" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button variant="success" appearance="plain">Plain</wa-button>
|
||||
@@ -174,7 +174,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button class="wa-success" appearance="accent">Accent</wa-button>
|
||||
<wa-button class="wa-success" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button class="wa-success" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button class="wa-success" appearance="filled">Filled</wa-button>
|
||||
<wa-button class="wa-success" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button class="wa-success" appearance="plain">Plain</wa-button>
|
||||
@@ -186,7 +186,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button variant="warning" appearance="accent">Accent</wa-button>
|
||||
<wa-button variant="warning" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button variant="warning" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button variant="warning" appearance="filled">Filled</wa-button>
|
||||
<wa-button variant="warning" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button variant="warning" appearance="plain">Plain</wa-button>
|
||||
@@ -195,7 +195,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button class="wa-warning" appearance="accent">Accent</wa-button>
|
||||
<wa-button class="wa-warning" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button class="wa-warning" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button class="wa-warning" appearance="filled">Filled</wa-button>
|
||||
<wa-button class="wa-warning" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button class="wa-warning" appearance="plain">Plain</wa-button>
|
||||
@@ -207,7 +207,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button variant="danger" appearance="accent">Accent</wa-button>
|
||||
<wa-button variant="danger" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button variant="danger" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button variant="danger" appearance="filled">Filled</wa-button>
|
||||
<wa-button variant="danger" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button variant="danger" appearance="plain">Plain</wa-button>
|
||||
@@ -216,7 +216,7 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button class="wa-danger" appearance="accent">Accent</wa-button>
|
||||
<wa-button class="wa-danger" appearance="filled-outlined">Filled-Outlined</wa-button>
|
||||
<wa-button class="wa-danger" appearance="filled outlined">Filled + Outlined</wa-button>
|
||||
<wa-button class="wa-danger" appearance="filled">Filled</wa-button>
|
||||
<wa-button class="wa-danger" appearance="outlined">Outlined</wa-button>
|
||||
<wa-button class="wa-danger" appearance="plain">Plain</wa-button>
|
||||
@@ -246,9 +246,9 @@
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout variant="brand" appearance="filled-outlined">
|
||||
<wa-callout variant="brand" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout variant="brand" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
@@ -270,9 +270,9 @@
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-brand" appearance="filled-outlined">
|
||||
<wa-callout class="wa-brand" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-brand" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
@@ -297,9 +297,9 @@
|
||||
<wa-icon slot="icon" name="circle-info"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout variant="neutral" appearance="filled-outlined">
|
||||
<wa-callout variant="neutral" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-info"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout variant="neutral" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-info"></wa-icon>
|
||||
@@ -321,9 +321,9 @@
|
||||
<wa-icon slot="icon" name="circle-info"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-neutral" appearance="filled-outlined">
|
||||
<wa-callout class="wa-neutral" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-info"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-neutral" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-info"></wa-icon>
|
||||
@@ -348,9 +348,9 @@
|
||||
<wa-icon slot="icon" name="circle-check"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout variant="success" appearance="filled-outlined">
|
||||
<wa-callout variant="success" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-check"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout variant="success" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-check"></wa-icon>
|
||||
@@ -372,9 +372,9 @@
|
||||
<wa-icon slot="icon" name="circle-check"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-success" appearance="filled-outlined">
|
||||
<wa-callout class="wa-success" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-check"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-success" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-check"></wa-icon>
|
||||
@@ -399,9 +399,9 @@
|
||||
<wa-icon slot="icon" name="circle-exclamation"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout variant="warning" appearance="filled-outlined">
|
||||
<wa-callout variant="warning" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-exclamation"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout variant="warning" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-exclamation"></wa-icon>
|
||||
@@ -423,9 +423,9 @@
|
||||
<wa-icon slot="icon" name="circle-exclamation"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-warning" appearance="filled-outlined">
|
||||
<wa-callout class="wa-warning" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-exclamation"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-warning" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-exclamation"></wa-icon>
|
||||
@@ -450,9 +450,9 @@
|
||||
<wa-icon slot="icon" name="circle-xmark"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout variant="danger" appearance="filled-outlined">
|
||||
<wa-callout variant="danger" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-xmark"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout variant="danger" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-xmark"></wa-icon>
|
||||
@@ -474,9 +474,9 @@
|
||||
<wa-icon slot="icon" name="circle-xmark"></wa-icon>
|
||||
Accent
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-danger" appearance="filled-outlined">
|
||||
<wa-callout class="wa-danger" appearance="filled outlined">
|
||||
<wa-icon slot="icon" name="circle-xmark"></wa-icon>
|
||||
Filled-Outlined
|
||||
Filled + Outlined
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-danger" appearance="filled">
|
||||
<wa-icon slot="icon" name="circle-xmark"></wa-icon>
|
||||
@@ -513,17 +513,19 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag variant="brand" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="brand" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="brand" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="brand" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="brand" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag variant="brand" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag class="wa-brand" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag class="wa-brand" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag class="wa-brand" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag class="wa-brand" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag class="wa-brand" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag class="wa-brand" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -532,17 +534,19 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag variant="neutral" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag class="wa-neutral" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag class="wa-neutral" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag class="wa-neutral" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag class="wa-neutral" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag class="wa-neutral" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag class="wa-neutral" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -551,17 +555,19 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag variant="success" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="success" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="success" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="success" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="success" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag variant="success" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag class="wa-success" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag class="wa-success" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag class="wa-success" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag class="wa-success" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag class="wa-success" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag class="wa-success" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -570,17 +576,19 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag variant="warning" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="warning" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="warning" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="warning" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="warning" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag variant="warning" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag class="wa-warning" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag class="wa-warning" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag class="wa-warning" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag class="wa-warning" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag class="wa-warning" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag class="wa-warning" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -589,17 +597,19 @@
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag variant="danger" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="danger" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="danger" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="danger" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="danger" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag variant="danger" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-tag class="wa-danger" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag class="wa-danger" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag class="wa-danger" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag class="wa-danger" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag class="wa-danger" appearance="outlined">Outlined</wa-tag>
|
||||
<wa-tag class="wa-danger" appearance="plain">Plain</wa-tag>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -39,14 +39,14 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><code>filled-outlined</code></th>
|
||||
<th><code>filled</code> + <code>outlined</code></th>
|
||||
<td>
|
||||
<div class="wa-cluster wa-gap-2xs">
|
||||
<wa-button variant="brand" appearance="filled-outlined">Brand</wa-button>
|
||||
<wa-button variant="neutral" appearance="filled-outlined">Neutral</wa-button>
|
||||
<wa-button variant="success" appearance="filled-outlined">Success</wa-button>
|
||||
<wa-button variant="warning" appearance="filled-outlined">Warning</wa-button>
|
||||
<wa-button variant="danger" appearance="filled-outlined">Danger</wa-button>
|
||||
<wa-button variant="brand" appearance="filled outlined">Brand</wa-button>
|
||||
<wa-button variant="neutral" appearance="filled outlined">Neutral</wa-button>
|
||||
<wa-button variant="success" appearance="filled outlined">Success</wa-button>
|
||||
<wa-button variant="warning" appearance="filled outlined">Warning</wa-button>
|
||||
<wa-button variant="danger" appearance="filled outlined">Danger</wa-button>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
@@ -429,7 +429,7 @@
|
||||
</wa-select>
|
||||
</td>
|
||||
<td>
|
||||
<label>Select
|
||||
<label>Select
|
||||
<select value="1">
|
||||
<option value="1">Option</option>
|
||||
</select>
|
||||
@@ -444,7 +444,7 @@
|
||||
</wa-select>
|
||||
</td>
|
||||
<td>
|
||||
<label>Select (filled)
|
||||
<label>Select (filled)
|
||||
<select class="wa-filled" value="1">
|
||||
<option value="1">Option</option>
|
||||
</select>
|
||||
@@ -459,7 +459,7 @@
|
||||
</wa-select>
|
||||
</td>
|
||||
<td>
|
||||
<label class="wa-size-s">Select (small)
|
||||
<label class="wa-size-s">Select (small)
|
||||
<select value="1">
|
||||
<option value="1">Option</option>
|
||||
</select>
|
||||
@@ -474,7 +474,7 @@
|
||||
</wa-select>
|
||||
</td>
|
||||
<td>
|
||||
<label class="wa-size-m">Select (medium)
|
||||
<label class="wa-size-m">Select (medium)
|
||||
<select value="1">
|
||||
<option value="1">Option</option>
|
||||
</select>
|
||||
@@ -489,7 +489,7 @@
|
||||
</wa-select>
|
||||
</td>
|
||||
<td>
|
||||
<label class="wa-size-l">Select (large)
|
||||
<label class="wa-size-l">Select (large)
|
||||
<select value="1">
|
||||
<option value="1">Option</option>
|
||||
</select>
|
||||
@@ -582,4 +582,4 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -4,7 +4,7 @@
|
||||
{% include 'head.njk' %}
|
||||
{% block head %}{% endblock %}
|
||||
</head>
|
||||
<body class="layout-{{ layout | stripExtension }} page-{{ pageClass or page.fileSlug or 'home' }}">
|
||||
<body class="layout-{{ layout | stripExtension }}">
|
||||
{% block content %}
|
||||
{{ content | safe }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -297,11 +297,11 @@
|
||||
<div class="component-help">
|
||||
<strong>Need a hand?</strong>
|
||||
<wa-button size="small" appearance="filled" variant="neutral" href="https://github.com/shoelace-style/webawesome/issues" target="_blank">
|
||||
<wa-icon slot="start" variant="regular" name="bug"></wa-icon>
|
||||
<wa-icon slot="prefix" name="bug"></wa-icon>
|
||||
Report a bug
|
||||
</wa-button>
|
||||
<wa-button size="small" appearance="filled" variant="neutral" href="https://github.com/shoelace-style/webawesome/discussions" target="_blank">
|
||||
<wa-icon slot="start" variant="regular" name="message-question"></wa-icon>
|
||||
<wa-icon slot="prefix" name="message-question"></wa-icon>
|
||||
Ask for help
|
||||
</wa-button>
|
||||
</div>
|
||||
|
||||
@@ -11,6 +11,7 @@ export function SimulateWebAwesomeApp(str) {
|
||||
},
|
||||
server: {
|
||||
head: '',
|
||||
loginOrAvatar: '',
|
||||
flashes: '',
|
||||
},
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 27 KiB |
@@ -3,30 +3,17 @@ import { doViewTransition } from '../scripts/view-transitions.js';
|
||||
//
|
||||
// Updates the color scheme when a color scheme selector changes
|
||||
//
|
||||
async function updateTheme(value) {
|
||||
function updateTheme(value) {
|
||||
localStorage.setItem('color-scheme', value);
|
||||
|
||||
const isDark = value === 'dark' || (value === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
||||
|
||||
// Disable tooltip during transition
|
||||
const tooltip = document.querySelector('#color-scheme-tooltip');
|
||||
if (tooltip) {
|
||||
tooltip.disabled = true;
|
||||
}
|
||||
|
||||
await doViewTransition(() => {
|
||||
doViewTransition(() => {
|
||||
document.documentElement.classList.toggle('wa-dark', isDark);
|
||||
});
|
||||
|
||||
// Sync all selectors and update tooltip
|
||||
// Sync all selectors
|
||||
document.querySelectorAll('.color-scheme-selector').forEach(el => (el.value = value));
|
||||
|
||||
// Update tooltip content and re-enable after transition completes
|
||||
if (tooltip) {
|
||||
const schemeText = value === 'light' ? 'Light' : value === 'dark' ? 'Dark' : 'System';
|
||||
tooltip.textContent = schemeText;
|
||||
tooltip.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Handle changes
|
||||
|
||||
178
packages/webawesome/docs/assets/scripts/permalink.js
Normal file
178
packages/webawesome/docs/assets/scripts/permalink.js
Normal file
@@ -0,0 +1,178 @@
|
||||
import { deepEach, deepGet, deepSet } from './util/deep.js';
|
||||
import { camelCase, kebabCase } from './util/string.js';
|
||||
|
||||
export default class Permalink extends URLSearchParams {
|
||||
/** Params changed since last URL I/O */
|
||||
changed = false;
|
||||
|
||||
constructor(params) {
|
||||
super(location.search);
|
||||
this.params = params;
|
||||
}
|
||||
|
||||
toJSON() {
|
||||
return Object.fromEntries(this.entries());
|
||||
}
|
||||
|
||||
/**
|
||||
* Set multiple values from an object. Nested values will be joined with a hyphen.
|
||||
* @param {object} values - The object containing the values to set.
|
||||
* @param {object} defaults - The object containing the default values.
|
||||
*
|
||||
*/
|
||||
setAll(values, defaults) {
|
||||
deepEach(values, (value, key, parent, path) => {
|
||||
let fullPath = [...path, key];
|
||||
let param = fullPath.map(kebabCase).join('-');
|
||||
|
||||
if (typeof value === 'object') {
|
||||
// We'll handle this when we descend into it
|
||||
return;
|
||||
}
|
||||
|
||||
let defaultValue = deepGet(defaults, fullPath);
|
||||
|
||||
if (equals(value, defaultValue)) {
|
||||
// Remove the param from the URL
|
||||
this.delete(param);
|
||||
return;
|
||||
}
|
||||
|
||||
this.set(param, value);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the URL params to a (potentially nested) object.
|
||||
* @param {object} options - Options object.
|
||||
* @param {(key: string, value: string) => string[]} options.getPath - Function to get the path of a param.
|
||||
* @returns {object} The nested object.
|
||||
*/
|
||||
toObject(options = {}) {
|
||||
// Default getPath() assumes hyphens always mean nesting
|
||||
let { ignoreKeys = [], getPath = param => param.split('-') } = options;
|
||||
|
||||
// Get all values as a nested object
|
||||
|
||||
let obj = {};
|
||||
|
||||
for (let [key, value] of this.entries()) {
|
||||
let path = getPath(key, value);
|
||||
|
||||
if (path === null || ignoreKeys.includes(key)) {
|
||||
// Skip this param
|
||||
continue;
|
||||
}
|
||||
|
||||
// Default to key if `getPath()` returns undefined
|
||||
path ??= key;
|
||||
|
||||
path = Array.isArray(path) ? path : [path];
|
||||
|
||||
// Camel case any remaining hyphens
|
||||
path = path.map(camelCase);
|
||||
|
||||
deepSet(obj, path, value);
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
delete(key, value) {
|
||||
let hadValue = this.has(key);
|
||||
super.delete(key, value);
|
||||
|
||||
if (hadValue) {
|
||||
this.changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
set(key, value, defaultValue) {
|
||||
if (equals(value, defaultValue) || equals(value, '')) {
|
||||
value = null;
|
||||
}
|
||||
|
||||
value ??= null; // undefined -> null
|
||||
|
||||
let oldValue = Array.isArray(value) ? this.getAll(key) : this.get(key);
|
||||
let changed = !equals(value, oldValue);
|
||||
|
||||
if (!changed) {
|
||||
// Nothing to do here
|
||||
return;
|
||||
}
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
super.delete(key);
|
||||
value = value.slice();
|
||||
|
||||
for (let v of value) {
|
||||
if (v || v === 0) {
|
||||
if (typeof v === 'object') {
|
||||
super.append(key, JSON.stringify(v));
|
||||
} else {
|
||||
super.append(key, v);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (value === null) {
|
||||
super.delete(key);
|
||||
} else {
|
||||
super.set(key, value);
|
||||
}
|
||||
|
||||
this.sort();
|
||||
this.changed ||= changed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update page URL if it has changed since last time
|
||||
*/
|
||||
updateLocation() {
|
||||
if (this.changed) {
|
||||
// If there’s already a search, replace it.
|
||||
// We don’t want to clog the user’s history while they iterate
|
||||
let search = this.toString();
|
||||
let historyAction = location.search && search ? 'replaceState' : 'pushState';
|
||||
history[historyAction](null, '', `?${search}`);
|
||||
this.changed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function equals(value, oldValue) {
|
||||
if (Array.isArray(value) || Array.isArray(oldValue)) {
|
||||
value = toArray(value);
|
||||
oldValue = toArray(oldValue);
|
||||
|
||||
if (value.length !== oldValue.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return value.every((v, i) => equals(v, oldValue[i]));
|
||||
}
|
||||
|
||||
// (value ?? oldValue ?? true) returns true if they're both empty (null or undefined)
|
||||
[value, oldValue] = [value, oldValue].map(v => (!v && v !== false && v !== 0 ? null : v));
|
||||
return value === oldValue || String(value) === String(oldValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a value to an array. `undefined` and `null` values are converted to an empty array.
|
||||
* @param {*} value - The value to convert.
|
||||
* @returns {any[]} The converted array.
|
||||
*/
|
||||
function toArray(value) {
|
||||
value ??= [];
|
||||
|
||||
if (Array.isArray(value)) {
|
||||
return value;
|
||||
}
|
||||
|
||||
// Don't convert "foo" into ["f", "o", "o"]
|
||||
if (typeof value !== 'string' && typeof value[Symbol.iterator] === 'function') {
|
||||
return Array.from(value);
|
||||
}
|
||||
|
||||
return [value];
|
||||
}
|
||||
@@ -34,8 +34,7 @@ document.addEventListener('click', event => {
|
||||
top: target.offsetTop - headerHeight,
|
||||
behavior: 'smooth',
|
||||
});
|
||||
|
||||
history.replaceState(history.state, '', `#${id}`);
|
||||
history.pushState(undefined, undefined, `#${id}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -6,20 +6,7 @@ import { doViewTransition } from '../scripts/view-transitions.js';
|
||||
async function updateTheme(value, isInitialLoad = false) {
|
||||
const body = document.body;
|
||||
|
||||
// Get brand, palette, and theme name from the selected option
|
||||
const themeSelector = document.querySelector('.theme-selector');
|
||||
const selectedOption = themeSelector?.querySelector(`wa-dropdown-item[value="${value}"]`);
|
||||
let brand = selectedOption?.getAttribute('data-brand') || 'blue';
|
||||
let palette = selectedOption?.getAttribute('data-palette') || 'default';
|
||||
let themeName = selectedOption?.textContent.trim() || 'Unknown';
|
||||
|
||||
if (!isInitialLoad) {
|
||||
// Disable tooltip during theme transition
|
||||
const tooltip = document.querySelector('#theme-tooltip');
|
||||
if (tooltip) {
|
||||
tooltip.disabled = true;
|
||||
}
|
||||
|
||||
// Add fade-out class
|
||||
body.classList.add('theme-transitioning');
|
||||
|
||||
@@ -35,29 +22,27 @@ async function updateTheme(value, isInitialLoad = false) {
|
||||
});
|
||||
}
|
||||
|
||||
// Handle site theme vs regular theme
|
||||
let href = `/dist/styles/themes/${value}.css`;
|
||||
localStorage.setItem('theme', value);
|
||||
|
||||
if (document.querySelector('wa-page')?.dataset.pageType === 'site') {
|
||||
brand = 'orange';
|
||||
href = `/assets/styles/theme-site.css`;
|
||||
palette = 'default';
|
||||
value = 'site';
|
||||
} else {
|
||||
localStorage.setItem('brand', brand);
|
||||
localStorage.setItem('palette', palette);
|
||||
localStorage.setItem('theme', value);
|
||||
}
|
||||
// Get brand and palette from the selected option
|
||||
const themeSelector = document.querySelector('.theme-selector');
|
||||
const selectedOption = themeSelector?.querySelector(`wa-option[value="${value}"]`);
|
||||
const brand = selectedOption?.getAttribute('data-brand') || 'blue';
|
||||
const palette = selectedOption?.getAttribute('data-palette') || 'default';
|
||||
const htmlElement = document.documentElement;
|
||||
|
||||
localStorage.setItem('brand', brand);
|
||||
localStorage.setItem('palette', palette);
|
||||
|
||||
// Update theme classes
|
||||
const htmlElement = document.documentElement;
|
||||
const classesToRemove = Array.from(htmlElement.classList).filter(
|
||||
className =>
|
||||
className.startsWith('wa-theme-') || className.startsWith('wa-brand-') || className.startsWith('wa-palette-'),
|
||||
);
|
||||
const themeStylesheet = document.getElementById('theme-stylesheet');
|
||||
const href = `/dist/styles/themes/${value}.css`;
|
||||
|
||||
await doViewTransition(() => {
|
||||
doViewTransition(() => {
|
||||
// Update the theme
|
||||
if (themeStylesheet) {
|
||||
themeStylesheet.href = href;
|
||||
@@ -71,26 +56,16 @@ async function updateTheme(value, isInitialLoad = false) {
|
||||
htmlElement.classList.add(`wa-palette-${palette}`);
|
||||
|
||||
// Sync all theme selectors
|
||||
document.querySelectorAll('.theme-selector').forEach(el => {
|
||||
el.value = value;
|
||||
el.setAttribute('value', value);
|
||||
});
|
||||
|
||||
// Update tooltip content to reflect the new theme
|
||||
const tooltip = document.querySelector('#theme-tooltip');
|
||||
if (tooltip) {
|
||||
tooltip.textContent = `${themeName} Theme`;
|
||||
}
|
||||
document.querySelectorAll('.theme-selector').forEach(el => (el.value = value));
|
||||
});
|
||||
|
||||
if (!isInitialLoad) {
|
||||
// Remove transition class and re-enable tooltip after view transition completes
|
||||
body.classList.remove('theme-transitioning');
|
||||
|
||||
const tooltip = document.querySelector('#theme-tooltip');
|
||||
if (tooltip) {
|
||||
tooltip.disabled = false;
|
||||
}
|
||||
// Waiting for the stylesheet and all it's imports to load is tricky. Preloading doesn't work for most themes
|
||||
// because applying the new stylesheet to the document, even without adding the `wa-theme-*` class, causes jank.
|
||||
// Suggestions welcome.
|
||||
setTimeout(() => {
|
||||
body.classList.remove('theme-transitioning');
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,11 +77,5 @@ document.addEventListener('input', event => {
|
||||
});
|
||||
|
||||
// Initialize
|
||||
function initializeTheme() {
|
||||
const savedTheme = localStorage.getItem('theme') || 'default';
|
||||
updateTheme(savedTheme, true);
|
||||
}
|
||||
|
||||
initializeTheme();
|
||||
|
||||
document.addEventListener('turbo:render', initializeTheme);
|
||||
const savedTheme = localStorage.getItem('theme') || 'default';
|
||||
updateTheme(savedTheme, true);
|
||||
|
||||
@@ -2,25 +2,22 @@
|
||||
pre[id*='code-block-'] {
|
||||
color-scheme: dark;
|
||||
color: white;
|
||||
background-color: var(--code-background, var(--wa-color-neutral-20));
|
||||
background-color: var(--wa-color-neutral-20);
|
||||
|
||||
/* Ensures a discernible background color in dark mode
|
||||
* Useful for themes that use gray-20 as --wa-color-surface-default */
|
||||
.wa-dark & {
|
||||
background-color: var(--code-background-dark, var(--wa-color-surface-lowered));
|
||||
background-color: var(--wa-color-surface-lowered);
|
||||
}
|
||||
}
|
||||
|
||||
.code-comment,
|
||||
.code-prolog,
|
||||
.code-doctype,
|
||||
.code-cdata {
|
||||
color: var(--code-comment, var(--wa-color-gray-70));
|
||||
}
|
||||
|
||||
.code-cdata,
|
||||
.code-operator,
|
||||
.code-punctuation {
|
||||
color: var(--code-operator, var(--wa-color-gray-70));
|
||||
color: var(--wa-color-gray-70);
|
||||
}
|
||||
|
||||
.code-namespace {
|
||||
@@ -31,27 +28,24 @@ pre[id*='code-block-'] {
|
||||
.code-keyword,
|
||||
.code-tag,
|
||||
.code-url {
|
||||
color: var(--code-keyword, var(--wa-color-indigo-70));
|
||||
color: var(--wa-color-indigo-70);
|
||||
}
|
||||
|
||||
.code-symbol,
|
||||
.code-deleted,
|
||||
.code-important {
|
||||
color: var(--code-error, var(--wa-color-red-70));
|
||||
}
|
||||
|
||||
.code-string,
|
||||
.code-char,
|
||||
.code-constant {
|
||||
color: var(--code-string, var(--wa-color-green-70));
|
||||
color: var(--wa-color-red-70);
|
||||
}
|
||||
|
||||
.code-boolean,
|
||||
.code-constant,
|
||||
.code-selector,
|
||||
.code-attr-name,
|
||||
.code-string,
|
||||
.code-char,
|
||||
.code-builtin,
|
||||
.code-inserted {
|
||||
color: var(--code-literal, var(--wa-color-green-70));
|
||||
color: var(--wa-color-green-70);
|
||||
}
|
||||
|
||||
.code-atrule,
|
||||
@@ -61,7 +55,7 @@ pre[id*='code-block-'] {
|
||||
.code-function,
|
||||
.code-class-name,
|
||||
.code-regex {
|
||||
color: var(--code-value, var(--wa-color-blue-70));
|
||||
color: var(--wa-color-blue-70);
|
||||
}
|
||||
|
||||
.code-important,
|
||||
|
||||
@@ -15,25 +15,24 @@ pre[id*='code-block-']:has(code) {
|
||||
}
|
||||
|
||||
wa-copy-button.copy-button {
|
||||
--background-color: var(--wa-color-gray-20);
|
||||
--background-color-hover: color-mix(in oklab, var(--background-color), white 5%);
|
||||
position: absolute;
|
||||
top: 0.5rem;
|
||||
right: 0.5rem;
|
||||
top: 0.25rem;
|
||||
right: 0.25rem;
|
||||
font-family: var(--wa-font-family-body);
|
||||
font-size: var(--wa-font-size-m);
|
||||
color: white;
|
||||
color: var(--wa-color-gray-80);
|
||||
border-radius: var(--wa-border-radius-m);
|
||||
padding: 0.25rem;
|
||||
|
||||
&::part(button) {
|
||||
aspect-ratio: 1;
|
||||
background-color: var(--wa-color-neutral-20);
|
||||
background: transparent;
|
||||
cursor: copy;
|
||||
}
|
||||
|
||||
@media (hover: hover) {
|
||||
&:hover {
|
||||
&::part(button) {
|
||||
background-color: var(--wa-color-neutral-30);
|
||||
}
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
@import 'search.css';
|
||||
@import 'cera-typeface.css';
|
||||
@import 'theme-icons.css';
|
||||
@import 'utils.css';
|
||||
|
||||
:root {
|
||||
--wa-brand-orange: #f36944;
|
||||
@@ -49,16 +48,6 @@ wa-page > header {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.brand-logo {
|
||||
color: var(--wa-color-text-normal);
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.brand-logo svg {
|
||||
width: auto;
|
||||
height: 1.75rem;
|
||||
}
|
||||
|
||||
wa-button[data-toggle-nav] {
|
||||
--text-color: currentColor;
|
||||
font-size: 1rem;
|
||||
@@ -70,6 +59,55 @@ wa-page > header {
|
||||
padding-inline: 0.875rem;
|
||||
}
|
||||
}
|
||||
|
||||
svg {
|
||||
width: auto;
|
||||
height: 1.75rem;
|
||||
}
|
||||
|
||||
#docs-branding,
|
||||
#docs-toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--wa-space-s);
|
||||
|
||||
.color-scheme-selector,
|
||||
.theme-selector {
|
||||
max-inline-size: 20ch;
|
||||
}
|
||||
|
||||
wa-divider:last-child {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#github-buttons {
|
||||
> wa-button {
|
||||
&::part(base) {
|
||||
color: var(--wa-color-on-quiet);
|
||||
background-color: var(--wa-color-fill-quiet);
|
||||
}
|
||||
> wa-icon {
|
||||
font-size: round(1.25em, 1px);
|
||||
}
|
||||
}
|
||||
|
||||
> wa-tooltip {
|
||||
--wa-tooltip-arrow-size: 0;
|
||||
font-size: var(--wa-font-size-xs);
|
||||
}
|
||||
}
|
||||
|
||||
#version-number {
|
||||
color: var(--wa-color-text-quiet);
|
||||
font-size: var(--wa-font-size-xs);
|
||||
line-height: 1;
|
||||
margin-block-start: var(--wa-space-2xs);
|
||||
}
|
||||
#version-number + wa-badge {
|
||||
font-size: var(--wa-font-size-2xs);
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
|
||||
#sidebar,
|
||||
@@ -150,6 +188,13 @@ wa-page > header {
|
||||
margin-block-end: var(--wa-space-m);
|
||||
}
|
||||
|
||||
/* Pro badges */
|
||||
wa-badge.pro {
|
||||
color: white;
|
||||
background-color: var(--wa-brand-orange);
|
||||
border-color: var(--wa-brand-orange);
|
||||
}
|
||||
|
||||
#sidebar {
|
||||
h2 {
|
||||
color: var(--wa-color-text-quiet);
|
||||
@@ -181,36 +226,10 @@ wa-page > header {
|
||||
}
|
||||
}
|
||||
|
||||
li wa-badge {
|
||||
/* adding 1 scale below --wa-font-size-2xs to handle badge proportions in sidebar nav */
|
||||
--font-size-3xs: round(calc(var(--wa-font-size-2xs) / 1.125), 1px); /* 10px */
|
||||
font-size: var(--font-size-3xs);
|
||||
}
|
||||
|
||||
wa-details {
|
||||
--show-duration: 0;
|
||||
--hide-duration: 0;
|
||||
}
|
||||
|
||||
.the-socials {
|
||||
/* nudge those linkies left */
|
||||
margin-inline-start: calc(var(--wa-space-xs) * -1);
|
||||
|
||||
a[target='_blank'] {
|
||||
color: var(--wa-color-text-quiet);
|
||||
padding-inline: var(--wa-space-xs);
|
||||
|
||||
&:hover {
|
||||
color: var(--wa-color-text-normal);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#version-icon-info {
|
||||
--secondary-opacity: 1;
|
||||
--secondary-color: var(--wa-brand-orange);
|
||||
padding-inline: var(--wa-space-xs);
|
||||
}
|
||||
}
|
||||
|
||||
wa-button.delete {
|
||||
@@ -230,11 +249,6 @@ wa-button.delete {
|
||||
}
|
||||
}
|
||||
|
||||
/* planned sidebar item */
|
||||
.is-planned {
|
||||
color: var(--wa-color-text-quiet);
|
||||
}
|
||||
|
||||
#sidebar-close-button {
|
||||
display: none;
|
||||
}
|
||||
@@ -252,23 +266,8 @@ wa-button.delete {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
wa-page::part(drawer__dialog),
|
||||
wa-page::part(menu) {
|
||||
overflow: clip;
|
||||
}
|
||||
|
||||
/* smaller viewports-based navigation */
|
||||
wa-page > [slot='navigation-header'] {
|
||||
padding: 0;
|
||||
|
||||
.brand-logo svg {
|
||||
height: 1.25rem;
|
||||
}
|
||||
|
||||
/* resetting font-weight of dropdown items in .title */
|
||||
wa-dropdown {
|
||||
font-weight: var(--wa-font-weight-normal);
|
||||
}
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
|
||||
wa-page[view='mobile'] :is([slot='navigation-header'], [slot='navigation']) {
|
||||
@@ -281,7 +280,7 @@ wa-page[view='mobile'] :is([slot='navigation-header'], [slot='navigation']) {
|
||||
|
||||
/* Main content */
|
||||
wa-page > main {
|
||||
max-width: var(--content-width-s);
|
||||
max-width: 80ch;
|
||||
padding: var(--wa-space-xl);
|
||||
margin-inline: auto;
|
||||
}
|
||||
@@ -387,30 +386,27 @@ h1.title {
|
||||
}
|
||||
}
|
||||
|
||||
/* Images & Figures */
|
||||
|
||||
figure.signpost {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
gap: var(--wa-space-s);
|
||||
|
||||
img {
|
||||
border: var(--wa-border-style) var(--wa-border-width-m) var(--wa-color-surface-border);
|
||||
/* Search trigger */
|
||||
wa-button#search-trigger {
|
||||
&::part(base) {
|
||||
background-color: var(--wa-form-control-background-color);
|
||||
border: var(--wa-form-control-border-width) var(--wa-form-control-border-style) var(--wa-form-control-border-color);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
figcaption {
|
||||
color: var(--wa-color-text-quiet);
|
||||
font-size: var(--wa-font-size-xs);
|
||||
line-height: var(--wa-line-height-condensed);
|
||||
text-align: center;
|
||||
&::part(label) {
|
||||
text-align: start;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
#search-trigger kbd {
|
||||
font-size: var(--wa-font-size-2xs);
|
||||
line-height: var(--wa-form-control-value-line-height);
|
||||
padding-inline: 0.33em;
|
||||
}
|
||||
|
||||
/* Search list pages */
|
||||
wa-page > main:has(> .search-list) {
|
||||
max-width: var(--content-width-l);
|
||||
max-width: 120ch;
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
@@ -625,7 +621,7 @@ wa-scroller:has(.component-table) {
|
||||
|
||||
.table-arguments,
|
||||
.table-description {
|
||||
min-width: var(--line-length-xs);
|
||||
min-width: 40ch;
|
||||
}
|
||||
|
||||
.table-reflect {
|
||||
@@ -674,10 +670,10 @@ wa-scroller:has(.component-table) {
|
||||
|
||||
.page-wide {
|
||||
wa-page > main {
|
||||
max-width: var(--content-width-l);
|
||||
max-width: 140ch;
|
||||
|
||||
.max-line-length {
|
||||
max-width: var(--line-length-l);
|
||||
max-width: 80ch;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,253 +0,0 @@
|
||||
/* Monorepo Styles
|
||||
* These styles include elements that are shared across this repo as well as others included in the Web Awesome monorepo
|
||||
*/
|
||||
|
||||
@layer wa-utils {
|
||||
:root {
|
||||
/* max-width for fixed width app-based pages
|
||||
* We round() these to avoid obscure component rendering bugs caused by widths with fractional pixels */
|
||||
--content-width-l: round(up, 132ch, 1px);
|
||||
--content-width-m: round(up, 110ch, 1px);
|
||||
--content-width-s: round(up, 80ch, 1px);
|
||||
--content-width-xs: round(up, 50ch, 1px);
|
||||
--content-padding-inline: 4ch;
|
||||
--content-flow-spacing: 8ch;
|
||||
|
||||
--line-length-xs: 30ch;
|
||||
--line-length-s: 45ch;
|
||||
--line-length-m: 66ch;
|
||||
--line-length-l: 77ch;
|
||||
--line-length-xl: 90ch;
|
||||
--line-length-none: none;
|
||||
}
|
||||
|
||||
/* #region brand utilities */
|
||||
.logo-webawesome {
|
||||
color: var(--wa-brand-orange);
|
||||
}
|
||||
/* #endregion */
|
||||
|
||||
/* #region layout utilities */
|
||||
.content-container {
|
||||
margin-inline: auto;
|
||||
max-width: var(--max-width, var(--content-width-l));
|
||||
padding-inline: var(--content-padding-inline);
|
||||
}
|
||||
/* #endregion */
|
||||
|
||||
/* #region Text utilities */
|
||||
.text-truncate {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* line-length */
|
||||
.line-length {
|
||||
max-width: var(--line-length, none);
|
||||
}
|
||||
|
||||
.line-length-xs {
|
||||
--line-length: var(--line-length-xs);
|
||||
}
|
||||
.line-length-s {
|
||||
--line-length: var(--line-length-s);
|
||||
}
|
||||
.line-length-m {
|
||||
--line-length: var(--line-length-m);
|
||||
}
|
||||
.line-length-l {
|
||||
--line-length: var(--line-length-l);
|
||||
}
|
||||
.line-length-xl {
|
||||
--line-length: var(--line-length-xl);
|
||||
}
|
||||
.line-length-none {
|
||||
--line-length: none;
|
||||
}
|
||||
/* #endregion */
|
||||
|
||||
/* #region shared UI */
|
||||
/* pro badge */
|
||||
wa-badge.pro {
|
||||
color: white;
|
||||
background-color: var(--wa-brand-orange);
|
||||
border-color: var(--wa-brand-orange);
|
||||
|
||||
+ wa-tooltip {
|
||||
font-size: var(--wa-font-size-xs);
|
||||
--max-width: unset;
|
||||
}
|
||||
}
|
||||
|
||||
/* planned badge */
|
||||
wa-badge.planned {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
color: var(--wa-color-neutral-on-quiet);
|
||||
|
||||
+ wa-tooltip {
|
||||
font-size: var(--wa-font-size-xs);
|
||||
--max-width: unset;
|
||||
}
|
||||
}
|
||||
|
||||
/* search trigger */
|
||||
wa-button#search-trigger {
|
||||
&::part(base) {
|
||||
background-color: var(--wa-form-control-background-color);
|
||||
border: var(--wa-form-control-border-width) var(--wa-form-control-border-style)
|
||||
var(--wa-form-control-border-color);
|
||||
box-shadow: none;
|
||||
}
|
||||
&::part(label) {
|
||||
text-align: start;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
#search-trigger kbd {
|
||||
font-size: var(--wa-font-size-2xs);
|
||||
line-height: var(--wa-form-control-value-line-height);
|
||||
padding-inline: 0.33em;
|
||||
}
|
||||
|
||||
/* step icons for ordered instructions */
|
||||
.step-icon {
|
||||
--primary-color: var(--wa-color-neutral-20);
|
||||
--secondary-color: var(--wa-color-neutral-80);
|
||||
--secondary-opacity: 1;
|
||||
font-size: 2em;
|
||||
|
||||
.wa-dark & {
|
||||
--primary-color: var(--wa-color-neutral-90);
|
||||
--secondary-color: var(--wa-color-neutral-30);
|
||||
}
|
||||
}
|
||||
|
||||
/* #endregion */
|
||||
|
||||
/* #region funsies + cosmetics */
|
||||
|
||||
/* grid background */
|
||||
.background-grid {
|
||||
--grid-spacing: var(--wa-space-2xl);
|
||||
--grid-line-color: color-mix(in oklab, var(--wa-color-text-normal), transparent 90%);
|
||||
--grid-line-width: var(--wa-border-width-s);
|
||||
--subgrid-spacing: calc(var(--grid-spacing) / 2);
|
||||
--subgrid-line-color: color-mix(in oklab, var(--wa-color-text-normal), transparent 95%);
|
||||
--subgrid-line-width: var(--wa-border-width-s);
|
||||
|
||||
background-image:
|
||||
/* main grid - vertical lines */
|
||||
linear-gradient(to right, var(--grid-line-color) var(--grid-line-width), transparent var(--grid-line-width)),
|
||||
/* main grid - horizontal lines */
|
||||
linear-gradient(to bottom, var(--grid-line-color) var(--grid-line-width), transparent var(--grid-line-width)),
|
||||
/* sub-grid - vertical lines (offset by half the main grid spacing) */
|
||||
linear-gradient(
|
||||
to right,
|
||||
var(--subgrid-line-color) var(--subgrid-line-width),
|
||||
transparent var(--subgrid-line-width)
|
||||
),
|
||||
/* sub-grid - horizontal lines (offset by half the main grid spacing) */
|
||||
linear-gradient(
|
||||
to bottom,
|
||||
var(--subgrid-line-color) var(--subgrid-line-width),
|
||||
transparent var(--subgrid-line-width)
|
||||
);
|
||||
|
||||
background-size:
|
||||
var(--grid-spacing) var(--grid-spacing),
|
||||
var(--grid-spacing) var(--grid-spacing),
|
||||
var(--subgrid-spacing) var(--subgrid-spacing),
|
||||
var(--subgrid-spacing) var(--subgrid-spacing);
|
||||
|
||||
background-position:
|
||||
0 0,
|
||||
0 0,
|
||||
calc(var(--grid-spacing) / 2) calc(var(--grid-spacing) / 2),
|
||||
calc(var(--grid-spacing) / 2) calc(var(--grid-spacing) / 2);
|
||||
}
|
||||
|
||||
/* dot grid background */
|
||||
.background-dot-grid {
|
||||
--dot-spacing: 1.5rem;
|
||||
--dot-radius: 1.5px;
|
||||
--dot-color: color-mix(in oklab, var(--wa-color-text-normal), transparent 85%);
|
||||
|
||||
background-image: radial-gradient(circle, var(--dot-color) var(--dot-radius), transparent var(--dot-radius));
|
||||
background-size: var(--dot-spacing) var(--dot-spacing);
|
||||
}
|
||||
|
||||
/* wa illustration background pattern */
|
||||
.background-wa-pattern {
|
||||
position: relative;
|
||||
|
||||
& > * {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
&::after {
|
||||
--background-pattern-image: url('/assets/images/bg-wa-pattern.svg');
|
||||
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background-color: var(--background-pattern-color, transparent);
|
||||
background-image: var(--background-pattern-image);
|
||||
background-repeat: repeat;
|
||||
content: '';
|
||||
opacity: var(--background-pattern-opacity, 0.3);
|
||||
z-index: 0;
|
||||
}
|
||||
}
|
||||
/* #endregion */
|
||||
|
||||
/* buttons with icon toggle on hover */
|
||||
wa-button .icon-hover {
|
||||
display: none;
|
||||
}
|
||||
wa-button:hover .icon-default {
|
||||
display: none;
|
||||
}
|
||||
wa-button:hover .icon-hover {
|
||||
display: inline-flex;
|
||||
}
|
||||
/* #endregion */
|
||||
|
||||
/* #region resets */
|
||||
code.appearance-plain {
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
a.appearance-plain {
|
||||
--wa-color-text-link: var(--wa-color-text-normal);
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
&.appearance-plain {
|
||||
list-style: none;
|
||||
padding-inline-start: 0;
|
||||
|
||||
li {
|
||||
padding-inline-start: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* increasing visual size of icons in certain contexts (such as in plain buttons) */
|
||||
wa-icon.icon-embiggen {
|
||||
font-size: round(1.125em, 1px);
|
||||
}
|
||||
|
||||
/* decreasing visual size of icons in certain contexts (such as in sidebar nav) */
|
||||
wa-icon.icon-shrink {
|
||||
font-size: round(0.875em, 1px);
|
||||
}
|
||||
/* #endregion */
|
||||
}
|
||||
@@ -70,7 +70,7 @@ layout: page
|
||||
{% for palette in themer.palettes %}
|
||||
<div class="palette-instructions" data-palette="{{ palette.name | lower }}" {% if not loop.first %}hidden{% endif %}>
|
||||
<p>
|
||||
To import this palette, set <code><html class="wa-palette-{{ palette.name | lower }}"></code> and import the following stylesheet:
|
||||
To import this palette, set <code><html class="wa-theme-{{ palette.name | lower }}"></code> and import the following stylesheet:
|
||||
</p>
|
||||
<pre><code class="language-html"><link rel="stylesheet" href="{% cdnUrl %}styles/color/palettes/{{ palette.filename }}" /></code></pre>
|
||||
</div>
|
||||
@@ -81,7 +81,7 @@ layout: page
|
||||
const paletteContainer = document.getElementById('color-palettes');
|
||||
const palettePicker = document.getElementById('palette-picker');
|
||||
|
||||
// Set first radio as checked and add initial palette class
|
||||
// Set first radio as checked and add initial theme class
|
||||
const firstRadio = palettePicker.querySelector('wa-radio');
|
||||
if (firstRadio) {
|
||||
firstRadio.checked = true;
|
||||
@@ -121,6 +121,7 @@ layout: page
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
gap: var(--wa-space-s);
|
||||
}
|
||||
|
||||
&::part(form-control-label) {
|
||||
|
||||
@@ -30,31 +30,31 @@ Use the `appearance` attribute to change the badge's visual appearance.
|
||||
```html {.example}
|
||||
<div style="margin-block-end: 1rem;">
|
||||
<wa-badge appearance="accent" variant="neutral">Accent</wa-badge>
|
||||
<wa-badge appearance="filled-outlined" variant="neutral">Filled-Outlined</wa-badge>
|
||||
<wa-badge appearance="filled outlined" variant="neutral">Filled + Outlined</wa-badge>
|
||||
<wa-badge appearance="filled" variant="neutral">Filled</wa-badge>
|
||||
<wa-badge appearance="outlined" variant="neutral">Outlined</wa-badge>
|
||||
</div>
|
||||
<div style="margin-block-end: 1rem;">
|
||||
<wa-badge appearance="accent" variant="brand">Accent</wa-badge>
|
||||
<wa-badge appearance="filled-outlined" variant="brand">Filled-Outlined</wa-badge>
|
||||
<wa-badge appearance="filled outlined" variant="brand">Filled + Outlined</wa-badge>
|
||||
<wa-badge appearance="filled" variant="brand">Filled</wa-badge>
|
||||
<wa-badge appearance="outlined" variant="brand">Outlined</wa-badge>
|
||||
</div>
|
||||
<div style="margin-block-end: 1rem;">
|
||||
<wa-badge appearance="accent" variant="success">Accent</wa-badge>
|
||||
<wa-badge appearance="filled-outlined" variant="success">Filled-Outlined</wa-badge>
|
||||
<wa-badge appearance="filled outlined" variant="success">Filled + Outlined</wa-badge>
|
||||
<wa-badge appearance="filled" variant="success">Filled</wa-badge>
|
||||
<wa-badge appearance="outlined" variant="success">Outlined</wa-badge>
|
||||
</div>
|
||||
<div style="margin-block-end: 1rem;">
|
||||
<wa-badge appearance="accent" variant="warning">Accent</wa-badge>
|
||||
<wa-badge appearance="filled-outlined" variant="warning">Filled-Outlined</wa-badge>
|
||||
<wa-badge appearance="filled outlined" variant="warning">Filled + Outlined</wa-badge>
|
||||
<wa-badge appearance="filled" variant="warning">Filled</wa-badge>
|
||||
<wa-badge appearance="outlined" variant="warning">Outlined</wa-badge>
|
||||
</div>
|
||||
<div>
|
||||
<wa-badge appearance="accent" variant="danger">Accent</wa-badge>
|
||||
<wa-badge appearance="filled-outlined" variant="danger">Filled-Outlined</wa-badge>
|
||||
<wa-badge appearance="filled outlined" variant="danger">Filled + Outlined</wa-badge>
|
||||
<wa-badge appearance="filled" variant="danger">Filled</wa-badge>
|
||||
<wa-badge appearance="outlined" variant="danger">Outlined</wa-badge>
|
||||
</div>
|
||||
|
||||
@@ -31,35 +31,35 @@ Use the `appearance` attribute to change the button's visual appearance.
|
||||
<div class="wa-stack">
|
||||
<div class="wa-gap-2xs">
|
||||
<wa-button appearance="accent" variant="neutral">Accent</wa-button>
|
||||
<wa-button appearance="filled-outlined" variant="neutral">Filled-Outlined</wa-button>
|
||||
<wa-button appearance="filled outlined" variant="neutral">Filled + Outlined</wa-button>
|
||||
<wa-button appearance="filled" variant="neutral">Filled</wa-button>
|
||||
<wa-button appearance="outlined" variant="neutral">Outlined</wa-button>
|
||||
<wa-button appearance="plain" variant="neutral">Plain</wa-button>
|
||||
</div>
|
||||
<div class="wa-gap-2xs">
|
||||
<wa-button appearance="accent" variant="brand">Accent</wa-button>
|
||||
<wa-button appearance="filled-outlined" variant="brand">Filled-Outlined</wa-button>
|
||||
<wa-button appearance="filled outlined" variant="brand">Filled + Outlined</wa-button>
|
||||
<wa-button appearance="filled" variant="brand">Filled</wa-button>
|
||||
<wa-button appearance="outlined" variant="brand">Outlined</wa-button>
|
||||
<wa-button appearance="plain" variant="brand">Plain</wa-button>
|
||||
</div>
|
||||
<div class="wa-gap-2xs">
|
||||
<wa-button appearance="accent" variant="success">Accent</wa-button>
|
||||
<wa-button appearance="filled-outlined" variant="success">Filled-Outlined</wa-button>
|
||||
<wa-button appearance="filled outlined" variant="success">Filled + Outlined</wa-button>
|
||||
<wa-button appearance="filled" variant="success">Filled</wa-button>
|
||||
<wa-button appearance="outlined" variant="success">Outlined</wa-button>
|
||||
<wa-button appearance="plain" variant="success">Plain</wa-button>
|
||||
</div>
|
||||
<div class="wa-gap-2xs">
|
||||
<wa-button appearance="accent" variant="warning">Accent</wa-button>
|
||||
<wa-button appearance="filled-outlined" variant="warning">Filled-Outlined</wa-button>
|
||||
<wa-button appearance="filled outlined" variant="warning">Filled + Outlined</wa-button>
|
||||
<wa-button appearance="filled" variant="warning">Filled</wa-button>
|
||||
<wa-button appearance="outlined" variant="warning">Outlined</wa-button>
|
||||
<wa-button appearance="plain" variant="warning">Plain</wa-button>
|
||||
</div>
|
||||
<div class="wa-gap-2xs">
|
||||
<wa-button appearance="accent" variant="danger">Accent</wa-button>
|
||||
<wa-button appearance="filled-outlined" variant="danger">Filled-Outlined</wa-button>
|
||||
<wa-button appearance="filled outlined" variant="danger">Filled + Outlined</wa-button>
|
||||
<wa-button appearance="filled" variant="danger">Filled</wa-button>
|
||||
<wa-button appearance="outlined" variant="danger">Outlined</wa-button>
|
||||
<wa-button appearance="plain" variant="danger">Plain</wa-button>
|
||||
@@ -183,9 +183,6 @@ Use the `start` and `end` slots to add presentational elements like `<wa-icon>`
|
||||
Use the `with-caret` attribute to add a dropdown indicator when a button will trigger a dropdown, menu, or popover.
|
||||
|
||||
```html {.example}
|
||||
<wa-button size="small" with-caret>
|
||||
<wa-icon name="gear" label="Settings"></wa-icon>
|
||||
</wa-button>
|
||||
<wa-button size="small" with-caret>Small</wa-button>
|
||||
<wa-button size="medium" with-caret>Medium</wa-button>
|
||||
<wa-button size="large" with-caret>Large</wa-button>
|
||||
@@ -254,4 +251,4 @@ This example demonstrates how to style buttons using a custom class. This is the
|
||||
outline-offset: 4px;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
```
|
||||
@@ -60,7 +60,7 @@ Set the `variant` attribute to change the callout's variant.
|
||||
|
||||
### Appearance
|
||||
|
||||
Use the `appearance` attribute to change the callout's visual appearance (the default is `filled-outlined`).
|
||||
Use the `appearance` attribute to change the callout's visual appearance (the default is `outlined filled`).
|
||||
|
||||
```html {.example}
|
||||
<wa-callout variant="brand" appearance="accent">
|
||||
@@ -70,7 +70,7 @@ Use the `appearance` attribute to change the callout's visual appearance (the de
|
||||
|
||||
<br />
|
||||
|
||||
<wa-callout variant="brand" appearance="filled-outlined">
|
||||
<wa-callout variant="brand" appearance="outlined filled">
|
||||
<wa-icon slot="icon" name="fill-drip" variant="regular"></wa-icon>
|
||||
This callout is both <strong>filled</strong> and <strong>outlined</strong>
|
||||
</wa-callout>
|
||||
|
||||
@@ -15,7 +15,7 @@ category: Organization
|
||||
|
||||
<strong>Mittens</strong><br />
|
||||
This kitten is as cute as he is playful. Bring him home today!<br />
|
||||
<small class="wa-caption-s">6 weeks old</small>
|
||||
<small class="wa-caption-m">6 weeks old</small>
|
||||
|
||||
<wa-button slot="footer" variant="brand" pill>More Info</wa-button>
|
||||
<wa-rating slot="footer-actions" label="Rating"></wa-rating>
|
||||
@@ -137,7 +137,7 @@ Use the `appearance` attribute to change the card's visual appearance.
|
||||
/>
|
||||
Outlined (default)
|
||||
</wa-card>
|
||||
{% for appearance in ['filled-outlined', 'plain', 'filled', 'accent'] -%}
|
||||
{% for appearance in ['outlined filled', 'plain', 'filled', 'accent'] -%}
|
||||
<wa-card appearance="{{ appearance }}">
|
||||
<img
|
||||
slot="media"
|
||||
|
||||
@@ -344,7 +344,7 @@ The content of the carousel can be changed by adding or removing carousel items.
|
||||
|
||||
### Vertical Scrolling
|
||||
|
||||
Setting the `orientation` attribute to `vertical` will render the carousel in a vertical layout. If the content of your slides vary in height, you will need to set an explicit `height` or `max-height` on the carousel using CSS.
|
||||
Setting the `orientation` attribute to `vertical` will render the carousel in a vertical layout. If the content of your slides vary in height, you will need to set amn explicit `height` or `max-height` on the carousel using CSS.
|
||||
|
||||
```html {.example}
|
||||
<wa-carousel class="vertical" pagination orientation="vertical">
|
||||
|
||||
@@ -108,7 +108,7 @@ Use the `appearance` attribute to change the element’s visual appearance.
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
|
||||
aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
||||
</wa-details>
|
||||
<wa-details summary="Filled-outlined" appearance="filled-outlined">
|
||||
<wa-details summary="Filled + Outlined" appearance="filled outlined">
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
|
||||
aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
||||
</wa-details>
|
||||
|
||||
@@ -96,7 +96,7 @@ Use the `icon` slot to add icons to [dropdown items](/docs/components/dropdown-i
|
||||
Paste
|
||||
</wa-dropdown-item>
|
||||
|
||||
<wa-dropdown-item value="delete" variant="danger">
|
||||
<wa-dropdown-item value="delete">
|
||||
<wa-icon slot="icon" name="trash"></wa-icon>
|
||||
Delete
|
||||
</wa-dropdown-item>
|
||||
|
||||
@@ -100,7 +100,7 @@ Icons are sized relative to the current font size. To change their size, set the
|
||||
|
||||
### Auto Width
|
||||
|
||||
By default, icons have a `1em` height and a fixed `1.25em` width. Use the `auto-width` attribute to allow the icon to use its natural variable width.
|
||||
By default, icons have a 1em height and a fixed 1em width. Use the `auto-width` attribute to allow the icon to use its natural variable width.
|
||||
|
||||
```html {.example}
|
||||
Without auto-width<br />
|
||||
|
||||
@@ -60,9 +60,7 @@ Add the `password-toggle` attribute to add a toggle button that will show the pa
|
||||
Use the `appearance` attribute to change the input's visual appearance.
|
||||
|
||||
```html {.example}
|
||||
<wa-input placeholder="Type something" appearance="filled"></wa-input><br />
|
||||
<wa-input placeholder="Type something" appearance="filled-outlined"></wa-input><br />
|
||||
<wa-input placeholder="Type something" appearance="outlined"></wa-input>
|
||||
<wa-input placeholder="Type something" appearance="filled"></wa-input>
|
||||
```
|
||||
|
||||
### Disabled
|
||||
|
||||
@@ -8,7 +8,7 @@ category: Utilities
|
||||
Localization is handled by the browser's [`Intl.RelativeTimeFormat` API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat). No language packs are required.
|
||||
|
||||
```html {.example}
|
||||
<!-- Shoelace 2 release date 🎉 -->
|
||||
<!-- Web Awesome 2 release date 🎉 -->
|
||||
<wa-relative-time date="2020-07-15T09:17:00-04:00"></wa-relative-time>
|
||||
```
|
||||
|
||||
|
||||
@@ -80,18 +80,6 @@ Use the `appearance` attribute to change the select's visual appearance.
|
||||
<wa-option value="option-2">Option 2</wa-option>
|
||||
<wa-option value="option-3">Option 3</wa-option>
|
||||
</wa-select>
|
||||
<br />
|
||||
<wa-select appearance="filled-outlined">
|
||||
<wa-option value="option-1">Option 1</wa-option>
|
||||
<wa-option value="option-2">Option 2</wa-option>
|
||||
<wa-option value="option-3">Option 3</wa-option>
|
||||
</wa-select>
|
||||
<br />
|
||||
<wa-select appearance="outlined">
|
||||
<wa-option value="option-1">Option 1</wa-option>
|
||||
<wa-option value="option-2">Option 2</wa-option>
|
||||
<wa-option value="option-3">Option 3</wa-option>
|
||||
</wa-select>
|
||||
```
|
||||
|
||||
### Pill
|
||||
|
||||
@@ -18,40 +18,41 @@ category: Feedback & Status
|
||||
### Appearance
|
||||
|
||||
Use the `size` attribute to change a tag's visual appearance.
|
||||
The default appearance is `filled-outlined`.
|
||||
The default appearance is `outlined filled`.
|
||||
|
||||
```html {.example}
|
||||
<div class="wa-stack">
|
||||
<p>
|
||||
<wa-tag variant="brand" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="brand" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="brand" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="brand" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="brand" appearance="outlined">Outlined</wa-tag>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
<wa-tag variant="success" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="success" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="success" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="success" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="success" appearance="outlined">Outlined</wa-tag>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<wa-tag variant="neutral" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="neutral" appearance="outlined">Outlined</wa-tag>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<wa-tag variant="warning" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="warning" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="warning" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="warning" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="warning" appearance="outlined">Outlined</wa-tag>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<wa-tag variant="danger" appearance="accent">Accent</wa-tag>
|
||||
<wa-tag variant="danger" appearance="filled-outlined">Filled-Outlined</wa-tag>
|
||||
<wa-tag variant="danger" appearance="filled outlined">Filled + Outlined</wa-tag>
|
||||
<wa-tag variant="danger" appearance="filled">Filled</wa-tag>
|
||||
<wa-tag variant="danger" appearance="outlined">Outlined</wa-tag>
|
||||
</p>
|
||||
|
||||
@@ -6,7 +6,7 @@ category: Form Controls
|
||||
---
|
||||
|
||||
```html {.example}
|
||||
<wa-textarea label="Type somethin', will ya"></wa-textarea>
|
||||
<wa-textarea label="Type something', will ya"></wa-textarea>
|
||||
```
|
||||
|
||||
:::info
|
||||
@@ -52,9 +52,7 @@ Use the `placeholder` attribute to add a placeholder.
|
||||
Use the `appearance` attribute to change the textarea's visual appearance.
|
||||
|
||||
```html {.example}
|
||||
<wa-textarea placeholder="Type something" appearance="filled"></wa-textarea><br />
|
||||
<wa-textarea placeholder="Type something" appearance="filled-outlined"></wa-textarea><br />
|
||||
<wa-textarea placeholder="Type something" appearance="outlined"></wa-textarea>
|
||||
<wa-textarea placeholder="Type something" appearance="filled"></wa-textarea>
|
||||
```
|
||||
|
||||
### Disabled
|
||||
|
||||
@@ -10,7 +10,7 @@ You can customize the look and feel of Web Awesome at a high level with themes.
|
||||
|
||||
Web Awesome uses [themes](/docs/themes) to apply a cohesive look and feel across the entire library. Themes are built with a collection of predefined CSS custom properties, which we call [design tokens](/docs/tokens), and there are many premade themes you can choose from.
|
||||
|
||||
To use a theme, simply add a link to the theme's stylesheet to the `<head>` of your page. For example, you can add this snippet alongside th [installation code](/docs/#quick-start-autoloading-via-cdn) to use the _Awesome_ theme:
|
||||
To use a theme, simply add a link to the theme's stylesheet to the `<head>` of your page. For example, you can add this snippet alongside th [installation code](/docs/#quick-start-autoloading-via-cdn) to use the *Awesome* theme:
|
||||
|
||||
```html
|
||||
<link rel="stylesheet" href="{% cdnUrl 'styles/themes/awesome.css' %}" />
|
||||
@@ -87,7 +87,7 @@ Custom states can be combined with CSS parts and custom properties to create sop
|
||||
|
||||
CSS parts offer further flexibility to customize individual components. The "parts" exposed by each component can be targeted with the [CSS part selector](https://developer.mozilla.org/en-US/docs/Web/CSS/::part), or `::part()`.
|
||||
|
||||
Parts allow you to style _any_ standard CSS property, not just those exposed through custom properties. Here's an example that modifies buttons with the `gradient-button` class.
|
||||
Parts allow you to style *any* standard CSS property, not just those exposed through custom properties. Here's an example that modifies buttons with the `gradient-button` class.
|
||||
|
||||
```html {.example}
|
||||
<wa-button class="gradient-button"> Gradient Button </wa-button>
|
||||
@@ -96,9 +96,7 @@ Parts allow you to style _any_ standard CSS property, not just those exposed thr
|
||||
.gradient-button::part(base) {
|
||||
background: linear-gradient(217deg, var(--wa-color-indigo-50), var(--wa-color-purple-50), var(--wa-color-red-50));
|
||||
border: solid 1px var(--wa-color-purple-50);
|
||||
transition:
|
||||
transform 100ms,
|
||||
box-shadow 100ms;
|
||||
transition: transform 100ms, box-shadow 100ms;
|
||||
}
|
||||
|
||||
.gradient-button::part(base):hover {
|
||||
@@ -132,8 +130,7 @@ Most (but not all) components expose parts. You can find them in each component'
|
||||
|
||||
If you're using [native styles](/docs/utilities/native), any custom styles added for a component should also target the corresponding native element. In general, the same styles you declare for components will work just the same to style their native counterparts.
|
||||
|
||||
For example, we can give `<input type="checkbox">` the same custom styles as `<wa-checkbox>` by using standard CSS properties and CSS parts:
|
||||
|
||||
For example, we can give `<input type="checkbox">` the same custom styles as `<wa-checkbox>` by using the custom properties required to style the component:
|
||||
```html {.example}
|
||||
<wa-checkbox class="pinkify">Web Awesome checkbox</wa-checkbox>
|
||||
<br />
|
||||
@@ -143,16 +140,59 @@ For example, we can give `<input type="checkbox">` the same custom styles as `<w
|
||||
</label>
|
||||
|
||||
<style>
|
||||
wa-checkbox.pinkify::part(control),
|
||||
input[type='checkbox'].pinkify {
|
||||
wa-checkbox.pinkify,
|
||||
input[type="checkbox"].pinkify {
|
||||
--background-color-checked: hotpink;
|
||||
--border-color-checked: hotpink;
|
||||
--border-width: 3px;
|
||||
--checked-icon-color: lavenderblush;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
Or, if using CSS parts, we can give both checkboxes the same custom styles using standard CSS properties:
|
||||
```html {.example}
|
||||
<wa-checkbox class="purpleify">Web Awesome checkbox</wa-checkbox>
|
||||
<br />
|
||||
<label>
|
||||
<input type="checkbox" class="purpleify" />
|
||||
HTML checkbox
|
||||
</label>
|
||||
|
||||
<style>
|
||||
wa-checkbox.purpleify::part(control),
|
||||
input[type="checkbox"].purpleify {
|
||||
border-width: 3px;
|
||||
}
|
||||
|
||||
wa-checkbox.pinkify:state(checked)::part(control),
|
||||
input[type='checkbox'].pinkify:checked {
|
||||
background-color: hotpink;
|
||||
border-color: hotpink;
|
||||
color: lavenderblush;
|
||||
wa-checkbox.purpleify:state(checked)::part(control),
|
||||
input[type="checkbox"].purpleify:checked {
|
||||
background-color: darkorchid;
|
||||
border-color: darkorchid;
|
||||
color: lavender;
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
|
||||
## Style Utilities
|
||||
|
||||
Similarly, if you're using [style utilities](/docs/utilities), any custom styles added for a specific attribute variation of a component — such as `appearance`, `variant`, or `size` — should also target the corresponding style utility class. This ensures that the attribute and its utility class counterpart work interchangeably.
|
||||
|
||||
For example, we can give all outlined callouts a thick left border, regardless of whether they are styled with `appearance="outlined"` or `class="wa-outlined"`:
|
||||
```html {.example}
|
||||
<wa-callout appearance="outlined filled">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Here's a callout with <code>appearance="outlined"</code>
|
||||
</wa-callout>
|
||||
<wa-callout class="wa-outlined wa-filled">
|
||||
<wa-icon slot="icon" name="circle-star"></wa-icon>
|
||||
Here's a callout with <code>class="wa-outlined"</code>
|
||||
</wa-callout>
|
||||
|
||||
<style>
|
||||
wa-callout:is([appearance~="outlined"]) {
|
||||
border-left-width: var(--wa-panel-border-radius);
|
||||
}
|
||||
</style>
|
||||
```
|
||||
@@ -52,7 +52,7 @@ To make a field required, use the `required` attribute. Required fields will aut
|
||||
customElements.whenDefined('wa-input'),
|
||||
customElements.whenDefined('wa-option'),
|
||||
customElements.whenDefined('wa-select'),
|
||||
customElements.whenDefined('wa-textarea'),
|
||||
customElements.whenDefined('wa-textarea')
|
||||
]).then(() => {
|
||||
form.addEventListener('submit', event => {
|
||||
event.preventDefault();
|
||||
@@ -78,7 +78,10 @@ To restrict a value to a specific [pattern](https://developer.mozilla.org/en-US/
|
||||
const form = document.querySelector('.input-validation-pattern');
|
||||
|
||||
// Wait for controls to be defined before attaching form listeners
|
||||
await Promise.all([customElements.whenDefined('wa-button'), customElements.whenDefined('wa-input')]).then(() => {
|
||||
await Promise.all([
|
||||
customElements.whenDefined('wa-button'),
|
||||
customElements.whenDefined('wa-input')
|
||||
]).then(() => {
|
||||
form.addEventListener('submit', event => {
|
||||
event.preventDefault();
|
||||
alert('All fields are valid!');
|
||||
@@ -105,7 +108,10 @@ Some input types will automatically trigger constraints, such as `email` and `ur
|
||||
const form = document.querySelector('.input-validation-type');
|
||||
|
||||
// Wait for controls to be defined before attaching form listeners
|
||||
await Promise.all([customElements.whenDefined('wa-button'), customElements.whenDefined('wa-input')]).then(() => {
|
||||
await Promise.all([
|
||||
customElements.whenDefined('wa-button'),
|
||||
customElements.whenDefined('wa-input')
|
||||
]).then(() => {
|
||||
form.addEventListener('submit', event => {
|
||||
event.preventDefault();
|
||||
alert('All fields are valid!');
|
||||
@@ -131,7 +137,10 @@ To create a custom validation error, pass a non-empty string to the `setCustomVa
|
||||
const input = form.querySelector('wa-input');
|
||||
|
||||
// Wait for controls to be defined before attaching form listeners
|
||||
await Promise.all([customElements.whenDefined('wa-button'), customElements.whenDefined('wa-input')]).then(() => {
|
||||
await Promise.all([
|
||||
customElements.whenDefined('wa-button'),
|
||||
customElements.whenDefined('wa-input')
|
||||
]).then(() => {
|
||||
form.addEventListener('submit', event => {
|
||||
event.preventDefault();
|
||||
alert('All fields are valid!');
|
||||
@@ -154,15 +163,17 @@ Custom validation can be applied to any form control that supports the `setCusto
|
||||
|
||||
## Custom Validation Styles
|
||||
|
||||
Due to the many ways form controls are used, Web Awesome doesn't provide out of the box validation styles for form controls as part of its default theme.
|
||||
Due to the many ways form controls are used, Web Awesome doesn't provide out of the box validation styles for form controls as part of its default theme. Instead, the following attributes will be applied to reflect a control's validity as users interact with it. You can use them to create custom styles for any of the validation states you're interested in.
|
||||
|
||||
Instead, the following [custom states](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states) will be applied to reflect a control's validity as users interact with it. You can use them to create custom styles for any of the validation states you're interested in.
|
||||
- `required` - the form control is required
|
||||
- `optional` - the form control is optional
|
||||
- `invalid` - the form control is invalid
|
||||
- `valid` - the form control is valid
|
||||
- `user-invalid` - the form control is invalid and the user has interacted with it
|
||||
- `user-valid` - the form control is valid and the user has interacted with it
|
||||
|
||||
- `:state(required)` - the form control is required
|
||||
- `:state(optional)` - the form control is optional
|
||||
- `:state(invalid)` - the form control is invalid
|
||||
- `:state(valid)` - the form control is valid
|
||||
- `:state(user-invalid)` - the form control is invalid and the user has interacted with it
|
||||
- `:state(user-valid)` - the form control is valid and the user has interacted with it
|
||||
These attributes map to the browser's built-in pseudo classes for validation: [`:required`](https://developer.mozilla.org/en-US/docs/Web/CSS/:required), [`:optional`](https://developer.mozilla.org/en-US/docs/Web/CSS/:optional), [`:invalid`](https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid), [`:valid`](https://developer.mozilla.org/en-US/docs/Web/CSS/:valid), [`:user-invalid`](https://developer.mozilla.org/en-US/docs/Web/CSS/:user-invalid), and [`:user-valid`](https://developer.mozilla.org/en-US/docs/Web/CSS/:user-valid).
|
||||
|
||||
These custom states work alongside the browser's built-in pseudo classes for validation: [`:required`](https://developer.mozilla.org/en-US/docs/Web/CSS/:required), [`:optional`](https://developer.mozilla.org/en-US/docs/Web/CSS/:optional), [`:invalid`](https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid), [`:valid`](https://developer.mozilla.org/en-US/docs/Web/CSS/:valid), [`:user-invalid`](https://developer.mozilla.org/en-US/docs/Web/CSS/:user-invalid), and [`:user-valid`](https://developer.mozilla.org/en-US/docs/Web/CSS/:user-valid).
|
||||
:::info
|
||||
In the future, data attribute selectors will be replaced with custom states such as `:state(valid)` and `:state(invalid)`. Web Awesome is using data attributes as a workaround until browsers fully support [custom states](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals/states).
|
||||
:::
|
||||
@@ -4,7 +4,7 @@ description: Choose the installation method that works best for you.
|
||||
layout: page-outline
|
||||
---
|
||||
|
||||
Welcome to Web Awesome! [Learn more](https://webawesome.com/) about this project and [how to contribute to it](https://webawesome.com/docs/resources/contributing).
|
||||
Welcome to Web Awesome beta! [Learn more](https://webawesome.com/) about this project and [how to contribute to it](https://webawesome.com/docs/resources/contributing).
|
||||
|
||||
- [Report a bug](https://github.com/shoelace-style/webawesome/issues)
|
||||
- [Get help / ask a question](https://github.com/shoelace-style/webawesome/discussions)
|
||||
|
||||
@@ -4,49 +4,13 @@ description: Changes to each version of the project are documented here.
|
||||
layout: page-outline
|
||||
---
|
||||
|
||||
<p class="wa-caption-s">Last updated: <wa-format-date month="long" day="numeric" year="numeric" date="{{ lastUpdatedISO }}"></wa-format-date></p>
|
||||
|
||||
Web Awesome follows [Semantic Versioning](https://semver.org/). Breaking changes in components with the <wa-badge variant="brand">Stable</wa-badge> badge will not be accepted until the next major version. As such, all contributions must consider the project's roadmap and take this into consideration. Features that are deemed no longer necessary will be deprecated but not removed.
|
||||
|
||||
Components with the <wa-badge variant="warning">Experimental</wa-badge> badge should not be used in production. They are made available as release candidates for development and testing purposes. As such, changes to experimental components will not be subject to semantic versioning.
|
||||
|
||||
## Next
|
||||
|
||||
- 🚨 BREAKING: Changed `appearance="filled outlined"` to `appearance="filled-outlined"` in the following elements [issue:1127]
|
||||
- `<wa-badge>`
|
||||
- `<wa-button>`
|
||||
- `<wa-callout>`
|
||||
- `<wa-details>`
|
||||
- `<wa-input>`
|
||||
- `<wa-select>`
|
||||
- `<wa-tag>`
|
||||
- `<wa-textarea>`
|
||||
- Added the Kazakh translation [pr:1496]
|
||||
- Added docs for code completion for VS Code and JetBrains [pr:1550]
|
||||
- Added back the missing `form-control-label` part to `<wa-textarea>` for consistency with other form controls [pr:1533]
|
||||
- Added focus delegation to `<wa-button>` to ensure tabbing works properly when using `tabindex` [issue:1622]
|
||||
- Added [text utilities](/docs/utilities/text/) for longform text, form control text, font sizes, font weights, text color, and truncation [pr:1602]
|
||||
- Fixed a bug in `<wa-button>` where slotted badges weren't properly positioned in buttons with an `href` [issue:1377]
|
||||
- Fixed focus outline styles in `<wa-details>` and native `<details>` [issue:1456]
|
||||
- Fixed focus outline styles in `<wa-scroller>`, `<wa-dialog>`, and `<wa-drawer>` [issue:1484]
|
||||
- Fixed a bug in `<wa-checkbox>` where its value would revert to `""` when checked / unchecked [pr:1547]
|
||||
- Fixed a bug that caused icon button labels to not render in frameworks [issue:1542]
|
||||
- Fixed a bug in `<wa-details>` that caused the `name` property not to reflect [pr:1538]
|
||||
- Fixed a bug in `<wa-dialog>` and `<wa-drawer>` that prevented focus from being set on the dialog/drawer when opened [issue:1302]
|
||||
- Fixed an overflow style that was causing tab group content to be unnecessarily truncated [issue:1401]
|
||||
- Fixed a bug in `<wa-icon>` that caused icon buttons to render when non-text nodes were slotted in [issue:1475]
|
||||
- Fixed a bug in `<wa-tooltip>` that prevented tooltips from showing when disconnecting and then reconnecting to the DOM [issue:1595]
|
||||
- Fixed a bug that caused the required `*` in form labels to have incorrect spacing in `<wa-checkbox>` and `<wa-switch>` [issue:1472]
|
||||
- Fixed a bug in `<wa-dialog>` and `<wa-drawer>` that caused the component to prematurely hide when certain child elements are used [pr:1636]
|
||||
- Improved autofill styles in `<wa-input>` so they span the entire width of the visual input [issue:1439]
|
||||
- Improved [text utilities](/docs/utilities/text/) so that each size modifier always exactly matches the applied font size [pr:1602]
|
||||
- Modified `<wa-slider>` to only show the tooltip on the handle being dragged when in range mode [issue:1320]
|
||||
- Upgraded `<wa-page>` from _experimental_ to _stable_
|
||||
|
||||
## 3.0.0-beta.6
|
||||
|
||||
- Fixed a bug in `<wa-dropdown>` that closed the dropdown event when preventing `wa-select` [issue:1432]
|
||||
- Pin `@ctrl/tinycolor` to `4.1.0` due to malware in `4.1.1` and `4.1.2`. <https://socket.dev/npm/package/@ctrl/tinycolor/overview/4.1.1>
|
||||
|
||||
## 3.0.0-beta.5
|
||||
|
||||
@@ -54,7 +18,6 @@ Components with the <wa-badge variant="warning">Experimental</wa-badge> badge sh
|
||||
|
||||
- 🚨 BREAKING: Updated `<wa-icon>` to use Font Awesome 7 [pr:1222]
|
||||
- Added the `auto-width` attribute to automatically size icons, since FA7 is fixed-width by default now
|
||||
- Changed the default width of icons to `1.25em` to match FA7's fixed-width proportions
|
||||
- Improved support for duotone icons in `<wa-icon>`, including custom colors, custom opacity, and opacity swapping
|
||||
- Removed the `fixed-width` attribute as it's now the default behavior
|
||||
- 🚨 BREAKING: Renamed the `icon-position` attribute to `icon-placement` in `<wa-details>` [discuss:1340]
|
||||
|
||||
@@ -36,27 +36,13 @@ The [community chat](https://discord.gg/mg8f26C) is open to the public and power
|
||||
Join the Chat
|
||||
</wa-button>
|
||||
|
||||
## Social Networks
|
||||
## Twitter
|
||||
|
||||
Follow Web Awesome on [Bluesky](https://bsky.app/profile/webawesome.com), [X (Twitter)](https://x.com/webawesomer), [Mastodon](https://mastodon.social/@webawesome), or [Threads](https://www.threads.com/@web.awesome) for general updates and announcements. This is a great place to say "hi" or to share something you're working on.
|
||||
Follow [@webawesomer](https://twitter.com/webawesomer) on Twitter for general updates and announcements about Web Awesome. This is a great place to say "hi" or to share something you're working on.
|
||||
|
||||
**Please avoid using Social Networks for support questions.** The [discussion forum](https://github.com/shoelace-style/webawesome/discussions) is a much better place to share code snippets, screenshots, and other troubleshooting info. You'll have much better luck there, as more users will have a chance to help you.
|
||||
**Please avoid using Twitter for support questions.** The [discussion forum](https://github.com/shoelace-style/webawesome/discussions) is a much better place to share code snippets, screenshots, and other troubleshooting info. You'll have much better luck there, as more users will have a chance to help you.
|
||||
|
||||
<div class="wa-cluster wa-gap-l">
|
||||
<wa-button variant="brand" href="https://bsky.app/profile/webawesome.com" rel="noopener noreferrer" target="_blank">
|
||||
<wa-icon name="bluesky" family="brands" slot="start"></wa-icon>
|
||||
Bluesky
|
||||
</wa-button>
|
||||
<wa-button variant="brand" href="https://twitter.com/webawesomer" rel="noopener noreferrer" target="_blank">
|
||||
<wa-icon name="x-twitter" family="brands" slot="start"></wa-icon>
|
||||
X (Twitter)
|
||||
</wa-button>
|
||||
<wa-button variant="brand" href="https://mastodon.social/@webawesome" rel="noopener noreferrer" target="_blank">
|
||||
<wa-icon name="mastodon" family="brands" slot="start"></wa-icon>
|
||||
Mastodon
|
||||
</wa-button>
|
||||
<wa-button variant="brand" href="https://www.threads.com/@web.awesome" rel="noopener noreferrer" target="_blank">
|
||||
<wa-icon name="threads" family="brands" slot="start"></wa-icon>
|
||||
Threads
|
||||
</wa-button>
|
||||
</div>
|
||||
<wa-button variant="brand" href="https://twitter.com/webawesomer" target="_blank" style="margin-block-end: var(--wa-content-spacing);">
|
||||
<wa-icon name="twitter" family="brands" slot="start"></wa-icon>
|
||||
Follow on Twitter
|
||||
</wa-button>
|
||||
|
||||
@@ -296,7 +296,6 @@ Then use the following syntax for comments so they appear in the generated docs.
|
||||
* @cssproperty --color: The component's text color.
|
||||
* @cssproperty --background-color: The component's background color.
|
||||
*/
|
||||
@customElement('wa-example')
|
||||
export default class WaExample {
|
||||
// ...
|
||||
}
|
||||
@@ -397,7 +396,7 @@ Guidelines for writing tests:
|
||||
|
||||
### Running tests
|
||||
|
||||
Right now, tests run both "hydrated" (SSR → client hydrated) and "client only". If you're debugging only one specific kind you can set an environment variable. For example, to run only the client tests, you can do:
|
||||
Right now, tests run both "hydrated" (SSR -> client hydrated) and "client only". If you're debugging only one specific kind you can set an environment variable. For example, to run only the client tests, you can do:
|
||||
|
||||
```bash
|
||||
CSR_ONLY="true" npm run test
|
||||
|
||||
@@ -1,28 +1,26 @@
|
||||
---
|
||||
title: Themes
|
||||
description: Style (and restyle) your website at will with any of Web Awesome's pre-built themes.
|
||||
description: Themes galore
|
||||
layout: page
|
||||
---
|
||||
|
||||
<h1>{{ title }}</h1>
|
||||
|
||||
<p>Themes are collections of <a href="/docs/tokens">design tokens</a> that give a cohesive look and feel to the entire Web Awesome library. Style and restyle your website at will by loading any pre-built theme.</p>
|
||||
|
||||
{% raw %}
|
||||
<p>See one you like?
|
||||
{%- if not session.isLoggedIn -%}
|
||||
<a href="/login">Log in</a>
|
||||
{%- else -%}
|
||||
Head over to <a href="/teams">your teams</a>
|
||||
{%- endif -%}
|
||||
to create a project with any one of these themes.
|
||||
{%- if not currentUser.hasPro -%}
|
||||
(Plus, there are even more themes to love with Web Awesome Pro. <wa-icon name="heart" style="color: var(--wa-color-red-70);"></wa-icon>)
|
||||
{%- endif -%}
|
||||
</p>
|
||||
{% endraw %}
|
||||
<div class="wa-split">
|
||||
<h1>{{ title }}</h1>
|
||||
<wa-button variant="brand" href="/themer">
|
||||
<wa-icon slot="start" name="plus" variant="regular"></wa-icon>
|
||||
Create a Theme
|
||||
</wa-button>
|
||||
</div>
|
||||
|
||||
<div id="theme-viewer">
|
||||
{% raw %}
|
||||
{% if not currentUser.hasPro %}
|
||||
<p>
|
||||
Additional themes are available to pro users. Please <a href="/login">login to view pro themes</a>.
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endraw %}
|
||||
|
||||
<wa-radio-group id="theme-picker" label="Theme Selector" value="default" orientation="horizontal">
|
||||
{% for theme in themer.themes %}
|
||||
{% if not theme.isPro %}
|
||||
@@ -225,14 +223,13 @@ to create a project with any one of these themes.
|
||||
}
|
||||
|
||||
#theme-viewer {
|
||||
margin-block-start: 2rem;
|
||||
|
||||
#theme-picker {
|
||||
|
||||
&::part(form-control-input) {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
gap: var(--wa-space-s);
|
||||
}
|
||||
|
||||
&::part(form-control-label) {
|
||||
|
||||
@@ -59,13 +59,11 @@ Common weights let you easily adjust the full range of weights for your theme.
|
||||
|
||||
Role-based weights allow you to uniformly adjust the weight of certain types of text to keep styles consistent.
|
||||
|
||||
| Custom Property | Default Value | Preview |
|
||||
| --------------------------- | -------------------------------- | ------------------------------------------------------------------ |
|
||||
| `--wa-font-weight-body` | `var(--wa-font-weight-normal)` | <div style="font-weight: var(--wa-font-weight-body)">AaBb</div> |
|
||||
| `--wa-font-weight-heading` | `var(--wa-font-weight-bold)` | <div style="font-weight: var(--wa-font-weight-heading)">AaBb</div> |
|
||||
| `--wa-font-weight-code` | `var(--wa-font-weight-normal)` | <div style="font-weight: var(--wa-font-weight-code)">AaBb</div> |
|
||||
| `--wa-font-weight-longform` | `var(--wa-font-weight-normal)` | <div style="font-weight: var(--wa-font-weight-longform)">AaBb</div> |
|
||||
| `--wa-font-weight-action` | `var(--wa-font-weight-semibold)` | <div style="font-weight: var(--wa-font-weight-action)">AaBb</div> |
|
||||
| Custom Property | Default Value | Preview |
|
||||
| -------------------------- | -------------------------------- | ------------------------------------------------------------------ |
|
||||
| `--wa-font-weight-body` | `var(--wa-font-weight-normal)` | <div style="font-weight: var(--wa-font-weight-body)">AaBb</div> |
|
||||
| `--wa-font-weight-heading` | `var(--wa-font-weight-bold)` | <div style="font-weight: var(--wa-font-weight-heading)">AaBb</div> |
|
||||
| `--wa-font-weight-action` | `var(--wa-font-weight-semibold)` | <div style="font-weight: var(--wa-font-weight-action)">AaBb</div> |
|
||||
|
||||
In Web Awesome, we use `--wa-font-weight-action` for interactive text, such as button labels and tab names. We also recommend using `--wa-font-weight-action` for text that uses color alone to signal interactivity, such as links without text decoration.
|
||||
|
||||
|
||||
@@ -174,54 +174,3 @@ This time we see an empty string, which means the boolean attribute is now prese
|
||||
:::info
|
||||
To wait for multiple components to update, you can use `requestAnimationFrame()` instead of awaiting each element.
|
||||
:::
|
||||
|
||||
## Code Completion
|
||||
|
||||
### VS Code
|
||||
|
||||
Web Awesome ships with a file called `vscode.html-custom-data.json` that can be used to describe its custom elements to [Visual Studio Code](https://code.visualstudio.com/). This enables code completion for Web Awesome components (also known as “code hinting” or “IntelliSense”). To enable it, you need to tell VS Code where the file is.
|
||||
|
||||
1. [Install Web Awesome locally](/docs/#installing-via-npm)
|
||||
2. If it doesn’t already exist, create a folder called `.vscode` at the root of your project
|
||||
3. If it doesn’t already exist, create a file inside that folder called `settings.json`
|
||||
4. Add the following to the file
|
||||
|
||||
```json
|
||||
{
|
||||
"html.customData": ["./node_modules/@awesome.me/webawesome/dist/vscode.html-custom-data.json"]
|
||||
}
|
||||
```
|
||||
|
||||
If `settings.json` already exists, simply add the above line to the root of the object. Note that you may need to restart VS Code for the changes to take effect.
|
||||
|
||||
If you are using WebAwesome through the [CDN](/docs/#quick-start-autoloading-via-cdn) you can manually [download the file]({% cdnUrl 'vscode.html-custom-data.json' %}]({% cdnUrl 'vscode.html-custom-data.json' %}) instead.
|
||||
|
||||
### JetBrains IDEs
|
||||
If you are using a [JetBrains IDE](https://www.jetbrains.com/) and you are installing Web Awesome from NPM, the editor will automatically detect the web-types.json file from the package and you should immediately see component information in your editor.
|
||||
|
||||
If you are installing from the CDN, you can [download a local copy]({% cdnUrl 'web-types.json' %}) and add it to the root of your project. Be sure to add a reference to the web-types.json file in your package.json in order for your editor to properly detect it.
|
||||
|
||||
```json
|
||||
{
|
||||
...
|
||||
"web-types": "./web-types.json"
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
If you are using types from multiple projects, you can add an array of references.
|
||||
|
||||
```json
|
||||
{
|
||||
...
|
||||
"web-types": [
|
||||
...,
|
||||
"./web-types.json"
|
||||
]
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### Other Editors
|
||||
|
||||
Most popular editors support custom code completion with a bit of configuration. Please [submit a feature request](https://github.com/shoelace-style/webawesome/issues/new/choose) for your editor of choice. PRs are also welcome!
|
||||
|
||||
@@ -20,7 +20,7 @@ tags: layoutUtilities
|
||||
}
|
||||
</style>
|
||||
|
||||
Web Awesome includes classes to set the `align-items` property of flex and grid containers. They can be used alongside other Web Awesome layout utilities, like [cluster](/docs/utilities/cluster) and [stack](/docs/utilities/stack), to align children in container on the container's cross axis.
|
||||
Web Awesome includes classes to set the `align-items` property of flex and grid containers. They can be used alongside other Web Awesome layout utilities, like [cluster](/docs/layout/cluster) and [stack](/docs/layout/stack), to align children in container on the container's cross axis.
|
||||
|
||||
| Class Name | `align-items` Value | Preview |
|
||||
| ------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
|
||||
@@ -60,7 +60,7 @@ Clusters are great for inline lists and aligning items of varying sizes.
|
||||
|
||||
```html {.example}
|
||||
<div class="wa-stack">
|
||||
<h3 class="wa-heading-2xl">Withywindle Pub and Eatery</h3>
|
||||
<h3 class="wa-heading-xl">Withywindle Pub and Eatery</h3>
|
||||
<div class="wa-cluster wa-gap-xs">
|
||||
<wa-rating value="4.6" read-only></wa-rating>
|
||||
<strong>4.6</strong>
|
||||
@@ -72,7 +72,7 @@ Clusters are great for inline lists and aligning items of varying sizes.
|
||||
<wa-icon name="dollar" style="color: var(--wa-color-green-60);"></wa-icon>
|
||||
<wa-icon name="dollar" style="color: var(--wa-color-green-60);"></wa-icon>
|
||||
</div>
|
||||
<span class="wa-caption-s">•</span>
|
||||
<span class="wa-caption-m">•</span>
|
||||
<wa-tag size="small">Comfort Food</wa-tag>
|
||||
<wa-tag size="small">Gastropub</wa-tag>
|
||||
<wa-tag size="small">Cocktail Bar</wa-tag>
|
||||
|
||||
@@ -54,7 +54,7 @@ Frames are well-suited for images and image placeholders.
|
||||
<img src="https://images.unsplash.com/photo-1533743983669-94fa5c4338ec?q=20" alt="Grey and white tabby kitten" />
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-xs">
|
||||
<h3 class="wa-heading-m">White-socks</h3>
|
||||
<h3 class="wa-heading-s">White-socks</h3>
|
||||
<span class="wa-body-s">Kitten • Male</span>
|
||||
<div class="wa-flank:end wa-gap-xs">
|
||||
<wa-button size="small" appearance="filled" variant="brand">Adopt this pet</wa-button>
|
||||
@@ -67,13 +67,13 @@ Frames are well-suited for images and image placeholders.
|
||||
</wa-card>
|
||||
<wa-card>
|
||||
<div class="wa-frame:landscape" slot="header">
|
||||
<div class="wa-stack wa-align-items-center wa-gap-xs wa-caption-s">
|
||||
<div class="wa-stack wa-align-items-center wa-gap-xs wa-caption-m">
|
||||
<wa-icon name="paw"></wa-icon>
|
||||
<span>Photo coming soon</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-xs">
|
||||
<h3 class="wa-heading-m">Bumpkin</h3>
|
||||
<h3 class="wa-heading-s">Bumpkin</h3>
|
||||
<span class="wa-body-s">Adult • Male</span>
|
||||
<div class="wa-flank:end wa-gap-xs">
|
||||
<wa-button size="small" appearance="filled" variant="brand">Adopt this pet</wa-button>
|
||||
@@ -89,7 +89,7 @@ Frames are well-suited for images and image placeholders.
|
||||
<img src="https://images.unsplash.com/photo-1445499348736-29b6cdfc03b9?q=20" alt="Diluted calico kitten" />
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-xs">
|
||||
<h3 class="wa-heading-m">Swish-tail</h3>
|
||||
<h3 class="wa-heading-s">Swish-tail</h3>
|
||||
<span class="wa-body-s">Kitten • Female</span>
|
||||
<div class="wa-flank:end wa-gap-xs">
|
||||
<wa-button size="small" appearance="filled" variant="brand">Adopt this pet</wa-button>
|
||||
@@ -105,7 +105,7 @@ Frames are well-suited for images and image placeholders.
|
||||
<img src="https://images.unsplash.com/photo-1517451330947-7809dead78d5?q=20" alt="Short-haired tabby cat" />
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-xs">
|
||||
<h3 class="wa-heading-m">Sharp-ears</h3>
|
||||
<h3 class="wa-heading-s">Sharp-ears</h3>
|
||||
<span class="wa-body-s">Adult • Female</span>
|
||||
<div class="wa-flank:end wa-gap-xs">
|
||||
<wa-button size="small" appearance="filled" variant="brand">Adopt this pet</wa-button>
|
||||
|
||||
@@ -41,35 +41,35 @@ Grids work especially well for card lists and content designed for browsing.
|
||||
<div class="wa-frame wa-border-radius-l">
|
||||
<img src="https://images.unsplash.com/photo-1520763185298-1b434c919102?q=20" alt="" />
|
||||
</div>
|
||||
<h3 class="wa-heading-m">Tulip</h3>
|
||||
<h3 class="wa-heading-s">Tulip</h3>
|
||||
<em>Tulipa gesneriana</em>
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-s">
|
||||
<div class="wa-frame wa-border-radius-l">
|
||||
<img src="https://images.unsplash.com/photo-1591767134492-338e62f7b5a2?q=20" alt="" />
|
||||
</div>
|
||||
<h3 class="wa-heading-m">Peony</h3>
|
||||
<h3 class="wa-heading-s">Peony</h3>
|
||||
<em>Paeonia officinalis</em>
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-s">
|
||||
<div class="wa-frame wa-border-radius-l">
|
||||
<img src="https://images.unsplash.com/photo-1590872000386-4348c6393115?q=20" alt="" />
|
||||
</div>
|
||||
<h3 class="wa-heading-m">Poppy</h3>
|
||||
<h3 class="wa-heading-s">Poppy</h3>
|
||||
<em>Papaver rhoeas</em>
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-s">
|
||||
<div class="wa-frame wa-border-radius-l">
|
||||
<img src="https://images.unsplash.com/photo-1516723338795-324c7c33f700?q=20" alt="" />
|
||||
</div>
|
||||
<h3 class="wa-heading-m">Sunflower</h3>
|
||||
<h3 class="wa-heading-s">Sunflower</h3>
|
||||
<em>Helianthus annuus</em>
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-s">
|
||||
<div class="wa-frame wa-border-radius-l">
|
||||
<img src="https://images.unsplash.com/photo-1563601841845-74a0a8ab7c8a?q=20" alt="" />
|
||||
</div>
|
||||
<h3 class="wa-heading-m">Daisy</h3>
|
||||
<h3 class="wa-heading-s">Daisy</h3>
|
||||
<em>Bellis perennis</em>
|
||||
</div>
|
||||
</div>
|
||||
@@ -83,9 +83,9 @@ Grids work especially well for card lists and content designed for browsing.
|
||||
<wa-icon slot="icon" name="globe"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-stack wa-gap-3xs">
|
||||
<span class="wa-caption-xs">Population (Zion)</span>
|
||||
<span class="wa-caption-s">Population (Zion)</span>
|
||||
<span class="wa-cluster wa-gap-xs">
|
||||
<span class="wa-heading-2xl">251,999</span>
|
||||
<span class="wa-heading-xl">251,999</span>
|
||||
<wa-badge variant="danger">-3% <wa-icon name="arrow-trend-down"></wa-icon></wa-badge>
|
||||
</span>
|
||||
</div>
|
||||
@@ -97,9 +97,9 @@ Grids work especially well for card lists and content designed for browsing.
|
||||
<wa-icon slot="icon" name="brain-circuit"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-stack wa-gap-3xs">
|
||||
<span class="wa-caption-xs">Minds Freed</span>
|
||||
<span class="wa-caption-s">Minds Freed</span>
|
||||
<span class="wa-cluster wa-gap-xs">
|
||||
<span class="wa-heading-2xl">0.36%</span>
|
||||
<span class="wa-heading-xl">0.36%</span>
|
||||
<wa-badge variant="success">+0.03% <wa-icon name="arrow-trend-up"></wa-icon></wa-badge>
|
||||
</span>
|
||||
</div>
|
||||
@@ -111,9 +111,9 @@ Grids work especially well for card lists and content designed for browsing.
|
||||
<wa-icon slot="icon" name="robot"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-stack wa-gap-3xs">
|
||||
<span class="wa-caption-xs">Agents Discovered</span>
|
||||
<span class="wa-caption-s">Agents Discovered</span>
|
||||
<span class="wa-cluster wa-gap-xs">
|
||||
<span class="wa-heading-2xl">3</span>
|
||||
<span class="wa-heading-xl">3</span>
|
||||
<wa-badge variant="neutral">±0% <wa-icon name="wave-triangle"></wa-icon></wa-badge>
|
||||
</span>
|
||||
</div>
|
||||
@@ -125,9 +125,9 @@ Grids work especially well for card lists and content designed for browsing.
|
||||
<wa-icon slot="icon" name="spaghetti-monster-flying"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-stack wa-gap-3xs">
|
||||
<span class="wa-caption-xs">Sentinels Controlled</span>
|
||||
<span class="wa-caption-s">Sentinels Controlled</span>
|
||||
<span class="wa-cluster wa-gap-xs">
|
||||
<span class="wa-heading-2xl">208</span>
|
||||
<span class="wa-heading-xl">208</span>
|
||||
<wa-badge variant="success">+1% <wa-icon name="arrow-trend-up"></wa-icon></wa-badge>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -68,7 +68,7 @@ Splits are especially helpful for navigation, header, and footer layouts.
|
||||
```html {.example}
|
||||
<div class="wa-stack">
|
||||
<div class="wa-split">
|
||||
<wa-icon name="web-awesome" label="Web Awesome" class="wa-font-size-xl"></wa-icon>
|
||||
<wa-icon name="web-awesome" label="Web Awesome" style="font-size: var(--wa-font-size-xl);"></wa-icon>
|
||||
<div class="wa-cluster">
|
||||
<wa-button>Sign Up</wa-button>
|
||||
<wa-button appearance="outlined">Log In</wa-button>
|
||||
|
||||
@@ -1,159 +1,66 @@
|
||||
---
|
||||
title: Text
|
||||
description: Text utility classes use custom properties from your Web Awesome theme and other standard CSS properties to style text elements on the fly.
|
||||
description: Text utility classes combine custom properties from your Web Awesome theme to conveniently style text content.
|
||||
layout: docs
|
||||
tags: styleUtilities
|
||||
---
|
||||
|
||||
<style>
|
||||
th {
|
||||
min-inline-size: 15ch;
|
||||
}
|
||||
</style>
|
||||
|
||||
{{ description }}
|
||||
Web Awesome includes classes to set multiple text properties at once to style body text, headings, and captions.
|
||||
|
||||
## Body
|
||||
|
||||
Use `wa-body-*` classes to style the main content of your pages. Each class specifies a `font-size` that corresponds to a [font size token](/docs/tokens/typography/#font-size) from your theme.
|
||||
Use body classes to style the main content of your pages. Each `wa-body-*` class specifies the following properties:
|
||||
|
||||
Alternatively, use `wa-body` to apply the same styling without an explicit font size.
|
||||
- `font-family: var(--wa-font-family-body);`
|
||||
- `font-weight: var(--wa-font-weight-body);`
|
||||
- `line-height: var(--wa-line-height-normal);`
|
||||
|
||||
| Class Name | Preview |
|
||||
| ------------- | -------------------------------------------------- |
|
||||
| `wa-body-2xs` | <div class="wa-body-2xs">Five boxing wizards</div> |
|
||||
| `wa-body-xs` | <div class="wa-body-xs">Five boxing wizards</div> |
|
||||
| `wa-body-s` | <div class="wa-body-s">Five boxing wizards</div> |
|
||||
| `wa-body-m` | <div class="wa-body-m">Five boxing wizards</div> |
|
||||
| `wa-body-l` | <div class="wa-body-l">Five boxing wizards</div> |
|
||||
| `wa-body-xl` | <div class="wa-body-xl">Five boxing wizards</div> |
|
||||
| `wa-body-2xl` | <div class="wa-body-2xl">Five boxing wizards</div> |
|
||||
| `wa-body-3xl` | <div class="wa-body-3xl">Five boxing wizards</div> |
|
||||
| `wa-body-4xl` | <div class="wa-body-4xl">Five boxing wizards</div> |
|
||||
Additionally, each class specifies a `font-size` that corresponds to a [`--wa-font-size-*`](/docs/tokens/typography/#font-size) token from your theme.
|
||||
|
||||
| Class Name | `font-size` Value | Preview |
|
||||
| ------------ | ------------------- | ------------------------------------------------------------------- |
|
||||
| `wa-body-xs` | `--wa-font-size-xs` | <div class="wa-body-xs">Sphinx of black quartz, judge my vow.</div> |
|
||||
| `wa-body-s` | `--wa-font-size-s` | <div class="wa-body-s">Sphinx of black quartz, judge my vow.</div> |
|
||||
| `wa-body-m` | `--wa-font-size-m` | <div class="wa-body-m">Sphinx of black quartz, judge my vow.</div> |
|
||||
| `wa-body-l` | `--wa-font-size-l` | <div class="wa-body-l">Sphinx of black quartz, judge my vow.</div> |
|
||||
| `wa-body-xl` | `--wa-font-size-xl` | <div class="wa-body-xl">Sphinx of black quartz, judge my vow.</div> |
|
||||
|
||||
## Headings
|
||||
|
||||
Use `wa-heading-*` classes to style section titles and headings in your content. Each class specifies a `font-size` that corresponds to a [font size token](/docs/tokens/typography/#font-size) from your theme.
|
||||
Use heading classes to style section titles and headings in your content. Each `wa-heading-*` class specifies the following properties:
|
||||
|
||||
Alternatively, use `wa-heading` to apply the same styling without an explicit font size.
|
||||
- `font-family: var(--wa-font-family-heading);`
|
||||
- `font-weight: var(--wa-font-weight-heading);`
|
||||
- `line-height: var(--wa-line-height-condensed);`
|
||||
- `text-wrap: balance;`
|
||||
|
||||
| Class Name | Preview |
|
||||
| ---------------- | ----------------------------------------------------- |
|
||||
| `wa-heading-2xs` | <div class="wa-heading-2xs">Five boxing wizards</div> |
|
||||
| `wa-heading-xs` | <div class="wa-heading-xs">Five boxing wizards</div> |
|
||||
| `wa-heading-s` | <div class="wa-heading-s">Five boxing wizards</div> |
|
||||
| `wa-heading-m` | <div class="wa-heading-m">Five boxing wizards</div> |
|
||||
| `wa-heading-l` | <div class="wa-heading-l">Five boxing wizards</div> |
|
||||
| `wa-heading-xl` | <div class="wa-heading-xl">Five boxing wizards</div> |
|
||||
| `wa-heading-2xl` | <div class="wa-heading-2xl">Five boxing wizards</div> |
|
||||
| `wa-heading-3xl` | <div class="wa-heading-3xl">Five boxing wizards</div> |
|
||||
| `wa-heading-4xl` | <div class="wa-heading-4xl">Five boxing wizards</div> |
|
||||
Additionally, each class specifies a `font-size` using a [`--wa-font-size-*`](/docs/tokens/typography/#font-size) token from your theme. Heading classes are one font size larger than the corresponding `wa-body-*` class.
|
||||
|
||||
| Class Name | `font-size` Value | Preview |
|
||||
| ---------------- | -------------------- | ----------------------------------------------------- |
|
||||
| `wa-heading-xs` | `--wa-font-size-s` | <div class="wa-heading-xs">Five Boxing Wizards</div> |
|
||||
| `wa-heading-s` | `--wa-font-size-m` | <div class="wa-heading-s">Five Boxing Wizards</div> |
|
||||
| `wa-heading-m` | `--wa-font-size-l` | <div class="wa-heading-m">Five Boxing Wizards</div> |
|
||||
| `wa-heading-l` | `--wa-font-size-xl` | <div class="wa-heading-l">Five Boxing Wizards</div> |
|
||||
| `wa-heading-xl` | `--wa-font-size-2xl` | <div class="wa-heading-xl">Five Boxing Wizards</div> |
|
||||
| `wa-heading-2xl` | `--wa-font-size-3xl` | <div class="wa-heading-2xl">Five Boxing Wizards</div> |
|
||||
| `wa-heading-3xl` | `--wa-font-size-4xl` | <div class="wa-heading-3xl">Five Boxing Wizards</div> |
|
||||
|
||||
## Captions
|
||||
|
||||
Use `wa-caption-*` classes to style descriptions or auxiliary text in your content. Each class specifies a `font-size` that corresponds to a [font size token](/docs/tokens/typography/#font-size) from your theme.
|
||||
Use caption classes to style descriptions or auxiliary text in your content. Each `wa-caption-*` class specifies the following properties:
|
||||
|
||||
Alternatively, use `wa-caption` to apply the same styling without an explicit font size.
|
||||
- `color: var(--wa-color-text-quiet);`
|
||||
- `font-family: var(--wa-font-family-body);`
|
||||
- `font-weight: var(--wa-font-weight-body);`
|
||||
- `line-height: var(--wa-line-height-condensed);`
|
||||
|
||||
| Class Name | Preview |
|
||||
| ---------------- | ----------------------------------------------------- |
|
||||
| `wa-caption-2xs` | <div class="wa-caption-2xs">Five boxing wizards</div> |
|
||||
| `wa-caption-xs` | <div class="wa-caption-xs">Five boxing wizards</div> |
|
||||
| `wa-caption-s` | <div class="wa-caption-s">Five boxing wizards</div> |
|
||||
| `wa-caption-m` | <div class="wa-caption-m">Five boxing wizards</div> |
|
||||
| `wa-caption-l` | <div class="wa-caption-l">Five boxing wizards</div> |
|
||||
| `wa-caption-xl` | <div class="wa-caption-xl">Five boxing wizards</div> |
|
||||
| `wa-caption-2xl` | <div class="wa-caption-2xl">Five boxing wizards</div> |
|
||||
| `wa-caption-3xl` | <div class="wa-caption-3xl">Five boxing wizards</div> |
|
||||
| `wa-caption-4xl` | <div class="wa-caption-4xl">Five boxing wizards</div> |
|
||||
Additionally, each class specifies a `font-size` using a [`--wa-font-size-*`](/docs/tokens/typography/#font-size) token from your theme. Caption classes are one font size smaller than the corresponding `wa-body-*` class.
|
||||
|
||||
## Longform
|
||||
|
||||
Use `wa-longform-*` classes to style lengthy content like essays or blog posts. Each class specifies a `font-size` that corresponds to a [font size token](/docs/tokens/typography/#font-size) from your theme.
|
||||
|
||||
Alternatively, use `wa-longform` to apply the same styling without an explicit font size.
|
||||
|
||||
| Class Name | Preview |
|
||||
| ----------------- | ------------------------------------------------------ |
|
||||
| `wa-longform-2xs` | <div class="wa-longform-2xs">Five boxing wizards</div> |
|
||||
| `wa-longform-xs` | <div class="wa-longform-xs">Five boxing wizards</div> |
|
||||
| `wa-longform-s` | <div class="wa-longform-s">Five boxing wizards</div> |
|
||||
| `wa-longform-m` | <div class="wa-longform-m">Five boxing wizards</div> |
|
||||
| `wa-longform-l` | <div class="wa-longform-l">Five boxing wizards</div> |
|
||||
| `wa-longform-xl` | <div class="wa-longform-xl">Five boxing wizards</div> |
|
||||
| `wa-longform-2xl` | <div class="wa-longform-2xl">Five boxing wizards</div> |
|
||||
| `wa-longform-3xl` | <div class="wa-longform-3xl">Five boxing wizards</div> |
|
||||
| `wa-longform-4xl` | <div class="wa-longform-4xl">Five boxing wizards</div> |
|
||||
|
||||
## Links
|
||||
|
||||
Use `wa-link` to give interactive text a link-like appearance. Alternatively, use `wa-link-plain` to remove typical link styles from `<a>` elements.
|
||||
|
||||
| Class Name | Preview |
|
||||
| --------------- | -------------------------------------------------------- |
|
||||
| `wa-link` | <div class="wa-link">Five boxing wizards</div> |
|
||||
| `wa-link-plain` | <a href="" class="wa-link-plain">Five boxing wizards</a> |
|
||||
|
||||
## Lists
|
||||
|
||||
Ordered (`<ol>`) and unordered (`<ul>`) lists are given default styles by either Web Awesome's [native styles](/docs/utilities/native/) or your browser. Use `wa-list-plain` to clear any built-in list styles.
|
||||
|
||||
| Class Name | Preview |
|
||||
| --------------- | -------------------------------------------------------------------------------------------------------- |
|
||||
| `wa-list-plain` | <ol class="wa-list-plain"><li>First list item</li><li>Second list item</li><li>Final list item</li></ol> |
|
||||
|
||||
## Form Controls
|
||||
|
||||
Use `wa-form-control-*` classes to style labels, values, placeholders, and hints outside of typical form control contexts with [form control tokens](/docs/tokens/component-groups/#form-controls) from your theme.
|
||||
|
||||
| Class Name | Preview |
|
||||
| ----------------------------- | ------------------------------------------------------------------ |
|
||||
| `wa-form-control-label` | <div class="wa-form-control-label">Five boxing wizards</div> |
|
||||
| `wa-form-control-value` | <div class="wa-form-control-value">Five boxing wizards</div> |
|
||||
| `wa-form-control-placeholder` | <div class="wa-form-control-placeholder">Five boxing wizards</div> |
|
||||
| `wa-form-control-hint` | <div class="wa-form-control-hint">Five boxing wizards</div> |
|
||||
|
||||
## Font Size
|
||||
|
||||
Use single-purpose `wa-font-size-*` classes to apply a given [font size](/docs/tokens/typography/#font-size) from your theme to any element without additional styling.
|
||||
|
||||
| Class Name | Preview |
|
||||
| ------------------ | ------------------------------------------------------- |
|
||||
| `wa-font-size-2xs` | <div class="wa-font-size-2xs">Five boxing wizards</div> |
|
||||
| `wa-font-size-xs` | <div class="wa-font-size-xs">Five boxing wizards</div> |
|
||||
| `wa-font-size-s` | <div class="wa-font-size-s">Five boxing wizards</div> |
|
||||
| `wa-font-size-m` | <div class="wa-font-size-m">Five boxing wizards</div> |
|
||||
| `wa-font-size-l` | <div class="wa-font-size-l">Five boxing wizards</div> |
|
||||
| `wa-font-size-xl` | <div class="wa-font-size-xl">Five boxing wizards</div> |
|
||||
| `wa-font-size-2xl` | <div class="wa-font-size-2xl">Five boxing wizards</div> |
|
||||
| `wa-font-size-3xl` | <div class="wa-font-size-3xl">Five boxing wizards</div> |
|
||||
| `wa-font-size-4xl` | <div class="wa-font-size-4xl">Five boxing wizards</div> |
|
||||
|
||||
## Font Weight
|
||||
|
||||
Use single-purpose `wa-font-weight-*` classes to apply a given [font weight](/docs/tokens/typography/#font-weight) from your theme to any element without additional styling.
|
||||
|
||||
| Class Name | Preview |
|
||||
| ------------------------- | -------------------------------------------------------------- |
|
||||
| `wa-font-weight-light` | <div class="wa-font-weight-light">Five boxing wizards</div> |
|
||||
| `wa-font-weight-normal` | <div class="wa-font-weight-normal">Five boxing wizards</div> |
|
||||
| `wa-font-weight-semibold` | <div class="wa-font-weight-semibold">Five boxing wizards</div> |
|
||||
| `wa-font-weight-bold` | <div class="wa-font-weight-bold">Five boxing wizards</div> |
|
||||
|
||||
## Text Color
|
||||
|
||||
Use single-purpose `wa-color-text-*` classes to apply a given [text color](/docs/tokens/color/#text) from your theme to any element without additional styling.
|
||||
|
||||
| Class Name | Preview |
|
||||
| ---------------------- | ----------------------------------------------------------- |
|
||||
| `wa-color-text-quiet` | <div class="wa-color-text-quiet">Five boxing wizards</div> |
|
||||
| `wa-color-text-normal` | <div class="wa-color-text-normal">Five boxing wizards</div> |
|
||||
| `wa-color-text-link` | <div class="wa-color-text-link">Five boxing wizards</div> |
|
||||
|
||||
## Truncation
|
||||
|
||||
Use the `wa-text-truncate` class to truncate text with an ellipsis instead of letting it overflow or wrap.
|
||||
|
||||
| Class Name | Preview |
|
||||
| ------------------ | ----------------------------------------------------------- |
|
||||
| `wa-text-truncate` | <div class="wa-text-truncate" style="max-width: 40ch;">The five boxing wizards jump quickly. How quickly daft jumping zebras vex!</div> |
|
||||
| Class Name | `font-size` Value | Preview |
|
||||
| --------------- | -------------------- | ----------------------------------------------------------------------------- |
|
||||
| `wa-caption-xs` | `--wa-font-size-2xs` | <div class="wa-caption-xs">The quick brown fox jumps over the lazy dog.</div> |
|
||||
| `wa-caption-s` | `--wa-font-size-xs` | <div class="wa-caption-s">The quick brown fox jumps over the lazy dog.</div> |
|
||||
| `wa-caption-m` | `--wa-font-size-s` | <div class="wa-caption-m">The quick brown fox jumps over the lazy dog.</div> |
|
||||
| `wa-caption-l` | `--wa-font-size-m` | <div class="wa-caption-l">The quick brown fox jumps over the lazy dog.</div> |
|
||||
| `wa-caption-xl` | `--wa-font-size-l` | <div class="wa-caption-xl">The quick brown fox jumps over the lazy dog.</div> |
|
||||
|
||||
@@ -43,63 +43,6 @@ Adding a label may seem redundant at times, but they're very helpful for unsight
|
||||
</wa-card>
|
||||
```
|
||||
|
||||
### Visually Hidden Input Parts
|
||||
|
||||
Sometimes you want a form control to have a cleaner, more minimal appearance by hiding the `label` or `hint` visually. However, removing these elements entirely would make the form inaccessible to users with assistive devices.
|
||||
|
||||
Instead, you can hide them visually while keeping them available to screen readers by adding the `wa-visually-hidden-label` or `wa-visually-hidden-hint` class.
|
||||
|
||||
```html {.example}
|
||||
<wa-input
|
||||
label="Search Articles"
|
||||
type="search"
|
||||
placeholder="Search for..."
|
||||
class="wa-visually-hidden-label"
|
||||
style="margin-block-end: 1rem;"
|
||||
>
|
||||
<wa-icon slot="start" name="magnifying-glass" variant="regular"></wa-icon>
|
||||
</wa-input>
|
||||
|
||||
<wa-input
|
||||
label="Phone Number"
|
||||
type="tel"
|
||||
hint="We'll send you a verification code"
|
||||
placeholder="(555) 867-5309"
|
||||
class="wa-visually-hidden-hint"
|
||||
style="margin-block-end: 1rem;"
|
||||
>
|
||||
<wa-icon slot="start" name="phone" variant="regular"></wa-icon>
|
||||
</wa-input>
|
||||
|
||||
<wa-select
|
||||
label="Country"
|
||||
hint="Select your country for shipping calculations"
|
||||
class="wa-visually-hidden-hint"
|
||||
style="margin-block-end: 1rem;"
|
||||
>
|
||||
<wa-option value="us">United States</wa-option>
|
||||
<wa-option value="ca">Canada</wa-option>
|
||||
<wa-option value="mx">Mexico</wa-option>
|
||||
<wa-option value="uk">United Kingdom</wa-option>
|
||||
<wa-option value="de">Germany</wa-option>
|
||||
<wa-option value="fr">France</wa-option>
|
||||
<wa-option value="wakanda">Wakanda</wa-option>
|
||||
<wa-option value="genovia">Genovia</wa-option>
|
||||
<wa-option value="elbonia">Elbonia</wa-option>
|
||||
<wa-icon slot="start" name="globe" variant="regular"></wa-icon>
|
||||
</wa-select>
|
||||
|
||||
<wa-input
|
||||
label="Email Address"
|
||||
type="email"
|
||||
hint="We'll never share your email or secret identity"
|
||||
placeholder="e.g. miles.morales@brooklynvisions.edu"
|
||||
class="wa-visually-hidden-label wa-visually-hidden-hint"
|
||||
>
|
||||
<wa-icon slot="start" name="envelope" variant="regular"></wa-icon>
|
||||
</wa-input>
|
||||
```
|
||||
|
||||
### Force Visually Hidden
|
||||
|
||||
There are cases where you want to _always_ visually hide certain content, even when it's focused.
|
||||
|
||||
@@ -91,7 +91,7 @@ layout: false
|
||||
<div class="showcase-examples">
|
||||
<wa-card>
|
||||
<div slot="header" class="wa-split">
|
||||
<h3 class="wa-heading-l">Your Cart</h3>
|
||||
<h3 class="wa-heading-m">Your Cart</h3>
|
||||
<wa-button appearance="plain" size="small" tabindex="-1">
|
||||
<wa-icon name="xmark" label="Close"></wa-icon>
|
||||
</wa-button>
|
||||
@@ -109,7 +109,7 @@ layout: false
|
||||
<strong>Initiate Saber</strong>
|
||||
<strong>$179.99</strong>
|
||||
</div>
|
||||
<div class="wa-split wa-gap-2xs wa-caption-s">
|
||||
<div class="wa-split wa-gap-2xs wa-caption-m">
|
||||
<span>Green</span>
|
||||
<a href="#" tabindex="-1">Remove</a>
|
||||
</div>
|
||||
@@ -128,7 +128,7 @@ layout: false
|
||||
<strong>Repair Droid</strong>
|
||||
<strong>$3,049.99</strong>
|
||||
</div>
|
||||
<div class="wa-split wa-gap-2xs wa-caption-s">
|
||||
<div class="wa-split wa-gap-2xs wa-caption-m">
|
||||
<span>R-series</span>
|
||||
<a href="#" tabindex="-1">Remove</a>
|
||||
</div>
|
||||
@@ -140,7 +140,7 @@ layout: false
|
||||
<strong>Subtotal</strong>
|
||||
<strong>$3,229.98</strong>
|
||||
</div>
|
||||
<span class="wa-caption-s">Shipping and taxes calculated at checkout.</span>
|
||||
<span class="wa-caption-m">Shipping and taxes calculated at checkout.</span>
|
||||
<wa-button tabindex="-1" variant="brand">
|
||||
<wa-icon slot="start" name="shopping-bag"></wa-icon>
|
||||
Checkout
|
||||
@@ -158,7 +158,7 @@ layout: false
|
||||
</wa-card>
|
||||
<wa-card>
|
||||
<div class="wa-stack">
|
||||
<h3 class="wa-heading-l">Sign In</h3>
|
||||
<h3 class="wa-heading-m">Sign In</h3>
|
||||
<wa-input tabindex="-1" label="Email" placeholder="ddjarin@mandalore.gov" inert>
|
||||
<wa-icon slot="start" name="envelope" variant="regular"></wa-icon>
|
||||
</wa-input>
|
||||
@@ -172,7 +172,7 @@ layout: false
|
||||
<wa-card>
|
||||
<div class="wa-stack">
|
||||
<div class="wa-split">
|
||||
<h3 class="wa-heading-l">To-Do</h3>
|
||||
<h3 class="wa-heading-m">To-Do</h3>
|
||||
<wa-button appearance="plain" size="small" tabindex="-1">
|
||||
<wa-icon name="plus" label="Add task"></wa-icon>
|
||||
</wa-button>
|
||||
@@ -198,7 +198,7 @@ layout: false
|
||||
<strong>The Stone Troll</strong>
|
||||
<small><wa-badge variant="neutral" appearance="filled">E</wa-badge></small>
|
||||
</div>
|
||||
<span class="wa-caption-s">Samwise G</span>
|
||||
<span class="wa-caption-m">Samwise G</span>
|
||||
</div>
|
||||
<wa-button appearance="plain" size="small" tabindex="-1">
|
||||
<wa-icon name="ellipsis" label="Options"></wa-icon>
|
||||
@@ -207,8 +207,8 @@ layout: false
|
||||
<div class="wa-stack wa-gap-2xs">
|
||||
<wa-progress-bar value="34"></wa-progress-bar>
|
||||
<div class="wa-split">
|
||||
<span class="wa-caption-2xs">1:01</span>
|
||||
<span class="wa-caption-2xs">-1:58</span>
|
||||
<span class="wa-caption-xs">1:01</span>
|
||||
<span class="wa-caption-xs">-1:58</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wa-grid wa-align-items-center" style="--min-column-size: 1em; justify-items: center">
|
||||
@@ -226,7 +226,7 @@ layout: false
|
||||
</wa-card>
|
||||
<wa-card>
|
||||
<div class="wa-stack">
|
||||
<h3 class="wa-heading-l">Chalmun's Spaceport Cantina</h3>
|
||||
<h3 class="wa-heading-m">Chalmun's Spaceport Cantina</h3>
|
||||
<div class="wa-cluster wa-gap-xs">
|
||||
<wa-rating value="4.6" readonly tabindex="-1"></wa-rating>
|
||||
<strong>4.6</strong>
|
||||
@@ -238,14 +238,14 @@ layout: false
|
||||
<wa-icon name="dollar" style="color: var(--wa-color-green-60)"></wa-icon>
|
||||
<wa-icon name="dollar" style="color: var(--wa-color-green-60)"></wa-icon>
|
||||
</div>
|
||||
<span class="wa-caption-s">•</span>
|
||||
<span class="wa-caption-m">•</span>
|
||||
<wa-tag size="small">Cocktail Bar</wa-tag>
|
||||
<wa-tag size="small">Gastropub</wa-tag>
|
||||
<wa-tag size="small">Local Fare</wa-tag>
|
||||
</div>
|
||||
<div class="wa-flank wa-gap-xs">
|
||||
<wa-icon name="location-dot"></wa-icon>
|
||||
<a href="#" class="wa-caption-s" tabindex="-1">Mos Eisley, Tatooine</a>
|
||||
<a href="#" class="wa-caption-m" tabindex="-1">Mos Eisley, Tatooine</a>
|
||||
</div>
|
||||
</div>
|
||||
</wa-card>
|
||||
@@ -283,7 +283,7 @@ layout: false
|
||||
<wa-card>
|
||||
<div class="wa-stack">
|
||||
<div class="wa-flank:end">
|
||||
<h3 id="odds-label" class="wa-heading-l">Tell Me the Odds</h3>
|
||||
<h3 id="odds-label" class="wa-heading-m">Tell Me the Odds</h3>
|
||||
<wa-switch size="large" aria-labelledby="odds-label" tabindex="-1"></wa-switch>
|
||||
</div>
|
||||
<p class="wa-body-s">
|
||||
@@ -296,10 +296,10 @@ layout: false
|
||||
<div class="wa-stack">
|
||||
<div class="wa-split wa-align-items-start">
|
||||
<dl class="wa-stack wa-gap-2xs">
|
||||
<dt class="wa-heading-m">Amount</dt>
|
||||
<dd class="wa-heading-xl">$5,610.00</dd>
|
||||
<dt class="wa-heading-s">Amount</dt>
|
||||
<dd class="wa-heading-l">$5,610.00</dd>
|
||||
</dl>
|
||||
<wa-badge appearance="filled-outlined" variant="success">Paid</wa-badge>
|
||||
<wa-badge appearance="filled outlined" variant="success">Paid</wa-badge>
|
||||
</div>
|
||||
<wa-divider></wa-divider>
|
||||
<dl class="wa-stack">
|
||||
@@ -327,37 +327,37 @@ layout: false
|
||||
<wa-card>
|
||||
<div class="wa-stack">
|
||||
<div class="wa-split">
|
||||
<div class="wa-cluster wa-heading-xl">
|
||||
<div class="wa-cluster wa-heading-l">
|
||||
<wa-icon name="book-sparkles"></wa-icon>
|
||||
<h3>Fellowship</h3>
|
||||
</div>
|
||||
<wa-badge>Most Popular</wa-badge>
|
||||
</div>
|
||||
<span class="wa-flank wa-align-items-baseline wa-gap-2xs">
|
||||
<span class="wa-heading-3xl">$120</span>
|
||||
<span class="wa-caption-m">per year</span>
|
||||
<span class="wa-heading-2xl">$120</span>
|
||||
<span class="wa-caption-l">per year</span>
|
||||
</span>
|
||||
<p class="wa-caption-m">Carry great power (and great responsibility).</p>
|
||||
<p class="wa-caption-l">Carry great power (and great responsibility).</p>
|
||||
<wa-button variant="brand" tabindex="-1">Get this Plan</wa-button>
|
||||
</div>
|
||||
<div slot="footer" class="wa-stack wap-gap-s">
|
||||
<h4 class="wa-heading-m">What You Get</h4>
|
||||
<h4 class="wa-heading-s">What You Get</h4>
|
||||
<div class="wa-stack">
|
||||
<div class="wa-flank">
|
||||
<wa-icon name="user"></wa-icon>
|
||||
<span class="wa-caption-s">9 users</span>
|
||||
<span class="wa-caption-m">9 users</span>
|
||||
</div>
|
||||
<div class="wa-flank">
|
||||
<wa-icon name="ring"></wa-icon>
|
||||
<span class="wa-caption-s">1 ring</span>
|
||||
<span class="wa-caption-m">1 ring</span>
|
||||
</div>
|
||||
<div class="wa-flank">
|
||||
<wa-icon name="chess-rook"></wa-icon>
|
||||
<span class="wa-caption-s">API access to Isengard</span>
|
||||
<span class="wa-caption-m">API access to Isengard</span>
|
||||
</div>
|
||||
<div class="wa-flank">
|
||||
<wa-icon name="feather"></wa-icon>
|
||||
<span class="wa-caption-s">Priority eagle support</span>
|
||||
<span class="wa-caption-m">Priority eagle support</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -377,10 +377,10 @@ layout: false
|
||||
<div class="wa-flank:end">
|
||||
<div class="wa-stack wa-gap-xs">
|
||||
<div class="wa-cluster wa-gap-xs">
|
||||
<h3 class="wa-heading-m">Migs Mayfeld</h3>
|
||||
<h3 class="wa-heading-s">Migs Mayfeld</h3>
|
||||
<wa-badge pill>Admin</wa-badge>
|
||||
</div>
|
||||
<span class="wa-caption-s">Imperial Sharpshooter</span>
|
||||
<span class="wa-caption-m">Imperial Sharpshooter</span>
|
||||
</div>
|
||||
<wa-avatar
|
||||
image="https://images.unsplash.com/photo-1633268335280-a41fbde58707?q=80&w=3348&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
|
||||
@@ -408,8 +408,8 @@ layout: false
|
||||
<wa-icon slot="icon" name="egg-fried"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-gap-2xs wa-stack">
|
||||
<span class="wa-heading-m">Second Breakfast</span>
|
||||
<span class="wa-caption-s">19 Items</span>
|
||||
<span class="wa-heading-s">Second Breakfast</span>
|
||||
<span class="wa-caption-m">19 Items</span>
|
||||
</div>
|
||||
</a>
|
||||
<wa-dropdown>
|
||||
@@ -425,10 +425,10 @@ layout: false
|
||||
</wa-card>
|
||||
<wa-card with-header with-footer>
|
||||
<div slot="header" class="wa-stack wa-gap-xs">
|
||||
<h2 class="wa-heading-l">Decks</h2>
|
||||
<h2 class="wa-heading-m">Decks</h2>
|
||||
</div>
|
||||
<div class="wa-stack wa-gap-xl">
|
||||
<p class="wa-caption-s">
|
||||
<p class="wa-caption-m">
|
||||
You haven't created any decks yet. Get started by selecting an aspect that matches your play style.
|
||||
</p>
|
||||
<div class="wa-grid wa-gap-xl" style="--min-column-size: 30ch">
|
||||
@@ -440,10 +440,10 @@ layout: false
|
||||
<wa-icon slot="icon" name="shield"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-stack wa-gap-2xs">
|
||||
<span class="wa-align-items-center wa-cluster wa-gap-xs wa-heading-m">
|
||||
<span class="wa-align-items-center wa-cluster wa-gap-xs wa-heading-s">
|
||||
Vigilance <wa-icon name="arrow-right"></wa-icon>
|
||||
</span>
|
||||
<p class="wa-caption-s">Protect, defend, and restore as you ready heavy-hitters.</p>
|
||||
<p class="wa-caption-m">Protect, defend, and restore as you ready heavy-hitters.</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="" class="wa-flank wa-align-items-start wa-link-plain" tabindex="-1">
|
||||
@@ -454,10 +454,10 @@ layout: false
|
||||
<wa-icon slot="icon" name="chevrons-up"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-stack wa-gap-2xs">
|
||||
<span class="wa-align-items-center wa-cluster wa-gap-xs wa-heading-m">
|
||||
<span class="wa-align-items-center wa-cluster wa-gap-xs wa-heading-s">
|
||||
Command <wa-icon name="arrow-right"></wa-icon>
|
||||
</span>
|
||||
<p class="wa-caption-s">Build imposing armies and stockpile resources.</p>
|
||||
<p class="wa-caption-m">Build imposing armies and stockpile resources.</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="" class="wa-flank wa-align-items-start wa-link-plain" tabindex="-1">
|
||||
@@ -468,10 +468,10 @@ layout: false
|
||||
<wa-icon slot="icon" name="explosion"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-stack wa-gap-2xs">
|
||||
<span class="wa-align-items-center wa-cluster wa-gap-xs wa-heading-m">
|
||||
<span class="wa-align-items-center wa-cluster wa-gap-xs wa-heading-s">
|
||||
Aggression <wa-icon name="arrow-right"></wa-icon>
|
||||
</span>
|
||||
<p class="wa-caption-s">Relentlessly deal damage and apply pressure to your opponent.</p>
|
||||
<p class="wa-caption-m">Relentlessly deal damage and apply pressure to your opponent.</p>
|
||||
</div>
|
||||
</a>
|
||||
<a href="" class="wa-flank wa-align-items-start wa-link-plain" tabindex="-1">
|
||||
@@ -482,10 +482,10 @@ layout: false
|
||||
<wa-icon slot="icon" name="moon-stars"></wa-icon>
|
||||
</wa-avatar>
|
||||
<div class="wa-stack wa-gap-2xs">
|
||||
<span class="wa-align-items-center wa-cluster wa-gap-xs wa-heading-m">
|
||||
<span class="wa-align-items-center wa-cluster wa-gap-xs wa-heading-s">
|
||||
Cunning <wa-icon name="arrow-right"></wa-icon>
|
||||
</span>
|
||||
<p class="wa-caption-s">Disrupt and frustrate your opponent with dastardly tricks.</p>
|
||||
<p class="wa-caption-m">Disrupt and frustrate your opponent with dastardly tricks.</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -182,6 +182,25 @@ layout: page
|
||||
}
|
||||
}
|
||||
}
|
||||
.beta-notice {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
& > * {
|
||||
flex-basis: calc(((30ch * 2 + 1rem) - 100%) * 999);
|
||||
}
|
||||
& > * {
|
||||
flex-grow: 2;
|
||||
}
|
||||
& > * + * {
|
||||
flex-grow: 1;
|
||||
}
|
||||
& wa-callout,
|
||||
& wa-button::part(base) {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
wa-button.tile::part(base) {
|
||||
border-color: var(--wa-color-surface-border);
|
||||
border-radius: 0.75rem;
|
||||
@@ -236,24 +255,13 @@ layout: page
|
||||
<div class="hero-cta">
|
||||
{%- raw -%}
|
||||
{% if currentUser.hasPro %}
|
||||
<span class="wa-font-size-l" style="text-align: center; width: 100%;">Thanks for being a Web Awesome Pro subscriber!</span>
|
||||
<span style="text-align: center; width: 100%; font-size: var(--wa-font-size-l);">Thanks for being a Web Awesome Pro subscriber!</span>
|
||||
{% else %}
|
||||
{% if App.flags.stripeEnabled %}
|
||||
<div class="wa-stack wa-gap-xs">
|
||||
<h3 class="wa-heading-m">Get More with Web Awesome Pro!</h3>
|
||||
<p>Unlock Pro-only themes, components, patterns, and great services like the Theme Builder.</p>
|
||||
</div>
|
||||
<wa-button class="wa-dark" size="small" href="/purchase">
|
||||
<wa-icon slot="start" name="rocket-launch"></wa-icon>
|
||||
Purchase Pro
|
||||
</wa-button>
|
||||
{% else %}
|
||||
<span><em>Psst!</em> You can pre-order Web Awesome Pro at a low, guaranteed-for-life price — but not for long. Get in while the gettin’s good.</span>
|
||||
<wa-button class="wa-dark" size="small" href="https://www.kickstarter.com/projects/fontawesome/web-awesome">
|
||||
<wa-icon slot="start" name="person-running"></wa-icon>
|
||||
Pre-order WA Pro
|
||||
</wa-button>
|
||||
{% endif %}
|
||||
<span><em>Psst!</em> You can pre-order Web Awesome Pro at a low, guaranteed-for-life price — but not for long. Get in while the gettin’s good.</span>
|
||||
<wa-button class="wa-dark" size="small" href="https://www.kickstarter.com/projects/fontawesome/web-awesome">
|
||||
<wa-icon slot="start" name="person-running"></wa-icon>
|
||||
Pre-order WA Pro
|
||||
</wa-button>
|
||||
{% endif %}
|
||||
{% endraw %}
|
||||
</div>
|
||||
@@ -261,18 +269,33 @@ layout: page
|
||||
</div>
|
||||
|
||||
<div class="home-wrapper">
|
||||
<wa-button href="/docs/" appearance="outlined" class="tile">
|
||||
<div class="wa-stack">
|
||||
<div class="wa-split">
|
||||
<div class="wa-cluster icon-heading">
|
||||
<wa-icon name="pen-ruler" class="brand-orange"></wa-icon>
|
||||
<h3>Get started</h3>
|
||||
<div class="beta-notice">
|
||||
<div>
|
||||
<wa-callout variant="brand">
|
||||
<div class="wa-stack">
|
||||
<div class="wa-cluster icon-heading">
|
||||
<wa-icon name="sparkles" variant="regular"></wa-icon>
|
||||
<h3>Bigger and beta than ever</h3>
|
||||
</div>
|
||||
<p>This beta is battle-tested and built to last, but if you see something, say something. Please <a href="https://github.com/shoelace-style/webawesome/issues">report bugs</a> or <a href="https://github.com/shoelace-style/webawesome/discussions">ask for help</a>!</p>
|
||||
</div>
|
||||
<wa-icon name="arrow-right"></wa-icon>
|
||||
</div>
|
||||
<p>Check out our installation guide to start building with Web Awesome.</p>
|
||||
</wa-callout>
|
||||
</div>
|
||||
</wa-button>
|
||||
<div>
|
||||
<wa-button href="/docs/" appearance="outlined" class="tile">
|
||||
<div class="wa-stack">
|
||||
<div class="wa-split">
|
||||
<div class="wa-cluster icon-heading">
|
||||
<wa-icon name="pen-ruler" class="brand-orange"></wa-icon>
|
||||
<h3>Get started</h3>
|
||||
</div>
|
||||
<wa-icon name="arrow-right"></wa-icon>
|
||||
</div>
|
||||
<p>Check out our installation guide to start building with Web Awesome.</p>
|
||||
</div>
|
||||
</wa-button>
|
||||
</div>
|
||||
</div>
|
||||
<wa-divider></wa-divider>
|
||||
<div class="summary">
|
||||
<h2 class="brand-font">What's <span class="emphasis">Web</span> Awesome?</h2>
|
||||
@@ -362,7 +385,7 @@ layout: page
|
||||
<wa-icon name="hashtag" style="color: var(--wa-brand-orange);"></wa-icon>
|
||||
<span>Stay in the know</span>
|
||||
</h2>
|
||||
<div class="wa-grid" style="--min-column-size: 30ch;">
|
||||
<div class="wa-grid">
|
||||
<wa-button href="https://bsky.app/profile/webawesome.com" rel="noopener noreferrer" target="_blank" appearance="filled" class="tile">
|
||||
<div class="wa-split">
|
||||
<div class="wa-cluster icon-heading">
|
||||
@@ -372,15 +395,6 @@ layout: page
|
||||
<wa-icon name="arrow-up-right"></wa-icon>
|
||||
</div>
|
||||
</wa-button>
|
||||
<wa-button href="https://mastodon.social/@webawesome" rel="noopener noreferrer" target="_blank" appearance="filled" class="tile">
|
||||
<div class="wa-split">
|
||||
<div class="wa-cluster icon-heading">
|
||||
<wa-icon family="brands" name="mastodon"></wa-icon>
|
||||
<h3>Mastodon</h3>
|
||||
</div>
|
||||
<wa-icon name="arrow-up-right"></wa-icon>
|
||||
</div>
|
||||
</wa-button>
|
||||
<wa-button href="https://x.com/webawesomer" rel="noopener noreferrer" target="_blank" appearance="filled" class="tile">
|
||||
<div class="wa-split">
|
||||
<div class="wa-cluster icon-heading">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"access": "public"
|
||||
},
|
||||
"description": "A forward-thinking library of web components.",
|
||||
"version": "3.0.0-beta.6",
|
||||
"version": "3.0.0-beta.5",
|
||||
"homepage": "https://webawesome.com/",
|
||||
"author": "Web Awesome",
|
||||
"license": "MIT",
|
||||
@@ -73,7 +73,7 @@
|
||||
"node": ">=14.17.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ctrl/tinycolor": "4.1.0",
|
||||
"@ctrl/tinycolor": "^4.1.0",
|
||||
"@floating-ui/dom": "^1.6.13",
|
||||
"@lit/react": "^1.0.8",
|
||||
"@shoelace-style/animations": "^1.2.0",
|
||||
@@ -81,7 +81,8 @@
|
||||
"composed-offset-position": "^0.0.6",
|
||||
"lit": "^3.2.1",
|
||||
"nanoid": "^5.1.5",
|
||||
"qr-creator": "^1.0.0"
|
||||
"qr-creator": "^1.0.0",
|
||||
"style-observer": "^0.0.7"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{ts,js}": [
|
||||
@@ -89,7 +90,6 @@
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@wc-toolkit/jsx-types": "^1.3.0",
|
||||
"eleventy-plugin-git-commit-date": "^0.1.3"
|
||||
"@wc-toolkit/jsx-types": "^1.3.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@ import { getCdnDir, getDistDir, getDocsDir, getRootDir, getSiteDir } from './uti
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const currentYear = new Date().getFullYear();
|
||||
const spinner = ora({ text: 'Web Awesome', color: 'cyan' }).start();
|
||||
const getPackageData = async () => JSON.parse(await readFile(join(getRootDir(), 'package.json'), 'utf-8'));
|
||||
const getVersion = async () => JSON.stringify((await getPackageData()).version.toString());
|
||||
@@ -226,9 +225,6 @@ export async function build(options = {}) {
|
||||
bundle: true,
|
||||
splitting: true,
|
||||
minify: false,
|
||||
banner: {
|
||||
js: `/*! Copyright ${currentYear} Fonticons, Inc. - https://webawesome.com/license */`,
|
||||
},
|
||||
plugins: [replace({ __WEBAWESOME_VERSION__: await getVersion() })],
|
||||
loader: {
|
||||
'.css': 'text',
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
}
|
||||
|
||||
/* Appearance modifiers */
|
||||
:host([appearance='outlined']) {
|
||||
:host([appearance~='outlined']) {
|
||||
--pulse-color: var(--wa-color-border-loud, var(--wa-color-brand-border-loud));
|
||||
|
||||
color: var(--wa-color-on-quiet, var(--wa-color-brand-on-quiet));
|
||||
@@ -29,7 +29,7 @@
|
||||
border-color: var(--wa-color-border-loud, var(--wa-color-brand-border-loud));
|
||||
}
|
||||
|
||||
:host([appearance='filled']) {
|
||||
:host([appearance~='filled']) {
|
||||
--pulse-color: var(--wa-color-fill-normal, var(--wa-color-brand-fill-normal));
|
||||
|
||||
color: var(--wa-color-on-normal, var(--wa-color-brand-on-normal));
|
||||
@@ -37,15 +37,13 @@
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
:host([appearance='filled-outlined']) {
|
||||
:host([appearance~='filled'][appearance~='outlined']) {
|
||||
--pulse-color: var(--wa-color-border-normal, var(--wa-color-brand-border-normal));
|
||||
|
||||
color: var(--wa-color-on-normal, var(--wa-color-brand-on-normal));
|
||||
background-color: var(--wa-color-fill-normal, var(--wa-color-brand-fill-normal));
|
||||
border-color: var(--wa-color-border-normal, var(--wa-color-brand-border-normal));
|
||||
}
|
||||
|
||||
:host([appearance='accent']) {
|
||||
:host([appearance~='accent']) {
|
||||
--pulse-color: var(--wa-color-fill-loud, var(--wa-color-brand-fill-loud));
|
||||
|
||||
color: var(--wa-color-on-loud, var(--wa-color-brand-on-loud));
|
||||
|
||||
@@ -25,7 +25,7 @@ export default class WaBadge extends WebAwesomeElement {
|
||||
@property({ reflect: true }) variant: 'brand' | 'neutral' | 'success' | 'warning' | 'danger' = 'brand';
|
||||
|
||||
/** The badge's visual appearance. */
|
||||
@property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' | 'filled-outlined' = 'accent';
|
||||
@property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' = 'accent';
|
||||
|
||||
/** Draws a pill-style badge with rounded edges. */
|
||||
@property({ type: Boolean, reflect: true }) pill = false;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
display: inline-block;
|
||||
|
||||
/* Workaround because Chrome doesn't like :host(:has()) below
|
||||
* https://issues.chromium.org/issues/40062355
|
||||
* https://issues.chromium.org/issues/40062355
|
||||
* Firefox doesn't like this nested rule, so both are needed */
|
||||
&:has(wa-badge) {
|
||||
position: relative;
|
||||
@@ -47,7 +47,7 @@
|
||||
}
|
||||
|
||||
/* Appearance modifiers */
|
||||
:host([appearance='plain']) {
|
||||
:host([appearance~='plain']) {
|
||||
.button {
|
||||
color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
|
||||
background-color: transparent;
|
||||
@@ -69,7 +69,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
:host([appearance='outlined']) {
|
||||
:host([appearance~='outlined']) {
|
||||
.button {
|
||||
color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
|
||||
background-color: transparent;
|
||||
@@ -91,7 +91,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
:host([appearance='filled']) {
|
||||
:host([appearance~='filled']) {
|
||||
.button {
|
||||
color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal));
|
||||
background-color: var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal));
|
||||
@@ -117,33 +117,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
:host([appearance='filled-outlined']) {
|
||||
.button {
|
||||
color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal));
|
||||
background-color: var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal));
|
||||
border-color: var(--wa-color-border-normal, var(--wa-color-neutral-border-normal));
|
||||
}
|
||||
@media (hover: hover) {
|
||||
.button:not(.disabled):not(.loading):hover {
|
||||
color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal));
|
||||
background-color: color-mix(
|
||||
in oklab,
|
||||
var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal)),
|
||||
var(--wa-color-mix-hover)
|
||||
);
|
||||
}
|
||||
}
|
||||
.button:not(.disabled):not(.loading):active {
|
||||
color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal));
|
||||
background-color: color-mix(
|
||||
in oklab,
|
||||
var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal)),
|
||||
var(--wa-color-mix-active)
|
||||
);
|
||||
}
|
||||
:host([appearance~='filled'][appearance~='outlined']) .button {
|
||||
border-color: var(--wa-color-border-normal, var(--wa-color-neutral-border-normal));
|
||||
}
|
||||
|
||||
:host([appearance='accent']) {
|
||||
:host([appearance~='accent']) {
|
||||
.button {
|
||||
color: var(--wa-color-on-loud, var(--wa-color-neutral-on-loud));
|
||||
background-color: var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud));
|
||||
@@ -200,10 +178,6 @@
|
||||
aspect-ratio: 1;
|
||||
}
|
||||
|
||||
.button.is-icon-button:has(wa-icon) {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* Pill modifier */
|
||||
:host([pill]) .button {
|
||||
border-radius: var(--wa-border-radius-pill);
|
||||
@@ -237,7 +211,7 @@
|
||||
* Caret modifier
|
||||
*/
|
||||
|
||||
wa-icon[part='caret'] {
|
||||
wa-icon[part~='caret'] {
|
||||
display: flex;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
@@ -284,7 +258,7 @@ wa-icon[part='caret'] {
|
||||
* Badges
|
||||
*/
|
||||
|
||||
.button ::slotted(wa-badge) {
|
||||
button ::slotted(wa-badge) {
|
||||
border-color: var(--wa-color-surface-default);
|
||||
position: absolute;
|
||||
inset-block-start: 0;
|
||||
@@ -306,7 +280,7 @@ slot[name='start']::slotted(*) {
|
||||
}
|
||||
|
||||
slot[name='end']::slotted(*),
|
||||
.button:not(.visually-hidden-label) [part='caret'] {
|
||||
.button:not(.visually-hidden-label) [part~='caret'] {
|
||||
margin-inline-start: 0.75em;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import sizeStyles from '../../styles/utilities/size.css';
|
||||
import variantStyles from '../../styles/utilities/variants.css';
|
||||
import { LocalizeController } from '../../utilities/localize.js';
|
||||
import '../icon/icon.js';
|
||||
import type WaIcon from '../icon/icon.js';
|
||||
import '../spinner/spinner.js';
|
||||
import styles from './button.css';
|
||||
|
||||
@@ -41,7 +40,6 @@ import styles from './button.css';
|
||||
*/
|
||||
@customElement('wa-button')
|
||||
export default class WaButton extends WebAwesomeFormAssociatedElement {
|
||||
static shadowRootOptions = { ...WebAwesomeFormAssociatedElement.shadowRootOptions, delegatesFocus: true };
|
||||
static css = [styles, variantStyles, sizeStyles];
|
||||
|
||||
static get validators() {
|
||||
@@ -64,7 +62,7 @@ export default class WaButton extends WebAwesomeFormAssociatedElement {
|
||||
@property({ reflect: true }) variant: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' = 'neutral';
|
||||
|
||||
/** The button's visual appearance. */
|
||||
@property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' | 'filled-outlined' | 'plain' = 'accent';
|
||||
@property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' | 'plain' = 'accent';
|
||||
|
||||
/** The button's size. */
|
||||
@property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';
|
||||
@@ -177,32 +175,22 @@ export default class WaButton extends WebAwesomeFormAssociatedElement {
|
||||
const nodes = this.labelSlot.assignedNodes({ flatten: true });
|
||||
let hasIconLabel = false;
|
||||
let hasIcon = false;
|
||||
let hasText = false;
|
||||
let hasOtherElements = false;
|
||||
let text = '';
|
||||
|
||||
// Check all slotted nodes
|
||||
// If there's only an icon and no text, it's an icon button
|
||||
[...nodes].forEach(node => {
|
||||
if (node.nodeType === Node.ELEMENT_NODE) {
|
||||
const element = node as HTMLElement;
|
||||
if (node.nodeType === Node.ELEMENT_NODE && (node as HTMLElement).localName === 'wa-icon') {
|
||||
hasIcon = true;
|
||||
if (!hasIconLabel) hasIconLabel = (node as HTMLElement).hasAttribute('label');
|
||||
}
|
||||
|
||||
if (element.localName === 'wa-icon') {
|
||||
hasIcon = true;
|
||||
if (!hasIconLabel) hasIconLabel = (element as WaIcon).label !== undefined;
|
||||
} else {
|
||||
// Any other element type means it's not an icon button
|
||||
hasOtherElements = true;
|
||||
}
|
||||
} else if (node.nodeType === Node.TEXT_NODE) {
|
||||
// Check if text node has actual content
|
||||
const text = node.textContent?.trim() || '';
|
||||
if (text.length > 0) {
|
||||
hasText = true;
|
||||
}
|
||||
// Concatenate text nodes
|
||||
if (node.nodeType === Node.TEXT_NODE) {
|
||||
text += node.textContent;
|
||||
}
|
||||
});
|
||||
|
||||
// It's only an icon button if there's an icon and nothing else
|
||||
this.isIconButton = hasIcon && !hasText && !hasOtherElements;
|
||||
this.isIconButton = text.trim() === '' && hasIcon;
|
||||
|
||||
if (this.isIconButton && !hasIconLabel) {
|
||||
console.warn(
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
:host([appearance~='filled-outlined']) {
|
||||
:host([appearance~='filled'][appearance~='outlined']) {
|
||||
border-color: var(--wa-color-border-quiet, var(--wa-color-brand-border-quiet));
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import styles from './callout.css';
|
||||
* @summary Callouts are used to display important messages inline.
|
||||
* @documentation https://webawesome.com/docs/components/callout
|
||||
* @status stable
|
||||
* @since 3.0
|
||||
* @since 2.0
|
||||
*
|
||||
* @slot - The callout's main content.
|
||||
* @slot icon - An icon to show in the callout. Works best with `<wa-icon>`.
|
||||
@@ -25,7 +25,8 @@ export default class WaCallout extends WebAwesomeElement {
|
||||
@property({ reflect: true }) variant: 'brand' | 'neutral' | 'success' | 'warning' | 'danger' = 'brand';
|
||||
|
||||
/** The callout's visual appearance. */
|
||||
@property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' | 'plain' | 'filled-outlined';
|
||||
@property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' | 'plain' | 'outlined filled' =
|
||||
'outlined filled';
|
||||
|
||||
/** The callout's size. */
|
||||
@property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';
|
||||
|
||||
@@ -21,7 +21,7 @@ describe('<wa-checkbox>', () => {
|
||||
const el = await fixture<WaCheckbox>(html` <wa-checkbox></wa-checkbox> `);
|
||||
|
||||
expect(el.name).to.equal('');
|
||||
expect(el.value).to.equal(null);
|
||||
expect(el.value).to.equal('on');
|
||||
expect(el.title).to.equal('');
|
||||
expect(el.disabled).to.be.false;
|
||||
expect(el.required).to.be.false;
|
||||
@@ -134,7 +134,7 @@ describe('<wa-checkbox>', () => {
|
||||
await checkbox.updateComplete;
|
||||
|
||||
expect(checkbox.checked).to.equal(false);
|
||||
expect(checkbox.value).to.equal(null);
|
||||
expect(checkbox.value).to.equal('myvalue');
|
||||
expect(new FormData(form).get('test')).to.equal(null);
|
||||
|
||||
checkbox.checked = true;
|
||||
|
||||
@@ -80,8 +80,7 @@ export default class WaCheckbox extends WebAwesomeFormAssociatedElement {
|
||||
|
||||
/** The value of the checkbox, submitted as a name/value pair with form data. */
|
||||
get value(): string | null {
|
||||
const val = this._value || 'on';
|
||||
return this.checked ? val : null;
|
||||
return this._value ?? 'on';
|
||||
}
|
||||
|
||||
@property({ reflect: true })
|
||||
|
||||
@@ -6,6 +6,29 @@
|
||||
display: block;
|
||||
}
|
||||
|
||||
:host summary {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
cursor: pointer;
|
||||
|
||||
&::marker,
|
||||
&::-webkit-details-marker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: var(--wa-focus-ring);
|
||||
outline-offset: calc(var(--spacing) + var(--wa-focus-ring-offset));
|
||||
}
|
||||
}
|
||||
|
||||
details {
|
||||
display: block;
|
||||
overflow-anchor: none;
|
||||
@@ -26,42 +49,43 @@ details {
|
||||
}
|
||||
|
||||
/* Appearance modifiers */
|
||||
:host([appearance='plain']) details {
|
||||
:host([appearance~='plain']) details {
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
:host([appearance='outlined']) details {
|
||||
:host([appearance~='outlined']) details {
|
||||
background-color: var(--wa-color-surface-default);
|
||||
border-color: var(--wa-color-surface-border);
|
||||
}
|
||||
|
||||
:host([appearance='filled']) details {
|
||||
:host([appearance~='filled']) details {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
:host([appearance='filled-outlined']) details {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
:host([appearance~='filled'][appearance~='outlined']) details {
|
||||
border-color: var(--wa-color-neutral-border-quiet);
|
||||
}
|
||||
|
||||
:host([appearance='plain']) details {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
:host([disabled]) details {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
summary {
|
||||
:host summary {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: var(--spacing);
|
||||
padding: var(--spacing); /* Add padding here */
|
||||
border-radius: calc(var(--wa-panel-border-radius) - var(--wa-panel-border-width));
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
cursor: pointer;
|
||||
padding: var(--spacing); /* Add padding here */
|
||||
|
||||
&::marker,
|
||||
&::-webkit-details-marker {
|
||||
@@ -74,15 +98,10 @@ summary {
|
||||
|
||||
&:focus-visible {
|
||||
outline: var(--wa-focus-ring);
|
||||
outline-offset: calc(var(--wa-panel-border-width) + var(--wa-focus-ring-offset));
|
||||
outline-offset: calc(var(--spacing) + var(--wa-focus-ring-offset));
|
||||
}
|
||||
}
|
||||
|
||||
:host([open]) summary {
|
||||
border-end-start-radius: 0;
|
||||
border-end-end-radius: 0;
|
||||
}
|
||||
|
||||
/* 'Start' icon placement */
|
||||
:host([icon-placement='start']) summary {
|
||||
flex-direction: row-reverse;
|
||||
|
||||
@@ -24,13 +24,6 @@ describe('<wa-details>', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should reflect the name property', async () => {
|
||||
const el = await fixture<WaDetails>(html`<wa-details></wa-details>`);
|
||||
el.name = 'test';
|
||||
await el.updateComplete;
|
||||
expect(el.getAttribute('name')).to.equal('test');
|
||||
});
|
||||
|
||||
it('should be visible with the open attribute', async () => {
|
||||
const el = await fixture<WaDetails>(html`
|
||||
<wa-details open>
|
||||
|
||||
@@ -70,13 +70,13 @@ export default class WaDetails extends WebAwesomeElement {
|
||||
@property() summary: string;
|
||||
|
||||
/** Groups related details elements. When one opens, others with the same name will close. */
|
||||
@property({ reflect: true }) name: string;
|
||||
@property() name: string;
|
||||
|
||||
/** Disables the details so it can't be toggled. */
|
||||
@property({ type: Boolean, reflect: true }) disabled = false;
|
||||
|
||||
/** The element's visual appearance. */
|
||||
@property({ reflect: true }) appearance: 'filled' | 'outlined' | 'filled-outlined' | 'plain' = 'outlined';
|
||||
@property({ reflect: true }) appearance: 'filled' | 'outlined' | 'plain' = 'outlined';
|
||||
|
||||
/** The location of the expand/collapse icon. */
|
||||
@property({ attribute: 'icon-placement', reflect: true }) iconPlacement: 'start' | 'end' = 'end';
|
||||
|
||||
@@ -111,15 +111,6 @@
|
||||
padding: var(--spacing);
|
||||
overflow: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: var(--wa-focus-ring);
|
||||
outline-offset: var(--wa-focus-ring-offset);
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
|
||||
@@ -119,19 +119,6 @@ describe('<wa-dialog>', () => {
|
||||
expect(el.open).to.be.true;
|
||||
});
|
||||
|
||||
it('should not close when bubbled cancel event originates from within the drawer', async () => {
|
||||
const el = await fixture<WaDialog>(html` <wa-dialog open><input type="file" /></wa-dialog> `);
|
||||
const input = el.querySelector('input')!;
|
||||
|
||||
await clickOnElement(el); // Chromium wants the page to have been clicked prior to closing the dialog.
|
||||
const cancelEvent = new Event('cancel', { bubbles: true });
|
||||
input.dispatchEvent(cancelEvent);
|
||||
|
||||
await aTimeout(250);
|
||||
|
||||
expect(el.open).to.be.true;
|
||||
});
|
||||
|
||||
it('should allow initial focus to be set', async () => {
|
||||
const el = await fixture<WaDialog>(html` <wa-dialog><wa-input autofocus></wa-input></wa-dialog> `);
|
||||
const input = el.querySelector('wa-input')!;
|
||||
|
||||
@@ -37,7 +37,6 @@ import styles from './dialog.css';
|
||||
* behavior such as data loss.
|
||||
* @event wa-after-hide - Emitted after the dialog closes and all animations are complete.
|
||||
*
|
||||
* @csspart dialog - The dialog's internal `<dialog>` element.
|
||||
* @csspart header - The dialog's header. This element wraps the title and header actions.
|
||||
* @csspart header-actions - Optional actions to add to the header. Works best with `<wa-button>`.
|
||||
* @csspart title - The dialog's title.
|
||||
@@ -129,7 +128,7 @@ export default class WaDialog extends WebAwesomeElement {
|
||||
private handleDialogCancel(event: Event) {
|
||||
event.preventDefault();
|
||||
|
||||
if (!this.dialog.classList.contains('hide') && event.target === this.dialog) {
|
||||
if (!this.dialog.classList.contains('hide')) {
|
||||
this.requestClose(this.dialog);
|
||||
}
|
||||
}
|
||||
@@ -197,8 +196,6 @@ export default class WaDialog extends WebAwesomeElement {
|
||||
const elementToFocus = this.querySelector<HTMLButtonElement>('[autofocus]');
|
||||
if (elementToFocus && typeof elementToFocus.focus === 'function') {
|
||||
elementToFocus.focus();
|
||||
} else {
|
||||
this.dialog.focus();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -175,15 +175,6 @@
|
||||
padding: var(--spacing);
|
||||
overflow: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&:focus-visible {
|
||||
outline: var(--wa-focus-ring);
|
||||
outline-offset: var(--wa-focus-ring-offset);
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
|
||||
@@ -115,18 +115,6 @@ describe('<wa-drawer>', () => {
|
||||
expect(el.open).to.be.true;
|
||||
});
|
||||
|
||||
it('should not close when bubbled cancel event originates from within the drawer', async () => {
|
||||
const el = await fixture<WaDrawer>(html`<wa-drawer open><input type="file" /></wa-drawer>`);
|
||||
const input = el.querySelector('input')!;
|
||||
|
||||
const cancelEvent = new Event('cancel', { bubbles: true });
|
||||
input.dispatchEvent(cancelEvent);
|
||||
|
||||
await aTimeout(250);
|
||||
|
||||
expect(el.open).to.be.true;
|
||||
});
|
||||
|
||||
it('should allow initial focus to be set', async () => {
|
||||
const el = await fixture<WaDrawer>(html` <wa-drawer><wa-input autofocus></wa-input></wa-drawer> `);
|
||||
const input = el.querySelector('wa-input')!;
|
||||
|
||||
@@ -38,7 +38,6 @@ import styles from './drawer.css';
|
||||
* the drawer has been closed programmatically. Avoid using this unless closing the drawer will result in destructive
|
||||
* behavior such as data loss.
|
||||
*
|
||||
* @csspart dialog - The drawer's internal `<dialog>` element.
|
||||
* @csspart header - The drawer's header. This element wraps the title and header actions.
|
||||
* @csspart header-actions - Optional actions to add to the header. Works best with `<wa-button>`.
|
||||
* @csspart title - The drawer's title.
|
||||
@@ -141,7 +140,7 @@ export default class WaDrawer extends WebAwesomeElement {
|
||||
private handleDialogCancel(event: Event) {
|
||||
event.preventDefault();
|
||||
|
||||
if (!this.drawer.classList.contains('hide') && event.target === this.drawer) {
|
||||
if (!this.drawer.classList.contains('hide')) {
|
||||
this.requestClose(this.drawer);
|
||||
}
|
||||
}
|
||||
@@ -210,8 +209,6 @@ export default class WaDrawer extends WebAwesomeElement {
|
||||
const elementToFocus = this.querySelector<HTMLButtonElement>('[autofocus]');
|
||||
if (elementToFocus && typeof elementToFocus.focus === 'function') {
|
||||
elementToFocus.focus();
|
||||
} else {
|
||||
this.drawer.focus();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ export default class WaIcon extends WebAwesomeElement {
|
||||
@property({ reflect: true }) variant: string;
|
||||
|
||||
/** Sets the width of the icon to match the cropped SVG viewBox. This operates like the Font `fa-width-auto` class. */
|
||||
@property({ attribute: 'auto-width', type: Boolean, reflect: true }) autoWidth = false;
|
||||
@property({ attribute: 'auto-width', type: Boolean, reflect: true }) autoWidth: false;
|
||||
|
||||
/** Swaps the opacity of duotone icons. */
|
||||
@property({ attribute: 'swap-opacity', type: Boolean, reflect: true }) swapOpacity = false;
|
||||
|
||||
@@ -9,31 +9,31 @@ export const icons: { [key: string]: { [key: string]: string } } = {
|
||||
// Solid variant
|
||||
//
|
||||
solid: {
|
||||
check: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"/></svg>`,
|
||||
'chevron-down': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>`,
|
||||
'chevron-left': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z"/></svg>`,
|
||||
'chevron-right': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M311.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L243.2 256 73.9 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/></svg>`,
|
||||
circle: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z"/></svg>`,
|
||||
eyedropper: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M341.6 29.2l-101.6 101.6-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4 101.6-101.6c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6l0 42.4-26.6 39.9c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4l39.9-26.6 42.4 0c21.2 0 41.6-8.4 56.6-23.4l109.4-109.4-45.3-45.3-109.4 109.4c-3 3-7.1 4.7-11.3 4.7l-36.1 0 0-36.1c0-4.2 1.7-8.3 4.7-11.3l109.4-109.4-45.3-45.3-109.4 109.4z"/></svg>`,
|
||||
'grip-vertical': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M128 40c0-22.1-17.9-40-40-40L40 0C17.9 0 0 17.9 0 40L0 88c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zM0 424l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM320 40c0-22.1-17.9-40-40-40L232 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zM192 232l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM320 424c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48z"/></svg>`,
|
||||
check: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M434.8 70.1c14.3 10.4 17.5 30.4 7.1 44.7l-256 352c-5.5 7.6-14 12.3-23.4 13.1s-18.5-2.7-25.1-9.3l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l101.5 101.5 234-321.7c10.4-14.3 30.4-17.5 44.7-7.1z"/></svg>`,
|
||||
'chevron-down': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z"/></svg>`,
|
||||
'chevron-left': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256 246.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z"/></svg>`,
|
||||
'chevron-right': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M311.1 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L243.2 256 73.9 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z"/></svg>`,
|
||||
circle: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0z"/></svg>`,
|
||||
eyedropper: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M341.6 29.2l-101.6 101.6-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4 101.6-101.6c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6l0 42.4-26.6 39.9c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4l39.9-26.6 42.4 0c21.2 0 41.6-8.4 56.6-23.4l109.4-109.4-45.3-45.3-109.4 109.4c-3 3-7.1 4.7-11.3 4.7l-36.1 0 0-36.1c0-4.2 1.7-8.3 4.7-11.3l109.4-109.4-45.3-45.3-109.4 109.4z"/></svg>`,
|
||||
'grip-vertical': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M128 40c0-22.1-17.9-40-40-40L40 0C17.9 0 0 17.9 0 40L0 88c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zm0 192c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zM0 424l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM320 40c0-22.1-17.9-40-40-40L232 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48zM192 232l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40zM320 424c0-22.1-17.9-40-40-40l-48 0c-22.1 0-40 17.9-40 40l0 48c0 22.1 17.9 40 40 40l48 0c22.1 0 40-17.9 40-40l0-48z"/></svg>`,
|
||||
indeterminate: `<svg part="indeterminate-icon" class="icon" viewBox="0 0 16 16"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round"><g stroke="currentColor" stroke-width="2"><g transform="translate(2.285714 6.857143)"><path d="M10.2857143,1.14285714 L1.14285714,1.14285714"/></g></g></g></svg>`,
|
||||
minus: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32z"/></svg>`,
|
||||
pause: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48L48 32zm224 0c-26.5 0-48 21.5-48 48l0 352c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48l-64 0z"/></svg>`,
|
||||
play: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M91.2 36.9c-12.4-6.8-27.4-6.5-39.6 .7S32 57.9 32 72l0 368c0 14.1 7.5 27.2 19.6 34.4s27.2 7.5 39.6 .7l336-184c12.8-7 20.8-20.5 20.8-35.1s-8-28.1-20.8-35.1l-336-184z"/></svg>`,
|
||||
star: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M309.5-18.9c-4.1-8-12.4-13.1-21.4-13.1s-17.3 5.1-21.4 13.1L193.1 125.3 33.2 150.7c-8.9 1.4-16.3 7.7-19.1 16.3s-.5 18 5.8 24.4l114.4 114.5-25.2 159.9c-1.4 8.9 2.3 17.9 9.6 23.2s16.9 6.1 25 2L288.1 417.6 432.4 491c8 4.1 17.7 3.3 25-2s11-14.2 9.6-23.2L441.7 305.9 556.1 191.4c6.4-6.4 8.6-15.8 5.8-24.4s-10.1-14.9-19.1-16.3L383 125.3 309.5-18.9z"/></svg>`,
|
||||
user: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M224 248a120 120 0 1 0 0-240 120 120 0 1 0 0 240zm-29.7 56C95.8 304 16 383.8 16 482.3 16 498.7 29.3 512 45.7 512l356.6 0c16.4 0 29.7-13.3 29.7-29.7 0-98.5-79.8-178.3-178.3-178.3l-59.4 0z"/></svg>`,
|
||||
xmark: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"/></svg>`,
|
||||
minus: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32z"/></svg>`,
|
||||
pause: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M48 32C21.5 32 0 53.5 0 80L0 432c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48L48 32zm224 0c-26.5 0-48 21.5-48 48l0 352c0 26.5 21.5 48 48 48l64 0c26.5 0 48-21.5 48-48l0-352c0-26.5-21.5-48-48-48l-64 0z"/></svg>`,
|
||||
play: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M91.2 36.9c-12.4-6.8-27.4-6.5-39.6 .7S32 57.9 32 72l0 368c0 14.1 7.5 27.2 19.6 34.4s27.2 7.5 39.6 .7l336-184c12.8-7 20.8-20.5 20.8-35.1s-8-28.1-20.8-35.1l-336-184z"/></svg>`,
|
||||
star: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M309.5-18.9c-4.1-8-12.4-13.1-21.4-13.1s-17.3 5.1-21.4 13.1L193.1 125.3 33.2 150.7c-8.9 1.4-16.3 7.7-19.1 16.3s-.5 18 5.8 24.4l114.4 114.5-25.2 159.9c-1.4 8.9 2.3 17.9 9.6 23.2s16.9 6.1 25 2L288.1 417.6 432.4 491c8 4.1 17.7 3.3 25-2s11-14.2 9.6-23.2L441.7 305.9 556.1 191.4c6.4-6.4 8.6-15.8 5.8-24.4s-10.1-14.9-19.1-16.3L383 125.3 309.5-18.9z"/></svg>`,
|
||||
user: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M224 248a120 120 0 1 0 0-240 120 120 0 1 0 0 240zm-29.7 56C95.8 304 16 383.8 16 482.3 16 498.7 29.3 512 45.7 512l356.6 0c16.4 0 29.7-13.3 29.7-29.7 0-98.5-79.8-178.3-178.3-178.3l-59.4 0z"/></svg>`,
|
||||
xmark: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M55.1 73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L147.2 256 9.9 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192.5 301.3 329.9 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.8 256 375.1 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192.5 210.7 55.1 73.4z"/></svg>`,
|
||||
},
|
||||
//
|
||||
// Regular variant
|
||||
//
|
||||
regular: {
|
||||
'circle-question': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M464 256a208 208 0 1 0 -416 0 208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm256-80c-17.7 0-32 14.3-32 32 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 47.2-36 67.2-56 74.5l0 3.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8.1c0-20.5 14.8-35.2 30.1-40.2 6.4-2.1 13.2-5.5 18.2-10.3 4.3-4.2 7.7-10 7.7-19.6 0-17.7-14.3-32-32-32zM224 368a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/></svg>`,
|
||||
'circle-xmark': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM167 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z"/></svg>`,
|
||||
copy: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M384 336l-192 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l133.5 0c4.2 0 8.3 1.7 11.3 4.7l58.5 58.5c3 3 4.7 7.1 4.7 11.3L400 320c0 8.8-7.2 16-16 16zM192 384l192 0c35.3 0 64-28.7 64-64l0-197.5c0-17-6.7-33.3-18.7-45.3L370.7 18.7C358.7 6.7 342.5 0 325.5 0L192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-16-48 0 0 16c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l16 0 0-48-16 0z"/></svg>`,
|
||||
eye: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M288 80C222.8 80 169.2 109.6 128.1 147.7 89.6 183.5 63 226 49.4 256 63 286 89.6 328.5 128.1 364.3 169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256 513 226 486.4 183.5 447.9 147.7 406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1 3.3 7.9 3.3 16.7 0 24.6-14.9 35.7-46.2 87.7-93 131.1-47.1 43.7-111.8 80.6-192.6 80.6S142.5 443.2 95.4 399.4c-46.8-43.5-78.1-95.4-93-131.1-3.3-7.9-3.3-16.7 0-24.6 14.9-35.7 46.2-87.7 93-131.1zM288 336c44.2 0 80-35.8 80-80 0-29.6-16.1-55.5-40-69.3-1.4 59.7-49.6 107.9-109.3 109.3 13.8 23.9 39.7 40 69.3 40zm-79.6-88.4c2.5 .3 5 .4 7.6 .4 35.3 0 64-28.7 64-64 0-2.6-.2-5.1-.4-7.6-37.4 3.9-67.2 33.7-71.1 71.1zm45.6-115c10.8-3 22.2-4.5 33.9-4.5 8.8 0 17.5 .9 25.8 2.6 .3 .1 .5 .1 .8 .2 57.9 12.2 101.4 63.7 101.4 125.2 0 70.7-57.3 128-128 128-61.6 0-113-43.5-125.2-101.4-1.8-8.6-2.8-17.5-2.8-26.6 0-11 1.4-21.8 4-32 .2-.7 .3-1.3 .5-1.9 11.9-43.4 46.1-77.6 89.5-89.5z"/></svg>`,
|
||||
'eye-slash': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-96.4-96.4c2.7-2.4 5.4-4.8 8-7.2 46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6-56.8 0-105.6 18.2-146 44.2L41-24.9zM176.9 111.1c32.1-18.9 69.2-31.1 111.1-31.1 65.2 0 118.8 29.6 159.9 67.7 38.5 35.7 65.1 78.3 78.6 108.3-13.6 30-40.2 72.5-78.6 108.3-3.1 2.8-6.2 5.6-9.4 8.4L393.8 328c14-20.5 22.2-45.3 22.2-72 0-70.7-57.3-128-128-128-26.7 0-51.5 8.2-72 22.2l-39.1-39.1zm182 182l-108-108c11.1-5.8 23.7-9.1 37.1-9.1 44.2 0 80 35.8 80 80 0 13.4-3.3 26-9.1 37.1zM103.4 173.2l-34-34c-32.6 36.8-55 75.8-66.9 104.5-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6 37.3 0 71.2-7.9 101.5-20.6L352.2 422c-20 6.4-41.4 10-64.2 10-65.2 0-118.8-29.6-159.9-67.7-38.5-35.7-65.1-78.3-78.6-108.3 10.4-23.1 28.6-53.6 54-82.8z"/></svg>`,
|
||||
star: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M288.1-32c9 0 17.3 5.1 21.4 13.1L383 125.3 542.9 150.7c8.9 1.4 16.3 7.7 19.1 16.3s.5 18-5.8 24.4L441.7 305.9 467 465.8c1.4 8.9-2.3 17.9-9.6 23.2s-17 6.1-25 2L288.1 417.6 143.8 491c-8 4.1-17.7 3.3-25-2s-11-14.2-9.6-23.2L134.4 305.9 20 191.4c-6.4-6.4-8.6-15.8-5.8-24.4s10.1-14.9 19.1-16.3l159.9-25.4 73.6-144.2c4.1-8 12.4-13.1 21.4-13.1zm0 76.8L230.3 158c-3.5 6.8-10 11.6-17.6 12.8l-125.5 20 89.8 89.9c5.4 5.4 7.9 13.1 6.7 20.7l-19.8 125.5 113.3-57.6c6.8-3.5 14.9-3.5 21.8 0l113.3 57.6-19.8-125.5c-1.2-7.6 1.3-15.3 6.7-20.7l89.8-89.9-125.5-20c-7.6-1.2-14.1-6-17.6-12.8L288.1 44.8z"/></svg>`,
|
||||
'circle-question': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M464 256a208 208 0 1 0 -416 0 208 208 0 1 0 416 0zM0 256a256 256 0 1 1 512 0 256 256 0 1 1 -512 0zm256-80c-17.7 0-32 14.3-32 32 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-44.2 35.8-80 80-80s80 35.8 80 80c0 47.2-36 67.2-56 74.5l0 3.8c0 13.3-10.7 24-24 24s-24-10.7-24-24l0-8.1c0-20.5 14.8-35.2 30.1-40.2 6.4-2.1 13.2-5.5 18.2-10.3 4.3-4.2 7.7-10 7.7-19.6 0-17.7-14.3-32-32-32zM224 368a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"/></svg>`,
|
||||
'circle-xmark': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M256 48a208 208 0 1 1 0 416 208 208 0 1 1 0-416zm0 464a256 256 0 1 0 0-512 256 256 0 1 0 0 512zM167 167c-9.4 9.4-9.4 24.6 0 33.9l55 55-55 55c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l55-55 55 55c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-55-55 55-55c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0l-55 55-55-55c-9.4-9.4-24.6-9.4-33.9 0z"/></svg>`,
|
||||
copy: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M384 336l-192 0c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l133.5 0c4.2 0 8.3 1.7 11.3 4.7l58.5 58.5c3 3 4.7 7.1 4.7 11.3L400 320c0 8.8-7.2 16-16 16zM192 384l192 0c35.3 0 64-28.7 64-64l0-197.5c0-17-6.7-33.3-18.7-45.3L370.7 18.7C358.7 6.7 342.5 0 325.5 0L192 0c-35.3 0-64 28.7-64 64l0 256c0 35.3 28.7 64 64 64zM64 128c-35.3 0-64 28.7-64 64L0 448c0 35.3 28.7 64 64 64l192 0c35.3 0 64-28.7 64-64l0-16-48 0 0 16c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256c0-8.8 7.2-16 16-16l16 0 0-48-16 0z"/></svg>`,
|
||||
eye: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M288 80C222.8 80 169.2 109.6 128.1 147.7 89.6 183.5 63 226 49.4 256 63 286 89.6 328.5 128.1 364.3 169.2 402.4 222.8 432 288 432s118.8-29.6 159.9-67.7C486.4 328.5 513 286 526.6 256 513 226 486.4 183.5 447.9 147.7 406.8 109.6 353.2 80 288 80zM95.4 112.6C142.5 68.8 207.2 32 288 32s145.5 36.8 192.6 80.6c46.8 43.5 78.1 95.4 93 131.1 3.3 7.9 3.3 16.7 0 24.6-14.9 35.7-46.2 87.7-93 131.1-47.1 43.7-111.8 80.6-192.6 80.6S142.5 443.2 95.4 399.4c-46.8-43.5-78.1-95.4-93-131.1-3.3-7.9-3.3-16.7 0-24.6 14.9-35.7 46.2-87.7 93-131.1zM288 336c44.2 0 80-35.8 80-80 0-29.6-16.1-55.5-40-69.3-1.4 59.7-49.6 107.9-109.3 109.3 13.8 23.9 39.7 40 69.3 40zm-79.6-88.4c2.5 .3 5 .4 7.6 .4 35.3 0 64-28.7 64-64 0-2.6-.2-5.1-.4-7.6-37.4 3.9-67.2 33.7-71.1 71.1zm45.6-115c10.8-3 22.2-4.5 33.9-4.5 8.8 0 17.5 .9 25.8 2.6 .3 .1 .5 .1 .8 .2 57.9 12.2 101.4 63.7 101.4 125.2 0 70.7-57.3 128-128 128-61.6 0-113-43.5-125.2-101.4-1.8-8.6-2.8-17.5-2.8-26.6 0-11 1.4-21.8 4-32 .2-.7 .3-1.3 .5-1.9 11.9-43.4 46.1-77.6 89.5-89.5z"/></svg>`,
|
||||
'eye-slash': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M41-24.9c-9.4-9.4-24.6-9.4-33.9 0S-2.3-.3 7 9.1l528 528c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-96.4-96.4c2.7-2.4 5.4-4.8 8-7.2 46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1-47.1-43.7-111.8-80.6-192.6-80.6-56.8 0-105.6 18.2-146 44.2L41-24.9zM176.9 111.1c32.1-18.9 69.2-31.1 111.1-31.1 65.2 0 118.8 29.6 159.9 67.7 38.5 35.7 65.1 78.3 78.6 108.3-13.6 30-40.2 72.5-78.6 108.3-3.1 2.8-6.2 5.6-9.4 8.4L393.8 328c14-20.5 22.2-45.3 22.2-72 0-70.7-57.3-128-128-128-26.7 0-51.5 8.2-72 22.2l-39.1-39.1zm182 182l-108-108c11.1-5.8 23.7-9.1 37.1-9.1 44.2 0 80 35.8 80 80 0 13.4-3.3 26-9.1 37.1zM103.4 173.2l-34-34c-32.6 36.8-55 75.8-66.9 104.5-3.3 7.9-3.3 16.7 0 24.6 14.9 35.7 46.2 87.7 93 131.1 47.1 43.7 111.8 80.6 192.6 80.6 37.3 0 71.2-7.9 101.5-20.6L352.2 422c-20 6.4-41.4 10-64.2 10-65.2 0-118.8-29.6-159.9-67.7-38.5-35.7-65.1-78.3-78.6-108.3 10.4-23.1 28.6-53.6 54-82.8z"/></svg>`,
|
||||
star: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Pro 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2025 Fonticons, Inc. --><path fill="currentColor" d="M288.1-32c9 0 17.3 5.1 21.4 13.1L383 125.3 542.9 150.7c8.9 1.4 16.3 7.7 19.1 16.3s.5 18-5.8 24.4L441.7 305.9 467 465.8c1.4 8.9-2.3 17.9-9.6 23.2s-17 6.1-25 2L288.1 417.6 143.8 491c-8 4.1-17.7 3.3-25-2s-11-14.2-9.6-23.2L134.4 305.9 20 191.4c-6.4-6.4-8.6-15.8-5.8-24.4s10.1-14.9 19.1-16.3l159.9-25.4 73.6-144.2c4.1-8 12.4-13.1 21.4-13.1zm0 76.8L230.3 158c-3.5 6.8-10 11.6-17.6 12.8l-125.5 20 89.8 89.9c5.4 5.4 7.9 13.1 6.7 20.7l-19.8 125.5 113.3-57.6c6.8-3.5 14.9-3.5 21.8 0l113.3 57.6-19.8-125.5c-1.2-7.6 1.3-15.3 6.7-20.7l89.8-89.9-125.5-20c-7.6-1.2-14.1-6-17.6-12.8L288.1 44.8z"/></svg>`,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -44,18 +44,17 @@
|
||||
}
|
||||
|
||||
/* Appearance modifiers */
|
||||
:host([appearance='outlined']) .text-field {
|
||||
:host([appearance~='outlined']) .text-field {
|
||||
background-color: var(--wa-form-control-background-color);
|
||||
border-color: var(--wa-form-control-border-color);
|
||||
}
|
||||
|
||||
:host([appearance='filled']) .text-field {
|
||||
:host([appearance~='filled']) .text-field {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
border-color: var(--wa-color-neutral-fill-quiet);
|
||||
}
|
||||
|
||||
:host([appearance='filled-outlined']) .text-field {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
:host([appearance~='filled'][appearance~='outlined']) .text-field {
|
||||
border-color: var(--wa-form-control-border-color);
|
||||
}
|
||||
|
||||
@@ -63,40 +62,22 @@
|
||||
border-radius: var(--wa-border-radius-pill) !important;
|
||||
}
|
||||
|
||||
.text-field {
|
||||
/* Show autofill styles over the entire text field, not just the native <input> */
|
||||
&:has(:autofill),
|
||||
&:has(:-webkit-autofill) {
|
||||
background-color: var(--wa-color-brand-fill-quiet) !important;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
/*
|
||||
.text-field input,
|
||||
.text-field textarea {
|
||||
/*
|
||||
Fixes an alignment issue with placeholders.
|
||||
https://github.com/shoelace-style/webawesome/issues/342
|
||||
*/
|
||||
height: 100%;
|
||||
height: 100%;
|
||||
|
||||
padding: 0;
|
||||
border: none;
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
margin: 0;
|
||||
cursor: inherit;
|
||||
-webkit-appearance: none;
|
||||
font: inherit;
|
||||
|
||||
/* Turn off Safari's autofill styles */
|
||||
&:-webkit-autofill,
|
||||
&:-webkit-autofill:hover,
|
||||
&:-webkit-autofill:focus,
|
||||
&:-webkit-autofill:active {
|
||||
-webkit-background-clip: text;
|
||||
background-color: transparent;
|
||||
-webkit-text-fill-color: inherit;
|
||||
}
|
||||
}
|
||||
padding: 0;
|
||||
border: none;
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
margin: 0;
|
||||
cursor: inherit;
|
||||
-webkit-appearance: none;
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
input {
|
||||
|
||||
@@ -111,7 +111,7 @@ export default class WaInput extends WebAwesomeFormAssociatedElement {
|
||||
@property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';
|
||||
|
||||
/** The input's visual appearance. */
|
||||
@property({ reflect: true }) appearance: 'filled' | 'outlined' | 'filled-outlined' = 'outlined';
|
||||
@property({ reflect: true }) appearance: 'filled' | 'outlined' = 'outlined';
|
||||
|
||||
/** Draws a pill-style input with rounded edges. */
|
||||
@property({ type: Boolean, reflect: true }) pill = false;
|
||||
|
||||
@@ -47,7 +47,7 @@ export default class WaRadio extends WebAwesomeFormAssociatedElement {
|
||||
/** The radio's value. When selected, the radio group will receive this value. */
|
||||
@property({ reflect: true }) value: string;
|
||||
|
||||
/** The radio's visual appearance. */
|
||||
/** The radio's value. When selected, the radio group will receive this value. */
|
||||
@property({ reflect: true }) appearance: 'default' | 'button' = 'default';
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
isolation: isolate;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
:host([orientation='vertical']) {
|
||||
|
||||
@@ -93,18 +93,17 @@
|
||||
}
|
||||
|
||||
/* Appearance modifiers */
|
||||
:host([appearance='outlined']) .combobox {
|
||||
:host([appearance~='outlined']) .combobox {
|
||||
background-color: var(--wa-form-control-background-color);
|
||||
border-color: var(--wa-form-control-border-color);
|
||||
}
|
||||
|
||||
:host([appearance='filled']) .combobox {
|
||||
:host([appearance~='filled']) .combobox {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
border-color: var(--wa-color-neutral-fill-quiet);
|
||||
}
|
||||
|
||||
:host([appearance='filled-outlined']) .combobox {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
:host([appearance~='filled'][appearance~='outlined']) .combobox {
|
||||
border-color: var(--wa-form-control-border-color);
|
||||
}
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ export default class WaSelect extends WebAwesomeFormAssociatedElement {
|
||||
@property({ type: Boolean, reflect: true }) open = false;
|
||||
|
||||
/** The select's visual appearance. */
|
||||
@property({ reflect: true }) appearance: 'filled' | 'outlined' | 'filled-outlined' = 'outlined';
|
||||
@property({ reflect: true }) appearance: 'filled' | 'outlined' = 'outlined';
|
||||
|
||||
/** Draws a pill-style select with rounded edges. */
|
||||
@property({ type: Boolean, reflect: true }) pill = false;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { PropertyValues } from 'lit';
|
||||
import { html } from 'lit';
|
||||
import { customElement, property, query, state } from 'lit/decorators.js';
|
||||
import { customElement, property, query, queryAll, state } from 'lit/decorators.js';
|
||||
import { classMap } from 'lit/directives/class-map.js';
|
||||
import { DraggableElement } from '../../internal/drag.js';
|
||||
import { clamp } from '../../internal/math.js';
|
||||
@@ -99,6 +99,7 @@ export default class WaSlider extends WebAwesomeFormAssociatedElement {
|
||||
@query('#thumb-max') thumbMax: HTMLElement;
|
||||
@query('#track') track: HTMLElement;
|
||||
@query('#tooltip') tooltip: WaTooltip;
|
||||
@queryAll('wa-tooltip') tooltips: NodeListOf<WaTooltip>;
|
||||
|
||||
/**
|
||||
* The slider's label. If you need to provide HTML in the label, use the `label` slot instead.
|
||||
@@ -687,29 +688,19 @@ export default class WaSlider extends WebAwesomeFormAssociatedElement {
|
||||
}
|
||||
|
||||
private showRangeTooltips() {
|
||||
if (!this.withTooltip) return;
|
||||
|
||||
// Show only the active tooltip, hide the other
|
||||
const tooltipMin = this.shadowRoot?.querySelector('#tooltip-thumb-min') as WaTooltip;
|
||||
const tooltipMax = this.shadowRoot?.querySelector('#tooltip-thumb-max') as WaTooltip;
|
||||
|
||||
if (this.activeThumb === 'min') {
|
||||
if (tooltipMin) tooltipMin.open = true;
|
||||
if (tooltipMax) tooltipMax.open = false;
|
||||
} else if (this.activeThumb === 'max') {
|
||||
if (tooltipMax) tooltipMax.open = true;
|
||||
if (tooltipMin) tooltipMin.open = false;
|
||||
if (this.withTooltip) {
|
||||
this.tooltips.forEach(tooltip => {
|
||||
tooltip.open = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private hideRangeTooltips() {
|
||||
if (!this.withTooltip) return;
|
||||
|
||||
const tooltipMin = this.shadowRoot?.querySelector('#tooltip-thumb-min') as WaTooltip;
|
||||
const tooltipMax = this.shadowRoot?.querySelector('#tooltip-thumb-max') as WaTooltip;
|
||||
|
||||
if (tooltipMin) tooltipMin.open = false;
|
||||
if (tooltipMax) tooltipMax.open = false;
|
||||
if (this.withTooltip) {
|
||||
this.tooltips.forEach(tooltip => {
|
||||
tooltip.open = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** Updates the form value submission for range sliders */
|
||||
|
||||
@@ -317,3 +317,9 @@ declare global {
|
||||
'wa-split-panel': WaSplitPanel;
|
||||
}
|
||||
}
|
||||
|
||||
declare global {
|
||||
interface HTMLElementTagNameMap {
|
||||
'wa-split-panel': WaSplitPanel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
.body {
|
||||
display: block;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.scroll-button {
|
||||
|
||||
@@ -20,25 +20,23 @@
|
||||
}
|
||||
|
||||
/* Appearance modifiers */
|
||||
:host([appearance='outlined']) {
|
||||
:host([appearance~='outlined']) {
|
||||
color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
|
||||
background-color: transparent;
|
||||
border-color: var(--wa-color-border-loud, var(--wa-color-neutral-border-loud));
|
||||
}
|
||||
|
||||
:host([appearance='filled']) {
|
||||
:host([appearance~='filled']) {
|
||||
color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
|
||||
background-color: var(--wa-color-fill-quiet, var(--wa-color-neutral-fill-quiet));
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
:host([appearance='filled-outlined']) {
|
||||
color: var(--wa-color-on-quiet, var(--wa-color-neutral-on-quiet));
|
||||
background-color: var(--wa-color-fill-quiet, var(--wa-color-neutral-fill-quiet));
|
||||
:host([appearance~='filled'][appearance~='outlined']) {
|
||||
border-color: var(--wa-color-border-normal, var(--wa-color-neutral-border-normal));
|
||||
}
|
||||
|
||||
:host([appearance='accent']) {
|
||||
:host([appearance~='accent']) {
|
||||
color: var(--wa-color-on-loud, var(--wa-color-neutral-on-loud));
|
||||
background-color: var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud));
|
||||
border-color: transparent;
|
||||
|
||||
@@ -35,7 +35,7 @@ export default class WaTag extends WebAwesomeElement {
|
||||
@property({ reflect: true }) variant: 'brand' | 'neutral' | 'success' | 'warning' | 'danger' = 'neutral';
|
||||
|
||||
/** The tag's visual appearance. */
|
||||
@property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' | 'filled-outlined' = 'filled-outlined';
|
||||
@property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' | 'outlined filled' = 'outlined filled';
|
||||
|
||||
/** The tag's size. */
|
||||
@property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';
|
||||
|
||||
@@ -24,18 +24,17 @@
|
||||
}
|
||||
|
||||
/* Appearance modifiers */
|
||||
:host([appearance='outlined']) .textarea {
|
||||
:host([appearance~='outlined']) .textarea {
|
||||
background-color: var(--wa-form-control-background-color);
|
||||
border-color: var(--wa-form-control-border-color);
|
||||
}
|
||||
|
||||
:host([appearance='filled']) .textarea {
|
||||
:host([appearance~='filled']) .textarea {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
border-color: var(--wa-color-neutral-fill-quiet);
|
||||
}
|
||||
|
||||
:host([appearance='filled-outlined']) .textarea {
|
||||
background-color: var(--wa-color-neutral-fill-quiet);
|
||||
:host([appearance~='filled'][appearance~='outlined']) .textarea {
|
||||
border-color: var(--wa-form-control-border-color);
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ export default class WaTextarea extends WebAwesomeFormAssociatedElement {
|
||||
@property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';
|
||||
|
||||
/** The textarea's visual appearance. */
|
||||
@property({ reflect: true }) appearance: 'filled' | 'outlined' | 'filled-outlined' = 'outlined';
|
||||
@property({ reflect: true }) appearance: 'filled' | 'outlined' = 'outlined';
|
||||
|
||||
/** The textarea's label. If you need to display HTML, use the `label` slot instead. */
|
||||
@property() label = '';
|
||||
@@ -338,7 +338,7 @@ export default class WaTextarea extends WebAwesomeFormAssociatedElement {
|
||||
const hasHint = this.hint ? true : !!hasHintSlot;
|
||||
|
||||
return html`
|
||||
<label part="form-control-label label" class="label" for="input" aria-hidden=${hasLabel ? 'false' : 'true'}>
|
||||
<label part="label" class="label" for="input" aria-hidden=${hasLabel ? 'false' : 'true'}>
|
||||
<slot name="label">${this.label}</slot>
|
||||
</label>
|
||||
|
||||
|
||||
@@ -101,11 +101,6 @@ export default class WaTooltip extends WebAwesomeElement {
|
||||
connectedCallback() {
|
||||
super.connectedCallback();
|
||||
|
||||
// Recreate event controller if it was aborted
|
||||
if (this.eventController.signal.aborted) {
|
||||
this.eventController = new AbortController();
|
||||
}
|
||||
|
||||
// TODO: This is a hack that I need to revisit [Konnor]
|
||||
if (this.open) {
|
||||
this.open = false;
|
||||
@@ -118,15 +113,6 @@ export default class WaTooltip extends WebAwesomeElement {
|
||||
if (!this.id) {
|
||||
this.id = uniqueId('wa-tooltip-');
|
||||
}
|
||||
|
||||
// Re-establish anchor connection after being disconnected
|
||||
if (this.for && this.anchor) {
|
||||
this.anchor = null; // force reattach
|
||||
this.handleForChange();
|
||||
} else if (this.for) {
|
||||
// Initial connection
|
||||
this.handleForChange();
|
||||
}
|
||||
}
|
||||
|
||||
disconnectedCallback() {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user