From 29818fcc83f8837f8776f6a0d311935ace7965bc Mon Sep 17 00:00:00 2001 From: Bartosz-Do Date: Fri, 25 Sep 2026 14:56:00 +0200 Subject: [PATCH] Fix data attributes written with `data-tblr-` instead of `data-bs-` (#3219) --- .changeset/fix-data-attribute-prefix.md | 5 +++++ core/js/src/bootstrap/dom/manipulator.ts | 2 +- core/js/tests/unit/dom/manipulator.spec.ts | 8 ++++---- core/scss/layout/_navbar.scss | 3 +-- 4 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 .changeset/fix-data-attribute-prefix.md diff --git a/.changeset/fix-data-attribute-prefix.md b/.changeset/fix-data-attribute-prefix.md new file mode 100644 index 000000000..a5fdb03e7 --- /dev/null +++ b/.changeset/fix-data-attribute-prefix.md @@ -0,0 +1,5 @@ +--- +"@tabler/core": patch +--- + +Fixed `Manipulator.setDataAttribute()` writing `data-tblr-*` attributes instead of `data-bs-*`. diff --git a/core/js/src/bootstrap/dom/manipulator.ts b/core/js/src/bootstrap/dom/manipulator.ts index 4605eb318..2ccd30f92 100644 --- a/core/js/src/bootstrap/dom/manipulator.ts +++ b/core/js/src/bootstrap/dom/manipulator.ts @@ -43,7 +43,7 @@ const PREFIXES = ['tblr', 'bs'] as const const Manipulator = { setDataAttribute(element: HTMLElement, key: string, value: string): void { - element.setAttribute(`data-tblr-${normalizeDataKey(key)}`, value) + element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value) }, removeDataAttribute(element: HTMLElement, key: string): void { diff --git a/core/js/tests/unit/dom/manipulator.spec.ts b/core/js/tests/unit/dom/manipulator.spec.ts index b6fff0caf..1f4e436d2 100644 --- a/core/js/tests/unit/dom/manipulator.spec.ts +++ b/core/js/tests/unit/dom/manipulator.spec.ts @@ -20,23 +20,23 @@ describe('Manipulator', () => { }) describe('setDataAttribute', () => { - it('should set a data-tblr-* attribute', () => { + it('should set a data-bs-* attribute', () => { Manipulator.setDataAttribute(div, 'key', 'value') - expect(div.getAttribute('data-tblr-key')).toBe('value') + expect(div.getAttribute('data-bs-key')).toBe('value') }) it('should convert camelCase keys to kebab-case', () => { Manipulator.setDataAttribute(div, 'testKey', '123') - expect(div.getAttribute('data-tblr-test-key')).toBe('123') + expect(div.getAttribute('data-bs-test-key')).toBe('123') }) it('should overwrite existing value', () => { Manipulator.setDataAttribute(div, 'key', 'old') Manipulator.setDataAttribute(div, 'key', 'new') - expect(div.getAttribute('data-tblr-key')).toBe('new') + expect(div.getAttribute('data-bs-key')).toBe('new') }) }) diff --git a/core/scss/layout/_navbar.scss b/core/scss/layout/_navbar.scss index e0fad1f1f..46ae231a4 100644 --- a/core/scss/layout/_navbar.scss +++ b/core/scss/layout/_navbar.scss @@ -660,8 +660,7 @@ Navbar vertical // The sidebar is rendered for the expanded state, so the active submenu can // arrive open (.show). Folded, it would paint as a flyout until sidebar.ts // closes it on DOMContentLoaded — a flicker on every reload. Menus opened by - // the Dropdown plugin carry a popper data attribute (data-tblr-popper from - // tabler.js, data-bs-popper from Bootstrap's own js), so only the + // the Dropdown plugin carry a data-bs-popper attribute, so only the // server-rendered ones hide. .navbar-vertical .dropdown-menu.show:not([data-bs-popper]):not([data-tblr-popper]) { display: none;