diff --git a/cspell.json b/cspell.json index b0c92b9d7..29b93af05 100644 --- a/cspell.json +++ b/cspell.json @@ -15,16 +15,19 @@ "autoloading", "autoplay", "bezier", + "Blockquotes", "boxicons", "CACHEABLE", "callout", "callouts", + "canvastext", "chatbubble", "checkmark", "Clippy", "codebases", "codepen", "colocated", + "colorjs", "colour", "combobox", "Commonmark", @@ -131,6 +134,7 @@ "petabit", "Preact", "preconnect", + "prerendered", "prismjs", "progressbar", "radiogroup", diff --git a/docs/_includes/head.njk b/docs/_includes/head.njk index 3f3a2668e..b572509d1 100644 --- a/docs/_includes/head.njk +++ b/docs/_includes/head.njk @@ -48,8 +48,6 @@ {% endif %} - - {# Used by Web Awesome App to inject other assets into the head. #} {% server "head" %} diff --git a/docs/_includes/sidebar.njk b/docs/_includes/sidebar.njk index a52509f8d..08ddcd4ea 100644 --- a/docs/_includes/sidebar.njk +++ b/docs/_includes/sidebar.njk @@ -145,7 +145,6 @@ Radio Group
  • Rating
  • @@ -178,35 +177,6 @@ - - -

    - - Native Styles - - -

    - -
    -

    @@ -216,14 +186,10 @@

    diff --git a/docs/_includes/status.njk b/docs/_includes/status.njk index 3ba32a88f..4ccb6845d 100644 --- a/docs/_includes/status.njk +++ b/docs/_includes/status.njk @@ -3,12 +3,7 @@ {% endif -%} {%- if status %} - {%- if status == "wip" %} - - - Work In Progress - - {%- elif status == "experimental" %} + {%- if status == "experimental" %} Experimental diff --git a/docs/_includes/visual-tests/native.njk b/docs/_includes/visual-tests/native.njk index 789d29337..891457013 100644 --- a/docs/_includes/visual-tests/native.njk +++ b/docs/_includes/visual-tests/native.njk @@ -6,7 +6,6 @@ <wa-button> <button> - .wa-button @@ -17,306 +16,168 @@ + + + accent + outlined - + + + + - .wa-brand + accent - + - - - - + - .wa-neutral + filled + outlined - + - - - - + - .wa-success + filled - + - - - - + - .wa-warning + outlined - + - - - - + - .wa-danger + plain - + - - - - + - .wa-accent + small - - - - - - - - - - - .wa-filled - - - - - - - - - - - - .wa-outlined - - - - - - - - - - - - .wa-plain - - - - - - - - - - - - .wa-size-s - - + Small - - - - .wa-size-m + medium - + Medium - - - - .wa-size-l + large - + Large - - - - .wa-pill + pill - + Pill - - - - - - - - - -

    Callout

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    <wa-callout>.wa-callout
    default - Callout - - -
    .wa-brand - - - -
    .wa-neutral - - - -
    .wa-success - - - -
    .wa-warning - - - -
    .wa-danger - - - -
    .wa-accent - - - -
    .wa-filled - - - -
    .wa-outlined - - - -
    .wa-plain - - - -
    .wa-size-s - - - -
    .wa-size-m - - - -
    .wa-size-l - - - -
    .wa-pill - - - -
    @@ -425,7 +286,7 @@
    -

    Input

    +

    Input

    @@ -472,36 +333,36 @@ - + - + - + - + - + @@ -612,9 +473,9 @@ - + @@ -627,9 +488,9 @@ - + @@ -642,9 +503,9 @@ - + @@ -661,7 +522,7 @@ -

    Slider

    +

    Slider

    .wa-filledfilled - +
    .wa-size-ssmall - +
    .wa-size-mmedium - +
    .wa-size-llarge - + @@ -597,9 +458,9 @@
    .wa-filledfilled -
    .wa-size-ssmall -
    .wa-size-mmedium -
    .wa-size-llarge -
    @@ -685,7 +546,7 @@ -

    Textarea

    +

    Textarea

    @@ -705,36 +566,36 @@ - + - + - + - + @@ -549,14 +495,14 @@ @@ -564,14 +510,14 @@ @@ -599,8 +545,8 @@ Radio 2 - Radio 1 - Radio 2 + Radio 1 + Radio 2 @@ -611,8 +557,8 @@ Radio 2 @@ -626,8 +572,8 @@ Radio 2 - Radio 1 - Radio 2 + Radio 1 + Radio 2 @@ -638,8 +584,8 @@ Radio 2 @@ -653,8 +599,8 @@ Radio 2 - Radio 1 - Radio 2 + Radio 1 + Radio 2 @@ -665,8 +611,8 @@ Radio 2 diff --git a/docs/_layouts/component.njk b/docs/_layouts/component.njk index 8291943f7..774ef07fe 100644 --- a/docs/_layouts/component.njk +++ b/docs/_layouts/component.njk @@ -1,17 +1,6 @@ {% extends '../_layouts/block.njk' %} {% set component = components[page.fileSlug] %} -{# Component header #} -{% block notes %} - {% if native %} - - - Just want the styles? - Check out the {{ ('/docs/native/' + native + '/') | getTitleFromUrl }} native styles! - - {% endif %} -{% endblock %} - {# Component API #} {% block afterContent %} {# Slots #} diff --git a/docs/assets/data/theming.js b/docs/assets/data/theming.js index b44299370..1fe14251d 100644 --- a/docs/assets/data/theming.js +++ b/docs/assets/data/theming.js @@ -40,24 +40,6 @@ export const themeConfig = { return this.base; }, }, - icon: { - library: { - cssProperty: '--wa-icon-library', - default: 'default', - }, - family: { - cssProperty: '--wa-icon-family', - default(baseTheme) { - return baseTheme?.icon?.family ?? 'classic'; - }, - }, - style: { - cssProperty: '--wa-icon-variant', - default(baseTheme) { - return baseTheme?.icon?.style ?? 'solid'; - }, - }, - }, rounding: { cssProperty: '--wa-border-radius-scale', default(baseTheme) { diff --git a/docs/assets/scripts/search.js b/docs/assets/scripts/search.js index 73a5bdf2e..a461d0f99 100644 --- a/docs/assets/scripts/search.js +++ b/docs/assets/scripts/search.js @@ -4,14 +4,7 @@ const lunr = res[0].default; const searchData = await res[1].json(); const searchIndex = lunr.Index.load(searchData.searchIndex); const map = searchData.map; -const searchDebounce = 100; -const icons = { - component: 'puzzle-piece', - document: 'file', - home: 'house', - native: 'code', - theme: 'palette', -}; +const searchDebounce = 200; let searchTimeout; // We're using Turbo, so references to these elements aren't guaranteed to remain intact @@ -26,8 +19,12 @@ function getElements() { // Show the search dialog when slash (or CMD+K) is pressed and focus is not inside a form element document.addEventListener('keydown', event => { if ( - (event.key === '/' || (event.key === 'k' && (event.metaKey || event.ctrlKey))) && - !event.composedPath().some(el => ['input', 'textarea'].includes(el?.tagName?.toLowerCase())) + (event.key === 'k' && (event.metaKey || event.ctrlKey)) || + (event.key === '/' && + !event.composedPath().some(el => { + const tag = el?.tagName?.toLowerCase(); + return tag === 'textarea' || (tag === 'input' && !['checkbox', 'radio'].includes(el.type)); + })) ) { event.preventDefault(); show(); @@ -48,7 +45,7 @@ function show() { input.addEventListener('input', handleInput); results.addEventListener('click', handleSelection); dialog.addEventListener('keydown', handleKeyDown); - dialog.addEventListener('wa-hide', hide, { once: true }); + dialog.addEventListener('wa-hide', handleClose); dialog.open = true; } @@ -58,9 +55,17 @@ function hide() { input.removeEventListener('input', handleInput); results.removeEventListener('click', handleSelection); dialog.removeEventListener('keydown', handleKeyDown); + dialog.removeEventListener('wa-hide', handleClose); dialog.open = false; } +function handleClose() { + const { input } = getElements(); + + input.value = ''; + updateResults(); +} + function handleInput() { const { input } = getElements(); @@ -68,14 +73,6 @@ function handleInput() { searchTimeout = setTimeout(() => updateResults(input.value), searchDebounce); } -function handleClear() { - const { input } = getElements(); - - input.value = ''; - input.focus(); - updateResults(); -} - function handleKeyDown(event) { const { input, results } = getElements(); @@ -129,7 +126,12 @@ function handleSelection(event) { if (link) { event.preventDefault(); hide(); - location.href = link.href; + + if (window.Turbo) { + Turbo.visit(link.href); + } else { + location.href = link.href; + } } } @@ -139,11 +141,40 @@ async function updateResults(query = '') { try { const hasQuery = query.length > 0; - const searchTokens = query - .split(' ') - .map((term, index, arr) => `${term}${index === arr.length - 1 ? `* ${term}~1` : '~1'}`) - .join(' '); - const matches = hasQuery ? searchIndex.search(`${query} ${searchTokens}`) : []; + let matches = []; + + if (hasQuery) { + // Track seen refs to avoid duplicates + const seenRefs = new Set(); + + // Start with a standard search to get the best "exact match" result + searchIndex.search(`${query}`).forEach(match => { + matches.push(match); + seenRefs.add(match.ref); + }); + + // Add wildcard matches if not already included + searchIndex.search(`${query}*`).forEach(match => { + if (!seenRefs.has(match.ref)) { + matches.push(match); + seenRefs.add(match.ref); + } + }); + + // Add fuzzy search matches last + const fuzzyTokens = query + .split(' ') + .map(term => `${term}~1`) + .join(' '); + + searchIndex.search(fuzzyTokens).forEach(match => { + if (!seenRefs.has(match.ref)) { + matches.push(match); + seenRefs.add(match.ref); + } + }); + } + const hasResults = hasQuery && matches.length > 0; dialog.classList.toggle('has-results', hasQuery && hasResults); @@ -159,17 +190,17 @@ async function updateResults(query = '') { const displayTitle = page.title ?? ''; const displayDescription = page.description ?? ''; const displayUrl = page.url.replace(/^\//, ''); - let icon = icons.document; + let icon = 'file-text'; li.classList.add('site-search-result'); li.setAttribute('role', 'option'); li.setAttribute('id', `search-result-item-${match.ref}`); li.setAttribute('data-selected', index === 0 ? 'true' : 'false'); - if (page.url === '/') icon = icons.home; - if (page.url.startsWith('/docs/native')) icon = icons.native; - if (page.url.startsWith('/docs/components')) icon = icons.component; - if (page.url.startsWith('/docs/theme') || page.url.startsWith('/docs/restyle')) icon = icons.theme; + if (page.url === '/') icon = 'home'; + if (page.url.startsWith('/docs/utilities/native')) icon = 'code'; + if (page.url.startsWith('/docs/components')) icon = 'puzzle-piece'; + if (page.url.startsWith('/docs/theme') || page.url.startsWith('/docs/restyle')) icon = 'palette'; a.href = page.url; a.innerHTML = ` diff --git a/docs/assets/scripts/util/string.js b/docs/assets/scripts/util/string.js index 617935a50..ff889e169 100644 --- a/docs/assets/scripts/util/string.js +++ b/docs/assets/scripts/util/string.js @@ -5,7 +5,7 @@ */ export function capitalize(str) { str += ''; - return str[0].toUpperCase() + str.slice(1); + return str[0]?.toUpperCase() + str.slice(1); } /** @@ -29,7 +29,7 @@ export function slugify(str) { * @returns {string} The camel case string. */ export function camelCase(str) { - return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()); + return str.replace(/-([a-z])/g, (_, letter) => letter?.toUpperCase()); } /** @@ -38,5 +38,5 @@ export function camelCase(str) { * @returns {string} The kebab case string. */ export function kebabCase(str) { - return str.replace(/([A-Z])/g, '-$1').toLowerCase(); + return str.replace(/([A-Z])/g, '-$1')?.toLowerCase(); } diff --git a/docs/assets/styles/code-examples.css b/docs/assets/styles/code-examples.css index 5b9aed022..c945ae45c 100644 --- a/docs/assets/styles/code-examples.css +++ b/docs/assets/styles/code-examples.css @@ -16,13 +16,12 @@ padding: 2rem 3.25rem 2rem 2rem; min-width: 20rem; max-width: 100%; - overflow: hidden; - > :first-child { + > :first-child:not(dialog) { margin-block-start: 0; } - > :last-child { + > :last-child:not(dialog) { margin-block-end: 0; } } diff --git a/docs/assets/styles/docs.css b/docs/assets/styles/docs.css index 856f2d4ec..7b7f81577 100644 --- a/docs/assets/styles/docs.css +++ b/docs/assets/styles/docs.css @@ -93,15 +93,18 @@ wa-page > header { margin: 0; } - h2:not(:first-child), - wa-details:not(:first-child) { + h2:not(:first-child) { margin-block-start: var(--wa-space-xs); } wa-details { - border: none; - background: none; - padding: 0; + --spacing: var(--wa-space-xs); + + &::part(base) { + border: none; + background: none; + padding: 0; + } } ul { @@ -302,6 +305,13 @@ h1.title { } } +@media print { + /* Show URLs for printed links */ + a:not(.anchor-heading)[href]::after { + content: ' (' attr(href) ')'; + } +} + /* Callouts */ .callout { display: flex; @@ -416,146 +426,6 @@ wa-card .page-name { margin-block-start: var(--wa-space-2xl); } -/* Interactive cards */ -wa-card[role='button'][tabindex='0'], -button, -a[href], -wa-option, -wa-radio, -wa-checkbox { - /* Disabled state */ - &:is(:disabled, [disabled], [aria-disabled='true']) { - &:is(wa-card, :has(> wa-card)) { - opacity: 60%; - cursor: not-allowed; - } - } - - &:where(:not(:disabled, [disabled], [aria-disabled='true'])) { - &:has(> wa-card) { - /* Parents only (not interactive ) */ - margin: calc(var(--wa-border-width-m) + 1px); - padding: 0; - - /* Hover state */ - &:hover, - &:state(hover), - &:state(current) { - /* Do not change the parent background as a hover effect (we style the card instead) */ - background: transparent !important; - } - - &::part(control), - &:is(wa-option)::part(checked-icon) { - --background-color-checked: var(--wa-color-brand-fill-loud); - --checked-icon-scale: 0.5; - --offset: var(--wa-space-2xs); - - position: absolute; - inset: calc(var(--offset) + var(--wa-border-width-m)); - inset-block-end: auto; - inset-inline-start: auto; - z-index: 1; - margin: 0; - background: var(--wa-color-brand-fill-loud); - color: var(--wa-color-brand-on-loud); - } - - &::part(checked-icon) { - color: var(--wa-color-brand-on-loud); - } - - &:is(wa-option)::part(checked-icon) { - inset-block-start: calc(var(--wa-space-smaller) - 0.5em); - inset-inline-end: calc(var(--wa-space-smaller) - 0.5em); - width: 1em; - height: 1em; - line-height: 1em; - padding: 0.4em; - border-radius: var(--wa-border-radius-circle); - text-align: center; - font-size: var(--wa-font-size-xs); - } - } - - /* Hover state */ - &:hover, - &:state(hover), - &:state(current) { - &:is(wa-card), - > wa-card { - --border-color: var(--wa-color-brand-border-loud); - border-color: var(--border-color); - box-shadow: 0 0 0 var(--wa-border-width-s) var(--border-color); - } - } - - &:is(wa-card, :has(> wa-card)) { - /* Interactive card parent */ - position: relative; - cursor: pointer; - - /* Unselected state */ - &:where(:not(:state(checked), :state(selected), [aria-checked='true'], [aria-selected='true'])) { - &::part(checked-icon), - &::part(control) { - display: none; - } - } - } - - &:is(wa-card), - > wa-card { - /* The card itself */ - box-shadow: none; - } - } -} - -/* Selected cards */ -:state(selected), -:state(checked), -[aria-checked='true'], -[aria-selected='true'] { - &:is(wa-card, :has(> wa-card)) { - background: transparent; - } - - &:is(wa-card), - > wa-card { - --border-color: var(--wa-color-brand-border-loud); - box-shadow: 0 0 0 var(--wa-border-width-m) var(--border-color); - - &::part(body) { - background: var(--wa-color-brand-fill-quiet); - } - } -} - -wa-select:has(> wa-option > wa-card) { - &::part(listbox) { - --column-width: 1fr; - --columns: 1; - --gap: var(--wa-space-smaller); - - display: grid; - grid-template-columns: repeat(auto-fill, minmax(var(--column-width), 1fr)); - width: calc(var(--columns) * var(--column-width) + (var(--columns) - 1) * var(--gap) + 2 * var(--wa-space)); - max-width: var(--auto-size-available-width, 90vw); - gap: var(--gap); - padding: var(--wa-space-smaller) var(--wa-space); - } - - > wa-option > wa-card { - --spacing: var(--wa-space-s); - } -} - -wa-radio:has(> wa-card) { - grid-template-columns: 1fr; - width: auto; -} - /* Swatches */ .swatch { position: relative; diff --git a/docs/assets/styles/theme-headers.css b/docs/assets/styles/theme-headers.css index 5636326b4..02192e96c 100644 --- a/docs/assets/styles/theme-headers.css +++ b/docs/assets/styles/theme-headers.css @@ -71,7 +71,8 @@ html.wa-theme-tailspin .preview-container { .hero { --hero-background-color: var(--wa-color-surface-default); --hero-lines-color: color-mix(in oklab, var(--wa-color-neutral-fill-normal), transparent 30%); - background: linear-gradient(to top, var(--wa-color-surface-lowered), transparent 40%), + background: + linear-gradient(to top, var(--wa-color-surface-lowered), transparent 40%), radial-gradient(circle at 10% 70%, color-mix(in oklab, var(--wa-color-red-50) 16%, transparent), transparent 30%), radial-gradient( circle at 40% 50%, diff --git a/docs/assets/styles/ui.css b/docs/assets/styles/ui.css index 9ee09916c..f87f65367 100644 --- a/docs/assets/styles/ui.css +++ b/docs/assets/styles/ui.css @@ -74,7 +74,7 @@ .swatch-select { padding: 2px; - wa-radio-button { + wa-radio { --swatch-border-color: color-mix(in oklab, canvastext, transparent 80%); &::part(base) { @@ -93,7 +93,7 @@ --border-radius: var(--wa-border-radius-circle); } - wa-radio-button:is([checked], :state(checked)) { + wa-radio:is([checked], :state(checked)) { --swatch-border-color: var(--wa-color-surface-default); &::part(base) { box-shadow: diff --git a/docs/assets/vue/components/icons-card.js b/docs/assets/vue/components/icons-card.js index c23ccdfda..7b0a23e21 100644 --- a/docs/assets/vue/components/icons-card.js +++ b/docs/assets/vue/components/icons-card.js @@ -90,7 +90,7 @@ export default { let value = this.computed[key]; if (key === 'library') { - titles[key] = iconLibraries[value].title; + titles[key] = iconLibraries[value]?.title; } titles[key] ??= capitalize(value); @@ -113,6 +113,7 @@ export default { if (vary.length > 0) { for (let param of vary) { let allValues = library[param]; + if (!allValues) return; let random = (allValues.random ??= []); while (random.length < TOTAL_ICONS) { diff --git a/docs/assets/vue/components/swatch-select.js b/docs/assets/vue/components/swatch-select.js index 06f11e788..1dbfab059 100644 --- a/docs/assets/vue/components/swatch-select.js +++ b/docs/assets/vue/components/swatch-select.js @@ -5,7 +5,7 @@ import InfoTip from './info-tip.js'; const template = ` - + diff --git a/docs/docs/components/button-group.md b/docs/docs/components/button-group.md index d2269f355..a4d1f944a 100644 --- a/docs/docs/components/button-group.md +++ b/docs/docs/components/button-group.md @@ -55,7 +55,7 @@ it is rarely a good idea to mix sizes within the same button group. Set the `orientation` attribute to `vertical` to make a vertical button group. ```html {.example} - + New @@ -157,16 +157,13 @@ Pill buttons are supported through the button's `pill` attribute. ``` -### Dropdowns and Native Buttons in Button Groups +### Dropdowns in Button Groups -Other elements can also be placed inside button groups: -- Native buttons as long as their [native styles](/docs/native/button) are included -- Dropdowns as long as the trigger is either a ``, or a ` Dropdown @@ -175,6 +172,7 @@ Other elements can also be placed inside button groups: Item 3 + Button ``` diff --git a/docs/docs/components/callout.md b/docs/docs/components/callout.md index 07b9b90e5..5a378475f 100644 --- a/docs/docs/components/callout.md +++ b/docs/docs/components/callout.md @@ -110,15 +110,15 @@ Use the `appearance` attribute to change the callout's visual appearance (the de Use the `size` attribute to change a callout's size. ```html {.example} - - + + This is meant to be very emphasized. - + Normal-sized callout. - + Just a small tip! diff --git a/docs/docs/components/card.md b/docs/docs/components/card.md index dda37916e..1795dd39e 100644 --- a/docs/docs/components/card.md +++ b/docs/docs/components/card.md @@ -127,41 +127,6 @@ If using SSR, you need to also use the `with-media` attribute to add a media sec ``` -### Sizing - -Use the `size` attribute to change a card's size. - -```html {.example} - -``` - ### Appearance Use the `appearance` attribute to change the card's visual appearance. diff --git a/docs/docs/components/icon.md b/docs/docs/components/icon.md index 166a4b04e..ea4e7462e 100644 --- a/docs/docs/components/icon.md +++ b/docs/docs/components/icon.md @@ -27,86 +27,6 @@ Many Font Awesome Pro icon families have variants such as `thin`, `light`, `regu ``` -### Setting defaults via CSS - -You can use certain CSS custom properties to set icon defaults, not just on the icon itself, but any ancestor. -This can be useful when you want certain parameters to vary based on context, e.g. icons inside callouts or all icons for a given theme. - -:::warning -These CSS properties are intended to set **defaults**, and thus only make a difference when the corresponding attributes are not set. -In future versions of Web Awesome, we may change this behavior to allow CSS properties to override attributes if `!important` is used. -::: - -For example, here is how you can use CSS custom properties to set a default icon for each type of callout: - -```html {.example} - - - - This is a normal callout. - - - - - This is a callout with an explicit icon, which overrides these defaults. - - - - - - Here be dragons. - - - - - - Here be more dragons. - - - - - - Success! - - - -``` - -You can even set icons dynamically, as a response to user interaction or media queries. -For example, here's how we can change the icon on hover: - -```html {.example} - GitHub Repo - -``` - ### Colors Icons inherit their color from the current text color. Thus, you can set the `color` property on the `` element or an ancestor to change the color. @@ -222,17 +142,33 @@ This will register the [Bootstrap Icons](https://icons.getbootstrap.com/) librar Icons in this library are licensed under the [MIT License](https://github.com/twbs/icons/blob/main/LICENSE). -```html +```html {.example} + +
    + + + + + + +
    + + + + + + +
    ``` ### Boxicons @@ -287,6 +223,18 @@ This will register the [Lucide](https://lucide.dev/) icon library using the jsDe Icons in this library are licensed under the [MIT License](https://github.com/lucide-icons/lucide/blob/master/LICENSE). ```html {.example} + +
    @@ -295,14 +243,6 @@ Icons in this library are licensed under the [MIT License](https://github.com/lu
    - - ``` ### Heroicons @@ -316,7 +256,11 @@ Icons in this library are licensed under the [MIT License](https://github.com/ta import { registerIconLibrary } from '/dist/webawesome.js'; registerIconLibrary('heroicons', { - resolver: name => `https://cdn.jsdelivr.net/npm/heroicons@2.0.1/24/outline/${name}.svg` + resolver: name => `https://cdn.jsdelivr.net/npm/heroicons@2.0.1/24/outline/${name}.svg`, + mutator: svg => svg.querySelectorAll('path').forEach(path => { + path.setAttribute('fill', 'none'); + path.setAttribute('stroke', 'currentColor'); + }) }); @@ -341,7 +285,11 @@ Icons in this library are licensed under the [MIT License](https://github.com/lu import { registerIconLibrary } from '/dist/webawesome.js'; registerIconLibrary('iconoir', { - resolver: name => `https://cdn.jsdelivr.net/gh/lucaburgio/iconoir@latest/icons/${name}.svg` + resolver: name => `https://cdn.jsdelivr.net/gh/lucaburgio/iconoir@latest/icons/${name}.svg`, + mutator: svg => svg.querySelectorAll('path').forEach(path => { + path.setAttribute('fill', 'none'); + path.setAttribute('stroke', 'currentColor'); + }) }); diff --git a/docs/docs/components/page.md b/docs/docs/components/page.md index abbb527c5..cd0623067 100644 --- a/docs/docs/components/page.md +++ b/docs/docs/components/page.md @@ -41,7 +41,7 @@ body { ``` :::info -If you use [native styles](/docs/native/), this is already taken care of. +If you use [native styles](/docs/utilities/native/), this is already taken care of. ::: ## Examples @@ -164,7 +164,7 @@ wa-page[view='desktop'] [data-toggle-nav] { ``` :::info -If you use [native styles](/docs/native/), this is already taken care for you, and the `data-toggle-nav` button is already hidden on wider screens. +If you use [native styles](/docs/utilities/native/), this is already taken care for you, and the `data-toggle-nav` button is already hidden on wider screens. ::: #### Custom Widths @@ -205,13 +205,7 @@ You can override the default spacing for each slot with your own CSS. In this ex ## Utility classes -[Native styles](/docs/native/) define a few useful defaults for ``, as well as two utility classes you can use for common responsive design tasks: +[Native styles](/docs/utilities/native/) define a few useful defaults for ``, as well as two utility classes you can use for common responsive design tasks: - `.wa-mobile-only` hides an element on the desktop view - `.wa-desktop-only` hides an element on the mobile view - -If you don’t want to use [native styles](/docs/native/), you can include this stylesheet in your project to use these: - -```html - -``` \ No newline at end of file diff --git a/docs/docs/components/radio-button.md b/docs/docs/components/radio-button.md deleted file mode 100644 index 850412018..000000000 --- a/docs/docs/components/radio-button.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: Radio Button -description: Radios buttons allow the user to select a single option from a group using a button-like control. -tags: forms -parent: radio-group -icon: radio-group ---- - -Radio buttons are designed to be used with [radio groups](/docs/components/radio-group). When a radio button has focus, the arrow keys can be used to change the selected option just like standard radio controls. - -```html {.example} - - Option 1 - Option 2 - Option 3 - -``` - -## Examples - -### Checked States - -To set the initial value and checked state, use the `value` attribute on the containing radio group. - -```html {.example} - - Option 1 - Option 2 - Option 3 - -``` - -### Disabled - -Use the `disabled` attribute to disable a radio button. - -```html {.example} - - Option 1 - Option 2 - Option 3 - -``` - -### Sizes - -Use the `size` attribute to change a radio button's size. - -```html {.example} - - Option 1 - Option 2 - Option 3 - - -
    - - - Option 1 - Option 2 - Option 3 - - -
    - - - Option 1 - Option 2 - Option 3 - -``` - -### Pill Buttons - -Use the `pill` attribute to give radio buttons rounded edges. - -```html {.example} - - Option 1 - Option 2 - Option 3 - - -
    - - - Option 1 - Option 2 - Option 3 - - -
    - - - Option 1 - Option 2 - Option 3 - -``` - -### Prefix and Suffix Icons - -Use the `prefix` and `suffix` slots to add icons. - -```html {.example} - - - - Option 1 - - - - - Option 2 - - - - - - Option 3 - - -``` - -### Buttons with Icons - -You can omit button labels and use icons instead. Make sure to set a `label` attribute on each icon so screen readers will announce each option correctly. - -```html {.example} - - - - - - - - - - - - - - - - - - - - - -``` diff --git a/docs/docs/components/radio-group.md b/docs/docs/components/radio-group.md index 935e26071..9fa82ee04 100644 --- a/docs/docs/components/radio-group.md +++ b/docs/docs/components/radio-group.md @@ -1,6 +1,6 @@ --- title: Radio Group -description: Radio groups are used to group multiple radios or radio buttons so they function as a single form control. +description: Radio groups are used to group multiple radios so they function as a single form control. tags: [inputs, forms] icon: radio-group --- @@ -29,7 +29,7 @@ Add descriptive hint to a radio group with the `hint` attribute. For hints that ### Radio Buttons -[Radio buttons](/docs/components/radio-button) offer an alternate way to display radio controls. In this case, an internal [button group](/docs/components/button-group) is used to group the buttons into a single, cohesive control. +Set the `appearance` attribute to `button` on all radios to render a radio button group. ```html {.example} - Option 1 - Option 2 - Option 3 + Option 1 + Option 2 + Option 3
    @@ -54,9 +54,9 @@ Add descriptive hint to a radio group with the `hint` attribute. For hints that value="1" style="max-width: 300px;" > - Option 1 - Option 2 - Option 3 + Option 1 + Option 2 + Option 3
    ``` @@ -92,7 +92,7 @@ The default orientation for radio items is `vertical`. Set the `orientation` to ### Sizing Options -The size of [Radios](/docs/components/radio) and [Radio Buttons](/docs/components/radio-button) will be determined by the Radio Group's `size` attribute. +The size of [Radios](/docs/components/radio) will be determined by the Radio Group's `size` attribute. ```html {.example} diff --git a/docs/docs/components/textarea.md b/docs/docs/components/textarea.md index 0cb1fcc37..f82d3b86b 100644 --- a/docs/docs/components/textarea.md +++ b/docs/docs/components/textarea.md @@ -7,11 +7,7 @@ native: input --- ```html {.example} -
    - - - - + ``` :::info diff --git a/docs/docs/customizing.md b/docs/docs/customizing.md index 88f20a6a2..3b7116a1d 100644 --- a/docs/docs/customizing.md +++ b/docs/docs/customizing.md @@ -133,7 +133,7 @@ Most (but not all) components expose parts. You can find them in each component' ## Native Elements -If you're using [native styles](/docs/native), any custom styles added for a component should also target the corresponding native element. In general, the same styles you declare for components will work just the same to style their native counterparts. +If you're using [native styles](/docs/utilities/native), any custom styles added for a component should also target the corresponding native element. In general, the same styles you declare for components will work just the same to style their native counterparts. For example, we can give `` the same custom styles as `` by using the custom properties required to style the component: ```html {.example} @@ -196,10 +196,7 @@ For example, we can give all outlined callouts a thick left border, regardless o diff --git a/docs/docs/experimental/themer.md b/docs/docs/experimental/themer.md index ebc6928c0..4a224517c 100644 --- a/docs/docs/experimental/themer.md +++ b/docs/docs/experimental/themer.md @@ -524,10 +524,10 @@ hasOutline: false
    - - - - + + + + Browse Icons @@ -684,12 +684,12 @@ hasOutline: false
    - + - - + + - +
    @@ -2239,10 +2239,10 @@ hasOutline: false
    - Matte - Glossy - Pebbled - Holo + Matte + Glossy + Pebbled + Holo
    diff --git a/docs/docs/index.md b/docs/docs/index.md index 9eddc6bc2..50e3962bd 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -32,7 +32,7 @@ To get everything included in Web Awesome, add the following code to the ` This snippet includes three parts: 1. **The default theme**, a stylesheet that gives a cohesive look to Web Awesome components with both light and dark modes -2. **Web Awesome styles**, an optional stylesheet that [styles native HTML elements](/docs/native) and includes [utility classes](/docs/utilities) you can use in your project +2. **Web Awesome styles**, an optional stylesheet that [styles native HTML elements](/docs/utilities/native) and includes [utility classes](/docs/utilities) you can use in your project 3. **The autoloader**, a lightweight script watches the DOM for unregistered Web Awesome elements and lazy loads them for you — even if they're added dynamically Now you can [start using Web Awesome!](/docs/usage) diff --git a/docs/docs/layout.njk b/docs/docs/layout.njk index 2637ea3be..c2173ca46 100644 --- a/docs/docs/layout.njk +++ b/docs/docs/layout.njk @@ -12,7 +12,7 @@ override:tags: [] Layout components are included in Web Awesome's [autoloader](/docs/#quick-start-autoloading-via-cdn). You can also import them individually via [cherry picking](/docs/#cherry-picking). -Layout utilities are bundled with all [style utilities](/docs/utilities). You can import all Web Awesome page styles (including [native styles](/docs/native/)) by including the following stylesheet in your project: +Layout utilities are bundled with all [style utilities](/docs/utilities). You can import all Web Awesome page styles (including [native styles](/docs/utilities/native/)) by including the following stylesheet in your project: ```html diff --git a/docs/docs/native/button.md b/docs/docs/native/button.md deleted file mode 100644 index 3c050199f..000000000 --- a/docs/docs/native/button.md +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: Button -description: 'Button styles apply your Web Awesome theme to native HTML buttons. Buttons are activated by users to perform actions, such as submitting a form.' -tags: forms -component: button -icon: button -snippets: - ' - - - -``` - -## Examples - -### Variants - -Use the [variant utility classes](../utilities/color.md) to set the button's semantic variant. - -```html {.example} - - - - - -``` - -### Appearance - -Use the [appearance utility classes](/docs/utilities/appearance) to change the button's visual appearance: - -```html {.example} -
    - - - - - - -
    -
    - - - - - - -
    -
    - - - - - - -
    -
    - - - - - - -
    -
    - - - - - - -
    -``` - -### Sizes - -Use the [size utility classes](../utilities/size.md) 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} - - - -``` - -### 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/native/callout.md b/docs/docs/native/callout.md deleted file mode 100644 index 4b06b6e3c..000000000 --- a/docs/docs/native/callout.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Callout -description: Callouts are used to display important messages inline. -component: callout -icon: callout -snippets: '.wa-callout' -file: styles/native/callout.css ---- - -```html {.example} - -``` - -## Examples - -### Variants - -Use the [variant utility classes](../utilities/color.md) to set the callout's color variant. - -```html {.example} - - -
    - - - -
    - - - -
    - - - -
    - - -``` - -### Appearance - -Use the [appearance utility classes](/docs/utilities/appearance) to change the callout's visual appearance (the default is `outlined filled`). - -```html {.example} - - -
    - - - -
    - - - -
    - - - -
    - - - -
    - - -``` - -### Sizes - -Use the [size utility classes](../utilities/size.md) to change a callout's size. - -```html {.example} - - -
    - - - -
    - - -``` diff --git a/docs/docs/native/checkbox.md b/docs/docs/native/checkbox.md deleted file mode 100644 index 8fe54af50..000000000 --- a/docs/docs/native/checkbox.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Checkbox -description: Checkboxes allow the user to toggle an option on or off. -tags: forms -component: checkbox -icon: checkbox -elements: - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox -file: styles/native/checkbox.css ---- - -```html {.example} - -``` - -## Examples - -### Checked - -Use the `checked` attribute to activate the checkbox. - -```html {.example} - -``` - - - -### Disabled - -Use the `disabled` attribute to disable the checkbox. - -```html {.example} - -``` - - - -### Custom Validity - -Use the `setCustomValidity()` method to set a custom validation message. This will prevent the form from submitting and make the browser display the error message you provide. To clear the error, call this function with an empty string. - -```html {.example} -
    - -
    - - - -``` diff --git a/docs/docs/native/content.md b/docs/docs/native/content.md deleted file mode 100644 index be1c16556..000000000 --- a/docs/docs/native/content.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Content -description: 'Content styles apply your Web Awesome theme to HTML text content, code, and images.' -tags: content -layout: element -icon: skeleton -elements: - "

    -

    ": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements - "
    ": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/small - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img -file: styles/native/content.css ---- - - -## Typography - -Vel risus commodo viverra maecenas accumsan lacus vel facilisis volutpat. Amet mauris commodo quis imperdiet. Bibendum ut tristique et egestas quis ipsum suspendisse. Sit amet nulla facilisi morbi tempus iaculis urna id volutpat. - -Cras pulvinar mattis nunc sed blandit libero. Facilisis magna etiam tempor orci. Scelerisque eleifend donec pretium vulputate sapien nec. Donec et odio pellentesque diam volutpat commodo sed egestas egestas. Mauris rhoncus aenean vel elit scelerisque mauris pellentesque. - -> What is a Web year now, about three months? And when people can browse around, discover new things, and download them fast, when we all have agents - then Web years could slip by before human beings can notice. -> -> — Tim Berners-Lee - -## Inline Text - -```html -Feugiat nisl pretium fusce id. Ipsum dolor sit amet consectetur adipiscing elit. Eget nunc lobortis mattis aliquam faucibus purus. Metus dictum at tempor commodo ullamcorper a lacus vestibulum. Urna condimentum mattis pellentesque id nibh tortor id. -``` - - - -## Headings - -### Heading 3 - -Feugiat nisl pretium fusce id. Ipsum dolor sit amet consectetur adipiscing elit. Eget nunc lobortis mattis aliquam faucibus purus. Metus dictum at tempor commodo ullamcorper a lacus vestibulum. Urna condimentum mattis pellentesque id nibh tortor id. - -#### Heading 4 - -Gravida arcu ac tortor dignissim convallis aenean. Pellentesque pulvinar pellentesque habitant morbi tristique senectus et. Ipsum nunc aliquet bibendum enim facilisis gravida neque. Donec adipiscing tristique risus nec feugiat in. - -##### Heading 5 - -Enim diam vulputate ut pharetra sit. Enim facilisis gravida neque convallis a cras. Enim neque volutpat ac tincidunt vitae semper. Sed egestas egestas fringilla phasellus faucibus scelerisque eleifend donec pretium. - -###### Heading 6 - -Tincidunt ornare massa eget egestas purus viverra accumsan in nisl. Facilisis mauris sit amet massa vitae. Nunc faucibus a pellentesque sit amet porttitor. Adipiscing tristique risus nec feugiat in fermentum. - - -## Code Blocks - -``` -// do a thing -export function thing() { - return true; -} -``` - -## Images - -![A gray kitten lays next to a toy](https://images.unsplash.com/photo-1620196244888-d31ff5bbf163?q=80&w=1000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D) diff --git a/docs/docs/native/details.md b/docs/docs/native/details.md deleted file mode 100644 index d633e8430..000000000 --- a/docs/docs/native/details.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -title: Details -description: 'Details styles apply your Web Awesome theme to the HTML `
    ` element. Details show a brief summary and expand to show additional content.' -tags: apps -layout: element -component: details -icon: details -elements: - "
    ": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details -file: styles/native/details.css ---- - -```html {.example} -
    - Tincidunt nunc pulvinar -

    Ut lectus arcu bibendum at varius. Convallis a cras semper auctor neque vitae. Odio pellentesque diam volutpat commodo sed egestas. Amet dictum sit amet justo donec enim diam vulputate ut.

    -
    -``` - -## Examples - -### Appearance - -Use the [appearance utility classes](/docs/utilities/appearance) to change the element's visual appearance: - -```html {.example} - -``` - -### Right-to-Left Languages - -The details styling automatically adapts to right-to-left languages: - -```html {.example} -
    - تبديلني - استخدام طريقة لوريم إيبسوم لأنها تعطي توزيعاَ طبيعياَ -إلى حد ما- للأحرف عوضاً عن -
    -``` - -## Accordions - -In [modern browsers](https://caniuse.com/mdn-html_elements_details_name), -grouping `
    ` elements via the `name` attribute provides accordion-style functionality: - -```html {.example} -
    - Enim diam -

    Nunc faucibus a pellentesque sit amet porttitor. Adipiscing tristique risus nec feugiat in fermentum. Leo duis ut diam quam nulla porttitor massa id. Mauris nunc congue nisi vitae.

    -
    - -
    - Arcu non odio -

    Sed libero enim sed faucibus turpis in eu mi bibendum. Nunc mi ipsum faucibus vitae aliquet nec. Ultricies tristique nulla aliquet enim tortor. Tellus at urna condimentum mattis pellentesque.

    -
    - -
    - Ut porttitor -

    Eu facilisis sed odio morbi quis commodo odio aenean sed. Sit amet purus gravida quis blandit turpis cursus. Eu consequat ac felis donec et odio pellentesque diam volutpat.

    -
    -``` diff --git a/docs/docs/native/dialog.md b/docs/docs/native/dialog.md deleted file mode 100644 index 17345d532..000000000 --- a/docs/docs/native/dialog.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Dialog -description: 'Dialog styles apply your Web Awesome theme to the HTML `` element. Dialogs, also called "modals", appear above the page and interrupt a user''s focus.' -tags: apps -icon: dialog -elements: - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog -component: dialog -file: styles/native/dialog.css ---- - -```html {.example} - -
    -

    Dialog

    - -
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit.

    -
    - -
    -
    - - - - -``` diff --git a/docs/docs/native/index.njk b/docs/docs/native/index.njk deleted file mode 100644 index 51ac0a47b..000000000 --- a/docs/docs/native/index.njk +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Native Styles -description: Native styles apply your theme to native HTML elements so they match the look and feel of Web Awesome components. - See the [installation instructions](#installation) to use native styles in your project. -layout: overview -categories: ['forms', 'apps', 'content'] -override:tags: [] ---- - -{% markdown %} -Web Awesome works _with_ the platform, rather than trying to reinvent it. -If all you need is styles, you don’t need to use new `` elements! -We also provide styles that make native HTML elements look good so you can continue using what you know and gradually adopt Web Awesome as you see fit. - -## Installation - -To use all Web Awesome page styles (including [utilities](/docs/utilities/)), include the following stylesheet in your project: - -```html - -``` - -Or, to _only_ include styles for native elements: - -```html - -``` - -## Opting Out of Native Styles - -So you've decided to use Native Styles and now you need to style an element or a part of a page completely differently, what to do? -You can create an opt-out with the power of [CSS Cascade Layers](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Cascade_layers)! - -Instead of including Native Styles with a `` element, you can include it like this: - -```html - -``` - -Then you can opt-out of Native Styles styling by using a `wa-off` class on individual elements or `wa-off-deep` for entire subtrees: - -```html -

    - - -

    - -
    -

    Lorem Ipsum dolor sit amet

    - -
    - - -``` - -You could even design opt-outs for specific elements! -E.g. to opt-out of `
    ` styling: - -```css -@layer wa { - details.wa-details-off, - .wa-details-off details,{ - all: revert-layer; - } -} -``` - -If you find yourself opting out of entire element types too much, you could consider only including the parts of Native Styles you need instead of the whole thing. -You can find instructions for how to do that on the individual Native Styles pages. -{% endmarkdown %} diff --git a/docs/docs/native/input.md b/docs/docs/native/input.md deleted file mode 100644 index 60007458b..000000000 --- a/docs/docs/native/input.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Input -description: Inputs collect data from the user. -tags: forms -icon: input -component: input -elements: - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input -file: styles/native/input.css ---- - -## Text Fields - -```html {.example} - - - - - - - - - - - - - - - - - - - - -``` - -## Pill shaped text fields - -Add the `wa-pill` class to an `` to make it pill-shaped. - -```html {.example} - -``` - -## Color Picker - -Basic: - -```html {.example} - - -``` - -With swatches: - -```html {.example} - - - - - - - - - - - - - -``` - -## Time and Date Pickers - -```html {.example} - - - - - - - - -``` - diff --git a/docs/docs/native/lists.md b/docs/docs/native/lists.md deleted file mode 100644 index f092d510d..000000000 --- a/docs/docs/native/lists.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Lists -description: 'List styles apply your Web Awesome theme to HTML lists, such as bulleted, numbered, or description lists.' -tags: content -layout: element -elements: - "
      ": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul - "
        ": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol - "
        ": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl -file: styles/native/lists.css ---- - -## Unordered Lists - -- List item 1 -- List item 2 -- List item 3 - - Subitem a - - Subitem b - -## Ordered Lists - -1. List item 1 -2. List item 2 -3. List item 3 - - Subitem a - - Subitem b - -## Definition Lists - -
        -
        Definition 1
        -
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
        -
        Definition 2
        -
        Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
        -
        Definition 3
        -
        Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
        -
        diff --git a/docs/docs/native/native.json b/docs/docs/native/native.json deleted file mode 100644 index b077f894f..000000000 --- a/docs/docs/native/native.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "layout": "element.njk", - "tags": ["native"] -} diff --git a/docs/docs/native/progress.md b/docs/docs/native/progress.md deleted file mode 100644 index 1d3219e01..000000000 --- a/docs/docs/native/progress.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Progress Bar -description: Progress bars are used to show the status of an ongoing operation. -tags: apps -icon: progress-bar -status: experimental -component: progress-bar -elements: - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress -file: styles/native/progress.css ---- - - -```html {.example} - -``` - -Indeterminate: - - -```html {.example} - -``` - -### Custom Height - -Use the `height` CSS property to set the progress bar's height. - -```html {.example} - -``` diff --git a/docs/docs/native/radio.md b/docs/docs/native/radio.md deleted file mode 100644 index 6649695b3..000000000 --- a/docs/docs/native/radio.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: Radio -description: Radios allow the user to select a single option from a group. -tags: forms -icon: radio-group -component: radio -elements: - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio -file: styles/native/radio.css ---- - -```html {.example} - -``` - -## Examples - -### Initial Value - -To set the initial value and checked state, use the `checked` attribute on the corresponding radio. - -```html {.example} - -``` - -### Disabled - -Use the `disabled` attribute to disable a radio. - -```html {.example} - -``` - -### Sizes - -Use the [size utilities](/docs/utilities/size) to change the radios' size. - -```html {.example} - - -
        - - -
        - - -``` - -### Orientation - -You can wrap native radios in a flex container to give them a horizontal or vertical orientation with even spacing. The convenience [`wa-cluster`](/docs/utilities/cluster) and [`wa-stack`](/docs/utilities/stack) utilities make this easy. - -```html {.example} - -``` - -```html {.example} - -``` diff --git a/docs/docs/native/select.md b/docs/docs/native/select.md deleted file mode 100644 index b85503244..000000000 --- a/docs/docs/native/select.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Select -description: Selects allow you to choose items from a menu of predefined options. -tags: forms -icon: select -component: select -elements: - " - - - - - -``` - -## Examples - -### Appearance - -Use the [appearance utilities](/docs/utilities/appearance/) to change the select's visual appearance. - -```html {.example} - -``` - -### Grouping options - -In [modern browsers](https://caniuse.com/mdn-html_elements_select_hr_in_select), you can use the `
        ` element as a divider: - -```html {.example} - -``` - -To provide labels, you can use the `` element (with or without dividers): - -```html {.example} - -``` diff --git a/docs/docs/native/slider.md b/docs/docs/native/slider.md deleted file mode 100644 index b47923a20..000000000 --- a/docs/docs/native/slider.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Slider -description: Sliders allow the user to select a single value within a given range using a slider. -tags: forms -layout: element -icon: slider -component: slider -elements: - "": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range -file: styles/native/slider.css ---- - -```html {.example} - -``` - -### Min, Max, and Step - -Use the `min` and `max` attributes to set the range's minimum and maximum values, respectively. The `step` attribute determines the value's interval when increasing and decreasing. - -```html {.example} - -``` - -### Disabled - -Use the `disabled` attribute to disable a slider. - -```html {.example} - -``` - - diff --git a/docs/docs/native/table.md b/docs/docs/native/table.md deleted file mode 100644 index 0cae11df7..000000000 --- a/docs/docs/native/table.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: Table -description: 'Table styles apply your Web Awesome theme to the HTML table content. Tables structure data in rows and columns, making it easy to look up information in a complex data set.' -tags: content -elements: - "
    .wa-filledfilled - +
    .wa-size-ssmall - +
    .wa-size-mmedium - +
    .wa-size-llarge - + diff --git a/docs/_includes/visual-tests/size.njk b/docs/_includes/visual-tests/size.njk index 884cdd0c2..1121a427b 100644 --- a/docs/_includes/visual-tests/size.njk +++ b/docs/_includes/visual-tests/size.njk @@ -160,60 +160,6 @@ -

    Card

    - -
    - - - - - - - - - - - - - - - - - - - - - - - -
    size="".wa-size-[s|m|l]
    small/s - - Card - - - -
    medium/m - - Card - - - -
    large/l - - Card - - - -
    -
    - -

    Checkbox

    @@ -534,14 +480,14 @@
    small/s - Radio - Button + Radio + Button - - + +
    medium/m - Radio - Button + Radio + Button - - + +
    large/l - Radio - Button + Radio + Button - - + +
    ": https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table -file: styles/native/tables.css ---- - -```html {.example} -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    I'm just a table
    Column 1Column 2Column 3Column 4
    CellCellCellCell
    CellCellCellCell
    CellCellCellCell
    CellCellCellCell
    -``` - -## Alternating Rows - -You can use the `wa-zebra-rows` class to add alternating row colors to your table: - -```html {.example} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` - -## Variants - -You can use [color utility classes](/docs/utilities/colors) to apply different colors to your table: - -```html {.example} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -``` diff --git a/docs/docs/native/textarea.md b/docs/docs/native/textarea.md deleted file mode 100644 index 82f661fde..000000000 --- a/docs/docs/native/textarea.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Textarea -description: Textareas collect data from the user and allow multiple lines of text. -tags: forms -icon: textarea -component: textarea -elements: - " -``` - -### Placeholders - -Use the `placeholder` attribute to add a placeholder. - -```html {.example} - -``` - -### Appearance - -Use the [appearence utilities](/docs/utilities/appearance/) to change the textarea's visual appearance. - -```html {.example} - -``` - -### Expand with Content - -You can use `field-sizing: content` in [browsers that support it](https://caniuse.com/mdn-css_properties_field-sizing) to make the textarea grow as the user types: - -```html {.example} - -``` diff --git a/docs/docs/palettes/tweak.css b/docs/docs/palettes/tweak.css index d4b9cc103..1e9fdb320 100644 --- a/docs/docs/palettes/tweak.css +++ b/docs/docs/palettes/tweak.css @@ -23,7 +23,8 @@ wa-dropdown > .color.swatch { --track-color-inactive: transparent; --track-color-active: transparent; --thumb-color: var(--color-tweaked, var(--color)); - --thumb-shadow: 0 0 0 var(--thumb-gap) var(--wa-color-surface-default), + --thumb-shadow: + 0 0 0 var(--thumb-gap) var(--wa-color-surface-default), var(--wa-shadow-offset-x-m) var(--wa-shadow-offset-y-m) var(--wa-shadow-blur-m) calc(var(--wa-shadow-offset-x-m) * -1 + var(--thumb-gap)) var(--wa-color-shadow); diff --git a/docs/docs/patterns/app/permissions.md b/docs/docs/patterns/app/permissions.md index 1a4f62f5e..86d5f44bc 100644 --- a/docs/docs/patterns/app/permissions.md +++ b/docs/docs/patterns/app/permissions.md @@ -115,11 +115,11 @@ isPro: true - None - 5 - 10 - 50 - 100 + None + 5 + 10 + 50 + 100 Temporary Access diff --git a/docs/docs/patterns/ecommerce/product-overview.md b/docs/docs/patterns/ecommerce/product-overview.md index 1bd92eb22..f7ba64b9f 100644 --- a/docs/docs/patterns/ecommerce/product-overview.md +++ b/docs/docs/patterns/ecommerce/product-overview.md @@ -153,29 +153,29 @@ isPro: true
    - + Vintage Black - - + + Faded Gray - + - XS - S - M - L - XL + XS + S + M + L + XL @@ -329,25 +329,25 @@ isPro: true comfort. The relaxed fit and classic crew neckline make it a versatile staple for layering or wearing solo.

    - + Sand - - + + Shale - - + + Slate - + - XS - S - M - L - XL + XS + S + M + L + XL Add to Cart diff --git a/docs/docs/patterns/index.njk b/docs/docs/patterns/index.njk index 6cb87e66f..07eb56b88 100644 --- a/docs/docs/patterns/index.njk +++ b/docs/docs/patterns/index.njk @@ -22,7 +22,7 @@ Patterns are written as standard HTML, so you can use them just as you would any To use a pattern in your project, refer to each pattern's docs for a copyable code snippet. Paste the snippet wherever you'd like the pattern to appear in your project. -Because patterns use a combination of Web Awesome features, they work best when you have [native styles](/docs/native), [style utilities](/docs/utilities), and a [theme](/docs/themes) installed in addition to Web Awesome [components](/docs/components). Refer to the [Installation page](/docs/) to set up all of these features in your project. +Because patterns use a combination of Web Awesome features, they work best when you have [native styles](/docs/utilities/native), [style utilities](/docs/utilities), and a [theme](/docs/themes) installed in addition to Web Awesome [components](/docs/components). Refer to the [Installation page](/docs/) to set up all of these features in your project. {% endmarkdown %} diff --git a/docs/docs/resources/changelog.md b/docs/docs/resources/changelog.md index 9b39e390d..d16499060 100644 --- a/docs/docs/resources/changelog.md +++ b/docs/docs/resources/changelog.md @@ -14,6 +14,10 @@ During the alpha period, things might break! We take breaking changes very serio ## Next +- 🚨 BREAKING: Greatly simplified how native styles work and removed redundant utilities + - Removed `.wa-button`, `.wa-callout` classes + - Removed `themes/native/*.css` files; use `native.css` to opt into native styles + - Clarified which utilities classes can be applied to which native elements - 🚨 BREAKING: Removed the extra dash in the `` CSS part name `pagination-item--active` => `pagination-item-active` - 🚨 BREAKING: Renamed the `classic` theme to `shoelace` - 🚨 BREAKING: Renamed `pulse` attribute in `` to `attention="pulse"` and added `attention="bounce"` [issue:#940] @@ -26,9 +30,14 @@ During the alpha period, things might break! We take breaking changes very serio - `` => `` - `` => `` - `` => `` +- 🚨 BREAKING: removed the `size` attribute from ``; please set the size of child elements on the children directly - Added a `min-block-size` to `` to ensure the divider is visible regardless of container height [issue:675] - Fixed a bug in `` that caused radios to uncheck when assigning a numeric value [issue:924] - Fixed `` so dividers properly show between buttons +- Fixed the tooltip position in `` when using RTL +- Fixed a bug in `` and native `
    ` styles that made the summary hard to click [issue:684] +- Improved CSS utilities and Native Styles to use [CSS layers](https://developer.mozilla.org/en-US/docs/Web/CSS/@layer) for easier end user customization (no more specificity conflicts — your CSS wins!) +- Improved native ` + + + + + +``` + +### Inline Text + +Various text formatting elements for emphasis and semantic meaning. + +```html {.example} +
    +

    Bold

    +

    Italics

    +

    Underline

    +

    Deleted

    +

    Inserted

    +

    Strike-through

    +

    Small

    +

    Text Sub

    +

    Text Sup

    +

    Abbr.

    +

    Keyboard

    +

    Highlighted

    +

    Link text

    +

    Inline code

    +
    +``` + +### Code Blocks + +Formatted code snippets with proper syntax styling. + +``` +// do a thing +export function thing() { + return true; +} +``` + +### Images + +Responsive images with proper scaling and styling. + +![A gray kitten lays next to a toy](https://images.unsplash.com/photo-1620196244888-d31ff5bbf163?q=80&w=1000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D) + +### Progress Bars + +Visual indicators for task completion and loading states. + +```html {.example} + +
    + +``` + +### Tables + +Structured data presentation with clean styling and optional zebra striping. + +```html {.example} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    I'm just a table
    Column 1Column 2Column 3Column 4
    CellCellCellCell
    CellCellCellCell
    CellCellCellCell
    CellCellCellCell
    +``` + +You can use the `wa-zebra-rows` class to add alternating row colors to your table: + +```html {.example} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +## Form Controls + +### Buttons + +Use the [variant utility classes](../utilities/color.md) to set the button's semantic variant. + +```html {.example} + + + + + +``` + +Use the [appearance utility classes](/docs/utilities/appearance) to change the button's visual appearance: + +```html {.example} +
    + + + + + + +
    +
    + + + + + + +
    +
    + + + + + + +
    +
    + + + + + + +
    +
    + + + + + + +
    +``` + +Use the [size utility classes](../utilities/size.md) to change a button's size. + +```html {.example} + + + +``` + +Use the `wa-pill` class to give buttons rounded edges. + +```html {.example} + + + +``` + +### Checkboxes + +Multi-select form controls with checked, indeterminate, and disabled states. + +```html {.example} +
    +
    + + + +``` + +### Radios + +Single-select form controls for mutually exclusive choices. + +You can wrap native radios in a flex container to give them a horizontal or vertical orientation with even spacing. The convenience [`wa-cluster`](/docs/utilities/cluster) and [`wa-stack`](/docs/utilities/stack) utilities make this easy. + +```html {.example} + + + +``` + +### Selects + +Dropdown menus for choosing from a list of options. + +```html {.example} + +``` + +### Sliders + +Range inputs for selecting numeric values within a specified range. + +```html {.example} + +``` + +### Text Fields + +Various input types for collecting user text and data. + +```html {.example} + + + + + + + + + + + + + +``` + +Add the `wa-pill` class to an `` to make it pill-shaped. + +```html {.example} + +``` + +### Color Pickers + +Visual color selection interface with hex value input. + +```html {.example} + +``` + +### Date & Time Pickers + +Specialized inputs for selecting dates, times, and datetime values. + +```html {.example} + + + + + +``` + +### Textareas + +Multi-line text input fields for longer content. + +```html {.example} + +``` diff --git a/docs/docs/utilities/rounding.md b/docs/docs/utilities/rounding.md index 2a834bdfc..cbf4eb9c8 100644 --- a/docs/docs/utilities/rounding.md +++ b/docs/docs/utilities/rounding.md @@ -2,7 +2,6 @@ title: Rounding Utilities description: Border radius utilities set an element's border radius property. tags: ["utilities"] -status: wip --- -``` - -## Advanced: Customizing Sizes - -But what if you are creating a style that should **generally** be smaller (e.g. a badge) or larger (e.g. a pull quote)? -For example, suppose we wanted to define a custom `.tag2` class just like `.tag` in the previous section, -but with a different set of sizes. - -This is possible, though a bit more involved. -The first thing you need to do is define these 8 properties in your CSS for your "breakpoints": - -| Custom property | Default value | -| --------------- | ------------- | -| `--size-xs` | `var(--wa-font-size-xs)` | -| `--size-s` | `var(--wa-font-size-s)` | -| `--size-m` | `var(--wa-font-size-m)` | -| `--size-l` | `var(--wa-font-size-l)` | -| `--space-xs` | `var(--wa-space-xs)` | -| `--space-s` | `var(--wa-space-s)` | -| `--space-m` | `var(--wa-space-m)` | -| `--space-l` | `var(--wa-space-l)` | - - -It would look like this: - -```css -.tag2 { - --size-xs: var(--wa-font-size-2xs); - --size-s: var(--wa-font-size-xs); - --size-m: var(--wa-font-size-s); - --size-l: var(--wa-font-size-m); - - --space-xs: var(--wa-space-2xs); - --space-s: var(--wa-space-xs); - --space-m: var(--wa-space-s); - --space-l: var(--wa-space-m); -} -``` - -That by itself is sufficient to give you sizes when the utility classes are used, though no default size: - -```html { .example } - -Default - - - - -``` - -Supporting a default size as well requires a little bit more plumbing: - -```html { .example } -
    - - Default - - -
    - - -``` - diff --git a/docs/src/env.d.ts b/docs/src/env.d.ts deleted file mode 100644 index 9c03f0a2c..000000000 --- a/docs/src/env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/package-lock.json b/package-lock.json index aefc119a8..2325f1a8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,8 +15,7 @@ "@shoelace-style/localize": "^3.2.1", "composed-offset-position": "^0.0.6", "lit": "^3.2.1", - "qr-creator": "^1.0.0", - "style-observer": "^0.0.7" + "qr-creator": "^1.0.0" }, "devDependencies": { "@11ty/eleventy": "3.0.0", @@ -61,6 +60,7 @@ "marked": "^11.1.0", "node-html-parser": "^6.1.13", "npm-check-updates": "^17.1.11", + "nunjucks": "^3.2.4", "ora": "^8.1.1", "pascal-case": "^3.1.2", "playwright": "^1.49.1", @@ -91,17 +91,58 @@ } }, "node_modules/@11ty/dependency-tree-esm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@11ty/dependency-tree-esm/-/dependency-tree-esm-1.0.0.tgz", - "integrity": "sha512-Z3KN1Fkv50UM/ZzTR3VBbyOY52HnmhIVCsAV1hn2UzFsGAjyF1Cw8uohhVtheDOSuBR7ZSeo1unwkz1HxFlUtQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree-esm/-/dependency-tree-esm-1.0.2.tgz", + "integrity": "sha512-dM0ncKfMMWyz+xxujrB5xO4sf8DJygkmzb8OyXWP5AYY0kLMGrumYTf+YKyQHsoZli2rfjxrlEYLEXOt0utUqA==", "dev": true, "dependencies": { - "@11ty/eleventy-utils": "^1.0.2", - "acorn": "^8.10.0", - "dependency-graph": "^0.11.0", + "@11ty/eleventy-utils": "^1.0.3", + "acorn": "^8.14.0", + "dependency-graph": "^1.0.0", "normalize-path": "^3.0.0" } }, + "node_modules/@11ty/dependency-tree-esm/node_modules/@11ty/eleventy-utils": { + "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" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/dependency-tree-esm/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/dependency-tree/node_modules/@11ty/eleventy-utils": { + "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" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, "node_modules/@11ty/eleventy": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.0.0.tgz", @@ -159,24 +200,23 @@ } }, "node_modules/@11ty/eleventy-dev-server": { - "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==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.8.tgz", + "integrity": "sha512-15oC5M1DQlCaOMUq4limKRYmWiGecDaGwryr7fTE/oM9Ix8siqMvWi+I8VjsfrGr+iViDvWcH/TVI6D12d93mA==", "dev": true, "dependencies": { - "@11ty/eleventy-utils": "^1.0.3", + "@11ty/eleventy-utils": "^2.0.1", "chokidar": "^3.6.0", - "debug": "^4.3.7", - "dev-ip": "^1.0.1", - "finalhandler": "^1.3.0", + "debug": "^4.4.0", + "finalhandler": "^1.3.1", "mime": "^3.0.0", "minimist": "^1.2.8", "morphdom": "^2.7.4", "please-upgrade-node": "^3.2.0", - "send": "^0.19.0", + "send": "^1.1.0", "ssri": "^11.0.0", "urlpattern-polyfill": "^10.0.0", - "ws": "^8.18.0" + "ws": "^8.18.1" }, "bin": { "eleventy-dev-server": "cmd.js" @@ -190,9 +230,9 @@ } }, "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==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "dependencies": { "ms": "^2.1.3" @@ -215,6 +255,15 @@ "node": ">= 0.8" } }, + "node_modules/@11ty/eleventy-dev-server/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "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", @@ -231,6 +280,27 @@ "node": ">= 0.8" } }, + "node_modules/@11ty/eleventy-dev-server/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@11ty/eleventy-dev-server/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@11ty/eleventy-dev-server/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -238,64 +308,36 @@ "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "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" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "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": ">= 18" } }, "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==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.6.tgz", + "integrity": "sha512-wlEIMa1SEe6HE6ZyREEnPQiTw72337a2MPkyn0D1IzrqHrKU9euB17mv27LnnnyKvMJamCCqtU0985F5yyDL8g==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "posthtml-match-helper": "^2.0.2" + "@11ty/eleventy-utils": "^2.0.2", + "debug": "^4.4.0", + "posthtml-match-helper": "^2.0.3" }, "engines": { "node": ">=18" @@ -305,7 +347,43 @@ "url": "https://opencollective.com/11ty" } }, + "node_modules/@11ty/eleventy-plugin-bundle/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@11ty/eleventy-plugin-bundle/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-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-2.0.7.tgz", + "integrity": "sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, + "node_modules/@11ty/eleventy/node_modules/@11ty/eleventy-utils": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-1.0.3.tgz", "integrity": "sha512-nULO91om7vQw4Y/UBjM8i7nJ1xl+/nyK4rImZ41lFxiY2d+XUz7ChAj1CDYFjrLZeu0utAYJTZ45LlcHTkUG4g==", @@ -322,9 +400,9 @@ } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", + "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", "dev": true }, "node_modules/@11ty/eleventy/node_modules/debug": { @@ -353,31 +431,6 @@ "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", @@ -398,15 +451,14 @@ } }, "node_modules/@11ty/posthtml-urls": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.0.tgz", - "integrity": "sha512-CcsRdI933x613u7CjM+QGs7iD/m8SaDup3Apohg1+7dybigrEUHc2jGS3mcMgQKvF2+IphqmepD/FrKLlPkPEg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.1.tgz", + "integrity": "sha512-6EFN/yYSxC/OzYXpq4gXDyDMlX/W+2MgCvvoxf11X1z76bqkqFJ8eep5RiBWfGT5j0323a1pwpelcJJdR46MCw==", "dev": true, "dependencies": { "evaluate-value": "^2.0.0", "http-equiv-refresh": "^2.0.1", "list-to-array": "^1.1.0", - "object.entries": "^1.1.7", "parse-srcset": "^1.0.2" }, "engines": { @@ -430,6 +482,50 @@ "slash": "^1.0.0" } }, + "node_modules/@11ty/recursive-copy/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@11ty/recursive-copy/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": { + "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" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@11ty/recursive-copy/node_modules/minimatch": { + "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" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@11ty/recursive-copy/node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", @@ -775,9 +871,9 @@ } }, "node_modules/@cspell/dict-ada": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.0.2.tgz", - "integrity": "sha512-0kENOWQeHjUlfyId/aCM/mKXtkEgV0Zu2RhUXCBr4hHo9F9vph+Uu8Ww2b0i5a4ZixoIkudGA+eJvyxrG1jUpA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.0.tgz", + "integrity": "sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg==", "dev": true }, "node_modules/@cspell/dict-aws": { @@ -787,21 +883,24 @@ "dev": true }, "node_modules/@cspell/dict-bash": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.1.3.tgz", - "integrity": "sha512-tOdI3QVJDbQSwPjUkOiQFhYcu2eedmX/PtEpVWg0aFps/r6AyjUQINtTgpqMYnYuq8O1QUIQqnpx21aovcgZCw==", - "dev": true + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.0.tgz", + "integrity": "sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg==", + "dev": true, + "dependencies": { + "@cspell/dict-shell": "1.1.0" + } }, "node_modules/@cspell/dict-companies": { - "version": "3.0.31", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.0.31.tgz", - "integrity": "sha512-hKVpV/lcGKP4/DpEPS8P4osPvFH/YVLJaDn9cBIOH6/HSmL5LbFgJNKpMGaYRbhm2FEX56MKE3yn/MNeNYuesQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.1.tgz", + "integrity": "sha512-ryaeJ1KhTTKL4mtinMtKn8wxk6/tqD4vX5tFP+Hg89SiIXmbMk5vZZwVf+eyGUWJOyw5A1CVj9EIWecgoi+jYQ==", "dev": true }, "node_modules/@cspell/dict-cpp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-5.1.1.tgz", - "integrity": "sha512-Qy9fNsR/5RcQ6G85gDKFjvzh0AdgAilLQeSXPtqY21Fx1kCjUqdVVJYMmHUREgcxH6ptAxtn5knTWU4PIhQtOw==", + "version": "5.1.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-5.1.23.tgz", + "integrity": "sha512-59VUam6bYWzn50j8FASWWLww0rBPA0PZfjMZBvvt0aqMpkvXzoJPnAAI4eDDSibPWVHKutjpqLmast+uMLHVsQ==", "dev": true }, "node_modules/@cspell/dict-cryptocurrencies": { @@ -811,57 +910,57 @@ "dev": true }, "node_modules/@cspell/dict-csharp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.2.tgz", - "integrity": "sha512-1JMofhLK+4p4KairF75D3A924m5ERMgd1GvzhwK2geuYgd2ZKuGW72gvXpIV7aGf52E3Uu1kDXxxGAiZ5uVG7g==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.6.tgz", + "integrity": "sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw==", "dev": true }, "node_modules/@cspell/dict-css": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.12.tgz", - "integrity": "sha512-vGBgPM92MkHQF5/2jsWcnaahOZ+C6OE/fPvd5ScBP72oFY9tn5GLuomcyO0z8vWCr2e0nUSX1OGimPtcQAlvSw==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.17.tgz", + "integrity": "sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w==", "dev": true }, "node_modules/@cspell/dict-dart": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.0.3.tgz", - "integrity": "sha512-cLkwo1KT5CJY5N5RJVHks2genFkNCl/WLfj+0fFjqNR+tk3tBI1LY7ldr9piCtSFSm4x9pO1x6IV3kRUY1lLiw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.0.tgz", + "integrity": "sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg==", "dev": true }, "node_modules/@cspell/dict-data-science": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-1.0.11.tgz", - "integrity": "sha512-TaHAZRVe0Zlcc3C23StZqqbzC0NrodRwoSAc8dis+5qLeLLnOCtagYQeROQvDlcDg3X/VVEO9Whh4W/z4PAmYQ==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.8.tgz", + "integrity": "sha512-uyAtT+32PfM29wRBeAkUSbkytqI8bNszNfAz2sGPtZBRmsZTYugKMEO9eDjAIE/pnT9CmbjNuoiXhk+Ss4fCOg==", "dev": true }, "node_modules/@cspell/dict-django": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.0.tgz", - "integrity": "sha512-bKJ4gPyrf+1c78Z0Oc4trEB9MuhcB+Yg+uTTWsvhY6O2ncFYbB/LbEZfqhfmmuK/XJJixXfI1laF2zicyf+l0w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.4.tgz", + "integrity": "sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg==", "dev": true }, "node_modules/@cspell/dict-docker": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.7.tgz", - "integrity": "sha512-XlXHAr822euV36GGsl2J1CkBIVg3fZ6879ZOg5dxTIssuhUOCiV2BuzKZmt6aIFmcdPmR14+9i9Xq+3zuxeX0A==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.14.tgz", + "integrity": "sha512-p6Qz5mokvcosTpDlgSUREdSbZ10mBL3ndgCdEKMqjCSZJFdfxRdNdjrGER3lQ6LMq5jGr1r7nGXA0gvUJK80nw==", "dev": true }, "node_modules/@cspell/dict-dotnet": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.0.tgz", - "integrity": "sha512-EOwGd533v47aP5QYV8GlSSKkmM9Eq8P3G/eBzSpH3Nl2+IneDOYOBLEUraHuiCtnOkNsz0xtZHArYhAB2bHWAw==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.9.tgz", + "integrity": "sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ==", "dev": true }, "node_modules/@cspell/dict-elixir": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.3.tgz", - "integrity": "sha512-g+uKLWvOp9IEZvrIvBPTr/oaO6619uH/wyqypqvwpmnmpjcfi8+/hqZH8YNKt15oviK8k4CkINIqNhyndG9d9Q==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.7.tgz", + "integrity": "sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA==", "dev": true }, "node_modules/@cspell/dict-en_us": { - "version": "4.3.14", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.3.14.tgz", - "integrity": "sha512-Od7vPVNN4td0Fild5BcCPikx+lBJ2L809zWeO3lThYHqtZXqsbaBNzfv9qlB1bXW199Ru461vu02CrklU1oD+Q==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.9.tgz", + "integrity": "sha512-5gjqpUwhE+qP9A9wxD1+MGGJ3DNqTgSpiOsS10cGJfV4p/Z194XkDUZrUrJsnJA/3fsCZHAzcNWh8m0bw1v++A==", "dev": true }, "node_modules/@cspell/dict-en-common-misspellings": { @@ -877,9 +976,9 @@ "dev": true }, "node_modules/@cspell/dict-filetypes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.3.tgz", - "integrity": "sha512-J9UP+qwwBLfOQ8Qg9tAsKtSY/WWmjj21uj6zXTI9hRLD1eG1uUOLcfVovAmtmVqUWziPSKMr87F6SXI3xmJXgw==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.12.tgz", + "integrity": "sha512-+ds5wgNdlUxuJvhg8A1TjuSpalDFGCh7SkANCWvIplg6QZPXL4j83lqxP7PgjHpx7PsBUS7vw0aiHPjZy9BItw==", "dev": true }, "node_modules/@cspell/dict-fonts": { @@ -889,15 +988,15 @@ "dev": true }, "node_modules/@cspell/dict-fullstack": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.1.5.tgz", - "integrity": "sha512-6ppvo1dkXUZ3fbYn/wwzERxCa76RtDDl5Afzv2lijLoijGGUw5yYdLBKJnx8PJBGNLh829X352ftE7BElG4leA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.6.tgz", + "integrity": "sha512-cSaq9rz5RIU9j+0jcF2vnKPTQjxGXclntmoNp4XB7yFX2621PxJcekGjwf/lN5heJwVxGLL9toR0CBlGKwQBgA==", "dev": true }, "node_modules/@cspell/dict-gaming-terms": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.5.tgz", - "integrity": "sha512-C3riccZDD3d9caJQQs1+MPfrUrQ+0KHdlj9iUR1QD92FgTOF6UxoBpvHUUZ9YSezslcmpFQK4xQQ5FUGS7uWfw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.1.tgz", + "integrity": "sha512-tb8GFxjTLDQstkJcJ90lDqF4rKKlMUKs5/ewePN9P+PYRSehqDpLI5S5meOfPit8LGszeOrjUdBQ4zXo7NpMyQ==", "dev": true }, "node_modules/@cspell/dict-git": { @@ -907,45 +1006,45 @@ "dev": true }, "node_modules/@cspell/dict-golang": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.5.tgz", - "integrity": "sha512-w4mEqGz4/wV+BBljLxduFNkMrd3rstBNDXmoX5kD4UTzIb4Sy0QybWCtg2iVT+R0KWiRRA56QKOvBsgXiddksA==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.21.tgz", + "integrity": "sha512-D3wG1MWhFx54ySFJ00CS1MVjR4UiBVsOWGIjJ5Av+HamnguqEshxbF9mvy+BX0KqzdLVzwFkoLBs8QeOID56HA==", "dev": true }, "node_modules/@cspell/dict-haskell": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.1.tgz", - "integrity": "sha512-uRrl65mGrOmwT7NxspB4xKXFUenNC7IikmpRZW8Uzqbqcu7ZRCUfstuVH7T1rmjRgRkjcIjE4PC11luDou4wEQ==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.5.tgz", + "integrity": "sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ==", "dev": true }, "node_modules/@cspell/dict-html": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.5.tgz", - "integrity": "sha512-p0brEnRybzSSWi8sGbuVEf7jSTDmXPx7XhQUb5bgG6b54uj+Z0Qf0V2n8b/LWwIPJNd1GygaO9l8k3HTCy1h4w==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.11.tgz", + "integrity": "sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw==", "dev": true }, "node_modules/@cspell/dict-html-symbol-entities": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.0.tgz", - "integrity": "sha512-HGRu+48ErJjoweR5IbcixxETRewrBb0uxQBd6xFGcxbEYCX8CnQFTAmKI5xNaIt2PKaZiJH3ijodGSqbKdsxhw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.3.tgz", + "integrity": "sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A==", "dev": true }, "node_modules/@cspell/dict-java": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.6.tgz", - "integrity": "sha512-kdE4AHHHrixyZ5p6zyms1SLoYpaJarPxrz8Tveo6gddszBVVwIUZ+JkQE1bWNLK740GWzIXdkznpUfw1hP9nXw==", + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.11.tgz", + "integrity": "sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w==", "dev": true }, "node_modules/@cspell/dict-k8s": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.2.tgz", - "integrity": "sha512-tLT7gZpNPnGa+IIFvK9SP1LrSpPpJ94a/DulzAPOb1Q2UBFwdpFd82UWhio0RNShduvKG/WiMZf/wGl98pn+VQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.10.tgz", + "integrity": "sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw==", "dev": true }, "node_modules/@cspell/dict-latex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.0.tgz", - "integrity": "sha512-LPY4y6D5oI7D3d+5JMJHK/wxYTQa2lJMSNxps2JtuF8hbAnBQb3igoWEjEbIbRRH1XBM0X8dQqemnjQNCiAtxQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.3.tgz", + "integrity": "sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw==", "dev": true }, "node_modules/@cspell/dict-lorem-ipsum": { @@ -955,9 +1054,9 @@ "dev": true }, "node_modules/@cspell/dict-lua": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.3.tgz", - "integrity": "sha512-lDHKjsrrbqPaea13+G9s0rtXjMO06gPXPYRjRYawbNmo4E/e3XFfVzeci3OQDQNDmf2cPOwt9Ef5lu2lDmwfJg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.7.tgz", + "integrity": "sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q==", "dev": true }, "node_modules/@cspell/dict-node": { @@ -967,96 +1066,102 @@ "dev": true }, "node_modules/@cspell/dict-npm": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.0.15.tgz", - "integrity": "sha512-sX0X5YWNW54F4baW7b5JJB6705OCBIZtUqjOghlJNORS5No7QY1IX1zc5FxNNu4gsaCZITAmfMi4ityXEsEThA==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.4.tgz", + "integrity": "sha512-/hK5ii9OzSOQkmTjkzJlEYWz+PBnz2hRq5Xu7d4aDURaynO9xMAcK31JJlKNQulBkVbQHxFZLUrzjdzdAr/Opw==", "dev": true }, "node_modules/@cspell/dict-php": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.5.tgz", - "integrity": "sha512-9r8ao7Z/mH9Z8pSB7yLtyvcCJWw+/MnQpj7xGVYzIV7V2ZWDRjXZAMgteHMJ37m8oYz64q5d4tiipD300QSetQ==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.14.tgz", + "integrity": "sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==", "dev": true }, "node_modules/@cspell/dict-powershell": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.3.tgz", - "integrity": "sha512-lEdzrcyau6mgzu1ie98GjOEegwVHvoaWtzQnm1ie4DyZgMr+N6D0Iyj1lzvtmt0snvsDFa5F2bsYzf3IMKcpcA==", + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.14.tgz", + "integrity": "sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA==", "dev": true }, "node_modules/@cspell/dict-public-licenses": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.5.tgz", - "integrity": "sha512-91HK4dSRri/HqzAypHgduRMarJAleOX5NugoI8SjDLPzWYkwZ1ftuCXSk+fy8DLc3wK7iOaFcZAvbjmnLhVs4A==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.13.tgz", + "integrity": "sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ==", "dev": true }, "node_modules/@cspell/dict-python": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.1.11.tgz", - "integrity": "sha512-XG+v3PumfzUW38huSbfT15Vqt3ihNb462ulfXifpQllPok5OWynhszCLCRQjQReV+dgz784ST4ggRxW452/kVg==", + "version": "4.2.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.18.tgz", + "integrity": "sha512-hYczHVqZBsck7DzO5LumBLJM119a3F17aj8a7lApnPIS7cmEwnPc2eACNscAHDk7qAo2127oI7axUoFMe9/g1g==", "dev": true, "dependencies": { - "@cspell/dict-data-science": "^1.0.11" + "@cspell/dict-data-science": "^2.0.8" } }, "node_modules/@cspell/dict-r": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.0.1.tgz", - "integrity": "sha512-KCmKaeYMLm2Ip79mlYPc8p+B2uzwBp4KMkzeLd5E6jUlCL93Y5Nvq68wV5fRLDRTf7N1LvofkVFWfDcednFOgA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.0.tgz", + "integrity": "sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA==", "dev": true }, "node_modules/@cspell/dict-ruby": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.2.tgz", - "integrity": "sha512-cIh8KTjpldzFzKGgrqUX4bFyav5lC52hXDKo4LbRuMVncs3zg4hcSf4HtURY+f2AfEZzN6ZKzXafQpThq3dl2g==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.8.tgz", + "integrity": "sha512-ixuTneU0aH1cPQRbWJvtvOntMFfeQR2KxT8LuAv5jBKqQWIHSxzGlp+zX3SVyoeR0kOWiu64/O5Yn836A5yMcQ==", "dev": true }, "node_modules/@cspell/dict-rust": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.2.tgz", - "integrity": "sha512-RhziKDrklzOntxAbY3AvNR58wnFGIo3YS8+dNeLY36GFuWOvXDHFStYw5Pod4f/VXbO/+1tXtywCC4zWfB2p1w==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.11.tgz", + "integrity": "sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw==", "dev": true }, "node_modules/@cspell/dict-scala": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.0.tgz", - "integrity": "sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.7.tgz", + "integrity": "sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA==", + "dev": true + }, + "node_modules/@cspell/dict-shell": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.0.tgz", + "integrity": "sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ==", "dev": true }, "node_modules/@cspell/dict-software-terms": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.3.16.tgz", - "integrity": "sha512-ixorEP80LGxAU+ODVSn/CYIDjV0XAlZ2VrBu7CT+PwUFJ7h8o3JX1ywKB4qnt0hHru3JjWFtBoBThmZdrXnREQ==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-3.4.10.tgz", + "integrity": "sha512-S5S2sz98v4GWJ9TMo62Vp4L5RM/329e5UQfFn7yJfieTcrfXRH4IweVdz34rZcK9o5coGptgBUIv/Jcrd4cMpg==", "dev": true }, "node_modules/@cspell/dict-sql": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.1.3.tgz", - "integrity": "sha512-SEyTNKJrjqD6PAzZ9WpdSu6P7wgdNtGV2RV8Kpuw1x6bV+YsSptuClYG+JSdRExBTE6LwIe1bTklejUp3ZP8TQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.0.tgz", + "integrity": "sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ==", "dev": true }, "node_modules/@cspell/dict-svelte": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.2.tgz", - "integrity": "sha512-rPJmnn/GsDs0btNvrRBciOhngKV98yZ9SHmg8qI6HLS8hZKvcXc0LMsf9LLuMK1TmS2+WQFAan6qeqg6bBxL2Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.6.tgz", + "integrity": "sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q==", "dev": true }, "node_modules/@cspell/dict-swift": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.1.tgz", - "integrity": "sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.5.tgz", + "integrity": "sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA==", "dev": true }, "node_modules/@cspell/dict-typescript": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.1.2.tgz", - "integrity": "sha512-lcNOYWjLUvDZdLa0UMNd/LwfVdxhE9rKA+agZBGjL3lTA3uNvH7IUqSJM/IXhJoBpLLMVEOk8v1N9xi+vDuCdA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.1.tgz", + "integrity": "sha512-jdnKg4rBl75GUBTsUD6nTJl7FGvaIt5wWcWP7TZSC3rV1LfkwvbUiY3PiGpfJlAIdnLYSeFWIpYU9gyVgz206w==", "dev": true }, "node_modules/@cspell/dict-vue": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.0.tgz", - "integrity": "sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.4.tgz", + "integrity": "sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==", "dev": true }, "node_modules/@cspell/dynamic-import": { @@ -1071,16 +1176,6 @@ "node": ">=14" } }, - "node_modules/@cspell/dynamic-import/node_modules/import-meta-resolve": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", - "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/@cspell/strong-weak-map": { "version": "6.31.3", "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-6.31.3.tgz", @@ -1625,20 +1720,19 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", + "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.9" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.13", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", - "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", - "license": "MIT", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz", + "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", "dependencies": { - "@floating-ui/core": "^1.6.0", + "@floating-ui/core": "^1.7.0", "@floating-ui/utils": "^0.2.9" } }, @@ -1720,12 +1814,12 @@ } }, "node_modules/@lit-labs/eleventy-plugin-lit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@lit-labs/eleventy-plugin-lit/-/eleventy-plugin-lit-1.0.3.tgz", - "integrity": "sha512-24824crd4P0D2Y6fyfO2c0SyfU9x0vpRwxabypmp3bTXrNrTOZflREATL57Qa9EEgirZvA/ervKy5Y0WCkjGag==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@lit-labs/eleventy-plugin-lit/-/eleventy-plugin-lit-1.0.5.tgz", + "integrity": "sha512-RwNxBxYQs69o14hDlWQXgNEZRl2ZCreAeiewNmgLqEJmXO2ayefkwINs+xh659WaoZrIrg6c3kVpxS9g8/QjlA==", "dev": true, "dependencies": { - "@lit-labs/ssr": "^3.1.8", + "@lit-labs/ssr": "^3.3.0", "lit": "^2.7.0 || ^3.0.0" }, "engines": { @@ -1733,13 +1827,13 @@ } }, "node_modules/@lit-labs/ssr": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr/-/ssr-3.2.2.tgz", - "integrity": "sha512-He5TzeNPM9ECmVpgXRYmVlz0UA5YnzHlT43kyLi2Lu6mUidskqJVonk9W5K699+2DKhoXp8Ra4EJmHR6KrcW1Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr/-/ssr-3.3.1.tgz", + "integrity": "sha512-JlF1PempxvzrGEpRFrF+Ki0MHzR3HA51SK8Zv0cFpW9p0bPW4k0FeCwrElCu371UEpXF7RcaE2wgYaE1az0XKg==", "dev": true, "dependencies": { "@lit-labs/ssr-client": "^1.1.7", - "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit-labs/ssr-dom-shim": "^1.3.0", "@lit/reactive-element": "^2.0.4", "@parse5/tools": "^0.3.0", "@types/node": "^16.0.0", @@ -1766,9 +1860,9 @@ } }, "node_modules/@lit-labs/ssr-dom-shim": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", - "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.3.0.tgz", + "integrity": "sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==" }, "node_modules/@lit-labs/ssr/node_modules/@types/node": { "version": "16.18.101", @@ -1828,12 +1922,12 @@ } }, "node_modules/@lit-labs/testing": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@lit-labs/testing/-/testing-0.2.5.tgz", - "integrity": "sha512-VVYPhnpYhTgmZ3pWGQV8ZN/c81/aUlxSya+G94pNhlAiKUqsAwJZAkQCEZLncF8WHWg9jhas3eswxe9G3oQr1Q==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@lit-labs/testing/-/testing-0.2.7.tgz", + "integrity": "sha512-1vuCq+uh6MId6VKzFyEtWejX3+VU0Xejaa1Fmdg5S10bh7Mv6u/KS1e4Z2yxnAHnpeLd5BezBrN13dEaKka+/A==", "dev": true, "dependencies": { - "@lit-labs/ssr": "^3.1.8", + "@lit-labs/ssr": "^3.3.0", "@lit-labs/ssr-client": "^1.1.4", "@web/test-runner-commands": "^0.6.1", "@webcomponents/template-shadowroot": "^0.1.0", @@ -1938,18 +2032,18 @@ } }, "node_modules/@lit/react": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@lit/react/-/react-1.0.6.tgz", - "integrity": "sha512-QIss8MPh6qUoFJmuaF4dSHts3qCsA36S3HcOLiNPShxhgYPr4XJRnCBKPipk85sR9xr6TQrOcDMfexwbNdJHYA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@lit/react/-/react-1.0.7.tgz", + "integrity": "sha512-cencnwwLXQKiKxjfFzSgZRngcWJzUDZi/04E0fSaF86wZgchMdvTyu+lE36DrUfvuus3bH8+xLPrhM1cTjwpzw==", "dev": true, "peerDependencies": { - "@types/react": "17 || 18" + "@types/react": "17 || 18 || 19" } }, "node_modules/@lit/reactive-element": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", - "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.0.tgz", + "integrity": "sha512-L2qyoZSQClcBmq0qajBVbhYEcG6iK0XfLn66ifLe/RfC0/ihpc+pl0Wdn8bJ8o+hj38cG0fGXRgSS20MuXn7qA==", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0" } @@ -2139,9 +2233,9 @@ } }, "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==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "dependencies": { "ms": "^2.1.3" @@ -2480,29 +2574,29 @@ } }, "node_modules/@sinonjs/samsam": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", "dev": true, "dependencies": { - "@sinonjs/commons": "^2.0.0", + "@sinonjs/commons": "^3.0.1", "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" } }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "dependencies": { - "type-detect": "4.0.8" + "engines": { + "node": ">=4" } }, "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, "node_modules/@socket.io/component-emitter": { @@ -2779,9 +2873,9 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", "dev": true }, "node_modules/@types/qs": { @@ -2797,13 +2891,12 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.48", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", - "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "version": "18.3.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", "dev": true, "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, @@ -2813,12 +2906,6 @@ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", "dev": true }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", @@ -3902,9 +3989,9 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -4168,49 +4255,75 @@ "dev": true }, "node_modules/bare-events": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", - "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "dev": true, "optional": true }, "node_modules/bare-fs": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", - "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", "dev": true, "optional": true, "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^2.0.0", - "bare-stream": "^2.0.0" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } } }, "node_modules/bare-os": { - "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==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", "dev": true, - "optional": true + "optional": true, + "engines": { + "bare": ">=1.14.0" + } }, "node_modules/bare-path": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", - "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "dev": true, "optional": true, "dependencies": { - "bare-os": "^2.1.0" + "bare-os": "^3.0.1" } }, "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==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", "dev": true, "optional": true, "dependencies": { "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } } }, "node_modules/base64-js": { @@ -4312,12 +4425,13 @@ "dev": true }, "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { @@ -4662,9 +4776,9 @@ } }, "node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -4788,13 +4902,12 @@ } }, "node_modules/chromium-bidi": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.8.0.tgz", - "integrity": "sha512-uJydbGdTw0DEUjhoogGveneJVWX/9YuqkWePzMmkBYwtdAqo5d3J/ovNKFr+/2hWXYmYCr6it8mSSTIj6SS6Ug==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.11.0.tgz", + "integrity": "sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==", "dev": true, "dependencies": { "mitt": "3.0.1", - "urlpattern-polyfill": "10.0.0", "zod": "3.23.8" }, "peerDependencies": { @@ -5151,9 +5264,9 @@ } }, "node_modules/comment-json": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.3.tgz", - "integrity": "sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", "dev": true, "dependencies": { "array-timsort": "^1.0.3", @@ -5370,9 +5483,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -5689,27 +5802,27 @@ "dev": true }, "node_modules/custom-element-jet-brains-integration": { - "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==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/custom-element-jet-brains-integration/-/custom-element-jet-brains-integration-1.7.0.tgz", + "integrity": "sha512-xub1zmgHsxKn1LSUDrP5UNPuMHVVowcZu6w+y3GC43Kh6gPzNyQs1jRFurUD9bHg7QUmnd7DcT0WhNRuiGkmJA==", "dev": true, "dependencies": { "@prettier/sync": "^0.5.2" } }, "node_modules/custom-element-vs-code-integration": { - "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==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/custom-element-vs-code-integration/-/custom-element-vs-code-integration-1.5.0.tgz", + "integrity": "sha512-dMKlHq7qz1HbNZUXqw/4fVTh8FBLYX/dIQRt9M0M3KX+Z4iXKUzXxCBdNIdLjE18kMiOCZuRLDZly5mBznoCYw==", "dev": true, "dependencies": { "@prettier/sync": "^0.5.2" } }, "node_modules/custom-element-vuejs-integration": { - "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==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/custom-element-vuejs-integration/-/custom-element-vuejs-integration-1.4.0.tgz", + "integrity": "sha512-ibhQrO7MI6pX+dQRMHOHb6BfYcazvLAvVYPUufrAySpZ1pD5g53PcACUd96Zj08TqmqwRqQCqOP9mKglsdaK8g==", "dev": true, "dependencies": { "@prettier/sync": "^0.5.2" @@ -6029,23 +6142,6 @@ "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/degenerator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", @@ -6331,9 +6427,9 @@ } }, "node_modules/eazy-logger": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", - "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.1.0.tgz", + "integrity": "sha512-+mn7lRm+Zf1UT/YaH8WXtpU6PIV2iOjzP6jgKoiaq/VNrjYKp+OHZGe2znaLgDeFkw8cL9ffuaUm+nNnzcYyGw==", "dev": true, "dependencies": { "chalk": "4.1.2" @@ -6394,17 +6490,6 @@ "node": ">= 0.8" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -6436,29 +6521,29 @@ } }, "node_modules/engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", - "xmlhttprequest-ssl": "~2.0.0" + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" } }, "node_modules/engine.io-client/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -6522,9 +6607,9 @@ } }, "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "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" @@ -6587,18 +6672,6 @@ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/esbuild": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", @@ -6716,9 +6789,9 @@ } }, "node_modules/esm-import-transformer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/esm-import-transformer/-/esm-import-transformer-3.0.2.tgz", - "integrity": "sha512-PgvO0wro44lTDM9pYeeOIfpS0lGF80jA+rjT7sBd3b07rxv1AxeNMEI5kSCqRKke2W6SPEz17W3kHOLjaiD7Cw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/esm-import-transformer/-/esm-import-transformer-3.0.3.tgz", + "integrity": "sha512-Wj9kBIA9vKZRYAQzhe229M7wmWb2f3vTu86CkszZUy2/iiVCYljXm/EkwJtWKc0vup30WHhxbm3rpkysBKczxQ==", "dev": true, "dependencies": { "acorn": "^8.11.2" @@ -6779,6 +6852,56 @@ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -6908,16 +7031,16 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -7188,9 +7311,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true }, "node_modules/follow-redirects": { @@ -7235,12 +7358,12 @@ } }, "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==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -7470,20 +7593,21 @@ } }, "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==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { - "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" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7513,12 +7637,6 @@ "node": ">=4" } }, - "node_modules/global-dirs/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, "node_modules/global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -7549,12 +7667,6 @@ "node": ">=0.10.0" } }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -7869,6 +7981,18 @@ "entities": "^3.0.1" } }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/http-assert": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", @@ -7965,6 +8089,15 @@ "node": ">= 14" } }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, "node_modules/husky": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", @@ -7980,20 +8113,6 @@ "url": "https://github.com/sponsors/typicode" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -8033,9 +8152,9 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "dependencies": { "parent-module": "^1.0.0", @@ -8069,6 +8188,16 @@ "node": ">=4" } }, + "node_modules/import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -8115,6 +8244,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/inquirer": { "version": "9.2.12", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", @@ -8783,9 +8918,9 @@ "dev": true }, "node_modules/iso-639-1": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.3.tgz", - "integrity": "sha512-1jz0Wh9hyLMRwqEPchb/KZCiTqfFWtc9R3nm7GHPygBAKS8wdKJ3FH4lvLsri6UtAE5Kz5SnowtXZa//6bqMyw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.5.tgz", + "integrity": "sha512-gXkz5+KN7HrG0Q5UGqSMO2qB9AsbEeyLP54kF1YrMsIxmu+g4BdB7rflReZTSTZGpfj8wywu6pfPBCylPIzGQA==", "dev": true, "engines": { "node": ">=6.0" @@ -9192,6 +9327,18 @@ "url": "https://opencollective.com/lint-staged" } }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/lint-staged/node_modules/commander": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", @@ -9201,54 +9348,23 @@ "node": ">=16" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "node_modules/lint-staged/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6" } }, "node_modules/liquidjs": { - "version": "10.19.0", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.19.0.tgz", - "integrity": "sha512-dNINmbNJ/bp3B8n25BtZQV/GbrmFf0o2InGdMdfQXa+LxfzTFXOkUnBsOLZUb82sLzxaiWv5Jc381Kn4zHjTsQ==", + "version": "10.21.1", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.21.1.tgz", + "integrity": "sha512-NZXmCwv3RG5nire3fmIn9HsOyJX3vo+ptp0yaXUHAMzSNBhx74Hm+dAGJvscUA6lNqbLuYfXgNavRQ9UbUJhQQ==", "dev": true, "dependencies": { "commander": "^10.0.0" @@ -9391,42 +9507,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lit": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", - "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.0.tgz", + "integrity": "sha512-DGVsqsOIHBww2DqnuZzW7QsuCdahp50ojuDaBPC7jUDRpYoH0z7kHBBYZewRzer75FwtrkmkKk7iOAwSaWdBmw==", "dependencies": { - "@lit/reactive-element": "^2.0.4", - "lit-element": "^4.1.0", - "lit-html": "^3.2.0" + "@lit/reactive-element": "^2.1.0", + "lit-element": "^4.2.0", + "lit-html": "^3.3.0" } }, "node_modules/lit-element": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.0.tgz", - "integrity": "sha512-gSejRUQJuMQjV2Z59KAS/D4iElUhwKpIyJvZ9w+DIagIQjfJnhR20h2Q5ddpzXGS+fF0tMZ/xEYGMnKmaI/iww==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.0.tgz", + "integrity": "sha512-MGrXJVAI5x+Bfth/pU9Kst1iWID6GHDLEzFEnyULB/sFiRLgkd8NPK/PeeXxktA3T6EIIaq8U3KcbTU5XFcP2Q==", "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0", - "@lit/reactive-element": "^2.0.4", - "lit-html": "^3.2.0" + "@lit/reactive-element": "^2.1.0", + "lit-html": "^3.3.0" } }, "node_modules/lit-html": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.0.tgz", - "integrity": "sha512-pwT/HwoxqI9FggTrYVarkBKFN9MlTUpLrDHubTmW4SrkL3kkqW5gxwbxMMUnbbRHBC0WTZnYHcjDSCM559VyfA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.0.tgz", + "integrity": "sha512-RHoswrFAxY2d8Cf2mm4OZ1DgzCoBKUKSPvA1fhtSELxUERq2aQQ2h05pO9j81gS1o7RIRJ+CePLogfyahwmynw==", "dependencies": { "@types/trusted-types": "^2.0.2" } @@ -9810,9 +9914,9 @@ "dev": true }, "node_modules/luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", "dev": true, "engines": { "node": ">=12" @@ -9890,9 +9994,9 @@ } }, "node_modules/markdown-it-attrs": { - "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==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.3.1.tgz", + "integrity": "sha512-/ko6cba+H6gdZ0DOw7BbNMZtfuJTRp9g/IrGIuz8lYc/EfnmWRpaR3CFPnNbVz0LDvF8Gf1hFGPqrQqq7De0rg==", "dev": true, "engines": { "node": ">=6" @@ -9941,9 +10045,9 @@ } }, "node_modules/marked": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-11.1.1.tgz", - "integrity": "sha512-EgxRjgK9axsQuUa/oKMx5DEY8oXpKJfk61rT5iY3aRlgU6QJtUcxU5OAymdhCvWvhYcd9FKmO5eQoX8m9VGJXg==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-11.2.0.tgz", + "integrity": "sha512-HR0m3bvu0jAPYiIvLUUQtdg1g6D247//lvcekpHO1WMvbwDlwSkZAX9Lw4F4YHE1T0HaaNve0tuAWuV1UJ6vtw==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -9953,9 +10057,9 @@ } }, "node_modules/marky": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", + "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", "dev": true }, "node_modules/maximatch": { @@ -10003,28 +10107,6 @@ "node": ">=0.10.0" } }, - "node_modules/maximatch/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/maximatch/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", @@ -10056,12 +10138,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "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.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -10135,18 +10217,15 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { @@ -10192,9 +10271,9 @@ "dev": true }, "node_modules/morphdom": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.4.tgz", - "integrity": "sha512-ATTbWMgGa+FaMU3FhnFYB6WgulCqwf6opOll4CBzmVDTLvPMmUPrEv8CudmLPK0MESa64+6B89fWOxP3+YIlxQ==", + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.5.tgz", + "integrity": "sha512-z6bfWFMra7kBqDjQGHud1LSXtq5JJC060viEkQFMBX6baIecpkNr2Ywrn2OQfWP3rXiNFQRPoFjD8/TvJcWcDg==", "dev": true }, "node_modules/ms": { @@ -10261,9 +10340,9 @@ } }, "node_modules/nise": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.7.tgz", - "integrity": "sha512-wWtNUhkT7k58uvWTB/Gy26eA/EJKtPZFVAhEilN5UYVmmGRYOURbejRUyKm0Uu9XVEW7K5nBOZfR8VMB4QR2RQ==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", @@ -10274,12 +10353,12 @@ } }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", - "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", + "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", "dev": true, "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@sinonjs/commons": "^3.0.1" } }, "node_modules/no-case": { @@ -10403,14 +10482,14 @@ } }, "node_modules/node-retrieve-globals": { - "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==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/node-retrieve-globals/-/node-retrieve-globals-6.0.1.tgz", + "integrity": "sha512-j0DeFuZ/Wg3VlklfbxUgZF/mdHMTEiEipBb3q0SpMMbHaV3AVfoUQF8UGxh1s/yjqO0TgRZd4Pi/x2yRqoQ4Eg==", "dev": true, "dependencies": { - "acorn": "^8.1.3", - "acorn-walk": "^8.3.2", - "esm-import-transformer": "^3.0.2" + "acorn": "^8.14.1", + "acorn-walk": "^8.3.4", + "esm-import-transformer": "^3.0.3" } }, "node_modules/normalize-path": { @@ -10437,9 +10516,9 @@ } }, "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==", + "version": "17.1.18", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-17.1.18.tgz", + "integrity": "sha512-bkUy2g4v1i+3FeUf5fXMLbxmV95eG4/sS7lYE32GrUeVgQRfQEk39gpskksFunyaxQgTIdrvYbnuNbO/pSUSqw==", "dev": true, "bin": { "ncu": "build/cli.js", @@ -10451,9 +10530,9 @@ } }, "node_modules/npm-run-path": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -10541,15 +10620,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", @@ -10565,20 +10635,6 @@ "node": ">=0.10.0" } }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", @@ -10626,15 +10682,15 @@ } }, "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "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": "^4.0.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10691,9 +10747,9 @@ } }, "node_modules/ora": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.1.1.tgz", - "integrity": "sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", "dev": true, "dependencies": { "chalk": "^5.3.0", @@ -10740,21 +10796,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/onetime": { - "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-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ora/node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -10831,22 +10872,7 @@ "node": ">=4" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/node_modules/p-limit": { + "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", @@ -10861,11 +10887,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { "node": ">=10" }, @@ -10901,9 +10930,9 @@ } }, "node_modules/pac-proxy-agent": { - "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==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", @@ -11119,9 +11148,9 @@ "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", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true }, "node_modules/path-type": { @@ -11194,12 +11223,12 @@ } }, "node_modules/playwright": { - "version": "1.49.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.1.tgz", - "integrity": "sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", + "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", "dev": true, "dependencies": { - "playwright-core": "1.49.1" + "playwright-core": "1.52.0" }, "bin": { "playwright": "cli.js" @@ -11212,9 +11241,9 @@ } }, "node_modules/playwright-core": { - "version": "1.49.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.1.tgz", - "integrity": "sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", + "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -11394,9 +11423,9 @@ } }, "node_modules/prettier": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", - "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -11426,9 +11455,9 @@ } }, "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "dev": true, "engines": { "node": ">=6" @@ -11527,13 +11556,13 @@ } }, "node_modules/puppeteer-core": { - "version": "23.10.4", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.10.4.tgz", - "integrity": "sha512-pQAY7+IFAndWDkDodsQGguW1/ifV5OMlGXJDspwtK49Asb7poJZ/V5rXJxVSpq57bWrJasjQBZ1X27z1oWVq4Q==", + "version": "23.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.11.1.tgz", + "integrity": "sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==", "dev": true, "dependencies": { "@puppeteer/browsers": "2.6.1", - "chromium-bidi": "0.8.0", + "chromium-bidi": "0.11.0", "debug": "^4.4.0", "devtools-protocol": "0.0.1367902", "typed-query-selector": "^2.12.0", @@ -11544,9 +11573,9 @@ } }, "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==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "dependencies": { "ms": "^2.1.3" @@ -11620,12 +11649,6 @@ } ] }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -11679,9 +11702,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dev": true, "dependencies": { "loose-envify": "^1.1.0" @@ -11758,48 +11781,6 @@ "slash": "^1.0.0" } }, - "node_modules/recursive-copy/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/recursive-copy/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/recursive-copy/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/recursive-copy/node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -11988,16 +11969,6 @@ "node": ">= 0.8.0" } }, - "node_modules/resp-modifier/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/resp-modifier/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -12007,18 +11978,6 @@ "ms": "2.0.0" } }, - "node_modules/resp-modifier/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/resp-modifier/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -12082,15 +12041,16 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -12102,48 +12062,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/rollup": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.1.tgz", @@ -12282,9 +12200,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -12708,14 +12626,14 @@ } }, "node_modules/socket.io-client": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.4.tgz", - "integrity": "sha512-wh+OkeF0rAVCrABWQBaEjLfb7DVPotMbu0cgWgyR0v6eA4EoVnAwcIeIbcdTE3GT/H3kbdLl7OoH2+asoDRIIg==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.5.2", + "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" }, "engines": { @@ -12736,9 +12654,9 @@ } }, "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", "dev": true, "dependencies": { "ip-address": "^9.0.5", @@ -12886,13 +12804,12 @@ "dev": true }, "node_modules/streamx": { - "version": "2.21.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.21.1.tgz", - "integrity": "sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", "dev": true, "dependencies": { "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", "text-decoder": "^1.1.0" }, "optionalDependencies": { @@ -13088,12 +13005,6 @@ "node": ">=0.8.0" } }, - "node_modules/style-observer": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/style-observer/-/style-observer-0.0.7.tgz", - "integrity": "sha512-t75H3CRy+vd5q3yqyrf/De4tkz33hPQTiCcfh0NTesI5G7kJnZ227LEYTwqjKTtaFOCJvqZcYFHpJlF8bsk3bQ==", - "license": "MIT" - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13167,17 +13078,17 @@ } }, "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==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", + "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", "dev": true, "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, "node_modules/tar-fs/node_modules/tar-stream": { @@ -13348,6 +13259,18 @@ "node": ">=4" } }, + "node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -13377,9 +13300,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -13632,15 +13555,15 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", "dev": true }, "node_modules/vscode-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", "dev": true }, "node_modules/wcwidth": { @@ -13855,9 +13778,9 @@ } }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", "dev": true, "engines": { "node": ">=10.0.0" @@ -13885,9 +13808,9 @@ } }, "node_modules/xmlhttprequest-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -14022,6 +13945,18 @@ "node": ">= 4.0.0" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.23.8", "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", diff --git a/package.json b/package.json index 08fde6245..b56e7376a 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "create": "plop --plopfile scripts/plop/plopfile.js", "test": "CSR_ONLY=\"true\" web-test-runner --group default", "test:component": "CSR_ONLY=\"true\" web-test-runner -- --watch --group", - "test:contrast": "cd src/styles/color && node contrast.test.js", + "test:contrast": "node scripts/color-palette-contrast-test.js", "test:watch": "web-test-runner --watch --group default", "prettier": "prettier --check --log-level=warn .", "prettier:fix": "prettier --write --log-level=warn .", @@ -71,8 +71,7 @@ "@shoelace-style/localize": "^3.2.1", "composed-offset-position": "^0.0.6", "lit": "^3.2.1", - "qr-creator": "^1.0.0", - "style-observer": "^0.0.7" + "qr-creator": "^1.0.0" }, "devDependencies": { "@11ty/eleventy": "3.0.0", @@ -117,6 +116,7 @@ "marked": "^11.1.0", "node-html-parser": "^6.1.13", "npm-check-updates": "^17.1.11", + "nunjucks": "^3.2.4", "ora": "^8.1.1", "pascal-case": "^3.1.2", "playwright": "^1.49.1", diff --git a/src/styles/color/contrast.test.js b/scripts/color-palette-contrast-test.js similarity index 96% rename from src/styles/color/contrast.test.js rename to scripts/color-palette-contrast-test.js index 1882f8353..875efde3e 100644 --- a/src/styles/color/contrast.test.js +++ b/scripts/color-palette-contrast-test.js @@ -1,7 +1,7 @@ // Get a list of all CSS files in repo import chalk from 'chalk'; import Color from 'colorjs.io'; -import palettes from './palettes.js'; +import palettes from '../src/styles/color/scripts/palettes.js'; let targetContrasts = { 40: 3, diff --git a/src/components/badge/badge.test.ts b/src/components/badge/badge.test.ts index 034955f14..348f0881a 100644 --- a/src/components/badge/badge.test.ts +++ b/src/components/badge/badge.test.ts @@ -23,8 +23,8 @@ describe('', () => { it('should default to square styling, with the brand color', async () => { const el = await fixture(html` Badge `); - expect(el.getAttribute('variant')).to.eq(null); - expect(el.variant).to.eq('inherit'); + expect(el.getAttribute('variant')).to.eq('brand'); + expect(el.variant).to.eq('brand'); }); }); diff --git a/src/components/badge/badge.ts b/src/components/badge/badge.ts index 7544eadaa..9ce62ac5a 100644 --- a/src/components/badge/badge.ts +++ b/src/components/badge/badge.ts @@ -24,13 +24,7 @@ export default class WaBadge extends WebAwesomeElement { static shadowStyle = [variantStyles, appearanceStyles, styles]; /** The badge's theme variant. Defaults to `brand` if not within another element with a variant. */ - @property({ reflect: true, initial: 'brand' }) variant: - | 'brand' - | 'neutral' - | 'success' - | 'warning' - | 'danger' - | 'inherit' = 'inherit'; + @property({ reflect: true }) variant: 'brand' | 'neutral' | 'success' | 'warning' | 'danger' = 'brand'; /** The badge's visual appearance. */ @property({ reflect: true }) appearance: 'accent' | 'filled' | 'outlined' = 'accent'; diff --git a/src/components/button-group/button-group.css b/src/components/button-group/button-group.css index feb4b28f5..794d9902a 100644 --- a/src/components/button-group/button-group.css +++ b/src/components/button-group/button-group.css @@ -1,3 +1,43 @@ :host { display: inline-flex; } + +.button-group { + display: flex; + position: relative; + isolation: isolate; + flex-wrap: wrap; + gap: 1px; + + > :hover, + &::slotted(:hover) { + z-index: 1; + } + + /* Focus and checked are always on top */ + > :focus, + &::slotted(:focus), + > [aria-checked='true'], + &::slotted([aria-checked='true']), + > [checked], + &::slotted([checked]) { + z-index: 2 !important; + } +} + +:host([orientation='vertical']) { + flex-direction: column; +} + +/* Button groups with at least one outlined button will not have a gap and instead have borders overlap */ +.button-group.has-outlined { + gap: 0; + + &:not([aria-orientation='vertical']):not(.button-group-vertical)::slotted(:not(:first-child)) { + margin-inline-start: calc(-1 * var(--border-width)); + } + + &:is([aria-orientation='vertical'], .button-group-vertical)::slotted(:not(:first-child)) { + margin-block-start: calc(-1 * var(--border-width)); + } +} diff --git a/src/components/button-group/button-group.ts b/src/components/button-group/button-group.ts index 7960c4766..0f2cefab9 100644 --- a/src/components/button-group/button-group.ts +++ b/src/components/button-group/button-group.ts @@ -3,11 +3,9 @@ import { html } from 'lit'; import { customElement, property, query, state } from 'lit/decorators.js'; import { classMap } from 'lit/directives/class-map.js'; import WebAwesomeElement from '../../internal/webawesome-element.js'; -import buttonGroupStyles from '../../styles/utilities/button-group.css'; import sizeStyles from '../../styles/utilities/size.css'; import variantStyles from '../../styles/utilities/variants.css'; import type WaButton from '../button/button.js'; -import type WaRadioButton from '../radio-button/radio-button.js'; import styles from './button-group.css'; /** @@ -22,7 +20,7 @@ import styles from './button-group.css'; */ @customElement('wa-button-group') export default class WaButtonGroup extends WebAwesomeElement { - static shadowStyle = [sizeStyles, variantStyles, buttonGroupStyles, styles]; + static shadowStyle = [sizeStyles, variantStyles, styles]; @query('slot') defaultSlot: HTMLSlotElement; @@ -39,16 +37,10 @@ export default class WaButtonGroup extends WebAwesomeElement { @property({ reflect: true }) orientation: 'horizontal' | 'vertical' = 'horizontal'; /** The component's size. */ - @property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit'; + @property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium'; /** The button group's theme variant. Defaults to `neutral` if not within another element with a variant. */ - @property({ reflect: true, initial: 'neutral' }) variant: - | 'neutral' - | 'brand' - | 'success' - | 'warning' - | 'danger' - | 'inherit' = 'inherit'; + @property({ reflect: true }) variant: 'neutral' | 'brand' | 'success' | 'warning' | 'danger' = 'neutral'; updated(changedProperties: PropertyValues) { super.updated(changedProperties); @@ -93,6 +85,7 @@ export default class WaButtonGroup extends WebAwesomeElement { if (button) { if ((button as WaButton).appearance === 'outlined') this.hasOutlined = true; + button.setAttribute('size', this.size); button.classList.add('wa-button-group__button'); button.classList.toggle('wa-button-group__horizontal', this.orientation === 'horizontal'); button.classList.toggle('wa-button-group__vertical', this.orientation === 'vertical'); @@ -126,7 +119,7 @@ function findButton(el: HTMLElement) { const selector = 'wa-button, wa-radio-button'; // The button could be the target element or a child of it (e.g. a dropdown or tooltip anchor) - return (el.closest(selector) ?? el.querySelector(selector)) as WaButton | WaRadioButton; + return (el.closest(selector) ?? el.querySelector(selector)) as WaButton; } declare global { diff --git a/src/components/button/button.css b/src/components/button/button.css index b69975925..b271d316e 100644 --- a/src/components/button/button.css +++ b/src/components/button/button.css @@ -1,7 +1,97 @@ -:host { - --display: inline-flex; +@layer wa-component { + :host { + --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)); - position: relative; + --border-color: transparent; + --border-color-hover: var(--border-color); + --border-color-active: var(--border-color); + --border-width: max(1px, var(--wa-form-control-border-width)); + + --box-shadow: initial; + + --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); + + display: inline-block; + position: relative; + } +} + +.button { + border-radius: var(--wa-form-control-border-radius); + border-style: var(--wa-border-style); + border-width: var(--border-width); + box-shadow: var(--box-shadow); + align-items: center; + justify-content: center; + text-decoration: none; + user-select: none; + -webkit-user-select: none; + white-space: nowrap; + vertical-align: middle; + 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(--wa-space, var(--wa-space-m)); + font-family: inherit; + font-size: var(--wa-size, var(--wa-font-size-m)); + font-weight: var(--wa-font-weight-action); + line-height: calc(var(--wa-form-control-height) - var(--border-width) * 2); + height: var(--wa-form-control-height); + width: 100%; + + display: inline-flex; + background-color: var(--background-color); + border-color: var(--border-color, var(--background-color)); + color: var(--text-color); +} + +/* Interactive states */ +.button:not(.disabled):not(.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)); +} + +.button:not(.disabled):not(.loading):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)); +} + +/* Focus states */ +.button:focus { + outline: none; +} + +.button:focus-visible { + outline: var(--wa-focus-ring); + outline-offset: var(--wa-focus-ring-offset); +} + +/* Disabled state */ +.button.disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* When disabled, prevent mouse events from bubbling up from children */ +.button.disabled * { + pointer-events: none; +} + +/* Keep it last so Safari doesn't stop parsing this block */ +.button::-moz-focus-inner { + border: 0; +} + +/* Pill modifier */ +:host([pill]) .button { + border-radius: var(--wa-border-radius-pill); } /* @@ -38,7 +128,7 @@ wa-icon[part~='caret'] { height: 0.875em; } - .wa-button:has(&) .suffix { + .button:has(&) .suffix { display: none; } } @@ -74,7 +164,6 @@ wa-icon[part~='caret'] { /* * Badges */ - button ::slotted(wa-badge) { border-color: var(--wa-color-surface-default); position: absolute; @@ -97,6 +186,67 @@ slot[name='prefix']::slotted(*) { } slot[name='suffix']::slotted(*), -.wa-button:not(.visually-hidden-label) [part~='caret'] { +.button:not(.visually-hidden-label) [part~='caret'] { margin-inline-start: var(--wa-space); } + +/* + * Button group border radius modifications + */ + +/* Remove border radius from all grouped buttons by default */ +:host(.wa-button-group__button) .button { + border-radius: 0; +} + +/* Horizontal orientation */ +:host(.wa-button-group__horizontal.wa-button-group__button-first) .button { + border-start-start-radius: var(--wa-form-control-border-radius); + border-end-start-radius: var(--wa-form-control-border-radius); +} + +:host(.wa-button-group__horizontal.wa-button-group__button-last) .button { + border-start-end-radius: var(--wa-form-control-border-radius); + border-end-end-radius: var(--wa-form-control-border-radius); +} + +/* Vertical orientation */ +:host(.wa-button-group__vertical) { + flex: 1 1 auto; +} + +:host(.wa-button-group__vertical) .button { + width: 100%; + justify-content: start; +} + +:host(.wa-button-group__vertical.wa-button-group__button-first) .button { + border-start-start-radius: var(--wa-form-control-border-radius); + border-start-end-radius: var(--wa-form-control-border-radius); +} + +:host(.wa-button-group__vertical.wa-button-group__button-last) .button { + border-end-start-radius: var(--wa-form-control-border-radius); + border-end-end-radius: var(--wa-form-control-border-radius); +} + +/* Handle pill modifier for button groups */ +:host([pill]) .wa-button-group__horizontal.wa-button-group__button-first { + border-start-start-radius: var(--wa-border-radius-pill); + border-end-start-radius: var(--wa-border-radius-pill); +} + +:host([pill]) .wa-button-group__horizontal.wa-button-group__button-last { + border-start-end-radius: var(--wa-border-radius-pill); + border-end-end-radius: var(--wa-border-radius-pill); +} + +:host([pill]) .wa-button-group__vertical.wa-button-group__button-first { + border-start-start-radius: var(--wa-border-radius-pill); + border-start-end-radius: var(--wa-border-radius-pill); +} + +:host([pill]) .wa-button-group__vertical.wa-button-group__button-last { + border-end-start-radius: var(--wa-border-radius-pill); + border-end-end-radius: var(--wa-border-radius-pill); +} diff --git a/src/components/button/button.test.ts b/src/components/button/button.test.ts index f5a4be55e..5edae480d 100644 --- a/src/components/button/button.test.ts +++ b/src/components/button/button.test.ts @@ -44,100 +44,6 @@ describe('', () => { }); }); - describe('when an attribute is removed', () => { - it("should return to 'inherit' when attribute removed with no initial attribute", async () => { - const el = await fixture(html`Button label`); - - expect(el.variant).to.equal('inherit'); - expect(el.getAttribute('variant')).to.equal(null); - - el.removeAttribute('variant'); - await el.updateComplete; - - expect(el.variant).to.equal('inherit'); - expect(el.getAttribute('variant')).to.equal(null); - }); - - it("should return to 'inherit' when attribute removed with an initial attribute", async () => { - const el = await fixture(html`Button label`); - - expect(el.variant).to.equal('primary'); - expect(el.getAttribute('variant')).to.equal('primary'); - - el.removeAttribute('variant'); - await el.updateComplete; - - expect(el.variant).to.equal('inherit'); - expect(el.getAttribute('variant')).to.equal(null); - }); - }); - - describe('when a property is set to null', () => { - it("should return to 'default' when property set to null with no initial attribute", async () => { - const el = await fixture(html`Button label`); - - expect(el.variant).to.equal('inherit'); - expect(el.getAttribute('variant')).to.equal(null); - - // @ts-expect-error Its a test. Stop. - el.variant = null; - await el.updateComplete; - - expect(el.variant).to.equal('inherit'); - expect(el.getAttribute('variant')).to.equal(null); - }); - - it("should return to 'default' when property set to null with an initial attribute", async () => { - const el = await fixture(html`Button label`); - - expect(el.variant).to.equal('primary'); - expect(el.getAttribute('variant')).to.equal('primary'); - - // @ts-expect-error Its a test. Stop. - el.variant = null; - await el.updateComplete; - - expect(el.variant).to.equal('inherit'); - expect(el.getAttribute('variant')).to.equal(null); - }); - }); - - describe('when provided no parameters', () => { - it('passes accessibility test', async () => { - const el = await fixture(html` Button Label `); - await expect(el).to.be.accessible(); - }); - - it('default values are set correctly', async () => { - const el = await fixture(html` Button Label `); - - expect(el.title).to.equal(''); - expect(el.variant).to.equal('inherit'); - expect(el.appearance).to.equal('accent'); - expect(el.size).to.equal('inherit'); - expect(el.disabled).to.equal(false); - expect(el.caret).to.equal(false); - expect(el.loading).to.equal(false); - expect(el.pill).to.equal(false); - }); - - it('should render as a - `; - } -} - -declare global { - interface HTMLElementTagNameMap { - 'wa-radio-button': WaRadioButton; - } -} diff --git a/src/components/radio-group/radio-group.css b/src/components/radio-group/radio-group.css index 1b7f125c2..10ac62d9e 100644 --- a/src/components/radio-group/radio-group.css +++ b/src/components/radio-group/radio-group.css @@ -18,7 +18,7 @@ margin-inline-start: var(--wa-form-control-required-content-offset); } -.wa-button-group { +.button-group { display: flex; } @@ -35,13 +35,14 @@ gap: var(--wa-space-m); } -/* When radio buttons are slotted */ -:host([orientation]) .form-control-has-radio-buttons [part~='form-control-input'] { - gap: 0; - flex-wrap: nowrap; -} - /* Help text */ [part~='hint'] { margin-block-start: var(--wa-space-xs); } + +/* Radios have the "button" appearance */ +:host fieldset.has-radio-buttons { + [part~='form-control-input'] { + gap: 0; + } +} diff --git a/src/components/radio-group/radio-group.test.ts b/src/components/radio-group/radio-group.test.ts index 730394e51..2eafc5e5b 100644 --- a/src/components/radio-group/radio-group.test.ts +++ b/src/components/radio-group/radio-group.test.ts @@ -249,61 +249,6 @@ describe('', () => { }); }); - describe('when a size is applied', () => { - it('should apply the same size to all radios', async () => { - const radioGroup = await fixture(html` - - - - - `); - const [radio1, radio2] = radioGroup.querySelectorAll('wa-radio'); - - expect(radio1.size).to.equal('inherit'); - expect(radio1.getComputed('size')).to.equal('large'); - expect(radio2.size).to.equal('inherit'); - expect(radio2.getComputed('size')).to.equal('large'); - }); - - it('should apply the same size to all radio buttons', async () => { - const radioGroup = await fixture(html` - - - - - `); - const [radio1, radio2] = radioGroup.querySelectorAll('wa-radio-button'); - - expect(radio1.size).to.equal('inherit'); - expect(radio1.getComputed('size')).to.equal('large'); - expect(radio2.size).to.equal('inherit'); - expect(radio2.getComputed('size')).to.equal('large'); - }); - - it('should update the computed size of all radio buttons when size changes', async () => { - const radioGroup = await fixture(html` - - - - - `); - const [radio1, radio2] = radioGroup.querySelectorAll('wa-radio-button'); - - expect(radio1.size).to.equal('inherit'); - expect(radio1.getComputed('size')).to.equal('small'); - expect(radio2.size).to.equal('inherit'); - expect(radio2.getComputed('size')).to.equal('small'); - - radioGroup.size = 'large'; - await radioGroup.updateComplete; - - expect(radio1.size).to.equal('inherit'); - expect(radio1.getComputed('size')).to.equal('large'); - expect(radio2.size).to.equal('inherit'); - expect(radio2.getComputed('size')).to.equal('large'); - }); - }); - describe('when handling focus', () => { const doAction = async (instance: WaRadioGroup, type: string) => { if (type === 'focus') { diff --git a/src/components/radio-group/radio-group.ts b/src/components/radio-group/radio-group.ts index 0d2dd194a..3f8a45f4c 100644 --- a/src/components/radio-group/radio-group.ts +++ b/src/components/radio-group/radio-group.ts @@ -6,25 +6,21 @@ import { HasSlotController } from '../../internal/slot.js'; import { RequiredValidator } from '../../internal/validators/required-validator.js'; import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-form-associated-element.js'; -import formControlStyles from '../../styles/shadow/form-control.css'; -import buttonGroupStyles from '../../styles/utilities/button-group.css'; +import formControlStyles from '../../styles/component/form-control.css'; import sizeStyles from '../../styles/utilities/size.css'; -import '../radio-button/radio-button.js'; -import type WaRadioButton from '../radio-button/radio-button.js'; import '../radio/radio.js'; import type WaRadio from '../radio/radio.js'; import styles from './radio-group.css'; /** - * @summary Radio groups are used to group multiple [radios](/docs/components/radio) or [radio buttons](/docs/components/radio-button) so they function as a single form control. + * @summary Radio groups are used to group multiple [radios](/docs/components/radio) so they function as a single form control. * @documentation https://backers.webawesome.com/docs/components/radio-group * @status stable * @since 2.0 * * @dependency wa-radio - * @dependency wa-radio-button * - * @slot - The default slot where `` or `` elements are placed. + * @slot - The default slot where `` elements are placed. * @slot label - The radio group's label. Required for proper accessibility. Alternatively, you can use the `label` * attribute. * @slot hint - Text that describes how to use the radio group. Alternatively, you can use the `hint` attribute. @@ -41,7 +37,7 @@ import styles from './radio-group.css'; */ @customElement('wa-radio-group') export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { - static shadowStyle = [sizeStyles, buttonGroupStyles, formControlStyles, styles]; + static shadowStyle = [sizeStyles, formControlStyles, styles]; static get validators() { const validators = isServer @@ -61,9 +57,9 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { private readonly hasSlotController = new HasSlotController(this, 'hint', 'label'); - @query('slot:not([name])') defaultSlot: HTMLSlotElement; + @state() hasRadioButtons = false; - @state() private hasRadioButtons = false; + @query('slot:not([name])') defaultSlot: HTMLSlotElement; /** * The radio group's label. Required for proper accessibility. If you need to display HTML, use the `label` slot @@ -102,7 +98,7 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { @property({ attribute: 'value', reflect: true }) defaultValue: string | null = this.getAttribute('value') || null; /** The radio group's size. This size will be applied to all child radios and radio buttons, except when explicitly overridden. */ - @property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit'; + @property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium'; /** Ensures a child radio is checked before allowing the containing form to submit. */ @property({ type: Boolean, reflect: true }) required = false; @@ -132,8 +128,29 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { } } + /** + * We use the first available radio as the validationTarget similar to native HTML that shows the validation popup on + * the first radio element. + */ + get validationTarget() { + if (isServer) return undefined; + + const radio = this.querySelector(':is(wa-radio):not([disabled])'); + if (!radio) return undefined; + + return radio; + } + + formResetCallback(...args: Parameters) { + this.value = this.defaultValue; + + super.formResetCallback(...args); + + this.syncRadioElements(); + } + private handleRadioClick = (e: Event) => { - const clickedRadio = (e.target as HTMLElement).closest('wa-radio, wa-radio-button'); + const clickedRadio = (e.target as HTMLElement).closest('wa-radio'); if (!clickedRadio || clickedRadio.disabled) { return; @@ -144,17 +161,13 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { clickedRadio.checked = true; const radios = this.getAllRadios(); - const hasRadioButtons = radios.some(radio => radio.tagName.toLowerCase() === 'wa-radio-button'); for (const radio of radios) { if (clickedRadio === radio) { continue; } radio.checked = false; - - if (!hasRadioButtons) { - radio.setAttribute('tabindex', '-1'); - } + radio.setAttribute('tabindex', '-1'); } if (this.value !== oldValue) { @@ -164,7 +177,7 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { }; private getAllRadios() { - return [...this.querySelectorAll('wa-radio, wa-radio-button')]; + return [...this.querySelectorAll('wa-radio')]; } private handleLabelClick() { @@ -173,12 +186,12 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { private async syncRadioElements() { const radios = this.getAllRadios(); - - // Detect the presence of radio buttons - this.hasRadioButtons = radios.some(radio => radio.localName === 'wa-radio-button'); + let hasRadioButtons = false; // Add data attributes to support styling radios.forEach((radio, index) => { + if (radio.appearance === 'button') hasRadioButtons = true; + radio.setAttribute('size', this.size); radio.toggleAttribute('data-wa-radio-horizontal', this.orientation !== 'vertical'); radio.toggleAttribute('data-wa-radio-vertical', this.orientation === 'vertical'); radio.toggleAttribute('data-wa-radio-first', index === 0); @@ -186,8 +199,10 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { radio.toggleAttribute('data-wa-radio-last', index === radios.length - 1); }); + // If at least one radio button exists, we assume it's a radio button group + this.hasRadioButtons = hasRadioButtons; + await Promise.all( - // Sync the checked state and size radios.map(async radio => { await radio.updateComplete; @@ -200,43 +215,8 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { ); if (radios.length > 0 && !radios.some(radio => radio.checked)) { - if (this.hasRadioButtons) { - const buttonRadio = radios[0].shadowRoot?.querySelector('button'); - - if (buttonRadio) { - buttonRadio.setAttribute('tabindex', '0'); - } - } else { - radios[0].setAttribute('tabindex', '0'); - } + radios[0].setAttribute('tabindex', '0'); } - - if (this.hasRadioButtons) { - const buttonGroup = this.shadowRoot?.querySelector('wa-button-group'); - - if (buttonGroup) { - buttonGroup.disableRole = true; - } - } - } - - /** - * We use the first available radio as the validationTarget similar to native HTML that shows the validation popup on - * the first radio element. - */ - get validationTarget() { - if (isServer) return undefined; - - const radio = this.querySelector(':is(wa-radio, wa-radio-button):not([disabled])'); - if (!radio) return undefined; - - // If it's a radio button, return the internal button element - if (radio.localName === 'wa-radio-button') { - return radio.input || radio; - } - - // Otherwise return the radio itself - return radio; } @watch('value') @@ -244,19 +224,6 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { this.syncRadioElements(); } - @watch('size', { waitUntilFirstUpdate: true }) - handleSizeChange() { - this.syncRadioElements(); - } - - formResetCallback(...args: Parameters) { - this.value = this.defaultValue; - - super.formResetCallback(...args); - - this.syncRadioElements(); - } - private handleKeyDown(event: KeyboardEvent) { if (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', ' '].includes(event.key)) { return; @@ -340,7 +307,7 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { 'form-control': true, 'form-control-radio-group': true, 'form-control-has-label': hasLabel, - 'form-control-has-radio-buttons': this.hasRadioButtons, + 'has-radio-buttons': this.hasRadioButtons, })} role="radiogroup" aria-labelledby="label" @@ -358,14 +325,7 @@ export default class WaRadioGroup extends WebAwesomeFormAssociatedElement { ${this.label} - + '; /** The component's size. */ - @property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit'; + @property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium'; private getValueFromMousePosition(event: MouseEvent) { return this.getValueFromXCoordinate(event.clientX); diff --git a/src/components/select/select.css b/src/components/select/select.css index 175d8bf16..2f2dab2a4 100644 --- a/src/components/select/select.css +++ b/src/components/select/select.css @@ -1,3 +1,59 @@ +label:has(select), +:host { + /* Defaults for root element. */ + --outlined-background-color: var(--wa-form-control-background-color); + --outlined-border-color: var(--wa-form-control-border-color); + --outlined-text-color: var(--wa-form-control-value-color); + --border-width: var(--wa-form-control-border-width); + --box-shadow: initial; +} + +:host [part~='combobox'] { + background-color: var(--background-color, var(--wa-form-control-background-color)); + border-color: var(--border-color, var(--wa-form-control-border-color)); + border-radius: var(--wa-form-control-border-radius); + border-style: var(--wa-form-control-border-style); + border-width: var(--border-width); + box-shadow: var(--box-shadow); + color: var(--wa-form-control-value-color); + cursor: pointer; + font-family: inherit; + font-size: var(--wa-size); + font-weight: var(--wa-form-control-value-font-weight); + line-height: var(--wa-form-control-value-line-height); + min-width: 0; + overflow: hidden; + padding: var(--wa-space-smaller) var(--wa-space); + position: relative; + 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); +} + +/* Add ellipses to multi select options */ +:host wa-tag::part(content) { + display: initial; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + max-width: 7ch; +} + +:host .disabled [part~='combobox'] { + opacity: 0.5; + cursor: not-allowed; + outline: none; +} + +:host .enabled:is(.open, :focus-within) [part~='combobox'] { + outline: var(--wa-focus-ring); + outline-offset: var(--wa-focus-ring-offset); +} + /** The popup */ .select { flex: 1 1 auto; @@ -42,7 +98,7 @@ } } - :host([multiple]) .select:not(.placeholder-visible) & { + :host([multiple]) .select:not(.placeholder-visible) { padding-inline-start: 0; padding-block: 3px; } diff --git a/src/components/select/select.ts b/src/components/select/select.ts index 5be5d6e50..897e8c322 100644 --- a/src/components/select/select.ts +++ b/src/components/select/select.ts @@ -16,8 +16,7 @@ import { HasSlotController } from '../../internal/slot.js'; import { RequiredValidator } from '../../internal/validators/required-validator.js'; import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-form-associated-element.js'; -import nativeStyles from '../../styles/native/select.css'; -import formControlStyles from '../../styles/shadow/form-control.css'; +import formControlStyles from '../../styles/component/form-control.css'; import appearanceStyles from '../../styles/utilities/appearance.css'; import sizeStyles from '../../styles/utilities/size.css'; import { LocalizeController } from '../../utilities/localize.js'; @@ -85,7 +84,7 @@ import styles from './select.css'; */ @customElement('wa-select') export default class WaSelect extends WebAwesomeFormAssociatedElement { - static shadowStyle = [appearanceStyles, formControlStyles, sizeStyles, nativeStyles, styles]; + static shadowStyle = [appearanceStyles, formControlStyles, sizeStyles, styles]; static get validators() { const validators = isServer @@ -204,7 +203,7 @@ export default class WaSelect extends WebAwesomeFormAssociatedElement { } /** The select's size. */ - @property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit'; + @property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium'; /** Placeholder text to show as a hint when the select is empty. */ @property() placeholder = ''; diff --git a/src/components/skeleton/skeleton.test.ts b/src/components/skeleton/skeleton.test.ts index 68274b11c..e620977c5 100644 --- a/src/components/skeleton/skeleton.test.ts +++ b/src/components/skeleton/skeleton.test.ts @@ -13,7 +13,7 @@ describe('', () => { const indicator = el.shadowRoot!.querySelector('[part~="indicator"]')!; - expect(el.getAttribute('effect')).to.equal(null); + expect(el.getAttribute('effect')).to.equal('none'); expect(indicator.getAttribute('class')).to.equal('indicator'); }); @@ -22,7 +22,7 @@ describe('', () => { const indicator = el.shadowRoot!.querySelector('[part~="indicator"]')!; const cs = getComputedStyle(indicator); - expect(el.getAttribute('effect')).to.equal(null); + expect(el.getAttribute('effect')).to.equal('none'); expect(cs.animationName).to.equal('none'); }); diff --git a/src/components/skeleton/skeleton.ts b/src/components/skeleton/skeleton.ts index be36989c4..2eb831057 100644 --- a/src/components/skeleton/skeleton.ts +++ b/src/components/skeleton/skeleton.ts @@ -20,7 +20,7 @@ export default class WaSkeleton extends WebAwesomeElement { static shadowStyle = styles; /** Determines which effect the skeleton will use. */ - @property({ reflect: true, default: 'none' }) effect: 'pulse' | 'sheen' | 'none' = 'none'; + @property({ reflect: true }) effect: 'pulse' | 'sheen' | 'none' = 'none'; render() { return html`
    `; diff --git a/src/components/slider/slider.css b/src/components/slider/slider.css index bdb721fba..5c0a37e57 100644 --- a/src/components/slider/slider.css +++ b/src/components/slider/slider.css @@ -1,8 +1,143 @@ :host { + --thumb-color: var(--wa-form-control-activated-color); + --thumb-gap: calc(var(--thumb-size) * 0.125); + --thumb-shadow: initial; + --thumb-size: calc(1rem * var(--wa-form-control-value-line-height)); + + --track-color-active: var(--wa-color-neutral-fill-normal); + --track-color-inactive: var(--wa-color-neutral-fill-normal); + --track-active-offset: 0%; + --track-height: calc(var(--thumb-size) * 0.25); --tooltip-offset: calc(var(--wa-tooltip-arrow-size) * 1.375); + + display: flex; + flex-direction: column; + position: relative; min-height: max(var(--thumb-size), var(--track-height)); } +input[type='range'] { + --percent: 0%; + -webkit-appearance: none; + border-radius: calc(var(--track-height) / 2); + width: 100%; + height: var(--track-height); + line-height: var(--wa-form-control-height); + vertical-align: middle; + margin: 0; + --dir: right; + + background-image: linear-gradient( + to var(--dir), + var(--track-color-inactive) min(var(--percent), var(--track-active-offset)), + var(--track-color-active) min(var(--percent), var(--track-active-offset)), + var(--track-color-active) max(var(--percent), var(--track-active-offset)), + var(--track-color-inactive) max(var(--percent), var(--track-active-offset)) + ); + + &:dir(rtl) { + --dir: left; + } + + &::-webkit-slider-runnable-track { + width: 100%; + height: var(--track-height); + border-radius: 3px; + border: none; + } + + &::-webkit-slider-thumb { + width: var(--thumb-size); + height: var(--thumb-size); + border-radius: 50%; + background-color: var(--thumb-color); + box-shadow: + var(--thumb-shadow, 0 0 transparent), + 0 0 0 var(--thumb-gap) var(--wa-color-surface-default); + -webkit-appearance: none; + margin-top: calc(var(--thumb-size) / -2 + var(--track-height) / 2); + transition: var(--wa-transition-fast); + transition-property: width, height; + } + + &:enabled { + &:focus-visible::-webkit-slider-thumb { + outline: var(--wa-focus-ring); + outline-offset: var(--wa-focus-ring-offset); + } + + &::-webkit-slider-thumb { + cursor: pointer; + } + + &::-webkit-slider-thumb:active { + cursor: grabbing; + } + } + + &::-moz-focus-outer { + border: 0; + } + + &::-moz-range-progress { + background-color: var(--track-color-active); + border-radius: 3px; + height: var(--track-height); + } + + &::-moz-range-track { + width: 100%; + height: var(--track-height); + background-color: var(--track-color-inactive); + border-radius: 3px; + border: none; + } + + &::-moz-range-thumb { + height: var(--thumb-size); + width: var(--thumb-size); + border-radius: 50%; + background-color: var(--thumb-color); + box-shadow: + var(--thumb-shadow, 0 0 transparent), + 0 0 0 var(--thumb-gap) var(--wa-color-surface-default); + transition-property: background-color, border-color, box-shadow, color; + transition-duration: var(--wa-transition-normal); + transition-timing-function: var(--wa-transition-easing); + } + + &:enabled { + &:focus-visible::-moz-range-thumb { + outline: var(--wa-focus-ring); + outline-offset: var(--wa-focus-ring-offset); + } + + &::-moz-range-thumb { + cursor: pointer; + } + + &::-moz-range-thumb:active { + cursor: grabbing; + } + } +} + +/* States */ +/* nesting these styles yields broken results in Safari */ +input[type='range']:focus { + outline: none; +} + +:host :has(:disabled) input[type='range'] { + opacity: 0.5; + cursor: not-allowed; + + &::-moz-range-thumb, + &::-webkit-slider-thumb { + cursor: not-allowed; + } +} + /* Tooltip output */ .tooltip { position: absolute; @@ -21,7 +156,7 @@ transition: var(--wa-transition-normal) opacity; pointer-events: none; - &:after { + &::after { content: ''; position: absolute; width: 0; @@ -33,6 +168,10 @@ border-block-start: var(--border-block); } + &:dir(rtl)::after { + translate: var(--wa-tooltip-arrow-size); + } + &.visible { opacity: 1; } @@ -43,20 +182,32 @@ @media (forced-colors: active) { border: solid 1px transparent; - &:after { + &::after { display: none; } } } +/* RTL tooltip positioning */ +:host(:dir(rtl)) .tooltip { + inset-inline-start: auto; + inset-inline-end: 0; +} + /* Tooltip on bottom */ :host([tooltip='bottom']) .tooltip { inset-block-end: auto; inset-block-start: calc(50% + (var(--thumb-size) / 2) + var(--tooltip-offset)); - &:after { + &::after { border-block-end: var(--border-block); inset-block-start: auto; inset-block-end: 100%; } } + +/* Bottom tooltip RTL fix */ +:host([tooltip='bottom']:dir(rtl)) .tooltip { + inset-inline-start: auto; + inset-inline-end: 0; +} diff --git a/src/components/slider/slider.ts b/src/components/slider/slider.ts index 2b3a553c0..aa7bdb17c 100644 --- a/src/components/slider/slider.ts +++ b/src/components/slider/slider.ts @@ -7,8 +7,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-form-associated-element.js'; -import sliderStyles from '../../styles/native/slider.css'; -import formControlStyles from '../../styles/shadow/form-control.css'; +import formControlStyles from '../../styles/component/form-control.css'; import { LocalizeController } from '../../utilities/localize.js'; import styles from './slider.css'; @@ -46,7 +45,7 @@ import styles from './slider.css'; */ @customElement('wa-slider') export default class WaSlider extends WebAwesomeFormAssociatedElement { - static shadowStyle = [formControlStyles, sliderStyles, styles]; + static shadowStyle = [formControlStyles, styles]; static get validators() { return [...super.validators, MirrorValidator()]; diff --git a/src/components/switch/switch.ts b/src/components/switch/switch.ts index 47a9bcdf4..60833a78e 100644 --- a/src/components/switch/switch.ts +++ b/src/components/switch/switch.ts @@ -8,7 +8,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-form-associated-element.js'; -import formControlStyles from '../../styles/shadow/form-control.css'; +import formControlStyles from '../../styles/component/form-control.css'; import sizeStyles from '../../styles/utilities/size.css'; import styles from './switch.css'; @@ -78,7 +78,7 @@ export default class WaSwitch extends WebAwesomeFormAssociatedElement { } /** The switch's size. */ - @property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit'; + @property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium'; /** Disables the switch. */ @property({ type: Boolean }) disabled = false; diff --git a/src/components/tag/tag.test.ts b/src/components/tag/tag.test.ts index 1ba346467..df0859582 100644 --- a/src/components/tag/tag.test.ts +++ b/src/components/tag/tag.test.ts @@ -9,9 +9,9 @@ describe('', () => { describe(`with "${fixture.type}" rendering`, () => { it('should render default tag', async () => { const el = await fixture(html` Test `); - expect(el.getAttribute('size')).to.equal(null); - expect(el.getAttribute('variant')).to.equal(null); - expect(el.variant).to.equal('inherit'); + expect(el.getAttribute('size')).to.equal('medium'); + expect(el.getAttribute('variant')).to.equal('neutral'); + expect(el.variant).to.equal('neutral'); }); it('should set variant by attribute', async () => { diff --git a/src/components/tag/tag.ts b/src/components/tag/tag.ts index 348491574..356f2974f 100644 --- a/src/components/tag/tag.ts +++ b/src/components/tag/tag.ts @@ -33,20 +33,14 @@ export default class WaTag extends WebAwesomeElement { private readonly localize = new LocalizeController(this); /** The tag's theme variant. Defaults to `neutral` if not within another element with a variant. */ - @property({ reflect: true, initial: 'neutral' }) variant: - | 'brand' - | 'neutral' - | 'success' - | 'warning' - | 'danger' - | 'inherit' = 'inherit'; + @property({ reflect: true }) variant: 'brand' | 'neutral' | 'success' | 'warning' | 'danger' = 'neutral'; /** The tag's visual appearance. */ @property({ reflect: true }) appearance: 'accent' | 'outlined accent' | 'filled' | 'outlined' | 'outlined filled' = 'outlined filled'; /** The tag's size. */ - @property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit'; + @property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium'; /** Draws a pill-style tag with rounded edges. */ @property({ type: Boolean, reflect: true }) pill = false; diff --git a/src/components/textarea/textarea.css b/src/components/textarea/textarea.css index 338240a1b..2e2595b49 100644 --- a/src/components/textarea/textarea.css +++ b/src/components/textarea/textarea.css @@ -1,37 +1,74 @@ :host { + --border-width: var(--wa-form-control-border-width); + --box-shadow: initial; + --outlined-background-color: var(--wa-form-control-background-color); + --outlined-border-color: var(--wa-form-control-border-color); + --outlined-text-color: var(--wa-form-control-value-color); + border-width: 0; } -.wa-text-field { - display: grid; - align-items: center; - padding: 0; - border-color: inherit; - border-style: inherit; - border-radius: inherit; - transition: inherit; -} +/* Shared textarea and size-adjuster positioning */ +.textarea, +.size-adjuster { + grid-area: 1 / 1 / 2 / 2; + margin: 0; + border: none; + outline: none; + cursor: inherit; + font: inherit; + background-color: var(--background-color, var(--wa-form-control-background-color)); + border-color: var(--border-color, var(--wa-form-control-border-color)); + border-radius: var(--wa-form-control-border-radius); + border-style: var(--wa-form-control-border-style); + border-width: var(--border-width); + box-shadow: var(--box-shadow); + -webkit-appearance: none; -textarea { - background-color: transparent; - color: inherit; - - &[part] { - padding: var(--wa-space); - border-radius: inherit; - border: var(--border-width) solid transparent; /* make resizer look a little nicer */ + &:focus-within { + outline: var(--wa-focus-ring); + outline-offset: var(--wa-focus-ring-offset); } } -textarea, -.size-adjuster { - grid-area: 1 / 1 / 2 / 2; +textarea { + display: block; + width: 100%; + border: none; + background: transparent; + font: inherit; + color: inherit; + padding: var(--wa-space-smaller) var(--wa-space); + min-height: calc(var(--wa-form-control-height) - var(--border-width) * 2 - (var(--wa-space-smaller) * 2)); + box-shadow: none; + margin: 0; + + &::placeholder { + color: var(--wa-form-control-placeholder-color); + user-select: none; + -webkit-user-select: none; + } + + &:autofill { + &, + &:hover, + &:focus, + &:active { + box-shadow: none; + caret-color: var(--wa-form-control-value-color); + } + } + + &:focus { + outline: none; + } } .size-adjuster { visibility: hidden; pointer-events: none; opacity: 0; + padding: 0; } textarea::-webkit-search-decoration, diff --git a/src/components/textarea/textarea.test.ts b/src/components/textarea/textarea.test.ts index 8dedd082e..cc135c21f 100644 --- a/src/components/textarea/textarea.test.ts +++ b/src/components/textarea/textarea.test.ts @@ -20,7 +20,7 @@ describe('', () => { it('default properties', async () => { const el = await fixture(html` `); - expect(el.size).to.equal('inherit'); + expect(el.size).to.equal('medium'); expect(el.name).to.equal(null); expect(el.value).to.equal(''); expect(el.defaultValue).to.equal(''); diff --git a/src/components/textarea/textarea.ts b/src/components/textarea/textarea.ts index 8dcb1cee0..6e66a1600 100644 --- a/src/components/textarea/textarea.ts +++ b/src/components/textarea/textarea.ts @@ -8,8 +8,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-form-associated-element.js'; -import nativeStyles from '../../styles/native/input.css'; -import formControlStyles from '../../styles/shadow/form-control.css'; +import formControlStyles from '../../styles/component/form-control.css'; import appearanceStyles from '../../styles/utilities/appearance.css'; import sizeStyles from '../../styles/utilities/size.css'; import styles from './textarea.css'; @@ -44,7 +43,7 @@ import styles from './textarea.css'; */ @customElement('wa-textarea') export default class WaTextarea extends WebAwesomeFormAssociatedElement { - static shadowStyle = [formControlStyles, appearanceStyles, sizeStyles, nativeStyles, styles]; + static shadowStyle = [formControlStyles, appearanceStyles, sizeStyles, styles]; static get validators() { return [...super.validators, MirrorValidator()]; @@ -88,7 +87,7 @@ export default class WaTextarea extends WebAwesomeFormAssociatedElement { @property({ attribute: 'value', reflect: true }) defaultValue: string = this.getAttribute('value') ?? ''; /** The textarea's size. */ - @property({ reflect: true, initial: 'medium' }) size: 'small' | 'medium' | 'large' | 'inherit' = 'inherit'; + @property({ reflect: true }) size: 'small' | 'medium' | 'large' = 'medium'; /** The textarea's visual appearance. */ @property({ reflect: true }) appearance: 'filled' | 'outlined' = 'outlined'; @@ -348,7 +347,7 @@ export default class WaTextarea extends WebAwesomeFormAssociatedElement { ${this.label} -