From 48f6fb813597815b9e89fd2d0243a2289cb47cbd Mon Sep 17 00:00:00 2001 From: Nathan Sarang-Walters Date: Thu, 20 Jun 2024 16:04:41 -0700 Subject: [PATCH 1/6] WIP bubbling events --- js/src/dom/event-handler.js | 4 +-- js/tests/unit/collapse.spec.js | 28 +++++++------------ js/tests/unit/dropdown.spec.js | 14 +++++----- js/tests/unit/toast.spec.js | 12 ++++---- .../unit/util/component-functions.spec.js | 8 +++--- js/tests/unit/util/focustrap.spec.js | 4 +-- 6 files changed, 31 insertions(+), 39 deletions(-) diff --git a/js/src/dom/event-handler.js b/js/src/dom/event-handler.js index 561d8751d7..ac98fa8327 100644 --- a/js/src/dom/event-handler.js +++ b/js/src/dom/event-handler.js @@ -181,7 +181,7 @@ function addHandler(element, originalTypeEvent, handler, delegationFunction, one fn.uidEvent = uid handlers[uid] = fn - element.addEventListener(typeEvent, fn, isDelegated) + element.addEventListener(typeEvent, fn, false) } function removeHandler(element, events, typeEvent, handler, delegationSelector) { @@ -191,7 +191,7 @@ function removeHandler(element, events, typeEvent, handler, delegationSelector) return } - element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)) + element.removeEventListener(typeEvent, fn, false) delete events[typeEvent][fn.uidEvent] } diff --git a/js/tests/unit/collapse.spec.js b/js/tests/unit/collapse.spec.js index 58c5367526..43f70653e7 100644 --- a/js/tests/unit/collapse.spec.js +++ b/js/tests/unit/collapse.spec.js @@ -514,28 +514,20 @@ describe('Collapse', () => { describe('data-api', () => { it('should prevent url change if click on nested elements', () => { - return new Promise(resolve => { - fixtureEl.innerHTML = [ - '', - '
' - ].join('') + fixtureEl.innerHTML = [ + '', + '
' + ].join('') - const triggerEl = fixtureEl.querySelector('a') - const nestedTriggerEl = fixtureEl.querySelector('#nested') + const nestedTriggerEl = fixtureEl.querySelector('#nested') - const spy = spyOn(Event.prototype, 'preventDefault').and.callThrough() + const spy = spyOn(Event.prototype, 'preventDefault').and.callThrough() - triggerEl.addEventListener('click', event => { - expect(event.target.isEqualNode(nestedTriggerEl)).toBeTrue() - expect(event.delegateTarget.isEqualNode(triggerEl)).toBeTrue() - expect(spy).toHaveBeenCalled() - resolve() - }) + nestedTriggerEl.click() - nestedTriggerEl.click() - }) + expect(spy).toHaveBeenCalled() }) it('should show multiple collapsed elements', () => { diff --git a/js/tests/unit/dropdown.spec.js b/js/tests/unit/dropdown.spec.js index 156005588d..f7008c4214 100644 --- a/js/tests/unit/dropdown.spec.js +++ b/js/tests/unit/dropdown.spec.js @@ -1567,7 +1567,7 @@ describe('Dropdown', () => { }) triggerDropdown.addEventListener('shown.bs.dropdown', () => { - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'Escape' triggerDropdown.dispatchEvent(keydown) @@ -1782,7 +1782,7 @@ describe('Dropdown', () => { }) }) - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'ArrowUp' triggerDropdown.dispatchEvent(keydown) }) @@ -1810,7 +1810,7 @@ describe('Dropdown', () => { }) }) - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'ArrowDown' triggerDropdown.dispatchEvent(keydown) }) @@ -1919,14 +1919,14 @@ describe('Dropdown', () => { const textarea = fixtureEl.querySelector('textarea') const test = (eventKey, elementToDispatch) => { - const event = createEvent('keydown') + const event = createEvent('keydown', { bubbles: true }) event.key = eventKey elementToDispatch.focus() elementToDispatch.dispatchEvent(event) expect(document.activeElement).toEqual(elementToDispatch, `${elementToDispatch.tagName} still focused`) } - const keydownEscape = createEvent('keydown') + const keydownEscape = createEvent('keydown', { bubbles: true }) keydownEscape.key = 'Escape' triggerDropdown.addEventListener('shown.bs.dropdown', () => { @@ -2348,10 +2348,10 @@ describe('Dropdown', () => { const triggerDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]') const dropdown = fixtureEl.querySelector('.dropdown') - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'ArrowDown' - const keyup = createEvent('keyup') + const keyup = createEvent('keyup', { bubbles: true }) keyup.key = 'ArrowUp' const handleArrowDown = () => { diff --git a/js/tests/unit/toast.spec.js b/js/tests/unit/toast.spec.js index 200fe3e40c..a6039cce57 100644 --- a/js/tests/unit/toast.spec.js +++ b/js/tests/unit/toast.spec.js @@ -246,7 +246,7 @@ describe('Toast', () => { resolve() }) - const mouseOverEvent = createEvent('mouseover') + const mouseOverEvent = createEvent('mouseover', { bubbles: true }) toastEl.dispatchEvent(mouseOverEvent) }, toast._config.delay / 2) @@ -309,7 +309,7 @@ describe('Toast', () => { }) toastEl.addEventListener('focusin', () => { - const mouseOutEvent = createEvent('mouseout') + const mouseOutEvent = createEvent('mouseout', { bubbles: true }) toastEl.dispatchEvent(mouseOutEvent) }) @@ -323,7 +323,7 @@ describe('Toast', () => { resolve() }) - const mouseOverEvent = createEvent('mouseover') + const mouseOverEvent = createEvent('mouseover', { bubbles: true }) toastEl.dispatchEvent(mouseOverEvent) }, toast._config.delay / 2) @@ -362,7 +362,7 @@ describe('Toast', () => { resolve() }) - const mouseOverEvent = createEvent('mouseover') + const mouseOverEvent = createEvent('mouseover', { bubbles: true }) toastEl.dispatchEvent(mouseOverEvent) }, toast._config.delay / 2) @@ -392,7 +392,7 @@ describe('Toast', () => { }) toastEl.addEventListener('focusin', () => { - const mouseOutEvent = createEvent('mouseout') + const mouseOutEvent = createEvent('mouseout', { bubbles: true }) toastEl.dispatchEvent(mouseOutEvent) }) @@ -401,7 +401,7 @@ describe('Toast', () => { resolve() }) - const mouseOverEvent = createEvent('mouseover') + const mouseOverEvent = createEvent('mouseover', { bubbles: true }) toastEl.dispatchEvent(mouseOverEvent) }, toast._config.delay / 2) diff --git a/js/tests/unit/util/component-functions.spec.js b/js/tests/unit/util/component-functions.spec.js index ce83785e23..1441d9b30c 100644 --- a/js/tests/unit/util/component-functions.spec.js +++ b/js/tests/unit/util/component-functions.spec.js @@ -39,7 +39,7 @@ describe('Plugin functions', () => { const spyTest = spyOn(DummyClass2.prototype, 'testMethod') const componentWrapper = fixtureEl.querySelector('#foo') const btnClose = fixtureEl.querySelector('[data-bs-dismiss="test"]') - const event = createEvent('click') + const event = createEvent('click', { bubbles: true }) enableDismissTrigger(DummyClass2, 'testMethod') btnClose.dispatchEvent(event) @@ -59,7 +59,7 @@ describe('Plugin functions', () => { const spyHide = spyOn(DummyClass2.prototype, 'hide') const componentWrapper = fixtureEl.querySelector('#foo') const btnClose = fixtureEl.querySelector('[data-bs-dismiss="test"]') - const event = createEvent('click') + const event = createEvent('click', { bubbles: true }) enableDismissTrigger(DummyClass2) btnClose.dispatchEvent(event) @@ -77,7 +77,7 @@ describe('Plugin functions', () => { const spy = spyOn(DummyClass2, 'getOrCreateInstance').and.callThrough() const btnClose = fixtureEl.querySelector('[data-bs-dismiss="test"]') - const event = createEvent('click') + const event = createEvent('click', { bubbles: true }) enableDismissTrigger(DummyClass2) btnClose.dispatchEvent(event) @@ -93,7 +93,7 @@ describe('Plugin functions', () => { ].join('') const btnClose = fixtureEl.querySelector('[data-bs-dismiss="test"]') - const event = createEvent('click') + const event = createEvent('click', { bubbles: true }) enableDismissTrigger(DummyClass2) const spy = spyOn(Event.prototype, 'preventDefault').and.callThrough() diff --git a/js/tests/unit/util/focustrap.spec.js b/js/tests/unit/util/focustrap.spec.js index 0a20017d59..a57cc388c8 100644 --- a/js/tests/unit/util/focustrap.spec.js +++ b/js/tests/unit/util/focustrap.spec.js @@ -107,7 +107,7 @@ describe('FocusTrap', () => { first.addEventListener('focusin', focusInListener) - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'Tab' document.dispatchEvent(keydown) @@ -146,7 +146,7 @@ describe('FocusTrap', () => { last.addEventListener('focusin', focusInListener) - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'Tab' keydown.shiftKey = true From 443a8d87ee5f74ac11b4fa5cdd110cef2549a4d1 Mon Sep 17 00:00:00 2001 From: Nathan Sarang-Walters Date: Thu, 20 Jun 2024 17:13:59 -0700 Subject: [PATCH 2/6] WIP updated tests and implementation --- js/src/dom/event-handler.js | 27 ++++++++++++++------------- js/src/dropdown.js | 8 ++++---- js/tests/unit/dropdown.spec.js | 26 ++++++++++++-------------- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/js/src/dom/event-handler.js b/js/src/dom/event-handler.js index ac98fa8327..c1a2189275 100644 --- a/js/src/dom/event-handler.js +++ b/js/src/dom/event-handler.js @@ -139,7 +139,7 @@ function normalizeParameters(originalTypeEvent, handler, delegationFunction) { return [isDelegated, callable, typeEvent] } -function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { +function addHandler(element, originalTypeEvent, handler, delegationFunction, options) { if (typeof originalTypeEvent !== 'string' || !element) { return } @@ -165,7 +165,7 @@ function addHandler(element, originalTypeEvent, handler, delegationFunction, one const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null) if (previousFunction) { - previousFunction.oneOff = previousFunction.oneOff && oneOff + previousFunction.oneOff = previousFunction.oneOff && options.oneOff return } @@ -177,21 +177,22 @@ function addHandler(element, originalTypeEvent, handler, delegationFunction, one fn.delegationSelector = isDelegated ? handler : null fn.callable = callable - fn.oneOff = oneOff + fn.oneOff = options.oneOff fn.uidEvent = uid handlers[uid] = fn - element.addEventListener(typeEvent, fn, false) + element.addEventListener(typeEvent, fn, options?.capture ?? false) } -function removeHandler(element, events, typeEvent, handler, delegationSelector) { +// eslint-disable-next-line max-params +function removeHandler(element, events, typeEvent, handler, delegationSelector, options) { const fn = findHandler(events[typeEvent], handler, delegationSelector) if (!fn) { return } - element.removeEventListener(typeEvent, fn, false) + element.removeEventListener(typeEvent, fn, options?.capture ?? false) delete events[typeEvent][fn.uidEvent] } @@ -212,15 +213,15 @@ function getTypeEvent(event) { } const EventHandler = { - on(element, event, handler, delegationFunction) { - addHandler(element, event, handler, delegationFunction, false) + on(element, event, handler, delegationFunction, options) { + addHandler(element, event, handler, delegationFunction, { ...options, oneOff: false }) }, - one(element, event, handler, delegationFunction) { - addHandler(element, event, handler, delegationFunction, true) + one(element, event, handler, delegationFunction, options) { + addHandler(element, event, handler, delegationFunction, { ...options, oneOff: true }) }, - off(element, originalTypeEvent, handler, delegationFunction) { + off(element, originalTypeEvent, handler, delegationFunction, options) { if (typeof originalTypeEvent !== 'string' || !element) { return } @@ -237,7 +238,7 @@ const EventHandler = { return } - removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null) + removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null, options) return } @@ -251,7 +252,7 @@ const EventHandler = { const handlerKey = keyHandlers.replace(stripUidRegex, '') if (!inNamespace || originalTypeEvent.includes(handlerKey)) { - removeHandler(element, events, typeEvent, event.callable, event.delegationSelector) + removeHandler(element, events, typeEvent, event.callable, event.delegationSelector, options) } } }, diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 9190b3ed57..2127fa00c5 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -437,10 +437,10 @@ class Dropdown extends BaseComponent { * Data API implementation */ -EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler) -EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler) -EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus) -EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus) +EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler, { capture: true }) +EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler, { capture: true }) +EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus, { capture: true }) +EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus, { capture: true }) EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { event.preventDefault() Dropdown.getOrCreateInstance(this).toggle() diff --git a/js/tests/unit/dropdown.spec.js b/js/tests/unit/dropdown.spec.js index f7008c4214..a82cf793f6 100644 --- a/js/tests/unit/dropdown.spec.js +++ b/js/tests/unit/dropdown.spec.js @@ -1358,7 +1358,7 @@ describe('Dropdown', () => { btnDropdown.addEventListener('shown.bs.dropdown', () => { expect(btnDropdown).toHaveClass('show') - const keyup = createEvent('keyup') + const keyup = createEvent('keyup', { bubbles: true }) keyup.key = 'Tab' document.dispatchEvent(keyup) @@ -1453,7 +1453,7 @@ describe('Dropdown', () => { expect(triggerDropdownFirst).toHaveClass('show') expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(1) - const keyup = createEvent('keyup') + const keyup = createEvent('keyup', { bubbles: true }) keyup.key = 'Tab' document.dispatchEvent(keyup) @@ -1468,7 +1468,7 @@ describe('Dropdown', () => { expect(triggerDropdownLast).toHaveClass('show') expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(1) - const keyup = createEvent('keyup') + const keyup = createEvent('keyup', { bubbles: true }) keyup.key = 'Tab' document.dispatchEvent(keyup) @@ -1634,7 +1634,7 @@ describe('Dropdown', () => { triggerDropdown.addEventListener('shown.bs.dropdown', () => { input.focus() - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'ArrowUp' input.dispatchEvent(keydown) @@ -1668,7 +1668,7 @@ describe('Dropdown', () => { const triggerDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]') triggerDropdown.addEventListener('shown.bs.dropdown', () => { - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'ArrowDown' triggerDropdown.dispatchEvent(keydown) @@ -1705,7 +1705,7 @@ describe('Dropdown', () => { const triggerDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]') triggerDropdown.addEventListener('shown.bs.dropdown', () => { - const keydown = createEvent('keydown') + const keydown = createEvent('keydown', { bubbles: true }) keydown.key = 'ArrowDown' triggerDropdown.dispatchEvent(keydown) @@ -1738,7 +1738,7 @@ describe('Dropdown', () => { const item2 = fixtureEl.querySelector('#item2') triggerDropdown.addEventListener('shown.bs.dropdown', () => { - const keydownArrowDown = createEvent('keydown') + const keydownArrowDown = createEvent('keydown', { bubbles: true }) keydownArrowDown.key = 'ArrowDown' triggerDropdown.dispatchEvent(keydownArrowDown) @@ -1747,7 +1747,7 @@ describe('Dropdown', () => { document.activeElement.dispatchEvent(keydownArrowDown) expect(document.activeElement).toEqual(item2, 'item2 is focused') - const keydownArrowUp = createEvent('keydown') + const keydownArrowUp = createEvent('keydown', { bubbles: true }) keydownArrowUp.key = 'ArrowUp' document.activeElement.dispatchEvent(keydownArrowUp) @@ -1837,7 +1837,7 @@ describe('Dropdown', () => { triggerDropdown.addEventListener('shown.bs.dropdown', () => { expect(triggerDropdown).toHaveClass('show') - input.dispatchEvent(createEvent('click')) + input.dispatchEvent(createEvent('click', { bubbles: true })) }) triggerDropdown.click() @@ -1865,7 +1865,7 @@ describe('Dropdown', () => { triggerDropdown.addEventListener('shown.bs.dropdown', () => { expect(triggerDropdown).toHaveClass('show') - textarea.dispatchEvent(createEvent('click')) + textarea.dispatchEvent(createEvent('click', { bubbles: true })) }) triggerDropdown.click() @@ -1892,9 +1892,7 @@ describe('Dropdown', () => { }) triggerDropdown.addEventListener('shown.bs.dropdown', () => { - input.dispatchEvent(createEvent('click', { - bubbles: true - })) + input.dispatchEvent(createEvent('click', { bubbles: true })) }) triggerDropdown.click() @@ -1982,7 +1980,7 @@ describe('Dropdown', () => { // Key escape button.focus() // Key escape - const keydownEscape = createEvent('keydown') + const keydownEscape = createEvent('keydown', { bubbles: true }) keydownEscape.key = 'Escape' button.dispatchEvent(keydownEscape) From 39732396939955b2a60cf808d8127a350b47bcab Mon Sep 17 00:00:00 2001 From: Nathan Sarang-Walters Date: Thu, 20 Jun 2024 17:20:18 -0700 Subject: [PATCH 3/6] Working tests --- js/src/dropdown.js | 2 +- js/tests/unit/dropdown.spec.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 2127fa00c5..d5b0910e28 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -444,7 +444,7 @@ EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus, { capture: EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { event.preventDefault() Dropdown.getOrCreateInstance(this).toggle() -}) +}, { capture: true }) /** * jQuery diff --git a/js/tests/unit/dropdown.spec.js b/js/tests/unit/dropdown.spec.js index a82cf793f6..85258d9448 100644 --- a/js/tests/unit/dropdown.spec.js +++ b/js/tests/unit/dropdown.spec.js @@ -1403,21 +1403,25 @@ describe('Dropdown', () => { expect(triggerDropdownFirst).toHaveClass('show') expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(1) document.body.click() + console.log('clicked body 1...') }) triggerDropdownFirst.addEventListener('hidden.bs.dropdown', () => { expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(0) triggerDropdownLast.click() + console.log('clicked second dropdown...') }) triggerDropdownLast.addEventListener('shown.bs.dropdown', () => { expect(triggerDropdownLast).toHaveClass('show') expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(1) document.body.click() + console.log('clicked body 2...') }) triggerDropdownLast.addEventListener('hidden.bs.dropdown', () => { expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(0) + console.log('done!') resolve() }) From 36182fe9c4d0a7a87a283eb33ae847f3f0d1af5b Mon Sep 17 00:00:00 2001 From: Nathan Sarang-Walters Date: Thu, 20 Jun 2024 17:22:13 -0700 Subject: [PATCH 4/6] Remove logs --- js/tests/unit/dropdown.spec.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/js/tests/unit/dropdown.spec.js b/js/tests/unit/dropdown.spec.js index 85258d9448..a82cf793f6 100644 --- a/js/tests/unit/dropdown.spec.js +++ b/js/tests/unit/dropdown.spec.js @@ -1403,25 +1403,21 @@ describe('Dropdown', () => { expect(triggerDropdownFirst).toHaveClass('show') expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(1) document.body.click() - console.log('clicked body 1...') }) triggerDropdownFirst.addEventListener('hidden.bs.dropdown', () => { expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(0) triggerDropdownLast.click() - console.log('clicked second dropdown...') }) triggerDropdownLast.addEventListener('shown.bs.dropdown', () => { expect(triggerDropdownLast).toHaveClass('show') expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(1) document.body.click() - console.log('clicked body 2...') }) triggerDropdownLast.addEventListener('hidden.bs.dropdown', () => { expect(fixtureEl.querySelectorAll('.dropdown-menu.show')).toHaveSize(0) - console.log('done!') resolve() }) From 2dc80af730d56ef8303e4377dff72811238bfd2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20D=C3=A9ramond?= Date: Fri, 19 Jul 2024 19:31:53 +0200 Subject: [PATCH 5/6] Fix bundlewatch values --- .bundlewatch.config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.bundlewatch.config.json b/.bundlewatch.config.json index 6f680664ca..b71c181634 100644 --- a/.bundlewatch.config.json +++ b/.bundlewatch.config.json @@ -34,7 +34,7 @@ }, { "path": "./dist/js/bootstrap.bundle.js", - "maxSize": "43.0 kB" + "maxSize": "43.25 kB" }, { "path": "./dist/js/bootstrap.bundle.min.js", @@ -42,7 +42,7 @@ }, { "path": "./dist/js/bootstrap.esm.js", - "maxSize": "28.0 kB" + "maxSize": "28.25 kB" }, { "path": "./dist/js/bootstrap.esm.min.js", From eae6f81ef1c9f76abd5fc3ecc4af18d2092815fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20D=C3=A9ramond?= Date: Fri, 19 Jul 2024 19:35:16 +0200 Subject: [PATCH 6/6] Fix bundlewatch values --- .bundlewatch.config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bundlewatch.config.json b/.bundlewatch.config.json index b71c181634..69b2900658 100644 --- a/.bundlewatch.config.json +++ b/.bundlewatch.config.json @@ -54,7 +54,7 @@ }, { "path": "./dist/js/bootstrap.min.js", - "maxSize": "16.25 kB" + "maxSize": "16.5 kB" } ], "ci": {