diff --git a/packages/field/src/FormControlMixin.js b/packages/field/src/FormControlMixin.js index a9bffb133..8fe6a210e 100644 --- a/packages/field/src/FormControlMixin.js +++ b/packages/field/src/FormControlMixin.js @@ -186,8 +186,10 @@ export const FormControlMixin = dedupeMixin( __reflectAriaAttr(attrName, nodes, reorder) { if (this._inputNode) { if (reorder) { + const insideNodes = nodes.filter(n => this.contains(n)); + const outsideNodes = nodes.filter(n => !this.contains(n)); // eslint-disable-next-line no-param-reassign - nodes = getAriaElementsInRightDomOrder(nodes); + nodes = [...getAriaElementsInRightDomOrder(insideNodes), ...outsideNodes]; } const string = nodes.map(n => n.id).join(' '); this._inputNode.setAttribute(attrName, string); @@ -464,7 +466,12 @@ export const FormControlMixin = dedupeMixin( * Meant for Application Developers wanting to add to aria-labelledby attribute. * @param {Element} element */ - addToAriaLabelledBy(element, { idPrefix, reorder } = { reorder: true }) { + addToAriaLabelledBy(element, customConfig = {}) { + const { idPrefix, reorder } = { + reorder: true, + ...customConfig, + }; + // eslint-disable-next-line no-param-reassign element.id = element.id || `${idPrefix}-${this._inputId}`; if (!this._ariaLabelledNodes.includes(element)) { @@ -478,7 +485,13 @@ export const FormControlMixin = dedupeMixin( * Meant for Application Developers wanting to add to aria-describedby attribute. * @param {Element} element */ - addToAriaDescribedBy(element, { idPrefix, reorder } = { reorder: true }) { + addToAriaDescribedBy(element, customConfig = {}) { + const { idPrefix, reorder } = { + // chronologically sorts children of host element('this') + reorder: true, + ...customConfig, + }; + // eslint-disable-next-line no-param-reassign element.id = element.id || `${idPrefix}-${this._inputId}`; if (!this._ariaDescribedNodes.includes(element)) { diff --git a/packages/field/test/FormControlMixin.test.js b/packages/field/test/FormControlMixin.test.js index bb4f63ff5..074bf0972 100644 --- a/packages/field/test/FormControlMixin.test.js +++ b/packages/field/test/FormControlMixin.test.js @@ -62,7 +62,49 @@ describe('FormControlMixin', () => { }); }); - it('adds aria-live="politie" to the feedback slot', async () => { + it('internally sorts aria-describedby and aria-labelledby ids', async () => { + const wrapper = await fixture(html` +