@lvce-editor/preview-sandbox-worker 3.2.0 → 3.4.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/previewSandBoxWorkerMain.js +150 -10
- package/package.json +1 -1
|
@@ -1607,12 +1607,137 @@ const handleInput = (uid, hdId, value) => {
|
|
|
1607
1607
|
return handleInputLocal(uid, hdId, value);
|
|
1608
1608
|
};
|
|
1609
1609
|
|
|
1610
|
+
const numericCodeMap = {
|
|
1611
|
+
13: 'Enter',
|
|
1612
|
+
27: 'Escape',
|
|
1613
|
+
32: 'Space',
|
|
1614
|
+
37: 'ArrowLeft',
|
|
1615
|
+
38: 'ArrowUp',
|
|
1616
|
+
39: 'ArrowRight',
|
|
1617
|
+
40: 'ArrowDown',
|
|
1618
|
+
8: 'Backspace',
|
|
1619
|
+
9: 'Tab'
|
|
1620
|
+
};
|
|
1621
|
+
|
|
1622
|
+
// cspell:ignore Spacebar
|
|
1623
|
+
|
|
1624
|
+
const invalidCodeValues = new Set(['code', 'event.code', 'e.code', 'key', 'event.key', 'e.key']);
|
|
1625
|
+
const getNumericCode = code => {
|
|
1626
|
+
if (typeof code === 'number' && Number.isFinite(code)) {
|
|
1627
|
+
return code;
|
|
1628
|
+
}
|
|
1629
|
+
if (typeof code === 'string' && /^\d+$/.test(code)) {
|
|
1630
|
+
return Number(code);
|
|
1631
|
+
}
|
|
1632
|
+
return undefined;
|
|
1633
|
+
};
|
|
1634
|
+
const getCodeFromNumericCode = numericCode => {
|
|
1635
|
+
if (numericCodeMap[numericCode]) {
|
|
1636
|
+
return numericCodeMap[numericCode];
|
|
1637
|
+
}
|
|
1638
|
+
if (numericCode >= 48 && numericCode <= 57) {
|
|
1639
|
+
return `Digit${String.fromCodePoint(numericCode)}`;
|
|
1640
|
+
}
|
|
1641
|
+
if (numericCode >= 65 && numericCode <= 90) {
|
|
1642
|
+
return `Key${String.fromCodePoint(numericCode)}`;
|
|
1643
|
+
}
|
|
1644
|
+
return String(numericCode);
|
|
1645
|
+
};
|
|
1646
|
+
const getCodeFromKey = key => {
|
|
1647
|
+
if (key === ' ' || key === 'Space' || key === 'Spacebar') {
|
|
1648
|
+
return 'Space';
|
|
1649
|
+
}
|
|
1650
|
+
if (key === 'Enter' || key.startsWith('Arrow')) {
|
|
1651
|
+
return key;
|
|
1652
|
+
}
|
|
1653
|
+
if (/^[a-z]$/i.test(key)) {
|
|
1654
|
+
return `Key${key.toUpperCase()}`;
|
|
1655
|
+
}
|
|
1656
|
+
if (/^\d$/.test(key)) {
|
|
1657
|
+
return `Digit${key}`;
|
|
1658
|
+
}
|
|
1659
|
+
return key;
|
|
1660
|
+
};
|
|
1661
|
+
const isInvalidCodeString = code => {
|
|
1662
|
+
const trimmedCode = code.trim();
|
|
1663
|
+
if (!trimmedCode) {
|
|
1664
|
+
return true;
|
|
1665
|
+
}
|
|
1666
|
+
return invalidCodeValues.has(trimmedCode);
|
|
1667
|
+
};
|
|
1668
|
+
const getNormalizedCode = (key, code) => {
|
|
1669
|
+
const numericCode = getNumericCode(code);
|
|
1670
|
+
if (numericCode !== undefined) {
|
|
1671
|
+
return getCodeFromNumericCode(numericCode);
|
|
1672
|
+
}
|
|
1673
|
+
if (typeof code === 'string' && !isInvalidCodeString(code)) {
|
|
1674
|
+
return code.trim();
|
|
1675
|
+
}
|
|
1676
|
+
return getCodeFromKey(key);
|
|
1677
|
+
};
|
|
1678
|
+
const getNormalizedKey = (key, normalizedCode) => {
|
|
1679
|
+
if (key === 'Space' || key === 'Spacebar') {
|
|
1680
|
+
return ' ';
|
|
1681
|
+
}
|
|
1682
|
+
if (key) {
|
|
1683
|
+
return key;
|
|
1684
|
+
}
|
|
1685
|
+
if (normalizedCode === 'Space') {
|
|
1686
|
+
return ' ';
|
|
1687
|
+
}
|
|
1688
|
+
if (/^Key[A-Z]$/.test(normalizedCode)) {
|
|
1689
|
+
return normalizedCode.slice(3).toLowerCase();
|
|
1690
|
+
}
|
|
1691
|
+
if (/^Digit\d$/.test(normalizedCode)) {
|
|
1692
|
+
return normalizedCode.slice(5);
|
|
1693
|
+
}
|
|
1694
|
+
return normalizedCode;
|
|
1695
|
+
};
|
|
1696
|
+
const getLegacyKeyCode = (normalizedCode, code) => {
|
|
1697
|
+
const numericCode = getNumericCode(code);
|
|
1698
|
+
if (numericCode !== undefined) {
|
|
1699
|
+
return numericCode;
|
|
1700
|
+
}
|
|
1701
|
+
for (const [key, value] of Object.entries(numericCodeMap)) {
|
|
1702
|
+
if (value === normalizedCode) {
|
|
1703
|
+
return Number(key);
|
|
1704
|
+
}
|
|
1705
|
+
}
|
|
1706
|
+
if (/^Key[A-Z]$/.test(normalizedCode)) {
|
|
1707
|
+
return normalizedCode.codePointAt(3) ?? 0;
|
|
1708
|
+
}
|
|
1709
|
+
if (/^Digit\d$/.test(normalizedCode)) {
|
|
1710
|
+
return normalizedCode.codePointAt(5) ?? 0;
|
|
1711
|
+
}
|
|
1712
|
+
return 0;
|
|
1713
|
+
};
|
|
1714
|
+
const getKeyboardEventInit = (key, code) => {
|
|
1715
|
+
const normalizedCode = getNormalizedCode(key, code);
|
|
1716
|
+
const normalizedKey = getNormalizedKey(key, normalizedCode);
|
|
1717
|
+
const keyCode = getLegacyKeyCode(normalizedCode, code);
|
|
1718
|
+
return {
|
|
1719
|
+
code: normalizedCode,
|
|
1720
|
+
key: normalizedKey,
|
|
1721
|
+
keyCode
|
|
1722
|
+
};
|
|
1723
|
+
};
|
|
1724
|
+
|
|
1725
|
+
const setLegacyKeyCode$1 = (event, keyCode) => {
|
|
1726
|
+
Object.defineProperty(event, 'keyCode', {
|
|
1727
|
+
value: keyCode
|
|
1728
|
+
});
|
|
1729
|
+
Object.defineProperty(event, 'which', {
|
|
1730
|
+
value: keyCode
|
|
1731
|
+
});
|
|
1732
|
+
};
|
|
1610
1733
|
const dispatchKeydownEvent = (element, window, key, code) => {
|
|
1734
|
+
const keyboardEventInit = getKeyboardEventInit(key, code);
|
|
1611
1735
|
const keydownEvent = new window.KeyboardEvent('keydown', {
|
|
1612
1736
|
bubbles: true,
|
|
1613
|
-
code,
|
|
1614
|
-
key
|
|
1737
|
+
code: keyboardEventInit.code,
|
|
1738
|
+
key: keyboardEventInit.key
|
|
1615
1739
|
});
|
|
1740
|
+
setLegacyKeyCode$1(keydownEvent, keyboardEventInit.keyCode);
|
|
1616
1741
|
dispatchEvent(element, keydownEvent);
|
|
1617
1742
|
};
|
|
1618
1743
|
|
|
@@ -1621,28 +1746,43 @@ const handleKeydownLocal = (uid, hdId, key, code) => {
|
|
|
1621
1746
|
if (!happyDomInstance) {
|
|
1622
1747
|
return;
|
|
1623
1748
|
}
|
|
1624
|
-
const
|
|
1749
|
+
const {
|
|
1750
|
+
document,
|
|
1751
|
+
elementMap,
|
|
1752
|
+
window
|
|
1753
|
+
} = happyDomInstance;
|
|
1754
|
+
const element = hdId ? elementMap[hdId] : document;
|
|
1625
1755
|
if (!element) {
|
|
1626
1756
|
return;
|
|
1627
1757
|
}
|
|
1628
|
-
dispatchKeydownEvent(element,
|
|
1629
|
-
const
|
|
1758
|
+
dispatchKeydownEvent(element, window, key, code);
|
|
1759
|
+
const newElementMap = Object.create(null);
|
|
1630
1760
|
set$1(uid, {
|
|
1631
|
-
document
|
|
1632
|
-
elementMap,
|
|
1633
|
-
window
|
|
1761
|
+
document,
|
|
1762
|
+
elementMap: newElementMap,
|
|
1763
|
+
window
|
|
1634
1764
|
});
|
|
1635
1765
|
};
|
|
1636
1766
|
const handleKeydown = (uid, hdId, key, code) => {
|
|
1637
1767
|
return handleKeydownLocal(uid, hdId, key, code);
|
|
1638
1768
|
};
|
|
1639
1769
|
|
|
1770
|
+
const setLegacyKeyCode = (event, keyCode) => {
|
|
1771
|
+
Object.defineProperty(event, 'keyCode', {
|
|
1772
|
+
value: keyCode
|
|
1773
|
+
});
|
|
1774
|
+
Object.defineProperty(event, 'which', {
|
|
1775
|
+
value: keyCode
|
|
1776
|
+
});
|
|
1777
|
+
};
|
|
1640
1778
|
const dispatchKeyupEvent = (element, window, key, code) => {
|
|
1779
|
+
const keyboardEventInit = getKeyboardEventInit(key, code);
|
|
1641
1780
|
const keyupEvent = new window.KeyboardEvent('keyup', {
|
|
1642
1781
|
bubbles: true,
|
|
1643
|
-
code,
|
|
1644
|
-
key
|
|
1782
|
+
code: keyboardEventInit.code,
|
|
1783
|
+
key: keyboardEventInit.key
|
|
1645
1784
|
});
|
|
1785
|
+
setLegacyKeyCode(keyupEvent, keyboardEventInit.keyCode);
|
|
1646
1786
|
dispatchEvent(element, keyupEvent);
|
|
1647
1787
|
};
|
|
1648
1788
|
|