@examind/block-sdk 0.5.0 → 0.6.1

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.
Files changed (3) hide show
  1. package/dist/index.js +116 -72
  2. package/dist/index.mjs +107 -63
  3. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -104,6 +104,26 @@ var EssayQuestionNodeHandler = class extends NodeHandler {
104
104
  }
105
105
  };
106
106
 
107
+ // src/typeGuards/isSerializedExcelCopyTextNode.ts
108
+ function isSerializedExcelCopyTextNode(node) {
109
+ return node?.type === "excel-copy-text";
110
+ }
111
+
112
+ // src/exportToHtml/ExcelCopyTextNodeHandler.ts
113
+ var ExcelCopyTextNodeHandler = class extends NodeHandler {
114
+ processNode(node) {
115
+ if (!isSerializedExcelCopyTextNode(node)) return null;
116
+ const children = [];
117
+ node.children.forEach((child) => {
118
+ const childString = traverse(child);
119
+ if (childString) {
120
+ children.push(childString);
121
+ }
122
+ });
123
+ return `<x-copy>${children.join("")}</x-copy>`;
124
+ }
125
+ };
126
+
107
127
  // src/typeGuards/isSerializedExcelQuestionNode.ts
108
128
  function isSerializedExcelQuestionNode(node) {
109
129
  return node?.type === "excel-question" && "id" in node && typeof node.id === "string" && "points" in node && typeof node.points === "number" && "data" in node && typeof node.data === "object";
@@ -1037,7 +1057,7 @@ var VariableNodeHandler = class extends NodeHandler {
1037
1057
 
1038
1058
  // src/exportToHtml/traverse.ts
1039
1059
  var builder = new NodeHandlerChainBuilder();
1040
- var nodeHandlerChain = builder.addHandler(CustomQuestionNodeHandler).addHandler(EssayQuestionNodeHandler).addHandler(ExcelQuestionNodeHandler).addHandler(ExcelWorksheetLinkNodeHandler).addHandler(FillInTheBlankQuestionNodeHandler).addHandler(FillInTheBlankSpaceNodeHandler).addHandler(FinancialStatementQuestionNodeHandler).addHandler(HeadingNodeHandler).addHandler(HorizontalRuleNodeHandler).addHandler(ImageNodeHandler).addHandler(JournalEntryQuestionNodeHandler).addHandler(LineBreakNodeHandler).addHandler(LinkNodeHandler).addHandler(ListNodeHandler).addHandler(ListItemNodeHandler).addHandler(MatchingQuestionNodeHandler).addHandler(MultipleOptionQuestionNodeHandler).addHandler(ParagraphNodeHandler).addHandler(ShortAnswerQuestionNodeHandler).addHandler(SimulationQuestionNodeHandler).addHandler(TableCellNodeHandler).addHandler(TableNodeHandler).addHandler(TableRowNodeHandler).addHandler(TextNodeHandler).addHandler(VariableNodeHandler).build();
1060
+ var nodeHandlerChain = builder.addHandler(CustomQuestionNodeHandler).addHandler(EssayQuestionNodeHandler).addHandler(ExcelCopyTextNodeHandler).addHandler(ExcelQuestionNodeHandler).addHandler(ExcelWorksheetLinkNodeHandler).addHandler(FillInTheBlankQuestionNodeHandler).addHandler(FillInTheBlankSpaceNodeHandler).addHandler(FinancialStatementQuestionNodeHandler).addHandler(HeadingNodeHandler).addHandler(HorizontalRuleNodeHandler).addHandler(ImageNodeHandler).addHandler(JournalEntryQuestionNodeHandler).addHandler(LineBreakNodeHandler).addHandler(LinkNodeHandler).addHandler(ListNodeHandler).addHandler(ListItemNodeHandler).addHandler(MatchingQuestionNodeHandler).addHandler(MultipleOptionQuestionNodeHandler).addHandler(ParagraphNodeHandler).addHandler(ShortAnswerQuestionNodeHandler).addHandler(SimulationQuestionNodeHandler).addHandler(TableCellNodeHandler).addHandler(TableNodeHandler).addHandler(TableRowNodeHandler).addHandler(TextNodeHandler).addHandler(VariableNodeHandler).build();
1041
1061
  var traverse = (node, metadata) => {
1042
1062
  return nodeHandlerChain.handle(node, metadata);
1043
1063
  };
@@ -1056,7 +1076,7 @@ function exportToHtml(editorState) {
1056
1076
  }
1057
1077
 
1058
1078
  // src/importFromHtml/index.ts
1059
- var import_node_html_parser31 = require("node-html-parser");
1079
+ var import_node_html_parser32 = require("node-html-parser");
1060
1080
 
1061
1081
  // src/importFromHtml/createEmptyParagraphNode.ts
1062
1082
  function createEmptyParagraphNode(format = "") {
@@ -1348,6 +1368,30 @@ var EssayQuestionNodeHandler2 = class extends NodeHandler2 {
1348
1368
  }
1349
1369
  };
1350
1370
 
1371
+ // src/importFromHtml/ExcelCopyTextNodeHandler.ts
1372
+ var import_node_html_parser5 = require("node-html-parser");
1373
+ var ExcelCopyTextNodeHandler2 = class extends NodeHandler2 {
1374
+ isXCopyElement(node) {
1375
+ return node instanceof import_node_html_parser5.HTMLElement && node.tagName === "X-COPY";
1376
+ }
1377
+ processNode(node) {
1378
+ if (!this.isXCopyElement(node)) return null;
1379
+ const children = [];
1380
+ for (const childNode of node.childNodes) {
1381
+ const processedChildren = traverse2(childNode);
1382
+ children.push(...processedChildren);
1383
+ }
1384
+ return {
1385
+ children,
1386
+ direction: null,
1387
+ format: "",
1388
+ indent: 0,
1389
+ type: "excel-copy-text",
1390
+ version: 1
1391
+ };
1392
+ }
1393
+ };
1394
+
1351
1395
  // src/importFromHtml/createNestedEditorFromHtml.ts
1352
1396
  function createNestedEditorFromHtml(node) {
1353
1397
  return {
@@ -1365,7 +1409,7 @@ function createNestedEditorFromHtml(node) {
1365
1409
  }
1366
1410
 
1367
1411
  // src/importFromHtml/ExcelQuestionNodeHandler.ts
1368
- var import_node_html_parser5 = require("node-html-parser");
1412
+ var import_node_html_parser6 = require("node-html-parser");
1369
1413
  var TAG_X = "x-excel";
1370
1414
  function parseData(xDataString) {
1371
1415
  const xData = JSON.parse(xDataString);
@@ -1378,14 +1422,14 @@ function parseData(xDataString) {
1378
1422
  steps.push({
1379
1423
  id: xStep.id,
1380
1424
  description: createNestedEditorFromHtml(
1381
- (0, import_node_html_parser5.parse)(xStep.description ?? "")
1425
+ (0, import_node_html_parser6.parse)(xStep.description ?? "")
1382
1426
  )
1383
1427
  });
1384
1428
  }
1385
1429
  tasks.push({
1386
1430
  id: xTask.id,
1387
1431
  instructions: createNestedEditorFromHtml(
1388
- (0, import_node_html_parser5.parse)(xTask.instructions ?? "")
1432
+ (0, import_node_html_parser6.parse)(xTask.instructions ?? "")
1389
1433
  ),
1390
1434
  steps
1391
1435
  });
@@ -1393,10 +1437,10 @@ function parseData(xDataString) {
1393
1437
  parts.push({
1394
1438
  id: xPart.id,
1395
1439
  objective: createNestedEditorFromHtml(
1396
- (0, import_node_html_parser5.parse)(xPart.objective ?? "")
1440
+ (0, import_node_html_parser6.parse)(xPart.objective ?? "")
1397
1441
  ),
1398
1442
  instructions: createNestedEditorFromHtml(
1399
- (0, import_node_html_parser5.parse)(xPart.instructions ?? "")
1443
+ (0, import_node_html_parser6.parse)(xPart.instructions ?? "")
1400
1444
  ),
1401
1445
  onLoadActions: xPart.onLoadActions,
1402
1446
  onNextActions: xPart.onNextActions,
@@ -1411,7 +1455,7 @@ function parseData(xDataString) {
1411
1455
  }
1412
1456
  var ExcelQuestionNodeHandler2 = class extends NodeHandler2 {
1413
1457
  processNode(node) {
1414
- if (!(node instanceof import_node_html_parser5.HTMLElement) || node.tagName !== TAG_X.toUpperCase()) {
1458
+ if (!(node instanceof import_node_html_parser6.HTMLElement) || node.tagName !== TAG_X.toUpperCase()) {
1415
1459
  return null;
1416
1460
  }
1417
1461
  const xDataElement = node.querySelector("x-data");
@@ -1435,11 +1479,11 @@ var ExcelQuestionNodeHandler2 = class extends NodeHandler2 {
1435
1479
  };
1436
1480
 
1437
1481
  // src/importFromHtml/ExcelWorksheetLinkNodeHandler.ts
1438
- var import_node_html_parser6 = require("node-html-parser");
1482
+ var import_node_html_parser7 = require("node-html-parser");
1439
1483
  var TAG = "x-worksheet-link";
1440
1484
  var ExcelWorksheetLinkNodeHandler2 = class extends NodeHandler2 {
1441
1485
  processNode(node) {
1442
- if (!(node instanceof import_node_html_parser6.HTMLElement) || node.tagName !== TAG.toUpperCase()) {
1486
+ if (!(node instanceof import_node_html_parser7.HTMLElement) || node.tagName !== TAG.toUpperCase()) {
1443
1487
  return null;
1444
1488
  }
1445
1489
  const sheetName = node.getAttribute("x-data-name") || "";
@@ -1459,10 +1503,10 @@ var ExcelWorksheetLinkNodeHandler2 = class extends NodeHandler2 {
1459
1503
 
1460
1504
  // src/importFromHtml/FillInTheBlankQuestionNodeHandler.ts
1461
1505
  var import_nanoid2 = require("nanoid");
1462
- var import_node_html_parser7 = require("node-html-parser");
1506
+ var import_node_html_parser8 = require("node-html-parser");
1463
1507
  var FillInTheBlankQuestionNodeHandler2 = class extends NodeHandler2 {
1464
1508
  processNode(node) {
1465
- if (!(node instanceof import_node_html_parser7.HTMLElement) || node.tagName !== "x-fill-in-the-blank".toUpperCase())
1509
+ if (!(node instanceof import_node_html_parser8.HTMLElement) || node.tagName !== "x-fill-in-the-blank".toUpperCase())
1466
1510
  return null;
1467
1511
  const jsonNode = {
1468
1512
  id: node.getAttribute("id") ?? (0, import_nanoid2.nanoid)(),
@@ -1479,7 +1523,7 @@ var FillInTheBlankQuestionNodeHandler2 = class extends NodeHandler2 {
1479
1523
 
1480
1524
  // src/importFromHtml/FillInTheBlankSpaceNodeHandler.ts
1481
1525
  var import_nanoid3 = require("nanoid");
1482
- var import_node_html_parser8 = require("node-html-parser");
1526
+ var import_node_html_parser9 = require("node-html-parser");
1483
1527
 
1484
1528
  // src/importFromHtml/parseErrorToleranceAttribute.ts
1485
1529
  function parseErrorToleranceAttribute(attr) {
@@ -1491,7 +1535,7 @@ function parseErrorToleranceAttribute(attr) {
1491
1535
  // src/importFromHtml/FillInTheBlankSpaceNodeHandler.ts
1492
1536
  var FillInTheBlankSpaceNodeHandler2 = class extends NodeHandler2 {
1493
1537
  processNode(node) {
1494
- if (!(node instanceof import_node_html_parser8.HTMLElement) || node.tagName !== "x-space".toUpperCase())
1538
+ if (!(node instanceof import_node_html_parser9.HTMLElement) || node.tagName !== "x-space".toUpperCase())
1495
1539
  return null;
1496
1540
  const spaceTypeAttr = node.getAttribute("data-x-type");
1497
1541
  const spaceType = spaceTypeAttr === "Text" || spaceTypeAttr === "Number" || spaceTypeAttr === "Dropdown" ? spaceTypeAttr : "Text";
@@ -1542,7 +1586,7 @@ var FillInTheBlankSpaceNodeHandler2 = class extends NodeHandler2 {
1542
1586
 
1543
1587
  // src/importFromHtml/FinancialStatementQuestionNodeHandler.ts
1544
1588
  var import_nanoid4 = require("nanoid");
1545
- var import_node_html_parser9 = require("node-html-parser");
1589
+ var import_node_html_parser10 = require("node-html-parser");
1546
1590
  var TAG_X_FINANCIAL_STATEMENT = "x-financial-statement";
1547
1591
  var TAG_X_HEADER = "x-header";
1548
1592
  var TAG_X_ROWS = "x-rows";
@@ -1556,7 +1600,7 @@ var isLineRole = (value) => value === "line-item" || value === "subtotal" || val
1556
1600
  var parseLineRole = (value) => isLineRole(value) ? value : null;
1557
1601
  var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1558
1602
  processNode(node) {
1559
- if (!(node instanceof import_node_html_parser9.HTMLElement) || node.tagName !== TAG_X_FINANCIAL_STATEMENT.toUpperCase()) {
1603
+ if (!(node instanceof import_node_html_parser10.HTMLElement) || node.tagName !== TAG_X_FINANCIAL_STATEMENT.toUpperCase()) {
1560
1604
  return null;
1561
1605
  }
1562
1606
  const headerElement = node.querySelector(TAG_X_HEADER);
@@ -1571,7 +1615,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1571
1615
  version: 1
1572
1616
  };
1573
1617
  node.childNodes.forEach((child) => {
1574
- if (!(child instanceof import_node_html_parser9.HTMLElement)) return;
1618
+ if (!(child instanceof import_node_html_parser10.HTMLElement)) return;
1575
1619
  if (child.tagName === TAG_X_DISTRACTORS.toUpperCase()) {
1576
1620
  this.processDistractorsNode(child, jsonNode);
1577
1621
  } else if (child.tagName === TAG_X_ROWS.toUpperCase()) {
@@ -1582,7 +1626,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1582
1626
  }
1583
1627
  processDistractorsNode(distractorsNode, jsonNode) {
1584
1628
  for (const distractorsChild of distractorsNode.childNodes) {
1585
- if (!(distractorsChild instanceof import_node_html_parser9.HTMLElement)) continue;
1629
+ if (!(distractorsChild instanceof import_node_html_parser10.HTMLElement)) continue;
1586
1630
  if (distractorsChild.tagName !== TAG_X_DISTRACTOR.toUpperCase())
1587
1631
  continue;
1588
1632
  jsonNode.distractors.push({
@@ -1601,7 +1645,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1601
1645
  const contentDiv = headerElement.querySelector(
1602
1646
  'div > div:not([style*="display:flex"])'
1603
1647
  );
1604
- if (contentDiv && contentDiv instanceof import_node_html_parser9.HTMLElement)
1648
+ if (contentDiv && contentDiv instanceof import_node_html_parser10.HTMLElement)
1605
1649
  return createNestedEditorFromHtml(contentDiv);
1606
1650
  }
1607
1651
  return createNestedEditorFromHtml(headerElement);
@@ -1618,7 +1662,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1618
1662
  }
1619
1663
  processRowsNode(rowsNode, jsonNode) {
1620
1664
  for (const rowsChild of rowsNode.childNodes) {
1621
- if (!(rowsChild instanceof import_node_html_parser9.HTMLElement)) continue;
1665
+ if (!(rowsChild instanceof import_node_html_parser10.HTMLElement)) continue;
1622
1666
  if (rowsChild.tagName === TAG_X_HEADING.toUpperCase()) {
1623
1667
  this.processHeadingRow(rowsChild, jsonNode);
1624
1668
  } else if (rowsChild.tagName === TAG_X_LINE.toUpperCase()) {
@@ -1654,7 +1698,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1654
1698
  };
1655
1699
 
1656
1700
  // src/importFromHtml/FormattedNodeHandler.ts
1657
- var import_node_html_parser10 = require("node-html-parser");
1701
+ var import_node_html_parser11 = require("node-html-parser");
1658
1702
  var IS_BOLD2 = 1;
1659
1703
  var IS_ITALIC2 = 1 << 1;
1660
1704
  var IS_STRIKETHROUGH2 = 1 << 2;
@@ -1694,7 +1738,7 @@ function formatToProps(format) {
1694
1738
  }
1695
1739
  var FormattedNodeHandler = class extends NodeHandler2 {
1696
1740
  processNode(node) {
1697
- if (!(node instanceof import_node_html_parser10.HTMLElement)) return null;
1741
+ if (!(node instanceof import_node_html_parser11.HTMLElement)) return null;
1698
1742
  const tagName = node.tagName;
1699
1743
  if (!tagName || !(tagName in TAG_TO_FORMAT)) return null;
1700
1744
  const formatFlag = TAG_TO_FORMAT[tagName];
@@ -1729,7 +1773,7 @@ var FormattedNodeHandler = class extends NodeHandler2 {
1729
1773
  };
1730
1774
 
1731
1775
  // src/importFromHtml/HeadingNodeHandler.ts
1732
- var import_node_html_parser11 = require("node-html-parser");
1776
+ var import_node_html_parser12 = require("node-html-parser");
1733
1777
 
1734
1778
  // src/importFromHtml/extractTextAlignment.ts
1735
1779
  var TEXT_ALIGN_TO_FORMAT = {
@@ -1757,7 +1801,7 @@ function extractTextAlignment(element) {
1757
1801
  var TAG_HEADINGS = ["h1", "h2", "h3", "h4", "h5", "h6"];
1758
1802
  var HeadingNodeHandler2 = class extends NodeHandler2 {
1759
1803
  processNode(node) {
1760
- if (!(node instanceof import_node_html_parser11.HTMLElement) || !TAG_HEADINGS.includes(node.tagName.toLowerCase())) {
1804
+ if (!(node instanceof import_node_html_parser12.HTMLElement) || !TAG_HEADINGS.includes(node.tagName.toLowerCase())) {
1761
1805
  return null;
1762
1806
  }
1763
1807
  const headingNode = {
@@ -1778,11 +1822,11 @@ var HeadingNodeHandler2 = class extends NodeHandler2 {
1778
1822
  };
1779
1823
 
1780
1824
  // src/importFromHtml/HorizontalRuleNodeHandler.ts
1781
- var import_node_html_parser12 = require("node-html-parser");
1825
+ var import_node_html_parser13 = require("node-html-parser");
1782
1826
  var TAG_HR = "hr";
1783
1827
  var HorizontalRuleNodeHandler2 = class extends NodeHandler2 {
1784
1828
  processNode(node) {
1785
- if (!(node instanceof import_node_html_parser12.HTMLElement) || node.tagName !== TAG_HR.toUpperCase()) {
1829
+ if (!(node instanceof import_node_html_parser13.HTMLElement) || node.tagName !== TAG_HR.toUpperCase()) {
1786
1830
  return null;
1787
1831
  }
1788
1832
  const horizontalRuleNode = {
@@ -1794,11 +1838,11 @@ var HorizontalRuleNodeHandler2 = class extends NodeHandler2 {
1794
1838
  };
1795
1839
 
1796
1840
  // src/importFromHtml/ImageNodeHandler.ts
1797
- var import_node_html_parser13 = require("node-html-parser");
1841
+ var import_node_html_parser14 = require("node-html-parser");
1798
1842
  var TAG_IMG = "img";
1799
1843
  var ImageNodeHandler2 = class extends NodeHandler2 {
1800
1844
  processNode(node) {
1801
- if (!(node instanceof import_node_html_parser13.HTMLElement) || node.tagName !== TAG_IMG.toUpperCase()) {
1845
+ if (!(node instanceof import_node_html_parser14.HTMLElement) || node.tagName !== TAG_IMG.toUpperCase()) {
1802
1846
  return null;
1803
1847
  }
1804
1848
  return createImageNode(
@@ -1814,11 +1858,11 @@ var ImageNodeHandler2 = class extends NodeHandler2 {
1814
1858
 
1815
1859
  // src/importFromHtml/JournalEntryQuestionNodeHandler.ts
1816
1860
  var import_nanoid6 = require("nanoid");
1817
- var import_node_html_parser15 = require("node-html-parser");
1861
+ var import_node_html_parser16 = require("node-html-parser");
1818
1862
 
1819
1863
  // src/importFromHtml/createOnePerLineDistractorNode.ts
1820
1864
  var import_nanoid5 = require("nanoid");
1821
- var import_node_html_parser14 = require("node-html-parser");
1865
+ var import_node_html_parser15 = require("node-html-parser");
1822
1866
  function extractDistractorId(id) {
1823
1867
  if (!id) return null;
1824
1868
  const parts = id.split("|");
@@ -1831,7 +1875,7 @@ var createOnePerLineDistractorNode = (node) => {
1831
1875
  distractorEditor.editorState.root.children = [];
1832
1876
  let distractorId = null;
1833
1877
  distractors.forEach((distractor) => {
1834
- if (!(distractor instanceof import_node_html_parser14.HTMLElement)) return;
1878
+ if (!(distractor instanceof import_node_html_parser15.HTMLElement)) return;
1835
1879
  distractorId = distractorId ?? extractDistractorId(distractor.getAttribute("id"));
1836
1880
  distractorEditor.editorState.root.children.push(
1837
1881
  ...createNestedNodesFromHtml(distractor)
@@ -1849,7 +1893,7 @@ var createOnePerLineDistractorNode = (node) => {
1849
1893
  // src/importFromHtml/JournalEntryQuestionNodeHandler.ts
1850
1894
  var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
1851
1895
  processNode(node) {
1852
- if (!(node instanceof import_node_html_parser15.HTMLElement) || node.tagName !== "x-journal-entry".toUpperCase())
1896
+ if (!(node instanceof import_node_html_parser16.HTMLElement) || node.tagName !== "x-journal-entry".toUpperCase())
1853
1897
  return null;
1854
1898
  const jsonNode = {
1855
1899
  id: node.getAttribute("id") ?? (0, import_nanoid6.nanoid)(),
@@ -1864,7 +1908,7 @@ var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
1864
1908
  };
1865
1909
  const lineItems = node.querySelectorAll("x-line-item");
1866
1910
  lineItems.forEach((lineItem) => {
1867
- if (!(lineItem instanceof import_node_html_parser15.HTMLElement)) return;
1911
+ if (!(lineItem instanceof import_node_html_parser16.HTMLElement)) return;
1868
1912
  const accountElement = lineItem.querySelector("x-account");
1869
1913
  const debitElement = lineItem.querySelector("x-debit");
1870
1914
  const creditElement = lineItem.querySelector("x-credit");
@@ -1893,10 +1937,10 @@ var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
1893
1937
  };
1894
1938
 
1895
1939
  // src/importFromHtml/LineBreakNodeHandler.ts
1896
- var import_node_html_parser16 = require("node-html-parser");
1940
+ var import_node_html_parser17 = require("node-html-parser");
1897
1941
  var LineBreakNodeHandler2 = class extends NodeHandler2 {
1898
1942
  processNode(node) {
1899
- if (!(node instanceof import_node_html_parser16.HTMLElement)) return null;
1943
+ if (!(node instanceof import_node_html_parser17.HTMLElement)) return null;
1900
1944
  if (node.tagName !== "BR") return null;
1901
1945
  return {
1902
1946
  type: "linebreak",
@@ -1906,11 +1950,11 @@ var LineBreakNodeHandler2 = class extends NodeHandler2 {
1906
1950
  };
1907
1951
 
1908
1952
  // src/importFromHtml/LinkNodeHandler.ts
1909
- var import_node_html_parser17 = require("node-html-parser");
1953
+ var import_node_html_parser18 = require("node-html-parser");
1910
1954
  var TAG_A = "a";
1911
1955
  var LinkNodeHandler2 = class extends NodeHandler2 {
1912
1956
  processNode(node) {
1913
- if (!(node instanceof import_node_html_parser17.HTMLElement) || node.tagName !== TAG_A.toUpperCase()) {
1957
+ if (!(node instanceof import_node_html_parser18.HTMLElement) || node.tagName !== TAG_A.toUpperCase()) {
1914
1958
  return null;
1915
1959
  }
1916
1960
  const url = node.getAttribute("href") || "";
@@ -1939,10 +1983,10 @@ var LinkNodeHandler2 = class extends NodeHandler2 {
1939
1983
  };
1940
1984
 
1941
1985
  // src/importFromHtml/ListItemNodeHandler.ts
1942
- var import_node_html_parser18 = require("node-html-parser");
1986
+ var import_node_html_parser19 = require("node-html-parser");
1943
1987
  var ListItemNodeHandler2 = class extends NodeHandler2 {
1944
1988
  processNode(node) {
1945
- if (!(node instanceof import_node_html_parser18.HTMLElement)) return null;
1989
+ if (!(node instanceof import_node_html_parser19.HTMLElement)) return null;
1946
1990
  if (node.tagName !== "LI") return null;
1947
1991
  const jsonNode = {
1948
1992
  type: "listitem",
@@ -1963,10 +2007,10 @@ var ListItemNodeHandler2 = class extends NodeHandler2 {
1963
2007
  };
1964
2008
 
1965
2009
  // src/importFromHtml/ListNodeHandler.ts
1966
- var import_node_html_parser19 = require("node-html-parser");
2010
+ var import_node_html_parser20 = require("node-html-parser");
1967
2011
  var ListNodeHandler2 = class extends NodeHandler2 {
1968
2012
  processNode(node) {
1969
- if (!(node instanceof import_node_html_parser19.HTMLElement)) return null;
2013
+ if (!(node instanceof import_node_html_parser20.HTMLElement)) return null;
1970
2014
  if (node.tagName !== "UL" && node.tagName !== "OL") return null;
1971
2015
  const tag = node.tagName.toLowerCase();
1972
2016
  const listType = tag === "ol" ? "number" : "bullet";
@@ -1984,7 +2028,7 @@ var ListNodeHandler2 = class extends NodeHandler2 {
1984
2028
  };
1985
2029
  let itemIndex = 1;
1986
2030
  node.childNodes.forEach((child) => {
1987
- if (child instanceof import_node_html_parser19.HTMLElement && child.tagName === "LI") {
2031
+ if (child instanceof import_node_html_parser20.HTMLElement && child.tagName === "LI") {
1988
2032
  const listItemNode = {
1989
2033
  type: "listitem",
1990
2034
  version: 1,
@@ -2009,10 +2053,10 @@ var ListNodeHandler2 = class extends NodeHandler2 {
2009
2053
 
2010
2054
  // src/importFromHtml/MatchingQuestionNodeHandler.ts
2011
2055
  var import_nanoid7 = require("nanoid");
2012
- var import_node_html_parser20 = require("node-html-parser");
2056
+ var import_node_html_parser21 = require("node-html-parser");
2013
2057
  var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
2014
2058
  processNode(node) {
2015
- if (!(node instanceof import_node_html_parser20.HTMLElement) || node.tagName !== "x-matching".toUpperCase())
2059
+ if (!(node instanceof import_node_html_parser21.HTMLElement) || node.tagName !== "x-matching".toUpperCase())
2016
2060
  return null;
2017
2061
  const jsonNode = {
2018
2062
  id: node.getAttribute("id") ?? (0, import_nanoid7.nanoid)(),
@@ -2025,7 +2069,7 @@ var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
2025
2069
  };
2026
2070
  const matches = node.querySelectorAll("x-match");
2027
2071
  matches.forEach((match) => {
2028
- if (!(match instanceof import_node_html_parser20.HTMLElement)) return;
2072
+ if (!(match instanceof import_node_html_parser21.HTMLElement)) return;
2029
2073
  const premise = match.querySelector("x-premise");
2030
2074
  const option = match.querySelector("x-option");
2031
2075
  if (!premise || !option) return;
@@ -2048,10 +2092,10 @@ var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
2048
2092
 
2049
2093
  // src/importFromHtml/MultipleOptionQuestionNodeHandler.ts
2050
2094
  var import_nanoid8 = require("nanoid");
2051
- var import_node_html_parser21 = require("node-html-parser");
2095
+ var import_node_html_parser22 = require("node-html-parser");
2052
2096
  var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
2053
2097
  processNode(node) {
2054
- if (!(node instanceof import_node_html_parser21.HTMLElement)) return null;
2098
+ if (!(node instanceof import_node_html_parser22.HTMLElement)) return null;
2055
2099
  if (node.tagName === "x-multiple-choice".toUpperCase())
2056
2100
  return this.processMultipleChoiceNode(node);
2057
2101
  else if (node.tagName === "x-multiple-answers".toUpperCase())
@@ -2091,7 +2135,7 @@ var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
2091
2135
  processOptions(node, jsonNode) {
2092
2136
  const childNodes = node.childNodes;
2093
2137
  childNodes.forEach((child) => {
2094
- if (!(child instanceof import_node_html_parser21.HTMLElement)) return;
2138
+ if (!(child instanceof import_node_html_parser22.HTMLElement)) return;
2095
2139
  if (child.tagName !== "x-option".toUpperCase()) return;
2096
2140
  jsonNode.options.push({
2097
2141
  id: child.getAttribute("id") ?? (0, import_nanoid8.nanoid)(),
@@ -2103,28 +2147,28 @@ var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
2103
2147
  };
2104
2148
 
2105
2149
  // src/importFromHtml/ParagraphNodeHandler.ts
2106
- var import_node_html_parser22 = require("node-html-parser");
2150
+ var import_node_html_parser23 = require("node-html-parser");
2107
2151
  var ParagraphNodeHandler2 = class extends NodeHandler2 {
2108
2152
  processImageNode(node) {
2109
- if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser22.HTMLElement && node.childNodes[0].tagName === "IMG") {
2153
+ if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser23.HTMLElement && node.childNodes[0].tagName === "IMG") {
2110
2154
  return traverse2(node.childNodes[0]);
2111
2155
  }
2112
2156
  return null;
2113
2157
  }
2114
2158
  processSpanImageNode(node) {
2115
- if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser22.HTMLElement && node.childNodes[0].tagName === "SPAN" && node.childNodes[0].childNodes.length === 1 && node.childNodes[0].childNodes[0] instanceof import_node_html_parser22.HTMLElement && node.childNodes[0].childNodes[0].tagName === "IMG") {
2159
+ if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser23.HTMLElement && node.childNodes[0].tagName === "SPAN" && node.childNodes[0].childNodes.length === 1 && node.childNodes[0].childNodes[0] instanceof import_node_html_parser23.HTMLElement && node.childNodes[0].childNodes[0].tagName === "IMG") {
2116
2160
  return traverse2(node.childNodes[0].childNodes[0]);
2117
2161
  }
2118
2162
  return null;
2119
2163
  }
2120
2164
  processNode(node) {
2121
- if (!(node instanceof import_node_html_parser22.HTMLElement)) return null;
2165
+ if (!(node instanceof import_node_html_parser23.HTMLElement)) return null;
2122
2166
  if (node.tagName !== "P") return null;
2123
2167
  const imageNode = this.processImageNode(node) ?? this.processSpanImageNode(node);
2124
2168
  if (imageNode) return imageNode;
2125
2169
  const jsonNode = createEmptyParagraphNode();
2126
2170
  jsonNode.format = extractTextAlignment(node);
2127
- if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser22.HTMLElement && node.childNodes[0].tagName === "BR")
2171
+ if (node.childNodes.length === 1 && node.childNodes[0] instanceof import_node_html_parser23.HTMLElement && node.childNodes[0].tagName === "BR")
2128
2172
  return jsonNode;
2129
2173
  node.childNodes.forEach((child) => {
2130
2174
  const processedChildren = traverse2(child);
@@ -2136,10 +2180,10 @@ var ParagraphNodeHandler2 = class extends NodeHandler2 {
2136
2180
 
2137
2181
  // src/importFromHtml/ShortAnswerQuestionNodeHandler.ts
2138
2182
  var import_nanoid9 = require("nanoid");
2139
- var import_node_html_parser23 = require("node-html-parser");
2183
+ var import_node_html_parser24 = require("node-html-parser");
2140
2184
  var ShortAnswerQuestionNodeHandler2 = class extends NodeHandler2 {
2141
2185
  processNode(node) {
2142
- if (!(node instanceof import_node_html_parser23.HTMLElement) || node.tagName !== "x-short-answer".toUpperCase())
2186
+ if (!(node instanceof import_node_html_parser24.HTMLElement) || node.tagName !== "x-short-answer".toUpperCase())
2143
2187
  return null;
2144
2188
  return {
2145
2189
  id: node.getAttribute("id") ?? (0, import_nanoid9.nanoid)(),
@@ -2155,7 +2199,7 @@ var ShortAnswerQuestionNodeHandler2 = class extends NodeHandler2 {
2155
2199
  };
2156
2200
 
2157
2201
  // src/importFromHtml/SimulationQuestionNodeHandler.ts
2158
- var import_node_html_parser24 = require("node-html-parser");
2202
+ var import_node_html_parser25 = require("node-html-parser");
2159
2203
  var TAG_X_SIMULATION = "x-simulation";
2160
2204
  var TAG_X_SYSTEM_MESSAGE2 = "x-ai-system-message";
2161
2205
  var TAG_X_COMMENT_INSTRUCTIONS = "x-comment-instructions";
@@ -2163,7 +2207,7 @@ var TAG_X_STEP2_INSTRUCTIONS = "x-step2-instructions";
2163
2207
  var findFirstNonEmptyInnerHtml = (root, elementNames) => elementNames.map((name) => root.querySelector(name)).find((el) => el?.innerHTML.trim().length)?.innerHTML.trim() ?? null;
2164
2208
  var SimulationQuestionNodeHandler2 = class extends NodeHandler2 {
2165
2209
  processNode(node) {
2166
- if (!(node instanceof import_node_html_parser24.HTMLElement) || node.tagName !== TAG_X_SIMULATION.toUpperCase()) {
2210
+ if (!(node instanceof import_node_html_parser25.HTMLElement) || node.tagName !== TAG_X_SIMULATION.toUpperCase()) {
2167
2211
  return null;
2168
2212
  }
2169
2213
  const jsonNode = {
@@ -2184,11 +2228,11 @@ var SimulationQuestionNodeHandler2 = class extends NodeHandler2 {
2184
2228
  };
2185
2229
 
2186
2230
  // src/importFromHtml/SpanNodeHandler.ts
2187
- var import_node_html_parser25 = require("node-html-parser");
2188
- var TextNode = import_node_html_parser25.parse.TextNode;
2231
+ var import_node_html_parser26 = require("node-html-parser");
2232
+ var TextNode = import_node_html_parser26.parse.TextNode;
2189
2233
  var SpanNodeHandler = class extends NodeHandler2 {
2190
2234
  processNode(node) {
2191
- if (!(node instanceof import_node_html_parser25.HTMLElement) || node.tagName !== "SPAN")
2235
+ if (!(node instanceof import_node_html_parser26.HTMLElement) || node.tagName !== "SPAN")
2192
2236
  return null;
2193
2237
  const styleAttr = node.getAttribute("style") || "";
2194
2238
  if (node.childNodes.length === 1 && node.childNodes[0] instanceof TextNode) {
@@ -2250,7 +2294,7 @@ var SpanNodeHandler = class extends NodeHandler2 {
2250
2294
  };
2251
2295
 
2252
2296
  // src/importFromHtml/TableCellNodeHandler.ts
2253
- var import_node_html_parser26 = require("node-html-parser");
2297
+ var import_node_html_parser27 = require("node-html-parser");
2254
2298
 
2255
2299
  // src/importFromHtml/createTableNodes.ts
2256
2300
  function createEmptyTableNode() {
@@ -2287,7 +2331,7 @@ function createEmptyTableCellNode(isHeader = false) {
2287
2331
 
2288
2332
  // src/importFromHtml/TableCellNodeHandler.ts
2289
2333
  var isHtmlTableCellElement = (node) => {
2290
- return node instanceof import_node_html_parser26.HTMLElement && (node.tagName === "TD" || node.tagName === "TH");
2334
+ return node instanceof import_node_html_parser27.HTMLElement && (node.tagName === "TD" || node.tagName === "TH");
2291
2335
  };
2292
2336
  var TableCellNodeHandler2 = class extends NodeHandler2 {
2293
2337
  processNode(node) {
@@ -2332,10 +2376,10 @@ var TableCellNodeHandler2 = class extends NodeHandler2 {
2332
2376
  };
2333
2377
 
2334
2378
  // src/importFromHtml/TableNodeHandler.ts
2335
- var import_node_html_parser27 = require("node-html-parser");
2379
+ var import_node_html_parser28 = require("node-html-parser");
2336
2380
  var REFERENCE_TABLE_WIDTH = 720;
2337
2381
  var MINIMUM_REFERENCE_TABLE_WIDTH = 500;
2338
- var isHtmlTableElement = (node) => node instanceof import_node_html_parser27.HTMLElement && node.tagName === "TABLE";
2382
+ var isHtmlTableElement = (node) => node instanceof import_node_html_parser28.HTMLElement && node.tagName === "TABLE";
2339
2383
  var TableNodeHandler2 = class extends NodeHandler2 {
2340
2384
  processNode(node) {
2341
2385
  if (!isHtmlTableElement(node)) return null;
@@ -2490,9 +2534,9 @@ var TableNodeHandler2 = class extends NodeHandler2 {
2490
2534
  };
2491
2535
 
2492
2536
  // src/importFromHtml/TableRowNodeHandler.ts
2493
- var import_node_html_parser28 = require("node-html-parser");
2537
+ var import_node_html_parser29 = require("node-html-parser");
2494
2538
  var isHtmlTableRowElement = (node) => {
2495
- return node instanceof import_node_html_parser28.HTMLElement && node.tagName === "TR";
2539
+ return node instanceof import_node_html_parser29.HTMLElement && node.tagName === "TR";
2496
2540
  };
2497
2541
  var TableRowNodeHandler2 = class extends NodeHandler2 {
2498
2542
  processNode(node) {
@@ -2515,8 +2559,8 @@ var TableRowNodeHandler2 = class extends NodeHandler2 {
2515
2559
  };
2516
2560
 
2517
2561
  // src/importFromHtml/TextNodeHandler.ts
2518
- var import_node_html_parser29 = require("node-html-parser");
2519
- var TextNode2 = import_node_html_parser29.parse.TextNode;
2562
+ var import_node_html_parser30 = require("node-html-parser");
2563
+ var TextNode2 = import_node_html_parser30.parse.TextNode;
2520
2564
  var TextNodeHandler2 = class extends NodeHandler2 {
2521
2565
  processNode(node) {
2522
2566
  if (!(node instanceof TextNode2)) return null;
@@ -2535,10 +2579,10 @@ var TextNodeHandler2 = class extends NodeHandler2 {
2535
2579
  };
2536
2580
 
2537
2581
  // src/importFromHtml/VariableNodeHandler.ts
2538
- var import_node_html_parser30 = require("node-html-parser");
2582
+ var import_node_html_parser31 = require("node-html-parser");
2539
2583
  var VariableNodeHandler2 = class extends NodeHandler2 {
2540
2584
  processNode(node) {
2541
- if (!(node instanceof import_node_html_parser30.HTMLElement) || !node.tagName) return null;
2585
+ if (!(node instanceof import_node_html_parser31.HTMLElement) || !node.tagName) return null;
2542
2586
  if (node.tagName !== "x-param".toUpperCase()) return null;
2543
2587
  return {
2544
2588
  variableName: node.getAttribute("data-x-name") || "undefined",
@@ -2551,7 +2595,7 @@ var VariableNodeHandler2 = class extends NodeHandler2 {
2551
2595
 
2552
2596
  // src/importFromHtml/traverse.ts
2553
2597
  var builder2 = new NodeHandlerChainBuilder();
2554
- var nodeHandlerChain2 = builder2.addHandler(CustomQuestionNodeHandler2).addHandler(DivNodeHandler).addHandler(EssayQuestionNodeHandler2).addHandler(ExcelQuestionNodeHandler2).addHandler(ExcelWorksheetLinkNodeHandler2).addHandler(FillInTheBlankQuestionNodeHandler2).addHandler(FillInTheBlankSpaceNodeHandler2).addHandler(FinancialStatementQuestionNodeHandler2).addHandler(FormattedNodeHandler).addHandler(HeadingNodeHandler2).addHandler(HorizontalRuleNodeHandler2).addHandler(ImageNodeHandler2).addHandler(JournalEntryQuestionNodeHandler2).addHandler(LineBreakNodeHandler2).addHandler(LinkNodeHandler2).addHandler(ListItemNodeHandler2).addHandler(ListNodeHandler2).addHandler(MatchingQuestionNodeHandler2).addHandler(MultipleOptionQuestionNodeHandler2).addHandler(ParagraphNodeHandler2).addHandler(ShortAnswerQuestionNodeHandler2).addHandler(SimulationQuestionNodeHandler2).addHandler(SpanNodeHandler).addHandler(TableCellNodeHandler2).addHandler(TableNodeHandler2).addHandler(TableRowNodeHandler2).addHandler(TextNodeHandler2).addHandler(VariableNodeHandler2).build();
2598
+ var nodeHandlerChain2 = builder2.addHandler(CustomQuestionNodeHandler2).addHandler(DivNodeHandler).addHandler(EssayQuestionNodeHandler2).addHandler(ExcelCopyTextNodeHandler2).addHandler(ExcelQuestionNodeHandler2).addHandler(ExcelWorksheetLinkNodeHandler2).addHandler(FillInTheBlankQuestionNodeHandler2).addHandler(FillInTheBlankSpaceNodeHandler2).addHandler(FinancialStatementQuestionNodeHandler2).addHandler(FormattedNodeHandler).addHandler(HeadingNodeHandler2).addHandler(HorizontalRuleNodeHandler2).addHandler(ImageNodeHandler2).addHandler(JournalEntryQuestionNodeHandler2).addHandler(LineBreakNodeHandler2).addHandler(LinkNodeHandler2).addHandler(ListItemNodeHandler2).addHandler(ListNodeHandler2).addHandler(MatchingQuestionNodeHandler2).addHandler(MultipleOptionQuestionNodeHandler2).addHandler(ParagraphNodeHandler2).addHandler(ShortAnswerQuestionNodeHandler2).addHandler(SimulationQuestionNodeHandler2).addHandler(SpanNodeHandler).addHandler(TableCellNodeHandler2).addHandler(TableNodeHandler2).addHandler(TableRowNodeHandler2).addHandler(TextNodeHandler2).addHandler(VariableNodeHandler2).build();
2555
2599
  function traverse2(node) {
2556
2600
  const result = nodeHandlerChain2.handle(node);
2557
2601
  if (result === null) return [];
@@ -2569,7 +2613,7 @@ function processChildren(node) {
2569
2613
  return result;
2570
2614
  }
2571
2615
  function processHtml(html) {
2572
- const root = (0, import_node_html_parser31.parse)(html);
2616
+ const root = (0, import_node_html_parser32.parse)(html);
2573
2617
  return processChildren(root);
2574
2618
  }
2575
2619
  function importFromHtml(html) {
package/dist/index.mjs CHANGED
@@ -77,6 +77,26 @@ var EssayQuestionNodeHandler = class extends NodeHandler {
77
77
  }
78
78
  };
79
79
 
80
+ // src/typeGuards/isSerializedExcelCopyTextNode.ts
81
+ function isSerializedExcelCopyTextNode(node) {
82
+ return node?.type === "excel-copy-text";
83
+ }
84
+
85
+ // src/exportToHtml/ExcelCopyTextNodeHandler.ts
86
+ var ExcelCopyTextNodeHandler = class extends NodeHandler {
87
+ processNode(node) {
88
+ if (!isSerializedExcelCopyTextNode(node)) return null;
89
+ const children = [];
90
+ node.children.forEach((child) => {
91
+ const childString = traverse(child);
92
+ if (childString) {
93
+ children.push(childString);
94
+ }
95
+ });
96
+ return `<x-copy>${children.join("")}</x-copy>`;
97
+ }
98
+ };
99
+
80
100
  // src/typeGuards/isSerializedExcelQuestionNode.ts
81
101
  function isSerializedExcelQuestionNode(node) {
82
102
  return node?.type === "excel-question" && "id" in node && typeof node.id === "string" && "points" in node && typeof node.points === "number" && "data" in node && typeof node.data === "object";
@@ -1010,7 +1030,7 @@ var VariableNodeHandler = class extends NodeHandler {
1010
1030
 
1011
1031
  // src/exportToHtml/traverse.ts
1012
1032
  var builder = new NodeHandlerChainBuilder();
1013
- var nodeHandlerChain = builder.addHandler(CustomQuestionNodeHandler).addHandler(EssayQuestionNodeHandler).addHandler(ExcelQuestionNodeHandler).addHandler(ExcelWorksheetLinkNodeHandler).addHandler(FillInTheBlankQuestionNodeHandler).addHandler(FillInTheBlankSpaceNodeHandler).addHandler(FinancialStatementQuestionNodeHandler).addHandler(HeadingNodeHandler).addHandler(HorizontalRuleNodeHandler).addHandler(ImageNodeHandler).addHandler(JournalEntryQuestionNodeHandler).addHandler(LineBreakNodeHandler).addHandler(LinkNodeHandler).addHandler(ListNodeHandler).addHandler(ListItemNodeHandler).addHandler(MatchingQuestionNodeHandler).addHandler(MultipleOptionQuestionNodeHandler).addHandler(ParagraphNodeHandler).addHandler(ShortAnswerQuestionNodeHandler).addHandler(SimulationQuestionNodeHandler).addHandler(TableCellNodeHandler).addHandler(TableNodeHandler).addHandler(TableRowNodeHandler).addHandler(TextNodeHandler).addHandler(VariableNodeHandler).build();
1033
+ var nodeHandlerChain = builder.addHandler(CustomQuestionNodeHandler).addHandler(EssayQuestionNodeHandler).addHandler(ExcelCopyTextNodeHandler).addHandler(ExcelQuestionNodeHandler).addHandler(ExcelWorksheetLinkNodeHandler).addHandler(FillInTheBlankQuestionNodeHandler).addHandler(FillInTheBlankSpaceNodeHandler).addHandler(FinancialStatementQuestionNodeHandler).addHandler(HeadingNodeHandler).addHandler(HorizontalRuleNodeHandler).addHandler(ImageNodeHandler).addHandler(JournalEntryQuestionNodeHandler).addHandler(LineBreakNodeHandler).addHandler(LinkNodeHandler).addHandler(ListNodeHandler).addHandler(ListItemNodeHandler).addHandler(MatchingQuestionNodeHandler).addHandler(MultipleOptionQuestionNodeHandler).addHandler(ParagraphNodeHandler).addHandler(ShortAnswerQuestionNodeHandler).addHandler(SimulationQuestionNodeHandler).addHandler(TableCellNodeHandler).addHandler(TableNodeHandler).addHandler(TableRowNodeHandler).addHandler(TextNodeHandler).addHandler(VariableNodeHandler).build();
1014
1034
  var traverse = (node, metadata) => {
1015
1035
  return nodeHandlerChain.handle(node, metadata);
1016
1036
  };
@@ -1321,6 +1341,30 @@ var EssayQuestionNodeHandler2 = class extends NodeHandler2 {
1321
1341
  }
1322
1342
  };
1323
1343
 
1344
+ // src/importFromHtml/ExcelCopyTextNodeHandler.ts
1345
+ import { HTMLElement as HTMLElement5 } from "node-html-parser";
1346
+ var ExcelCopyTextNodeHandler2 = class extends NodeHandler2 {
1347
+ isXCopyElement(node) {
1348
+ return node instanceof HTMLElement5 && node.tagName === "X-COPY";
1349
+ }
1350
+ processNode(node) {
1351
+ if (!this.isXCopyElement(node)) return null;
1352
+ const children = [];
1353
+ for (const childNode of node.childNodes) {
1354
+ const processedChildren = traverse2(childNode);
1355
+ children.push(...processedChildren);
1356
+ }
1357
+ return {
1358
+ children,
1359
+ direction: null,
1360
+ format: "",
1361
+ indent: 0,
1362
+ type: "excel-copy-text",
1363
+ version: 1
1364
+ };
1365
+ }
1366
+ };
1367
+
1324
1368
  // src/importFromHtml/createNestedEditorFromHtml.ts
1325
1369
  function createNestedEditorFromHtml(node) {
1326
1370
  return {
@@ -1338,7 +1382,7 @@ function createNestedEditorFromHtml(node) {
1338
1382
  }
1339
1383
 
1340
1384
  // src/importFromHtml/ExcelQuestionNodeHandler.ts
1341
- import { HTMLElement as HTMLElement5, parse } from "node-html-parser";
1385
+ import { HTMLElement as HTMLElement6, parse } from "node-html-parser";
1342
1386
  var TAG_X = "x-excel";
1343
1387
  function parseData(xDataString) {
1344
1388
  const xData = JSON.parse(xDataString);
@@ -1384,7 +1428,7 @@ function parseData(xDataString) {
1384
1428
  }
1385
1429
  var ExcelQuestionNodeHandler2 = class extends NodeHandler2 {
1386
1430
  processNode(node) {
1387
- if (!(node instanceof HTMLElement5) || node.tagName !== TAG_X.toUpperCase()) {
1431
+ if (!(node instanceof HTMLElement6) || node.tagName !== TAG_X.toUpperCase()) {
1388
1432
  return null;
1389
1433
  }
1390
1434
  const xDataElement = node.querySelector("x-data");
@@ -1408,11 +1452,11 @@ var ExcelQuestionNodeHandler2 = class extends NodeHandler2 {
1408
1452
  };
1409
1453
 
1410
1454
  // src/importFromHtml/ExcelWorksheetLinkNodeHandler.ts
1411
- import { HTMLElement as HTMLElement6 } from "node-html-parser";
1455
+ import { HTMLElement as HTMLElement7 } from "node-html-parser";
1412
1456
  var TAG = "x-worksheet-link";
1413
1457
  var ExcelWorksheetLinkNodeHandler2 = class extends NodeHandler2 {
1414
1458
  processNode(node) {
1415
- if (!(node instanceof HTMLElement6) || node.tagName !== TAG.toUpperCase()) {
1459
+ if (!(node instanceof HTMLElement7) || node.tagName !== TAG.toUpperCase()) {
1416
1460
  return null;
1417
1461
  }
1418
1462
  const sheetName = node.getAttribute("x-data-name") || "";
@@ -1432,10 +1476,10 @@ var ExcelWorksheetLinkNodeHandler2 = class extends NodeHandler2 {
1432
1476
 
1433
1477
  // src/importFromHtml/FillInTheBlankQuestionNodeHandler.ts
1434
1478
  import { nanoid as nanoid2 } from "nanoid";
1435
- import { HTMLElement as HTMLElement7 } from "node-html-parser";
1479
+ import { HTMLElement as HTMLElement8 } from "node-html-parser";
1436
1480
  var FillInTheBlankQuestionNodeHandler2 = class extends NodeHandler2 {
1437
1481
  processNode(node) {
1438
- if (!(node instanceof HTMLElement7) || node.tagName !== "x-fill-in-the-blank".toUpperCase())
1482
+ if (!(node instanceof HTMLElement8) || node.tagName !== "x-fill-in-the-blank".toUpperCase())
1439
1483
  return null;
1440
1484
  const jsonNode = {
1441
1485
  id: node.getAttribute("id") ?? nanoid2(),
@@ -1452,7 +1496,7 @@ var FillInTheBlankQuestionNodeHandler2 = class extends NodeHandler2 {
1452
1496
 
1453
1497
  // src/importFromHtml/FillInTheBlankSpaceNodeHandler.ts
1454
1498
  import { nanoid as nanoid3 } from "nanoid";
1455
- import { HTMLElement as HTMLElement8 } from "node-html-parser";
1499
+ import { HTMLElement as HTMLElement9 } from "node-html-parser";
1456
1500
 
1457
1501
  // src/importFromHtml/parseErrorToleranceAttribute.ts
1458
1502
  function parseErrorToleranceAttribute(attr) {
@@ -1464,7 +1508,7 @@ function parseErrorToleranceAttribute(attr) {
1464
1508
  // src/importFromHtml/FillInTheBlankSpaceNodeHandler.ts
1465
1509
  var FillInTheBlankSpaceNodeHandler2 = class extends NodeHandler2 {
1466
1510
  processNode(node) {
1467
- if (!(node instanceof HTMLElement8) || node.tagName !== "x-space".toUpperCase())
1511
+ if (!(node instanceof HTMLElement9) || node.tagName !== "x-space".toUpperCase())
1468
1512
  return null;
1469
1513
  const spaceTypeAttr = node.getAttribute("data-x-type");
1470
1514
  const spaceType = spaceTypeAttr === "Text" || spaceTypeAttr === "Number" || spaceTypeAttr === "Dropdown" ? spaceTypeAttr : "Text";
@@ -1515,7 +1559,7 @@ var FillInTheBlankSpaceNodeHandler2 = class extends NodeHandler2 {
1515
1559
 
1516
1560
  // src/importFromHtml/FinancialStatementQuestionNodeHandler.ts
1517
1561
  import { nanoid as nanoid4 } from "nanoid";
1518
- import { HTMLElement as HTMLElement9 } from "node-html-parser";
1562
+ import { HTMLElement as HTMLElement10 } from "node-html-parser";
1519
1563
  var TAG_X_FINANCIAL_STATEMENT = "x-financial-statement";
1520
1564
  var TAG_X_HEADER = "x-header";
1521
1565
  var TAG_X_ROWS = "x-rows";
@@ -1529,7 +1573,7 @@ var isLineRole = (value) => value === "line-item" || value === "subtotal" || val
1529
1573
  var parseLineRole = (value) => isLineRole(value) ? value : null;
1530
1574
  var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1531
1575
  processNode(node) {
1532
- if (!(node instanceof HTMLElement9) || node.tagName !== TAG_X_FINANCIAL_STATEMENT.toUpperCase()) {
1576
+ if (!(node instanceof HTMLElement10) || node.tagName !== TAG_X_FINANCIAL_STATEMENT.toUpperCase()) {
1533
1577
  return null;
1534
1578
  }
1535
1579
  const headerElement = node.querySelector(TAG_X_HEADER);
@@ -1544,7 +1588,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1544
1588
  version: 1
1545
1589
  };
1546
1590
  node.childNodes.forEach((child) => {
1547
- if (!(child instanceof HTMLElement9)) return;
1591
+ if (!(child instanceof HTMLElement10)) return;
1548
1592
  if (child.tagName === TAG_X_DISTRACTORS.toUpperCase()) {
1549
1593
  this.processDistractorsNode(child, jsonNode);
1550
1594
  } else if (child.tagName === TAG_X_ROWS.toUpperCase()) {
@@ -1555,7 +1599,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1555
1599
  }
1556
1600
  processDistractorsNode(distractorsNode, jsonNode) {
1557
1601
  for (const distractorsChild of distractorsNode.childNodes) {
1558
- if (!(distractorsChild instanceof HTMLElement9)) continue;
1602
+ if (!(distractorsChild instanceof HTMLElement10)) continue;
1559
1603
  if (distractorsChild.tagName !== TAG_X_DISTRACTOR.toUpperCase())
1560
1604
  continue;
1561
1605
  jsonNode.distractors.push({
@@ -1574,7 +1618,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1574
1618
  const contentDiv = headerElement.querySelector(
1575
1619
  'div > div:not([style*="display:flex"])'
1576
1620
  );
1577
- if (contentDiv && contentDiv instanceof HTMLElement9)
1621
+ if (contentDiv && contentDiv instanceof HTMLElement10)
1578
1622
  return createNestedEditorFromHtml(contentDiv);
1579
1623
  }
1580
1624
  return createNestedEditorFromHtml(headerElement);
@@ -1591,7 +1635,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1591
1635
  }
1592
1636
  processRowsNode(rowsNode, jsonNode) {
1593
1637
  for (const rowsChild of rowsNode.childNodes) {
1594
- if (!(rowsChild instanceof HTMLElement9)) continue;
1638
+ if (!(rowsChild instanceof HTMLElement10)) continue;
1595
1639
  if (rowsChild.tagName === TAG_X_HEADING.toUpperCase()) {
1596
1640
  this.processHeadingRow(rowsChild, jsonNode);
1597
1641
  } else if (rowsChild.tagName === TAG_X_LINE.toUpperCase()) {
@@ -1627,7 +1671,7 @@ var FinancialStatementQuestionNodeHandler2 = class extends NodeHandler2 {
1627
1671
  };
1628
1672
 
1629
1673
  // src/importFromHtml/FormattedNodeHandler.ts
1630
- import { HTMLElement as HTMLElement10 } from "node-html-parser";
1674
+ import { HTMLElement as HTMLElement11 } from "node-html-parser";
1631
1675
  var IS_BOLD2 = 1;
1632
1676
  var IS_ITALIC2 = 1 << 1;
1633
1677
  var IS_STRIKETHROUGH2 = 1 << 2;
@@ -1667,7 +1711,7 @@ function formatToProps(format) {
1667
1711
  }
1668
1712
  var FormattedNodeHandler = class extends NodeHandler2 {
1669
1713
  processNode(node) {
1670
- if (!(node instanceof HTMLElement10)) return null;
1714
+ if (!(node instanceof HTMLElement11)) return null;
1671
1715
  const tagName = node.tagName;
1672
1716
  if (!tagName || !(tagName in TAG_TO_FORMAT)) return null;
1673
1717
  const formatFlag = TAG_TO_FORMAT[tagName];
@@ -1702,7 +1746,7 @@ var FormattedNodeHandler = class extends NodeHandler2 {
1702
1746
  };
1703
1747
 
1704
1748
  // src/importFromHtml/HeadingNodeHandler.ts
1705
- import { HTMLElement as HTMLElement11 } from "node-html-parser";
1749
+ import { HTMLElement as HTMLElement12 } from "node-html-parser";
1706
1750
 
1707
1751
  // src/importFromHtml/extractTextAlignment.ts
1708
1752
  var TEXT_ALIGN_TO_FORMAT = {
@@ -1730,7 +1774,7 @@ function extractTextAlignment(element) {
1730
1774
  var TAG_HEADINGS = ["h1", "h2", "h3", "h4", "h5", "h6"];
1731
1775
  var HeadingNodeHandler2 = class extends NodeHandler2 {
1732
1776
  processNode(node) {
1733
- if (!(node instanceof HTMLElement11) || !TAG_HEADINGS.includes(node.tagName.toLowerCase())) {
1777
+ if (!(node instanceof HTMLElement12) || !TAG_HEADINGS.includes(node.tagName.toLowerCase())) {
1734
1778
  return null;
1735
1779
  }
1736
1780
  const headingNode = {
@@ -1751,11 +1795,11 @@ var HeadingNodeHandler2 = class extends NodeHandler2 {
1751
1795
  };
1752
1796
 
1753
1797
  // src/importFromHtml/HorizontalRuleNodeHandler.ts
1754
- import { HTMLElement as HTMLElement12 } from "node-html-parser";
1798
+ import { HTMLElement as HTMLElement13 } from "node-html-parser";
1755
1799
  var TAG_HR = "hr";
1756
1800
  var HorizontalRuleNodeHandler2 = class extends NodeHandler2 {
1757
1801
  processNode(node) {
1758
- if (!(node instanceof HTMLElement12) || node.tagName !== TAG_HR.toUpperCase()) {
1802
+ if (!(node instanceof HTMLElement13) || node.tagName !== TAG_HR.toUpperCase()) {
1759
1803
  return null;
1760
1804
  }
1761
1805
  const horizontalRuleNode = {
@@ -1767,11 +1811,11 @@ var HorizontalRuleNodeHandler2 = class extends NodeHandler2 {
1767
1811
  };
1768
1812
 
1769
1813
  // src/importFromHtml/ImageNodeHandler.ts
1770
- import { HTMLElement as HTMLElement13 } from "node-html-parser";
1814
+ import { HTMLElement as HTMLElement14 } from "node-html-parser";
1771
1815
  var TAG_IMG = "img";
1772
1816
  var ImageNodeHandler2 = class extends NodeHandler2 {
1773
1817
  processNode(node) {
1774
- if (!(node instanceof HTMLElement13) || node.tagName !== TAG_IMG.toUpperCase()) {
1818
+ if (!(node instanceof HTMLElement14) || node.tagName !== TAG_IMG.toUpperCase()) {
1775
1819
  return null;
1776
1820
  }
1777
1821
  return createImageNode(
@@ -1787,11 +1831,11 @@ var ImageNodeHandler2 = class extends NodeHandler2 {
1787
1831
 
1788
1832
  // src/importFromHtml/JournalEntryQuestionNodeHandler.ts
1789
1833
  import { nanoid as nanoid6 } from "nanoid";
1790
- import { HTMLElement as HTMLElement15 } from "node-html-parser";
1834
+ import { HTMLElement as HTMLElement16 } from "node-html-parser";
1791
1835
 
1792
1836
  // src/importFromHtml/createOnePerLineDistractorNode.ts
1793
1837
  import { nanoid as nanoid5 } from "nanoid";
1794
- import { HTMLElement as HTMLElement14 } from "node-html-parser";
1838
+ import { HTMLElement as HTMLElement15 } from "node-html-parser";
1795
1839
  function extractDistractorId(id) {
1796
1840
  if (!id) return null;
1797
1841
  const parts = id.split("|");
@@ -1804,7 +1848,7 @@ var createOnePerLineDistractorNode = (node) => {
1804
1848
  distractorEditor.editorState.root.children = [];
1805
1849
  let distractorId = null;
1806
1850
  distractors.forEach((distractor) => {
1807
- if (!(distractor instanceof HTMLElement14)) return;
1851
+ if (!(distractor instanceof HTMLElement15)) return;
1808
1852
  distractorId = distractorId ?? extractDistractorId(distractor.getAttribute("id"));
1809
1853
  distractorEditor.editorState.root.children.push(
1810
1854
  ...createNestedNodesFromHtml(distractor)
@@ -1822,7 +1866,7 @@ var createOnePerLineDistractorNode = (node) => {
1822
1866
  // src/importFromHtml/JournalEntryQuestionNodeHandler.ts
1823
1867
  var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
1824
1868
  processNode(node) {
1825
- if (!(node instanceof HTMLElement15) || node.tagName !== "x-journal-entry".toUpperCase())
1869
+ if (!(node instanceof HTMLElement16) || node.tagName !== "x-journal-entry".toUpperCase())
1826
1870
  return null;
1827
1871
  const jsonNode = {
1828
1872
  id: node.getAttribute("id") ?? nanoid6(),
@@ -1837,7 +1881,7 @@ var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
1837
1881
  };
1838
1882
  const lineItems = node.querySelectorAll("x-line-item");
1839
1883
  lineItems.forEach((lineItem) => {
1840
- if (!(lineItem instanceof HTMLElement15)) return;
1884
+ if (!(lineItem instanceof HTMLElement16)) return;
1841
1885
  const accountElement = lineItem.querySelector("x-account");
1842
1886
  const debitElement = lineItem.querySelector("x-debit");
1843
1887
  const creditElement = lineItem.querySelector("x-credit");
@@ -1866,10 +1910,10 @@ var JournalEntryQuestionNodeHandler2 = class extends NodeHandler2 {
1866
1910
  };
1867
1911
 
1868
1912
  // src/importFromHtml/LineBreakNodeHandler.ts
1869
- import { HTMLElement as HTMLElement16 } from "node-html-parser";
1913
+ import { HTMLElement as HTMLElement17 } from "node-html-parser";
1870
1914
  var LineBreakNodeHandler2 = class extends NodeHandler2 {
1871
1915
  processNode(node) {
1872
- if (!(node instanceof HTMLElement16)) return null;
1916
+ if (!(node instanceof HTMLElement17)) return null;
1873
1917
  if (node.tagName !== "BR") return null;
1874
1918
  return {
1875
1919
  type: "linebreak",
@@ -1879,11 +1923,11 @@ var LineBreakNodeHandler2 = class extends NodeHandler2 {
1879
1923
  };
1880
1924
 
1881
1925
  // src/importFromHtml/LinkNodeHandler.ts
1882
- import { HTMLElement as HTMLElement17 } from "node-html-parser";
1926
+ import { HTMLElement as HTMLElement18 } from "node-html-parser";
1883
1927
  var TAG_A = "a";
1884
1928
  var LinkNodeHandler2 = class extends NodeHandler2 {
1885
1929
  processNode(node) {
1886
- if (!(node instanceof HTMLElement17) || node.tagName !== TAG_A.toUpperCase()) {
1930
+ if (!(node instanceof HTMLElement18) || node.tagName !== TAG_A.toUpperCase()) {
1887
1931
  return null;
1888
1932
  }
1889
1933
  const url = node.getAttribute("href") || "";
@@ -1912,10 +1956,10 @@ var LinkNodeHandler2 = class extends NodeHandler2 {
1912
1956
  };
1913
1957
 
1914
1958
  // src/importFromHtml/ListItemNodeHandler.ts
1915
- import { HTMLElement as HTMLElement18 } from "node-html-parser";
1959
+ import { HTMLElement as HTMLElement19 } from "node-html-parser";
1916
1960
  var ListItemNodeHandler2 = class extends NodeHandler2 {
1917
1961
  processNode(node) {
1918
- if (!(node instanceof HTMLElement18)) return null;
1962
+ if (!(node instanceof HTMLElement19)) return null;
1919
1963
  if (node.tagName !== "LI") return null;
1920
1964
  const jsonNode = {
1921
1965
  type: "listitem",
@@ -1936,10 +1980,10 @@ var ListItemNodeHandler2 = class extends NodeHandler2 {
1936
1980
  };
1937
1981
 
1938
1982
  // src/importFromHtml/ListNodeHandler.ts
1939
- import { HTMLElement as HTMLElement19 } from "node-html-parser";
1983
+ import { HTMLElement as HTMLElement20 } from "node-html-parser";
1940
1984
  var ListNodeHandler2 = class extends NodeHandler2 {
1941
1985
  processNode(node) {
1942
- if (!(node instanceof HTMLElement19)) return null;
1986
+ if (!(node instanceof HTMLElement20)) return null;
1943
1987
  if (node.tagName !== "UL" && node.tagName !== "OL") return null;
1944
1988
  const tag = node.tagName.toLowerCase();
1945
1989
  const listType = tag === "ol" ? "number" : "bullet";
@@ -1957,7 +2001,7 @@ var ListNodeHandler2 = class extends NodeHandler2 {
1957
2001
  };
1958
2002
  let itemIndex = 1;
1959
2003
  node.childNodes.forEach((child) => {
1960
- if (child instanceof HTMLElement19 && child.tagName === "LI") {
2004
+ if (child instanceof HTMLElement20 && child.tagName === "LI") {
1961
2005
  const listItemNode = {
1962
2006
  type: "listitem",
1963
2007
  version: 1,
@@ -1982,10 +2026,10 @@ var ListNodeHandler2 = class extends NodeHandler2 {
1982
2026
 
1983
2027
  // src/importFromHtml/MatchingQuestionNodeHandler.ts
1984
2028
  import { nanoid as nanoid7 } from "nanoid";
1985
- import { HTMLElement as HTMLElement20 } from "node-html-parser";
2029
+ import { HTMLElement as HTMLElement21 } from "node-html-parser";
1986
2030
  var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
1987
2031
  processNode(node) {
1988
- if (!(node instanceof HTMLElement20) || node.tagName !== "x-matching".toUpperCase())
2032
+ if (!(node instanceof HTMLElement21) || node.tagName !== "x-matching".toUpperCase())
1989
2033
  return null;
1990
2034
  const jsonNode = {
1991
2035
  id: node.getAttribute("id") ?? nanoid7(),
@@ -1998,7 +2042,7 @@ var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
1998
2042
  };
1999
2043
  const matches = node.querySelectorAll("x-match");
2000
2044
  matches.forEach((match) => {
2001
- if (!(match instanceof HTMLElement20)) return;
2045
+ if (!(match instanceof HTMLElement21)) return;
2002
2046
  const premise = match.querySelector("x-premise");
2003
2047
  const option = match.querySelector("x-option");
2004
2048
  if (!premise || !option) return;
@@ -2021,10 +2065,10 @@ var MatchingQuestionNodeHandler2 = class extends NodeHandler2 {
2021
2065
 
2022
2066
  // src/importFromHtml/MultipleOptionQuestionNodeHandler.ts
2023
2067
  import { nanoid as nanoid8 } from "nanoid";
2024
- import { HTMLElement as HTMLElement21 } from "node-html-parser";
2068
+ import { HTMLElement as HTMLElement22 } from "node-html-parser";
2025
2069
  var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
2026
2070
  processNode(node) {
2027
- if (!(node instanceof HTMLElement21)) return null;
2071
+ if (!(node instanceof HTMLElement22)) return null;
2028
2072
  if (node.tagName === "x-multiple-choice".toUpperCase())
2029
2073
  return this.processMultipleChoiceNode(node);
2030
2074
  else if (node.tagName === "x-multiple-answers".toUpperCase())
@@ -2064,7 +2108,7 @@ var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
2064
2108
  processOptions(node, jsonNode) {
2065
2109
  const childNodes = node.childNodes;
2066
2110
  childNodes.forEach((child) => {
2067
- if (!(child instanceof HTMLElement21)) return;
2111
+ if (!(child instanceof HTMLElement22)) return;
2068
2112
  if (child.tagName !== "x-option".toUpperCase()) return;
2069
2113
  jsonNode.options.push({
2070
2114
  id: child.getAttribute("id") ?? nanoid8(),
@@ -2076,28 +2120,28 @@ var MultipleOptionQuestionNodeHandler2 = class extends NodeHandler2 {
2076
2120
  };
2077
2121
 
2078
2122
  // src/importFromHtml/ParagraphNodeHandler.ts
2079
- import { HTMLElement as HTMLElement22 } from "node-html-parser";
2123
+ import { HTMLElement as HTMLElement23 } from "node-html-parser";
2080
2124
  var ParagraphNodeHandler2 = class extends NodeHandler2 {
2081
2125
  processImageNode(node) {
2082
- if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement22 && node.childNodes[0].tagName === "IMG") {
2126
+ if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement23 && node.childNodes[0].tagName === "IMG") {
2083
2127
  return traverse2(node.childNodes[0]);
2084
2128
  }
2085
2129
  return null;
2086
2130
  }
2087
2131
  processSpanImageNode(node) {
2088
- if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement22 && node.childNodes[0].tagName === "SPAN" && node.childNodes[0].childNodes.length === 1 && node.childNodes[0].childNodes[0] instanceof HTMLElement22 && node.childNodes[0].childNodes[0].tagName === "IMG") {
2132
+ if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement23 && node.childNodes[0].tagName === "SPAN" && node.childNodes[0].childNodes.length === 1 && node.childNodes[0].childNodes[0] instanceof HTMLElement23 && node.childNodes[0].childNodes[0].tagName === "IMG") {
2089
2133
  return traverse2(node.childNodes[0].childNodes[0]);
2090
2134
  }
2091
2135
  return null;
2092
2136
  }
2093
2137
  processNode(node) {
2094
- if (!(node instanceof HTMLElement22)) return null;
2138
+ if (!(node instanceof HTMLElement23)) return null;
2095
2139
  if (node.tagName !== "P") return null;
2096
2140
  const imageNode = this.processImageNode(node) ?? this.processSpanImageNode(node);
2097
2141
  if (imageNode) return imageNode;
2098
2142
  const jsonNode = createEmptyParagraphNode();
2099
2143
  jsonNode.format = extractTextAlignment(node);
2100
- if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement22 && node.childNodes[0].tagName === "BR")
2144
+ if (node.childNodes.length === 1 && node.childNodes[0] instanceof HTMLElement23 && node.childNodes[0].tagName === "BR")
2101
2145
  return jsonNode;
2102
2146
  node.childNodes.forEach((child) => {
2103
2147
  const processedChildren = traverse2(child);
@@ -2109,10 +2153,10 @@ var ParagraphNodeHandler2 = class extends NodeHandler2 {
2109
2153
 
2110
2154
  // src/importFromHtml/ShortAnswerQuestionNodeHandler.ts
2111
2155
  import { nanoid as nanoid9 } from "nanoid";
2112
- import { HTMLElement as HTMLElement23 } from "node-html-parser";
2156
+ import { HTMLElement as HTMLElement24 } from "node-html-parser";
2113
2157
  var ShortAnswerQuestionNodeHandler2 = class extends NodeHandler2 {
2114
2158
  processNode(node) {
2115
- if (!(node instanceof HTMLElement23) || node.tagName !== "x-short-answer".toUpperCase())
2159
+ if (!(node instanceof HTMLElement24) || node.tagName !== "x-short-answer".toUpperCase())
2116
2160
  return null;
2117
2161
  return {
2118
2162
  id: node.getAttribute("id") ?? nanoid9(),
@@ -2128,7 +2172,7 @@ var ShortAnswerQuestionNodeHandler2 = class extends NodeHandler2 {
2128
2172
  };
2129
2173
 
2130
2174
  // src/importFromHtml/SimulationQuestionNodeHandler.ts
2131
- import { HTMLElement as HTMLElement24 } from "node-html-parser";
2175
+ import { HTMLElement as HTMLElement25 } from "node-html-parser";
2132
2176
  var TAG_X_SIMULATION = "x-simulation";
2133
2177
  var TAG_X_SYSTEM_MESSAGE2 = "x-ai-system-message";
2134
2178
  var TAG_X_COMMENT_INSTRUCTIONS = "x-comment-instructions";
@@ -2136,7 +2180,7 @@ var TAG_X_STEP2_INSTRUCTIONS = "x-step2-instructions";
2136
2180
  var findFirstNonEmptyInnerHtml = (root, elementNames) => elementNames.map((name) => root.querySelector(name)).find((el) => el?.innerHTML.trim().length)?.innerHTML.trim() ?? null;
2137
2181
  var SimulationQuestionNodeHandler2 = class extends NodeHandler2 {
2138
2182
  processNode(node) {
2139
- if (!(node instanceof HTMLElement24) || node.tagName !== TAG_X_SIMULATION.toUpperCase()) {
2183
+ if (!(node instanceof HTMLElement25) || node.tagName !== TAG_X_SIMULATION.toUpperCase()) {
2140
2184
  return null;
2141
2185
  }
2142
2186
  const jsonNode = {
@@ -2157,11 +2201,11 @@ var SimulationQuestionNodeHandler2 = class extends NodeHandler2 {
2157
2201
  };
2158
2202
 
2159
2203
  // src/importFromHtml/SpanNodeHandler.ts
2160
- import { HTMLElement as HTMLElement25, parse as parse2 } from "node-html-parser";
2204
+ import { HTMLElement as HTMLElement26, parse as parse2 } from "node-html-parser";
2161
2205
  var TextNode = parse2.TextNode;
2162
2206
  var SpanNodeHandler = class extends NodeHandler2 {
2163
2207
  processNode(node) {
2164
- if (!(node instanceof HTMLElement25) || node.tagName !== "SPAN")
2208
+ if (!(node instanceof HTMLElement26) || node.tagName !== "SPAN")
2165
2209
  return null;
2166
2210
  const styleAttr = node.getAttribute("style") || "";
2167
2211
  if (node.childNodes.length === 1 && node.childNodes[0] instanceof TextNode) {
@@ -2223,7 +2267,7 @@ var SpanNodeHandler = class extends NodeHandler2 {
2223
2267
  };
2224
2268
 
2225
2269
  // src/importFromHtml/TableCellNodeHandler.ts
2226
- import { HTMLElement as HTMLElement26 } from "node-html-parser";
2270
+ import { HTMLElement as HTMLElement27 } from "node-html-parser";
2227
2271
 
2228
2272
  // src/importFromHtml/createTableNodes.ts
2229
2273
  function createEmptyTableNode() {
@@ -2260,7 +2304,7 @@ function createEmptyTableCellNode(isHeader = false) {
2260
2304
 
2261
2305
  // src/importFromHtml/TableCellNodeHandler.ts
2262
2306
  var isHtmlTableCellElement = (node) => {
2263
- return node instanceof HTMLElement26 && (node.tagName === "TD" || node.tagName === "TH");
2307
+ return node instanceof HTMLElement27 && (node.tagName === "TD" || node.tagName === "TH");
2264
2308
  };
2265
2309
  var TableCellNodeHandler2 = class extends NodeHandler2 {
2266
2310
  processNode(node) {
@@ -2305,10 +2349,10 @@ var TableCellNodeHandler2 = class extends NodeHandler2 {
2305
2349
  };
2306
2350
 
2307
2351
  // src/importFromHtml/TableNodeHandler.ts
2308
- import { HTMLElement as HTMLElement27 } from "node-html-parser";
2352
+ import { HTMLElement as HTMLElement28 } from "node-html-parser";
2309
2353
  var REFERENCE_TABLE_WIDTH = 720;
2310
2354
  var MINIMUM_REFERENCE_TABLE_WIDTH = 500;
2311
- var isHtmlTableElement = (node) => node instanceof HTMLElement27 && node.tagName === "TABLE";
2355
+ var isHtmlTableElement = (node) => node instanceof HTMLElement28 && node.tagName === "TABLE";
2312
2356
  var TableNodeHandler2 = class extends NodeHandler2 {
2313
2357
  processNode(node) {
2314
2358
  if (!isHtmlTableElement(node)) return null;
@@ -2463,9 +2507,9 @@ var TableNodeHandler2 = class extends NodeHandler2 {
2463
2507
  };
2464
2508
 
2465
2509
  // src/importFromHtml/TableRowNodeHandler.ts
2466
- import { HTMLElement as HTMLElement28 } from "node-html-parser";
2510
+ import { HTMLElement as HTMLElement29 } from "node-html-parser";
2467
2511
  var isHtmlTableRowElement = (node) => {
2468
- return node instanceof HTMLElement28 && node.tagName === "TR";
2512
+ return node instanceof HTMLElement29 && node.tagName === "TR";
2469
2513
  };
2470
2514
  var TableRowNodeHandler2 = class extends NodeHandler2 {
2471
2515
  processNode(node) {
@@ -2508,10 +2552,10 @@ var TextNodeHandler2 = class extends NodeHandler2 {
2508
2552
  };
2509
2553
 
2510
2554
  // src/importFromHtml/VariableNodeHandler.ts
2511
- import { HTMLElement as HTMLElement29 } from "node-html-parser";
2555
+ import { HTMLElement as HTMLElement30 } from "node-html-parser";
2512
2556
  var VariableNodeHandler2 = class extends NodeHandler2 {
2513
2557
  processNode(node) {
2514
- if (!(node instanceof HTMLElement29) || !node.tagName) return null;
2558
+ if (!(node instanceof HTMLElement30) || !node.tagName) return null;
2515
2559
  if (node.tagName !== "x-param".toUpperCase()) return null;
2516
2560
  return {
2517
2561
  variableName: node.getAttribute("data-x-name") || "undefined",
@@ -2524,7 +2568,7 @@ var VariableNodeHandler2 = class extends NodeHandler2 {
2524
2568
 
2525
2569
  // src/importFromHtml/traverse.ts
2526
2570
  var builder2 = new NodeHandlerChainBuilder();
2527
- var nodeHandlerChain2 = builder2.addHandler(CustomQuestionNodeHandler2).addHandler(DivNodeHandler).addHandler(EssayQuestionNodeHandler2).addHandler(ExcelQuestionNodeHandler2).addHandler(ExcelWorksheetLinkNodeHandler2).addHandler(FillInTheBlankQuestionNodeHandler2).addHandler(FillInTheBlankSpaceNodeHandler2).addHandler(FinancialStatementQuestionNodeHandler2).addHandler(FormattedNodeHandler).addHandler(HeadingNodeHandler2).addHandler(HorizontalRuleNodeHandler2).addHandler(ImageNodeHandler2).addHandler(JournalEntryQuestionNodeHandler2).addHandler(LineBreakNodeHandler2).addHandler(LinkNodeHandler2).addHandler(ListItemNodeHandler2).addHandler(ListNodeHandler2).addHandler(MatchingQuestionNodeHandler2).addHandler(MultipleOptionQuestionNodeHandler2).addHandler(ParagraphNodeHandler2).addHandler(ShortAnswerQuestionNodeHandler2).addHandler(SimulationQuestionNodeHandler2).addHandler(SpanNodeHandler).addHandler(TableCellNodeHandler2).addHandler(TableNodeHandler2).addHandler(TableRowNodeHandler2).addHandler(TextNodeHandler2).addHandler(VariableNodeHandler2).build();
2571
+ var nodeHandlerChain2 = builder2.addHandler(CustomQuestionNodeHandler2).addHandler(DivNodeHandler).addHandler(EssayQuestionNodeHandler2).addHandler(ExcelCopyTextNodeHandler2).addHandler(ExcelQuestionNodeHandler2).addHandler(ExcelWorksheetLinkNodeHandler2).addHandler(FillInTheBlankQuestionNodeHandler2).addHandler(FillInTheBlankSpaceNodeHandler2).addHandler(FinancialStatementQuestionNodeHandler2).addHandler(FormattedNodeHandler).addHandler(HeadingNodeHandler2).addHandler(HorizontalRuleNodeHandler2).addHandler(ImageNodeHandler2).addHandler(JournalEntryQuestionNodeHandler2).addHandler(LineBreakNodeHandler2).addHandler(LinkNodeHandler2).addHandler(ListItemNodeHandler2).addHandler(ListNodeHandler2).addHandler(MatchingQuestionNodeHandler2).addHandler(MultipleOptionQuestionNodeHandler2).addHandler(ParagraphNodeHandler2).addHandler(ShortAnswerQuestionNodeHandler2).addHandler(SimulationQuestionNodeHandler2).addHandler(SpanNodeHandler).addHandler(TableCellNodeHandler2).addHandler(TableNodeHandler2).addHandler(TableRowNodeHandler2).addHandler(TextNodeHandler2).addHandler(VariableNodeHandler2).build();
2528
2572
  function traverse2(node) {
2529
2573
  const result = nodeHandlerChain2.handle(node);
2530
2574
  if (result === null) return [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@examind/block-sdk",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "@comment version": [
5
5
  "Don't specify package version here. It will be injected by publish workflow."
6
6
  ],
@@ -21,7 +21,7 @@
21
21
  "peerDependencies": {
22
22
  "nanoid": ">=3.0.0",
23
23
  "node-html-parser": ">=6.0.0",
24
- "@examind/block-types": "^0.5.0"
24
+ "@examind/block-types": "^0.6.1"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@eslint/js": "^9.17.0",
@@ -36,7 +36,7 @@
36
36
  "tsup": "^8.3.5",
37
37
  "typescript": "^5.7.2",
38
38
  "typescript-eslint": "^8.18.2",
39
- "@examind/block-types": "0.5.0"
39
+ "@examind/block-types": "0.6.1"
40
40
  },
41
41
  "dependencies": {
42
42
  "lodash-es": "4.17.21"