ooxml-core 1.0.0 → 1.1.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/{PptxHandler-G63S6YZU.mjs → PptxHandler-75LOVF7I.mjs} +2 -2
- package/dist/automation/index.cjs +2559 -1169
- package/dist/automation/index.mjs +2559 -1169
- package/dist/chart/gradient-definition.d.ts +2 -2
- package/dist/chart/gradient-definition.d.ts.map +1 -1
- package/dist/chart/index.cjs +7 -7
- package/dist/chart/index.mjs +7 -7
- package/dist/{chunk-BICQYRPW.mjs → chunk-75LA7H3F.mjs} +1339 -1435
- package/dist/{chunk-CKJSWE7N.mjs → chunk-LA7D6ZYQ.mjs} +244 -115
- package/dist/{chunk-ROM5MZ7O.mjs → chunk-OMGH6IKY.mjs} +3 -3
- package/dist/{chunk-RWXFQJVF.mjs → chunk-Q27H4HFS.mjs} +1 -1
- package/dist/{chunk-DDG5HTGX.mjs → chunk-RFX7AJDZ.mjs} +1 -1
- package/dist/crypto/index.cjs +1406 -184
- package/dist/crypto/index.mjs +1406 -184
- package/dist/diagram/dom.d.ts +1 -14
- package/dist/diagram/dom.d.ts.map +1 -1
- package/dist/diagram/index.cjs +15 -15
- package/dist/diagram/index.d.ts +12 -12
- package/dist/diagram/index.d.ts.map +1 -1
- package/dist/diagram/index.mjs +15 -15
- package/dist/diagram/types.d.ts +12 -148
- package/dist/diagram/types.d.ts.map +1 -1
- package/dist/digest/algorithm-names.d.ts +2 -2
- package/dist/digest/algorithm-names.d.ts.map +1 -1
- package/dist/digest/bit-ops.d.ts +30 -0
- package/dist/digest/bit-ops.d.ts.map +1 -0
- package/dist/digest/digest.d.ts +2 -2
- package/dist/digest/digest.d.ts.map +1 -1
- package/dist/digest/index.cjs +1319 -90
- package/dist/digest/index.d.ts +7 -1
- package/dist/digest/index.d.ts.map +1 -1
- package/dist/digest/index.mjs +1313 -91
- package/dist/digest/md2.d.ts +22 -0
- package/dist/digest/md2.d.ts.map +1 -0
- package/dist/digest/md4.d.ts +3 -0
- package/dist/digest/md4.d.ts.map +1 -0
- package/dist/digest/md5.d.ts +3 -0
- package/dist/digest/md5.d.ts.map +1 -0
- package/dist/digest/password-hash.d.ts +7 -0
- package/dist/digest/password-hash.d.ts.map +1 -1
- package/dist/digest/ripemd-functions.d.ts +18 -0
- package/dist/digest/ripemd-functions.d.ts.map +1 -0
- package/dist/digest/ripemd128.d.ts +3 -0
- package/dist/digest/ripemd128.d.ts.map +1 -0
- package/dist/digest/ripemd160.d.ts +3 -0
- package/dist/digest/ripemd160.d.ts.map +1 -0
- package/dist/digest/whirlpool-sbox.d.ts +15 -0
- package/dist/digest/whirlpool-sbox.d.ts.map +1 -0
- package/dist/digest/whirlpool-table.d.ts +12 -0
- package/dist/digest/whirlpool-table.d.ts.map +1 -0
- package/dist/digest/whirlpool.d.ts +3 -0
- package/dist/digest/whirlpool.d.ts.map +1 -0
- package/dist/docx/block-parser.d.ts.map +1 -1
- package/dist/docx/diagram-theme.d.ts +3 -3
- package/dist/docx/diagram-theme.d.ts.map +1 -1
- package/dist/docx/embedded.cjs +470 -276
- package/dist/docx/embedded.mjs +470 -276
- package/dist/docx/field-flags.d.ts +8 -0
- package/dist/docx/field-flags.d.ts.map +1 -0
- package/dist/docx/field-lock.d.ts +6 -0
- package/dist/docx/field-lock.d.ts.map +1 -0
- package/dist/docx/field-runs.d.ts +4 -1
- package/dist/docx/field-runs.d.ts.map +1 -1
- package/dist/docx/index.cjs +1029 -850
- package/dist/docx/index.d.ts +2 -0
- package/dist/docx/index.d.ts.map +1 -1
- package/dist/docx/index.mjs +1027 -850
- package/dist/docx/layout/adapter.d.ts.map +1 -1
- package/dist/docx/layout/index.cjs +61 -47
- package/dist/docx/layout/index.mjs +61 -47
- package/dist/docx/layout/page-fields.d.ts.map +1 -1
- package/dist/docx/load/index.cjs +1883 -467
- package/dist/docx/load/index.mjs +1883 -467
- package/dist/docx/model-run.d.ts +5 -0
- package/dist/docx/model-run.d.ts.map +1 -1
- package/dist/docx/numbering-model.d.ts +1 -1
- package/dist/docx/numbering-model.d.ts.map +1 -1
- package/dist/docx/numbering-package.d.ts +4 -4
- package/dist/docx/numbering-package.d.ts.map +1 -1
- package/dist/docx/numbering-start-edit.d.ts +8 -0
- package/dist/docx/numbering-start-edit.d.ts.map +1 -0
- package/dist/docx/numbering-start-patch.d.ts +13 -0
- package/dist/docx/numbering-start-patch.d.ts.map +1 -0
- package/dist/docx/theme-color.d.ts.map +1 -1
- package/dist/docx/theme-model.d.ts +3 -2
- package/dist/docx/theme-model.d.ts.map +1 -1
- package/dist/docx/theme.d.ts +5 -1
- package/dist/docx/theme.d.ts.map +1 -1
- package/dist/docx/ui/field-guard.d.ts +2 -0
- package/dist/docx/ui/field-guard.d.ts.map +1 -1
- package/dist/docx/ui/field-results.d.ts.map +1 -1
- package/dist/docx/ui/index.cjs +547 -375
- package/dist/docx/ui/index.mjs +547 -376
- package/dist/docx/ui/review-commands.d.ts.map +1 -1
- package/dist/docx/ui/run-extra-mark.d.ts +1 -1
- package/dist/docx/ui/run-extra-mark.d.ts.map +1 -1
- package/dist/docx/ui/simple-field-input.d.ts +3 -0
- package/dist/docx/ui/simple-field-input.d.ts.map +1 -1
- package/dist/docx/ui/track-changes-mode.d.ts.map +1 -1
- package/dist/docx/ui/track-paragraph-boundaries.d.ts +5 -0
- package/dist/docx/ui/track-paragraph-boundaries.d.ts.map +1 -0
- package/dist/docx/write-inline.d.ts.map +1 -1
- package/dist/docx/write-run.d.ts.map +1 -1
- package/dist/drawingml/dom.d.ts +15 -0
- package/dist/drawingml/dom.d.ts.map +1 -0
- package/dist/drawingml/drawing-color-brightness.d.ts +6 -0
- package/dist/drawingml/drawing-color-brightness.d.ts.map +1 -0
- package/dist/drawingml/drawing-color-css.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/drawing-color.d.ts +5 -5
- package/dist/drawingml/drawing-color.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/drawing-fill.d.ts +3 -3
- package/dist/drawingml/drawing-fill.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/drawing-geometry.d.ts +4 -4
- package/dist/drawingml/drawing-geometry.d.ts.map +1 -0
- package/dist/drawingml/drawing-shadow.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/drawing-text.d.ts +2 -2
- package/dist/drawingml/drawing-text.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/gradient-geometry.d.ts +2 -2
- package/dist/drawingml/gradient-geometry.d.ts.map +1 -0
- package/dist/drawingml/gradient-preset-data.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/gradient-presets.d.ts +3 -3
- package/dist/drawingml/gradient-presets.d.ts.map +1 -0
- package/dist/drawingml/index.cjs +1545 -0
- package/dist/drawingml/index.d.ts +19 -0
- package/dist/drawingml/index.d.ts.map +1 -0
- package/dist/drawingml/index.mjs +1497 -0
- package/dist/{diagram → drawingml}/ordered-color-transforms.d.ts +2 -2
- package/dist/drawingml/ordered-color-transforms.d.ts.map +1 -0
- package/dist/drawingml/rect-path-gradient.d.ts.map +1 -0
- package/dist/drawingml/theme-color.d.ts +19 -0
- package/dist/drawingml/theme-color.d.ts.map +1 -0
- package/dist/drawingml/theme-model.d.ts +40 -0
- package/dist/drawingml/theme-model.d.ts.map +1 -0
- package/dist/drawingml/theme.d.ts +21 -0
- package/dist/drawingml/theme.d.ts.map +1 -0
- package/dist/drawingml/types.d.ts +152 -0
- package/dist/drawingml/types.d.ts.map +1 -0
- package/dist/drawingml/write-color.d.ts +4 -0
- package/dist/drawingml/write-color.d.ts.map +1 -0
- package/dist/{diagram → drawingml}/write-fill.d.ts +2 -2
- package/dist/drawingml/write-fill.d.ts.map +1 -0
- package/dist/geometry/connector-elbow-geometry.d.ts +14 -0
- package/dist/geometry/connector-elbow-geometry.d.ts.map +1 -1
- package/dist/geometry/index.cjs +43 -0
- package/dist/geometry/index.mjs +42 -1
- package/dist/i18n/dictionary.d.ts +13 -0
- package/dist/i18n/dictionary.d.ts.map +1 -0
- package/dist/i18n/index.cjs +68 -0
- package/dist/i18n/index.d.ts +4 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.mjs +60 -0
- package/dist/i18n/locale.d.ts +17 -0
- package/dist/i18n/locale.d.ts.map +1 -0
- package/dist/i18n/translator.d.ts +18 -0
- package/dist/i18n/translator.d.ts.map +1 -0
- package/dist/index.cjs +3712 -2178
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +3711 -2179
- package/dist/pptx/automation/index.cjs +2852 -1568
- package/dist/pptx/automation/index.d.ts +3 -3
- package/dist/pptx/automation/index.mjs +5 -5
- package/dist/pptx/chunks/{index-C4mfzVoY.d.ts → index-BHqL5KXH.d.ts} +2 -2
- package/dist/pptx/chunks/{index-C4mfzVoY.d.ts.map → index-BHqL5KXH.d.ts.map} +1 -1
- package/dist/pptx/chunks/{index-lk7dyOPS.d.ts → index-BYkdcS8J.d.ts} +12 -16
- package/dist/pptx/chunks/index-BYkdcS8J.d.ts.map +1 -0
- package/dist/pptx/chunks/smart-art-CO2jmJFf.d.ts.map +1 -1
- package/dist/pptx/chunks/{text-operations-CDLx4hD5.d.ts → text-operations-DEJ7alZR.d.ts} +2 -2
- package/dist/pptx/chunks/text-operations-DEJ7alZR.d.ts.map +1 -0
- package/dist/pptx/cli/index.cjs +2680 -1396
- package/dist/pptx/cli/index.d.ts +1 -1
- package/dist/pptx/cli/index.mjs +4 -4
- package/dist/pptx/converter/index.d.ts +1 -1
- package/dist/pptx/converter/index.mjs +2 -2
- package/dist/pptx/index.cjs +1771 -1756
- package/dist/pptx/index.d.ts +3 -3
- package/dist/pptx/index.mjs +5 -5
- package/dist/teams/index.cjs +144 -74
- package/dist/teams/index.mjs +144 -74
- package/dist/visio/ui/index.cjs +14 -3
- package/dist/visio/ui/index.mjs +14 -3
- package/dist/visio/ui/shape-rotation.d.ts +1 -1
- package/dist/visio/ui/shape-rotation.d.ts.map +1 -1
- package/dist/xlsx/edit/chart-series-gradient.d.ts +1 -1
- package/dist/xlsx/edit/chart-series-gradient.d.ts.map +1 -1
- package/dist/xlsx/edit/protection.d.ts +1 -1
- package/dist/xlsx/index.cjs +3222 -1886
- package/dist/xlsx/index.mjs +3222 -1886
- package/dist/xlsx/layout/chart-appearance.d.ts +1 -1
- package/dist/xlsx/layout/chart-appearance.d.ts.map +1 -1
- package/dist/xlsx/layout/chart-scale.d.ts +5 -1
- package/dist/xlsx/layout/chart-scale.d.ts.map +1 -1
- package/dist/xlsx/layout/chart-svg-legend.d.ts +13 -0
- package/dist/xlsx/layout/chart-svg-legend.d.ts.map +1 -0
- package/dist/xlsx/layout/chart-svg.d.ts.map +1 -1
- package/dist/xlsx/layout/chart-view.d.ts +3 -1
- package/dist/xlsx/layout/chart-view.d.ts.map +1 -1
- package/dist/xlsx/load/index.cjs +2110 -838
- package/dist/xlsx/load/index.mjs +2110 -838
- package/dist/xlsx/read/theme.d.ts +2 -4
- package/dist/xlsx/read/theme.d.ts.map +1 -1
- package/dist/xlsx/ui/index.cjs +2017 -771
- package/dist/xlsx/ui/index.mjs +2017 -771
- package/dist/xlsx/ui/locales/merge.d.ts +2 -1
- package/dist/xlsx/ui/locales/merge.d.ts.map +1 -1
- package/dist/xlsx/ui/localization.d.ts.map +1 -1
- package/dist/xlsx/write/theme.d.ts.map +1 -1
- package/package.json +11 -1
- package/dist/diagram/drawing-color-brightness.d.ts +0 -6
- package/dist/diagram/drawing-color-brightness.d.ts.map +0 -1
- package/dist/diagram/drawing-color-css.d.ts.map +0 -1
- package/dist/diagram/drawing-color.d.ts.map +0 -1
- package/dist/diagram/drawing-fill.d.ts.map +0 -1
- package/dist/diagram/drawing-geometry.d.ts.map +0 -1
- package/dist/diagram/drawing-shadow.d.ts.map +0 -1
- package/dist/diagram/drawing-text.d.ts.map +0 -1
- package/dist/diagram/gradient-geometry.d.ts.map +0 -1
- package/dist/diagram/gradient-preset-data.d.ts.map +0 -1
- package/dist/diagram/gradient-presets.d.ts.map +0 -1
- package/dist/diagram/ordered-color-transforms.d.ts.map +0 -1
- package/dist/diagram/rect-path-gradient.d.ts.map +0 -1
- package/dist/diagram/write-color.d.ts +0 -4
- package/dist/diagram/write-color.d.ts.map +0 -1
- package/dist/diagram/write-fill.d.ts.map +0 -1
- package/dist/pptx/chunks/index-lk7dyOPS.d.ts.map +0 -1
- package/dist/pptx/chunks/text-operations-CDLx4hD5.d.ts.map +0 -1
- /package/dist/{diagram → drawingml}/drawing-color-css.d.ts +0 -0
- /package/dist/{diagram → drawingml}/drawing-shadow.d.ts +0 -0
- /package/dist/{diagram → drawingml}/gradient-preset-data.d.ts +0 -0
- /package/dist/{diagram → drawingml}/rect-path-gradient.d.ts +0 -0
package/dist/docx/ui/index.cjs
CHANGED
|
@@ -1628,13 +1628,296 @@ function resolveTableStyleFormatting(tableStyleId, catalog, look, rowIndex, rowC
|
|
|
1628
1628
|
return result;
|
|
1629
1629
|
}
|
|
1630
1630
|
|
|
1631
|
-
//
|
|
1632
|
-
function
|
|
1633
|
-
return
|
|
1631
|
+
// color/color-primitives.ts
|
|
1632
|
+
function clampUnitInterval(value) {
|
|
1633
|
+
return Math.min(1, Math.max(0, value));
|
|
1634
|
+
}
|
|
1635
|
+
function hexToRgbChannels(color) {
|
|
1636
|
+
const normalized = color.replace("#", "");
|
|
1637
|
+
if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {
|
|
1638
|
+
return null;
|
|
1639
|
+
}
|
|
1640
|
+
return {
|
|
1641
|
+
r: Number.parseInt(normalized.slice(0, 2), 16),
|
|
1642
|
+
g: Number.parseInt(normalized.slice(2, 4), 16),
|
|
1643
|
+
b: Number.parseInt(normalized.slice(4, 6), 16)
|
|
1644
|
+
};
|
|
1645
|
+
}
|
|
1646
|
+
function percentDivisorFor(text) {
|
|
1647
|
+
return text.endsWith("%") ? 100 : 1e5;
|
|
1648
|
+
}
|
|
1649
|
+
function parseOoxmlPercent(value) {
|
|
1650
|
+
const text = String(value ?? "").trim();
|
|
1651
|
+
const divisor = percentDivisorFor(text);
|
|
1652
|
+
const magnitude = Number.parseFloat(divisor === 100 ? text.slice(0, -1) : text);
|
|
1653
|
+
if (!Number.isFinite(magnitude)) {
|
|
1654
|
+
return void 0;
|
|
1655
|
+
}
|
|
1656
|
+
return magnitude / divisor;
|
|
1657
|
+
}
|
|
1658
|
+
function parseDrawingPercent(value) {
|
|
1659
|
+
const parsed = parseOoxmlPercent(value);
|
|
1660
|
+
return parsed === void 0 ? void 0 : clampUnitInterval(parsed);
|
|
1661
|
+
}
|
|
1662
|
+
function scrgbLinearToSrgb8(linear) {
|
|
1663
|
+
const l = Math.min(1, Math.max(0, linear));
|
|
1664
|
+
const companded = l <= 31308e-7 ? 12.92 * l : 1.055 * l ** (1 / 2.4) - 0.055;
|
|
1665
|
+
return Math.min(255, Math.max(0, Math.round(companded * 255)));
|
|
1634
1666
|
}
|
|
1635
1667
|
function toHex(value) {
|
|
1636
1668
|
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
1637
1669
|
}
|
|
1670
|
+
function rgbToHsl(r, g, b) {
|
|
1671
|
+
const rN = r / 255;
|
|
1672
|
+
const gN = g / 255;
|
|
1673
|
+
const bN = b / 255;
|
|
1674
|
+
const cMax = Math.max(rN, gN, bN);
|
|
1675
|
+
const cMin = Math.min(rN, gN, bN);
|
|
1676
|
+
const delta = cMax - cMin;
|
|
1677
|
+
const l = (cMax + cMin) / 2;
|
|
1678
|
+
let s = 0;
|
|
1679
|
+
if (delta !== 0) {
|
|
1680
|
+
s = delta / (1 - Math.abs(2 * l - 1));
|
|
1681
|
+
}
|
|
1682
|
+
let h = 0;
|
|
1683
|
+
if (delta !== 0) {
|
|
1684
|
+
if (cMax === rN) {
|
|
1685
|
+
h = 60 * ((gN - bN) / delta % 6);
|
|
1686
|
+
} else if (cMax === gN) {
|
|
1687
|
+
h = 60 * ((bN - rN) / delta + 2);
|
|
1688
|
+
} else {
|
|
1689
|
+
h = 60 * ((rN - gN) / delta + 4);
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1692
|
+
if (h < 0) {
|
|
1693
|
+
h += 360;
|
|
1694
|
+
}
|
|
1695
|
+
return { h, s: clampUnitInterval(s), l: clampUnitInterval(l) };
|
|
1696
|
+
}
|
|
1697
|
+
function hslToRgb(h, s, l, roundChannel = Math.round, options) {
|
|
1698
|
+
const sC = clampUnitInterval(s);
|
|
1699
|
+
const lC = clampUnitInterval(l);
|
|
1700
|
+
const hN = (h % 360 + 360) % 360;
|
|
1701
|
+
const c = (1 - Math.abs(2 * lC - 1)) * sC;
|
|
1702
|
+
const x = c * (1 - Math.abs(hN / 60 % 2 - 1));
|
|
1703
|
+
const m = lC - c / 2;
|
|
1704
|
+
let rP = 0;
|
|
1705
|
+
let gP = 0;
|
|
1706
|
+
let bP = 0;
|
|
1707
|
+
if (hN < 60) {
|
|
1708
|
+
rP = c;
|
|
1709
|
+
gP = x;
|
|
1710
|
+
bP = 0;
|
|
1711
|
+
} else if (hN < 120) {
|
|
1712
|
+
rP = x;
|
|
1713
|
+
gP = c;
|
|
1714
|
+
bP = 0;
|
|
1715
|
+
} else if (hN < 180) {
|
|
1716
|
+
rP = 0;
|
|
1717
|
+
gP = c;
|
|
1718
|
+
bP = x;
|
|
1719
|
+
} else if (hN < 240) {
|
|
1720
|
+
rP = 0;
|
|
1721
|
+
gP = x;
|
|
1722
|
+
bP = c;
|
|
1723
|
+
} else if (hN < 300) {
|
|
1724
|
+
rP = x;
|
|
1725
|
+
gP = 0;
|
|
1726
|
+
bP = c;
|
|
1727
|
+
} else {
|
|
1728
|
+
rP = c;
|
|
1729
|
+
gP = 0;
|
|
1730
|
+
bP = x;
|
|
1731
|
+
}
|
|
1732
|
+
return {
|
|
1733
|
+
r: roundChannel((rP + m) * 255),
|
|
1734
|
+
g: roundChannel((gP + m) * 255),
|
|
1735
|
+
b: roundChannel((bP + m) * 255)
|
|
1736
|
+
};
|
|
1737
|
+
}
|
|
1738
|
+
function parseDrawingFraction(value) {
|
|
1739
|
+
return parseOoxmlPercent(value);
|
|
1740
|
+
}
|
|
1741
|
+
function parseDrawingHueDegrees(value) {
|
|
1742
|
+
const parsed = Number.parseFloat(String(value ?? "").trim());
|
|
1743
|
+
if (!Number.isFinite(parsed)) {
|
|
1744
|
+
return void 0;
|
|
1745
|
+
}
|
|
1746
|
+
return parsed / 6e4;
|
|
1747
|
+
}
|
|
1748
|
+
|
|
1749
|
+
// color/color-linear.ts
|
|
1750
|
+
function srgb255ToLinear(channel) {
|
|
1751
|
+
const c = clampUnitInterval(channel / 255);
|
|
1752
|
+
return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
1753
|
+
}
|
|
1754
|
+
function linearToSrgb255(linear) {
|
|
1755
|
+
const c = clampUnitInterval(linear);
|
|
1756
|
+
return 255 * (c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055);
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1759
|
+
// drawingml/drawing-color.ts
|
|
1760
|
+
var PRESET_COLORS = {
|
|
1761
|
+
black: "#000000",
|
|
1762
|
+
white: "#FFFFFF",
|
|
1763
|
+
red: "#FF0000",
|
|
1764
|
+
green: "#008000",
|
|
1765
|
+
blue: "#0000FF",
|
|
1766
|
+
yellow: "#FFFF00",
|
|
1767
|
+
gray: "#808080",
|
|
1768
|
+
grey: "#808080"
|
|
1769
|
+
};
|
|
1770
|
+
function baseHex(color, theme) {
|
|
1771
|
+
switch (color.kind) {
|
|
1772
|
+
case "srgb":
|
|
1773
|
+
return /^[0-9a-f]{6}$/i.test(color.value) ? `#${color.value.toUpperCase()}` : void 0;
|
|
1774
|
+
case "scheme":
|
|
1775
|
+
return theme?.scheme(color.value);
|
|
1776
|
+
case "system":
|
|
1777
|
+
return color.fallback && /^[0-9a-f]{6}$/i.test(color.fallback) ? `#${color.fallback.toUpperCase()}` : void 0;
|
|
1778
|
+
case "preset":
|
|
1779
|
+
return PRESET_COLORS[color.value];
|
|
1780
|
+
case "scrgb": {
|
|
1781
|
+
const [r, g, b] = color.value.split(",").map((part) => parseDrawingFraction(part));
|
|
1782
|
+
if (r === void 0 || g === void 0 || b === void 0) return void 0;
|
|
1783
|
+
return `#${toHex(scrgbLinearToSrgb8(r))}${toHex(scrgbLinearToSrgb8(g))}${toHex(scrgbLinearToSrgb8(b))}`;
|
|
1784
|
+
}
|
|
1785
|
+
case "hsl": {
|
|
1786
|
+
const [h, s, l] = color.value.split(",");
|
|
1787
|
+
const hue = parseDrawingHueDegrees(h);
|
|
1788
|
+
const sat = parseDrawingFraction(s);
|
|
1789
|
+
const lum = parseDrawingFraction(l);
|
|
1790
|
+
if (hue === void 0 || sat === void 0 || lum === void 0) return void 0;
|
|
1791
|
+
const { r, g, b } = hslToRgb(hue, sat, lum);
|
|
1792
|
+
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
1793
|
+
}
|
|
1794
|
+
}
|
|
1795
|
+
}
|
|
1796
|
+
var APPLIED = /* @__PURE__ */ new Set([
|
|
1797
|
+
"alpha",
|
|
1798
|
+
"alphaMod",
|
|
1799
|
+
"alphaOff",
|
|
1800
|
+
"comp",
|
|
1801
|
+
"inv",
|
|
1802
|
+
"gray",
|
|
1803
|
+
"shade",
|
|
1804
|
+
"tint",
|
|
1805
|
+
"hue",
|
|
1806
|
+
"hueMod",
|
|
1807
|
+
"hueOff",
|
|
1808
|
+
"sat",
|
|
1809
|
+
"satMod",
|
|
1810
|
+
"satOff",
|
|
1811
|
+
"lum",
|
|
1812
|
+
"lumMod",
|
|
1813
|
+
"lumOff"
|
|
1814
|
+
]);
|
|
1815
|
+
function resolveDrawingColor(color, theme, options) {
|
|
1816
|
+
const base = baseHex(color, theme);
|
|
1817
|
+
const rgb = base ? hexToRgbChannels(base) : null;
|
|
1818
|
+
if (!rgb) return void 0;
|
|
1819
|
+
let { r, g, b } = rgb;
|
|
1820
|
+
const find = (name) => color.transforms.find((entry) => entry.name === name)?.value;
|
|
1821
|
+
const has = (name) => color.transforms.some((entry) => entry.name === name);
|
|
1822
|
+
if (has("comp")) {
|
|
1823
|
+
const hsl = rgbToHsl(r, g, b);
|
|
1824
|
+
({ r, g, b } = hslToRgb((hsl.h + 180) % 360, hsl.s, hsl.l));
|
|
1825
|
+
}
|
|
1826
|
+
if (has("inv")) [r, g, b] = [255 - r, 255 - g, 255 - b];
|
|
1827
|
+
if (has("gray")) r = g = b = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
|
|
1828
|
+
const shade = parseDrawingPercent(find("shade"));
|
|
1829
|
+
if (shade !== void 0) {
|
|
1830
|
+
r = linearToSrgb255(srgb255ToLinear(r) * shade);
|
|
1831
|
+
g = linearToSrgb255(srgb255ToLinear(g) * shade);
|
|
1832
|
+
b = linearToSrgb255(srgb255ToLinear(b) * shade);
|
|
1833
|
+
}
|
|
1834
|
+
const tint = parseDrawingPercent(find("tint"));
|
|
1835
|
+
if (tint !== void 0) {
|
|
1836
|
+
r = linearToSrgb255(1 - (1 - srgb255ToLinear(r)) * tint);
|
|
1837
|
+
g = linearToSrgb255(1 - (1 - srgb255ToLinear(g)) * tint);
|
|
1838
|
+
b = linearToSrgb255(1 - (1 - srgb255ToLinear(b)) * tint);
|
|
1839
|
+
}
|
|
1840
|
+
if (["hue", "hueMod", "hueOff", "sat", "satMod", "satOff", "lum", "lumMod", "lumOff"].some(has)) {
|
|
1841
|
+
const hsl = rgbToHsl(r, g, b);
|
|
1842
|
+
const wrap = (degrees) => (degrees % 360 + 360) % 360;
|
|
1843
|
+
const hueAbs = parseDrawingHueDegrees(find("hue"));
|
|
1844
|
+
if (hueAbs !== void 0) hsl.h = wrap(hueAbs);
|
|
1845
|
+
const hueMod = parseDrawingFraction(find("hueMod"));
|
|
1846
|
+
if (hueMod !== void 0) hsl.h = wrap(hsl.h * hueMod);
|
|
1847
|
+
const hueOff = parseDrawingHueDegrees(find("hueOff"));
|
|
1848
|
+
if (hueOff !== void 0) hsl.h = wrap(hsl.h + hueOff);
|
|
1849
|
+
const satAbs = parseDrawingFraction(find("sat"));
|
|
1850
|
+
if (satAbs !== void 0) hsl.s = clampUnitInterval(satAbs);
|
|
1851
|
+
const satMod = parseDrawingFraction(find("satMod"));
|
|
1852
|
+
if (satMod !== void 0) hsl.s = clampUnitInterval(hsl.s * satMod);
|
|
1853
|
+
const satOff = parseDrawingFraction(find("satOff"));
|
|
1854
|
+
if (satOff !== void 0) hsl.s = clampUnitInterval(hsl.s + satOff);
|
|
1855
|
+
const lumAbs = parseDrawingFraction(find("lum"));
|
|
1856
|
+
if (lumAbs !== void 0) hsl.l = clampUnitInterval(lumAbs);
|
|
1857
|
+
const lumMod = parseDrawingFraction(find("lumMod"));
|
|
1858
|
+
if (lumMod !== void 0) hsl.l = clampUnitInterval(hsl.l * lumMod);
|
|
1859
|
+
const lumOff = parseDrawingFraction(find("lumOff"));
|
|
1860
|
+
if (lumOff !== void 0) hsl.l = clampUnitInterval(hsl.l + lumOff);
|
|
1861
|
+
const round = Math.round;
|
|
1862
|
+
({ r, g, b } = hslToRgb(hsl.h, hsl.s, hsl.l, round));
|
|
1863
|
+
}
|
|
1864
|
+
let alpha = parseDrawingPercent(find("alpha")) ?? 1;
|
|
1865
|
+
const alphaMod = parseDrawingFraction(find("alphaMod"));
|
|
1866
|
+
if (alphaMod !== void 0) alpha = clampUnitInterval(alpha * alphaMod);
|
|
1867
|
+
const alphaOff = parseDrawingFraction(find("alphaOff"));
|
|
1868
|
+
if (alphaOff !== void 0) alpha = clampUnitInterval(alpha + alphaOff);
|
|
1869
|
+
return {
|
|
1870
|
+
hex: `#${toHex(r)}${toHex(g)}${toHex(b)}`,
|
|
1871
|
+
alpha,
|
|
1872
|
+
unapplied: [...new Set(color.transforms.map((entry) => entry.name))].filter(
|
|
1873
|
+
(name) => !APPLIED.has(name)
|
|
1874
|
+
)
|
|
1875
|
+
};
|
|
1876
|
+
}
|
|
1877
|
+
|
|
1878
|
+
// drawingml/theme-model.ts
|
|
1879
|
+
var THEME_COLOR_SLOTS = [
|
|
1880
|
+
"dk1",
|
|
1881
|
+
"lt1",
|
|
1882
|
+
"dk2",
|
|
1883
|
+
"lt2",
|
|
1884
|
+
"accent1",
|
|
1885
|
+
"accent2",
|
|
1886
|
+
"accent3",
|
|
1887
|
+
"accent4",
|
|
1888
|
+
"accent5",
|
|
1889
|
+
"accent6",
|
|
1890
|
+
"hlink",
|
|
1891
|
+
"folHlink"
|
|
1892
|
+
];
|
|
1893
|
+
var DEFAULT_THEME_COLOR_MAP = {
|
|
1894
|
+
bg1: "lt1",
|
|
1895
|
+
tx1: "dk1",
|
|
1896
|
+
bg2: "lt2",
|
|
1897
|
+
tx2: "dk2"
|
|
1898
|
+
};
|
|
1899
|
+
|
|
1900
|
+
// drawingml/theme.ts
|
|
1901
|
+
var SLOT_SET = new Set(THEME_COLOR_SLOTS);
|
|
1902
|
+
function isThemeColorSlot(value) {
|
|
1903
|
+
return SLOT_SET.has(value);
|
|
1904
|
+
}
|
|
1905
|
+
|
|
1906
|
+
// drawingml/theme-color.ts
|
|
1907
|
+
function isLogical(name) {
|
|
1908
|
+
return Object.hasOwn(DEFAULT_THEME_COLOR_MAP, name);
|
|
1909
|
+
}
|
|
1910
|
+
function themeColorSlotFor(name, colorMap = {}) {
|
|
1911
|
+
if (isLogical(name)) return colorMap[name] ?? DEFAULT_THEME_COLOR_MAP[name];
|
|
1912
|
+
if (!isThemeColorSlot(name)) return void 0;
|
|
1913
|
+
if (name === "dk1" || name === "lt1" || name === "dk2" || name === "lt2") return name;
|
|
1914
|
+
return colorMap[name] ?? name;
|
|
1915
|
+
}
|
|
1916
|
+
|
|
1917
|
+
// docx/theme-color.ts
|
|
1918
|
+
function isThemeColorToken(value) {
|
|
1919
|
+
return isStThemeColor(value);
|
|
1920
|
+
}
|
|
1638
1921
|
function fractionToThemeByte(fraction) {
|
|
1639
1922
|
return toHex(Math.round(Math.min(1, Math.max(0, fraction)) * 255));
|
|
1640
1923
|
}
|
|
@@ -2500,305 +2783,58 @@ var add = (parent, ...items) => {
|
|
|
2500
2783
|
return parent;
|
|
2501
2784
|
};
|
|
2502
2785
|
var emu = (px) => String(Math.max(1, Math.round(px * EMU_PER_PIXEL)));
|
|
2503
|
-
var descendants = (root, ns, local) => Array.from(root.getElementsByTagNameNS(ns, local));
|
|
2504
|
-
function paragraphsFor(doc, lines) {
|
|
2505
|
-
return (lines.length ? lines : [""]).map((line) => {
|
|
2506
|
-
const paragraph = makeW(doc, "p");
|
|
2507
|
-
if (line) {
|
|
2508
|
-
const run = makeW(doc, "r");
|
|
2509
|
-
const text = makeW(doc, "t");
|
|
2510
|
-
if (/^\s|\s$/.test(line))
|
|
2511
|
-
text.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
|
|
2512
|
-
text.textContent = line;
|
|
2513
|
-
add(run, text);
|
|
2514
|
-
add(paragraph, run);
|
|
2515
|
-
}
|
|
2516
|
-
return paragraph;
|
|
2517
|
-
});
|
|
2518
|
-
}
|
|
2519
|
-
function outline(doc, border) {
|
|
2520
|
-
const ln = el(doc, A_NS, "a:ln");
|
|
2521
|
-
if (!border) return add(ln, el(doc, A_NS, "a:noFill"));
|
|
2522
|
-
ln.setAttribute("w", "9525");
|
|
2523
|
-
const color = el(doc, A_NS, "a:srgbClr");
|
|
2524
|
-
color.setAttribute("val", "000000");
|
|
2525
|
-
return add(ln, add(el(doc, A_NS, "a:solidFill"), color));
|
|
2526
|
-
}
|
|
2527
|
-
function patchTextBox(doc, drawing, image, base) {
|
|
2528
|
-
if (image.widthPx !== base.widthPx || image.heightPx !== base.heightPx)
|
|
2529
|
-
for (const node of [
|
|
2530
|
-
...descendants(drawing, WP_NS, "extent"),
|
|
2531
|
-
...descendants(drawing, A_NS, "ext").filter(
|
|
2532
|
-
(ext) => ext.parentNode?.localName === "xfrm"
|
|
2533
|
-
)
|
|
2534
|
-
]) {
|
|
2535
|
-
node.setAttribute("cx", emu(image.widthPx));
|
|
2536
|
-
node.setAttribute("cy", emu(image.heightPx));
|
|
2537
|
-
}
|
|
2538
|
-
if (JSON.stringify(image.textBoxText) !== JSON.stringify(base.textBoxText)) {
|
|
2539
|
-
const content = descendants(drawing, W_NS, "txbxContent")[0];
|
|
2540
|
-
if (content) {
|
|
2541
|
-
for (const child of Array.from(content.childNodes)) content.removeChild(child);
|
|
2542
|
-
add(content, ...paragraphsFor(doc, image.textBoxText ?? []));
|
|
2543
|
-
}
|
|
2544
|
-
}
|
|
2545
|
-
if (image.textBoxBorder !== false !== (base.textBoxBorder !== false)) {
|
|
2546
|
-
const spPr = descendants(drawing, WPS_NS, "spPr")[0];
|
|
2547
|
-
if (spPr) {
|
|
2548
|
-
for (const old of Array.from(spPr.childNodes).filter(
|
|
2549
|
-
(node) => isElement(node) && node.localName === "ln"
|
|
2550
|
-
))
|
|
2551
|
-
spPr.removeChild(old);
|
|
2552
|
-
spPr.appendChild(outline(doc, image.textBoxBorder !== false));
|
|
2553
|
-
}
|
|
2554
|
-
}
|
|
2555
|
-
}
|
|
2556
|
-
|
|
2557
|
-
// color/color-primitives.ts
|
|
2558
|
-
function clampUnitInterval(value) {
|
|
2559
|
-
return Math.min(1, Math.max(0, value));
|
|
2560
|
-
}
|
|
2561
|
-
function hexToRgbChannels(color) {
|
|
2562
|
-
const normalized = color.replace("#", "");
|
|
2563
|
-
if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {
|
|
2564
|
-
return null;
|
|
2565
|
-
}
|
|
2566
|
-
return {
|
|
2567
|
-
r: Number.parseInt(normalized.slice(0, 2), 16),
|
|
2568
|
-
g: Number.parseInt(normalized.slice(2, 4), 16),
|
|
2569
|
-
b: Number.parseInt(normalized.slice(4, 6), 16)
|
|
2570
|
-
};
|
|
2571
|
-
}
|
|
2572
|
-
function percentDivisorFor(text) {
|
|
2573
|
-
return text.endsWith("%") ? 100 : 1e5;
|
|
2574
|
-
}
|
|
2575
|
-
function parseOoxmlPercent(value) {
|
|
2576
|
-
const text = String(value ?? "").trim();
|
|
2577
|
-
const divisor = percentDivisorFor(text);
|
|
2578
|
-
const magnitude = Number.parseFloat(divisor === 100 ? text.slice(0, -1) : text);
|
|
2579
|
-
if (!Number.isFinite(magnitude)) {
|
|
2580
|
-
return void 0;
|
|
2581
|
-
}
|
|
2582
|
-
return magnitude / divisor;
|
|
2583
|
-
}
|
|
2584
|
-
function parseDrawingPercent(value) {
|
|
2585
|
-
const parsed = parseOoxmlPercent(value);
|
|
2586
|
-
return parsed === void 0 ? void 0 : clampUnitInterval(parsed);
|
|
2587
|
-
}
|
|
2588
|
-
function scrgbLinearToSrgb8(linear) {
|
|
2589
|
-
const l = Math.min(1, Math.max(0, linear));
|
|
2590
|
-
const companded = l <= 31308e-7 ? 12.92 * l : 1.055 * l ** (1 / 2.4) - 0.055;
|
|
2591
|
-
return Math.min(255, Math.max(0, Math.round(companded * 255)));
|
|
2592
|
-
}
|
|
2593
|
-
function toHex2(value) {
|
|
2594
|
-
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
2595
|
-
}
|
|
2596
|
-
function rgbToHsl(r, g, b) {
|
|
2597
|
-
const rN = r / 255;
|
|
2598
|
-
const gN = g / 255;
|
|
2599
|
-
const bN = b / 255;
|
|
2600
|
-
const cMax = Math.max(rN, gN, bN);
|
|
2601
|
-
const cMin = Math.min(rN, gN, bN);
|
|
2602
|
-
const delta = cMax - cMin;
|
|
2603
|
-
const l = (cMax + cMin) / 2;
|
|
2604
|
-
let s = 0;
|
|
2605
|
-
if (delta !== 0) {
|
|
2606
|
-
s = delta / (1 - Math.abs(2 * l - 1));
|
|
2607
|
-
}
|
|
2608
|
-
let h = 0;
|
|
2609
|
-
if (delta !== 0) {
|
|
2610
|
-
if (cMax === rN) {
|
|
2611
|
-
h = 60 * ((gN - bN) / delta % 6);
|
|
2612
|
-
} else if (cMax === gN) {
|
|
2613
|
-
h = 60 * ((bN - rN) / delta + 2);
|
|
2614
|
-
} else {
|
|
2615
|
-
h = 60 * ((rN - gN) / delta + 4);
|
|
2616
|
-
}
|
|
2617
|
-
}
|
|
2618
|
-
if (h < 0) {
|
|
2619
|
-
h += 360;
|
|
2620
|
-
}
|
|
2621
|
-
return { h, s: clampUnitInterval(s), l: clampUnitInterval(l) };
|
|
2622
|
-
}
|
|
2623
|
-
function hslToRgb(h, s, l, roundChannel = Math.round, options) {
|
|
2624
|
-
const sC = clampUnitInterval(s);
|
|
2625
|
-
const lC = clampUnitInterval(l);
|
|
2626
|
-
const hN = (h % 360 + 360) % 360;
|
|
2627
|
-
const c = (1 - Math.abs(2 * lC - 1)) * sC;
|
|
2628
|
-
const x = c * (1 - Math.abs(hN / 60 % 2 - 1));
|
|
2629
|
-
const m = lC - c / 2;
|
|
2630
|
-
let rP = 0;
|
|
2631
|
-
let gP = 0;
|
|
2632
|
-
let bP = 0;
|
|
2633
|
-
if (hN < 60) {
|
|
2634
|
-
rP = c;
|
|
2635
|
-
gP = x;
|
|
2636
|
-
bP = 0;
|
|
2637
|
-
} else if (hN < 120) {
|
|
2638
|
-
rP = x;
|
|
2639
|
-
gP = c;
|
|
2640
|
-
bP = 0;
|
|
2641
|
-
} else if (hN < 180) {
|
|
2642
|
-
rP = 0;
|
|
2643
|
-
gP = c;
|
|
2644
|
-
bP = x;
|
|
2645
|
-
} else if (hN < 240) {
|
|
2646
|
-
rP = 0;
|
|
2647
|
-
gP = x;
|
|
2648
|
-
bP = c;
|
|
2649
|
-
} else if (hN < 300) {
|
|
2650
|
-
rP = x;
|
|
2651
|
-
gP = 0;
|
|
2652
|
-
bP = c;
|
|
2653
|
-
} else {
|
|
2654
|
-
rP = c;
|
|
2655
|
-
gP = 0;
|
|
2656
|
-
bP = x;
|
|
2657
|
-
}
|
|
2658
|
-
return {
|
|
2659
|
-
r: roundChannel((rP + m) * 255),
|
|
2660
|
-
g: roundChannel((gP + m) * 255),
|
|
2661
|
-
b: roundChannel((bP + m) * 255)
|
|
2662
|
-
};
|
|
2663
|
-
}
|
|
2664
|
-
function parseDrawingFraction(value) {
|
|
2665
|
-
return parseOoxmlPercent(value);
|
|
2666
|
-
}
|
|
2667
|
-
function parseDrawingHueDegrees(value) {
|
|
2668
|
-
const parsed = Number.parseFloat(String(value ?? "").trim());
|
|
2669
|
-
if (!Number.isFinite(parsed)) {
|
|
2670
|
-
return void 0;
|
|
2671
|
-
}
|
|
2672
|
-
return parsed / 6e4;
|
|
2673
|
-
}
|
|
2674
|
-
|
|
2675
|
-
// color/color-linear.ts
|
|
2676
|
-
function srgb255ToLinear(channel) {
|
|
2677
|
-
const c = clampUnitInterval(channel / 255);
|
|
2678
|
-
return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
2786
|
+
var descendants = (root, ns, local) => Array.from(root.getElementsByTagNameNS(ns, local));
|
|
2787
|
+
function paragraphsFor(doc, lines) {
|
|
2788
|
+
return (lines.length ? lines : [""]).map((line) => {
|
|
2789
|
+
const paragraph = makeW(doc, "p");
|
|
2790
|
+
if (line) {
|
|
2791
|
+
const run = makeW(doc, "r");
|
|
2792
|
+
const text = makeW(doc, "t");
|
|
2793
|
+
if (/^\s|\s$/.test(line))
|
|
2794
|
+
text.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
|
|
2795
|
+
text.textContent = line;
|
|
2796
|
+
add(run, text);
|
|
2797
|
+
add(paragraph, run);
|
|
2798
|
+
}
|
|
2799
|
+
return paragraph;
|
|
2800
|
+
});
|
|
2679
2801
|
}
|
|
2680
|
-
function
|
|
2681
|
-
const
|
|
2682
|
-
|
|
2802
|
+
function outline(doc, border) {
|
|
2803
|
+
const ln = el(doc, A_NS, "a:ln");
|
|
2804
|
+
if (!border) return add(ln, el(doc, A_NS, "a:noFill"));
|
|
2805
|
+
ln.setAttribute("w", "9525");
|
|
2806
|
+
const color = el(doc, A_NS, "a:srgbClr");
|
|
2807
|
+
color.setAttribute("val", "000000");
|
|
2808
|
+
return add(ln, add(el(doc, A_NS, "a:solidFill"), color));
|
|
2683
2809
|
}
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
grey: "#808080"
|
|
2695
|
-
};
|
|
2696
|
-
function baseHex(color, theme) {
|
|
2697
|
-
switch (color.kind) {
|
|
2698
|
-
case "srgb":
|
|
2699
|
-
return /^[0-9a-f]{6}$/i.test(color.value) ? `#${color.value.toUpperCase()}` : void 0;
|
|
2700
|
-
case "scheme":
|
|
2701
|
-
return theme?.scheme(color.value);
|
|
2702
|
-
case "system":
|
|
2703
|
-
return color.fallback && /^[0-9a-f]{6}$/i.test(color.fallback) ? `#${color.fallback.toUpperCase()}` : void 0;
|
|
2704
|
-
case "preset":
|
|
2705
|
-
return PRESET_COLORS[color.value];
|
|
2706
|
-
case "scrgb": {
|
|
2707
|
-
const [r, g, b] = color.value.split(",").map((part) => parseDrawingFraction(part));
|
|
2708
|
-
if (r === void 0 || g === void 0 || b === void 0) return void 0;
|
|
2709
|
-
return `#${toHex2(scrgbLinearToSrgb8(r))}${toHex2(scrgbLinearToSrgb8(g))}${toHex2(scrgbLinearToSrgb8(b))}`;
|
|
2810
|
+
function patchTextBox(doc, drawing, image, base) {
|
|
2811
|
+
if (image.widthPx !== base.widthPx || image.heightPx !== base.heightPx)
|
|
2812
|
+
for (const node of [
|
|
2813
|
+
...descendants(drawing, WP_NS, "extent"),
|
|
2814
|
+
...descendants(drawing, A_NS, "ext").filter(
|
|
2815
|
+
(ext) => ext.parentNode?.localName === "xfrm"
|
|
2816
|
+
)
|
|
2817
|
+
]) {
|
|
2818
|
+
node.setAttribute("cx", emu(image.widthPx));
|
|
2819
|
+
node.setAttribute("cy", emu(image.heightPx));
|
|
2710
2820
|
}
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
const
|
|
2715
|
-
|
|
2716
|
-
if (hue === void 0 || sat === void 0 || lum === void 0) return void 0;
|
|
2717
|
-
const { r, g, b } = hslToRgb(hue, sat, lum);
|
|
2718
|
-
return `#${toHex2(r)}${toHex2(g)}${toHex2(b)}`;
|
|
2821
|
+
if (JSON.stringify(image.textBoxText) !== JSON.stringify(base.textBoxText)) {
|
|
2822
|
+
const content = descendants(drawing, W_NS, "txbxContent")[0];
|
|
2823
|
+
if (content) {
|
|
2824
|
+
for (const child of Array.from(content.childNodes)) content.removeChild(child);
|
|
2825
|
+
add(content, ...paragraphsFor(doc, image.textBoxText ?? []));
|
|
2719
2826
|
}
|
|
2720
2827
|
}
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
"tint",
|
|
2731
|
-
"hue",
|
|
2732
|
-
"hueMod",
|
|
2733
|
-
"hueOff",
|
|
2734
|
-
"sat",
|
|
2735
|
-
"satMod",
|
|
2736
|
-
"satOff",
|
|
2737
|
-
"lum",
|
|
2738
|
-
"lumMod",
|
|
2739
|
-
"lumOff"
|
|
2740
|
-
]);
|
|
2741
|
-
function resolveDrawingColor(color, theme, options) {
|
|
2742
|
-
const base = baseHex(color, theme);
|
|
2743
|
-
const rgb = base ? hexToRgbChannels(base) : null;
|
|
2744
|
-
if (!rgb) return void 0;
|
|
2745
|
-
let { r, g, b } = rgb;
|
|
2746
|
-
const find = (name) => color.transforms.find((entry) => entry.name === name)?.value;
|
|
2747
|
-
const has = (name) => color.transforms.some((entry) => entry.name === name);
|
|
2748
|
-
if (has("comp")) {
|
|
2749
|
-
const hsl = rgbToHsl(r, g, b);
|
|
2750
|
-
({ r, g, b } = hslToRgb((hsl.h + 180) % 360, hsl.s, hsl.l));
|
|
2751
|
-
}
|
|
2752
|
-
if (has("inv")) [r, g, b] = [255 - r, 255 - g, 255 - b];
|
|
2753
|
-
if (has("gray")) r = g = b = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
|
|
2754
|
-
const shade = parseDrawingPercent(find("shade"));
|
|
2755
|
-
if (shade !== void 0) {
|
|
2756
|
-
r = linearToSrgb255(srgb255ToLinear(r) * shade);
|
|
2757
|
-
g = linearToSrgb255(srgb255ToLinear(g) * shade);
|
|
2758
|
-
b = linearToSrgb255(srgb255ToLinear(b) * shade);
|
|
2759
|
-
}
|
|
2760
|
-
const tint = parseDrawingPercent(find("tint"));
|
|
2761
|
-
if (tint !== void 0) {
|
|
2762
|
-
r = linearToSrgb255(1 - (1 - srgb255ToLinear(r)) * tint);
|
|
2763
|
-
g = linearToSrgb255(1 - (1 - srgb255ToLinear(g)) * tint);
|
|
2764
|
-
b = linearToSrgb255(1 - (1 - srgb255ToLinear(b)) * tint);
|
|
2765
|
-
}
|
|
2766
|
-
if (["hue", "hueMod", "hueOff", "sat", "satMod", "satOff", "lum", "lumMod", "lumOff"].some(has)) {
|
|
2767
|
-
const hsl = rgbToHsl(r, g, b);
|
|
2768
|
-
const wrap = (degrees) => (degrees % 360 + 360) % 360;
|
|
2769
|
-
const hueAbs = parseDrawingHueDegrees(find("hue"));
|
|
2770
|
-
if (hueAbs !== void 0) hsl.h = wrap(hueAbs);
|
|
2771
|
-
const hueMod = parseDrawingFraction(find("hueMod"));
|
|
2772
|
-
if (hueMod !== void 0) hsl.h = wrap(hsl.h * hueMod);
|
|
2773
|
-
const hueOff = parseDrawingHueDegrees(find("hueOff"));
|
|
2774
|
-
if (hueOff !== void 0) hsl.h = wrap(hsl.h + hueOff);
|
|
2775
|
-
const satAbs = parseDrawingFraction(find("sat"));
|
|
2776
|
-
if (satAbs !== void 0) hsl.s = clampUnitInterval(satAbs);
|
|
2777
|
-
const satMod = parseDrawingFraction(find("satMod"));
|
|
2778
|
-
if (satMod !== void 0) hsl.s = clampUnitInterval(hsl.s * satMod);
|
|
2779
|
-
const satOff = parseDrawingFraction(find("satOff"));
|
|
2780
|
-
if (satOff !== void 0) hsl.s = clampUnitInterval(hsl.s + satOff);
|
|
2781
|
-
const lumAbs = parseDrawingFraction(find("lum"));
|
|
2782
|
-
if (lumAbs !== void 0) hsl.l = clampUnitInterval(lumAbs);
|
|
2783
|
-
const lumMod = parseDrawingFraction(find("lumMod"));
|
|
2784
|
-
if (lumMod !== void 0) hsl.l = clampUnitInterval(hsl.l * lumMod);
|
|
2785
|
-
const lumOff = parseDrawingFraction(find("lumOff"));
|
|
2786
|
-
if (lumOff !== void 0) hsl.l = clampUnitInterval(hsl.l + lumOff);
|
|
2787
|
-
const round = Math.round;
|
|
2788
|
-
({ r, g, b } = hslToRgb(hsl.h, hsl.s, hsl.l, round));
|
|
2828
|
+
if (image.textBoxBorder !== false !== (base.textBoxBorder !== false)) {
|
|
2829
|
+
const spPr = descendants(drawing, WPS_NS, "spPr")[0];
|
|
2830
|
+
if (spPr) {
|
|
2831
|
+
for (const old of Array.from(spPr.childNodes).filter(
|
|
2832
|
+
(node) => isElement(node) && node.localName === "ln"
|
|
2833
|
+
))
|
|
2834
|
+
spPr.removeChild(old);
|
|
2835
|
+
spPr.appendChild(outline(doc, image.textBoxBorder !== false));
|
|
2836
|
+
}
|
|
2789
2837
|
}
|
|
2790
|
-
let alpha = parseDrawingPercent(find("alpha")) ?? 1;
|
|
2791
|
-
const alphaMod = parseDrawingFraction(find("alphaMod"));
|
|
2792
|
-
if (alphaMod !== void 0) alpha = clampUnitInterval(alpha * alphaMod);
|
|
2793
|
-
const alphaOff = parseDrawingFraction(find("alphaOff"));
|
|
2794
|
-
if (alphaOff !== void 0) alpha = clampUnitInterval(alpha + alphaOff);
|
|
2795
|
-
return {
|
|
2796
|
-
hex: `#${toHex2(r)}${toHex2(g)}${toHex2(b)}`,
|
|
2797
|
-
alpha,
|
|
2798
|
-
unapplied: [...new Set(color.transforms.map((entry) => entry.name))].filter(
|
|
2799
|
-
(name) => !APPLIED.has(name)
|
|
2800
|
-
)
|
|
2801
|
-
};
|
|
2802
2838
|
}
|
|
2803
2839
|
|
|
2804
2840
|
// docx/write-drawing.ts
|
|
@@ -2912,6 +2948,17 @@ function restoreRunFormatting(run) {
|
|
|
2912
2948
|
else delete run.revision;
|
|
2913
2949
|
}
|
|
2914
2950
|
|
|
2951
|
+
// docx/field-flags.ts
|
|
2952
|
+
function writeFieldFlags(element, flags) {
|
|
2953
|
+
for (const [name, value] of [
|
|
2954
|
+
["fldLock", flags?.locked],
|
|
2955
|
+
["dirty", flags?.dirty]
|
|
2956
|
+
]) {
|
|
2957
|
+
if (value === void 0) element.removeAttributeNS(WORD_NS, name);
|
|
2958
|
+
else element.setAttributeNS(WORD_NS, `w:${name}`, value ? "true" : "false");
|
|
2959
|
+
}
|
|
2960
|
+
}
|
|
2961
|
+
|
|
2915
2962
|
// docx/write-run.ts
|
|
2916
2963
|
function setAttribute6(element, local, value) {
|
|
2917
2964
|
element.setAttributeNS(WORD_NS, `w:${local}`, value);
|
|
@@ -3097,6 +3144,7 @@ function createRun(doc, run, base, old, allocator) {
|
|
|
3097
3144
|
if (run.fieldChar) {
|
|
3098
3145
|
const marker = makeW(doc, "fldChar");
|
|
3099
3146
|
setAttribute6(marker, "fldCharType", run.fieldChar);
|
|
3147
|
+
writeFieldFlags(marker, run.fieldFlags);
|
|
3100
3148
|
node.appendChild(marker);
|
|
3101
3149
|
return node;
|
|
3102
3150
|
}
|
|
@@ -3177,6 +3225,11 @@ function takeSimpleFieldCommentEdges(doc, runs, start, end, opens, closes) {
|
|
|
3177
3225
|
after: take(closes, end - 1).reverse().flatMap((edge) => rangeEndNodes(doc, edge))
|
|
3178
3226
|
};
|
|
3179
3227
|
}
|
|
3228
|
+
|
|
3229
|
+
// docx/field-lock.ts
|
|
3230
|
+
function sameFieldFlags(a, b) {
|
|
3231
|
+
return a?.locked === b?.locked && a?.dirty === b?.dirty;
|
|
3232
|
+
}
|
|
3180
3233
|
var MATH_NAMESPACES = /* @__PURE__ */ new Set([
|
|
3181
3234
|
"http://schemas.openxmlformats.org/officeDocument/2006/math",
|
|
3182
3235
|
"http://purl.oclc.org/ooxml/officeDocument/math"
|
|
@@ -3372,6 +3425,7 @@ function buildInlineContent(doc, runs, base, slots, allocator, ranges) {
|
|
|
3372
3425
|
container = makeW(doc, "fldSimple");
|
|
3373
3426
|
setW2(container, "instr", ` ${group.instr} `);
|
|
3374
3427
|
}
|
|
3428
|
+
if (group.kind === "simpleField") writeFieldFlags(container, runAt(start).fieldFlags);
|
|
3375
3429
|
const edges = group.kind === "simpleField" ? takeSimpleFieldCommentEdges(doc, runs, start, index, opens, closes) : { before: [], after: [] };
|
|
3376
3430
|
for (let item = start; item < index; item++)
|
|
3377
3431
|
for (const node of nodesFor(item)) container.appendChild(node);
|
|
@@ -3382,13 +3436,18 @@ function buildInlineContent(doc, runs, base, slots, allocator, ranges) {
|
|
|
3382
3436
|
function containerGroup(run) {
|
|
3383
3437
|
if (run.link) return { kind: "link", link: run.link };
|
|
3384
3438
|
if (run.field?.simple)
|
|
3385
|
-
return {
|
|
3439
|
+
return {
|
|
3440
|
+
kind: "simpleField",
|
|
3441
|
+
instr: run.field.instr,
|
|
3442
|
+
instanceId: run.fieldInstanceId,
|
|
3443
|
+
fieldFlags: run.fieldFlags
|
|
3444
|
+
};
|
|
3386
3445
|
return void 0;
|
|
3387
3446
|
}
|
|
3388
3447
|
function sameGroup(a, b) {
|
|
3389
3448
|
if (!a || !b) return a === b;
|
|
3390
3449
|
if (a.kind === "link" && b.kind === "link") return sameLink(a.link, b.link);
|
|
3391
|
-
return a.kind === "simpleField" && b.kind === "simpleField" && a.instr === b.instr && a.instanceId === b.instanceId;
|
|
3450
|
+
return a.kind === "simpleField" && b.kind === "simpleField" && a.instr === b.instr && a.instanceId === b.instanceId && sameFieldFlags(a.fieldFlags, b.fieldFlags);
|
|
3392
3451
|
}
|
|
3393
3452
|
|
|
3394
3453
|
// docx/paragraph-properties.ts
|
|
@@ -3560,19 +3619,6 @@ function createParagraph(doc, paragraph, allocator, spans) {
|
|
|
3560
3619
|
return writeParagraphImpl(doc, paragraph, node, void 0, allocator, spans);
|
|
3561
3620
|
}
|
|
3562
3621
|
|
|
3563
|
-
// docx/document-paragraphs.ts
|
|
3564
|
-
function documentBlockLists(model) {
|
|
3565
|
-
return [
|
|
3566
|
-
model.blocks,
|
|
3567
|
-
...(model.sections ?? []).flatMap(
|
|
3568
|
-
(section) => [section.headers, section.footers].flatMap(
|
|
3569
|
-
(slots) => Object.values(slots ?? {}).flatMap((content) => content ? [content.blocks] : [])
|
|
3570
|
-
)
|
|
3571
|
-
),
|
|
3572
|
-
...[...model.footnotes ?? [], ...model.endnotes ?? []].map((note) => note.blocks)
|
|
3573
|
-
];
|
|
3574
|
-
}
|
|
3575
|
-
|
|
3576
3622
|
// docx/numbering-parse.ts
|
|
3577
3623
|
function resolveNumberingLevel(catalog, numId, level) {
|
|
3578
3624
|
const num = catalog.nums[numId];
|
|
@@ -3598,33 +3644,26 @@ function resolveNumberingLevel(catalog, numId, level) {
|
|
|
3598
3644
|
return start !== base.start ? { ...base, start } : base;
|
|
3599
3645
|
}
|
|
3600
3646
|
|
|
3647
|
+
// docx/document-paragraphs.ts
|
|
3648
|
+
function documentBlockLists(model) {
|
|
3649
|
+
return [
|
|
3650
|
+
model.blocks,
|
|
3651
|
+
...(model.sections ?? []).flatMap(
|
|
3652
|
+
(section) => [section.headers, section.footers].flatMap(
|
|
3653
|
+
(slots) => Object.values(slots ?? {}).flatMap((content) => content ? [content.blocks] : [])
|
|
3654
|
+
)
|
|
3655
|
+
),
|
|
3656
|
+
...[...model.footnotes ?? [], ...model.endnotes ?? []].map((note) => note.blocks)
|
|
3657
|
+
];
|
|
3658
|
+
}
|
|
3659
|
+
|
|
3601
3660
|
// docx/diagram-theme.ts
|
|
3602
|
-
var DEFAULT_MAPPING = {
|
|
3603
|
-
bg1: "lt1",
|
|
3604
|
-
tx1: "dk1",
|
|
3605
|
-
bg2: "lt2",
|
|
3606
|
-
tx2: "dk2"
|
|
3607
|
-
};
|
|
3608
|
-
var SLOTS = /* @__PURE__ */ new Set([
|
|
3609
|
-
"dk1",
|
|
3610
|
-
"lt1",
|
|
3611
|
-
"dk2",
|
|
3612
|
-
"lt2",
|
|
3613
|
-
"accent1",
|
|
3614
|
-
"accent2",
|
|
3615
|
-
"accent3",
|
|
3616
|
-
"accent4",
|
|
3617
|
-
"accent5",
|
|
3618
|
-
"accent6",
|
|
3619
|
-
"hlink",
|
|
3620
|
-
"folHlink"
|
|
3621
|
-
]);
|
|
3622
3661
|
function diagramColorTheme(theme) {
|
|
3623
3662
|
return {
|
|
3624
3663
|
scheme(name) {
|
|
3625
3664
|
if (!theme) return void 0;
|
|
3626
|
-
const
|
|
3627
|
-
const hex =
|
|
3665
|
+
const slot = themeColorSlotFor(name, theme.colorMapping);
|
|
3666
|
+
const hex = slot ? theme.colors[slot] : void 0;
|
|
3628
3667
|
return hex ? `#${hex.replace(/^#/, "").toUpperCase()}` : void 0;
|
|
3629
3668
|
}
|
|
3630
3669
|
};
|
|
@@ -3988,6 +4027,7 @@ var ligatureStyle = (value) => isLigatures(value) ? `font-variant-ligatures:${li
|
|
|
3988
4027
|
// docx/ui/run-extra-mark.ts
|
|
3989
4028
|
var extraRunFields = [
|
|
3990
4029
|
"fieldInstanceId",
|
|
4030
|
+
"fieldFlags",
|
|
3991
4031
|
"restoredRunPropertiesXml",
|
|
3992
4032
|
"sourceRunPropertiesXml",
|
|
3993
4033
|
"formatRevision",
|
|
@@ -4513,12 +4553,12 @@ function fieldClipboardSlice(slice) {
|
|
|
4513
4553
|
if (!(field?.attrs.simple ?? cached2?.simple) && complete.has(pos)) return node;
|
|
4514
4554
|
const marks = node.marks.flatMap((mark) => {
|
|
4515
4555
|
if (mark.type === field?.type) return [];
|
|
4516
|
-
if (mark.type.name !== "runProperties"
|
|
4517
|
-
const { fieldInstanceId: _identity, ...props } = mark.attrs.props;
|
|
4556
|
+
if (mark.type.name !== "runProperties") return [mark];
|
|
4557
|
+
const { fieldInstanceId: _identity, fieldFlags: _flags2, ...props } = mark.attrs.props ?? {};
|
|
4518
4558
|
return Object.keys(props).length ? [mark.type.create({ ...mark.attrs, props })] : [];
|
|
4519
4559
|
});
|
|
4520
4560
|
if (!properties3 || !cached2) return node.mark(marks);
|
|
4521
|
-
const { field: _field, fieldInstanceId: _id, ...literal } = properties3;
|
|
4561
|
+
const { field: _field, fieldInstanceId: _id, fieldFlags: _flags, ...literal } = properties3;
|
|
4522
4562
|
return node.type.create(
|
|
4523
4563
|
updatedInlineRunAttributes(
|
|
4524
4564
|
node,
|
|
@@ -4542,13 +4582,14 @@ function fieldResultRanges(doc) {
|
|
|
4542
4582
|
const field = doc.type.schema.marks.field;
|
|
4543
4583
|
if (!field) return runs;
|
|
4544
4584
|
const identityOf = (marks) => marks.find((mark) => mark.type.name === "runProperties")?.attrs.props?.fieldInstanceId;
|
|
4585
|
+
const flagsOf = (marks) => marks.find((mark) => mark.type.name === "runProperties")?.attrs.props?.fieldFlags;
|
|
4545
4586
|
doc.descendants((node, pos) => {
|
|
4546
4587
|
if (node.type.name !== "paragraph") return true;
|
|
4547
4588
|
let open;
|
|
4548
4589
|
node.forEach((child, offset) => {
|
|
4549
4590
|
const mark = child.isText ? child.marks.find((item) => item.type === field) : void 0;
|
|
4550
4591
|
const start = pos + 1 + offset;
|
|
4551
|
-
if (mark && open?.mark.eq(mark) && identityOf(open.marks) === identityOf(child.marks)) {
|
|
4592
|
+
if (mark && open?.mark.eq(mark) && identityOf(open.marks) === identityOf(child.marks) && sameFieldFlags(flagsOf(open.marks), flagsOf(child.marks))) {
|
|
4552
4593
|
open.to = start + child.nodeSize;
|
|
4553
4594
|
open.text += child.text ?? "";
|
|
4554
4595
|
} else if (mark) {
|
|
@@ -4576,14 +4617,20 @@ function targetField(state, from, to) {
|
|
|
4576
4617
|
}
|
|
4577
4618
|
function resultMarks(node, field) {
|
|
4578
4619
|
let marks = field.mark.addToSet(node.marks);
|
|
4579
|
-
const
|
|
4620
|
+
const source = field.marks.find((mark) => mark.type.name === "runProperties")?.attrs.props;
|
|
4621
|
+
const id = source?.fieldInstanceId;
|
|
4622
|
+
const state = {
|
|
4623
|
+
...typeof id === "string" && { fieldInstanceId: id },
|
|
4624
|
+
...source?.fieldFlags && { fieldFlags: source.fieldFlags }
|
|
4625
|
+
};
|
|
4580
4626
|
const properties3 = node.type.schema.marks.runProperties;
|
|
4581
|
-
if (
|
|
4627
|
+
if (properties3) {
|
|
4582
4628
|
const old = properties3.isInSet(marks);
|
|
4583
|
-
|
|
4584
|
-
|
|
4585
|
-
|
|
4586
|
-
|
|
4629
|
+
const { fieldInstanceId: _identity, fieldFlags: _flags, ...other } = old?.attrs.props ?? {};
|
|
4630
|
+
const props = { ...other, ...state };
|
|
4631
|
+
marks = properties3.removeFromSet(marks);
|
|
4632
|
+
if (Object.keys(props).length)
|
|
4633
|
+
marks = properties3.create({ ...old?.attrs ?? {}, props }).addToSet(marks);
|
|
4587
4634
|
}
|
|
4588
4635
|
return marks;
|
|
4589
4636
|
}
|
|
@@ -4613,29 +4660,41 @@ function replaceSimpleFieldResult(state, from, to, text) {
|
|
|
4613
4660
|
const field = targetField(state, from, to);
|
|
4614
4661
|
if (!field) return null;
|
|
4615
4662
|
if (!text) {
|
|
4616
|
-
|
|
4617
|
-
|
|
4618
|
-
if (!run) return null;
|
|
4619
|
-
const format = {
|
|
4620
|
-
...run.commentIds && { commentIds: run.commentIds }
|
|
4621
|
-
};
|
|
4622
|
-
const markers = [
|
|
4623
|
-
{ ...format, text: "", fieldChar: "begin" },
|
|
4624
|
-
{ ...format, text: "", fieldCode: field.mark.attrs.instr },
|
|
4625
|
-
{ ...format, text: "", fieldChar: "separate" },
|
|
4626
|
-
{ ...format, text: "", fieldChar: "end" }
|
|
4627
|
-
].flatMap((item) => runToInlineNodes(item, state.schema));
|
|
4628
|
-
const tr2 = state.tr.replaceWith(from, to, markers);
|
|
4663
|
+
const tr2 = state.tr;
|
|
4664
|
+
if (!emptySimpleFieldResult(tr2, from, to)) return null;
|
|
4629
4665
|
return tr2.setSelection(prosemirrorState.TextSelection.create(tr2.doc, from + 3));
|
|
4630
4666
|
}
|
|
4631
|
-
const
|
|
4632
|
-
|
|
4633
|
-
|
|
4634
|
-
|
|
4635
|
-
|
|
4636
|
-
|
|
4667
|
+
const $from = state.doc.resolve(from);
|
|
4668
|
+
const marks = state.storedMarks ?? (from === to ? $from.marks() : $from.marksAcross(state.doc.resolve(to)));
|
|
4669
|
+
const node = state.schema.text(text, marks);
|
|
4670
|
+
const tr = state.tr.replaceRangeWith(from, to, node.mark(resultMarks(node, field)));
|
|
4671
|
+
if (!tr.selection.empty && tr.selection.to === from + text.length)
|
|
4672
|
+
tr.setSelection(prosemirrorState.TextSelection.near(tr.selection.$to));
|
|
4637
4673
|
return tr;
|
|
4638
4674
|
}
|
|
4675
|
+
function emptySimpleFieldResult(transform, from, to) {
|
|
4676
|
+
const field = fieldResultRanges(transform.doc).find(
|
|
4677
|
+
(range) => range.mark.attrs.simple && range.from === from && range.to === to
|
|
4678
|
+
);
|
|
4679
|
+
const schema = transform.doc.type.schema;
|
|
4680
|
+
if (!field || !schema.nodes.fieldMarker) return false;
|
|
4681
|
+
const run = inlineNodeRun(transform.doc.nodeAt(from));
|
|
4682
|
+
if (!run) return false;
|
|
4683
|
+
const format = { ...run.commentIds && { commentIds: run.commentIds } };
|
|
4684
|
+
const markers = [
|
|
4685
|
+
{
|
|
4686
|
+
...format,
|
|
4687
|
+
text: "",
|
|
4688
|
+
fieldChar: "begin",
|
|
4689
|
+
...run.fieldFlags && { fieldFlags: run.fieldFlags }
|
|
4690
|
+
},
|
|
4691
|
+
{ ...format, text: "", fieldCode: field.mark.attrs.instr },
|
|
4692
|
+
{ ...format, text: "", fieldChar: "separate" },
|
|
4693
|
+
{ ...format, text: "", fieldChar: "end" }
|
|
4694
|
+
].flatMap((item) => runToInlineNodes(item, schema));
|
|
4695
|
+
transform.replaceWith(from, to, markers);
|
|
4696
|
+
return true;
|
|
4697
|
+
}
|
|
4639
4698
|
function deleteSimpleFieldResult(state, backward) {
|
|
4640
4699
|
const { from, to, empty } = state.selection;
|
|
4641
4700
|
if (!empty) return replaceSimpleFieldResult(state, from, to, "");
|
|
@@ -4649,6 +4708,7 @@ function deleteSimpleFieldResult(state, backward) {
|
|
|
4649
4708
|
}
|
|
4650
4709
|
|
|
4651
4710
|
// docx/ui/field-guard.ts
|
|
4711
|
+
var FIELD_RESULT_REPAIR_META = "dve-field-result-repair";
|
|
4652
4712
|
function markerKinds(doc) {
|
|
4653
4713
|
const kinds = [];
|
|
4654
4714
|
doc.descendants((node) => {
|
|
@@ -4724,11 +4784,12 @@ function markFieldResults(state) {
|
|
|
4724
4784
|
const fieldMark = state.schema.marks.field;
|
|
4725
4785
|
if (!fieldMark) return null;
|
|
4726
4786
|
const stack = [];
|
|
4727
|
-
const
|
|
4787
|
+
const transaction = state.tr;
|
|
4728
4788
|
state.doc.descendants((node, pos) => {
|
|
4729
4789
|
if (node.type.name === "fieldMarker") {
|
|
4730
4790
|
const kind = node.attrs.kind;
|
|
4731
|
-
if (kind === "begin")
|
|
4791
|
+
if (kind === "begin")
|
|
4792
|
+
stack.push({ code: "", inResult: false, locked: inlineNodeRun(node)?.fieldFlags?.locked });
|
|
4732
4793
|
else if (kind === "code" && stack.length) {
|
|
4733
4794
|
const open = stack[stack.length - 1];
|
|
4734
4795
|
if (open) open.code += node.attrs.code ?? "";
|
|
@@ -4739,15 +4800,28 @@ function markFieldResults(state) {
|
|
|
4739
4800
|
return false;
|
|
4740
4801
|
}
|
|
4741
4802
|
const top = stack.at(-1);
|
|
4742
|
-
if (node.isText && top?.inResult
|
|
4743
|
-
|
|
4803
|
+
if (node.isText && top?.inResult) {
|
|
4804
|
+
const end = pos + node.nodeSize;
|
|
4805
|
+
if (!fieldMark.isInSet(node.marks))
|
|
4806
|
+
transaction.addMark(pos, end, fieldMark.create({ instr: top.code.trim(), simple: false }));
|
|
4807
|
+
const type = state.schema.marks.runProperties;
|
|
4808
|
+
const current = type?.isInSet(node.marks);
|
|
4809
|
+
const props = current?.attrs.props ?? {};
|
|
4810
|
+
if (type && props.fieldFlags?.locked !== top.locked) {
|
|
4811
|
+
const next = { ...props };
|
|
4812
|
+
const flags = { ...props.fieldFlags };
|
|
4813
|
+
if (top.locked === void 0) delete flags.locked;
|
|
4814
|
+
else flags.locked = top.locked;
|
|
4815
|
+
if (Object.keys(flags).length) next.fieldFlags = flags;
|
|
4816
|
+
else delete next.fieldFlags;
|
|
4817
|
+
if (current) transaction.removeMark(pos, end, current);
|
|
4818
|
+
if (Object.keys(next).length)
|
|
4819
|
+
transaction.addMark(pos, end, type.create({ ...current?.attrs, props: next }));
|
|
4820
|
+
}
|
|
4821
|
+
}
|
|
4744
4822
|
return true;
|
|
4745
4823
|
});
|
|
4746
|
-
|
|
4747
|
-
const transaction = state.tr;
|
|
4748
|
-
for (const { from, to, instr } of missing)
|
|
4749
|
-
transaction.addMark(from, to, fieldMark.create({ instr, simple: false }));
|
|
4750
|
-
return transaction;
|
|
4824
|
+
return transaction.docChanged ? transaction.setMeta(FIELD_RESULT_REPAIR_META, true) : null;
|
|
4751
4825
|
}
|
|
4752
4826
|
var isMarker = (node) => node?.type.name === "fieldMarker";
|
|
4753
4827
|
function trimSelection(state) {
|
|
@@ -6511,6 +6585,98 @@ function trackSimpleFieldDeletion(transform, from, to, slice, author, date, next
|
|
|
6511
6585
|
);
|
|
6512
6586
|
return { deletionIds, deletedText, insertedText: "" };
|
|
6513
6587
|
}
|
|
6588
|
+
function sourceProperties(value) {
|
|
6589
|
+
if (typeof value !== "string" || !value) return value;
|
|
6590
|
+
try {
|
|
6591
|
+
const properties3 = parsePropertiesSnapshot(value, "pPr");
|
|
6592
|
+
const run = first2(properties3, "rPr");
|
|
6593
|
+
if (run) {
|
|
6594
|
+
for (const name of ["ins", "del"])
|
|
6595
|
+
for (const revision of children2(run, name)) run.removeChild(revision);
|
|
6596
|
+
if (!run.childNodes.length && !run.attributes.length) properties3.removeChild(run);
|
|
6597
|
+
}
|
|
6598
|
+
return propertiesSignature(properties3);
|
|
6599
|
+
} catch {
|
|
6600
|
+
return value;
|
|
6601
|
+
}
|
|
6602
|
+
}
|
|
6603
|
+
function safeParagraph(node, allowInsertion = false) {
|
|
6604
|
+
if (node.type.name !== "paragraph" || !node.type.spec.attrs?.markRevision) return false;
|
|
6605
|
+
if (node.attrs.markRevision && !allowInsertion) return false;
|
|
6606
|
+
let fields = false;
|
|
6607
|
+
node.descendants((child) => {
|
|
6608
|
+
if (child.type.name === "fieldMarker" || child.marks.some((mark) => mark.type.name === "field"))
|
|
6609
|
+
fields = true;
|
|
6610
|
+
});
|
|
6611
|
+
return !fields;
|
|
6612
|
+
}
|
|
6613
|
+
function endsSection(state, node) {
|
|
6614
|
+
if (typeof state.doc.attrs.sections !== "string") return false;
|
|
6615
|
+
try {
|
|
6616
|
+
const sections = JSON.parse(state.doc.attrs.sections);
|
|
6617
|
+
return sections.some(
|
|
6618
|
+
(section, index) => section.endsAtBlockId === node.attrs.id && (index < sections.length - 1 || state.doc.lastChild !== node)
|
|
6619
|
+
);
|
|
6620
|
+
} catch {
|
|
6621
|
+
return true;
|
|
6622
|
+
}
|
|
6623
|
+
}
|
|
6624
|
+
function sameProperties(first3, second) {
|
|
6625
|
+
return Object.keys({ ...first3.attrs, ...second.attrs }).every(
|
|
6626
|
+
(key) => key === "id" || key === "markRevision" || (key === "sourceParagraphPropertiesXml" ? sourceProperties(first3.attrs[key]) === sourceProperties(second.attrs[key]) : JSON.stringify(first3.attrs[key]) === JSON.stringify(second.attrs[key]))
|
|
6627
|
+
);
|
|
6628
|
+
}
|
|
6629
|
+
function trackParagraphBoundary(steps, oldState, newState, author, date, nextId) {
|
|
6630
|
+
if (steps.length !== 1 || !(steps[0] instanceof prosemirrorTransform.ReplaceStep) || steps[0].toJSON().structure !== true)
|
|
6631
|
+
return null;
|
|
6632
|
+
const step = steps[0];
|
|
6633
|
+
const $from = oldState.doc.resolve(step.from);
|
|
6634
|
+
const $to = oldState.doc.resolve(step.to);
|
|
6635
|
+
if ($from.depth !== 1 || $to.depth !== 1) return null;
|
|
6636
|
+
const first3 = $from.parent;
|
|
6637
|
+
const pos = $from.before();
|
|
6638
|
+
if (endsSection(oldState, first3)) return null;
|
|
6639
|
+
const revision = () => ({ author, date, dateUtc: date, id: nextId("revision") });
|
|
6640
|
+
if (step.from === step.to) {
|
|
6641
|
+
if (!safeParagraph(first3) || first3.attrs.bookmarks?.length || step.slice.openStart !== 1 || step.slice.openEnd !== 1 || step.slice.content.childCount !== 2 || step.slice.content.child(0).content.size || step.slice.content.child(1).content.size)
|
|
6642
|
+
return null;
|
|
6643
|
+
const left = newState.doc.nodeAt(pos);
|
|
6644
|
+
if (!left) return null;
|
|
6645
|
+
const rightPos = pos + left.nodeSize;
|
|
6646
|
+
const right = newState.doc.nodeAt(rightPos);
|
|
6647
|
+
if (!right || !safeParagraph(left) || !safeParagraph(right) || !sameProperties(first3, left) || !sameProperties(first3, right) || !left.content.append(right.content).eq(first3.content))
|
|
6648
|
+
return null;
|
|
6649
|
+
const used = /* @__PURE__ */ new Set();
|
|
6650
|
+
newState.doc.descendants((node) => {
|
|
6651
|
+
if (node.attrs.id) used.add(String(node.attrs.id));
|
|
6652
|
+
});
|
|
6653
|
+
let id;
|
|
6654
|
+
do
|
|
6655
|
+
id = nextId("paragraph");
|
|
6656
|
+
while (used.has(id));
|
|
6657
|
+
return newState.tr.setNodeMarkup(pos, void 0, {
|
|
6658
|
+
...left.attrs,
|
|
6659
|
+
id,
|
|
6660
|
+
markRevision: { ...revision(), kind: "insert" }
|
|
6661
|
+
}).setNodeMarkup(rightPos, void 0, { ...first3.attrs });
|
|
6662
|
+
}
|
|
6663
|
+
if (step.to !== step.from + 2 || step.slice.size || step.from !== $from.end() || step.to !== $to.start())
|
|
6664
|
+
return null;
|
|
6665
|
+
const second = $to.parent;
|
|
6666
|
+
if (!safeParagraph(first3, true) || !safeParagraph(second) || !sameProperties(first3, second))
|
|
6667
|
+
return null;
|
|
6668
|
+
const pending = first3.attrs.markRevision;
|
|
6669
|
+
if (pending) {
|
|
6670
|
+
if (pending.kind !== "insert" || pending.author !== author) return null;
|
|
6671
|
+
const merged = newState.doc.nodeAt(pos);
|
|
6672
|
+
if (!merged || !merged.content.eq(first3.content.append(second.content))) return null;
|
|
6673
|
+
return newState.tr.setNodeMarkup(pos, void 0, { ...second.attrs });
|
|
6674
|
+
}
|
|
6675
|
+
return newState.tr.step(step.invert(oldState.doc)).setNodeMarkup(pos, void 0, {
|
|
6676
|
+
...first3.attrs,
|
|
6677
|
+
markRevision: { ...revision(), kind: "delete" }
|
|
6678
|
+
});
|
|
6679
|
+
}
|
|
6514
6680
|
|
|
6515
6681
|
// docx/ui/track-changes-mode.ts
|
|
6516
6682
|
var trackChangesPluginKey = new prosemirrorState.PluginKey("dve-track-changes");
|
|
@@ -6652,11 +6818,15 @@ function trackChangesPlugin(getAuthor, isEnabled, idGenerator = createCollaborat
|
|
|
6652
6818
|
(tr) => prosemirrorHistory.isHistoryTransaction(tr) || tr.getMeta(trackChangesPluginKey) || tr.getMeta(REMOTE_TRANSACTION_META)
|
|
6653
6819
|
))
|
|
6654
6820
|
return null;
|
|
6655
|
-
const relevant = transactions.filter(
|
|
6821
|
+
const relevant = transactions.filter(
|
|
6822
|
+
(tr) => tr.docChanged && !tr.getMeta(FIELD_RESULT_REPAIR_META)
|
|
6823
|
+
);
|
|
6656
6824
|
if (!relevant.length) return null;
|
|
6657
6825
|
const steps = relevant.flatMap((tr) => tr.steps);
|
|
6658
6826
|
const author = getAuthor() || "Author";
|
|
6659
6827
|
const date = new Date(Date.now()).toISOString();
|
|
6828
|
+
const boundary = trackParagraphBoundary(steps, oldState, newState, author, date, idGenerator);
|
|
6829
|
+
if (boundary) return boundary.setMeta(trackChangesPluginKey, { tracked: true });
|
|
6660
6830
|
if (!steps.length || !steps.every((step) => step instanceof prosemirrorTransform.ReplaceStep)) {
|
|
6661
6831
|
if (newState.doc.attrs.trackFormatting === false) return null;
|
|
6662
6832
|
const formatting = trackRunFormatting(
|
|
@@ -6694,7 +6864,7 @@ function trackChangesPlugin(getAuthor, isEnabled, idGenerator = createCollaborat
|
|
|
6694
6864
|
});
|
|
6695
6865
|
if (!transform.docChanged) return null;
|
|
6696
6866
|
const result = newState.tr;
|
|
6697
|
-
const applied =
|
|
6867
|
+
const applied = transactions.filter((tr) => tr.docChanged).flatMap(
|
|
6698
6868
|
(tr) => tr.steps.map((step, index) => ({
|
|
6699
6869
|
step,
|
|
6700
6870
|
doc: expectDefined(tr.docs[index], "document before step")
|
|
@@ -6872,8 +7042,9 @@ function resolveRanges(view, ranges, mode) {
|
|
|
6872
7042
|
continue;
|
|
6873
7043
|
}
|
|
6874
7044
|
const removeText = mode === "accept" === (range.kind === "delete");
|
|
6875
|
-
if (removeText)
|
|
6876
|
-
|
|
7045
|
+
if (removeText) {
|
|
7046
|
+
if (!emptySimpleFieldResult(tr, from, to)) tr.delete(from, to);
|
|
7047
|
+
} else {
|
|
6877
7048
|
clearInlineTextRevisions(tr, from, to);
|
|
6878
7049
|
tr = tr.removeMark(
|
|
6879
7050
|
from,
|
|
@@ -7900,6 +8071,7 @@ exports.CollaborationAuthority = CollaborationAuthority;
|
|
|
7900
8071
|
exports.CollaborationClient = CollaborationClient;
|
|
7901
8072
|
exports.DirtyState = DirtyState;
|
|
7902
8073
|
exports.EDITOR_THEME_MODES = EDITOR_THEME_MODES;
|
|
8074
|
+
exports.FIELD_RESULT_REPAIR_META = FIELD_RESULT_REPAIR_META;
|
|
7903
8075
|
exports.HEADER_FOOTER_INPUT = HEADER_FOOTER_INPUT;
|
|
7904
8076
|
exports.NotePartsStep = NotePartsStep;
|
|
7905
8077
|
exports.PAGE_GAP = PAGE_GAP;
|