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.mjs
CHANGED
|
@@ -1606,13 +1606,296 @@ function resolveTableStyleFormatting(tableStyleId, catalog, look, rowIndex, rowC
|
|
|
1606
1606
|
return result;
|
|
1607
1607
|
}
|
|
1608
1608
|
|
|
1609
|
-
//
|
|
1610
|
-
function
|
|
1611
|
-
return
|
|
1609
|
+
// color/color-primitives.ts
|
|
1610
|
+
function clampUnitInterval(value) {
|
|
1611
|
+
return Math.min(1, Math.max(0, value));
|
|
1612
|
+
}
|
|
1613
|
+
function hexToRgbChannels(color) {
|
|
1614
|
+
const normalized = color.replace("#", "");
|
|
1615
|
+
if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {
|
|
1616
|
+
return null;
|
|
1617
|
+
}
|
|
1618
|
+
return {
|
|
1619
|
+
r: Number.parseInt(normalized.slice(0, 2), 16),
|
|
1620
|
+
g: Number.parseInt(normalized.slice(2, 4), 16),
|
|
1621
|
+
b: Number.parseInt(normalized.slice(4, 6), 16)
|
|
1622
|
+
};
|
|
1623
|
+
}
|
|
1624
|
+
function percentDivisorFor(text) {
|
|
1625
|
+
return text.endsWith("%") ? 100 : 1e5;
|
|
1626
|
+
}
|
|
1627
|
+
function parseOoxmlPercent(value) {
|
|
1628
|
+
const text = String(value ?? "").trim();
|
|
1629
|
+
const divisor = percentDivisorFor(text);
|
|
1630
|
+
const magnitude = Number.parseFloat(divisor === 100 ? text.slice(0, -1) : text);
|
|
1631
|
+
if (!Number.isFinite(magnitude)) {
|
|
1632
|
+
return void 0;
|
|
1633
|
+
}
|
|
1634
|
+
return magnitude / divisor;
|
|
1635
|
+
}
|
|
1636
|
+
function parseDrawingPercent(value) {
|
|
1637
|
+
const parsed = parseOoxmlPercent(value);
|
|
1638
|
+
return parsed === void 0 ? void 0 : clampUnitInterval(parsed);
|
|
1639
|
+
}
|
|
1640
|
+
function scrgbLinearToSrgb8(linear) {
|
|
1641
|
+
const l = Math.min(1, Math.max(0, linear));
|
|
1642
|
+
const companded = l <= 31308e-7 ? 12.92 * l : 1.055 * l ** (1 / 2.4) - 0.055;
|
|
1643
|
+
return Math.min(255, Math.max(0, Math.round(companded * 255)));
|
|
1612
1644
|
}
|
|
1613
1645
|
function toHex(value) {
|
|
1614
1646
|
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
1615
1647
|
}
|
|
1648
|
+
function rgbToHsl(r, g, b) {
|
|
1649
|
+
const rN = r / 255;
|
|
1650
|
+
const gN = g / 255;
|
|
1651
|
+
const bN = b / 255;
|
|
1652
|
+
const cMax = Math.max(rN, gN, bN);
|
|
1653
|
+
const cMin = Math.min(rN, gN, bN);
|
|
1654
|
+
const delta = cMax - cMin;
|
|
1655
|
+
const l = (cMax + cMin) / 2;
|
|
1656
|
+
let s = 0;
|
|
1657
|
+
if (delta !== 0) {
|
|
1658
|
+
s = delta / (1 - Math.abs(2 * l - 1));
|
|
1659
|
+
}
|
|
1660
|
+
let h = 0;
|
|
1661
|
+
if (delta !== 0) {
|
|
1662
|
+
if (cMax === rN) {
|
|
1663
|
+
h = 60 * ((gN - bN) / delta % 6);
|
|
1664
|
+
} else if (cMax === gN) {
|
|
1665
|
+
h = 60 * ((bN - rN) / delta + 2);
|
|
1666
|
+
} else {
|
|
1667
|
+
h = 60 * ((rN - gN) / delta + 4);
|
|
1668
|
+
}
|
|
1669
|
+
}
|
|
1670
|
+
if (h < 0) {
|
|
1671
|
+
h += 360;
|
|
1672
|
+
}
|
|
1673
|
+
return { h, s: clampUnitInterval(s), l: clampUnitInterval(l) };
|
|
1674
|
+
}
|
|
1675
|
+
function hslToRgb(h, s, l, roundChannel = Math.round, options) {
|
|
1676
|
+
const sC = clampUnitInterval(s);
|
|
1677
|
+
const lC = clampUnitInterval(l);
|
|
1678
|
+
const hN = (h % 360 + 360) % 360;
|
|
1679
|
+
const c = (1 - Math.abs(2 * lC - 1)) * sC;
|
|
1680
|
+
const x = c * (1 - Math.abs(hN / 60 % 2 - 1));
|
|
1681
|
+
const m = lC - c / 2;
|
|
1682
|
+
let rP = 0;
|
|
1683
|
+
let gP = 0;
|
|
1684
|
+
let bP = 0;
|
|
1685
|
+
if (hN < 60) {
|
|
1686
|
+
rP = c;
|
|
1687
|
+
gP = x;
|
|
1688
|
+
bP = 0;
|
|
1689
|
+
} else if (hN < 120) {
|
|
1690
|
+
rP = x;
|
|
1691
|
+
gP = c;
|
|
1692
|
+
bP = 0;
|
|
1693
|
+
} else if (hN < 180) {
|
|
1694
|
+
rP = 0;
|
|
1695
|
+
gP = c;
|
|
1696
|
+
bP = x;
|
|
1697
|
+
} else if (hN < 240) {
|
|
1698
|
+
rP = 0;
|
|
1699
|
+
gP = x;
|
|
1700
|
+
bP = c;
|
|
1701
|
+
} else if (hN < 300) {
|
|
1702
|
+
rP = x;
|
|
1703
|
+
gP = 0;
|
|
1704
|
+
bP = c;
|
|
1705
|
+
} else {
|
|
1706
|
+
rP = c;
|
|
1707
|
+
gP = 0;
|
|
1708
|
+
bP = x;
|
|
1709
|
+
}
|
|
1710
|
+
return {
|
|
1711
|
+
r: roundChannel((rP + m) * 255),
|
|
1712
|
+
g: roundChannel((gP + m) * 255),
|
|
1713
|
+
b: roundChannel((bP + m) * 255)
|
|
1714
|
+
};
|
|
1715
|
+
}
|
|
1716
|
+
function parseDrawingFraction(value) {
|
|
1717
|
+
return parseOoxmlPercent(value);
|
|
1718
|
+
}
|
|
1719
|
+
function parseDrawingHueDegrees(value) {
|
|
1720
|
+
const parsed = Number.parseFloat(String(value ?? "").trim());
|
|
1721
|
+
if (!Number.isFinite(parsed)) {
|
|
1722
|
+
return void 0;
|
|
1723
|
+
}
|
|
1724
|
+
return parsed / 6e4;
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
// color/color-linear.ts
|
|
1728
|
+
function srgb255ToLinear(channel) {
|
|
1729
|
+
const c = clampUnitInterval(channel / 255);
|
|
1730
|
+
return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
1731
|
+
}
|
|
1732
|
+
function linearToSrgb255(linear) {
|
|
1733
|
+
const c = clampUnitInterval(linear);
|
|
1734
|
+
return 255 * (c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055);
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1737
|
+
// drawingml/drawing-color.ts
|
|
1738
|
+
var PRESET_COLORS = {
|
|
1739
|
+
black: "#000000",
|
|
1740
|
+
white: "#FFFFFF",
|
|
1741
|
+
red: "#FF0000",
|
|
1742
|
+
green: "#008000",
|
|
1743
|
+
blue: "#0000FF",
|
|
1744
|
+
yellow: "#FFFF00",
|
|
1745
|
+
gray: "#808080",
|
|
1746
|
+
grey: "#808080"
|
|
1747
|
+
};
|
|
1748
|
+
function baseHex(color, theme) {
|
|
1749
|
+
switch (color.kind) {
|
|
1750
|
+
case "srgb":
|
|
1751
|
+
return /^[0-9a-f]{6}$/i.test(color.value) ? `#${color.value.toUpperCase()}` : void 0;
|
|
1752
|
+
case "scheme":
|
|
1753
|
+
return theme?.scheme(color.value);
|
|
1754
|
+
case "system":
|
|
1755
|
+
return color.fallback && /^[0-9a-f]{6}$/i.test(color.fallback) ? `#${color.fallback.toUpperCase()}` : void 0;
|
|
1756
|
+
case "preset":
|
|
1757
|
+
return PRESET_COLORS[color.value];
|
|
1758
|
+
case "scrgb": {
|
|
1759
|
+
const [r, g, b] = color.value.split(",").map((part) => parseDrawingFraction(part));
|
|
1760
|
+
if (r === void 0 || g === void 0 || b === void 0) return void 0;
|
|
1761
|
+
return `#${toHex(scrgbLinearToSrgb8(r))}${toHex(scrgbLinearToSrgb8(g))}${toHex(scrgbLinearToSrgb8(b))}`;
|
|
1762
|
+
}
|
|
1763
|
+
case "hsl": {
|
|
1764
|
+
const [h, s, l] = color.value.split(",");
|
|
1765
|
+
const hue = parseDrawingHueDegrees(h);
|
|
1766
|
+
const sat = parseDrawingFraction(s);
|
|
1767
|
+
const lum = parseDrawingFraction(l);
|
|
1768
|
+
if (hue === void 0 || sat === void 0 || lum === void 0) return void 0;
|
|
1769
|
+
const { r, g, b } = hslToRgb(hue, sat, lum);
|
|
1770
|
+
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
var APPLIED = /* @__PURE__ */ new Set([
|
|
1775
|
+
"alpha",
|
|
1776
|
+
"alphaMod",
|
|
1777
|
+
"alphaOff",
|
|
1778
|
+
"comp",
|
|
1779
|
+
"inv",
|
|
1780
|
+
"gray",
|
|
1781
|
+
"shade",
|
|
1782
|
+
"tint",
|
|
1783
|
+
"hue",
|
|
1784
|
+
"hueMod",
|
|
1785
|
+
"hueOff",
|
|
1786
|
+
"sat",
|
|
1787
|
+
"satMod",
|
|
1788
|
+
"satOff",
|
|
1789
|
+
"lum",
|
|
1790
|
+
"lumMod",
|
|
1791
|
+
"lumOff"
|
|
1792
|
+
]);
|
|
1793
|
+
function resolveDrawingColor(color, theme, options) {
|
|
1794
|
+
const base = baseHex(color, theme);
|
|
1795
|
+
const rgb = base ? hexToRgbChannels(base) : null;
|
|
1796
|
+
if (!rgb) return void 0;
|
|
1797
|
+
let { r, g, b } = rgb;
|
|
1798
|
+
const find = (name) => color.transforms.find((entry) => entry.name === name)?.value;
|
|
1799
|
+
const has = (name) => color.transforms.some((entry) => entry.name === name);
|
|
1800
|
+
if (has("comp")) {
|
|
1801
|
+
const hsl = rgbToHsl(r, g, b);
|
|
1802
|
+
({ r, g, b } = hslToRgb((hsl.h + 180) % 360, hsl.s, hsl.l));
|
|
1803
|
+
}
|
|
1804
|
+
if (has("inv")) [r, g, b] = [255 - r, 255 - g, 255 - b];
|
|
1805
|
+
if (has("gray")) r = g = b = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
|
|
1806
|
+
const shade = parseDrawingPercent(find("shade"));
|
|
1807
|
+
if (shade !== void 0) {
|
|
1808
|
+
r = linearToSrgb255(srgb255ToLinear(r) * shade);
|
|
1809
|
+
g = linearToSrgb255(srgb255ToLinear(g) * shade);
|
|
1810
|
+
b = linearToSrgb255(srgb255ToLinear(b) * shade);
|
|
1811
|
+
}
|
|
1812
|
+
const tint = parseDrawingPercent(find("tint"));
|
|
1813
|
+
if (tint !== void 0) {
|
|
1814
|
+
r = linearToSrgb255(1 - (1 - srgb255ToLinear(r)) * tint);
|
|
1815
|
+
g = linearToSrgb255(1 - (1 - srgb255ToLinear(g)) * tint);
|
|
1816
|
+
b = linearToSrgb255(1 - (1 - srgb255ToLinear(b)) * tint);
|
|
1817
|
+
}
|
|
1818
|
+
if (["hue", "hueMod", "hueOff", "sat", "satMod", "satOff", "lum", "lumMod", "lumOff"].some(has)) {
|
|
1819
|
+
const hsl = rgbToHsl(r, g, b);
|
|
1820
|
+
const wrap = (degrees) => (degrees % 360 + 360) % 360;
|
|
1821
|
+
const hueAbs = parseDrawingHueDegrees(find("hue"));
|
|
1822
|
+
if (hueAbs !== void 0) hsl.h = wrap(hueAbs);
|
|
1823
|
+
const hueMod = parseDrawingFraction(find("hueMod"));
|
|
1824
|
+
if (hueMod !== void 0) hsl.h = wrap(hsl.h * hueMod);
|
|
1825
|
+
const hueOff = parseDrawingHueDegrees(find("hueOff"));
|
|
1826
|
+
if (hueOff !== void 0) hsl.h = wrap(hsl.h + hueOff);
|
|
1827
|
+
const satAbs = parseDrawingFraction(find("sat"));
|
|
1828
|
+
if (satAbs !== void 0) hsl.s = clampUnitInterval(satAbs);
|
|
1829
|
+
const satMod = parseDrawingFraction(find("satMod"));
|
|
1830
|
+
if (satMod !== void 0) hsl.s = clampUnitInterval(hsl.s * satMod);
|
|
1831
|
+
const satOff = parseDrawingFraction(find("satOff"));
|
|
1832
|
+
if (satOff !== void 0) hsl.s = clampUnitInterval(hsl.s + satOff);
|
|
1833
|
+
const lumAbs = parseDrawingFraction(find("lum"));
|
|
1834
|
+
if (lumAbs !== void 0) hsl.l = clampUnitInterval(lumAbs);
|
|
1835
|
+
const lumMod = parseDrawingFraction(find("lumMod"));
|
|
1836
|
+
if (lumMod !== void 0) hsl.l = clampUnitInterval(hsl.l * lumMod);
|
|
1837
|
+
const lumOff = parseDrawingFraction(find("lumOff"));
|
|
1838
|
+
if (lumOff !== void 0) hsl.l = clampUnitInterval(hsl.l + lumOff);
|
|
1839
|
+
const round = Math.round;
|
|
1840
|
+
({ r, g, b } = hslToRgb(hsl.h, hsl.s, hsl.l, round));
|
|
1841
|
+
}
|
|
1842
|
+
let alpha = parseDrawingPercent(find("alpha")) ?? 1;
|
|
1843
|
+
const alphaMod = parseDrawingFraction(find("alphaMod"));
|
|
1844
|
+
if (alphaMod !== void 0) alpha = clampUnitInterval(alpha * alphaMod);
|
|
1845
|
+
const alphaOff = parseDrawingFraction(find("alphaOff"));
|
|
1846
|
+
if (alphaOff !== void 0) alpha = clampUnitInterval(alpha + alphaOff);
|
|
1847
|
+
return {
|
|
1848
|
+
hex: `#${toHex(r)}${toHex(g)}${toHex(b)}`,
|
|
1849
|
+
alpha,
|
|
1850
|
+
unapplied: [...new Set(color.transforms.map((entry) => entry.name))].filter(
|
|
1851
|
+
(name) => !APPLIED.has(name)
|
|
1852
|
+
)
|
|
1853
|
+
};
|
|
1854
|
+
}
|
|
1855
|
+
|
|
1856
|
+
// drawingml/theme-model.ts
|
|
1857
|
+
var THEME_COLOR_SLOTS = [
|
|
1858
|
+
"dk1",
|
|
1859
|
+
"lt1",
|
|
1860
|
+
"dk2",
|
|
1861
|
+
"lt2",
|
|
1862
|
+
"accent1",
|
|
1863
|
+
"accent2",
|
|
1864
|
+
"accent3",
|
|
1865
|
+
"accent4",
|
|
1866
|
+
"accent5",
|
|
1867
|
+
"accent6",
|
|
1868
|
+
"hlink",
|
|
1869
|
+
"folHlink"
|
|
1870
|
+
];
|
|
1871
|
+
var DEFAULT_THEME_COLOR_MAP = {
|
|
1872
|
+
bg1: "lt1",
|
|
1873
|
+
tx1: "dk1",
|
|
1874
|
+
bg2: "lt2",
|
|
1875
|
+
tx2: "dk2"
|
|
1876
|
+
};
|
|
1877
|
+
|
|
1878
|
+
// drawingml/theme.ts
|
|
1879
|
+
var SLOT_SET = new Set(THEME_COLOR_SLOTS);
|
|
1880
|
+
function isThemeColorSlot(value) {
|
|
1881
|
+
return SLOT_SET.has(value);
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1884
|
+
// drawingml/theme-color.ts
|
|
1885
|
+
function isLogical(name) {
|
|
1886
|
+
return Object.hasOwn(DEFAULT_THEME_COLOR_MAP, name);
|
|
1887
|
+
}
|
|
1888
|
+
function themeColorSlotFor(name, colorMap = {}) {
|
|
1889
|
+
if (isLogical(name)) return colorMap[name] ?? DEFAULT_THEME_COLOR_MAP[name];
|
|
1890
|
+
if (!isThemeColorSlot(name)) return void 0;
|
|
1891
|
+
if (name === "dk1" || name === "lt1" || name === "dk2" || name === "lt2") return name;
|
|
1892
|
+
return colorMap[name] ?? name;
|
|
1893
|
+
}
|
|
1894
|
+
|
|
1895
|
+
// docx/theme-color.ts
|
|
1896
|
+
function isThemeColorToken(value) {
|
|
1897
|
+
return isStThemeColor(value);
|
|
1898
|
+
}
|
|
1616
1899
|
function fractionToThemeByte(fraction) {
|
|
1617
1900
|
return toHex(Math.round(Math.min(1, Math.max(0, fraction)) * 255));
|
|
1618
1901
|
}
|
|
@@ -2478,305 +2761,58 @@ var add = (parent, ...items) => {
|
|
|
2478
2761
|
return parent;
|
|
2479
2762
|
};
|
|
2480
2763
|
var emu = (px) => String(Math.max(1, Math.round(px * EMU_PER_PIXEL)));
|
|
2481
|
-
var descendants = (root, ns, local) => Array.from(root.getElementsByTagNameNS(ns, local));
|
|
2482
|
-
function paragraphsFor(doc, lines) {
|
|
2483
|
-
return (lines.length ? lines : [""]).map((line) => {
|
|
2484
|
-
const paragraph = makeW(doc, "p");
|
|
2485
|
-
if (line) {
|
|
2486
|
-
const run = makeW(doc, "r");
|
|
2487
|
-
const text = makeW(doc, "t");
|
|
2488
|
-
if (/^\s|\s$/.test(line))
|
|
2489
|
-
text.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
|
|
2490
|
-
text.textContent = line;
|
|
2491
|
-
add(run, text);
|
|
2492
|
-
add(paragraph, run);
|
|
2493
|
-
}
|
|
2494
|
-
return paragraph;
|
|
2495
|
-
});
|
|
2496
|
-
}
|
|
2497
|
-
function outline(doc, border) {
|
|
2498
|
-
const ln = el(doc, A_NS, "a:ln");
|
|
2499
|
-
if (!border) return add(ln, el(doc, A_NS, "a:noFill"));
|
|
2500
|
-
ln.setAttribute("w", "9525");
|
|
2501
|
-
const color = el(doc, A_NS, "a:srgbClr");
|
|
2502
|
-
color.setAttribute("val", "000000");
|
|
2503
|
-
return add(ln, add(el(doc, A_NS, "a:solidFill"), color));
|
|
2504
|
-
}
|
|
2505
|
-
function patchTextBox(doc, drawing, image, base) {
|
|
2506
|
-
if (image.widthPx !== base.widthPx || image.heightPx !== base.heightPx)
|
|
2507
|
-
for (const node of [
|
|
2508
|
-
...descendants(drawing, WP_NS, "extent"),
|
|
2509
|
-
...descendants(drawing, A_NS, "ext").filter(
|
|
2510
|
-
(ext) => ext.parentNode?.localName === "xfrm"
|
|
2511
|
-
)
|
|
2512
|
-
]) {
|
|
2513
|
-
node.setAttribute("cx", emu(image.widthPx));
|
|
2514
|
-
node.setAttribute("cy", emu(image.heightPx));
|
|
2515
|
-
}
|
|
2516
|
-
if (JSON.stringify(image.textBoxText) !== JSON.stringify(base.textBoxText)) {
|
|
2517
|
-
const content = descendants(drawing, W_NS, "txbxContent")[0];
|
|
2518
|
-
if (content) {
|
|
2519
|
-
for (const child of Array.from(content.childNodes)) content.removeChild(child);
|
|
2520
|
-
add(content, ...paragraphsFor(doc, image.textBoxText ?? []));
|
|
2521
|
-
}
|
|
2522
|
-
}
|
|
2523
|
-
if (image.textBoxBorder !== false !== (base.textBoxBorder !== false)) {
|
|
2524
|
-
const spPr = descendants(drawing, WPS_NS, "spPr")[0];
|
|
2525
|
-
if (spPr) {
|
|
2526
|
-
for (const old of Array.from(spPr.childNodes).filter(
|
|
2527
|
-
(node) => isElement(node) && node.localName === "ln"
|
|
2528
|
-
))
|
|
2529
|
-
spPr.removeChild(old);
|
|
2530
|
-
spPr.appendChild(outline(doc, image.textBoxBorder !== false));
|
|
2531
|
-
}
|
|
2532
|
-
}
|
|
2533
|
-
}
|
|
2534
|
-
|
|
2535
|
-
// color/color-primitives.ts
|
|
2536
|
-
function clampUnitInterval(value) {
|
|
2537
|
-
return Math.min(1, Math.max(0, value));
|
|
2538
|
-
}
|
|
2539
|
-
function hexToRgbChannels(color) {
|
|
2540
|
-
const normalized = color.replace("#", "");
|
|
2541
|
-
if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {
|
|
2542
|
-
return null;
|
|
2543
|
-
}
|
|
2544
|
-
return {
|
|
2545
|
-
r: Number.parseInt(normalized.slice(0, 2), 16),
|
|
2546
|
-
g: Number.parseInt(normalized.slice(2, 4), 16),
|
|
2547
|
-
b: Number.parseInt(normalized.slice(4, 6), 16)
|
|
2548
|
-
};
|
|
2549
|
-
}
|
|
2550
|
-
function percentDivisorFor(text) {
|
|
2551
|
-
return text.endsWith("%") ? 100 : 1e5;
|
|
2552
|
-
}
|
|
2553
|
-
function parseOoxmlPercent(value) {
|
|
2554
|
-
const text = String(value ?? "").trim();
|
|
2555
|
-
const divisor = percentDivisorFor(text);
|
|
2556
|
-
const magnitude = Number.parseFloat(divisor === 100 ? text.slice(0, -1) : text);
|
|
2557
|
-
if (!Number.isFinite(magnitude)) {
|
|
2558
|
-
return void 0;
|
|
2559
|
-
}
|
|
2560
|
-
return magnitude / divisor;
|
|
2561
|
-
}
|
|
2562
|
-
function parseDrawingPercent(value) {
|
|
2563
|
-
const parsed = parseOoxmlPercent(value);
|
|
2564
|
-
return parsed === void 0 ? void 0 : clampUnitInterval(parsed);
|
|
2565
|
-
}
|
|
2566
|
-
function scrgbLinearToSrgb8(linear) {
|
|
2567
|
-
const l = Math.min(1, Math.max(0, linear));
|
|
2568
|
-
const companded = l <= 31308e-7 ? 12.92 * l : 1.055 * l ** (1 / 2.4) - 0.055;
|
|
2569
|
-
return Math.min(255, Math.max(0, Math.round(companded * 255)));
|
|
2570
|
-
}
|
|
2571
|
-
function toHex2(value) {
|
|
2572
|
-
return Math.min(255, Math.max(0, Math.round(value))).toString(16).padStart(2, "0").toUpperCase();
|
|
2573
|
-
}
|
|
2574
|
-
function rgbToHsl(r, g, b) {
|
|
2575
|
-
const rN = r / 255;
|
|
2576
|
-
const gN = g / 255;
|
|
2577
|
-
const bN = b / 255;
|
|
2578
|
-
const cMax = Math.max(rN, gN, bN);
|
|
2579
|
-
const cMin = Math.min(rN, gN, bN);
|
|
2580
|
-
const delta = cMax - cMin;
|
|
2581
|
-
const l = (cMax + cMin) / 2;
|
|
2582
|
-
let s = 0;
|
|
2583
|
-
if (delta !== 0) {
|
|
2584
|
-
s = delta / (1 - Math.abs(2 * l - 1));
|
|
2585
|
-
}
|
|
2586
|
-
let h = 0;
|
|
2587
|
-
if (delta !== 0) {
|
|
2588
|
-
if (cMax === rN) {
|
|
2589
|
-
h = 60 * ((gN - bN) / delta % 6);
|
|
2590
|
-
} else if (cMax === gN) {
|
|
2591
|
-
h = 60 * ((bN - rN) / delta + 2);
|
|
2592
|
-
} else {
|
|
2593
|
-
h = 60 * ((rN - gN) / delta + 4);
|
|
2594
|
-
}
|
|
2595
|
-
}
|
|
2596
|
-
if (h < 0) {
|
|
2597
|
-
h += 360;
|
|
2598
|
-
}
|
|
2599
|
-
return { h, s: clampUnitInterval(s), l: clampUnitInterval(l) };
|
|
2600
|
-
}
|
|
2601
|
-
function hslToRgb(h, s, l, roundChannel = Math.round, options) {
|
|
2602
|
-
const sC = clampUnitInterval(s);
|
|
2603
|
-
const lC = clampUnitInterval(l);
|
|
2604
|
-
const hN = (h % 360 + 360) % 360;
|
|
2605
|
-
const c = (1 - Math.abs(2 * lC - 1)) * sC;
|
|
2606
|
-
const x = c * (1 - Math.abs(hN / 60 % 2 - 1));
|
|
2607
|
-
const m = lC - c / 2;
|
|
2608
|
-
let rP = 0;
|
|
2609
|
-
let gP = 0;
|
|
2610
|
-
let bP = 0;
|
|
2611
|
-
if (hN < 60) {
|
|
2612
|
-
rP = c;
|
|
2613
|
-
gP = x;
|
|
2614
|
-
bP = 0;
|
|
2615
|
-
} else if (hN < 120) {
|
|
2616
|
-
rP = x;
|
|
2617
|
-
gP = c;
|
|
2618
|
-
bP = 0;
|
|
2619
|
-
} else if (hN < 180) {
|
|
2620
|
-
rP = 0;
|
|
2621
|
-
gP = c;
|
|
2622
|
-
bP = x;
|
|
2623
|
-
} else if (hN < 240) {
|
|
2624
|
-
rP = 0;
|
|
2625
|
-
gP = x;
|
|
2626
|
-
bP = c;
|
|
2627
|
-
} else if (hN < 300) {
|
|
2628
|
-
rP = x;
|
|
2629
|
-
gP = 0;
|
|
2630
|
-
bP = c;
|
|
2631
|
-
} else {
|
|
2632
|
-
rP = c;
|
|
2633
|
-
gP = 0;
|
|
2634
|
-
bP = x;
|
|
2635
|
-
}
|
|
2636
|
-
return {
|
|
2637
|
-
r: roundChannel((rP + m) * 255),
|
|
2638
|
-
g: roundChannel((gP + m) * 255),
|
|
2639
|
-
b: roundChannel((bP + m) * 255)
|
|
2640
|
-
};
|
|
2641
|
-
}
|
|
2642
|
-
function parseDrawingFraction(value) {
|
|
2643
|
-
return parseOoxmlPercent(value);
|
|
2644
|
-
}
|
|
2645
|
-
function parseDrawingHueDegrees(value) {
|
|
2646
|
-
const parsed = Number.parseFloat(String(value ?? "").trim());
|
|
2647
|
-
if (!Number.isFinite(parsed)) {
|
|
2648
|
-
return void 0;
|
|
2649
|
-
}
|
|
2650
|
-
return parsed / 6e4;
|
|
2651
|
-
}
|
|
2652
|
-
|
|
2653
|
-
// color/color-linear.ts
|
|
2654
|
-
function srgb255ToLinear(channel) {
|
|
2655
|
-
const c = clampUnitInterval(channel / 255);
|
|
2656
|
-
return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
2764
|
+
var descendants = (root, ns, local) => Array.from(root.getElementsByTagNameNS(ns, local));
|
|
2765
|
+
function paragraphsFor(doc, lines) {
|
|
2766
|
+
return (lines.length ? lines : [""]).map((line) => {
|
|
2767
|
+
const paragraph = makeW(doc, "p");
|
|
2768
|
+
if (line) {
|
|
2769
|
+
const run = makeW(doc, "r");
|
|
2770
|
+
const text = makeW(doc, "t");
|
|
2771
|
+
if (/^\s|\s$/.test(line))
|
|
2772
|
+
text.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
|
|
2773
|
+
text.textContent = line;
|
|
2774
|
+
add(run, text);
|
|
2775
|
+
add(paragraph, run);
|
|
2776
|
+
}
|
|
2777
|
+
return paragraph;
|
|
2778
|
+
});
|
|
2657
2779
|
}
|
|
2658
|
-
function
|
|
2659
|
-
const
|
|
2660
|
-
|
|
2780
|
+
function outline(doc, border) {
|
|
2781
|
+
const ln = el(doc, A_NS, "a:ln");
|
|
2782
|
+
if (!border) return add(ln, el(doc, A_NS, "a:noFill"));
|
|
2783
|
+
ln.setAttribute("w", "9525");
|
|
2784
|
+
const color = el(doc, A_NS, "a:srgbClr");
|
|
2785
|
+
color.setAttribute("val", "000000");
|
|
2786
|
+
return add(ln, add(el(doc, A_NS, "a:solidFill"), color));
|
|
2661
2787
|
}
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
grey: "#808080"
|
|
2673
|
-
};
|
|
2674
|
-
function baseHex(color, theme) {
|
|
2675
|
-
switch (color.kind) {
|
|
2676
|
-
case "srgb":
|
|
2677
|
-
return /^[0-9a-f]{6}$/i.test(color.value) ? `#${color.value.toUpperCase()}` : void 0;
|
|
2678
|
-
case "scheme":
|
|
2679
|
-
return theme?.scheme(color.value);
|
|
2680
|
-
case "system":
|
|
2681
|
-
return color.fallback && /^[0-9a-f]{6}$/i.test(color.fallback) ? `#${color.fallback.toUpperCase()}` : void 0;
|
|
2682
|
-
case "preset":
|
|
2683
|
-
return PRESET_COLORS[color.value];
|
|
2684
|
-
case "scrgb": {
|
|
2685
|
-
const [r, g, b] = color.value.split(",").map((part) => parseDrawingFraction(part));
|
|
2686
|
-
if (r === void 0 || g === void 0 || b === void 0) return void 0;
|
|
2687
|
-
return `#${toHex2(scrgbLinearToSrgb8(r))}${toHex2(scrgbLinearToSrgb8(g))}${toHex2(scrgbLinearToSrgb8(b))}`;
|
|
2788
|
+
function patchTextBox(doc, drawing, image, base) {
|
|
2789
|
+
if (image.widthPx !== base.widthPx || image.heightPx !== base.heightPx)
|
|
2790
|
+
for (const node of [
|
|
2791
|
+
...descendants(drawing, WP_NS, "extent"),
|
|
2792
|
+
...descendants(drawing, A_NS, "ext").filter(
|
|
2793
|
+
(ext) => ext.parentNode?.localName === "xfrm"
|
|
2794
|
+
)
|
|
2795
|
+
]) {
|
|
2796
|
+
node.setAttribute("cx", emu(image.widthPx));
|
|
2797
|
+
node.setAttribute("cy", emu(image.heightPx));
|
|
2688
2798
|
}
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
const
|
|
2693
|
-
|
|
2694
|
-
if (hue === void 0 || sat === void 0 || lum === void 0) return void 0;
|
|
2695
|
-
const { r, g, b } = hslToRgb(hue, sat, lum);
|
|
2696
|
-
return `#${toHex2(r)}${toHex2(g)}${toHex2(b)}`;
|
|
2799
|
+
if (JSON.stringify(image.textBoxText) !== JSON.stringify(base.textBoxText)) {
|
|
2800
|
+
const content = descendants(drawing, W_NS, "txbxContent")[0];
|
|
2801
|
+
if (content) {
|
|
2802
|
+
for (const child of Array.from(content.childNodes)) content.removeChild(child);
|
|
2803
|
+
add(content, ...paragraphsFor(doc, image.textBoxText ?? []));
|
|
2697
2804
|
}
|
|
2698
2805
|
}
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2706
|
-
|
|
2707
|
-
|
|
2708
|
-
"tint",
|
|
2709
|
-
"hue",
|
|
2710
|
-
"hueMod",
|
|
2711
|
-
"hueOff",
|
|
2712
|
-
"sat",
|
|
2713
|
-
"satMod",
|
|
2714
|
-
"satOff",
|
|
2715
|
-
"lum",
|
|
2716
|
-
"lumMod",
|
|
2717
|
-
"lumOff"
|
|
2718
|
-
]);
|
|
2719
|
-
function resolveDrawingColor(color, theme, options) {
|
|
2720
|
-
const base = baseHex(color, theme);
|
|
2721
|
-
const rgb = base ? hexToRgbChannels(base) : null;
|
|
2722
|
-
if (!rgb) return void 0;
|
|
2723
|
-
let { r, g, b } = rgb;
|
|
2724
|
-
const find = (name) => color.transforms.find((entry) => entry.name === name)?.value;
|
|
2725
|
-
const has = (name) => color.transforms.some((entry) => entry.name === name);
|
|
2726
|
-
if (has("comp")) {
|
|
2727
|
-
const hsl = rgbToHsl(r, g, b);
|
|
2728
|
-
({ r, g, b } = hslToRgb((hsl.h + 180) % 360, hsl.s, hsl.l));
|
|
2729
|
-
}
|
|
2730
|
-
if (has("inv")) [r, g, b] = [255 - r, 255 - g, 255 - b];
|
|
2731
|
-
if (has("gray")) r = g = b = Math.round(0.299 * r + 0.587 * g + 0.114 * b);
|
|
2732
|
-
const shade = parseDrawingPercent(find("shade"));
|
|
2733
|
-
if (shade !== void 0) {
|
|
2734
|
-
r = linearToSrgb255(srgb255ToLinear(r) * shade);
|
|
2735
|
-
g = linearToSrgb255(srgb255ToLinear(g) * shade);
|
|
2736
|
-
b = linearToSrgb255(srgb255ToLinear(b) * shade);
|
|
2737
|
-
}
|
|
2738
|
-
const tint = parseDrawingPercent(find("tint"));
|
|
2739
|
-
if (tint !== void 0) {
|
|
2740
|
-
r = linearToSrgb255(1 - (1 - srgb255ToLinear(r)) * tint);
|
|
2741
|
-
g = linearToSrgb255(1 - (1 - srgb255ToLinear(g)) * tint);
|
|
2742
|
-
b = linearToSrgb255(1 - (1 - srgb255ToLinear(b)) * tint);
|
|
2743
|
-
}
|
|
2744
|
-
if (["hue", "hueMod", "hueOff", "sat", "satMod", "satOff", "lum", "lumMod", "lumOff"].some(has)) {
|
|
2745
|
-
const hsl = rgbToHsl(r, g, b);
|
|
2746
|
-
const wrap = (degrees) => (degrees % 360 + 360) % 360;
|
|
2747
|
-
const hueAbs = parseDrawingHueDegrees(find("hue"));
|
|
2748
|
-
if (hueAbs !== void 0) hsl.h = wrap(hueAbs);
|
|
2749
|
-
const hueMod = parseDrawingFraction(find("hueMod"));
|
|
2750
|
-
if (hueMod !== void 0) hsl.h = wrap(hsl.h * hueMod);
|
|
2751
|
-
const hueOff = parseDrawingHueDegrees(find("hueOff"));
|
|
2752
|
-
if (hueOff !== void 0) hsl.h = wrap(hsl.h + hueOff);
|
|
2753
|
-
const satAbs = parseDrawingFraction(find("sat"));
|
|
2754
|
-
if (satAbs !== void 0) hsl.s = clampUnitInterval(satAbs);
|
|
2755
|
-
const satMod = parseDrawingFraction(find("satMod"));
|
|
2756
|
-
if (satMod !== void 0) hsl.s = clampUnitInterval(hsl.s * satMod);
|
|
2757
|
-
const satOff = parseDrawingFraction(find("satOff"));
|
|
2758
|
-
if (satOff !== void 0) hsl.s = clampUnitInterval(hsl.s + satOff);
|
|
2759
|
-
const lumAbs = parseDrawingFraction(find("lum"));
|
|
2760
|
-
if (lumAbs !== void 0) hsl.l = clampUnitInterval(lumAbs);
|
|
2761
|
-
const lumMod = parseDrawingFraction(find("lumMod"));
|
|
2762
|
-
if (lumMod !== void 0) hsl.l = clampUnitInterval(hsl.l * lumMod);
|
|
2763
|
-
const lumOff = parseDrawingFraction(find("lumOff"));
|
|
2764
|
-
if (lumOff !== void 0) hsl.l = clampUnitInterval(hsl.l + lumOff);
|
|
2765
|
-
const round = Math.round;
|
|
2766
|
-
({ r, g, b } = hslToRgb(hsl.h, hsl.s, hsl.l, round));
|
|
2806
|
+
if (image.textBoxBorder !== false !== (base.textBoxBorder !== false)) {
|
|
2807
|
+
const spPr = descendants(drawing, WPS_NS, "spPr")[0];
|
|
2808
|
+
if (spPr) {
|
|
2809
|
+
for (const old of Array.from(spPr.childNodes).filter(
|
|
2810
|
+
(node) => isElement(node) && node.localName === "ln"
|
|
2811
|
+
))
|
|
2812
|
+
spPr.removeChild(old);
|
|
2813
|
+
spPr.appendChild(outline(doc, image.textBoxBorder !== false));
|
|
2814
|
+
}
|
|
2767
2815
|
}
|
|
2768
|
-
let alpha = parseDrawingPercent(find("alpha")) ?? 1;
|
|
2769
|
-
const alphaMod = parseDrawingFraction(find("alphaMod"));
|
|
2770
|
-
if (alphaMod !== void 0) alpha = clampUnitInterval(alpha * alphaMod);
|
|
2771
|
-
const alphaOff = parseDrawingFraction(find("alphaOff"));
|
|
2772
|
-
if (alphaOff !== void 0) alpha = clampUnitInterval(alpha + alphaOff);
|
|
2773
|
-
return {
|
|
2774
|
-
hex: `#${toHex2(r)}${toHex2(g)}${toHex2(b)}`,
|
|
2775
|
-
alpha,
|
|
2776
|
-
unapplied: [...new Set(color.transforms.map((entry) => entry.name))].filter(
|
|
2777
|
-
(name) => !APPLIED.has(name)
|
|
2778
|
-
)
|
|
2779
|
-
};
|
|
2780
2816
|
}
|
|
2781
2817
|
|
|
2782
2818
|
// docx/write-drawing.ts
|
|
@@ -2890,6 +2926,17 @@ function restoreRunFormatting(run) {
|
|
|
2890
2926
|
else delete run.revision;
|
|
2891
2927
|
}
|
|
2892
2928
|
|
|
2929
|
+
// docx/field-flags.ts
|
|
2930
|
+
function writeFieldFlags(element, flags) {
|
|
2931
|
+
for (const [name, value] of [
|
|
2932
|
+
["fldLock", flags?.locked],
|
|
2933
|
+
["dirty", flags?.dirty]
|
|
2934
|
+
]) {
|
|
2935
|
+
if (value === void 0) element.removeAttributeNS(WORD_NS, name);
|
|
2936
|
+
else element.setAttributeNS(WORD_NS, `w:${name}`, value ? "true" : "false");
|
|
2937
|
+
}
|
|
2938
|
+
}
|
|
2939
|
+
|
|
2893
2940
|
// docx/write-run.ts
|
|
2894
2941
|
function setAttribute6(element, local, value) {
|
|
2895
2942
|
element.setAttributeNS(WORD_NS, `w:${local}`, value);
|
|
@@ -3075,6 +3122,7 @@ function createRun(doc, run, base, old, allocator) {
|
|
|
3075
3122
|
if (run.fieldChar) {
|
|
3076
3123
|
const marker = makeW(doc, "fldChar");
|
|
3077
3124
|
setAttribute6(marker, "fldCharType", run.fieldChar);
|
|
3125
|
+
writeFieldFlags(marker, run.fieldFlags);
|
|
3078
3126
|
node.appendChild(marker);
|
|
3079
3127
|
return node;
|
|
3080
3128
|
}
|
|
@@ -3155,6 +3203,11 @@ function takeSimpleFieldCommentEdges(doc, runs, start, end, opens, closes) {
|
|
|
3155
3203
|
after: take(closes, end - 1).reverse().flatMap((edge) => rangeEndNodes(doc, edge))
|
|
3156
3204
|
};
|
|
3157
3205
|
}
|
|
3206
|
+
|
|
3207
|
+
// docx/field-lock.ts
|
|
3208
|
+
function sameFieldFlags(a, b) {
|
|
3209
|
+
return a?.locked === b?.locked && a?.dirty === b?.dirty;
|
|
3210
|
+
}
|
|
3158
3211
|
var MATH_NAMESPACES = /* @__PURE__ */ new Set([
|
|
3159
3212
|
"http://schemas.openxmlformats.org/officeDocument/2006/math",
|
|
3160
3213
|
"http://purl.oclc.org/ooxml/officeDocument/math"
|
|
@@ -3350,6 +3403,7 @@ function buildInlineContent(doc, runs, base, slots, allocator, ranges) {
|
|
|
3350
3403
|
container = makeW(doc, "fldSimple");
|
|
3351
3404
|
setW2(container, "instr", ` ${group.instr} `);
|
|
3352
3405
|
}
|
|
3406
|
+
if (group.kind === "simpleField") writeFieldFlags(container, runAt(start).fieldFlags);
|
|
3353
3407
|
const edges = group.kind === "simpleField" ? takeSimpleFieldCommentEdges(doc, runs, start, index, opens, closes) : { before: [], after: [] };
|
|
3354
3408
|
for (let item = start; item < index; item++)
|
|
3355
3409
|
for (const node of nodesFor(item)) container.appendChild(node);
|
|
@@ -3360,13 +3414,18 @@ function buildInlineContent(doc, runs, base, slots, allocator, ranges) {
|
|
|
3360
3414
|
function containerGroup(run) {
|
|
3361
3415
|
if (run.link) return { kind: "link", link: run.link };
|
|
3362
3416
|
if (run.field?.simple)
|
|
3363
|
-
return {
|
|
3417
|
+
return {
|
|
3418
|
+
kind: "simpleField",
|
|
3419
|
+
instr: run.field.instr,
|
|
3420
|
+
instanceId: run.fieldInstanceId,
|
|
3421
|
+
fieldFlags: run.fieldFlags
|
|
3422
|
+
};
|
|
3364
3423
|
return void 0;
|
|
3365
3424
|
}
|
|
3366
3425
|
function sameGroup(a, b) {
|
|
3367
3426
|
if (!a || !b) return a === b;
|
|
3368
3427
|
if (a.kind === "link" && b.kind === "link") return sameLink(a.link, b.link);
|
|
3369
|
-
return a.kind === "simpleField" && b.kind === "simpleField" && a.instr === b.instr && a.instanceId === b.instanceId;
|
|
3428
|
+
return a.kind === "simpleField" && b.kind === "simpleField" && a.instr === b.instr && a.instanceId === b.instanceId && sameFieldFlags(a.fieldFlags, b.fieldFlags);
|
|
3370
3429
|
}
|
|
3371
3430
|
|
|
3372
3431
|
// docx/paragraph-properties.ts
|
|
@@ -3538,19 +3597,6 @@ function createParagraph(doc, paragraph, allocator, spans) {
|
|
|
3538
3597
|
return writeParagraphImpl(doc, paragraph, node, void 0, allocator, spans);
|
|
3539
3598
|
}
|
|
3540
3599
|
|
|
3541
|
-
// docx/document-paragraphs.ts
|
|
3542
|
-
function documentBlockLists(model) {
|
|
3543
|
-
return [
|
|
3544
|
-
model.blocks,
|
|
3545
|
-
...(model.sections ?? []).flatMap(
|
|
3546
|
-
(section) => [section.headers, section.footers].flatMap(
|
|
3547
|
-
(slots) => Object.values(slots ?? {}).flatMap((content) => content ? [content.blocks] : [])
|
|
3548
|
-
)
|
|
3549
|
-
),
|
|
3550
|
-
...[...model.footnotes ?? [], ...model.endnotes ?? []].map((note) => note.blocks)
|
|
3551
|
-
];
|
|
3552
|
-
}
|
|
3553
|
-
|
|
3554
3600
|
// docx/numbering-parse.ts
|
|
3555
3601
|
function resolveNumberingLevel(catalog, numId, level) {
|
|
3556
3602
|
const num = catalog.nums[numId];
|
|
@@ -3576,33 +3622,26 @@ function resolveNumberingLevel(catalog, numId, level) {
|
|
|
3576
3622
|
return start !== base.start ? { ...base, start } : base;
|
|
3577
3623
|
}
|
|
3578
3624
|
|
|
3625
|
+
// docx/document-paragraphs.ts
|
|
3626
|
+
function documentBlockLists(model) {
|
|
3627
|
+
return [
|
|
3628
|
+
model.blocks,
|
|
3629
|
+
...(model.sections ?? []).flatMap(
|
|
3630
|
+
(section) => [section.headers, section.footers].flatMap(
|
|
3631
|
+
(slots) => Object.values(slots ?? {}).flatMap((content) => content ? [content.blocks] : [])
|
|
3632
|
+
)
|
|
3633
|
+
),
|
|
3634
|
+
...[...model.footnotes ?? [], ...model.endnotes ?? []].map((note) => note.blocks)
|
|
3635
|
+
];
|
|
3636
|
+
}
|
|
3637
|
+
|
|
3579
3638
|
// docx/diagram-theme.ts
|
|
3580
|
-
var DEFAULT_MAPPING = {
|
|
3581
|
-
bg1: "lt1",
|
|
3582
|
-
tx1: "dk1",
|
|
3583
|
-
bg2: "lt2",
|
|
3584
|
-
tx2: "dk2"
|
|
3585
|
-
};
|
|
3586
|
-
var SLOTS = /* @__PURE__ */ new Set([
|
|
3587
|
-
"dk1",
|
|
3588
|
-
"lt1",
|
|
3589
|
-
"dk2",
|
|
3590
|
-
"lt2",
|
|
3591
|
-
"accent1",
|
|
3592
|
-
"accent2",
|
|
3593
|
-
"accent3",
|
|
3594
|
-
"accent4",
|
|
3595
|
-
"accent5",
|
|
3596
|
-
"accent6",
|
|
3597
|
-
"hlink",
|
|
3598
|
-
"folHlink"
|
|
3599
|
-
]);
|
|
3600
3639
|
function diagramColorTheme(theme) {
|
|
3601
3640
|
return {
|
|
3602
3641
|
scheme(name) {
|
|
3603
3642
|
if (!theme) return void 0;
|
|
3604
|
-
const
|
|
3605
|
-
const hex =
|
|
3643
|
+
const slot = themeColorSlotFor(name, theme.colorMapping);
|
|
3644
|
+
const hex = slot ? theme.colors[slot] : void 0;
|
|
3606
3645
|
return hex ? `#${hex.replace(/^#/, "").toUpperCase()}` : void 0;
|
|
3607
3646
|
}
|
|
3608
3647
|
};
|
|
@@ -3966,6 +4005,7 @@ var ligatureStyle = (value) => isLigatures(value) ? `font-variant-ligatures:${li
|
|
|
3966
4005
|
// docx/ui/run-extra-mark.ts
|
|
3967
4006
|
var extraRunFields = [
|
|
3968
4007
|
"fieldInstanceId",
|
|
4008
|
+
"fieldFlags",
|
|
3969
4009
|
"restoredRunPropertiesXml",
|
|
3970
4010
|
"sourceRunPropertiesXml",
|
|
3971
4011
|
"formatRevision",
|
|
@@ -4491,12 +4531,12 @@ function fieldClipboardSlice(slice) {
|
|
|
4491
4531
|
if (!(field?.attrs.simple ?? cached2?.simple) && complete.has(pos)) return node;
|
|
4492
4532
|
const marks = node.marks.flatMap((mark) => {
|
|
4493
4533
|
if (mark.type === field?.type) return [];
|
|
4494
|
-
if (mark.type.name !== "runProperties"
|
|
4495
|
-
const { fieldInstanceId: _identity, ...props } = mark.attrs.props;
|
|
4534
|
+
if (mark.type.name !== "runProperties") return [mark];
|
|
4535
|
+
const { fieldInstanceId: _identity, fieldFlags: _flags2, ...props } = mark.attrs.props ?? {};
|
|
4496
4536
|
return Object.keys(props).length ? [mark.type.create({ ...mark.attrs, props })] : [];
|
|
4497
4537
|
});
|
|
4498
4538
|
if (!properties3 || !cached2) return node.mark(marks);
|
|
4499
|
-
const { field: _field, fieldInstanceId: _id, ...literal } = properties3;
|
|
4539
|
+
const { field: _field, fieldInstanceId: _id, fieldFlags: _flags, ...literal } = properties3;
|
|
4500
4540
|
return node.type.create(
|
|
4501
4541
|
updatedInlineRunAttributes(
|
|
4502
4542
|
node,
|
|
@@ -4520,13 +4560,14 @@ function fieldResultRanges(doc) {
|
|
|
4520
4560
|
const field = doc.type.schema.marks.field;
|
|
4521
4561
|
if (!field) return runs;
|
|
4522
4562
|
const identityOf = (marks) => marks.find((mark) => mark.type.name === "runProperties")?.attrs.props?.fieldInstanceId;
|
|
4563
|
+
const flagsOf = (marks) => marks.find((mark) => mark.type.name === "runProperties")?.attrs.props?.fieldFlags;
|
|
4523
4564
|
doc.descendants((node, pos) => {
|
|
4524
4565
|
if (node.type.name !== "paragraph") return true;
|
|
4525
4566
|
let open;
|
|
4526
4567
|
node.forEach((child, offset) => {
|
|
4527
4568
|
const mark = child.isText ? child.marks.find((item) => item.type === field) : void 0;
|
|
4528
4569
|
const start = pos + 1 + offset;
|
|
4529
|
-
if (mark && open?.mark.eq(mark) && identityOf(open.marks) === identityOf(child.marks)) {
|
|
4570
|
+
if (mark && open?.mark.eq(mark) && identityOf(open.marks) === identityOf(child.marks) && sameFieldFlags(flagsOf(open.marks), flagsOf(child.marks))) {
|
|
4530
4571
|
open.to = start + child.nodeSize;
|
|
4531
4572
|
open.text += child.text ?? "";
|
|
4532
4573
|
} else if (mark) {
|
|
@@ -4554,14 +4595,20 @@ function targetField(state, from, to) {
|
|
|
4554
4595
|
}
|
|
4555
4596
|
function resultMarks(node, field) {
|
|
4556
4597
|
let marks = field.mark.addToSet(node.marks);
|
|
4557
|
-
const
|
|
4598
|
+
const source = field.marks.find((mark) => mark.type.name === "runProperties")?.attrs.props;
|
|
4599
|
+
const id = source?.fieldInstanceId;
|
|
4600
|
+
const state = {
|
|
4601
|
+
...typeof id === "string" && { fieldInstanceId: id },
|
|
4602
|
+
...source?.fieldFlags && { fieldFlags: source.fieldFlags }
|
|
4603
|
+
};
|
|
4558
4604
|
const properties3 = node.type.schema.marks.runProperties;
|
|
4559
|
-
if (
|
|
4605
|
+
if (properties3) {
|
|
4560
4606
|
const old = properties3.isInSet(marks);
|
|
4561
|
-
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4607
|
+
const { fieldInstanceId: _identity, fieldFlags: _flags, ...other } = old?.attrs.props ?? {};
|
|
4608
|
+
const props = { ...other, ...state };
|
|
4609
|
+
marks = properties3.removeFromSet(marks);
|
|
4610
|
+
if (Object.keys(props).length)
|
|
4611
|
+
marks = properties3.create({ ...old?.attrs ?? {}, props }).addToSet(marks);
|
|
4565
4612
|
}
|
|
4566
4613
|
return marks;
|
|
4567
4614
|
}
|
|
@@ -4591,29 +4638,41 @@ function replaceSimpleFieldResult(state, from, to, text) {
|
|
|
4591
4638
|
const field = targetField(state, from, to);
|
|
4592
4639
|
if (!field) return null;
|
|
4593
4640
|
if (!text) {
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
if (!run) return null;
|
|
4597
|
-
const format = {
|
|
4598
|
-
...run.commentIds && { commentIds: run.commentIds }
|
|
4599
|
-
};
|
|
4600
|
-
const markers = [
|
|
4601
|
-
{ ...format, text: "", fieldChar: "begin" },
|
|
4602
|
-
{ ...format, text: "", fieldCode: field.mark.attrs.instr },
|
|
4603
|
-
{ ...format, text: "", fieldChar: "separate" },
|
|
4604
|
-
{ ...format, text: "", fieldChar: "end" }
|
|
4605
|
-
].flatMap((item) => runToInlineNodes(item, state.schema));
|
|
4606
|
-
const tr2 = state.tr.replaceWith(from, to, markers);
|
|
4641
|
+
const tr2 = state.tr;
|
|
4642
|
+
if (!emptySimpleFieldResult(tr2, from, to)) return null;
|
|
4607
4643
|
return tr2.setSelection(TextSelection.create(tr2.doc, from + 3));
|
|
4608
4644
|
}
|
|
4609
|
-
const
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
4645
|
+
const $from = state.doc.resolve(from);
|
|
4646
|
+
const marks = state.storedMarks ?? (from === to ? $from.marks() : $from.marksAcross(state.doc.resolve(to)));
|
|
4647
|
+
const node = state.schema.text(text, marks);
|
|
4648
|
+
const tr = state.tr.replaceRangeWith(from, to, node.mark(resultMarks(node, field)));
|
|
4649
|
+
if (!tr.selection.empty && tr.selection.to === from + text.length)
|
|
4650
|
+
tr.setSelection(TextSelection.near(tr.selection.$to));
|
|
4615
4651
|
return tr;
|
|
4616
4652
|
}
|
|
4653
|
+
function emptySimpleFieldResult(transform, from, to) {
|
|
4654
|
+
const field = fieldResultRanges(transform.doc).find(
|
|
4655
|
+
(range) => range.mark.attrs.simple && range.from === from && range.to === to
|
|
4656
|
+
);
|
|
4657
|
+
const schema = transform.doc.type.schema;
|
|
4658
|
+
if (!field || !schema.nodes.fieldMarker) return false;
|
|
4659
|
+
const run = inlineNodeRun(transform.doc.nodeAt(from));
|
|
4660
|
+
if (!run) return false;
|
|
4661
|
+
const format = { ...run.commentIds && { commentIds: run.commentIds } };
|
|
4662
|
+
const markers = [
|
|
4663
|
+
{
|
|
4664
|
+
...format,
|
|
4665
|
+
text: "",
|
|
4666
|
+
fieldChar: "begin",
|
|
4667
|
+
...run.fieldFlags && { fieldFlags: run.fieldFlags }
|
|
4668
|
+
},
|
|
4669
|
+
{ ...format, text: "", fieldCode: field.mark.attrs.instr },
|
|
4670
|
+
{ ...format, text: "", fieldChar: "separate" },
|
|
4671
|
+
{ ...format, text: "", fieldChar: "end" }
|
|
4672
|
+
].flatMap((item) => runToInlineNodes(item, schema));
|
|
4673
|
+
transform.replaceWith(from, to, markers);
|
|
4674
|
+
return true;
|
|
4675
|
+
}
|
|
4617
4676
|
function deleteSimpleFieldResult(state, backward) {
|
|
4618
4677
|
const { from, to, empty } = state.selection;
|
|
4619
4678
|
if (!empty) return replaceSimpleFieldResult(state, from, to, "");
|
|
@@ -4627,6 +4686,7 @@ function deleteSimpleFieldResult(state, backward) {
|
|
|
4627
4686
|
}
|
|
4628
4687
|
|
|
4629
4688
|
// docx/ui/field-guard.ts
|
|
4689
|
+
var FIELD_RESULT_REPAIR_META = "dve-field-result-repair";
|
|
4630
4690
|
function markerKinds(doc) {
|
|
4631
4691
|
const kinds = [];
|
|
4632
4692
|
doc.descendants((node) => {
|
|
@@ -4702,11 +4762,12 @@ function markFieldResults(state) {
|
|
|
4702
4762
|
const fieldMark = state.schema.marks.field;
|
|
4703
4763
|
if (!fieldMark) return null;
|
|
4704
4764
|
const stack = [];
|
|
4705
|
-
const
|
|
4765
|
+
const transaction = state.tr;
|
|
4706
4766
|
state.doc.descendants((node, pos) => {
|
|
4707
4767
|
if (node.type.name === "fieldMarker") {
|
|
4708
4768
|
const kind = node.attrs.kind;
|
|
4709
|
-
if (kind === "begin")
|
|
4769
|
+
if (kind === "begin")
|
|
4770
|
+
stack.push({ code: "", inResult: false, locked: inlineNodeRun(node)?.fieldFlags?.locked });
|
|
4710
4771
|
else if (kind === "code" && stack.length) {
|
|
4711
4772
|
const open = stack[stack.length - 1];
|
|
4712
4773
|
if (open) open.code += node.attrs.code ?? "";
|
|
@@ -4717,15 +4778,28 @@ function markFieldResults(state) {
|
|
|
4717
4778
|
return false;
|
|
4718
4779
|
}
|
|
4719
4780
|
const top = stack.at(-1);
|
|
4720
|
-
if (node.isText && top?.inResult
|
|
4721
|
-
|
|
4781
|
+
if (node.isText && top?.inResult) {
|
|
4782
|
+
const end = pos + node.nodeSize;
|
|
4783
|
+
if (!fieldMark.isInSet(node.marks))
|
|
4784
|
+
transaction.addMark(pos, end, fieldMark.create({ instr: top.code.trim(), simple: false }));
|
|
4785
|
+
const type = state.schema.marks.runProperties;
|
|
4786
|
+
const current = type?.isInSet(node.marks);
|
|
4787
|
+
const props = current?.attrs.props ?? {};
|
|
4788
|
+
if (type && props.fieldFlags?.locked !== top.locked) {
|
|
4789
|
+
const next = { ...props };
|
|
4790
|
+
const flags = { ...props.fieldFlags };
|
|
4791
|
+
if (top.locked === void 0) delete flags.locked;
|
|
4792
|
+
else flags.locked = top.locked;
|
|
4793
|
+
if (Object.keys(flags).length) next.fieldFlags = flags;
|
|
4794
|
+
else delete next.fieldFlags;
|
|
4795
|
+
if (current) transaction.removeMark(pos, end, current);
|
|
4796
|
+
if (Object.keys(next).length)
|
|
4797
|
+
transaction.addMark(pos, end, type.create({ ...current?.attrs, props: next }));
|
|
4798
|
+
}
|
|
4799
|
+
}
|
|
4722
4800
|
return true;
|
|
4723
4801
|
});
|
|
4724
|
-
|
|
4725
|
-
const transaction = state.tr;
|
|
4726
|
-
for (const { from, to, instr } of missing)
|
|
4727
|
-
transaction.addMark(from, to, fieldMark.create({ instr, simple: false }));
|
|
4728
|
-
return transaction;
|
|
4802
|
+
return transaction.docChanged ? transaction.setMeta(FIELD_RESULT_REPAIR_META, true) : null;
|
|
4729
4803
|
}
|
|
4730
4804
|
var isMarker = (node) => node?.type.name === "fieldMarker";
|
|
4731
4805
|
function trimSelection(state) {
|
|
@@ -6489,6 +6563,98 @@ function trackSimpleFieldDeletion(transform, from, to, slice, author, date, next
|
|
|
6489
6563
|
);
|
|
6490
6564
|
return { deletionIds, deletedText, insertedText: "" };
|
|
6491
6565
|
}
|
|
6566
|
+
function sourceProperties(value) {
|
|
6567
|
+
if (typeof value !== "string" || !value) return value;
|
|
6568
|
+
try {
|
|
6569
|
+
const properties3 = parsePropertiesSnapshot(value, "pPr");
|
|
6570
|
+
const run = first2(properties3, "rPr");
|
|
6571
|
+
if (run) {
|
|
6572
|
+
for (const name of ["ins", "del"])
|
|
6573
|
+
for (const revision of children2(run, name)) run.removeChild(revision);
|
|
6574
|
+
if (!run.childNodes.length && !run.attributes.length) properties3.removeChild(run);
|
|
6575
|
+
}
|
|
6576
|
+
return propertiesSignature(properties3);
|
|
6577
|
+
} catch {
|
|
6578
|
+
return value;
|
|
6579
|
+
}
|
|
6580
|
+
}
|
|
6581
|
+
function safeParagraph(node, allowInsertion = false) {
|
|
6582
|
+
if (node.type.name !== "paragraph" || !node.type.spec.attrs?.markRevision) return false;
|
|
6583
|
+
if (node.attrs.markRevision && !allowInsertion) return false;
|
|
6584
|
+
let fields = false;
|
|
6585
|
+
node.descendants((child) => {
|
|
6586
|
+
if (child.type.name === "fieldMarker" || child.marks.some((mark) => mark.type.name === "field"))
|
|
6587
|
+
fields = true;
|
|
6588
|
+
});
|
|
6589
|
+
return !fields;
|
|
6590
|
+
}
|
|
6591
|
+
function endsSection(state, node) {
|
|
6592
|
+
if (typeof state.doc.attrs.sections !== "string") return false;
|
|
6593
|
+
try {
|
|
6594
|
+
const sections = JSON.parse(state.doc.attrs.sections);
|
|
6595
|
+
return sections.some(
|
|
6596
|
+
(section, index) => section.endsAtBlockId === node.attrs.id && (index < sections.length - 1 || state.doc.lastChild !== node)
|
|
6597
|
+
);
|
|
6598
|
+
} catch {
|
|
6599
|
+
return true;
|
|
6600
|
+
}
|
|
6601
|
+
}
|
|
6602
|
+
function sameProperties(first3, second) {
|
|
6603
|
+
return Object.keys({ ...first3.attrs, ...second.attrs }).every(
|
|
6604
|
+
(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]))
|
|
6605
|
+
);
|
|
6606
|
+
}
|
|
6607
|
+
function trackParagraphBoundary(steps, oldState, newState, author, date, nextId) {
|
|
6608
|
+
if (steps.length !== 1 || !(steps[0] instanceof ReplaceStep) || steps[0].toJSON().structure !== true)
|
|
6609
|
+
return null;
|
|
6610
|
+
const step = steps[0];
|
|
6611
|
+
const $from = oldState.doc.resolve(step.from);
|
|
6612
|
+
const $to = oldState.doc.resolve(step.to);
|
|
6613
|
+
if ($from.depth !== 1 || $to.depth !== 1) return null;
|
|
6614
|
+
const first3 = $from.parent;
|
|
6615
|
+
const pos = $from.before();
|
|
6616
|
+
if (endsSection(oldState, first3)) return null;
|
|
6617
|
+
const revision = () => ({ author, date, dateUtc: date, id: nextId("revision") });
|
|
6618
|
+
if (step.from === step.to) {
|
|
6619
|
+
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)
|
|
6620
|
+
return null;
|
|
6621
|
+
const left = newState.doc.nodeAt(pos);
|
|
6622
|
+
if (!left) return null;
|
|
6623
|
+
const rightPos = pos + left.nodeSize;
|
|
6624
|
+
const right = newState.doc.nodeAt(rightPos);
|
|
6625
|
+
if (!right || !safeParagraph(left) || !safeParagraph(right) || !sameProperties(first3, left) || !sameProperties(first3, right) || !left.content.append(right.content).eq(first3.content))
|
|
6626
|
+
return null;
|
|
6627
|
+
const used = /* @__PURE__ */ new Set();
|
|
6628
|
+
newState.doc.descendants((node) => {
|
|
6629
|
+
if (node.attrs.id) used.add(String(node.attrs.id));
|
|
6630
|
+
});
|
|
6631
|
+
let id;
|
|
6632
|
+
do
|
|
6633
|
+
id = nextId("paragraph");
|
|
6634
|
+
while (used.has(id));
|
|
6635
|
+
return newState.tr.setNodeMarkup(pos, void 0, {
|
|
6636
|
+
...left.attrs,
|
|
6637
|
+
id,
|
|
6638
|
+
markRevision: { ...revision(), kind: "insert" }
|
|
6639
|
+
}).setNodeMarkup(rightPos, void 0, { ...first3.attrs });
|
|
6640
|
+
}
|
|
6641
|
+
if (step.to !== step.from + 2 || step.slice.size || step.from !== $from.end() || step.to !== $to.start())
|
|
6642
|
+
return null;
|
|
6643
|
+
const second = $to.parent;
|
|
6644
|
+
if (!safeParagraph(first3, true) || !safeParagraph(second) || !sameProperties(first3, second))
|
|
6645
|
+
return null;
|
|
6646
|
+
const pending = first3.attrs.markRevision;
|
|
6647
|
+
if (pending) {
|
|
6648
|
+
if (pending.kind !== "insert" || pending.author !== author) return null;
|
|
6649
|
+
const merged = newState.doc.nodeAt(pos);
|
|
6650
|
+
if (!merged || !merged.content.eq(first3.content.append(second.content))) return null;
|
|
6651
|
+
return newState.tr.setNodeMarkup(pos, void 0, { ...second.attrs });
|
|
6652
|
+
}
|
|
6653
|
+
return newState.tr.step(step.invert(oldState.doc)).setNodeMarkup(pos, void 0, {
|
|
6654
|
+
...first3.attrs,
|
|
6655
|
+
markRevision: { ...revision(), kind: "delete" }
|
|
6656
|
+
});
|
|
6657
|
+
}
|
|
6492
6658
|
|
|
6493
6659
|
// docx/ui/track-changes-mode.ts
|
|
6494
6660
|
var trackChangesPluginKey = new PluginKey("dve-track-changes");
|
|
@@ -6630,11 +6796,15 @@ function trackChangesPlugin(getAuthor, isEnabled, idGenerator = createCollaborat
|
|
|
6630
6796
|
(tr) => isHistoryTransaction(tr) || tr.getMeta(trackChangesPluginKey) || tr.getMeta(REMOTE_TRANSACTION_META)
|
|
6631
6797
|
))
|
|
6632
6798
|
return null;
|
|
6633
|
-
const relevant = transactions.filter(
|
|
6799
|
+
const relevant = transactions.filter(
|
|
6800
|
+
(tr) => tr.docChanged && !tr.getMeta(FIELD_RESULT_REPAIR_META)
|
|
6801
|
+
);
|
|
6634
6802
|
if (!relevant.length) return null;
|
|
6635
6803
|
const steps = relevant.flatMap((tr) => tr.steps);
|
|
6636
6804
|
const author = getAuthor() || "Author";
|
|
6637
6805
|
const date = new Date(Date.now()).toISOString();
|
|
6806
|
+
const boundary = trackParagraphBoundary(steps, oldState, newState, author, date, idGenerator);
|
|
6807
|
+
if (boundary) return boundary.setMeta(trackChangesPluginKey, { tracked: true });
|
|
6638
6808
|
if (!steps.length || !steps.every((step) => step instanceof ReplaceStep)) {
|
|
6639
6809
|
if (newState.doc.attrs.trackFormatting === false) return null;
|
|
6640
6810
|
const formatting = trackRunFormatting(
|
|
@@ -6672,7 +6842,7 @@ function trackChangesPlugin(getAuthor, isEnabled, idGenerator = createCollaborat
|
|
|
6672
6842
|
});
|
|
6673
6843
|
if (!transform.docChanged) return null;
|
|
6674
6844
|
const result = newState.tr;
|
|
6675
|
-
const applied =
|
|
6845
|
+
const applied = transactions.filter((tr) => tr.docChanged).flatMap(
|
|
6676
6846
|
(tr) => tr.steps.map((step, index) => ({
|
|
6677
6847
|
step,
|
|
6678
6848
|
doc: expectDefined(tr.docs[index], "document before step")
|
|
@@ -6850,8 +7020,9 @@ function resolveRanges(view, ranges, mode) {
|
|
|
6850
7020
|
continue;
|
|
6851
7021
|
}
|
|
6852
7022
|
const removeText = mode === "accept" === (range.kind === "delete");
|
|
6853
|
-
if (removeText)
|
|
6854
|
-
|
|
7023
|
+
if (removeText) {
|
|
7024
|
+
if (!emptySimpleFieldResult(tr, from, to)) tr.delete(from, to);
|
|
7025
|
+
} else {
|
|
6855
7026
|
clearInlineTextRevisions(tr, from, to);
|
|
6856
7027
|
tr = tr.removeMark(
|
|
6857
7028
|
from,
|
|
@@ -7874,4 +8045,4 @@ function fitZoomPercent(mode, viewport, page) {
|
|
|
7874
8045
|
return Math.max(10, Math.min(500, Math.floor(ratio * 100)));
|
|
7875
8046
|
}
|
|
7876
8047
|
|
|
7877
|
-
export { CollaborationAuthority, CollaborationClient, DirtyState, EDITOR_THEME_MODES, HEADER_FOOTER_INPUT, NotePartsStep, PAGE_GAP, PARAGRAPH_KEEP_KEYS, REMOTE_TRANSACTION_META, RIBBON_ACTION_IDS, RIBBON_ACTION_LABELS, SectionPartsStep, THEME_KEYS, WordYjsCollaboration, WordYjsComments, WordYjsMedia, acceptAllChanges, acceptChangeAtCursor, acceptRevisionRange, addComment, appendInlineNode, applyMarkFormatting, applyRunFormattingPatch, applyThemeColors, applyWordLink, authorColor, backstageFocus, clearDirectRunFormatting, collectRevisionRanges, commentAnchors, commentHistoryAttributes, commentIdsAtSelection, commentIdsFromMarks, commentIdsFromNode, commentThreadsFromDoc, countWords, createCollaborationIdGenerator, createToggleFormat, cssBorderSide, darkTheme, deleteAroundMarkers, deleteComment, deleteFieldSelection, dispatchIsolatedCommand, expectDefined, explicitOffFields, extraRunFields, extraRunProperties, fieldGuardPlugin, fieldMarkerNodeSpec, fieldResultRanges, fieldsBalanced, fitZoomPercent, formattingRevision, freezeBatch, goToComment, goToNextChange, goToPreviousChange, hardBreakNodeSpec, hasAnyChange, hasChangeAtCursor, hasNoteRevisions, imageNodeSpec, inlineNodeRun, insertWordHardBreak, isNavigableHref, isRibbonActionId, isWordYjsRemoteTransaction, ligatureCss, ligatureStyle, lightTheme, linkFromMarks, linkMarkSpec, markSpecs, marksForRun, moveName, nodeNumbering, normalizeRibbonActions, normalizeThemeMode, notePartsJson, noteReferenceNodeSpec, pageBreakNodeSpec, paragraphAttrs, paragraphBoxCss, paragraphFormattingRevision, paragraphFromAttrs, parseBatch, parseBordersJson, placementClass, refreshWordYjsPresence, rejectAllChanges, rejectChangeAtCursor, rejectRevisionRange, removeCommentAnchor, removeCommentThread, removeWordLink, repairCollaborativeDocumentIds, repairCollaborativeParagraphIds, replaceAroundMarkers, replyToComment, resolveCellVisuals, resolveComment, resolveNoteRevisions, restoreNoteParts, restoreSectionParts, reviewMarks, ribbonActionIdForLabel, runPropertiesMark, runToInlineNodes, sameJson2 as sameJson, sameRuns, sectionPartsJson, setCommentThreads, setReviewRecordingPreferences, swatchColor, tableCellStyle, tableStyle, themeDrawing, themeToCssVars, toggleTrackChanges, toggleTrackFormatting, toggleTrackMoves, trackChangesPlugin, trackChangesPluginKey, updateCommentThreads, wordHighlightColors, wordLinkRangeAt, wordYjsPluginKey, wordYjsPresencePlugin, wordYjsRedo, wordYjsUndo };
|
|
8048
|
+
export { CollaborationAuthority, CollaborationClient, DirtyState, EDITOR_THEME_MODES, FIELD_RESULT_REPAIR_META, HEADER_FOOTER_INPUT, NotePartsStep, PAGE_GAP, PARAGRAPH_KEEP_KEYS, REMOTE_TRANSACTION_META, RIBBON_ACTION_IDS, RIBBON_ACTION_LABELS, SectionPartsStep, THEME_KEYS, WordYjsCollaboration, WordYjsComments, WordYjsMedia, acceptAllChanges, acceptChangeAtCursor, acceptRevisionRange, addComment, appendInlineNode, applyMarkFormatting, applyRunFormattingPatch, applyThemeColors, applyWordLink, authorColor, backstageFocus, clearDirectRunFormatting, collectRevisionRanges, commentAnchors, commentHistoryAttributes, commentIdsAtSelection, commentIdsFromMarks, commentIdsFromNode, commentThreadsFromDoc, countWords, createCollaborationIdGenerator, createToggleFormat, cssBorderSide, darkTheme, deleteAroundMarkers, deleteComment, deleteFieldSelection, dispatchIsolatedCommand, expectDefined, explicitOffFields, extraRunFields, extraRunProperties, fieldGuardPlugin, fieldMarkerNodeSpec, fieldResultRanges, fieldsBalanced, fitZoomPercent, formattingRevision, freezeBatch, goToComment, goToNextChange, goToPreviousChange, hardBreakNodeSpec, hasAnyChange, hasChangeAtCursor, hasNoteRevisions, imageNodeSpec, inlineNodeRun, insertWordHardBreak, isNavigableHref, isRibbonActionId, isWordYjsRemoteTransaction, ligatureCss, ligatureStyle, lightTheme, linkFromMarks, linkMarkSpec, markSpecs, marksForRun, moveName, nodeNumbering, normalizeRibbonActions, normalizeThemeMode, notePartsJson, noteReferenceNodeSpec, pageBreakNodeSpec, paragraphAttrs, paragraphBoxCss, paragraphFormattingRevision, paragraphFromAttrs, parseBatch, parseBordersJson, placementClass, refreshWordYjsPresence, rejectAllChanges, rejectChangeAtCursor, rejectRevisionRange, removeCommentAnchor, removeCommentThread, removeWordLink, repairCollaborativeDocumentIds, repairCollaborativeParagraphIds, replaceAroundMarkers, replyToComment, resolveCellVisuals, resolveComment, resolveNoteRevisions, restoreNoteParts, restoreSectionParts, reviewMarks, ribbonActionIdForLabel, runPropertiesMark, runToInlineNodes, sameJson2 as sameJson, sameRuns, sectionPartsJson, setCommentThreads, setReviewRecordingPreferences, swatchColor, tableCellStyle, tableStyle, themeDrawing, themeToCssVars, toggleTrackChanges, toggleTrackFormatting, toggleTrackMoves, trackChangesPlugin, trackChangesPluginKey, updateCommentThreads, wordHighlightColors, wordLinkRangeAt, wordYjsPluginKey, wordYjsPresencePlugin, wordYjsRedo, wordYjsUndo };
|