@rcarls/rc-accordion 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -184,13 +184,11 @@
|
|
|
184
184
|
"attributes": [
|
|
185
185
|
{
|
|
186
186
|
"name": "multiple",
|
|
187
|
-
"type": {
|
|
188
|
-
"text": "boolean"
|
|
189
|
-
},
|
|
190
187
|
"description": "Allows more than one panel open at a time."
|
|
191
188
|
},
|
|
192
189
|
{
|
|
193
|
-
"name": "name"
|
|
190
|
+
"name": "name",
|
|
191
|
+
"description": "Group name mirrored onto each managed native `<details>` element's own `name` attribute (native details name-grouping), so long as `multiple` is not set. Child `<details>` elements that already declare their own `name` are left alone."
|
|
194
192
|
}
|
|
195
193
|
],
|
|
196
194
|
"superclass": {
|
package/dist/rc-accordion.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rc-accordion.js","sources":["../src/rc-accordion.ts"],"sourcesContent":["const NAVIGATION_KEYS = ['ArrowDown', 'ArrowUp', 'Home', 'End'] as const;\n\ntype NavigationKey = (typeof NAVIGATION_KEYS)[number];\n\ntype RCDisclosureElement = HTMLElement & {\n open: boolean;\n};\n\nfunction isNavigationKey(key: string): key is NavigationKey {\n return NAVIGATION_KEYS.includes(key as NavigationKey);\n}\n\nfunction isRCDisclosureElement($el: Element | null): $el is RCDisclosureElement {\n return $el?.localName === 'rc-disclosure';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rc-accordion': RCAccordion;\n }\n}\n\n/**\n * Accordion coordinator for child native <details> panels with single- or multiple-open\n * behavior, following the WAI-ARIA Accordion pattern.\n *\n * Supports native details and rc-disclosure wrappers.\n *\n * @see {@link https://richardcarls.github.io/rc-webcomponents/components/rc-accordion rc-accordion docs}\n * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/accordion/ WAI-ARIA Accordion pattern}\n *\n * @attr {boolean} multiple - Allows more than one panel open at a time.\n */\nexport class RCAccordion extends HTMLElement {\n private _$managedGroupNames = new Map<HTMLDetailsElement, string>();\n\n private _childrenObserver = new MutationObserver((records) => this._onChildrenChanged(records));\n\n static get observedAttributes(): string[] {\n return ['multiple', 'name'];\n }\n\n /** Allows more than one panel open at a time. */\n get multiple(): boolean {\n return this.hasAttribute('multiple');\n }\n\n set multiple(value: boolean) {\n this.toggleAttribute('multiple', value);\n }\n\n connectedCallback(): void {\n this._childrenObserver.observe(this, { childList: true, subtree: true });\n\n this.addEventListener('toggle', this._onDetailsToggle, true);\n this.addEventListener('keydown', this._onKeydown);\n\n this._syncNativeGroupNames();\n this._enforceSingleOpen();\n }\n\n disconnectedCallback(): void {\n this._childrenObserver.disconnect();\n\n this.removeEventListener('toggle', this._onDetailsToggle, true);\n this.removeEventListener('keydown', this._onKeydown);\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (oldValue === newValue) {\n return;\n }\n\n if (name === 'name' || name === 'multiple') {\n this._syncNativeGroupNames();\n }\n\n if (name === 'multiple' && !this.multiple) {\n this._enforceSingleOpen();\n }\n }\n\n private _$details(): HTMLDetailsElement[] {\n return Array.from(\n this.querySelectorAll<HTMLDetailsElement>(\n ':scope > details, :scope > rc-disclosure > details',\n ),\n );\n }\n\n private _$summaries(): HTMLElement[] {\n return this._$details()\n .map(($details) => $details.querySelector<HTMLElement>(':scope > summary'))\n .filter(($summary): $summary is HTMLElement => $summary !== null);\n }\n\n private _syncNativeGroupNames(): void {\n const groupName = this.getAttribute('name');\n const $details = this._$details();\n const $currentDetails = new Set($details);\n\n for (const [$el, managedName] of this._$managedGroupNames) {\n const shouldReleaseName =\n !$currentDetails.has($el) ||\n this.multiple ||\n !groupName ||\n managedName !== groupName ||\n $el.getAttribute('name') !== managedName;\n\n if (!shouldReleaseName) {\n continue;\n }\n\n if ($el.getAttribute('name') === managedName) {\n $el.removeAttribute('name');\n }\n\n this._$managedGroupNames.delete($el);\n }\n\n if (this.multiple || !groupName) {\n return;\n }\n\n for (const $el of $details) {\n if ($el.hasAttribute('name') && !this._$managedGroupNames.has($el)) {\n continue;\n }\n\n $el.setAttribute('name', groupName);\n this._$managedGroupNames.set($el, groupName);\n }\n }\n\n private _onKeydown = (e: KeyboardEvent): void => {\n if (e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n\n if (!isNavigationKey(e.key)) {\n return;\n }\n\n const $summaries = this._$summaries();\n\n if ($summaries.length === 0) {\n return;\n }\n\n const $active = document.activeElement as HTMLElement | null;\n const index = $active ? $summaries.indexOf($active) : -1;\n\n if (index === -1) {\n return;\n }\n\n e.preventDefault();\n\n if (e.key === 'Home') {\n const $firstSummary = $summaries.at(0);\n\n if (!$firstSummary) {\n return;\n }\n\n $firstSummary.focus();\n\n return;\n }\n\n if (e.key === 'End') {\n const $lastSummary = $summaries.at(-1);\n\n if (!$lastSummary) {\n return;\n }\n\n $lastSummary.focus();\n\n return;\n }\n\n const next =\n e.key === 'ArrowDown'\n ? (index + 1) % $summaries.length\n : (index - 1 + $summaries.length) % $summaries.length;\n\n const $nextSummary = $summaries.at(next);\n\n if (!$nextSummary) {\n return;\n }\n\n $nextSummary.focus();\n };\n\n private _onDetailsToggle = (e: Event): void => {\n const $opened = e.target;\n\n if (!($opened instanceof HTMLDetailsElement)) {\n return;\n }\n\n if (this.multiple) {\n return;\n }\n\n if (!$opened.open) {\n return;\n }\n\n this._enforceSingleOpen($opened);\n };\n\n private _setDetailsOpen($target: HTMLDetailsElement, open: boolean): void {\n const $parent = $target.parentElement;\n\n if (isRCDisclosureElement($parent)) {\n $parent.open = open;\n\n return;\n }\n\n $target.open = open;\n }\n\n private _onChildrenChanged(records: MutationRecord[]): void {\n this._syncNativeGroupNames();\n\n if (this.multiple) {\n return;\n }\n\n this._enforceSingleOpen(this._findAddedOpenDetails(records));\n }\n\n private _findAddedOpenDetails(records: MutationRecord[]): HTMLDetailsElement | undefined {\n const $details = this._$details();\n\n const $added = $details.filter(($el) =>\n records.some((record) =>\n Array.from(record.addedNodes).some(\n ($node) => $node === $el || ($node instanceof Element && $node.contains($el)),\n ),\n ),\n );\n\n for (let i = $added.length - 1; i >= 0; i -= 1) {\n const $el = $added.at(i);\n\n if (!$el) {\n continue;\n }\n\n if ($el.open) {\n return $el;\n }\n }\n\n return undefined;\n }\n\n private _enforceSingleOpen($target?: HTMLDetailsElement): void {\n const $details = this._$details();\n\n if ($target && !$details.includes($target)) {\n return;\n }\n\n const $openDetails = $details.filter(($el) => $el.open);\n\n if ($openDetails.length <= 1) {\n return;\n }\n\n const $keepOpen = $target ?? $openDetails.at(0);\n\n if (!$keepOpen) {\n return;\n }\n\n for (const $el of $openDetails) {\n if ($el !== $keepOpen) {\n this._setDetailsOpen($el, false);\n }\n }\n }\n}\n\nexport default RCAccordion;\n"],"names":["NAVIGATION_KEYS","isNavigationKey","key","isRCDisclosureElement","$el","RCAccordion","records","$summaries","$active","index","$firstSummary","$lastSummary","next","$nextSummary","$opened","value","name","oldValue","newValue","$details","$summary","groupName","$currentDetails","managedName","$target","open","$parent","$added","record","$node","i","$openDetails","$keepOpen"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rc-accordion.js","sources":["../src/rc-accordion.ts"],"sourcesContent":["const NAVIGATION_KEYS = ['ArrowDown', 'ArrowUp', 'Home', 'End'] as const;\n\ntype NavigationKey = (typeof NAVIGATION_KEYS)[number];\n\ntype RCDisclosureElement = HTMLElement & {\n open: boolean;\n};\n\nfunction isNavigationKey(key: string): key is NavigationKey {\n return NAVIGATION_KEYS.includes(key as NavigationKey);\n}\n\nfunction isRCDisclosureElement($el: Element | null): $el is RCDisclosureElement {\n return $el?.localName === 'rc-disclosure';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rc-accordion': RCAccordion;\n }\n}\n\n/**\n * Accordion coordinator for child native <details> panels with single- or multiple-open\n * behavior, following the WAI-ARIA Accordion pattern.\n *\n * Supports native details and rc-disclosure wrappers.\n *\n * @see {@link https://richardcarls.github.io/rc-webcomponents/components/rc-accordion rc-accordion docs}\n * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/accordion/ WAI-ARIA Accordion pattern}\n *\n * @attr multiple - Allows more than one panel open at a time.\n * @attr name - Group name mirrored onto each managed native `<details>` element's own\n * `name` attribute (native details name-grouping), so long as `multiple` is not set.\n * Child `<details>` elements that already declare their own `name` are left alone.\n */\nexport class RCAccordion extends HTMLElement {\n private _$managedGroupNames = new Map<HTMLDetailsElement, string>();\n\n private _childrenObserver = new MutationObserver((records) => this._onChildrenChanged(records));\n\n static get observedAttributes(): string[] {\n return ['multiple', 'name'];\n }\n\n /** Allows more than one panel open at a time. */\n get multiple(): boolean {\n return this.hasAttribute('multiple');\n }\n\n set multiple(value: boolean) {\n this.toggleAttribute('multiple', value);\n }\n\n connectedCallback(): void {\n this._childrenObserver.observe(this, { childList: true, subtree: true });\n\n this.addEventListener('toggle', this._onDetailsToggle, true);\n this.addEventListener('keydown', this._onKeydown);\n\n this._syncNativeGroupNames();\n this._enforceSingleOpen();\n }\n\n disconnectedCallback(): void {\n this._childrenObserver.disconnect();\n\n this.removeEventListener('toggle', this._onDetailsToggle, true);\n this.removeEventListener('keydown', this._onKeydown);\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (oldValue === newValue) {\n return;\n }\n\n if (name === 'name' || name === 'multiple') {\n this._syncNativeGroupNames();\n }\n\n if (name === 'multiple' && !this.multiple) {\n this._enforceSingleOpen();\n }\n }\n\n private _$details(): HTMLDetailsElement[] {\n return Array.from(\n this.querySelectorAll<HTMLDetailsElement>(\n ':scope > details, :scope > rc-disclosure > details',\n ),\n );\n }\n\n private _$summaries(): HTMLElement[] {\n return this._$details()\n .map(($details) => $details.querySelector<HTMLElement>(':scope > summary'))\n .filter(($summary): $summary is HTMLElement => $summary !== null);\n }\n\n private _syncNativeGroupNames(): void {\n const groupName = this.getAttribute('name');\n const $details = this._$details();\n const $currentDetails = new Set($details);\n\n for (const [$el, managedName] of this._$managedGroupNames) {\n const shouldReleaseName =\n !$currentDetails.has($el) ||\n this.multiple ||\n !groupName ||\n managedName !== groupName ||\n $el.getAttribute('name') !== managedName;\n\n if (!shouldReleaseName) {\n continue;\n }\n\n if ($el.getAttribute('name') === managedName) {\n $el.removeAttribute('name');\n }\n\n this._$managedGroupNames.delete($el);\n }\n\n if (this.multiple || !groupName) {\n return;\n }\n\n for (const $el of $details) {\n if ($el.hasAttribute('name') && !this._$managedGroupNames.has($el)) {\n continue;\n }\n\n $el.setAttribute('name', groupName);\n this._$managedGroupNames.set($el, groupName);\n }\n }\n\n private _onKeydown = (e: KeyboardEvent): void => {\n if (e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n\n if (!isNavigationKey(e.key)) {\n return;\n }\n\n const $summaries = this._$summaries();\n\n if ($summaries.length === 0) {\n return;\n }\n\n const $active = document.activeElement as HTMLElement | null;\n const index = $active ? $summaries.indexOf($active) : -1;\n\n if (index === -1) {\n return;\n }\n\n e.preventDefault();\n\n if (e.key === 'Home') {\n const $firstSummary = $summaries.at(0);\n\n if (!$firstSummary) {\n return;\n }\n\n $firstSummary.focus();\n\n return;\n }\n\n if (e.key === 'End') {\n const $lastSummary = $summaries.at(-1);\n\n if (!$lastSummary) {\n return;\n }\n\n $lastSummary.focus();\n\n return;\n }\n\n const next =\n e.key === 'ArrowDown'\n ? (index + 1) % $summaries.length\n : (index - 1 + $summaries.length) % $summaries.length;\n\n const $nextSummary = $summaries.at(next);\n\n if (!$nextSummary) {\n return;\n }\n\n $nextSummary.focus();\n };\n\n private _onDetailsToggle = (e: Event): void => {\n const $opened = e.target;\n\n if (!($opened instanceof HTMLDetailsElement)) {\n return;\n }\n\n if (this.multiple) {\n return;\n }\n\n if (!$opened.open) {\n return;\n }\n\n this._enforceSingleOpen($opened);\n };\n\n private _setDetailsOpen($target: HTMLDetailsElement, open: boolean): void {\n const $parent = $target.parentElement;\n\n if (isRCDisclosureElement($parent)) {\n $parent.open = open;\n\n return;\n }\n\n $target.open = open;\n }\n\n private _onChildrenChanged(records: MutationRecord[]): void {\n this._syncNativeGroupNames();\n\n if (this.multiple) {\n return;\n }\n\n this._enforceSingleOpen(this._findAddedOpenDetails(records));\n }\n\n private _findAddedOpenDetails(records: MutationRecord[]): HTMLDetailsElement | undefined {\n const $details = this._$details();\n\n const $added = $details.filter(($el) =>\n records.some((record) =>\n Array.from(record.addedNodes).some(\n ($node) => $node === $el || ($node instanceof Element && $node.contains($el)),\n ),\n ),\n );\n\n for (let i = $added.length - 1; i >= 0; i -= 1) {\n const $el = $added.at(i);\n\n if (!$el) {\n continue;\n }\n\n if ($el.open) {\n return $el;\n }\n }\n\n return undefined;\n }\n\n private _enforceSingleOpen($target?: HTMLDetailsElement): void {\n const $details = this._$details();\n\n if ($target && !$details.includes($target)) {\n return;\n }\n\n const $openDetails = $details.filter(($el) => $el.open);\n\n if ($openDetails.length <= 1) {\n return;\n }\n\n const $keepOpen = $target ?? $openDetails.at(0);\n\n if (!$keepOpen) {\n return;\n }\n\n for (const $el of $openDetails) {\n if ($el !== $keepOpen) {\n this._setDetailsOpen($el, false);\n }\n }\n }\n}\n\nexport default RCAccordion;\n"],"names":["NAVIGATION_KEYS","isNavigationKey","key","isRCDisclosureElement","$el","RCAccordion","records","$summaries","$active","index","$firstSummary","$lastSummary","next","$nextSummary","$opened","value","name","oldValue","newValue","$details","$summary","groupName","$currentDetails","managedName","$target","open","$parent","$added","record","$node","i","$openDetails","$keepOpen"],"mappings":"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"}
|
|
@@ -12,7 +12,10 @@ declare global {
|
|
|
12
12
|
* @see {@link https://richardcarls.github.io/rc-webcomponents/components/rc-accordion rc-accordion docs}
|
|
13
13
|
* @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/accordion/ WAI-ARIA Accordion pattern}
|
|
14
14
|
*
|
|
15
|
-
* @attr
|
|
15
|
+
* @attr multiple - Allows more than one panel open at a time.
|
|
16
|
+
* @attr name - Group name mirrored onto each managed native `<details>` element's own
|
|
17
|
+
* `name` attribute (native details name-grouping), so long as `multiple` is not set.
|
|
18
|
+
* Child `<details>` elements that already declare their own `name` are left alone.
|
|
16
19
|
*/
|
|
17
20
|
export declare class RCAccordion extends HTMLElement {
|
|
18
21
|
private _$managedGroupNames;
|
package/package.json
CHANGED