The taste of oranges is determined mainly by the relative ratios of sugars and acids, whereas
orange aroma derives from volatile organic compounds, including alcohols, aldehydes, ketones,
@@ -160,6 +160,45 @@ A header can be multiline.
```
+## Exclusive
+
+Sometimes, it might be required to show only one expanded slot of the accordion at a time. For such instances, we have a feature called 'exclusive'. This allows the accordion to open only one and a time and closes the open slot when a new slot is clicked upon.
+
+This field takes in a Boolean value, which by default is false.
+
+```html preview-story
+
+
+ This collapsible closes all other ones
+
+
+
+ The taste of oranges is determined mainly by the relative ratios of sugars and acids, whereas
+ orange aroma derives from volatile organic compounds, including alcohols, aldehydes, ketones,
+ terpenes, and esters. Bitter limonoid compounds, such as limonin, decrease gradually during
+ development, whereas volatile aroma compounds tend to peak in mid– to late–season development.
+ Taste quality tends to improve later in harvests when there is a higher sugar/acid ratio with
+ less bitterness. As a citrus fruit, the orange is acidic, with pH levels ranging from 2.9 to
+ 4.0.
+
+
+
+ Sensory qualities vary according to genetic background, environmental conditions during
+ development, ripeness at harvest, postharvest conditions, and storage duration.
+
+
+
+ Same for this collapsible
+
+
+ Orange flesh is 87% water, 12% carbohydrates, 1% protein, and contains negligible fat (table).
+ In a 100 gram reference amount, orange flesh provides 47 calories, and is a rich source of
+ vitamin C, providing 64% of the Daily Value. No other micronutrients are present in significant
+ amounts (table).
+
+
+```
+
## Distribute New Elements
Below, we demonstrate how you could dynamically add a new invoker + content.
diff --git a/docs/components/checkbox-group/use-cases.md b/docs/components/checkbox-group/use-cases.md
index 22d989f44..a3dc43407 100644
--- a/docs/components/checkbox-group/use-cases.md
+++ b/docs/components/checkbox-group/use-cases.md
@@ -31,10 +31,7 @@ Our recommendation would be to set the `name` attribute only on the `lion-checkb
## Example
```html
-
+
@@ -49,7 +46,7 @@ You can pre-select options by targeting the `modelValue` object of the option an
-
+
```
@@ -61,7 +58,7 @@ You can disable the entire group by setting the `disabled` attribute on the `
-
+
```
@@ -145,25 +142,13 @@ A `checkbox-indeterminate`'s value is neither true nor false, but is instead ind
```html preview-story
-
-
-
+
+
+
-
-
+
+
```
@@ -173,24 +158,12 @@ The `checkbox-indeterminate` can have another `checkbox-indeterminate` as a chil
```html preview-story
-
-
-
-
-
-
+
+
+
+
+
+
@@ -201,24 +174,12 @@ You can also use `mixed-state` attribute so your indeterminate checkbox toggles
```html preview-story
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/docs/components/fieldset/use-cases.md b/docs/components/fieldset/use-cases.md
index 05b06e40a..7819a7b2d 100644
--- a/docs/components/fieldset/use-cases.md
+++ b/docs/components/fieldset/use-cases.md
@@ -41,7 +41,12 @@ export const disabled = () => {
-
+
@@ -70,7 +75,9 @@ export const nestingFieldsets = () => html`
Log everything to Action Logger
- console.log(ev.target.parentElement.formElements.nameGroup.modelValue)}">
+ console.log(ev.target.parentElement.formElements.nameGroup.modelValue)}"
+ >
Log only Name fieldset to Action Logger
diff --git a/docs/components/form/use-cases.md b/docs/components/form/use-cases.md
index c466de5ff..830046769 100644
--- a/docs/components/form/use-cases.md
+++ b/docs/components/form/use-cases.md
@@ -55,7 +55,8 @@ export const formSubmit = () => {
Submit
ev.currentTarget.parentElement.parentElement.parentElement.resetGroup()}"
+ @click="${ev =>
+ ev.currentTarget.parentElement.parentElement.parentElement.resetGroup()}"
>
Reset
diff --git a/docs/components/input-amount/use-cases.md b/docs/components/input-amount/use-cases.md
index 28cae1a5f..8fd96c7f4 100644
--- a/docs/components/input-amount/use-cases.md
+++ b/docs/components/input-amount/use-cases.md
@@ -96,10 +96,10 @@ export const noDecimals = () => html`
diff --git a/docs/components/input-date/use-cases.md b/docs/components/input-date/use-cases.md
index e6ecee6d9..7f51989d0 100644
--- a/docs/components/input-date/use-cases.md
+++ b/docs/components/input-date/use-cases.md
@@ -58,7 +58,9 @@ export const withMinimumAndMaximumDate = () => {
Enter a date between ${formatDate(new Date('2018/05/24'))} and ${formatDate(
diff --git a/docs/components/pagination/use-cases.md b/docs/components/pagination/use-cases.md
index ed6015a10..84061b6ac 100644
--- a/docs/components/pagination/use-cases.md
+++ b/docs/components/pagination/use-cases.md
@@ -58,7 +58,9 @@ export const methods = ({ shadowRoot }) => {
shadowRoot.getElementById('pagination-method').next()}">Next
-
shadowRoot.getElementById('pagination-method').first()}">First
+
shadowRoot.getElementById('pagination-method').first()}">
+ First
+
shadowRoot.getElementById('pagination-method').last()}">Last
diff --git a/docs/components/steps/overview.md b/docs/components/steps/overview.md
index aa403c5b7..fed19f6da 100644
--- a/docs/components/steps/overview.md
+++ b/docs/components/steps/overview.md
@@ -13,14 +13,18 @@ export const main = () => html`
Step 1
- ev.target.parentElement.controller.next()}">Next
+ ev.target.parentElement.controller.next()}">
+ Next
+
ev.target.parentElement.controller.previous()}">
Previous
Step 2
- ev.target.parentElement.controller.next()}">Next
+ ev.target.parentElement.controller.next()}">
+ Next
+
ev.target.parentElement.controller.previous()}">
diff --git a/docs/components/steps/use-cases.md b/docs/components/steps/use-cases.md
index d9733e57d..756bc924d 100644
--- a/docs/components/steps/use-cases.md
+++ b/docs/components/steps/use-cases.md
@@ -12,7 +12,9 @@ export const main = () => html`
Welcome
previous
- ev.target.parentElement.controller.next()}">Next
+ ev.target.parentElement.controller.next()}">
+ Next
+
Are you single?
@@ -46,7 +48,9 @@ export const main = () => html`
Previous
- ev.target.parentElement.controller.next()}">Next
+ ev.target.parentElement.controller.next()}">
+ Next
+
You are NOT single.
@@ -54,7 +58,9 @@ export const main = () => html`
Previous
- ev.target.parentElement.controller.next()}">Next
+ ev.target.parentElement.controller.next()}">
+ Next
+
Finish
diff --git a/docs/fundamentals/systems/form/use-cases.md b/docs/fundamentals/systems/form/use-cases.md
index e63264599..716e26094 100644
--- a/docs/fundamentals/systems/form/use-cases.md
+++ b/docs/fundamentals/systems/form/use-cases.md
@@ -162,7 +162,8 @@ export const main = () => {
Submit
ev.currentTarget.parentElement.parentElement.parentElement.resetGroup()}"
+ @click="${ev =>
+ ev.currentTarget.parentElement.parentElement.parentElement.resetGroup()}"
>Reset
diff --git a/docs/fundamentals/systems/localize/use-cases.md b/docs/fundamentals/systems/localize/use-cases.md
index 0eac59ddb..19a5e23ac 100644
--- a/docs/fundamentals/systems/localize/use-cases.md
+++ b/docs/fundamentals/systems/localize/use-cases.md
@@ -309,7 +309,9 @@ localize.setupNamespaceLoader('my-hello-component', async locale => {
// for all components which have a prefix in their names
localize.setupNamespaceLoader(/my-.+/, async (locale, namespace) => {
- const response = await fetch(`https://api.example.com/?namespace="${namespace}&locale=${locale}"`);
+ const response = await fetch(
+ `https://api.example.com/?namespace="${namespace}&locale=${locale}"`,
+ );
return response.json();
});
```
diff --git a/docs/fundamentals/systems/overlays/use-cases.md b/docs/fundamentals/systems/overlays/use-cases.md
index 520c3ea6c..647d61c3f 100644
--- a/docs/fundamentals/systems/overlays/use-cases.md
+++ b/docs/fundamentals/systems/overlays/use-cases.md
@@ -29,7 +29,9 @@ export const main = () => html`
Click me to open the overlay!
Hello! You can close this notification here:
- e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}">
+ e.target.dispatchEvent(new Event('close-overlay', { bubbles: true }))}"
+ >
⨯
diff --git a/package-lock.json b/package-lock.json
index ceb80f8da..900a94b3f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -159,6 +159,47 @@
"url": "https://opencollective.com/11ty"
}
},
+ "node_modules/@11ty/eleventy-img/node_modules/color": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+ "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.3",
+ "color-string": "^1.6.0"
+ }
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/decompress-response": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-response": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/@11ty/eleventy-img/node_modules/fs-extra": {
"version": "9.1.0",
"dev": true,
@@ -184,6 +225,110 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/@11ty/eleventy-img/node_modules/mimic-response": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/node-abi": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz",
+ "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^5.4.1"
+ }
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/node-abi/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/node-addon-api": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
+ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/prebuild-install": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz",
+ "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-libc": "^1.0.3",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^2.21.0",
+ "npmlog": "^4.0.1",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^3.0.3",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ },
+ "bin": {
+ "prebuild-install": "bin.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/sharp": {
+ "version": "0.28.3",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz",
+ "integrity": "sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "color": "^3.1.3",
+ "detect-libc": "^1.0.3",
+ "node-addon-api": "^3.2.0",
+ "prebuild-install": "^6.1.2",
+ "semver": "^7.3.5",
+ "simple-get": "^3.1.0",
+ "tar-fs": "^2.1.1",
+ "tunnel-agent": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@11ty/eleventy-img/node_modules/simple-get": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
+ "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "decompress-response": "^4.2.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
"node_modules/@11ty/eleventy-img/node_modules/universalify": {
"version": "2.0.0",
"dev": true,
@@ -7235,6 +7380,13 @@
"node": ">= 8"
}
},
+ "node_modules/aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/archiver": {
"version": "7.0.1",
"dev": true,
@@ -7419,6 +7571,18 @@
"streamx": "^2.15.0"
}
},
+ "node_modules/are-we-there-yet": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
+ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+ "deprecated": "This package is no longer supported.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
"node_modules/argparse": {
"version": "1.0.10",
"dev": true,
@@ -8826,16 +8990,14 @@
"type-is": "^1.6.16"
}
},
- "node_modules/color": {
- "version": "4.2.3",
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
"dev": true,
"license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1",
- "color-string": "^1.9.0"
- },
"engines": {
- "node": ">=12.5.0"
+ "node": ">=0.10.0"
}
},
"node_modules/color-convert": {
@@ -9167,6 +9329,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/constantinople": {
"version": "3.1.2",
"dev": true,
@@ -11657,6 +11826,75 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
+ "deprecated": "This package is no longer supported.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "node_modules/gauge/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/geckodriver": {
"version": "4.4.0",
"dev": true,
@@ -12251,6 +12489,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/hash-string": {
"version": "1.0.0",
"dev": true,
@@ -16339,22 +16584,6 @@
"tslib": "^2.0.3"
}
},
- "node_modules/node-abi": {
- "version": "3.33.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.3.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-addon-api": {
- "version": "4.3.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/node-domexception": {
"version": "1.0.0",
"dev": true,
@@ -16644,6 +16873,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "deprecated": "This package is no longer supported.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
"node_modules/nth-check": {
"version": "2.1.1",
"license": "BSD-2-Clause",
@@ -16654,6 +16897,16 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/nunjucks": {
"version": "3.2.3",
"dev": true,
@@ -17661,39 +17914,6 @@
"hasInstallScript": true,
"license": "MIT"
},
- "node_modules/prebuild-install": {
- "version": "7.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "detect-libc": "^2.0.0",
- "expand-template": "^2.0.3",
- "github-from-package": "0.0.0",
- "minimist": "^1.2.3",
- "mkdirp-classic": "^0.5.3",
- "napi-build-utils": "^1.0.1",
- "node-abi": "^3.3.0",
- "pump": "^3.0.0",
- "rc": "^1.2.7",
- "simple-get": "^4.0.0",
- "tar-fs": "^2.0.0",
- "tunnel-agent": "^0.6.0"
- },
- "bin": {
- "prebuild-install": "bin.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/prebuild-install/node_modules/detect-libc": {
- "version": "2.0.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/preferred-pm": {
"version": "3.0.3",
"dev": true,
@@ -19962,28 +20182,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/sharp": {
- "version": "0.29.3",
- "dev": true,
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "color": "^4.0.1",
- "detect-libc": "^1.0.3",
- "node-addon-api": "^4.2.0",
- "prebuild-install": "^7.0.0",
- "semver": "^7.3.5",
- "simple-get": "^4.0.0",
- "tar-fs": "^2.1.1",
- "tunnel-agent": "^0.6.0"
- },
- "engines": {
- "node": ">=12.13.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
"node_modules/shebang-command": {
"version": "2.0.0",
"dev": true,
@@ -20066,30 +20264,6 @@
],
"license": "MIT"
},
- "node_modules/simple-get": {
- "version": "4.0.1",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "decompress-response": "^6.0.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
"node_modules/simple-swizzle": {
"version": "0.2.2",
"dev": true,
@@ -22152,6 +22326,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
"node_modules/window-size": {
"version": "0.1.0",
"dev": true,
@@ -23008,111 +23192,6 @@
"node": ">=18.0.0"
}
},
- "packages-node/providence-analytics/node_modules/@babel/compat-data": {
- "version": "7.23.2",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/core": {
- "version": "7.23.2",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-module-transforms": "^7.23.0",
- "@babel/helpers": "^7.23.2",
- "@babel/parser": "^7.23.0",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "peer": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.15",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.15",
- "browserslist": "^4.21.9",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
- "version": "5.1.1",
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "peer": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/helper-module-imports": {
- "version": "7.22.15",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/helper-module-transforms": {
- "version": "7.23.0",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
"packages-node/providence-analytics/node_modules/@babel/helper-plugin-utils": {
"version": "7.24.5",
"license": "MIT",
@@ -23120,38 +23199,6 @@
"node": ">=6.9.0"
}
},
- "packages-node/providence-analytics/node_modules/@babel/helper-simple-access": {
- "version": "7.22.5",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/helper-validator-option": {
- "version": "7.22.15",
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "packages-node/providence-analytics/node_modules/@babel/helpers": {
- "version": "7.23.2",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"packages-node/providence-analytics/node_modules/@babel/plugin-syntax-import-assertions": {
"version": "7.24.1",
"license": "MIT",
@@ -23165,19 +23212,6 @@
"@babel/core": "^7.0.0-0"
}
},
- "packages-node/providence-analytics/node_modules/@babel/template": {
- "version": "7.22.15",
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"packages-node/providence-analytics/node_modules/@lit/reactive-element": {
"version": "2.0.4",
"dev": true,
@@ -23520,56 +23554,6 @@
"dev": true,
"license": "MIT"
},
- "packages-node/providence-analytics/node_modules/browserslist": {
- "version": "4.22.1",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.13"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "packages-node/providence-analytics/node_modules/caniuse-lite": {
- "version": "1.0.30001561",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0",
- "peer": true
- },
"packages-node/providence-analytics/node_modules/command-line-args": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
@@ -23618,16 +23602,6 @@
"node": ">=12.20.0"
}
},
- "packages-node/providence-analytics/node_modules/convert-source-map": {
- "version": "2.0.0",
- "license": "MIT",
- "peer": true
- },
- "packages-node/providence-analytics/node_modules/electron-to-chromium": {
- "version": "1.4.578",
- "license": "ISC",
- "peer": true
- },
"packages-node/providence-analytics/node_modules/es-module-lexer": {
"version": "1.5.2",
"dev": true,
@@ -23676,11 +23650,6 @@
"node": ">=16.14"
}
},
- "packages-node/providence-analytics/node_modules/node-releases": {
- "version": "2.0.13",
- "license": "MIT",
- "peer": true
- },
"packages-node/providence-analytics/node_modules/rollup": {
"version": "4.17.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz",
@@ -23766,35 +23735,6 @@
"node": ">=12.17"
}
},
- "packages-node/providence-analytics/node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
"packages-node/providence-analytics/node_modules/webidl-conversions": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
@@ -23826,11 +23766,6 @@
"node": ">=12.17"
}
},
- "packages-node/providence-analytics/node_modules/yallist": {
- "version": "3.1.1",
- "license": "ISC",
- "peer": true
- },
"packages-node/publish-docs": {
"version": "0.2.1",
"license": "MIT",
diff --git a/packages/ui/components/accordion/src/LionAccordion.js b/packages/ui/components/accordion/src/LionAccordion.js
index abec481f5..c7c19979d 100644
--- a/packages/ui/components/accordion/src/LionAccordion.js
+++ b/packages/ui/components/accordion/src/LionAccordion.js
@@ -25,15 +25,15 @@ export class LionAccordion extends LitElement {
/**
* index number of the focused accordion
*/
- focusedIndex: {
- type: Number,
- },
+ focusedIndex: { type: Number },
/**
* array of indices of the expanded accordions
*/
- expanded: {
- type: Array,
- },
+ expanded: { type: Array },
+ /**
+ * exclusive property allows only one accordion slot to be open at a time
+ */
+ exclusive: { type: Boolean },
};
}
@@ -101,6 +101,11 @@ export class LionAccordion extends LitElement {
super();
this.styles = {};
+ /**
+ * @type {boolean}
+ */
+ this.exclusive = false;
+
/**
* @type {StoreEntry[]}
* @private
@@ -437,20 +442,21 @@ export class LionAccordion extends LitElement {
}
/**
- * @param {number} value
+ * @param {number} indexClicked
* @private
*/
- __toggleExpanded(value) {
- const expanded = [...this.expanded];
- const index = expanded.indexOf(value);
+ __toggleExpanded(indexClicked) {
+ const indexFound = this.expanded.indexOf(indexClicked);
+ const expandedNewValues = this.exclusive ? [] : [...this.expanded];
- if (index === -1) {
- expanded.push(value);
- } else {
- expanded.splice(index, 1);
+ if (indexFound === -1) {
+ expandedNewValues.push(indexClicked);
+ } else if (expandedNewValues.includes(indexFound)) {
+ expandedNewValues.splice(indexFound, 1);
}
- this.expanded = expanded;
+ // trigger a render
+ this.expanded = expandedNewValues;
}
/**
diff --git a/packages/ui/components/accordion/test/lion-accordion.test.js b/packages/ui/components/accordion/test/lion-accordion.test.js
index ce785ca72..c3489f7d9 100644
--- a/packages/ui/components/accordion/test/lion-accordion.test.js
+++ b/packages/ui/components/accordion/test/lion-accordion.test.js
@@ -33,14 +33,14 @@ function getAccordionChildren(el) {
}
/**
- * @param {Element} el
+ * @param {LionAccordion} el
*/
function getInvokers(el) {
return getAccordionChildren(el).filter(child => child.classList.contains('invoker'));
}
/**
- * @param {Element} el
+ * @param {LionAccordion} el
*/
function getContents(el) {
return getAccordionChildren(el).filter(child => child.classList.contains('content'));
@@ -112,6 +112,51 @@ describe('', () => {
expect(invokers[1].firstElementChild).to.have.attribute('expanded');
});
+ it('supports [exclusive] attribute, allowing one collapsible to be open at a time', async () => {
+ const el = /** @type {LionAccordion} */ (
+ await fixture(html`
+
+ invoker 1
+ content 1
+ invoker 2
+ content 2
+ invoker 3
+ content 3
+
+ `)
+ );
+
+ const invokerButtons = Array.from(getInvokers(el)).map(
+ invokerHeadingEl => /** @type {HTMLButtonElement} */ (invokerHeadingEl.firstElementChild),
+ );
+
+ // We open the first... (nothing different from not [exclusive] so far)
+ invokerButtons[0].click();
+ expect(invokerButtons[0]).to.have.attribute('expanded');
+ expect(invokerButtons[1]).to.not.have.attribute('expanded');
+ expect(invokerButtons[2]).to.not.have.attribute('expanded');
+
+ // We click the second...
+ invokerButtons[1].click();
+ expect(invokerButtons[0]).to.not.have.attribute('expanded');
+ expect(invokerButtons[1]).to.have.attribute('expanded');
+ expect(invokerButtons[2]).to.not.have.attribute('expanded');
+
+ // We click the third...
+ invokerButtons[2].click();
+ expect(invokerButtons[0]).to.not.have.attribute('expanded');
+ expect(invokerButtons[1]).to.not.have.attribute('expanded');
+ expect(invokerButtons[2]).to.have.attribute('expanded');
+
+ el.exclusive = false;
+
+ // We open the first... (behaving as default (not [exclusive]) again)
+ invokerButtons[0].click();
+ expect(invokerButtons[0]).to.have.attribute('expanded');
+ expect(invokerButtons[1]).to.not.have.attribute('expanded');
+ expect(invokerButtons[2]).to.have.attribute('expanded');
+ });
+
it('sends event "expanded-changed" for every expanded state change', async () => {
const el = /** @type {LionAccordion} */ (await fixture(basicAccordion));
const spy = sinon.spy();
@@ -467,14 +512,16 @@ describe('', () => {
describe('Invokers', () => {
it('links ids of content items to invoker first child via [aria-controls]', async () => {
- const el = await fixture(html`
-
- invoker 1
- content 1
- invoker 2
- content 2
-
- `);
+ const el = /** @type {LionAccordion} */ (
+ await fixture(html`
+
+ invoker 1
+ content 1
+ invoker 2
+ content 2
+
+ `)
+ );
const invokers = getInvokers(el);
const contents = getContents(el);
expect(invokers[0].firstElementChild?.getAttribute('aria-controls')).to.equal(
@@ -486,12 +533,14 @@ describe('', () => {
});
it('adds aria-expanded="false" to invoker when its content is not expanded', async () => {
- const el = await fixture(html`
-
- invoker
- content
-
- `);
+ const el = /** @type {LionAccordion} */ (
+ await fixture(html`
+
+ invoker
+ content
+
+ `)
+ );
expect(Array.from(getInvokers(el))[0]?.firstElementChild).to.have.attribute(
'aria-expanded',
'false',
@@ -517,14 +566,16 @@ describe('', () => {
describe('Contents', () => {
it('adds aria-labelledby referring to invoker ids', async () => {
- const el = await fixture(html`
-
- invoker 1
- content 1
- invoker 2
- content 2
-
- `);
+ const el = /** @type {LionAccordion} */ (
+ await fixture(html`
+
+ invoker 1
+ content 1
+ invoker 2
+ content 2
+
+ `)
+ );
const contents = getContents(el);
const invokers = getInvokers(el);
expect(contents[0]).to.have.attribute('aria-labelledby', invokers[0].firstElementChild?.id);