@tiptap/core 3.20.0 → 3.20.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.
package/dist/index.cjs CHANGED
@@ -1564,6 +1564,67 @@ function getAttributesFromExtensions(extensions) {
1564
1564
  }
1565
1565
 
1566
1566
  // src/utilities/mergeAttributes.ts
1567
+ function splitStyleDeclarations(styles) {
1568
+ const result = [];
1569
+ let current = "";
1570
+ let inSingleQuote = false;
1571
+ let inDoubleQuote = false;
1572
+ let parenDepth = 0;
1573
+ const length = styles.length;
1574
+ for (let i = 0; i < length; i += 1) {
1575
+ const char = styles[i];
1576
+ if (char === "'" && !inDoubleQuote) {
1577
+ inSingleQuote = !inSingleQuote;
1578
+ current += char;
1579
+ continue;
1580
+ }
1581
+ if (char === '"' && !inSingleQuote) {
1582
+ inDoubleQuote = !inDoubleQuote;
1583
+ current += char;
1584
+ continue;
1585
+ }
1586
+ if (!inSingleQuote && !inDoubleQuote) {
1587
+ if (char === "(") {
1588
+ parenDepth += 1;
1589
+ current += char;
1590
+ continue;
1591
+ }
1592
+ if (char === ")" && parenDepth > 0) {
1593
+ parenDepth -= 1;
1594
+ current += char;
1595
+ continue;
1596
+ }
1597
+ if (char === ";" && parenDepth === 0) {
1598
+ result.push(current);
1599
+ current = "";
1600
+ continue;
1601
+ }
1602
+ }
1603
+ current += char;
1604
+ }
1605
+ if (current) {
1606
+ result.push(current);
1607
+ }
1608
+ return result;
1609
+ }
1610
+ function parseStyleEntries(styles) {
1611
+ const pairs = [];
1612
+ const declarations = splitStyleDeclarations(styles || "");
1613
+ const numDeclarations = declarations.length;
1614
+ for (let i = 0; i < numDeclarations; i += 1) {
1615
+ const declaration = declarations[i];
1616
+ const firstColonIndex = declaration.indexOf(":");
1617
+ if (firstColonIndex === -1) {
1618
+ continue;
1619
+ }
1620
+ const property = declaration.slice(0, firstColonIndex).trim();
1621
+ const value = declaration.slice(firstColonIndex + 1).trim();
1622
+ if (property && value) {
1623
+ pairs.push([property, value]);
1624
+ }
1625
+ }
1626
+ return pairs;
1627
+ }
1567
1628
  function mergeAttributes(...objects) {
1568
1629
  return objects.filter((item) => !!item).reduce((items, item) => {
1569
1630
  const mergedAttributes = { ...items };
@@ -1579,17 +1640,7 @@ function mergeAttributes(...objects) {
1579
1640
  const insertClasses = valueClasses.filter((valueClass) => !existingClasses.includes(valueClass));
1580
1641
  mergedAttributes[key] = [...existingClasses, ...insertClasses].join(" ");
1581
1642
  } else if (key === "style") {
1582
- const newStyles = value ? value.split(";").map((style2) => style2.trim()).filter(Boolean) : [];
1583
- const existingStyles = mergedAttributes[key] ? mergedAttributes[key].split(";").map((style2) => style2.trim()).filter(Boolean) : [];
1584
- const styleMap = /* @__PURE__ */ new Map();
1585
- existingStyles.forEach((style2) => {
1586
- const [property, val] = style2.split(":").map((part) => part.trim());
1587
- styleMap.set(property, val);
1588
- });
1589
- newStyles.forEach((style2) => {
1590
- const [property, val] = style2.split(":").map((part) => part.trim());
1591
- styleMap.set(property, val);
1592
- });
1643
+ const styleMap = new Map([...parseStyleEntries(mergedAttributes[key]), ...parseStyleEntries(value)]);
1593
1644
  mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join("; ");
1594
1645
  } else {
1595
1646
  mergedAttributes[key] = value;