@lvce-editor/preview-sandbox-worker 3.2.0 → 3.3.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.
@@ -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 element = hdId ? happyDomInstance.elementMap[hdId] : happyDomInstance.document;
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, happyDomInstance.window, key, code);
1629
- const elementMap = Object.create(null);
1758
+ dispatchKeydownEvent(element, window, key, code);
1759
+ const newElementMap = Object.create(null);
1630
1760
  set$1(uid, {
1631
- document: happyDomInstance.document,
1632
- elementMap,
1633
- window: happyDomInstance.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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/preview-sandbox-worker",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
4
4
  "description": "Preview SandBox Worker",
5
5
  "repository": {
6
6
  "type": "git",