diff --git a/cspell.json b/cspell.json index e5894543a..17411b008 100644 --- a/cspell.json +++ b/cspell.json @@ -39,6 +39,7 @@ "crutchcorn", "csspart", "cssproperty", + "cssstate", "datetime", "describedby", "Docsify", @@ -46,6 +47,7 @@ "dropdowns", "easings", "ecommerce", + "endfor", "endraw", "endregion", "enterkeyhint", @@ -160,11 +162,13 @@ "tabler", "tablist", "tabpanel", + "tbody", "templating", "tera", "testid", "textareas", "textfield", + "thead", "Themer", "tinycolor", "transitionend", diff --git a/docs/.eleventy.js b/docs/.eleventy.js index d55b0fb10..5d3122df3 100644 --- a/docs/.eleventy.js +++ b/docs/.eleventy.js @@ -1,4 +1,3 @@ -import { parse } from 'path'; import { anchorHeadingsPlugin } from './_utils/anchor-headings.js'; import { codeExamplesPlugin } from './_utils/code-examples.js'; import { copyCodePlugin } from './_utils/copy-code.js'; @@ -10,6 +9,7 @@ import { removeDataAlphaElements } from './_utils/remove-data-alpha-elements.js' import litPlugin from '@lit-labs/eleventy-plugin-lit'; import { readFile } from 'fs/promises'; import componentList from './_data/componentList.js'; +import * as filters from './_utils/filters.js'; import { outlinePlugin } from './_utils/outline.js'; import { replaceTextPlugin } from './_utils/replace-text.js'; import { searchPlugin } from './_utils/search.js'; @@ -38,18 +38,10 @@ export default function (eleventyConfig) { // Template filters - {{ content | filter }} eleventyConfig.addFilter('inlineMarkdown', content => markdown.renderInline(content || '')); eleventyConfig.addFilter('markdown', content => markdown.render(content || '')); - eleventyConfig.addFilter('stripExtension', string => parse(string).name); - eleventyConfig.addFilter('stripPrefix', content => content.replace(/^wa-/, '')); - eleventyConfig.addFilter('trimPipes', content => { - // 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. - return typeof content === 'string' ? content.replace(/^(\s|\|)/g, '').replace(/(\s|\|)$/g, '') : content; - }); - eleventyConfig.addFilter('keys', obj => Object.keys(obj)); - eleventyConfig.addFilter('log', (firstArg, ...rest) => { - console.log(firstArg, ...rest); - return firstArg; - }); + + for (let name in filters) { + eleventyConfig.addFilter(name, filters[name]); + } eleventyConfig.addFilter('sort', (arr, key = 'data.title') => { key = key.split('.'); diff --git a/docs/_includes/base.njk b/docs/_includes/base.njk index 24d3c80cc..987d6e35f 100644 --- a/docs/_includes/base.njk +++ b/docs/_includes/base.njk @@ -98,7 +98,7 @@ {% include "logo-simple.njk" %} {{ package.version }} - Alpha + Alpha
diff --git a/docs/_utils/filters.js b/docs/_utils/filters.js new file mode 100644 index 000000000..2bec1ff86 --- /dev/null +++ b/docs/_utils/filters.js @@ -0,0 +1,24 @@ +import { parse } from 'path'; + +export function stripExtension(string) { + return parse(string).name; +} + +export function stripPrefix(content) { + return content.replace(/^wa-/, ''); +} + +// 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. +export function trimPipes(content) { + return typeof content === 'string' ? content.replace(/^(\s|\|)/g, '').replace(/(\s|\|)$/g, '') : content; +} + +export function keys(obj) { + return Object.keys(obj); +} + +export function log(firstArg, ...rest) { + console.log(firstArg, ...rest); + return firstArg; +} diff --git a/docs/assets/styles/docs.css b/docs/assets/styles/docs.css index 4368fc4ae..13adb0761 100644 --- a/docs/assets/styles/docs.css +++ b/docs/assets/styles/docs.css @@ -46,7 +46,7 @@ wa-page > header { } wa-button[data-toggle-nav] { - --label-color: currentColor; + --text-color: currentColor; font-size: 1rem; margin-inline-start: -0.875rem; margin-inline-end: 0; @@ -76,8 +76,6 @@ wa-page > header { margin-block-start: var(--wa-space-2xs); } #version-number + wa-badge { - --background-color: var(--wa-color-warning-fill-quiet); - --content-color: var(--wa-color-warning-on-quiet); font-size: var(--wa-font-size-2xs); text-transform: uppercase; } diff --git a/docs/assets/styles/theme-headers.css b/docs/assets/styles/theme-headers.css index a48700312..595b7acbd 100644 --- a/docs/assets/styles/theme-headers.css +++ b/docs/assets/styles/theme-headers.css @@ -23,7 +23,7 @@ .hero wa-button[variant='brand'] { --background: var(--wa-color-neutral-fill-quiet); - --label-color: var(--wa-color-neutral-on-normal); + --text-color: var(--wa-color-neutral-on-normal); } .project-header { diff --git a/docs/docs/components/avatar.md b/docs/docs/components/avatar.md index cd2b53f68..5c4081f07 100644 --- a/docs/docs/components/avatar.md +++ b/docs/docs/components/avatar.md @@ -97,7 +97,7 @@ You can group avatars with a few lines of CSS. margin-left: calc(-1 * var(--wa-space-m)); } - .avatar-group wa-avatar::part(base) { + .avatar-group wa-avatar { border: solid 2px var(--wa-color-surface-default); } diff --git a/docs/docs/components/badge.md b/docs/docs/components/badge.md index 5f6001210..a095a28bb 100644 --- a/docs/docs/components/badge.md +++ b/docs/docs/components/badge.md @@ -22,6 +22,48 @@ Set the `variant` attribute to change the badge's variant. Danger ``` +### Appearance + +Use the `appearance` attribute to change the badge's visual appearance. + +```html {.example} +
+ F+O + Filled + T+O + Tinted + Outlined +
+
+ F+O + Filled + T+O + Tinted + Outlined +
+
+ F+O + Filled + T+O + Tinted + Outlined +
+
+ F+O + Filled + T+O + Tinted + Outlined +
+
+ F+O + Filled + T+O + Tinted + Outlined +
+``` + ### Pill Badges Use the `pill` attribute to give badges rounded edges. diff --git a/docs/docs/components/button.md b/docs/docs/components/button.md index e63579b87..ef3506bbb 100644 --- a/docs/docs/components/button.md +++ b/docs/docs/components/button.md @@ -91,7 +91,7 @@ It's often helpful to have a button that works like a link. This is possible by ### Setting a Custom Width -As expected, buttons can be given a custom width by setting the `width` attribute. This is useful for making buttons span the full width of their container on smaller screens. +As expected, buttons can be given a custom width by setting the `width` CSS property. This is useful for making buttons span the full width of their container on smaller screens. ```html {.example} Small diff --git a/docs/docs/components/input.md b/docs/docs/components/input.md index 2e6442c7a..1ef889d49 100644 --- a/docs/docs/components/input.md +++ b/docs/docs/components/input.md @@ -157,7 +157,7 @@ Use [CSS parts](#css-parts) to customize the way form controls are drawn. This e text-align: right; } - .label-on-left::part(form-control-hint) { + .label-on-left::part(hint) { grid-column-start: 2; } diff --git a/docs/docs/essentials/button.md b/docs/docs/essentials/button.md new file mode 100644 index 000000000..785b47933 --- /dev/null +++ b/docs/docs/essentials/button.md @@ -0,0 +1,123 @@ +--- +title: Button +--- + +```html {.example} + +``` + +## Examples + +### Variants + +Use the variant utility classes to set the button's semantic variant. + +```html {.example} + + + + + +``` + +### Appearance + +Use the appearance utility classes to change the button's visual appearance: + +```html {.example} +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + + + +
+``` + +### Sizes + +Use `wa-size-*` classes to change a button's size. + +```html {.example} + + + +``` + +### Pill Buttons + +Use the `wa-pill` class to give buttons rounded edges. + +```html {.example} + + + +``` + +### Link Buttons + +It's often helpful to have a link that looks like a button. +This is possible by adding a `wa-button` class to your link. + +```html {.example} +Link +New Window +Download +``` + +### Setting a Custom Width + +As expected, buttons can be given a custom width by setting the `width` CSS property. This is useful for making buttons span the full width of their container on smaller screens. + +```html {.example} + + + +``` + diff --git a/docs/docs/essentials/essentials.json b/docs/docs/essentials/essentials.json new file mode 100644 index 000000000..8e3becca3 --- /dev/null +++ b/docs/docs/essentials/essentials.json @@ -0,0 +1,3 @@ +{ + "layout": "docs.njk" +} diff --git a/docs/docs/experimental/style-guide.md b/docs/docs/experimental/style-guide.md index d3c0667ec..559cee802 100644 --- a/docs/docs/experimental/style-guide.md +++ b/docs/docs/experimental/style-guide.md @@ -22,9 +22,9 @@ The styles shown below can be all yours by adding Web Awesome's applied styleshe WA Button - + - + @@ -32,9 +32,34 @@ The styles shown below can be all yours by adding Web Awesome's applied styleshe - + - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/experimental/themer.md b/docs/docs/experimental/themer.md index 4d7412d66..a25c6a1cd 100644 --- a/docs/docs/experimental/themer.md +++ b/docs/docs/experimental/themer.md @@ -170,13 +170,13 @@ hasOutline: false --wa-form-control-placeholder-color: color-mix(in oklab, var(--wa-color-text-normal), transparent); --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) + var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height) ); --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) + var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height) ); --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) + var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height) ); --wa-form-control-required-content: '*'; @@ -429,9 +429,9 @@ hasOutline: false #icon-chooser-trigger { --button-group-separator-border: none; - --label-color: var(--wa-color-neutral-on-quiet); - --label-color-hover: color-mix(in oklab, var(--wa-color-neutral-on-quiet), var(--wa-color-mix-hover)); - --label-color-active: var(--label-color-hover); + --text-color: var(--wa-color-neutral-on-quiet); + --text-color-hover: color-mix(in oklab, var(--wa-color-neutral-on-quiet), var(--wa-color-mix-hover)); + --text-color-active: var(--text-color-hover); } #icon-chooser::part(dialog) { diff --git a/docs/docs/resources/contributing.md b/docs/docs/resources/contributing.md index 9d98cdd8f..0db66a230 100644 --- a/docs/docs/resources/contributing.md +++ b/docs/docs/resources/contributing.md @@ -23,12 +23,6 @@ A common misconception about contributing to an open source project is that you Please take a moment to review these guidelines to make the contribution process as easy as possible for both yourself and the project's maintainers. -## AI-generated Code - -As an open source maintainer, I respectfully ask that you refrain from using AI-generated code when contributing to this project. This includes code generated by tools such as GitHub Copilot, even if you make alterations to it afterwards. While some of Copilot's features are indeed convenient, the ethics surrounding which codebases the AI has been trained on and their corresponding software licenses remain very questionable and have yet to be tested in a legal context. - -I realize that one cannot reasonably enforce this any more than one can enforce not copying licensed code from other codebases, nor do I wish to expend energy policing contributors. I would, however, like to avoid all ethical and legal challenges that result from using AI-generated code. As such, I respectfully ask that you refrain from using such tools when contributing to this project. At this time, I will not knowingly accept any code that has been generated in such a manner. - ## Using the Issue Tracker The [issue tracker](https://github.com/shoelace-style/webawesome-alpha/issues) is for bug reports, feature requests, and pull requests. diff --git a/docs/docs/theming/component-groups.md b/docs/docs/theming/component-groups.md index d2b55dd1a..2203c11ef 100644 --- a/docs/docs/theming/component-groups.md +++ b/docs/docs/theming/component-groups.md @@ -27,9 +27,9 @@ Not every form control uses all of these custom properties. For example, ` This is a tooltip -``` \ No newline at end of file +``` diff --git a/docs/index.md b/docs/index.md index 1cbec4c91..94253b059 100644 --- a/docs/index.md +++ b/docs/index.md @@ -86,13 +86,13 @@ layout: page flex: 1 1 67%; } & wa-button { - --wa-form-control-height-s: 2.5rem; --border-color: black; --border-width: 0.125rem; - --box-shadow: 0 0.25rem 0 0 var(--border-color); + box-shadow: 0 0.25rem 0 0 var(--border-color); flex: 1 1 auto; + height: 2.5rem; &:active:not([disabled]) { - --box-shadow: 0 0 0 0 transparent; + box-shadow: 0 0 0 0 transparent; transform: translateY(0.25rem); } } @@ -190,8 +190,7 @@ layout: page gap: 0.5rem; } & wa-button { - --wa-form-control-height-m: 1.5rem; - display: inline-flex; + height: 1.5rem; font-size: 0.75rem; } } diff --git a/package-lock.json b/package-lock.json index 07beabe24..812a56f19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,25 +9,25 @@ "version": "3.0.0-alpha.5", "license": "MIT", "dependencies": { - "@ctrl/tinycolor": "^4.0.2", - "@floating-ui/dom": "^1.5.3", - "@shoelace-style/animations": "^1.1.0", + "@ctrl/tinycolor": "^4.1.0", + "@floating-ui/dom": "^1.6.12", + "@shoelace-style/animations": "^1.2.0", "@shoelace-style/localize": "^3.2.1", - "composed-offset-position": "^0.0.4", - "lit": "^3.0.0", + "composed-offset-position": "^0.0.6", + "lit": "^3.2.1", "qr-creator": "^1.0.0" }, "devDependencies": { - "@11ty/eleventy": "3.0.0-alpha.5", - "@custom-elements-manifest/analyzer": "^0.9.4", + "@11ty/eleventy": "3.0.0", + "@custom-elements-manifest/analyzer": "^0.10.4", "@lit-labs/eleventy-plugin-lit": "^1.0.3", - "@lit-labs/testing": "^0.2.4", - "@lit/react": "^1.0.0", + "@lit-labs/testing": "^0.2.5", + "@lit/react": "^1.0.6", "@open-wc/testing": "^3.2.0", - "@types/mocha": "^10.0.2", + "@types/mocha": "^10.0.10", "@types/react": "^18.2.28", "@web/dev-server-esbuild": "^0.3.6", - "@web/test-runner": "^0.18.1", + "@web/test-runner": "^0.19.0", "@web/test-runner-commands": "^0.9.0", "@web/test-runner-playwright": "^0.11.0", "browser-sync": "^2.29.3", @@ -35,43 +35,44 @@ "change-case": "^4.1.2", "chokidar": "^3.5.3", "command-line-args": "^5.2.1", - "comment-parser": "^1.4.0", + "comment-parser": "^1.4.1", "cspell": "^6.18.1", - "custom-element-jet-brains-integration": "^1.4.0", - "custom-element-vs-code-integration": "^1.2.1", - "custom-element-vuejs-integration": "^1.0.0", + "custom-element-jet-brains-integration": "^1.6.2", + "custom-element-vs-code-integration": "^1.4.1", + "custom-element-vuejs-integration": "^1.3.3", "del": "^7.1.0", "download": "^8.0.0", - "esbuild": "^0.19.4", + "esbuild": "0.23.1", "esbuild-plugin-replace": "^1.4.0", "front-matter": "^4.0.2", - "get-port": "^7.0.0", + "get-port": "^7.1.0", "globby": "^13.2.2", "husky": "^8.0.3", "lint-staged": "^14.0.1", "lunr": "^2.3.9", "markdown-it": "^14.1.0", - "markdown-it-attrs": "^4.1.6", + "markdown-it-attrs": "^4.3.0", "markdown-it-container": "^3.0.0", "markdown-it-ins": "^3.0.1", "markdown-it-kbd": "^2.2.2", "markdown-it-mark": "^3.0.1", "marked": "^11.1.0", "node-html-parser": "^6.1.13", - "ora": "^8.0.1", + "npm-check-updates": "^17.1.11", + "ora": "^8.1.1", "pascal-case": "^3.1.2", - "playwright": "^1.46.1", - "plop": "^4.0.0", - "prettier": "^3.0.3", + "playwright": "^1.49.1", + "plop": "^4.0.1", + "prettier": "^3.4.2", "prettier-plugin-organize-imports": "^4.1.0", "prismjs": "^1.29.0", "react": "^18.2.0", "recursive-copy": "^2.0.14", "sinon": "^16.1.0", "source-map": "^0.7.4", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "user-agent-data-types": "^0.3.1", + "tslib": "^2.8.1", + "typescript": "^5.7.2", + "user-agent-data-types": "^0.4.2", "uuid": "^9.0.1" }, "engines": { @@ -79,9 +80,9 @@ } }, "node_modules/@11ty/dependency-tree": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-3.0.0.tgz", - "integrity": "sha512-+M+/KdAptDTK4USkI124CKoScvt2y0v1EoLBjS2rUi9zydjWgEC7+EJJ7Eu1DXuObe0JmY09LORjdBGKNPxgtg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-3.0.1.tgz", + "integrity": "sha512-aZizxcL4Z/clm3KPRx8i9ohW9R2gLssXfUSy7qQmQRXb4CUOyvmqk2gKeJqRmXIfMi2bB9w03SgtN5v1YwqpiA==", "dev": true, "dependencies": { "@11ty/eleventy-utils": "^1.0.2" @@ -100,43 +101,48 @@ } }, "node_modules/@11ty/eleventy": { - "version": "3.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.0.0-alpha.5.tgz", - "integrity": "sha512-JRWRqoAalwkiWIb9dQHmSX40kSOD6vhUwt73df/PWZPYzlAPxx27Gfi96TzR2bE+lmZ8IwgQzhYEBenL9tJ9Ow==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.0.0.tgz", + "integrity": "sha512-0P0ZsJXVW2QiNdhd7z+GYy6n+ivh0enx1DRdua5ta6NlzY2AhbkeWBY6U+FKA8lPS3H4+XsTpfLLfIScpPZLaQ==", "dev": true, "dependencies": { - "@11ty/dependency-tree": "^3.0.0", + "@11ty/dependency-tree": "^3.0.1", "@11ty/dependency-tree-esm": "^1.0.0", - "@11ty/eleventy-dev-server": "^1.0.4", - "@11ty/eleventy-utils": "^1.0.2", + "@11ty/eleventy-dev-server": "^2.0.4", + "@11ty/eleventy-plugin-bundle": "^3.0.0", + "@11ty/eleventy-utils": "^1.0.3", "@11ty/lodash-custom": "^4.17.21", "@11ty/posthtml-urls": "^1.0.0", + "@11ty/recursive-copy": "^3.0.0", "@sindresorhus/slugify": "^2.2.1", "bcp-47-normalize": "^2.3.0", + "chardet": "^2.0.0", "chokidar": "^3.6.0", "cross-spawn": "^7.0.3", - "debug": "^4.3.4", - "dependency-graph": "^0.11.0", + "debug": "^4.3.7", + "dependency-graph": "^1.0.0", + "entities": "^5.0.0", "fast-glob": "^3.3.2", + "filesize": "^10.1.6", "graceful-fs": "^4.2.11", "gray-matter": "^4.0.3", "is-glob": "^4.0.3", - "iso-639-1": "^3.1.0", + "iso-639-1": "^3.1.3", + "js-yaml": "^4.1.0", "kleur": "^4.1.5", - "liquidjs": "^10.10.0", - "luxon": "^3.4.4", - "markdown-it": "^14.0.0", - "micromatch": "^4.0.5", + "liquidjs": "^10.17.0", + "luxon": "^3.5.0", + "markdown-it": "^14.1.0", + "micromatch": "^4.0.8", "minimist": "^1.2.8", "moo": "^0.5.2", - "multimatch": "^7.0.0", - "node-retrieve-globals": "^5.0.0", + "node-retrieve-globals": "^6.0.0", "normalize-path": "^3.0.0", "nunjucks": "^3.2.4", "please-upgrade-node": "^3.2.0", "posthtml": "^0.16.6", - "recursive-copy": "^2.0.14", - "semver": "^7.6.0", + "posthtml-match-helper": "^2.0.2", + "semver": "^7.6.3", "slugify": "^1.6.6" }, "bin": { @@ -151,28 +157,146 @@ } }, "node_modules/@11ty/eleventy-dev-server": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-1.0.4.tgz", - "integrity": "sha512-qVBmV2G1KF/0o5B/3fITlrrDHy4bONUI2YuN3/WJ3BNw4NU1d/we8XhKrlgq13nNvHoBx5czYp3LZt8qRG53Fg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.4.tgz", + "integrity": "sha512-d0CuufX6yPtVz+RW0oJZg1pVoxo1jOrPmpXYacoiKLJm0MMC9MkPQOCXlimguHVaceHejFo5+aZB9/aGB2RR0A==", "dev": true, "dependencies": { - "@11ty/eleventy-utils": "^1.0.1", - "chokidar": "^3.5.3", - "debug": "^4.3.4", + "@11ty/eleventy-utils": "^1.0.3", + "chokidar": "^3.6.0", + "debug": "^4.3.7", "dev-ip": "^1.0.1", - "finalhandler": "^1.2.0", + "finalhandler": "^1.3.0", "mime": "^3.0.0", "minimist": "^1.2.8", - "morphdom": "^2.7.0", + "morphdom": "^2.7.4", "please-upgrade-node": "^3.2.0", - "ssri": "^8.0.1", - "ws": "^8.13.0" + "send": "^0.19.0", + "ssri": "^11.0.0", + "urlpattern-polyfill": "^10.0.0", + "ws": "^8.18.0" }, "bin": { "eleventy-dev-server": "cmd.js" }, "engines": { - "node": ">=14" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/send": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", + "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@11ty/eleventy-plugin-bundle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.0.tgz", + "integrity": "sha512-JSnqehT+sWSPi6e44jTXUW+KiV9284YF9fzPQvfGB4cXlk/m/SJk17CavHCleIvKXDN+jrUw9TZkwAwr85ONWQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "posthtml-match-helper": "^2.0.2" + }, + "engines": { + "node": ">=18" }, "funding": { "type": "opencollective", @@ -180,9 +304,9 @@ } }, "node_modules/@11ty/eleventy-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-1.0.2.tgz", - "integrity": "sha512-Zy2leMK1DQR6Q6ZPSagv7QpJaAz9uVbb+RmVetYFp3foMeQtOSZx7w2u5daRFmP+PeNq9vO9H4xtBToYFWZwHA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-1.0.3.tgz", + "integrity": "sha512-nULO91om7vQw4Y/UBjM8i7nJ1xl+/nyK4rImZ41lFxiY2d+XUz7ChAj1CDYFjrLZeu0utAYJTZ45LlcHTkUG4g==", "dev": true, "dependencies": { "normalize-path": "^3.0.0" @@ -195,6 +319,69 @@ "url": "https://opencollective.com/11ty" } }, + "node_modules/@11ty/eleventy/node_modules/chardet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.0.0.tgz", + "integrity": "sha512-xVgPpulCooDjY6zH4m9YW3jbkaBe3FKIAvF5sj5t7aBNsVl2ljIE+xwJ4iNgiDZHFQvNIpjdKdVOQvvk5ZfxbQ==", + "dev": true + }, + "node_modules/@11ty/eleventy/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@11ty/eleventy/node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@11ty/eleventy/node_modules/entities": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz", + "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@11ty/eleventy/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@11ty/eleventy/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/@11ty/lodash-custom": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz", @@ -224,6 +411,71 @@ "node": ">= 6" } }, + "node_modules/@11ty/recursive-copy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@11ty/recursive-copy/-/recursive-copy-3.0.1.tgz", + "integrity": "sha512-suoSv7CanyKXIwwtLlzP43n3Mm3MTR7UzaLgnG+JP9wAdg4uCIUJiAhhgs/nkwtkvsuqfrGWrUiaG1K9mEoiPg==", + "dev": true, + "dependencies": { + "errno": "^0.1.2", + "graceful-fs": "^4.2.11", + "junk": "^1.0.1", + "maximatch": "^0.1.0", + "mkdirp": "^3.0.1", + "pify": "^2.3.0", + "promise": "^7.0.1", + "rimraf": "^5.0.7", + "slash": "^1.0.0" + } + }, + "node_modules/@11ty/recursive-copy/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@11ty/recursive-copy/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@11ty/recursive-copy/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@11ty/recursive-copy/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@75lb/deep-merge": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", @@ -837,17 +1089,17 @@ } }, "node_modules/@ctrl/tinycolor": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.0.3.tgz", - "integrity": "sha512-e9nEVehVJwkymQpkGhdSNzLT2Lr9UTTby+JePq4Z2SxBbOQjY7pLgSouAaXvfaGQVSAaY0U4eJdwfSDmCbItcw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.1.0.tgz", + "integrity": "sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==", "engines": { "node": ">=14" } }, "node_modules/@custom-elements-manifest/analyzer": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@custom-elements-manifest/analyzer/-/analyzer-0.9.4.tgz", - "integrity": "sha512-XPjEbfkq71oQl6tIfDy1ashdvOf42p3BtqebEaUohqTEPAyBuShGwQiB2B7xjsUwi3VfSQCnPlGwmigIDPjtWg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@custom-elements-manifest/analyzer/-/analyzer-0.10.4.tgz", + "integrity": "sha512-hse8o20Jd82BwWank29/J9OC4PmSTwUoEmll3LEjDF3WLY/Lc8g3TUYSib/3GARCS8Q5myT2RPqEWfRa+6bkIg==", "dev": true, "dependencies": { "@custom-elements-manifest/find-dependencies": "^0.0.5", @@ -949,6 +1201,19 @@ "node": ">=8" } }, + "node_modules/@custom-elements-manifest/analyzer/node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/@custom-elements-manifest/find-dependencies": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/@custom-elements-manifest/find-dependencies/-/find-dependencies-0.0.5.tgz", @@ -965,9 +1230,9 @@ "dev": true }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", "cpu": [ "ppc64" ], @@ -977,13 +1242,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "cpu": [ "arm" ], @@ -993,13 +1258,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], @@ -1009,13 +1274,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], @@ -1025,13 +1290,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "cpu": [ "arm64" ], @@ -1041,13 +1306,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], @@ -1057,13 +1322,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ "arm64" ], @@ -1073,13 +1338,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ "x64" ], @@ -1089,13 +1354,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ "arm" ], @@ -1105,13 +1370,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ "arm64" ], @@ -1121,13 +1386,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "cpu": [ "ia32" ], @@ -1137,13 +1402,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "cpu": [ "loong64" ], @@ -1153,13 +1418,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "cpu": [ "mips64el" ], @@ -1169,13 +1434,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "cpu": [ "ppc64" ], @@ -1185,13 +1450,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "cpu": [ "riscv64" ], @@ -1201,13 +1466,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "cpu": [ "s390x" ], @@ -1217,13 +1482,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "cpu": [ "x64" ], @@ -1233,13 +1498,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "cpu": [ "x64" ], @@ -1249,13 +1514,29 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "cpu": [ "x64" ], @@ -1265,13 +1546,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "cpu": [ "x64" ], @@ -1281,13 +1562,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "cpu": [ "arm64" ], @@ -1297,13 +1578,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ "ia32" ], @@ -1313,13 +1594,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ "x64" ], @@ -1329,7 +1610,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esm-bundle/chai": { @@ -1342,26 +1623,26 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz", - "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz", - "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dependencies": { - "@floating-ui/core": "^1.5.3", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@github/catalyst": { "version": "1.6.0", @@ -1369,6 +1650,46 @@ "integrity": "sha512-u8A+DameixqpeyHzvnJWTGj+wfiskQOYHzSiJscCWVfMkIT3rxnbHMtGh3lMthaRY21nbUOK71WcsCnCrXhBJQ==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", @@ -1503,9 +1824,9 @@ } }, "node_modules/@lit-labs/testing": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@lit-labs/testing/-/testing-0.2.4.tgz", - "integrity": "sha512-NasNKbELasyfA1vIcfMwM0H/2mE98uFsyf/yDWtcl9fAEsTpRRWrmPdQDrHDyim5LKnsQutCzBP3Fof83hSCIA==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@lit-labs/testing/-/testing-0.2.5.tgz", + "integrity": "sha512-VVYPhnpYhTgmZ3pWGQV8ZN/c81/aUlxSya+G94pNhlAiKUqsAwJZAkQCEZLncF8WHWg9jhas3eswxe9G3oQr1Q==", "dev": true, "dependencies": { "@lit-labs/ssr": "^3.1.8", @@ -1613,9 +1934,9 @@ } }, "node_modules/@lit/react": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@lit/react/-/react-1.0.2.tgz", - "integrity": "sha512-UJ5TQ46DPcJDIzyjbwbj6Iye0XcpCxL2yb03zcWq1BpWchpXS3Z0BPVhg7zDfZLF6JemPml8u/gt/+KwJ/23sg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@lit/react/-/react-1.0.6.tgz", + "integrity": "sha512-QIss8MPh6qUoFJmuaF4dSHts3qCsA36S3HcOLiNPShxhgYPr4XJRnCBKPipk85sR9xr6TQrOcDMfexwbNdJHYA==", "dev": true, "peerDependencies": { "@types/react": "17 || 18" @@ -1766,20 +2087,45 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/@puppeteer/browsers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.1.0.tgz", - "integrity": "sha512-xloWvocjvryHdUjDam/ZuGMh7zn4Sn3ZAaV4Ah2e2EwEt90N3XphZlSsU3n0VDc1F7kggCjMuH0UuxfPQ5mD9w==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@prettier/sync": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.5.2.tgz", + "integrity": "sha512-Yb569su456XNx5BsH/Vyem7xD6g/y9iLmLUzRKM1a/dhU/D7HqqvkAG72znulXlMXztbV0iiu9O5AL8K98TzZQ==", "dev": true, "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.4.0", - "semver": "7.6.0", - "tar-fs": "3.0.5", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" + "make-synchronized": "^0.2.8" + }, + "funding": { + "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" + }, + "peerDependencies": { + "prettier": "*" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.6.1.tgz", + "integrity": "sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==", + "dev": true, + "dependencies": { + "debug": "^4.4.0", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" @@ -1788,30 +2134,28 @@ "node": ">=18" } }, - "node_modules/@puppeteer/browsers/node_modules/tar-fs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", - "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" + "ms": "^2.1.3" }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@puppeteer/browsers/node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dev": true, - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } + "node_modules/@puppeteer/browsers/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", @@ -2036,9 +2380,9 @@ ] }, "node_modules/@shoelace-style/animations": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@shoelace-style/animations/-/animations-1.1.0.tgz", - "integrity": "sha512-Be+cahtZyI2dPKRm8EZSx3YJQ+jLvEcn3xzRP7tM4tqBnvd/eW/64Xh0iOf0t2w5P8iJKfdBbpVNE9naCaOf2g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@shoelace-style/animations/-/animations-1.2.0.tgz", + "integrity": "sha512-avvo1xxkLbv2dgtabdewBbqcJfV0e0zCwFqkPMnHFGbJbBHorRFfMAHh1NG9ymmXn0jW95ibUVH03E1NYXD6Gw==", "funding": { "type": "individual", "url": "https://github.com/sponsors/claviska" @@ -2409,9 +2753,9 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true }, "node_modules/@types/node": { @@ -3242,15 +3586,15 @@ } }, "node_modules/@web/test-runner": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.18.1.tgz", - "integrity": "sha512-jB/9vrpGVtcLY6/7sPpKpSheQ3wWY9P5aQcz2SK2gMHTq3gNpa51NAyec0Al7EFpHvJ1wKYTGRLB2gPyEoJeDg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.19.0.tgz", + "integrity": "sha512-qLUupi88OK1Kl52cWPD/2JewUCRUxYsZ1V1DyLd05P7u09zCdrUYrtkB/cViWyxlBe/TOvqkSNpcTv6zLJ9GoA==", "dev": true, "dependencies": { "@web/browser-logs": "^0.4.0", "@web/config-loader": "^0.3.0", "@web/dev-server": "^0.4.0", - "@web/test-runner-chrome": "^0.16.0", + "@web/test-runner-chrome": "^0.17.0", "@web/test-runner-commands": "^0.9.0", "@web/test-runner-core": "^0.13.0", "@web/test-runner-mocha": "^0.9.0", @@ -3273,16 +3617,16 @@ } }, "node_modules/@web/test-runner-chrome": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.16.0.tgz", - "integrity": "sha512-Edc6Y49aVB6k18S5IOj9OCX3rEf8F3jptIu0p95+imqxmcutFEh1GNmlAk2bQGnXS0U6uVY7Xbf61fiaXUQqhg==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.17.0.tgz", + "integrity": "sha512-Il5N9z41NKWCrQM1TVgRaDWWYoJtG5Ha4fG+cN1MWL2OlzBS4WoOb4lFV3EylZ7+W3twZOFr1zy2Rx61yDYd/A==", "dev": true, "dependencies": { "@web/test-runner-core": "^0.13.0", "@web/test-runner-coverage-v8": "^0.8.0", "async-mutex": "0.4.0", "chrome-launcher": "^0.15.0", - "puppeteer-core": "^22.0.0" + "puppeteer-core": "^23.2.0" }, "engines": { "node": ">=18.0.0" @@ -3566,14 +3910,26 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/aggregate-error": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", @@ -3690,18 +4046,6 @@ "node": ">=6" } }, - "node_modules/array-differ": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", - "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", @@ -3808,9 +4152,9 @@ } }, "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", "dev": true }, "node_modules/balanced-match": { @@ -3820,42 +4164,51 @@ "dev": true }, "node_modules/bare-events": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.1.tgz", - "integrity": "sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", "dev": true, "optional": true }, "node_modules/bare-fs": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.1.tgz", - "integrity": "sha512-+CjmZANQDFZWy4PGbVdmALIwmt33aJg8qTkVjClU6X4WmZkTPBDxRHiBn7fpqEWEfF3AC2io++erpViAIQbSjg==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", "dev": true, "optional": true, "dependencies": { "bare-events": "^2.0.0", - "bare-os": "^2.0.0", "bare-path": "^2.0.0", - "streamx": "^2.13.0" + "bare-stream": "^2.0.0" } }, "node_modules/bare-os": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.0.tgz", - "integrity": "sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", "dev": true, "optional": true }, "node_modules/bare-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz", - "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", "dev": true, "optional": true, "dependencies": { "bare-os": "^2.1.0" } }, + "node_modules/bare-stream": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.1.tgz", + "integrity": "sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==", + "dev": true, + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3964,12 +4317,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -4430,41 +4783,15 @@ "node": ">=12.13.0" } }, - "node_modules/chrome-launcher/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chrome-launcher/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/chromium-bidi": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.12.tgz", - "integrity": "sha512-sZMgEBWKbupD0Q7lyFu8AWkrE+rs5ycE12jFkGwIgD/VS8lDPtelPlXM7LYaq4zrkZ/O2L3f4afHUHL0ICdKog==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz", + "integrity": "sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug==", "dev": true, "dependencies": { "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0" + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" @@ -4834,9 +5161,12 @@ } }, "node_modules/composed-offset-position": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/composed-offset-position/-/composed-offset-position-0.0.4.tgz", - "integrity": "sha512-vMlvu1RuNegVE0YsCDSV/X4X10j56mq7PCIyOKK74FxkXzGLwhOUmdkJLSdOBOMwWycobGUMgft2lp+YgTe8hw==" + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/composed-offset-position/-/composed-offset-position-0.0.6.tgz", + "integrity": "sha512-Q7dLompI6lUwd7LWyIcP66r4WcS9u7AL2h8HaeipiRfCRPLMWqRx8fYsjb4OHi6UQFifO7XtNC2IlEJ1ozIFxw==", + "peerDependencies": { + "@floating-ui/utils": "^0.2.5" + } }, "node_modules/concat-map": { "version": "0.0.1", @@ -5024,15 +5354,6 @@ "node": ">=14" } }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5353,75 +5674,30 @@ "dev": true }, "node_modules/custom-element-jet-brains-integration": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/custom-element-jet-brains-integration/-/custom-element-jet-brains-integration-1.4.3.tgz", - "integrity": "sha512-UMNI6/c5bO2lPlKpaYZHoiAMcmUdECT4BjIoBs0RLrBmBHGECoN+ppTVl9WLs4m/NUR70iXbTIYN6srXmC+m9w==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/custom-element-jet-brains-integration/-/custom-element-jet-brains-integration-1.6.2.tgz", + "integrity": "sha512-V3jixEhQG+dg+uwn7bfb+q49MWQmWMCxGw6uT5mwHEEuIxAwtv46xf9Co1WP5h31n8yVJReEl3b7qCNvZPqcpA==", "dev": true, "dependencies": { - "prettier": "^2.8.0" - } - }, - "node_modules/custom-element-jet-brains-integration/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "@prettier/sync": "^0.5.2" } }, "node_modules/custom-element-vs-code-integration": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/custom-element-vs-code-integration/-/custom-element-vs-code-integration-1.2.2.tgz", - "integrity": "sha512-nts++86m/ujE4PZ8HSsxQ6a8ukrWF0J4LdCTFqCnErELCfCO+qozUDGcZ9Ufm5CnL7fYEygproFAZObEmJE8og==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/custom-element-vs-code-integration/-/custom-element-vs-code-integration-1.4.1.tgz", + "integrity": "sha512-aOQpNayEzXHUg7JRo/eIS8aCMiOPLuMwhANj4iFdAz3NnHy5Y0Us7uS/qSeJhYbl+5NddygQvp3is8L0ggxMbQ==", "dev": true, "dependencies": { - "prettier": "^2.7.1" - } - }, - "node_modules/custom-element-vs-code-integration/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "@prettier/sync": "^0.5.2" } }, "node_modules/custom-element-vuejs-integration": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-element-vuejs-integration/-/custom-element-vuejs-integration-1.0.1.tgz", - "integrity": "sha512-whoB5DqPNIxaltlvTuOXrP543o5dHKV1ae3a3qFHwKKKwDSCU9vtTOIZpZ4NdRmBPDbaCOgQvYxCJmjdDXrC+g==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/custom-element-vuejs-integration/-/custom-element-vuejs-integration-1.3.3.tgz", + "integrity": "sha512-LANqSfeNb8MDLyMh0Gqs4E+H3LlA36TR9zsuAm8M5KQqMAwrl3s+4GAmtJMJwU+ylBAFwsSXWpXYea6vf2NHcw==", "dev": true, "dependencies": { - "prettier": "^2.7.1" - } - }, - "node_modules/custom-element-vuejs-integration/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "@prettier/sync": "^0.5.2" } }, "node_modules/custom-elements-manifest": { @@ -5847,9 +6123,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1249869", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1249869.tgz", - "integrity": "sha512-Ctp4hInA0BEavlUoRy9mhGq0i+JSo/AwVyX2EFgZmV1kYB+Zq+EMBAn52QWu6FbRr10hRb6pBl420upbp4++vg==", + "version": "0.0.1367902", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1367902.tgz", + "integrity": "sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==", "dev": true }, "node_modules/diff": { @@ -6089,9 +6365,9 @@ "dev": true }, "node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/encodeurl": { @@ -6309,41 +6585,42 @@ } }, "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "node_modules/esbuild-plugin-replace": { @@ -6750,10 +7027,19 @@ "node": ">=6" } }, + "node_modules/filesize": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", + "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", + "dev": true, + "engines": { + "node": ">= 10.4.0" + } + }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -6763,13 +7049,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -6789,6 +7075,15 @@ "ms": "2.0.0" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6924,6 +7219,34 @@ "node": ">=0.10.0" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -7051,9 +7374,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, "engines": { "node": ">=18" @@ -7082,9 +7405,9 @@ } }, "node_modules/get-port": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.0.0.tgz", - "integrity": "sha512-mDHFgApoQd+azgMdwylJrv2DX47ywGq1i5VFJE7fZ0dttNq3iQMfsU4IvEgBHojA3KqEudyu7Vq+oN8kNaNkWw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", "dev": true, "engines": { "node": ">=16" @@ -7118,53 +7441,37 @@ } }, "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", "dev": true, "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" + "debug": "^4.3.4" }, "engines": { "node": ">= 14" } }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/get-uri/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "bin": { + "glob": "dist/esm/bin.mjs" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/get-uri/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { @@ -7617,6 +7924,32 @@ "node": ">=8.0.0" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/husky": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", @@ -8041,6 +8374,25 @@ "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -8133,6 +8485,21 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -8370,6 +8737,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isbinaryfile": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", @@ -8389,9 +8768,9 @@ "dev": true }, "node_modules/iso-639-1": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.2.tgz", - "integrity": "sha512-Le7BRl3Jt9URvaiEHJCDEdvPZCfhiQoXnFgLAWNRhzFMwRFdWO7/5tLRQbiPzE394I9xd7KdRCM7S6qdOhwG5A==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.3.tgz", + "integrity": "sha512-1jz0Wh9hyLMRwqEPchb/KZCiTqfFWtc9R3nm7GHPygBAKS8wdKJ3FH4lvLsri6UtAE5Kz5SnowtXZa//6bqMyw==", "dev": true, "engines": { "node": ">=6.0" @@ -8476,6 +8855,21 @@ "node": ">= 4" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8494,6 +8888,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -8831,9 +9231,9 @@ } }, "node_modules/liquidjs": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.10.0.tgz", - "integrity": "sha512-f4gPvCq4uV4Fm5YezVUQoAMPmBMEuIE2LvgCnzyWoPRx+ZefH6b8DU2eb7znltRqATHF8zYvOsd5FD2z1spJgg==", + "version": "10.19.0", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.19.0.tgz", + "integrity": "sha512-dNINmbNJ/bp3B8n25BtZQV/GbrmFf0o2InGdMdfQXa+LxfzTFXOkUnBsOLZUb82sLzxaiWv5Jc381Kn4zHjTsQ==", "dev": true, "dependencies": { "commander": "^10.0.0" @@ -8989,9 +9389,9 @@ } }, "node_modules/lit": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.0.tgz", - "integrity": "sha512-s6tI33Lf6VpDu7u4YqsSX78D28bYQulM+VAzsGch4fx2H0eLZnJsUBsPWmGYSGoKDNbjtRv02rio1o+UdPVwvw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", + "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", "dependencies": { "@lit/reactive-element": "^2.0.4", "lit-element": "^4.1.0", @@ -9395,9 +9795,9 @@ "dev": true }, "node_modules/luxon": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", - "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", + "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", "dev": true, "engines": { "node": ">=12" @@ -9439,6 +9839,15 @@ "node": ">=0.10.0" } }, + "node_modules/make-synchronized": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/make-synchronized/-/make-synchronized-0.2.9.tgz", + "integrity": "sha512-4wczOs8SLuEdpEvp3vGo83wh8rjJ78UsIk7DIX5fxdfmfMJGog4bQzxfvOwq7Q3yCHLC4jp1urPHIxRS/A93gA==", + "dev": true, + "funding": { + "url": "https://github.com/fisker/make-synchronized?sponsor=1" + } + }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -9466,9 +9875,9 @@ } }, "node_modules/markdown-it-attrs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.6.tgz", - "integrity": "sha512-O7PDKZlN8RFMyDX13JnctQompwrrILuz2y43pW2GagcwpIIElkAdfeek+erHfxUOlXWPsjFeWmZ8ch1xtRLWpA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.3.0.tgz", + "integrity": "sha512-SQpN8q5LCYtRNuzHaWVLThuJmArN+H3b+jykwaK8AS8XlxyosRvge/7wT9N0XaXCJ5STHGl3gAc6/PXx37cbiQ==", "dev": true, "engines": { "node": ">=6" @@ -9689,6 +10098,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -9699,9 +10120,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -9722,6 +10143,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mitt": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", @@ -9747,9 +10177,9 @@ "dev": true }, "node_modules/morphdom": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.2.tgz", - "integrity": "sha512-Dqb/lHFyTi7SZpY0a5R4I/0Edo+iPMbaUexsHHsLAByyixCDiLHPHyVoKVmrpL0THcT7V9Cgev9y21TQYq6wQg==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.4.tgz", + "integrity": "sha512-ATTbWMgGa+FaMU3FhnFYB6WgulCqwf6opOll4CBzmVDTLvPMmUPrEv8CudmLPK0MESa64+6B89fWOxP3+YIlxQ==", "dev": true }, "node_modules/ms": { @@ -9758,35 +10188,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/multimatch": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz", - "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==", - "dev": true, - "dependencies": { - "array-differ": "^4.0.0", - "array-union": "^3.0.1", - "minimatch": "^9.0.3" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/multimatch/node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mute-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", @@ -9987,13 +10388,13 @@ } }, "node_modules/node-retrieve-globals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/node-retrieve-globals/-/node-retrieve-globals-5.0.0.tgz", - "integrity": "sha512-C4R0rtPEoxJaeo8RnLWx3VMvFgs0fAePFvI6WHBS2BS/aNxuHwL9IK922UBOjHnD5UKVfY1Xef9qk/BkmLrWiw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/node-retrieve-globals/-/node-retrieve-globals-6.0.0.tgz", + "integrity": "sha512-VoEp6WMN/JcbBrJr6LnFE11kdzpKiBKNPFrHCEK2GgFWtiYpeL85WgcZpZFFnWxAU0O65+b+ipQAy4Oxy/+Pdg==", "dev": true, "dependencies": { - "acorn": "^8.8.2", - "acorn-walk": "^8.3.1", + "acorn": "^8.1.3", + "acorn-walk": "^8.3.2", "esm-import-transformer": "^3.0.2" } }, @@ -10020,6 +10421,20 @@ "node": ">=4" } }, + "node_modules/npm-check-updates": { + "version": "17.1.11", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-17.1.11.tgz", + "integrity": "sha512-TR2RuGIH7P3Qrb0jfdC/nT7JWqXPKjDlxuNQt3kx4oNVf1Pn5SBRB7KLypgYZhruivJthgTtfkkyK4mz342VjA==", + "dev": true, + "bin": { + "ncu": "build/cli.js", + "npm-check-updates": "build/cli.js" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0", + "npm": ">=8.12.1" + } + }, "node_modules/npm-run-path": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", @@ -10233,33 +10648,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/openurl": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", @@ -10288,19 +10676,19 @@ } }, "node_modules/ora": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz", - "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.1.1.tgz", + "integrity": "sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==", "dev": true, "dependencies": { "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", + "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.1", - "string-width": "^7.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", "strip-ansi": "^7.1.0" }, "engines": { @@ -10311,15 +10699,15 @@ } }, "node_modules/ora/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10337,46 +10725,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ora/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ora/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -10495,71 +10886,19 @@ } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz", + "integrity": "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==", "dev": true, "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -10578,6 +10917,12 @@ "node": ">= 14" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -10736,6 +11081,28 @@ "node": ">=0.10.0" } }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "node_modules/path-to-regexp": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", @@ -10812,12 +11179,12 @@ } }, "node_modules/playwright": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.46.1.tgz", - "integrity": "sha512-oPcr1yqoXLCkgKtD5eNUPLiN40rYEM39odNpIb6VE6S7/15gJmA1NzVv6zJYusV0e7tzvkU/utBFNa/Kpxmwng==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.1.tgz", + "integrity": "sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==", "dev": true, "dependencies": { - "playwright-core": "1.46.1" + "playwright-core": "1.49.1" }, "bin": { "playwright": "cli.js" @@ -10830,9 +11197,9 @@ } }, "node_modules/playwright-core": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.46.1.tgz", - "integrity": "sha512-h9LqIQaAv+CYvWzsZ+h3RsrqCStkBHlgo6/TJlFst3cOTlLghBQlJwPOZKQJTKNaD3QIB7aAVQ+gfWbN3NXB7A==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.1.tgz", + "integrity": "sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -10966,6 +11333,18 @@ "node": ">=12.0.0" } }, + "node_modules/posthtml-match-helper": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/posthtml-match-helper/-/posthtml-match-helper-2.0.3.tgz", + "integrity": "sha512-p9oJgTdMF2dyd7WE54QI1LvpBIkNkbSiiECKezNnDVYhGhD1AaOnAkw0Uh0y5TW+OHO8iBdSqnd8Wkpb6iUqmw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "posthtml": "^0.16.6" + } + }, "node_modules/posthtml-parser": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", @@ -11000,9 +11379,9 @@ } }, "node_modules/prettier": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -11065,57 +11444,19 @@ } }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -11130,20 +11471,6 @@ "node": ">=12" } }, - "node_modules/proxy-agent/node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", - "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -11185,22 +11512,45 @@ } }, "node_modules/puppeteer-core": { - "version": "22.4.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.4.0.tgz", - "integrity": "sha512-MZttAbttrxi6O/B//rY6zQihjFe/vXeCLb5YvKH2xG6yrcVESo0Hc5/Cv49omwZyZzAJ1BK8BnDeatDsj+3hMw==", + "version": "23.10.4", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.10.4.tgz", + "integrity": "sha512-pQAY7+IFAndWDkDodsQGguW1/ifV5OMlGXJDspwtK49Asb7poJZ/V5rXJxVSpq57bWrJasjQBZ1X27z1oWVq4Q==", "dev": true, "dependencies": { - "@puppeteer/browsers": "2.1.0", - "chromium-bidi": "0.5.12", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1249869", - "ws": "8.16.0" + "@puppeteer/browsers": "2.6.1", + "chromium-bidi": "0.8.0", + "debug": "^4.4.0", + "devtools-protocol": "0.0.1367902", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.0" }, "engines": { "node": ">=18" } }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "node_modules/qr-creator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/qr-creator/-/qr-creator-1.0.0.tgz", @@ -11917,13 +12267,10 @@ "dev": true }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -12374,19 +12721,33 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -12446,27 +12807,15 @@ "dev": true }, "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-11.0.0.tgz", + "integrity": "sha512-aZpUoMN/Jj2MqA4vMCeiKGnc/8SuSyHbGSBdgFbZxP8OJGF/lFkIuElzPxsN0q8TQQ+prw3P4EDfB3TBHHgfXw==", "dev": true, "dependencies": { - "minipass": "^3.1.1" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/ssri/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/statuses": { @@ -12522,13 +12871,17 @@ "dev": true }, "node_modules/streamx": { - "version": "2.15.6", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", - "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "version": "2.21.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", + "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", "dev": true, "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" } }, "node_modules/strict-uri-encode": { @@ -12565,9 +12918,9 @@ } }, "node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -12581,6 +12934,57 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -12596,6 +13000,28 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -12719,6 +13145,31 @@ "node": ">=6" } }, + "node_modules/tar-fs": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, + "node_modules/tar-fs/node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", @@ -12747,6 +13198,15 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -12844,9 +13304,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true }, "node_modules/tsscmp": { @@ -12880,6 +13340,12 @@ "node": ">= 0.6" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "dev": true + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -12890,9 +13356,9 @@ } }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -13079,9 +13545,9 @@ "dev": true }, "node_modules/user-agent-data-types": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/user-agent-data-types/-/user-agent-data-types-0.3.1.tgz", - "integrity": "sha512-vS7pZmuEVPlf2CQf+PfNbwWJZA4aQAEa8sH7xhMrjZ1zXNvW7HHEdzmSvI7z/qyyIRVD50DEi4ckuzZcebKHGg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/user-agent-data-types/-/user-agent-data-types-0.4.2.tgz", + "integrity": "sha512-jXep3kO/dGNmDOkbDa8ccp4QArgxR4I76m3QVcJ1aOF0B9toc+YtSXtX5gLdDTZXyWlpQYQrABr6L1L2GZOghw==", "dev": true }, "node_modules/util-deprecate": { @@ -13243,6 +13709,89 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -13285,9 +13834,9 @@ } }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" @@ -13451,6 +14000,15 @@ "engines": { "node": ">= 4.0.0" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index d2f7f26bf..efede1452 100644 --- a/package.json +++ b/package.json @@ -57,31 +57,33 @@ "prettier:fix": "prettier --write --log-level=warn .", "spellcheck": "cspell \"**/*.{js,ts,json,html,css,md}\" --no-progress", "verify": "npm run prettier && npm run build && npm run test", - "prepublishOnly": "npm run verify" + "prepublishOnly": "npm run verify", + "check-updates": "npx npm-check-updates --interactive --format group" }, "engines": { "node": ">=14.17.0" }, "dependencies": { - "@ctrl/tinycolor": "^4.0.2", - "@floating-ui/dom": "^1.5.3", - "@shoelace-style/animations": "^1.1.0", + "@ctrl/tinycolor": "^4.1.0", + "@floating-ui/dom": "^1.6.12", + "@shoelace-style/animations": "^1.2.0", "@shoelace-style/localize": "^3.2.1", - "composed-offset-position": "^0.0.4", - "lit": "^3.0.0", + "composed-offset-position": "^0.0.6", + "lit": "^3.2.1", "qr-creator": "^1.0.0" }, "devDependencies": { - "@11ty/eleventy": "3.0.0-alpha.5", - "@custom-elements-manifest/analyzer": "^0.9.4", + "@11ty/eleventy": "3.0.0", + "@custom-elements-manifest/analyzer": "^0.10.4", + "@konnorr/esbuild-plugin-lit-css": "^1.0.1", "@lit-labs/eleventy-plugin-lit": "^1.0.3", - "@lit-labs/testing": "^0.2.4", - "@lit/react": "^1.0.0", + "@lit-labs/testing": "^0.2.5", + "@lit/react": "^1.0.6", "@open-wc/testing": "^3.2.0", - "@types/mocha": "^10.0.2", + "@types/mocha": "^10.0.10", "@types/react": "^18.2.28", "@web/dev-server-esbuild": "^0.3.6", - "@web/test-runner": "^0.18.1", + "@web/test-runner": "^0.19.0", "@web/test-runner-commands": "^0.9.0", "@web/test-runner-playwright": "^0.11.0", "browser-sync": "^2.29.3", @@ -89,47 +91,48 @@ "change-case": "^4.1.2", "chokidar": "^3.5.3", "command-line-args": "^5.2.1", - "comment-parser": "^1.4.0", + "comment-parser": "^1.4.1", "cspell": "^6.18.1", - "custom-element-jet-brains-integration": "^1.4.0", - "custom-element-vs-code-integration": "^1.2.1", - "custom-element-vuejs-integration": "^1.0.0", + "custom-element-jet-brains-integration": "^1.6.2", + "custom-element-vs-code-integration": "^1.4.1", + "custom-element-vuejs-integration": "^1.3.3", "del": "^7.1.0", "download": "^8.0.0", - "esbuild": "^0.19.4", + "esbuild": "0.23.1", "esbuild-plugin-replace": "^1.4.0", "front-matter": "^4.0.2", - "get-port": "^7.0.0", + "get-port": "^7.1.0", "globby": "^13.2.2", "husky": "^8.0.3", "lint-staged": "^14.0.1", "lunr": "^2.3.9", "markdown-it": "^14.1.0", - "markdown-it-attrs": "^4.1.6", + "markdown-it-attrs": "^4.3.0", "markdown-it-container": "^3.0.0", "markdown-it-ins": "^3.0.1", "markdown-it-kbd": "^2.2.2", "markdown-it-mark": "^3.0.1", "marked": "^11.1.0", "node-html-parser": "^6.1.13", - "ora": "^8.0.1", + "npm-check-updates": "^17.1.11", + "ora": "^8.1.1", "pascal-case": "^3.1.2", - "playwright": "^1.46.1", - "plop": "^4.0.0", - "prettier": "^3.0.3", + "playwright": "^1.49.1", + "plop": "^4.0.1", + "prettier": "^3.4.2", "prettier-plugin-organize-imports": "^4.1.0", "prismjs": "^1.29.0", "react": "^18.2.0", "recursive-copy": "^2.0.14", "sinon": "^16.1.0", "source-map": "^0.7.4", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "user-agent-data-types": "^0.3.1", + "tslib": "^2.8.1", + "typescript": "^5.7.2", + "user-agent-data-types": "^0.4.2", "uuid": "^9.0.1" }, "overrides": { - "playwright": "^1.46.1" + "playwright": "^1.49.1" }, "lint-staged": { "*.{ts,js}": [ diff --git a/src/components/avatar/avatar.css b/src/components/avatar/avatar.css index 0ce9455da..87ae833df 100644 --- a/src/components/avatar/avatar.css +++ b/src/components/avatar/avatar.css @@ -1,12 +1,8 @@ :host { --background-color: var(--wa-color-neutral-fill-normal); - --content-color: var(--wa-color-neutral-on-normal); + --text-color: var(--wa-color-neutral-on-normal); --size: 3rem; - display: inline-block; -} - -.avatar { display: inline-flex; align-items: center; justify-content: center; @@ -16,27 +12,22 @@ background-color: var(--background-color); font: inherit; font-size: calc(var(--size) * 0.4); - color: var(--content-color); + color: var(--text-color); user-select: none; -webkit-user-select: none; vertical-align: middle; -} - -.avatar--circle, -.avatar--circle .avatar__image { border-radius: var(--wa-border-radius-circle); } -.avatar--rounded, -.avatar--rounded .avatar__image { - border-radius: var(--wa-border-radius-s); -} - -.avatar--square { +:host([shape='square']) { border-radius: 0; } -.avatar__icon { +:host([shape='rounded']) { + border-radius: var(--wa-border-radius-s); +} + +.icon { display: flex; align-items: center; justify-content: center; @@ -47,12 +38,12 @@ height: 100%; } -.avatar__initials { +.initials { line-height: 1; text-transform: uppercase; } -.avatar__image { +.image { position: absolute; top: 0; left: 0; @@ -60,4 +51,5 @@ height: 100%; object-fit: cover; overflow: hidden; + border-radius: inherit; } diff --git a/src/components/avatar/avatar.ts b/src/components/avatar/avatar.ts index b95c1354d..bd8c286ed 100644 --- a/src/components/avatar/avatar.ts +++ b/src/components/avatar/avatar.ts @@ -1,6 +1,5 @@ import { html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; -import { classMap } from 'lit/directives/class-map.js'; import { WaErrorEvent } from '../../events/error.js'; import { watch } from '../../internal/watch.js'; import WebAwesomeElement from '../../internal/webawesome-element.js'; @@ -26,7 +25,7 @@ import styles from './avatar.css'; * @csspart image - The avatar image. Only shown when the `image` attribute is set. * * @cssproperty --background-color - The avatar's background color. - * @cssproperty --content-color - The color of the avatar's content. + * @cssproperty --text-color - The color of the avatar's content. * @cssproperty --size - The size of the avatar. */ @customElement('wa-avatar') @@ -65,10 +64,11 @@ export default class WaAvatar extends WebAwesomeElement { const avatarWithImage = html` `; @@ -76,32 +76,18 @@ export default class WaAvatar extends WebAwesomeElement { let avatarWithoutImage = html``; if (this.initials) { - avatarWithoutImage = html`
${this.initials}
`; + avatarWithoutImage = html``; } else { avatarWithoutImage = html` - + + + `; } - return html` - - `; + return html` ${this.image && !this.hasError ? avatarWithImage : avatarWithoutImage} `; } } diff --git a/src/components/badge/badge.css b/src/components/badge/badge.css index 07fdb6928..2adfb032f 100644 --- a/src/components/badge/badge.css +++ b/src/components/badge/badge.css @@ -1,50 +1,16 @@ :host { - --border-color: var(--background-color); - --border-radius: var(--wa-border-radius-xs); - --border-style: var(--wa-border-style); - --border-width: var(--wa-border-width-s); - - display: inline-flex; -} - -:host([variant='brand']) { - --background-color: var(--wa-color-brand-fill-loud); - --content-color: var(--wa-color-brand-on-loud); -} - -:host([variant='success']) { - --background-color: var(--wa-color-success-fill-loud); - --content-color: var(--wa-color-success-on-loud); -} - -:host([variant='warning']) { - --background-color: var(--wa-color-warning-fill-loud); - --content-color: var(--wa-color-warning-on-loud); -} - -:host([variant='neutral']) { - --background-color: var(--wa-color-neutral-fill-loud); - --content-color: var(--wa-color-neutral-on-loud); -} - -:host([variant='danger']) { - --background-color: var(--wa-color-danger-fill-loud); - --content-color: var(--wa-color-danger-on-loud); -} - -.badge { display: inline-flex; align-items: center; justify-content: center; font-size: max(var(--wa-font-size-2xs), 0.75em); font-weight: var(--wa-font-weight-semibold); line-height: 1; - background-color: var(--background-color); - border-color: var(--border-color); - border-radius: var(--border-radius); - border-style: var(--border-style); - border-width: var(--border-width); - color: var(--content-color); + background-color: var(--background-color, var(--wa-color-fill-loud)); + border-color: var(--border-color, transparent); + border-radius: var(--wa-border-radius-xs); + border-style: var(--wa-border-style); + border-width: var(--wa-border-width-s); + color: var(--text-color, var(--wa-color-on-loud)); white-space: nowrap; padding: 0.375em 0.625em; user-select: none; @@ -53,12 +19,12 @@ } /* Pill modifier */ -.badge--pill { +:host([pill]) { border-radius: var(--wa-border-radius-pill); } /* Pulse modifier */ -.badge--pulse { +:host([pulse]) { --pulse-color: var(--background-color); animation: pulse 1.5s infinite; diff --git a/src/components/badge/badge.ts b/src/components/badge/badge.ts index dca1a1573..502e43a97 100644 --- a/src/components/badge/badge.ts +++ b/src/components/badge/badge.ts @@ -1,7 +1,8 @@ import { html } from 'lit'; import { customElement, property } from 'lit/decorators.js'; -import { classMap } from 'lit/directives/class-map.js'; import WebAwesomeElement from '../../internal/webawesome-element.js'; +import appearanceStyles from '../../styles/utilities/appearance.css'; +import variantStyles from '../../styles/utilities/variants.css'; import styles from './badge.css'; /** @@ -19,15 +20,18 @@ import styles from './badge.css'; * @cssproperty --border-radius - The radius of the badge's corners. * @cssproperty --border-style - The style of the badge's border. * @cssproperty --border-width - The width of the badge's border. - * @cssproperty --content-color - The color of the badge's content. + * @cssproperty --text-color - The color of the badge's content. */ @customElement('wa-badge') export default class WaBadge extends WebAwesomeElement { - static shadowStyle = styles; + static shadowStyle = [variantStyles, appearanceStyles, styles]; /** The badge's theme variant. */ @property({ reflect: true }) variant: 'brand' | 'success' | 'neutral' | 'warning' | 'danger' = 'brand'; + /** The badge's visual appearance. */ + @property({ reflect: true }) appearance: 'filled' | 'tinted' | 'outlined' = 'filled'; + /** Draws a pill-style badge with rounded edges. */ @property({ type: Boolean, reflect: true }) pill = false; @@ -35,24 +39,7 @@ export default class WaBadge extends WebAwesomeElement { @property({ type: Boolean, reflect: true }) pulse = false; render() { - return html` - - - - `; + return html` `; } } diff --git a/src/components/button-group/button-group.css b/src/components/button-group/button-group.css index e835cadcb..feb4b28f5 100644 --- a/src/components/button-group/button-group.css +++ b/src/components/button-group/button-group.css @@ -1,19 +1,3 @@ :host { display: inline-flex; } - -.button-group { - display: flex; - position: relative; - flex-wrap: wrap; - isolation: isolate; -} - -:host([orientation='vertical']) .button-group { - flex-direction: column; -} - -/* Show the focus indicator above other buttons */ -::slotted(:focus) { - z-index: 1 !important; -} diff --git a/src/components/button-group/button-group.ts b/src/components/button-group/button-group.ts index 656a3bd2e..bf188cd52 100644 --- a/src/components/button-group/button-group.ts +++ b/src/components/button-group/button-group.ts @@ -1,6 +1,7 @@ import { html } from 'lit'; import { customElement, property, query, state } from 'lit/decorators.js'; import WebAwesomeElement from '../../internal/webawesome-element.js'; +import buttonGroupStyles from '../../styles/utilities/button-group.css'; import styles from './button-group.css'; /** @@ -15,7 +16,7 @@ import styles from './button-group.css'; */ @customElement('wa-button-group') export default class WaButtonGroup extends WebAwesomeElement { - static shadowStyle = styles; + static shadowStyle = [buttonGroupStyles, styles]; @query('slot') defaultSlot: HTMLSlotElement; @@ -82,20 +83,19 @@ export default class WaButtonGroup extends WebAwesomeElement { } render() { - // eslint-disable-next-line lit-a11y/mouse-events-have-key-events return html` -
- -
+ @slotchange=${this.handleSlotChange} + > `; } } diff --git a/src/components/button/button.css b/src/components/button/button.css index 326384048..2b48f6eec 100644 --- a/src/components/button/button.css +++ b/src/components/button/button.css @@ -1,479 +1,106 @@ :host { - display: inline-block; + display: contents; position: relative; - width: auto; - cursor: pointer; } -/* - * Filled buttons - */ - -:host([appearance='filled'][variant='neutral']) { - --background-color: var(--wa-color-neutral-fill-loud); - --label-color: var(--wa-color-neutral-on-loud); -} - -:host([appearance='filled'][variant='brand']) { - --background-color: var(--wa-color-brand-fill-loud); - --label-color: var(--wa-color-brand-on-loud); -} - -:host([appearance='filled'][variant='success']) { - --background-color: var(--wa-color-success-fill-loud); - --label-color: var(--wa-color-success-on-loud); -} - -:host([appearance='filled'][variant='warning']) { - --background-color: var(--wa-color-warning-fill-loud); - --label-color: var(--wa-color-warning-on-loud); -} - -:host([appearance='filled'][variant='danger']) { - --background-color: var(--wa-color-danger-fill-loud); - --label-color: var(--wa-color-danger-on-loud); -} - -/* - * Tinted buttons - */ - -:host([appearance='tinted']) { - --background-color-hover: color-mix(in oklab, var(--background-color), transparent 10%); - --background-color-active: color-mix(in oklab, var(--background-color), transparent 20%); -} - -:host([appearance='tinted'][variant='neutral']) { - --background-color: var(--wa-color-neutral-fill-normal); - --label-color: var(--wa-color-neutral-on-normal); -} - -:host([appearance='tinted'][variant='brand']) { - --background-color: var(--wa-color-brand-fill-normal); - --label-color: var(--wa-color-brand-on-normal); -} - -:host([appearance='tinted'][variant='success']) { - --background-color: var(--wa-color-success-fill-normal); - --label-color: var(--wa-color-success-on-normal); -} - -:host([appearance='tinted'][variant='warning']) { - --background-color: var(--wa-color-warning-fill-normal); - --label-color: var(--wa-color-warning-on-normal); -} - -:host([appearance='tinted'][variant='danger']) { - --background-color: var(--wa-color-danger-fill-normal); - --label-color: var(--wa-color-danger-on-normal); -} - -/* - * Outlined buttons - */ - -:host([appearance='outlined']), -:host(.wa-button-group__button--radio:not([checked])) { - --background-color: transparent; - --background-color-active: color-mix(in oklab, var(--background-color-hover), transparent 20%); -} - -:host([appearance='outlined'][variant='neutral']), -:host(.wa-button-group__button--radio:not([checked])) { - --background-color-hover: var(--wa-color-neutral-fill-quiet); - --border-color: var(--wa-color-neutral-border-loud); - --label-color: var(--wa-color-neutral-on-quiet); -} - -:host([appearance='outlined'][variant='brand']) { - --background-color-hover: var(--wa-color-brand-fill-quiet); - --border-color: var(--wa-color-brand-border-loud); - --label-color: var(--wa-color-brand-on-quiet); -} - -:host([appearance='outlined'][variant='success']) { - --background-color-hover: var(--wa-color-success-fill-quiet); - --border-color: var(--wa-color-success-border-loud); - --label-color: var(--wa-color-success-on-quiet); -} - -:host([appearance='outlined'][variant='warning']) { - --background-color-hover: var(--wa-color-warning-fill-quiet); - --border-color: var(--wa-color-warning-border-loud); - --label-color: var(--wa-color-warning-on-quiet); -} - -:host([appearance='outlined'][variant='danger']) { - --background-color-hover: var(--wa-color-danger-fill-quiet); - --border-color: var(--wa-color-danger-border-loud); - --label-color: var(--wa-color-danger-on-quiet); -} - -/* - * Text buttons - */ - -:host([appearance='text']) { - --background-color: transparent; - --background-color-active: color-mix(in oklab, var(--background-color-hover), transparent 20%); -} - -:host([appearance='text'][variant='neutral']) { - --label-color: var(--wa-color-neutral-on-quiet); - --background-color-hover: var(--wa-color-neutral-fill-quiet); -} - -:host([appearance='text'][variant='brand']) { - --label-color: var(--wa-color-brand-on-quiet); - --background-color-hover: var(--wa-color-brand-fill-quiet); -} - -:host([appearance='text'][variant='success']) { - --label-color: var(--wa-color-success-on-quiet); - --background-color-hover: var(--wa-color-success-fill-quiet); -} - -:host([appearance='text'][variant='warning']) { - --label-color: var(--wa-color-warning-on-quiet); - --background-color-hover: var(--wa-color-warning-fill-quiet); -} - -:host([appearance='text'][variant='danger']) { - --label-color: var(--wa-color-danger-on-quiet); - --background-color-hover: var(--wa-color-danger-fill-quiet); -} - -/* - * Checked buttons - */ - -:host([checked]) { - --background-color: var(--wa-color-brand-fill-quiet); - --background-color-hover: var(--background-color); - --border-color: var(--wa-form-control-activated-color); - --label-color: var(--wa-color-brand-on-normal); - --indicator-color: var(--border-color); - --indicator-width: var(--wa-border-width-s); -} - -/* - * Internal - */ - -.button { +:where([part~='base']) { + all: inherit; display: inline-flex; - align-items: stretch; - justify-content: center; - width: 100%; -} - -.button--checked { - box-shadow: - var(--box-shadow, 0 0 transparent), - inset 0 0 0 var(--indicator-width) var(--indicator-color); } /* - * States - */ + * Label + */ -.button::-moz-focus-inner { - border: 0; -} - -.button:focus { - outline: none; -} - -.button:focus-visible { - outline: var(--wa-focus-ring); - outline-offset: var(--wa-focus-ring-offset); -} - -.button--disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* When disabled, prevent mouse events from bubbling up from children */ -.button--disabled * { - pointer-events: none; -} - -@media (forced-colors: active) { - .button.button--outlined.button--checked:not(.button--disabled) { - outline: solid 2px transparent; - } -} - -/* - * Label - */ - -.button__prefix, -.button__suffix { +.prefix, +.suffix { flex: 0 0 auto; display: flex; align-items: center; pointer-events: none; } -.button__label { +.label { display: inline-block; } -.button__label::slotted(wa-icon) { +.label::slotted(wa-icon) { vertical-align: -2px; } /* - * Size modifiers - */ + * Caret modifier + */ -.button--small { - font-size: var(--wa-font-size-s); - height: var(--wa-form-control-height-s); - line-height: calc(var(--wa-form-control-height-s) - var(--border-width) * 2); -} - -.button--medium { - font-size: var(--wa-font-size-m); - height: var(--wa-form-control-height-m); - line-height: calc(var(--wa-form-control-height-m) - var(--border-width) * 2); -} - -.button--large { - font-size: var(--wa-font-size-l); - height: var(--wa-form-control-height-l); - line-height: calc(var(--wa-form-control-height-l) - var(--border-width) * 2); -} - -/* - * Pill modifier - */ - -.button--pill { - border-radius: var(--wa-border-radius-pill); -} - -/* - * Caret modifier - */ - -.button--caret .button__suffix { - display: none; -} - -.button--caret .button__caret { +wa-icon[part~='caret'] { display: flex; align-self: center; align-items: center; -} -.button--caret .button__caret::part(svg) { - width: 0.875em; - height: 0.875em; + &::part(svg) { + width: 0.875em; + height: 0.875em; + } + + .wa-button:has(&) .suffix { + display: none; + } } /* - * Loading modifier - */ + * Loading modifier + */ -.button--loading { +.loading { position: relative; cursor: wait; -} -.button--loading .button__prefix, -.button--loading .button__label, -.button--loading .button__suffix, -.button--loading .button__caret { - visibility: hidden; -} + .prefix, + .label, + .suffix, + .caret { + visibility: hidden; + } -.button--loading wa-spinner { - --indicator-color: currentColor; - --track-color: color-mix(in oklab, currentColor, transparent 90%); - position: absolute; - font-size: 1em; - height: 1em; - width: 1em; - top: calc(50% - 0.5em); - left: calc(50% - 0.5em); + wa-spinner { + --indicator-color: currentColor; + --track-color: color-mix(in oklab, currentColor, transparent 90%); + + position: absolute; + font-size: 1em; + height: 1em; + width: 1em; + top: calc(50% - 0.5em); + left: calc(50% - 0.5em); + } } /* - * Badges - */ + * Badges + */ -.button ::slotted(wa-badge) { - --border-color: var(--wa-color-surface-default); +button ::slotted(wa-badge) { + border-color: var(--wa-color-surface-default); position: absolute; - top: 0; - right: 0; + inset-block-start: 0; + inset-inline-end: 0; translate: 50% -50%; pointer-events: none; } -.button--rtl ::slotted(wa-badge) { - right: auto; - left: 0; +:host(:dir(rtl)) ::slotted(wa-badge) { translate: -50% -50%; } /* - * Button spacing - */ +* Button spacing +*/ -.button--small { - padding: 0 var(--wa-space-s); +slot[name='prefix']::slotted(*) { + margin-inline-end: var(--space); } -.button--medium { - padding: 0 var(--wa-space-m); -} - -.button--large { - padding: 0 var(--wa-space-l); -} - -.button--small ::slotted([slot='prefix']) { - margin-inline-end: var(--wa-space-s); -} - -.button--medium ::slotted([slot='prefix']) { - margin-inline-end: var(--wa-space-m); -} - -.button--large ::slotted([slot='prefix']) { - margin-inline-end: var(--wa-space-l); -} - -.button--small ::slotted([slot='suffix']), -.button--small.button--caret:not(.button--visually-hidden-label) .button__caret { - margin-inline-start: var(--wa-space-s); -} - -.button--medium ::slotted([slot='suffix']), -.button--medium.button--caret:not(.button--visually-hidden-label) .button__caret { - margin-inline-start: var(--wa-space-m); -} - -.button--large ::slotted([slot='suffix']), -.button--large.button--caret:not(.button--visually-hidden-label) .button__caret { - margin-inline-start: var(--wa-space-l); -} - -/* - * Button groups support a variety of button types (e.g. buttons with tooltips, buttons as dropdown triggers, etc.). - * This means buttons aren't always direct descendants of the button group, thus we can't target them with the - * ::slotted selector. To work around this, the button group component does some magic to add these special classes to - * buttons and we style them here instead. - */ - -/* - :host([data-button-group-middle]) #button { - border-radius: 0; - } - - :host([data-button-group-horizontal][data-button-group-first]) #button { - border-start-end-radius: 0; - border-end-end-radius: 0; - } - - :host([data-button-group-horizontal][data-button-group-last]) #button { - border-start-start-radius: 0; - border-end-start-radius: 0; - } - - :host([data-button-group-vertical][data-button-group-first]) #button { - border-end-start-radius: 0; - border-end-end-radius: 0; - } - - :host([data-button-group-vertical][data-button-group-last]) #button { - border-start-start-radius: 0; - border-start-end-radius: 0; - } - */ - -:host(.wa-button-group__button--inner) .button { - border-radius: 0; -} - -:host(.wa-button-group-horizontal.wa-button-group__button--first:not(.wa-button-group__button--last)) .button { - border-start-end-radius: 0; - border-end-end-radius: 0; -} - -:host(.wa-button-group-horizontal.wa-button-group__button--last:not(.wa-button-group__button--first)) .button { - border-start-start-radius: 0; - border-end-start-radius: 0; -} - -:host(.wa-button-group-vertical.wa-button-group__button--first:not(.wa-button-group__button--last)) .button { - border-end-start-radius: 0; - border-end-end-radius: 0; -} - -:host(.wa-button-group-vertical.wa-button-group__button--last:not(.wa-button-group__button--first)) .button { - border-start-start-radius: 0; - border-start-end-radius: 0; -} - -/* All except the first */ -:host( - .wa-button-group-horizontal.wa-button-group-horizontal.wa-button-group__button:not(.wa-button-group__button--first) - ) { - margin-inline-start: calc(-1 * var(--border-width)); -} - -:host( - .wa-button-group-vertical.wa-button-group-horizontal.wa-button-group__button:not(.wa-button-group__button--first) - ) { - margin-block-start: calc(-1 * var(--border-width)); -} - -/* Add a visual separator between filled buttons */ -:host(.wa-button-group__button:not(.wa-button-group__button--first, .wa-button-group__button--radio)) .button:after { - content: ''; - position: absolute; - z-index: 2; /* Keep separators visible on hover */ -} - -:host( - .wa-button-group-horizontal.wa-button-group__button:not( - .wa-button-group__button--first, - .wa-button-group__button--radio - ) - ) - .button:after { - top: 0; - bottom: 0; - inset-inline-start: 0; - border-left: solid max(var(--border-width), 1px) var(--border-color, rgb(0 0 0 / 0.3)); -} - -:host( - .wa-button-group-vertical.wa-button-group__button:not( - .wa-button-group__button--first, - .wa-button-group__button--radio - ) - ) - .button:after { - left: 0; - right: 0; - inset-block-start: 0; - border-top: solid max(var(--border-width), 1px) var(--border-color, rgb(0 0 0 / 0.3)); -} - -/* Bump hovered, focused, and checked buttons up so their focus ring isn't clipped */ -:host(.wa-button-group__button--hover) { - z-index: 1; -} - -/* Focus and checked are always on top */ -:host(.wa-button-group__button--focus), -:host(.wa-button-group__button[checked]) { - z-index: 2; +slot[name='suffix']::slotted(*), +.wa-button:not(.visually-hidden-label) [part~='caret'] { + margin-inline-start: var(--space); } diff --git a/src/components/button/button.ts b/src/components/button/button.ts index 9cf45168d..22d4235ee 100644 --- a/src/components/button/button.ts +++ b/src/components/button/button.ts @@ -9,6 +9,9 @@ import { MirrorValidator } from '../../internal/validators/mirror-validator.js'; import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-element.js'; import nativeStyles from '../../styles/native/button.css'; +import appearanceStyles from '../../styles/utilities/appearance.css'; +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 '../spinner/spinner.js'; @@ -38,23 +41,19 @@ import styles from './button.css'; * @csspart caret - The button's caret icon, a `` element. * @csspart spinner - The spinner that shows when the button is in the loading state. * - * @cssproperty --background-color - The button's background color. + * @cssproperty --background-color - The button's background color when the button is not being interacted with. * @cssproperty --background-color-active - The button's background color when active. * @cssproperty --background-color-hover - The button's background color on hover. - * @cssproperty --border-color - The color of the button's border. + * @cssproperty --border-color - The color of the button's border when the button is not being interacted with. * @cssproperty --border-color-active - The color of the button's border when active. * @cssproperty --border-color-hover - The color of the button's border on hover. - * @cssproperty --border-radius - The radius of the button's corners. - * @cssproperty --border-style - The style of the button's border. - * @cssproperty --border-width - The width of the button's border. Expects a single value. - * @cssproperty --box-shadow - The shadow effects around the edges of the button. - * @cssproperty --label-color - The color of the button's label. - * @cssproperty --label-color-active - The color of the button's label when active. - * @cssproperty --label-color-hover - The color of the button's label on hover. + * @cssproperty --text-color - The color of the button's label when the button is not being interacted with. + * @cssproperty --text-color-active - The color of the button's label when active. + * @cssproperty --text-color-hover - The color of the button's label on hover. */ @customElement('wa-button') export default class WaButton extends WebAwesomeFormAssociatedElement { - static shadowStyle = [nativeStyles, styles]; + static shadowStyle = [variantStyles, appearanceStyles, sizeStyles, nativeStyles, styles]; static get validators() { return [...super.validators, MirrorValidator()]; @@ -63,7 +62,7 @@ export default class WaButton extends WebAwesomeFormAssociatedElement { assumeInteractionOn = ['click']; private readonly localize = new LocalizeController(this); - @query('.button') button: HTMLButtonElement | HTMLLinkElement; + @query('.wa-button') button: HTMLButtonElement | HTMLLinkElement; @state() private hasFocus = false; @state() visuallyHiddenLabel = false; @@ -236,6 +235,17 @@ export default class WaButton extends WebAwesomeFormAssociatedElement { this.button.blur(); } + getBoundingClientRect(): DOMRect { + let rect = super.getBoundingClientRect(); + let buttonRect = this.button.getBoundingClientRect(); + + if (rect.width === 0 && buttonRect.width > 0) { + return buttonRect; + } + + return rect; + } + render() { const isLink = this.isLink(); const tag = isLink ? literal`a` : literal`button`; @@ -247,25 +257,13 @@ export default class WaButton extends WebAwesomeFormAssociatedElement { part="base" class=${classMap({ button: true, - 'button--brand': this.variant === 'brand', - 'button--success': this.variant === 'success', - 'button--neutral': this.variant === 'neutral', - 'button--warning': this.variant === 'warning', - 'button--danger': this.variant === 'danger', - 'button--small': this.size === 'small', - 'button--medium': this.size === 'medium', - 'button--large': this.size === 'large', - 'button--caret': this.caret, - 'button--disabled': this.disabled, - 'button--focused': this.hasFocus, - 'button--loading': this.loading, - 'button--filled': this.appearance === 'filled', - 'button--tinted': this.appearance === 'tinted', - 'button--outlined': this.appearance === 'outlined', - 'button--text': this.appearance === 'text', - 'button--pill': this.pill, - 'button--rtl': this.localize.dir() === 'rtl', - 'button--visually-hidden-label': this.visuallyHiddenLabel, + 'wa-button': true, + caret: this.caret, + disabled: this.disabled, + focused: this.hasFocus, + loading: this.loading, + rtl: this.localize.dir() === 'rtl', + 'visually-hidden-label': this.visuallyHiddenLabel, })} ?disabled=${ifDefined(isLink ? undefined : this.disabled)} type=${ifDefined(isLink ? undefined : this.type)} @@ -284,27 +282,19 @@ export default class WaButton extends WebAwesomeFormAssociatedElement { @invalid=${this.isButton() ? this.handleInvalid : null} @click=${this.handleClick} > - - - + + + ${ this.caret ? html` - + ` : '' } ${this.loading ? html`` : ''} `; - /* eslint-enable lit/no-invalid-html */ - /* eslint-enable lit/binding-positions */ } } declare global { diff --git a/src/components/callout/callout.css b/src/components/callout/callout.css index 8bf187924..efc3a76d0 100644 --- a/src/components/callout/callout.css +++ b/src/components/callout/callout.css @@ -7,44 +7,14 @@ display: flex; align-items: stretch; border-radius: var(--wa-panel-border-radius); - background-color: var(--background-color); - border-color: var(--border-color); + background-color: var(--background-color, var(--wa-color-fill-quiet)); + border-color: var(--border-color, var(--wa-color-border-quiet)); border-style: var(--wa-panel-border-style); border-width: var(--wa-panel-border-width); - color: var(--content-color); + color: var(--text-color, var(--wa-color-on-normal)); padding: var(--spacing); } -:host([variant='brand']) { - --background-color: var(--wa-color-brand-fill-quiet); - --border-color: var(--wa-color-brand-border-quiet); - --content-color: var(--wa-color-brand-on-normal); -} - -:host([variant='success']) { - --background-color: var(--wa-color-success-fill-quiet); - --border-color: var(--wa-color-success-border-quiet); - --content-color: var(--wa-color-success-on-normal); -} - -:host([variant='neutral']) { - --background-color: var(--wa-color-neutral-fill-quiet); - --border-color: var(--wa-color-neutral-border-quiet); - --content-color: var(--wa-color-neutral-on-normal); -} - -:host([variant='warning']) { - --background-color: var(--wa-color-warning-fill-quiet); - --border-color: var(--wa-color-warning-border-quiet); - --content-color: var(--wa-color-warning-on-normal); -} - -:host([variant='danger']) { - --background-color: var(--wa-color-danger-fill-quiet); - --border-color: var(--wa-color-danger-border-quiet); - --content-color: var(--wa-color-danger-on-normal); -} - [part~='icon'] { flex: 0 0 auto; display: flex; diff --git a/src/components/callout/callout.ts b/src/components/callout/callout.ts index ddbf4d944..dae596097 100644 --- a/src/components/callout/callout.ts +++ b/src/components/callout/callout.ts @@ -1,6 +1,7 @@ import { html } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import WebAwesomeElement from '../../internal/webawesome-element.js'; +import variantStyles from '../../styles/utilities/variants.css'; import styles from './callout.css'; /** @@ -21,7 +22,7 @@ import styles from './callout.css'; */ @customElement('wa-callout') export default class WaCallout extends WebAwesomeElement { - static shadowStyle = styles; + static shadowStyle = [variantStyles, styles]; /** The callout's theme variant. */ @property({ reflect: true }) variant: 'brand' | 'success' | 'neutral' | 'warning' | 'danger' = 'brand'; diff --git a/src/components/checkbox/checkbox.ts b/src/components/checkbox/checkbox.ts index 3d279fe3e..0780a8d7f 100644 --- a/src/components/checkbox/checkbox.ts +++ b/src/components/checkbox/checkbox.ts @@ -13,7 +13,7 @@ import { RequiredValidator } from '../../internal/validators/required-validator. import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-element.js'; import formControlStyles from '../../styles/shadow/form-control.css'; -import sizeStyles from '../../styles/shadow/size.css'; +import sizeStyles from '../../styles/utilities/size.css'; import '../icon/icon.js'; import styles from './checkbox.css'; diff --git a/src/components/format-bytes/format-bytes.ts b/src/components/format-bytes/format-bytes.ts index 71ab333ff..1dcb34f68 100644 --- a/src/components/format-bytes/format-bytes.ts +++ b/src/components/format-bytes/format-bytes.ts @@ -10,6 +10,10 @@ import { LocalizeController } from '../../utilities/localize.js'; */ @customElement('wa-format-bytes') export default class WaFormatBytes extends WebAwesomeElement { + static get styles() { + return []; + } + private readonly localize = new LocalizeController(this); /** The number to format in bytes. */ diff --git a/src/components/format-date/format-date.ts b/src/components/format-date/format-date.ts index 91bffd9be..f0448c4b0 100644 --- a/src/components/format-date/format-date.ts +++ b/src/components/format-date/format-date.ts @@ -11,6 +11,10 @@ import { LocalizeController } from '../../utilities/localize.js'; */ @customElement('wa-format-date') export default class WaFormatDate extends WebAwesomeElement { + static get styles() { + return []; + } + private readonly localize = new LocalizeController(this); /** diff --git a/src/components/format-number/format-number.ts b/src/components/format-number/format-number.ts index ba527dc4c..3a065f7f0 100644 --- a/src/components/format-number/format-number.ts +++ b/src/components/format-number/format-number.ts @@ -10,6 +10,10 @@ import { LocalizeController } from '../../utilities/localize.js'; */ @customElement('wa-format-number') export default class WaFormatNumber extends WebAwesomeElement { + static get styles() { + return []; + } + private readonly localize = new LocalizeController(this); /** The number to format. */ diff --git a/src/components/input/input.css b/src/components/input/input.css index 26e0c360f..4fec1fe57 100644 --- a/src/components/input/input.css +++ b/src/components/input/input.css @@ -1,63 +1,13 @@ :host { - --background-color: var(--wa-form-control-background-color); - --border-color: var(--wa-form-control-resting-color); - --border-radius: var(--wa-form-control-border-radius); - --border-style: var(--wa-form-control-border-style); - --border-width: var(--wa-form-control-border-width); - --box-shadow: initial; - display: block; } -:host([filled]) { - --background-color: var(--wa-color-neutral-fill-quiet); - --border-color: var(--background-color); -} - .input { - background-color: var(--background-color); - border-color: var(--border-color); - border-radius: var(--border-radius); - border-style: var(--border-style); - border-width: var(--border-width); - box-shadow: var(--box-shadow); flex: 1 1 auto; - display: inline-flex; + display: flex; align-items: stretch; justify-content: start; position: relative; - width: 100%; - font: inherit; - vertical-align: middle; - overflow: hidden; - cursor: text; - transition: - background var(--wa-transition-normal) var(--wa-transition-easing), - border var(--wa-transition-normal) var(--wa-transition-easing), - outline var(--wa-transition-fast) var(--wa-transition-easing); -} - -/* Standard inputs */ -.input--standard.input--focused:not(.input--disabled) { - outline: var(--wa-focus-ring); - outline-offset: var(--wa-focus-ring-offset); - border-color: var(--wa-form-control-activated-color); -} - -.input--standard.input--disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* Filled inputs */ -.input--filled.input--focused:not(.input--disabled) { - outline: var(--wa-focus-ring); - outline-offset: var(--wa-focus-ring-offset); -} - -.input--filled.input--disabled { - opacity: 0.5; - cursor: not-allowed; } .input__control { @@ -65,8 +15,6 @@ min-width: 0; height: 100%; font: inherit; - line-height: var(--wa-form-control-value-line-height); - color: var(--wa-form-control-value-color); border: none; /* prettier-ignore */ background-color: rgb(118 118 118 / 0); /* ensures proper placeholder styles in webkit's date input */ @@ -84,28 +32,6 @@ -webkit-appearance: none; } -.input__control:-webkit-autofill, -.input__control:-webkit-autofill:hover, -.input__control:-webkit-autofill:focus, -.input__control:-webkit-autofill:active { - box-shadow: none; - -webkit-text-fill-color: var(--wa-color-brand-on-normal); - caret-color: var(--wa-form-control-value-color); -} - -.input--filled .input__control:-webkit-autofill, -.input--filled .input__control:-webkit-autofill:hover, -.input--filled .input__control:-webkit-autofill:focus, -.input--filled .input__control:-webkit-autofill:active { - box-shadow: none; -} - -.input__control::placeholder { - color: var(--wa-form-control-placeholder-color); - user-select: none; - -webkit-user-select: none; -} - .input__control:focus { outline: none; } @@ -195,14 +121,6 @@ } } -/* - * Pill modifier - */ - -.input--pill { - border-radius: var(--wa-border-radius-pill); -} - /* * Clearable + Password Toggle */ diff --git a/src/components/input/input.ts b/src/components/input/input.ts index 6ec900581..ed7842180 100644 --- a/src/components/input/input.ts +++ b/src/components/input/input.ts @@ -12,6 +12,7 @@ import { HasSlotController } from '../../internal/slot.js'; import { MirrorValidator } from '../../internal/validators/mirror-validator.js'; import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-element.js'; +import nativeStyles from '../../styles/native/input.css'; import formControlStyles from '../../styles/shadow/form-control.css'; import { LocalizeController } from '../../utilities/localize.js'; import type WaButton from '../button/button.js'; @@ -61,7 +62,7 @@ import styles from './input.css'; */ @customElement('wa-input') export default class WaInput extends WebAwesomeFormAssociatedElement { - static shadowStyle = [formControlStyles, styles]; + static shadowStyle = [formControlStyles, nativeStyles, styles]; static shadowRootOptions = { ...WebAwesomeFormAssociatedElement.shadowRootOptions, delegatesFocus: true }; diff --git a/src/components/menu-item/menu-item.css b/src/components/menu-item/menu-item.css index fe3996db9..2be893157 100644 --- a/src/components/menu-item/menu-item.css +++ b/src/components/menu-item/menu-item.css @@ -1,6 +1,6 @@ :host { --background-color-hover: var(--wa-color-neutral-fill-normal); - --label-color-hover: var(--wa-color-neutral-on-normal); + --text-color-hover: var(--wa-color-neutral-on-normal); --submenu-offset: -0.125rem; display: block; @@ -100,14 +100,14 @@ :host(:hover:not([aria-disabled='true'], :focus-visible)) .menu-item, .menu-item--submenu-expanded { background-color: var(--background-color-hover); - color: var(--label-color-hover); + color: var(--text-color-hover); } :host(:focus-visible) .menu-item { outline: var(--wa-focus-ring); outline-offset: calc(-1 * var(--wa-focus-ring-width)); background: var(--background-color-hover); - color: var(--label-color-hover); + color: var(--text-color-hover); opacity: 1; } diff --git a/src/components/menu-item/menu-item.ts b/src/components/menu-item/menu-item.ts index 20c081d81..17b8f8009 100644 --- a/src/components/menu-item/menu-item.ts +++ b/src/components/menu-item/menu-item.ts @@ -36,7 +36,7 @@ import { SubmenuController } from './submenu-controller.js'; * @csspart submenu-icon - The submenu icon, visible only when the menu item has a submenu (not yet implemented). * * @cssproperty --background-color-hover - The menu item's background color on hover. - * @cssproperty --label-color-hover - The label color on hover. + * @cssproperty --text-color-hover - The label color on hover. * @cssproperty [--submenu-offset=-2px] - The distance submenus shift to overlap the parent menu. */ @customElement('wa-menu-item') diff --git a/src/components/option/option.css b/src/components/option/option.css index cced8cdc4..27a4bbf53 100644 --- a/src/components/option/option.css +++ b/src/components/option/option.css @@ -1,8 +1,8 @@ :host { --background-color-current: var(--wa-color-brand-fill-loud); --background-color-hover: var(--wa-color-neutral-fill-normal); - --label-color-current: var(--wa-color-brand-on-loud); - --label-color-hover: var(--wa-color-neutral-on-normal); + --text-color-current: var(--wa-color-brand-on-loud); + --text-color-hover: var(--wa-color-neutral-on-normal); display: block; color: var(--wa-color-text-normal); @@ -27,13 +27,13 @@ .option--hover:not(.option--current):not(.option--disabled) { background-color: var(--background-color-hover); - color: var(--label-color-hover); + color: var(--text-color-hover); } .option--current, .option--current.option--disabled { background-color: var(--background-color-current); - color: var(--label-color-current); + color: var(--text-color-current); opacity: 1; } diff --git a/src/components/option/option.ts b/src/components/option/option.ts index 46a946f9f..9ab6cf61a 100644 --- a/src/components/option/option.ts +++ b/src/components/option/option.ts @@ -21,8 +21,8 @@ import styles from './option.css'; * * @cssproperty --background-color-current - The current option's background color. * @cssproperty --background-color-hover - The options's background color on hover. - * @cssproperty --label-color-current - The current option's label color. - * @cssproperty --label-color-hover - The label color on hover. + * @cssproperty --text-color-current - The current option's label color. + * @cssproperty --text-color-hover - The label color on hover. * * @csspart checked-icon - The checked icon, a `` element. * @csspart base - The component's base wrapper. diff --git a/src/components/progress-bar/progress-bar.css b/src/components/progress-bar/progress-bar.css index b1ebf5c37..36c4a3452 100644 --- a/src/components/progress-bar/progress-bar.css +++ b/src/components/progress-bar/progress-bar.css @@ -2,7 +2,7 @@ --height: 1.25rem; --track-color: var(--wa-color-neutral-fill-normal); --indicator-color: var(--wa-color-brand-fill-loud); - --label-color: var(--wa-color-brand-on-loud); + --text-color: var(--wa-color-brand-on-loud); --box-shadow: none; display: block; @@ -21,7 +21,7 @@ height: 100%; font: inherit; background-color: var(--indicator-color); - color: var(--label-color); + color: var(--text-color); text-align: center; line-height: var(--height); white-space: nowrap; diff --git a/src/components/progress-bar/progress-bar.ts b/src/components/progress-bar/progress-bar.ts index db57468d2..7b8c642e6 100644 --- a/src/components/progress-bar/progress-bar.ts +++ b/src/components/progress-bar/progress-bar.ts @@ -22,7 +22,7 @@ import styles from './progress-bar.css'; * @cssproperty --height - The progress bar's height. * @cssproperty --track-color - The color of the track. * @cssproperty --indicator-color - The color of the indicator. - * @cssproperty --label-color - The color of the label. + * @cssproperty --text-color - The color of the label. * @cssproperty --box-shadow - The shadow effects around the edges of the progress bar. */ @customElement('wa-progress-bar') diff --git a/src/components/radio-button/radio-button.css b/src/components/radio-button/radio-button.css index 69f0a0fbe..8b1267082 100644 --- a/src/components/radio-button/radio-button.css +++ b/src/components/radio-button/radio-button.css @@ -1,6 +1,15 @@ -.button__prefix, -.button__suffix, -.button__label { +:host { + display: contents; +} + +:where([part~='base']) { + all: inherit; + display: inline-flex; +} + +.prefix, +.suffix, +.label { display: inline-flex; position: relative; align-items: center; @@ -19,3 +28,20 @@ opacity: 0; z-index: -1; } + +/* + * Checked buttons + */ + +:host([checked]) { + --background-color: var(--wa-color-brand-fill-quiet); + --background-color-hover: var(--background-color); + --border-color: var(--wa-form-control-activated-color); + --text-color: var(--wa-color-brand-on-normal); + --indicator-color: var(--border-color); + --indicator-width: var(--wa-border-width-s); + + box-shadow: + var(--box-shadow, 0 0 transparent), + inset 0 0 0 var(--indicator-width) var(--indicator-color); +} diff --git a/src/components/radio-button/radio-button.ts b/src/components/radio-button/radio-button.ts index 698c90305..a8556e390 100644 --- a/src/components/radio-button/radio-button.ts +++ b/src/components/radio-button/radio-button.ts @@ -7,6 +7,9 @@ import { WaFocusEvent } from '../../events/focus.js'; import { HasSlotController } from '../../internal/slot.js'; import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-element.js'; +import nativeStyles from '../../styles/native/button.css'; +import sizeStyles from '../../styles/utilities/size.css'; +import variantStyles from '../../styles/utilities/variants.css'; import buttonStyles from '../button/button.css'; import styles from './radio-button.css'; @@ -35,24 +38,23 @@ import styles from './radio-button.css'; * @cssproperty --box-shadow - The shadow effects around the edges of the button. * @cssproperty --indicator-color - The color of the checked button indicator. * @cssproperty --indicator-width - The width of the checked button indicator. - * @cssproperty --label-color - The color of the button's label. - * @cssproperty --label-color-active - The color of the button's label when active. - * @cssproperty --label-color-hover - The color of the button's label on hover. + * @cssproperty --text-color - The color of the button's label. + * @cssproperty --text-color-active - The color of the button's label when active. + * @cssproperty --text-color-hover - The color of the button's label on hover. * - * @csspart base - The component's base wrapper. - * @csspart button - The internal ` -
+ `; } } diff --git a/src/components/radio-group/radio-group.css b/src/components/radio-group/radio-group.css index db2e7fe50..b3b244f0a 100644 --- a/src/components/radio-group/radio-group.css +++ b/src/components/radio-group/radio-group.css @@ -18,14 +18,6 @@ margin-inline-start: var(--wa-form-control-required-content-offset); } -.visually-hidden { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border: 0; +.wa-button-group { + display: flex; } diff --git a/src/components/radio-group/radio-group.ts b/src/components/radio-group/radio-group.ts index 1f78b9ef9..caac4fa05 100644 --- a/src/components/radio-group/radio-group.ts +++ b/src/components/radio-group/radio-group.ts @@ -9,7 +9,8 @@ import { RequiredValidator } from '../../internal/validators/required-validator. import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-element.js'; import formControlStyles from '../../styles/shadow/form-control.css'; -import '../button-group/button-group.js'; +import buttonGroupStyles from '../../styles/utilities/button-group.css'; +import sizeStyles from '../../styles/utilities/size.css'; import type WaRadioButton from '../radio-button/radio-button.js'; import '../radio/radio.js'; import type WaRadio from '../radio/radio.js'; @@ -41,7 +42,7 @@ import styles from './radio-group.css'; */ @customElement('wa-radio-group') export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { - static shadowStyle = [formControlStyles, styles]; + static shadowStyle = [sizeStyles, buttonGroupStyles, formControlStyles, styles]; static get validators() { const validators = isServer @@ -314,7 +315,6 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { const hasHintSlot = this.hasUpdated ? this.hasSlotController.test('hint') : this.withHint; const hasLabel = this.label ? true : !!hasLabelSlot; const hasHint = this.hint ? true : !!hasHintSlot; - const defaultSlot = html` `; return html`
${this.label} - + wa-icon-button { - color: color-mix(in oklab, var(--content-color), var(--wa-color-mix-hover)); -} - -.tag:active > wa-icon-button { - color: color-mix(in oklab, var(--content-color), var(--wa-color-mix-active)); -} - -/* - * Size modifiers - */ - -.tag--small { - font-size: var(--wa-font-size-xs); - height: calc(var(--wa-form-control-height-s) * 0.8); - line-height: calc(var(--wa-form-control-height-s) - var(--wa-form-control-border-width) * 2); - border-radius: var(--wa-border-radius-s); - padding: 0 var(--wa-space-xs); -} - -.tag--medium { - font-size: var(--wa-font-size-s); - height: calc(var(--wa-form-control-height-m) * 0.8); - line-height: calc(var(--wa-form-control-height-m) - var(--wa-form-control-border-width) * 2); - border-radius: var(--wa-border-radius-s); - padding: 0 var(--wa-space-s); -} - -.tag--large { - font-size: var(--wa-font-size-m); - height: calc(var(--wa-form-control-height-l) * 0.8); - line-height: calc(var(--wa-form-control-height-l) - var(--wa-form-control-border-width) * 2); - border-radius: var(--wa-border-radius-s); - padding: 0 var(--wa-space-m); -} - -.tag__remove { margin-inline-start: 0.75em; } -/* - * Pill modifier - */ +:host(:hover) > wa-icon-button { + color: color-mix(in oklab, var(--text-color), var(--wa-color-mix-hover)); +} -.tag--pill { +:host(:active) > wa-icon-button { + color: color-mix(in oklab, var(--text-color), var(--wa-color-mix-active)); +} + +/* + * Pill modifier + */ + +:host([pill]) { border-radius: var(--wa-border-radius-pill); } diff --git a/src/components/tag/tag.ts b/src/components/tag/tag.ts index 973200bf0..5896bd883 100644 --- a/src/components/tag/tag.ts +++ b/src/components/tag/tag.ts @@ -1,8 +1,9 @@ import { html } from 'lit'; import { customElement, property } from 'lit/decorators.js'; -import { classMap } from 'lit/directives/class-map.js'; import { WaRemoveEvent } from '../../events/remove.js'; import WebAwesomeElement from '../../internal/webawesome-element.js'; +import sizeStyles from '../../styles/utilities/size.css'; +import variantStyles from '../../styles/utilities/variants.css'; import { LocalizeController } from '../../utilities/localize.js'; import '../icon-button/icon-button.js'; import styles from './tag.css'; @@ -23,17 +24,10 @@ import styles from './tag.css'; * @csspart content - The tag's content. * @csspart remove-button - The tag's remove button, an ``. * @csspart remove-button__base - The remove button's exported `base` part. - * - * @cssproperty --background-color - The tag's background color. - * @cssproperty --border-color - The color of the tag's border. - * @cssproperty --border-radius - The radius of the tag's corners. - * @cssproperty --border-style - The style of the tag's border. - * @cssproperty --border-width - The width of the tag's border. - * @cssproperty --content-color - The color of the tag's content. */ @customElement('wa-tag') export default class WaTag extends WebAwesomeElement { - static shadowStyle = styles; + static shadowStyle = [sizeStyles, variantStyles, styles]; private readonly localize = new LocalizeController(this); @@ -55,47 +49,23 @@ export default class WaTag extends WebAwesomeElement { render() { return html` - - // Types - 'tag--brand': this.variant === 'brand', - 'tag--success': this.variant === 'success', - 'tag--neutral': this.variant === 'neutral', - 'tag--warning': this.variant === 'warning', - 'tag--danger': this.variant === 'danger', - 'tag--text': this.variant === 'text', - - // Sizes - 'tag--small': this.size === 'small', - 'tag--medium': this.size === 'medium', - 'tag--large': this.size === 'large', - - // Modifiers - 'tag--pill': this.pill, - 'tag--removable': this.removable, - })} - > - - - ${this.removable - ? html` - - ` - : ''} - + ${this.removable + ? html` + + ` + : ''} `; } } diff --git a/src/components/textarea/textarea.ts b/src/components/textarea/textarea.ts index f01159112..2af72b01b 100644 --- a/src/components/textarea/textarea.ts +++ b/src/components/textarea/textarea.ts @@ -12,7 +12,7 @@ import { MirrorValidator } from '../../internal/validators/mirror-validator.js'; import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-element.js'; import formControlStyles from '../../styles/shadow/form-control.css'; -import sizeStyles from '../../styles/shadow/size.css'; +import sizeStyles from '../../styles/utilities/size.css'; import styles from './textarea.css'; /** diff --git a/src/components/tooltip/tooltip.ts b/src/components/tooltip/tooltip.ts index d5cfe4918..2a8f64743 100644 --- a/src/components/tooltip/tooltip.ts +++ b/src/components/tooltip/tooltip.ts @@ -35,7 +35,7 @@ import styles from './tooltip.css'; * * @cssproperty --background-color - The tooltip's background color. * @cssproperty --border-radius - The radius of the tooltip's corners. - * @cssproperty --content-color - The color of the tooltip's content. + * @cssproperty --text-color - The color of the tooltip's content. * @cssproperty --max-width - The maximum width of the tooltip before its content will wrap. * @cssproperty --padding - The padding within the tooltip. * @cssproperty --hide-delay - The amount of time to wait before hiding the tooltip when hovering. diff --git a/src/internal/webawesome-element.ts b/src/internal/webawesome-element.ts index e585ba361..17e2364ed 100644 --- a/src/internal/webawesome-element.ts +++ b/src/internal/webawesome-element.ts @@ -226,6 +226,7 @@ export class WebAwesomeFormAssociatedElement this.addEventListener('invalid', this.emitInvalid); } } + states: CustomStateSet; connectedCallback() { super.connectedCallback(); @@ -493,7 +494,6 @@ export class WebAwesomeFormAssociatedElement // Custom states addCustomState(state: string) { try { - // @ts-expect-error CustomStateSet doesn't exist in TS yet. (this.internals.states as Set).add(state); } catch (_) { // Without this, test suite errors. @@ -504,7 +504,6 @@ export class WebAwesomeFormAssociatedElement deleteCustomState(state: string) { try { - // @ts-expect-error CustomStateSet doesn't exist in TS yet. (this.internals.states as Set).delete(state); } catch (_) { // Without this, test suite errors. @@ -531,7 +530,6 @@ export class WebAwesomeFormAssociatedElement let bool = false; try { - // @ts-expect-error CustomStateSet doesn't exist in TS yet. bool = (this.internals.states as Set).has(state); } catch (_) { // Without this, test suite errors. diff --git a/src/styles/applied.css b/src/styles/applied.css index 9b44bb199..8fd9ce9da 100644 --- a/src/styles/applied.css +++ b/src/styles/applied.css @@ -8,6 +8,10 @@ @import url('native/tables.css'); @import url('native/blockquote.css'); +@import url('shadow/size.css'); +@import url('utilities/variants.css'); +@import url('utilities/appearance.css'); + /** * Applied styles are used to "reset" a page and provide defaults for typography and native HTML elements based on * Web Awesome's design tokens. diff --git a/src/styles/native.css b/src/styles/native.css index 66cf741e4..2d6e7864b 100644 --- a/src/styles/native.css +++ b/src/styles/native.css @@ -1 +1,3 @@ @import url('./native/button.css'); +@import url('./native/form-control.css'); +@import url('./native/input.css'); diff --git a/src/styles/native/button.css b/src/styles/native/button.css index bd3ab5ff7..cb512e37c 100644 --- a/src/styles/native/button.css +++ b/src/styles/native/button.css @@ -1,59 +1,103 @@ -:is(button, input:is([type='button'], [type='reset'], [type='submit'])):where(:not(:host button)), -:host { - --background-color: var(--wa-color-neutral-fill-loud); +:is(button, input:where([type='button'], [type='reset'], [type='submit'])):where(:not(:host *, .wa-off, .wa-off *)), +:host, +.wa-button:where(:not([part~='base'])) { + --background-color: var(--wa-color-fill-loud, var(--wa-color-neutral-fill-loud)); --background-color-hover: color-mix(in oklab, var(--background-color), var(--wa-color-mix-hover)); --background-color-active: color-mix(in oklab, var(--background-color), var(--wa-color-mix-active)); - --border-color: initial; + + --border-color: transparent; --border-color-hover: var(--border-color); --border-color-active: var(--border-color); - --border-radius: var(--wa-form-control-border-radius); - --border-style: var(--wa-border-style); - --border-width: var(--wa-form-control-border-width); - --box-shadow: initial; - --label-color: var(--wa-color-neutral-on-loud); - --label-color-hover: var(--label-color); - --label-color-active: var(--label-color); -} + --border-width: max(1px, var(--wa-form-control-border-width)); -button, -input:is([type='button'], [type='reset'], [type='submit']), -:host([href]) a { - background-color: var(--background-color); - border-color: var(--border-color, var(--background-color)); - border-radius: var(--border-radius); - border-style: var(--border-style); - border-width: max(1px, var(--border-width)); - box-shadow: var(--box-shadow); - color: var(--label-color); - cursor: pointer; - font-family: inherit; - font-size: var(--wa-font-size-m); - font-weight: var(--wa-font-weight-action); - height: var(--wa-form-control-height-m); - line-height: calc(var(--wa-form-control-height-m) - var(--border-width) * 2); - padding: 0 var(--wa-space-m); + --text-color: var(--wa-color-on-loud, var(--wa-color-neutral-on-loud)); + --text-color-hover: var(--text-color); + --text-color-active: var(--text-color); + + border-radius: var(--wa-form-control-border-radius); + border-style: var(--wa-border-style); + border-width: var(--border-width); + align-items: center; + justify-content: center; text-decoration: none; user-select: none; -webkit-user-select: none; white-space: nowrap; vertical-align: middle; - transition: - background var(--wa-transition-fast) var(--wa-transition-easing), - border var(--wa-transition-fast) var(--wa-transition-easing), - box-shadow var(--wa-transition-fast) var(--wa-transition-easing), - color var(--wa-transition-fast) var(--wa-transition-easing); + transition-property: background, border, box-shadow, color; + transition-duration: var(--wa-transition-fast); + transition-timing-function: var(--wa-transition-easing); + cursor: pointer; + padding: 0 var(--space, var(--wa-space-m)); + font-family: inherit; + font-size: var(--size, var(--wa-font-size-m)); + font-weight: var(--wa-font-weight-action); + --form-control-height: calc( + 2 * var(--space-smaller, var(--wa-space-s)) + 1em * var(--wa-form-control-value-line-height) + ); + height: var(--form-control-height); + line-height: calc(var(--form-control-height) - var(--border-width) * 2); } -:is(button, input:is([type='button'], [type='reset'], [type='submit'])):where(:not(:host button)):hover, -:is(:host button, :host([href]) a):hover:not(.button--disabled, .button--loading) { - background-color: var(--background-color-hover, var(--background-color)); - border-color: var(--border-color-hover, var(--border-color, var(--background-color-hover))); - color: var(--label-color-hover, var(--label-color)); +button, +input:is([type='button'], [type='reset'], [type='submit']), +:host([href]) a, +.wa-button:not([part~='base']) { + display: inline-flex; + background-color: var(--background-color); + border-color: var(--border-color, var(--background-color)); + color: var(--text-color); + + /* Interactive */ + &:where(:not(:disabled, [disabled], :host([disabled]) *, .loading)) { + &:hover { + background-color: var(--background-color-hover, var(--background-color)); + border-color: var(--border-color-hover, var(--border-color, var(--background-color-hover))); + color: var(--text-color-hover, var(--text-color)); + } + + &:active { + background-color: var(--background-color-active, var(--background-color)); + border-color: var(--border-color-active, var(--border-color, var(--background-color-active))); + color: var(--text-color-active, var(--text-color)); + } + } + + /* + * States + */ + + &::-moz-focus-inner { + border: 0; + } + + &:focus { + outline: none; + } + + &:focus-visible { + outline: var(--wa-focus-ring); + outline-offset: var(--wa-focus-ring-offset); + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + + /* When disabled, prevent mouse events from bubbling up from children */ + * { + pointer-events: none; + } + } } -:is(button, input:is([type='button'], [type='reset'], [type='submit'])):where(:not(:host button)):active, -:is(:host button, :host([href]) a):active:not(.button--disabled, .button--loading) { - background-color: var(--background-color-active, var(--background-color)); - border-color: var(--border-color-active, var(--border-color, var(--background-color-active))); - color: var(--label-color-active, var(--label-color)); +/** + * Utilities + */ + +/* Styles */ + +.wa-pill, +:host([pill]) { + border-radius: var(--wa-border-radius-pill); } diff --git a/src/styles/native/form-control.css b/src/styles/native/form-control.css new file mode 100644 index 000000000..205c85df6 --- /dev/null +++ b/src/styles/native/form-control.css @@ -0,0 +1,13 @@ +label { + display: inline-block; + color: var(--wa-form-control-label-color); + font-weight: var(--wa-form-control-label-font-weight); + line-height: var(--wa-form-control-label-line-height); + margin-bottom: var(--wa-space-xs); +} + +label:has(+ input:required)::after { + content: var(--wa-form-control-required-content); + margin-inline-start: var(--wa-form-control-required-content-offset); + color: var(--wa-form-control-required-content-color); +} diff --git a/src/styles/native/input.css b/src/styles/native/input.css new file mode 100644 index 000000000..cda03fcb9 --- /dev/null +++ b/src/styles/native/input.css @@ -0,0 +1,98 @@ +/* Exclude inputs that don't accept text, referenced in subsequent rules with :where(&) */ +:not( + [type='button'], + [type='checkbox'], + [type='color'], + [type='file'], + [type='hidden'], + [type='image'], + [type='radio'], + [type='range'], + [type='reset'], + [type='submit'] + ) { + /* Set custom properties for native and WA inputs */ + input:where(:not(:host input)):where(&), + :host(&) { + --background-color: var(--wa-form-control-background-color); + --border-color: var(--wa-form-control-resting-color); + --border-radius: var(--wa-form-control-border-radius); + --border-style: var(--wa-form-control-border-style); + --border-width: var(--wa-form-control-border-width); + --box-shadow: initial; + } + + /* Set custom properties for filled input variants via class="wa-filled" or */ + input:where(:not(:host input)).wa-filled:where(&), + :host(.wa-filled:where(&)), + :host([filled]:where(&)) { + --background-color: var(--wa-color-neutral-fill-quiet); + --border-color: var(--background-color); + } + + /* Set custom properties for pill input variants via class="wa-pill" or */ + input:where(:not(:host input)).wa-pill:where(&), + :host(.wa-pill:where(&)), + :host([pill]:where(&)) { + --border-radius: var(--wa-border-radius-pill); + } + + /* Style text controls of inputs, including within */ + :is(input):where(&) { + color: var(--wa-form-control-value-color); + font-size: var(--wa-font-size-m); + line-height: var(--wa-form-control-value-line-height); + padding: 0 var(--wa-space-m); + + &:-webkit-autofill, + &:-webkit-autofill:hover, + &:-webkit-autofill:focus, + &:-webkit-autofill:active { + box-shadow: none; + caret-color: var(--wa-form-control-value-color); + } + + &::placeholder { + color: var(--wa-form-control-placeholder-color); + user-select: none; + -webkit-user-select: none; + } + } + + /* Style native inputs and 's visible container */ + :is(input:where(:not(:host input)), :host .input):where(&) { + background-color: var(--background-color); + border-color: var(--border-color); + border-radius: var(--border-radius); + border-style: var(--border-style); + border-width: var(--border-width); + box-shadow: var(--box-shadow); + cursor: text; + font-family: inherit; + line-height: var(--wa-form-control-value-line-height); + overflow: hidden; + vertical-align: middle; + width: 100%; + transition: + background-color var(--wa-transition-normal), + border var(--wa-transition-normal), + outline var(--wa-transition-fast); + transition-timing-function: var(--wa-transition-easing); + + &:not(.input--small, .input--large) { + height: var(--wa-form-control-height-m); + } + } + + /* Style focused inputs */ + :is(input:where(:not(:host input)):focus, :host .input--focused:not(.input--disabled)):where(&) { + outline: var(--wa-focus-ring); + outline-offset: var(--wa-focus-ring-offset); + } + + /* Style disabled inputs */ + :is(input:where(:not(:host input)):disabled, :host .input--disabled):where(&) { + cursor: not-allowed; + opacity: 0.5; + } +} diff --git a/src/styles/shadow/form-control.css b/src/styles/shadow/form-control.css index 9f445d3e3..f5d26a220 100644 --- a/src/styles/shadow/form-control.css +++ b/src/styles/shadow/form-control.css @@ -8,7 +8,7 @@ color: var(--wa-form-control-label-color); font-weight: var(--wa-form-control-label-font-weight); line-height: var(--wa-form-control-label-line-height); - margin-bottom: var(--wa-space-3xs); + margin-block-end: var(--wa-space-xs); &:is(.form-control--small *) { font-size: var(--wa-font-size-s); @@ -32,9 +32,11 @@ /* Help text */ [part~='form-control-hint'], [part~='hint'] { + display: inline-block; color: var(--wa-color-text-quiet); - margin-top: var(--wa-space-3xs); + margin-block-start: var(--wa-space-xs); font-size: var(--size-smaller, 85%); + line-height: var(--wa-form-control-label-line-height); &:is(.form-control--small *) { font-size: var(--wa-font-size-xs); diff --git a/src/styles/themes/active.css b/src/styles/themes/active.css index 6bb53c736..9fbe96086 100644 --- a/src/styles/themes/active.css +++ b/src/styles/themes/active.css @@ -327,15 +327,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; @@ -468,7 +462,7 @@ .hero wa-button[variant='brand'] { --background: var(--wa-color-neutral-fill-quiet); - --label-color: var(--wa-color-neutral-on-normal); + --text-color: var(--wa-color-neutral-on-normal); } wa-rating { diff --git a/src/styles/themes/brutalist.css b/src/styles/themes/brutalist.css index 74b3a0550..176a52d1c 100644 --- a/src/styles/themes/brutalist.css +++ b/src/styles/themes/brutalist.css @@ -328,15 +328,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; @@ -506,7 +500,7 @@ wa-alert { --border-width: 0 0 0 var(--wa-panel-border-width); - --content-color: var(--wa-color-text-normal); + --text-color: var(--wa-color-text-normal); --padding: var(--wa-space-s) var(--wa-space-m); &::part(icon) { @@ -551,7 +545,7 @@ wa-badge { --border-color: var(--wa-color-surface-border); - --content-color: var(--wa-color-base-10); + --text-color: var(--wa-color-base-10); text-transform: uppercase; &::part(base) { @@ -710,7 +704,7 @@ } /* imitating the rounded avatar */ - .blog wa-avatar::part(base) { + .blog wa-avatar { background-color: transparent; } diff --git a/src/styles/themes/classic.css b/src/styles/themes/classic.css index 76534caf9..9e44c8598 100644 --- a/src/styles/themes/classic.css +++ b/src/styles/themes/classic.css @@ -1,4 +1,8 @@ -@import 'classic_components.css'; +@import url('default/typography.css'); +@import url('default/space.css'); +@import url('default/outlines.css'); +@import url('default/shadows.css'); +@import url('default/groups.css'); :root, :host, @@ -203,123 +207,21 @@ --wa-font-family-code: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; --wa-font-family-longform: Georgia, 'Times New Roman', serif; - /* The default type scale is roughly based on the Major Second scale (x1.125), - * with each value rounded to the nearest whole pixel based on a 16px root font size. - * For larger font sizes, every other step on the scale is skipped in order to maximize variation. - * A multiplier is provided to uniformly increase or decrease all font sizes. */ - --wa-font-size-scale: 1; - --wa-font-size-2xs: calc(0.6875rem * var(--wa-font-size-scale)); /* 11px */ - --wa-font-size-xs: calc(0.75rem * var(--wa-font-size-scale)); /* 12px */ - --wa-font-size-s: calc(0.875rem * var(--wa-font-size-scale)); /* 14px */ - --wa-font-size-m: calc(1rem * var(--wa-font-size-scale)); /* 16px */ - --wa-font-size-l: calc(1.25rem * var(--wa-font-size-scale)); /* 20px */ - --wa-font-size-xl: calc(1.625rem * var(--wa-font-size-scale)); /* 26px */ - --wa-font-size-2xl: calc(2rem * var(--wa-font-size-scale)); /* 32px */ - --wa-font-size-3xl: calc(2.5625rem * var(--wa-font-size-scale)); /* 41px */ - --wa-font-size-4xl: calc(3.25rem * var(--wa-font-size-scale)); /* 52px */ - - --wa-font-weight-light: 300; - --wa-font-weight-normal: 400; - --wa-font-weight-semibold: 500; - --wa-font-weight-bold: 600; - - --wa-font-weight-body: var(--wa-font-weight-normal); - --wa-font-weight-heading: var(--wa-font-weight-semibold); - --wa-font-weight-action: var(--wa-font-weight-semibold); - - --wa-line-height-condensed: 1.2; - --wa-line-height-normal: 1.6; - --wa-line-height-expanded: 2; - --wa-link-decoration-default: underline color-mix(in oklab, var(--wa-color-text-link) 70%, transparent) dotted; - --wa-link-decoration-hover: underline; - - /** - * Spacing - */ - - /* A multiplier is provided to uniformly increase or decrease all spacing. */ - --wa-space-scale: 1; - --wa-space-3xs: calc(var(--wa-space-scale) * 0.125rem); /* 2px */ - --wa-space-2xs: calc(var(--wa-space-scale) * 0.25rem); /* 4px */ - --wa-space-xs: calc(var(--wa-space-scale) * 0.5rem); /* 8px */ - --wa-space-s: calc(var(--wa-space-scale) * 0.75rem); /* 12px */ - --wa-space-m: calc(var(--wa-space-scale) * 1rem); /* 16px */ - --wa-space-l: calc(var(--wa-space-scale) * 1.25rem); /* 20px */ - --wa-space-xl: calc(var(--wa-space-scale) * 1.5rem); /* 24px */ - --wa-space-2xl: calc(var(--wa-space-scale) * 2rem); /* 32px */ - --wa-space-3xl: calc(var(--wa-space-scale) * 3rem); /* 48px */ - - /** - * Borders - */ - --wa-border-style: solid; - - /* A multiplier is provided to uniformly increase or decrease all border widths. */ - --wa-border-width-scale: 0.0625; - --wa-border-width-s: calc(var(--wa-border-width-scale) * 1rem); - --wa-border-width-m: calc(var(--wa-border-width-scale) * 2rem); - --wa-border-width-l: calc(var(--wa-border-width-scale) * 3rem); - - /* A multiplier is provided to uniformly increase or decrease all border radii. */ - --wa-border-radius-scale: 0.25; - --wa-border-radius-xs: calc(var(--wa-border-radius-scale) * 0.5rem); - --wa-border-radius-s: calc(var(--wa-border-radius-scale) * 1rem); - --wa-border-radius-m: calc(var(--wa-border-radius-scale) * 2rem); - --wa-border-radius-l: calc(var(--wa-border-radius-scale) * 3rem); - - /* These common border radius properties can create specific shapes beyond the theme's preferred corner styles. */ - --wa-border-radius-pill: 9999px; - --wa-border-radius-circle: 50%; - --wa-border-radius-square: 0px; /** * Focus */ - --wa-focus-ring-style: solid; - --wa-focus-ring-width: 0.1875rem; /* 3px */ --wa-focus-ring: var(--wa-focus-ring-style) var(--wa-focus-ring-width) color-mix(in oklab, var(--wa-color-focus) 60%, transparent); - --wa-focus-ring-offset: 0.0625rem; /* 1px */ /** * Shadows * Shadow properties are highly modular to make it easy to create custom shadow effects or transform elements based on specific shadow qualities. * A multiplier is provided for each shadow quality to uniformly scale all related values. */ - - --wa-shadow-offset-x-scale: 0; - --wa-shadow-offset-x-xs: calc(var(--wa-shadow-offset-x-scale) * 0.5rem); - --wa-shadow-offset-x-s: calc(var(--wa-shadow-offset-x-scale) * 1rem); - --wa-shadow-offset-x-m: calc(var(--wa-shadow-offset-x-scale) * 2rem); - --wa-shadow-offset-x-l: calc(var(--wa-shadow-offset-x-scale) * 4rem); - --wa-shadow-offset-y-scale: 0.0625; - --wa-shadow-offset-y-xs: calc(var(--wa-shadow-offset-y-scale) * 0.5rem); - --wa-shadow-offset-y-s: calc(var(--wa-shadow-offset-y-scale) * 1rem); - --wa-shadow-offset-y-m: calc(var(--wa-shadow-offset-y-scale) * 2rem); - --wa-shadow-offset-y-l: calc(var(--wa-shadow-offset-y-scale) * 4rem); - - --wa-shadow-blur-scale: 0.125; - --wa-shadow-blur-xs: calc(var(--wa-shadow-blur-scale) * 0.5rem); - --wa-shadow-blur-s: calc(var(--wa-shadow-blur-scale) * 1rem); - --wa-shadow-blur-m: calc(var(--wa-shadow-blur-scale) * 2rem); - --wa-shadow-blur-l: calc(var(--wa-shadow-blur-scale) * 4rem); - --wa-shadow-spread-scale: 0; - --wa-shadow-spread-xs: calc(var(--wa-shadow-spread-scale) * 0.5rem); - --wa-shadow-spread-s: calc(var(--wa-shadow-spread-scale) * 1rem); - --wa-shadow-spread-m: calc(var(--wa-shadow-spread-scale) * 2rem); - --wa-shadow-spread-l: calc(var(--wa-shadow-spread-scale) * 4rem); - - --wa-shadow-xs: var(--wa-shadow-offset-x-xs) var(--wa-shadow-offset-y-xs) var(--wa-shadow-blur-xs) - var(--wa-shadow-spread-xs) var(--wa-color-shadow); - --wa-shadow-s: var(--wa-shadow-offset-x-s) var(--wa-shadow-offset-y-s) var(--wa-shadow-blur-s) - var(--wa-shadow-spread-s) var(--wa-color-shadow); - --wa-shadow-m: var(--wa-shadow-offset-x-m) var(--wa-shadow-offset-y-m) var(--wa-shadow-blur-m) - var(--wa-shadow-spread-m) var(--wa-color-shadow); - --wa-shadow-l: var(--wa-shadow-offset-x-l) var(--wa-shadow-offset-y-l) var(--wa-shadow-blur-l) - var(--wa-shadow-spread-l) var(--wa-color-shadow); /** * Transitions @@ -335,48 +237,19 @@ */ /* Form controls */ - --wa-form-control-background-color: var(--wa-color-surface-default); - - --wa-form-control-border-style: var(--wa-border-style); - --wa-form-control-border-width: var(--wa-border-width-s); - --wa-form-control-border-radius: var(--wa-border-radius-s); - - --wa-form-control-activated-color: var(--wa-color-brand-fill-loud); --wa-form-control-resting-color: var(--wa-color-neutral-border-normal); - - --wa-form-control-label-color: var(--wa-color-text-normal); - --wa-form-control-label-font-weight: var(--wa-font-weight-normal); --wa-form-control-label-line-height: var(--wa-line-height-normal); - --wa-form-control-value-color: var(--wa-color-text-normal); - --wa-form-control-value-font-weight: var(--wa-font-weight-body); - --wa-form-control-value-line-height: var(--wa-line-height-condensed); - - --wa-form-control-placeholder-color: var(--wa-color-gray-60); - --wa-form-control-height-s: 1.875rem; --wa-form-control-height-m: 2.5rem; --wa-form-control-height-l: 3.125rem; - --wa-form-control-required-content: '*'; - --wa-form-control-required-content-color: inherit; - --wa-form-control-required-content-offset: -0.1em; - /* Panels */ - --wa-panel-border-style: var(--wa-border-style); - --wa-panel-border-width: var(--wa-border-width-s); --wa-panel-border-radius: var(--wa-border-radius-s); /* Tooltips */ - --wa-tooltip-arrow-size: 0.375rem; - --wa-tooltip-background-color: var(--wa-color-text-normal); - - --wa-tooltip-border-radius: var(--wa-border-radius-s); - --wa-tooltip-content-color: var(--wa-color-surface-default); - --wa-tooltip-font-size: var(--wa-font-size-s); - --wa-tooltip-line-height: var(--wa-line-height-normal); } .wa-theme-classic-dark, @@ -462,3 +335,143 @@ --wa-color-neutral-on-normal: var(--wa-color-gray-70); --wa-color-neutral-on-loud: var(--wa-color-gray-05); } + +/** + * Component style overrides + */ +wa-avatar { + --background-color: var(--wa-color-neutral-fill-loud); + --text-color: var(--wa-color-neutral-on-loud); +} + +wa-button, +wa-radio-button { + &[size='small'] { + font-size: var(--wa-font-size-xs); + } + + &[size='medium'] { + font-size: var(--wa-font-size-s); + } + + &[size='large'] { + font-size: var(--wa-font-size-m); + } +} + +wa-radio-button { + --background-color-active: color-mix(in oklab, var(--background-color-hover), var(--wa-color-mix-active)); + --background-color-hover: var(--wa-form-control-activated-color); + --border-color: var(--wa-form-control-resting-color); + --border-color-active: var(--background-color-active); + --border-color-hover: var(--background-color-hover); + --text-color-active: var(--text-color-hover); + --text-color-hover: var(--wa-color-brand-on-loud); + --indicator-color: var(--wa-background-color); + + &[checked] { + --background-color: var(--wa-form-control-activated-color); + --border-color: var(--background-color); + --text-color: var(--wa-color-brand-on-loud); + } +} + +wa-breadcrumb { + font-size: var(--wa-font-size-s); +} + +/* #region Callouts */ +wa-callout { + --background-color: var(--wa-color-surface-raised); + --border-width: var(--wa-border-width-l) var(--wa-border-width-s) var(--wa-border-width-s) var(--wa-border-width-s); + --text-color: var(--wa-color-text-normal); + --spacing: var(--wa-space-l); + + font-size: var(--wa-font-size-s); + + &[variant='brand'] { + --border-color: var(--wa-color-brand-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-brand-fill-loud); + } + + &[variant='success'] { + --border-color: var(--wa-color-success-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-success-fill-loud); + } + + &[variant='neutral'] { + --border-color: var(--wa-color-neutral-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-neutral-fill-loud); + } + + &[variant='warning'] { + --border-color: var(--wa-color-warning-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-warning-fill-loud); + } + + &[variant='danger'] { + --border-color: var(--wa-color-danger-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-danger-fill-loud); + } +} + +wa-card { + --background-color: var(--wa-color-surface-raised); +} + +wa-carousel { + --box-shadow: var(--wa-shadow-xs); + --pagination-color-active: var(--wa-color-neutral-fill-loud); +} + +wa-dialog, +wa-drawer { + --spacing: var(--wa-space-l); +} + +wa-input:not([filled]), +wa-select:not([filled]), +wa-textarea:not([filled]) { + --wa-focus-ring: var(--wa-focus-ring-style) var(--wa-focus-ring-width) + color-mix(in oklab, var(--wa-color-focus), transparent 50%); + --wa-focus-ring-offset: 0; +} + +wa-radio { + --background-color-checked: var(--border-color-checked); + --checked-icon-color: var(--wa-color-surface-default); + --checked-icon-scale: 0.4; +} + +wa-range { + --thumb-gap: 0; +} + +wa-switch { + --background-color: var(--wa-color-gray-50); + --border-color: var(--background-color); + --height: calc(1em * var(--wa-form-control-value-line-height) - var(--border-width) * 2); + --thumb-color: var(--wa-color-surface-default); + --thumb-size: calc(var(--height) + 4px); + --width: calc(var(--height) * 2); + + &::part(thumb) { + border: var(--wa-border-width-s) var(--wa-border-style) var(--background-color); + } + &[checked]::part(thumb) { + border-color: var(--background-color-checked); + } +} + +wa-progress-bar { + --height: 1rem; +} + +wa-tab { + font-size: var(--wa-font-size-s); +} diff --git a/src/styles/themes/classic_components.css b/src/styles/themes/classic_components.css deleted file mode 100644 index 18fd9883e..000000000 --- a/src/styles/themes/classic_components.css +++ /dev/null @@ -1,154 +0,0 @@ -/* #region Avatars */ -wa-avatar { - --background-color: var(--wa-color-neutral-fill-loud); - --content-color: var(--wa-color-neutral-on-loud); -} -/* #endregion */ - -/* #region Buttons */ -wa-button, -wa-radio-button { - &[size='small'] { - font-size: var(--wa-font-size-xs); - } - - &[size='medium'] { - font-size: var(--wa-font-size-s); - } - - &[size='large'] { - font-size: var(--wa-font-size-m); - } -} - -wa-radio-button { - --background-color-active: color-mix(in oklab, var(--background-color-hover), var(--wa-color-mix-active)); - --background-color-hover: var(--wa-form-control-activated-color); - --border-color: var(--wa-form-control-resting-color); - --border-color-active: var(--background-color-active); - --border-color-hover: var(--background-color-hover); - --label-color-active: var(--label-color-hover); - --label-color-hover: var(--wa-color-brand-on-loud); - --indicator-color: var(--wa-background-color); -} - -wa-radio-button[checked] { - --background-color: var(--wa-form-control-activated-color); - --border-color: var(--background-color); - --label-color: var(--wa-color-brand-on-loud); -} -/* #endregion */ - -/* #region Breadcrumbs */ -wa-breadcrumb { - font-size: var(--wa-font-size-s); -} - -/* #region Callouts */ -wa-callout { - --background-color: var(--wa-color-surface-raised); - --border-width: var(--wa-border-width-l) var(--wa-border-width-s) var(--wa-border-width-s) var(--wa-border-width-s); - --content-color: var(--wa-color-text-normal); - --spacing: var(--wa-space-l); - - font-size: var(--wa-font-size-s); - - &[variant='brand'] { - --border-color: var(--wa-color-brand-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-brand-fill-loud); - } - - &[variant='success'] { - --border-color: var(--wa-color-success-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-success-fill-loud); - } - - &[variant='neutral'] { - --border-color: var(--wa-color-neutral-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-neutral-fill-loud); - } - - &[variant='warning'] { - --border-color: var(--wa-color-warning-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-warning-fill-loud); - } - - &[variant='danger'] { - --border-color: var(--wa-color-danger-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-danger-fill-loud); - } -} -/* #endregion */ - -/* #region Cards */ -wa-card { - --background-color: var(--wa-color-surface-raised); -} -/* #endregion */ - -/* #region Carousel */ -wa-carousel { - --box-shadow: var(--wa-shadow-xs); - --pagination-color-active: var(--wa-color-neutral-fill-loud); -} -/* #endregion */ - -/* #region Modals */ -wa-dialog, -wa-drawer { - --spacing: var(--wa-space-l); -} -/* #endregion */ - -/* #region Inputs */ -wa-input:not([filled]), -wa-select:not([filled]), -wa-textarea:not([filled]) { - --wa-focus-ring: var(--wa-focus-ring-style) var(--wa-focus-ring-width) - color-mix(in oklab, var(--wa-color-focus), transparent 50%); - --wa-focus-ring-offset: 0; -} - -wa-radio { - --background-color-checked: var(--border-color-checked); - --checked-icon-color: var(--wa-color-surface-default); - --checked-icon-scale: 0.4; -} - -wa-range { - --thumb-gap: 0; -} - -wa-switch { - --background-color: var(--wa-color-gray-50); - --border-color: var(--background-color); - --height: calc(1em * var(--wa-form-control-value-line-height) - var(--border-width) * 2); - --thumb-color: var(--wa-color-surface-default); - --thumb-size: calc(var(--height) + 4px); - --width: calc(var(--height) * 2); - - &::part(thumb) { - border: var(--wa-border-width-s) var(--wa-border-style) var(--background-color); - } - &[checked]::part(thumb) { - border-color: var(--background-color-checked); - } -} -/* #endregion */ - -/* #region Progress Indicators */ -wa-progress-bar { - --height: 1rem; -} -/* #endregion */ - -/* #region Tabs */ -wa-tab { - font-size: var(--wa-font-size-s); -} -/* #endregion */ diff --git a/src/styles/themes/default/groups.css b/src/styles/themes/default/groups.css index f1fc68ef1..e3b5e7bff 100644 --- a/src/styles/themes/default/groups.css +++ b/src/styles/themes/default/groups.css @@ -23,15 +23,9 @@ --wa-form-control-placeholder-color: var(--wa-color-gray-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/fa.css b/src/styles/themes/fa.css index 8f62b28ff..ef736192f 100644 --- a/src/styles/themes/fa.css +++ b/src/styles/themes/fa.css @@ -332,15 +332,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-l) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-l) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; @@ -477,7 +471,7 @@ } wa-alert { - --content-color: var(--wa-color-text-normal); + --text-color: var(--wa-color-text-normal); --icon-color: var(--border-color); .wa-theme-fa-dark & { @@ -511,12 +505,12 @@ } wa-button:not([appearance='text']) { - --border-color: var(--label-color); + --border-color: var(--text-color); --border-color-hover: var(--border-color); --border-color-active: var(--border-color); --box-shadow-color: var(--border-color); --background-active: var(--border-color); - --label-color-active: var(--background); + --text-color-active: var(--background); &[appearance='outlined'] { --background: var(--wa-color-surface-default); @@ -570,13 +564,13 @@ --background-active: var(--wa-color-neutral-on-quiet); --border-color-active: var(--background-active); --box-shadow: var(--wa-shadow-offset-x-s) var(--wa-shadow-offset-y-s) var(--wa-shadow-blur-s) var(--border-color); - --label-color-active: var(--wa-color-surface-default); + --text-color-active: var(--wa-color-surface-default); &:active, &[checked] { --background: var(--wa-color-neutral-on-quiet); --box-shadow: none; - --label-color: var(--wa-color-surface-default); + --text-color: var(--wa-color-surface-default); transform: translateX(var(--wa-shadow-offset-x-s)) translateY(var(--wa-shadow-offset-y-s)); } } @@ -598,16 +592,13 @@ wa-input, wa-select { --wa-form-control-height-s: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) + - var(--wa-shadow-offset-y-s) + var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height) + var(--wa-shadow-offset-y-s) ); --wa-form-control-height-m: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) + - var(--wa-shadow-offset-y-s) + var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height) + var(--wa-shadow-offset-y-s) ); --wa-form-control-height-l: calc( - var(--wa-space-l) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) + - var(--wa-shadow-offset-y-s) + var(--wa-space-l) * 2 + 1em * var(--wa-form-control-value-line-height) + var(--wa-shadow-offset-y-s) ); & > wa-icon { diff --git a/src/styles/themes/glassy.css b/src/styles/themes/glassy.css index e44fc2791..dbfaf4557 100644 --- a/src/styles/themes/glassy.css +++ b/src/styles/themes/glassy.css @@ -326,15 +326,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/mellow.css b/src/styles/themes/mellow.css index 9c1d55a5e..076d4049f 100644 --- a/src/styles/themes/mellow.css +++ b/src/styles/themes/mellow.css @@ -326,15 +326,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/migration.css b/src/styles/themes/migration.css index c652e7960..a9bc021d7 100644 --- a/src/styles/themes/migration.css +++ b/src/styles/themes/migration.css @@ -329,15 +329,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; @@ -522,28 +516,28 @@ &[variant='brand'] { --background: var(--wa-color-brand-fill-normal); - --content-color: var(--wa-color-brand-on-normal); + --text-color: var(--wa-color-brand-on-normal); } &[variant='success'] { --background: var(--wa-color-success-fill-normal); - --content-color: var(--wa-color-success-on-normal); + --text-color: var(--wa-color-success-on-normal); } &[variant='warning'] { --background: var(--wa-color-warning-fill-normal); - --content-color: var(--wa-color-warning-on-normal); + --text-color: var(--wa-color-warning-on-normal); } &[variant='danger'] { --background: var(--wa-color-danger-fill-normal); - --content-color: var(--wa-color-danger-on-normal); + --text-color: var(--wa-color-danger-on-normal); } &[variant='neutral'] { --background: var(--wa-color-neutral-fill-normal); - --content-color: var(--wa-color-neutral-on-normal); + --text-color: var(--wa-color-neutral-on-normal); } } wa-button[appearance='outline'] { - --border-color: color-mix(in oklab, var(--label-color), transparent 75%); + --border-color: color-mix(in oklab, var(--text-color), transparent 75%); } wa-input, @@ -556,7 +550,7 @@ wa-radio-button:not([checked]) { --border-color: var(--wa-color-neutral-border-normal); - --label-color: var(--wa-color-text-normal); + --text-color: var(--wa-color-text-normal); } wa-switch { diff --git a/src/styles/themes/playful.css b/src/styles/themes/playful.css index 9b31bf58c..080311c8e 100644 --- a/src/styles/themes/playful.css +++ b/src/styles/themes/playful.css @@ -341,15 +341,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; @@ -572,7 +566,7 @@ --button-shadow-inner-a: var(--wa-color-primary-30); --button-shadow-inner-b: var(--wa-color-primary-80); --button-text-shadow: var(--wa-color-primary-40); - --label-color: var(--wa-color-primary-95); + --text-color: var(--wa-color-primary-95); } &[variant='success'] { @@ -640,8 +634,8 @@ wa-button[appearance='outlined'] { --box-shadow: none; --border-width: var(--wa-form-control-border-width); - --label-color: var(--wa-color-neutral-on-normal); - --label-color-hover: var(--wa-color-neutral-on-loud); + --text-color: var(--wa-color-neutral-on-normal); + --text-color-hover: var(--wa-color-neutral-on-loud); &::part(label) { text-shadow: none; @@ -694,23 +688,23 @@ &[variant='brand'] { --background: var(--wa-color-primary-80); - --content-color: var(--wa-color-primary-20); + --text-color: var(--wa-color-primary-20); } &[variant='success'] { --background: var(--wa-color-green-80); - --content-color: var(--wa-color-green-20); + --text-color: var(--wa-color-green-20); } &[variant='warning'] { --background: var(--wa-color-yellow-80); - --content-color: var(--wa-color-yellow-20); + --text-color: var(--wa-color-yellow-20); } &[variant='danger'] { --background: var(--wa-color-red-80); - --content-color: var(--wa-color-red-20); + --text-color: var(--wa-color-red-20); } &[variant='neutral'] { --background: white; - --content-color: var(--wa-color-base-30); + --text-color: var(--wa-color-base-30); } } @@ -867,7 +861,7 @@ --button-shadow-inner-a: var(--wa-color-primary-30); --button-shadow-inner-b: var(--wa-color-primary-80); --button-text-shadow: var(--wa-color-primary-40); - --label-color: var(--wa-color-primary-95); + --text-color: var(--wa-color-primary-95); } &[variant='success'] { diff --git a/src/styles/themes/premium.css b/src/styles/themes/premium.css index 073a121d5..f7190145b 100644 --- a/src/styles/themes/premium.css +++ b/src/styles/themes/premium.css @@ -329,15 +329,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; @@ -531,23 +525,23 @@ wa-badge { &[variant='brand'] { --background: var(--wa-color-primary-80); - --content-color: var(--wa-color-primary-20); + --text-color: var(--wa-color-primary-20); } &[variant='success'] { --background: var(--wa-color-green-80); - --content-color: var(--wa-color-green-20); + --text-color: var(--wa-color-green-20); } &[variant='warning'] { --background: var(--wa-color-yellow-80); - --content-color: var(--wa-color-yellow-20); + --text-color: var(--wa-color-yellow-20); } &[variant='danger'] { --background: var(--wa-color-red-80); - --content-color: var(--wa-color-red-20); + --text-color: var(--wa-color-red-20); } &[variant='neutral'] { --background: white; - --content-color: var(--wa-color-base-30); + --text-color: var(--wa-color-base-30); } } @@ -569,7 +563,7 @@ font-style: italic; } - .blog wa-avatar::part(base) { + .blog wa-avatar { border-radius: var(--wa-border-radius-circle); overflow: hidden; } diff --git a/src/styles/utilities/appearance.css b/src/styles/utilities/appearance.css new file mode 100644 index 000000000..484541ac0 --- /dev/null +++ b/src/styles/utilities/appearance.css @@ -0,0 +1,47 @@ +.wa-outlined, +:host([appearance~='outlined']) { + --background-color: transparent; + --background-color-hover: var(--wa-color-fill-quiet); + --background-color-active: color-mix(in oklab, var(--background-color-hover), transparent 20%); + + --border-color: var(--wa-color-border-loud); + --border-color-hover: var(--wa-color-border-loud); + + --text-color: var(--wa-color-on-quiet); + --text-color-hover: var(--wa-color-on-quiet); +} + +.wa-filled, +:host([appearance~='filled']) { + --background-color: var(--wa-color-fill-loud); + --background-color-hover: color-mix(in oklab, var(--background-color), var(--wa-color-mix-hover)); + --background-color-active: color-mix(in oklab, var(--background-color), var(--wa-color-mix-active)); + + --text-color: var(--wa-color-on-loud, var(--wa-color-neutral-on-loud)); + + &:is(.wa-outlined, :host([appearance~='outlined'])) { + --border-color: oklch(from var(--wa-color-fill-loud) calc(l - 0.1) c h); + } +} + +.wa-tinted, +:host([appearance~='tinted']) { + --background-color: var(--wa-color-fill-normal, var(--wa-color-neutral-fill-normal)); + --text-color: var(--wa-color-on-normal, var(--wa-color-neutral-on-normal)); + + --background-color-hover: color-mix(in oklab, var(--background-color), transparent 10%); + --background-color-active: color-mix(in oklab, var(--background-color), transparent 20%); + + &:is(.wa-outlined, :host([appearance~='outlined'])) { + --border-color: var(--wa-color-border-normal); + } +} + +.wa-text, +:host([appearance~='text']) { + --background-color: transparent; + --text-color: var(--wa-color-on-quiet); + + --background-color-hover: var(--wa-color-fill-quiet); + --background-color-active: color-mix(in oklab, var(--background-color-hover), transparent 20%); +} diff --git a/src/styles/utilities/button-group.css b/src/styles/utilities/button-group.css new file mode 100644 index 000000000..9d7c04edd --- /dev/null +++ b/src/styles/utilities/button-group.css @@ -0,0 +1,57 @@ +.wa-button-group { + display: inline-flex; + position: relative; + flex-wrap: wrap; + isolation: isolate; + + > :hover, + &::slotted(:hover) { + z-index: 1; + } + + /* Focus and checked are always on top */ + > :focus, + &::slotted(:focus), + > [aria-checked='true'], + > [checked], + &::slotted([aria-checked='true']), + &::slotted([checked]) { + z-index: 2 !important; + } +} + +/* Horizontal */ +.wa-button-group:not([aria-orientation='vertical']) { + > :not(:first-child), + &::slotted(:not(:first-child)) { + border-start-start-radius: 0 !important; + border-end-start-radius: 0 !important; + border-inline-start-color: var(--border-color, rgb(0 0 0 / 0.3)); + margin-inline-start: calc(-1 * var(--border-width, 1px)); + } + + > :not(:last-child), + &::slotted(:not(:last-child)) { + border-start-end-radius: 0 !important; + border-end-end-radius: 0 !important; + } +} + +/* Vertical */ +.wa-button-group[aria-orientation='vertical'] { + flex-direction: column; + + > :not(:first-child), + &::slotted(:not(:first-child)) { + border-start-start-radius: 0 !important; + border-start-end-radius: 0 !important; + border-block-start-color: var(--border-color, rgb(0 0 0 / 0.3)); + margin-block-start: calc(-1 * var(--border-width, 1px)); + } + + > :not(:last-child), + &::slotted(:not(:last-child)) { + border-end-start-radius: 0 !important; + border-end-end-radius: 0 !important; + } +} diff --git a/src/styles/shadow/size.css b/src/styles/utilities/size.css similarity index 90% rename from src/styles/shadow/size.css rename to src/styles/utilities/size.css index ad6b4dd6b..9d901234b 100644 --- a/src/styles/shadow/size.css +++ b/src/styles/utilities/size.css @@ -19,6 +19,7 @@ font-size: var(--size-m); --size-smaller: var(--size-s); --space: var(--space-m); + --space-smaller: var(--space-s); } :host([size='small']), @@ -26,6 +27,7 @@ font-size: var(--size-s); --size-smaller: var(--size-xs); --space: var(--space-s); + --space-smaller: var(--space-xs); } :host([size='large']), @@ -33,4 +35,5 @@ font-size: var(--size-l); --size-smaller: var(--size-m); --space: var(--space-l); + --space-smaller: var(--space-m); } diff --git a/src/styles/utilities/variants.css b/src/styles/utilities/variants.css new file mode 100644 index 000000000..475b681ef --- /dev/null +++ b/src/styles/utilities/variants.css @@ -0,0 +1,75 @@ +.wa-neutral, +:host([variant='neutral']), +:root { + --wa-color-fill-loud: var(--wa-color-neutral-fill-loud); + --wa-color-fill-normal: var(--wa-color-neutral-fill-normal); + --wa-color-fill-quiet: var(--wa-color-neutral-fill-quiet); + + --wa-color-border-loud: var(--wa-color-neutral-border-loud); + --wa-color-border-normal: var(--wa-color-neutral-border-normal); + --wa-color-border-quiet: var(--wa-color-neutral-border-quiet); + + --wa-color-on-loud: var(--wa-color-neutral-on-loud); + --wa-color-on-normal: var(--wa-color-neutral-on-normal); + --wa-color-on-quiet: var(--wa-color-neutral-on-quiet); +} + +.wa-brand, +:host([variant='brand']) { + --wa-color-fill-loud: var(--wa-color-brand-fill-loud); + --wa-color-fill-normal: var(--wa-color-brand-fill-normal); + --wa-color-fill-quiet: var(--wa-color-brand-fill-quiet); + + --wa-color-border-loud: var(--wa-color-brand-border-loud); + --wa-color-border-normal: var(--wa-color-brand-border-normal); + --wa-color-border-quiet: var(--wa-color-brand-border-quiet); + + --wa-color-on-loud: var(--wa-color-brand-on-loud); + --wa-color-on-normal: var(--wa-color-brand-on-normal); + --wa-color-on-quiet: var(--wa-color-brand-on-quiet); +} + +.wa-success, +:host([variant='success']) { + --wa-color-fill-loud: var(--wa-color-success-fill-loud); + --wa-color-fill-normal: var(--wa-color-success-fill-normal); + --wa-color-fill-quiet: var(--wa-color-success-fill-quiet); + + --wa-color-border-loud: var(--wa-color-success-border-loud); + --wa-color-border-normal: var(--wa-color-success-border-normal); + --wa-color-border-quiet: var(--wa-color-success-border-quiet); + + --wa-color-on-loud: var(--wa-color-success-on-loud); + --wa-color-on-normal: var(--wa-color-success-on-normal); + --wa-color-on-quiet: var(--wa-color-success-on-quiet); +} + +.wa-warning, +:host([variant='warning']) { + --wa-color-fill-loud: var(--wa-color-warning-fill-loud); + --wa-color-fill-normal: var(--wa-color-warning-fill-normal); + --wa-color-fill-quiet: var(--wa-color-warning-fill-quiet); + + --wa-color-border-loud: var(--wa-color-warning-border-loud); + --wa-color-border-normal: var(--wa-color-warning-border-normal); + --wa-color-border-quiet: var(--wa-color-warning-border-quiet); + + --wa-color-on-loud: var(--wa-color-warning-on-loud); + --wa-color-on-normal: var(--wa-color-warning-on-normal); + --wa-color-on-quiet: var(--wa-color-warning-on-quiet); +} + +.wa-danger, +:host([variant='danger']) { + --wa-color-fill-loud: var(--wa-color-danger-fill-loud); + --wa-color-fill-normal: var(--wa-color-danger-fill-normal); + --wa-color-fill-quiet: var(--wa-color-danger-fill-quiet); + + --wa-color-border-loud: var(--wa-color-danger-border-loud); + --wa-color-border-normal: var(--wa-color-danger-border-normal); + --wa-color-border-quiet: var(--wa-color-danger-border-quiet); + + --wa-color-on-loud: var(--wa-color-danger-on-loud); + --wa-color-on-normal: var(--wa-color-danger-on-normal); + --wa-color-on-quiet: var(--wa-color-danger-on-quiet); +}