@wix/interact 1.91.0 → 1.92.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.
- package/dist/cjs/__tests__/interact.spec.js +130 -1
- package/dist/cjs/__tests__/interact.spec.js.map +1 -1
- package/dist/cjs/core/Interact.js +4 -0
- package/dist/cjs/core/Interact.js.map +1 -1
- package/dist/cjs/core/add.js +4 -1
- package/dist/cjs/core/add.js.map +1 -1
- package/dist/cjs/handlers/animationEnd.js +2 -2
- package/dist/cjs/handlers/animationEnd.js.map +1 -1
- package/dist/cjs/handlers/click.js +29 -7
- package/dist/cjs/handlers/click.js.map +1 -1
- package/dist/cjs/handlers/hover.js +33 -8
- package/dist/cjs/handlers/hover.js.map +1 -1
- package/dist/cjs/handlers/index.js +12 -1
- package/dist/cjs/handlers/index.js.map +1 -1
- package/dist/cjs/handlers/pointerMove.js +2 -2
- package/dist/cjs/handlers/pointerMove.js.map +1 -1
- package/dist/cjs/handlers/viewEnter.js +2 -2
- package/dist/cjs/handlers/viewEnter.js.map +1 -1
- package/dist/cjs/handlers/viewProgress.js +2 -2
- package/dist/cjs/handlers/viewProgress.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/__tests__/interact.spec.js +130 -1
- package/dist/esm/__tests__/interact.spec.js.map +1 -1
- package/dist/esm/core/Interact.js +4 -0
- package/dist/esm/core/Interact.js.map +1 -1
- package/dist/esm/core/add.js +4 -1
- package/dist/esm/core/add.js.map +1 -1
- package/dist/esm/handlers/animationEnd.js +2 -5
- package/dist/esm/handlers/animationEnd.js.map +1 -1
- package/dist/esm/handlers/click.js +29 -13
- package/dist/esm/handlers/click.js.map +1 -1
- package/dist/esm/handlers/hover.js +33 -14
- package/dist/esm/handlers/hover.js.map +1 -1
- package/dist/esm/handlers/index.js +12 -1
- package/dist/esm/handlers/index.js.map +1 -1
- package/dist/esm/handlers/pointerMove.js +2 -5
- package/dist/esm/handlers/pointerMove.js.map +1 -1
- package/dist/esm/handlers/viewEnter.js +2 -5
- package/dist/esm/handlers/viewEnter.js.map +1 -1
- package/dist/esm/handlers/viewProgress.js +2 -5
- package/dist/esm/handlers/viewProgress.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/types/core/Interact.d.ts +2 -0
- package/dist/types/handlers/animationEnd.d.ts +2 -2
- package/dist/types/handlers/click.d.ts +2 -2
- package/dist/types/handlers/hover.d.ts +2 -2
- package/dist/types/handlers/pointerMove.d.ts +2 -2
- package/dist/types/handlers/viewEnter.d.ts +2 -2
- package/dist/types/handlers/viewProgress.d.ts +2 -2
- package/dist/types/types.d.ts +8 -2
- package/package.json +2 -2
|
@@ -396,8 +396,9 @@ describe('interact', () => {
|
|
|
396
396
|
jest.clearAllMocks();
|
|
397
397
|
// Clear Interact instances to ensure test isolation
|
|
398
398
|
_Interact.Interact.destroy();
|
|
399
|
-
// Reset
|
|
399
|
+
// Reset static flags to default
|
|
400
400
|
_Interact.Interact.forceReducedMotion = false;
|
|
401
|
+
_Interact.Interact.allowA11yTriggers = false;
|
|
401
402
|
});
|
|
402
403
|
describe('init Interact instance', () => {
|
|
403
404
|
it('should initialize with valid config', () => {
|
|
@@ -1797,5 +1798,133 @@ describe('interact', () => {
|
|
|
1797
1798
|
expect(spy).toHaveBeenCalledWith(pointerOptionsGetter);
|
|
1798
1799
|
});
|
|
1799
1800
|
});
|
|
1801
|
+
describe('a11y - accessible triggers', () => {
|
|
1802
|
+
let a11yElement;
|
|
1803
|
+
function getA11yConfig(trigger, key) {
|
|
1804
|
+
return {
|
|
1805
|
+
interactions: [{
|
|
1806
|
+
trigger,
|
|
1807
|
+
key,
|
|
1808
|
+
effects: [{
|
|
1809
|
+
effectId: 'test-effect'
|
|
1810
|
+
}]
|
|
1811
|
+
}],
|
|
1812
|
+
effects: {
|
|
1813
|
+
'test-effect': {
|
|
1814
|
+
namedEffect: {
|
|
1815
|
+
type: 'BounceIn',
|
|
1816
|
+
power: 'medium'
|
|
1817
|
+
},
|
|
1818
|
+
duration: 500
|
|
1819
|
+
}
|
|
1820
|
+
}
|
|
1821
|
+
};
|
|
1822
|
+
}
|
|
1823
|
+
afterEach(() => {
|
|
1824
|
+
_Interact.Interact.destroy();
|
|
1825
|
+
});
|
|
1826
|
+
describe('activate trigger', () => {
|
|
1827
|
+
it('should add both click and keydown listeners', () => {
|
|
1828
|
+
_Interact.Interact.create(getA11yConfig('activate', 'activate-div'));
|
|
1829
|
+
a11yElement = document.createElement('interact-element');
|
|
1830
|
+
const div = document.createElement('div');
|
|
1831
|
+
a11yElement.append(div);
|
|
1832
|
+
const addEventListenerSpy = jest.spyOn(div, 'addEventListener');
|
|
1833
|
+
(0, _add.add)(a11yElement, 'activate-div');
|
|
1834
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('click', expect.any(Function), expect.any(Object));
|
|
1835
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('keydown', expect.any(Function), expect.any(Object));
|
|
1836
|
+
});
|
|
1837
|
+
it('should not double-invoke handler when Enter triggers both keydown and click', () => {
|
|
1838
|
+
const {
|
|
1839
|
+
getWebAnimation
|
|
1840
|
+
} = require('@wix/motion');
|
|
1841
|
+
const mockPlay = getWebAnimation().play;
|
|
1842
|
+
mockPlay.mockClear();
|
|
1843
|
+
_Interact.Interact.create(getA11yConfig('activate', 'activate-handler-test'));
|
|
1844
|
+
a11yElement = document.createElement('interact-element');
|
|
1845
|
+
const button = document.createElement('button');
|
|
1846
|
+
a11yElement.append(button);
|
|
1847
|
+
(0, _add.add)(a11yElement, 'activate-handler-test');
|
|
1848
|
+
|
|
1849
|
+
// Simulate browser behavior: Enter key triggers keydown AND synthesized click with no pointerType
|
|
1850
|
+
button.dispatchEvent(new KeyboardEvent('keydown', {
|
|
1851
|
+
code: 'Enter',
|
|
1852
|
+
bubbles: true
|
|
1853
|
+
}));
|
|
1854
|
+
button.dispatchEvent(new MouseEvent('click', {
|
|
1855
|
+
bubbles: true
|
|
1856
|
+
}));
|
|
1857
|
+
expect(mockPlay).toHaveBeenCalledTimes(1);
|
|
1858
|
+
});
|
|
1859
|
+
});
|
|
1860
|
+
describe('interest trigger', () => {
|
|
1861
|
+
it('should add focusin listener alongside mouseenter', () => {
|
|
1862
|
+
_Interact.Interact.create(getA11yConfig('interest', 'interest-test'));
|
|
1863
|
+
a11yElement = document.createElement('interact-element');
|
|
1864
|
+
const div = document.createElement('div');
|
|
1865
|
+
a11yElement.append(div);
|
|
1866
|
+
const addEventListenerSpy = jest.spyOn(div, 'addEventListener');
|
|
1867
|
+
(0, _add.add)(a11yElement, 'interest-test');
|
|
1868
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('mouseenter', expect.any(Function), expect.any(Object));
|
|
1869
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('focusin', expect.any(Function), expect.any(Object));
|
|
1870
|
+
});
|
|
1871
|
+
});
|
|
1872
|
+
describe('click trigger with allowA11yTriggers flag', () => {
|
|
1873
|
+
it('should NOT add keydown listener when flag is false', () => {
|
|
1874
|
+
_Interact.Interact.create(getA11yConfig('click', 'click-no-flag'));
|
|
1875
|
+
_Interact.Interact.setup({
|
|
1876
|
+
allowA11yTriggers: false
|
|
1877
|
+
});
|
|
1878
|
+
a11yElement = document.createElement('interact-element');
|
|
1879
|
+
const div = document.createElement('div');
|
|
1880
|
+
a11yElement.append(div);
|
|
1881
|
+
const addEventListenerSpy = jest.spyOn(div, 'addEventListener');
|
|
1882
|
+
(0, _add.add)(a11yElement, 'click-no-flag');
|
|
1883
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('click', expect.any(Function), expect.any(Object));
|
|
1884
|
+
expect(addEventListenerSpy).not.toHaveBeenCalledWith('keydown', expect.any(Function), expect.any(Object));
|
|
1885
|
+
});
|
|
1886
|
+
it('should add keydown listener when flag is true', () => {
|
|
1887
|
+
_Interact.Interact.setup({
|
|
1888
|
+
allowA11yTriggers: true
|
|
1889
|
+
});
|
|
1890
|
+
_Interact.Interact.create(getA11yConfig('click', 'click-with-flag'));
|
|
1891
|
+
a11yElement = document.createElement('interact-element');
|
|
1892
|
+
const div = document.createElement('div');
|
|
1893
|
+
a11yElement.append(div);
|
|
1894
|
+
const addEventListenerSpy = jest.spyOn(div, 'addEventListener');
|
|
1895
|
+
(0, _add.add)(a11yElement, 'click-with-flag');
|
|
1896
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('click', expect.any(Function), expect.any(Object));
|
|
1897
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('keydown', expect.any(Function), expect.any(Object));
|
|
1898
|
+
});
|
|
1899
|
+
});
|
|
1900
|
+
describe('hover trigger with allowA11yTriggers flag', () => {
|
|
1901
|
+
it('should NOT add focusin listener when flag is false', () => {
|
|
1902
|
+
_Interact.Interact.setup({
|
|
1903
|
+
allowA11yTriggers: false
|
|
1904
|
+
});
|
|
1905
|
+
_Interact.Interact.create(getA11yConfig('hover', 'hover-no-flag'));
|
|
1906
|
+
a11yElement = document.createElement('interact-element');
|
|
1907
|
+
const div = document.createElement('div');
|
|
1908
|
+
a11yElement.append(div);
|
|
1909
|
+
const addEventListenerSpy = jest.spyOn(div, 'addEventListener');
|
|
1910
|
+
(0, _add.add)(a11yElement, 'hover-no-flag');
|
|
1911
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('mouseenter', expect.any(Function), expect.any(Object));
|
|
1912
|
+
expect(addEventListenerSpy).not.toHaveBeenCalledWith('focusin', expect.any(Function), expect.any(Object));
|
|
1913
|
+
});
|
|
1914
|
+
it('should add focusin listener when flag is true', () => {
|
|
1915
|
+
_Interact.Interact.setup({
|
|
1916
|
+
allowA11yTriggers: true
|
|
1917
|
+
});
|
|
1918
|
+
_Interact.Interact.create(getA11yConfig('hover', 'hover-with-flag'));
|
|
1919
|
+
a11yElement = document.createElement('interact-element');
|
|
1920
|
+
const div = document.createElement('div');
|
|
1921
|
+
a11yElement.append(div);
|
|
1922
|
+
const addEventListenerSpy = jest.spyOn(div, 'addEventListener');
|
|
1923
|
+
(0, _add.add)(a11yElement, 'hover-with-flag');
|
|
1924
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('mouseenter', expect.any(Function), expect.any(Object));
|
|
1925
|
+
expect(addEventListenerSpy).toHaveBeenCalledWith('focusin', expect.any(Function), expect.any(Object));
|
|
1926
|
+
});
|
|
1927
|
+
});
|
|
1928
|
+
});
|
|
1800
1929
|
});
|
|
1801
1930
|
//# sourceMappingURL=interact.spec.js.map
|