diff --git a/.changeset/tame-tomatoes-warn.md b/.changeset/tame-tomatoes-warn.md new file mode 100644 index 000000000000..eafba8820867 --- /dev/null +++ b/.changeset/tame-tomatoes-warn.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: take custom attribute name into account when reflecting property diff --git a/packages/svelte/src/runtime/internal/Component.js b/packages/svelte/src/runtime/internal/Component.js index bc5b117c2ff0..2bfdb6fd4899 100644 --- a/packages/svelte/src/runtime/internal/Component.js +++ b/packages/svelte/src/runtime/internal/Component.js @@ -283,7 +283,7 @@ if (typeof HTMLElement === 'function') { 'toAttribute' ); if (attribute_value == null) { - this.removeAttribute(key); + this.removeAttribute(this.$$p_d[key].attribute || key); } else { this.setAttribute(this.$$p_d[key].attribute || key, attribute_value); } diff --git a/packages/svelte/test/runtime-browser/custom-elements-samples/reflect-attributes-add-remove/main.svelte b/packages/svelte/test/runtime-browser/custom-elements-samples/reflect-attributes-add-remove/main.svelte new file mode 100644 index 000000000000..c5c80c16a3e4 --- /dev/null +++ b/packages/svelte/test/runtime-browser/custom-elements-samples/reflect-attributes-add-remove/main.svelte @@ -0,0 +1,23 @@ + + + + +
+ +
Hidden Text
+
+ + diff --git a/packages/svelte/test/runtime-browser/custom-elements-samples/reflect-attributes-add-remove/test.js b/packages/svelte/test/runtime-browser/custom-elements-samples/reflect-attributes-add-remove/test.js new file mode 100644 index 000000000000..d973039983b9 --- /dev/null +++ b/packages/svelte/test/runtime-browser/custom-elements-samples/reflect-attributes-add-remove/test.js @@ -0,0 +1,19 @@ +import * as assert from 'assert.js'; +import { tick } from 'svelte'; +import './main.svelte'; + +export default async function (target) { + const element = document.createElement('custom-element'); + target.appendChild(element); + await tick(); + + const el = target.querySelector('custom-element'); + el.shadowRoot.querySelector('button').click(); + await tick(); + + assert.equal(el.getAttribute('aria-expanded'), ''); + el.shadowRoot.querySelector('button').click(); + await tick(); + + assert.equal(el.getAttribute('aria-expanded'), null); +}