@a3s-lab/office 0.11.0 → 0.13.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/README.md +121 -6
- package/dist/0~1403.js +20 -12
- package/dist/0~2805.js +241 -241
- package/dist/0~4980.js +1 -1
- package/dist/0~5050.js +1 -20
- package/dist/0~5093.js +547 -547
- package/dist/0~7048.js +31 -29
- package/dist/0~document-editor.js +694 -90
- package/dist/0~pdf-viewer.js +41 -10
- package/dist/0~presentation-editor.js +8 -6
- package/dist/0~spreadsheet-editor.js +4272 -2753
- package/dist/0~work-document-import-worker-client.js +237 -0
- package/dist/0~work-docx-export.js +1 -1
- package/dist/0~work-docx-import.js +3 -3
- package/dist/0~work-docx-large-document-import.js +559 -0
- package/dist/0~work-office-diagnostics.js +51 -35
- package/dist/0~work-pptx-import.js +2 -2
- package/dist/4104.js +4127 -3037
- package/dist/432.js +51 -7
- package/dist/4476.js +280 -69
- package/dist/5184.js +24 -2
- package/dist/{8928.js → 6282.js} +2338 -93
- package/dist/8715.js +1201 -1156
- package/dist/9356.js +128 -8
- package/dist/core.d.ts +1 -0
- package/dist/core.js +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/features/work/editors/document-editor-support.d.ts +1 -9
- package/dist/internal/features/work/editors/document-external-content.d.ts +1 -1
- package/dist/internal/features/work/editors/presentation-slide-canvas.d.ts +3 -1
- package/dist/internal/features/work/editors/presentation-slide-thumbnail.d.ts +3 -2
- package/dist/internal/features/work/editors/presentation-thumbnail-rail.d.ts +2 -1
- package/dist/internal/features/work/editors/presentation-workspace.d.ts +2 -1
- package/dist/internal/features/work/editors/spreadsheet-border-ribbon.d.ts +5 -0
- package/dist/internal/features/work/editors/spreadsheet-calculation-projection.d.ts +10 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-border-command.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-border.d.ts +14 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-fill-command.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-fill.d.ts +12 -0
- package/dist/internal/features/work/editors/spreadsheet-cell-range.d.ts +14 -0
- package/dist/internal/features/work/editors/spreadsheet-command-catalog.d.ts +159 -0
- package/dist/internal/features/work/editors/spreadsheet-command-controller.d.ts +8 -4
- package/dist/internal/features/work/editors/spreadsheet-editor-support.d.ts +8 -1
- package/dist/internal/features/work/editors/spreadsheet-home-format-ribbon.d.ts +10 -0
- package/dist/internal/features/work/editors/spreadsheet-in-place-workbook-sync.d.ts +10 -0
- package/dist/internal/features/work/editors/spreadsheet-operation-projection.d.ts +14 -0
- package/dist/internal/features/work/editors/spreadsheet-structure-selection.d.ts +7 -0
- package/dist/internal/features/work/editors/use-document-pagination.d.ts +5 -0
- package/dist/internal/features/work/editors/use-presentation-design-commands.d.ts +2 -1
- package/dist/internal/features/work/editors/use-spreadsheet-collaboration.d.ts +2 -1
- package/dist/internal/features/work/editors/use-spreadsheet-workbook-sync.d.ts +2 -1
- package/dist/internal/features/work/spreadsheet-history-value.d.ts +1 -0
- package/dist/internal/features/work/spreadsheet-sparse.d.ts +10 -0
- package/dist/internal/features/work/work-document-chunk-geometry.d.ts +28 -0
- package/dist/internal/features/work/work-document-chunk-node.d.ts +23 -0
- package/dist/internal/features/work/work-document-extensions.d.ts +1 -0
- package/dist/internal/features/work/work-document-file-io.d.ts +2 -1
- package/dist/internal/features/work/work-document-html-fingerprint.d.ts +15 -0
- package/dist/internal/features/work/work-document-import-worker-client.d.ts +13 -0
- package/dist/internal/features/work/work-document-import-worker-protocol.d.ts +36 -0
- package/dist/internal/features/work/work-document-import.worker.d.ts +1 -0
- package/dist/internal/features/work/work-document-incremental-layout.d.ts +1 -1
- package/dist/internal/features/work/work-document-integrity-index.d.ts +14 -0
- package/dist/internal/features/work/work-document-lazy-block.d.ts +3 -0
- package/dist/internal/features/work/work-document-lazy-html.d.ts +21 -0
- package/dist/internal/features/work/work-document-lazy-model.d.ts +29 -0
- package/dist/internal/features/work/work-document-lazy-pagination-measurement.d.ts +3 -0
- package/dist/internal/features/work/work-document-lazy-preview.d.ts +21 -0
- package/dist/internal/features/work/work-document-lazy-update.d.ts +14 -0
- package/dist/internal/features/work/work-document-model.d.ts +18 -2
- package/dist/internal/features/work/work-document-page-surface-registry.d.ts +16 -0
- package/dist/internal/features/work/work-document-pagination-dom.d.ts +1 -0
- package/dist/internal/features/work/work-document-pagination-types.d.ts +1 -0
- package/dist/internal/features/work/work-document-pagination.d.ts +1 -1
- package/dist/internal/features/work/work-document-text-statistics.d.ts +25 -0
- package/dist/internal/features/work/work-document-windowing.d.ts +23 -0
- package/dist/internal/features/work/work-docx-import.d.ts +2 -1
- package/dist/internal/features/work/work-docx-large-document-import.d.ts +35 -0
- package/dist/internal/features/work/work-docx-large-document-parser.d.ts +29 -0
- package/dist/internal/features/work/work-file-data.d.ts +7 -1
- package/dist/internal/features/work/work-file-import.d.ts +33 -0
- package/dist/internal/features/work/work-file-io.d.ts +5 -4
- package/dist/internal/features/work/work-file-kind.d.ts +5 -0
- package/dist/internal/features/work/work-markdown-file-io.d.ts +2 -1
- package/dist/internal/features/work/work-office-diagnostics.d.ts +12 -2
- package/dist/internal/features/work/work-ooxml-package.d.ts +8 -0
- package/dist/internal/features/work/work-pptx-import.d.ts +1 -1
- package/dist/internal/features/work/work-presentation-file-io.d.ts +2 -1
- package/dist/internal/features/work/work-presentation-layouts.d.ts +7 -1
- package/dist/internal/features/work/work-repository.d.ts +1 -0
- package/dist/internal/features/work/work-spreadsheet-compatibility-summary.d.ts +10 -0
- package/dist/internal/features/work/work-spreadsheet-file-export.d.ts +2 -0
- package/dist/internal/features/work/work-spreadsheet-file-import.d.ts +3 -0
- package/dist/internal/features/work/work-spreadsheet-import-diagnostics.d.ts +2 -0
- package/dist/internal/features/work/work-spreadsheet-import-worker-client.d.ts +6 -0
- package/dist/internal/features/work/work-spreadsheet-import-worker-protocol.d.ts +32 -0
- package/dist/internal/features/work/work-spreadsheet-import.worker.d.ts +1 -0
- package/dist/internal/features/work/work-spreadsheet-matrix-profile.d.ts +64 -0
- package/dist/internal/features/work/work-spreadsheet-package-scan-worker-client.d.ts +6 -0
- package/dist/internal/features/work/work-spreadsheet-package-scan-worker-protocol.d.ts +49 -0
- package/dist/internal/features/work/work-spreadsheet-package-scan.worker.d.ts +1 -0
- package/dist/internal/features/work/work-spreadsheet-protection.d.ts +2 -0
- package/dist/internal/features/work/work-types.d.ts +22 -0
- package/dist/internal/features/work/work-xlsx-formula-diagnostics.d.ts +3 -1
- package/dist/internal/features/work/work-xlsx-formulas.d.ts +2 -1
- package/dist/internal/features/work/work-xlsx-interop.d.ts +8 -17
- package/dist/internal/features/work/work-xlsx-pivot-diagnostics.d.ts +2 -1
- package/dist/internal/features/work/work-xlsx-plain-fast-path.d.ts +54 -0
- package/dist/internal/features/work/work-xlsx-style-gate.d.ts +1 -0
- package/dist/internal/features/work/work-xlsx-worksheet-scan.d.ts +12 -0
- package/dist/internal/features/work/work-xlsx-worksheet.d.ts +12 -0
- package/dist/office-kernel.wasm +0 -0
- package/dist/office-kernel.worker.js +31 -29
- package/dist/react.d.ts +7 -1
- package/dist/styles.css +440 -3
- package/dist/work-document-import.worker.js +558 -0
- package/dist/work-spreadsheet-import.worker.js +24745 -0
- package/dist/work-spreadsheet-import.worker.js.LICENSE.txt +3 -0
- package/dist/work-spreadsheet-package-scan.worker.js +4157 -0
- package/dist/work-spreadsheet-package-scan.worker.js.LICENSE.txt +11 -0
- package/docs/latest/en/browser-editor-architecture.md +351 -15
- package/package.json +26 -4
package/dist/0~2805.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import jszip from "jszip";
|
|
2
2
|
import { serializeUtf8Xml, directChildren, xmlNamespacePrefix, parseXml, firstDescendant, decodeXmlBytes, directChild, descendants, attribute as work_ooxml_package_attribute } from "./5184.js";
|
|
3
|
-
import { createDocumentBibliography, documentCitationStyle, documentCitationStyleDetails, normalizeDocumentTabStops } from "./
|
|
3
|
+
import { createDocumentBibliography, documentCitationStyle, documentCitationStyleDetails, normalizeDocumentTabStops } from "./6282.js";
|
|
4
4
|
const BIBLIOGRAPHY_NAMESPACE = 'http://schemas.openxmlformats.org/officeDocument/2006/bibliography';
|
|
5
5
|
const CUSTOM_XML_NAMESPACE = 'http://schemas.openxmlformats.org/officeDocument/2006/customXml';
|
|
6
6
|
const OFFICE_RELATIONSHIPS_NAMESPACE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';
|
|
@@ -708,246 +708,6 @@ function isAllowedExtensionNamespace(namespace, context) {
|
|
|
708
708
|
function isNamespacePrefix(value) {
|
|
709
709
|
return /^[A-Za-z_][A-Za-z0-9_.-]*$/.test(value) && 'xml' !== value;
|
|
710
710
|
}
|
|
711
|
-
const WORD_THEME_COLOR_KEYS = new Map([
|
|
712
|
-
[
|
|
713
|
-
'dark1',
|
|
714
|
-
'dk1'
|
|
715
|
-
],
|
|
716
|
-
[
|
|
717
|
-
'light1',
|
|
718
|
-
'lt1'
|
|
719
|
-
],
|
|
720
|
-
[
|
|
721
|
-
'dark2',
|
|
722
|
-
'dk2'
|
|
723
|
-
],
|
|
724
|
-
[
|
|
725
|
-
'light2',
|
|
726
|
-
'lt2'
|
|
727
|
-
],
|
|
728
|
-
[
|
|
729
|
-
'background1',
|
|
730
|
-
'lt1'
|
|
731
|
-
],
|
|
732
|
-
[
|
|
733
|
-
'text1',
|
|
734
|
-
'dk1'
|
|
735
|
-
],
|
|
736
|
-
[
|
|
737
|
-
'background2',
|
|
738
|
-
'lt2'
|
|
739
|
-
],
|
|
740
|
-
[
|
|
741
|
-
'text2',
|
|
742
|
-
'dk2'
|
|
743
|
-
],
|
|
744
|
-
[
|
|
745
|
-
'hyperlink',
|
|
746
|
-
'hlink'
|
|
747
|
-
],
|
|
748
|
-
[
|
|
749
|
-
'followedhyperlink',
|
|
750
|
-
'folhlink'
|
|
751
|
-
]
|
|
752
|
-
]);
|
|
753
|
-
const DOCX_COLOR_SCHEME_MAPPING_ATTRIBUTES = new Map([
|
|
754
|
-
[
|
|
755
|
-
'background1',
|
|
756
|
-
'bg1'
|
|
757
|
-
],
|
|
758
|
-
[
|
|
759
|
-
'text1',
|
|
760
|
-
't1'
|
|
761
|
-
],
|
|
762
|
-
[
|
|
763
|
-
'background2',
|
|
764
|
-
'bg2'
|
|
765
|
-
],
|
|
766
|
-
[
|
|
767
|
-
'text2',
|
|
768
|
-
't2'
|
|
769
|
-
],
|
|
770
|
-
[
|
|
771
|
-
'accent1',
|
|
772
|
-
'accent1'
|
|
773
|
-
],
|
|
774
|
-
[
|
|
775
|
-
'accent2',
|
|
776
|
-
'accent2'
|
|
777
|
-
],
|
|
778
|
-
[
|
|
779
|
-
'accent3',
|
|
780
|
-
'accent3'
|
|
781
|
-
],
|
|
782
|
-
[
|
|
783
|
-
'accent4',
|
|
784
|
-
'accent4'
|
|
785
|
-
],
|
|
786
|
-
[
|
|
787
|
-
'accent5',
|
|
788
|
-
'accent5'
|
|
789
|
-
],
|
|
790
|
-
[
|
|
791
|
-
'accent6',
|
|
792
|
-
'accent6'
|
|
793
|
-
],
|
|
794
|
-
[
|
|
795
|
-
'hyperlink',
|
|
796
|
-
'hyperlink'
|
|
797
|
-
],
|
|
798
|
-
[
|
|
799
|
-
'followedhyperlink',
|
|
800
|
-
'followedHyperlink'
|
|
801
|
-
]
|
|
802
|
-
]);
|
|
803
|
-
const WORD_COLOR_SCHEME_INDEXES = new Set([
|
|
804
|
-
'dark1',
|
|
805
|
-
'light1',
|
|
806
|
-
'dark2',
|
|
807
|
-
'light2',
|
|
808
|
-
'accent1',
|
|
809
|
-
'accent2',
|
|
810
|
-
'accent3',
|
|
811
|
-
'accent4',
|
|
812
|
-
'accent5',
|
|
813
|
-
'accent6',
|
|
814
|
-
'hyperlink',
|
|
815
|
-
'followedHyperlink'
|
|
816
|
-
]);
|
|
817
|
-
const WORDPROCESSING_NAMESPACES = new Set([
|
|
818
|
-
'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
|
|
819
|
-
'http://purl.oclc.org/ooxml/wordprocessingml/main'
|
|
820
|
-
]);
|
|
821
|
-
const MAX_COLOR_MAPPING_DEPTH = 16;
|
|
822
|
-
function createDocxThemeResolver(themeDocument, settingsDocument) {
|
|
823
|
-
const colorMapping = docxColorSchemeMapping(settingsDocument);
|
|
824
|
-
if (!themeDocument) return {
|
|
825
|
-
colors: new Map(),
|
|
826
|
-
colorMapping,
|
|
827
|
-
fonts: new Map()
|
|
828
|
-
};
|
|
829
|
-
const fonts = new Map();
|
|
830
|
-
const fontScheme = firstDescendant(themeDocument, 'fontScheme');
|
|
831
|
-
addThemeFontFamily(fonts, 'major', fontScheme ? directChild(fontScheme, 'majorFont') : void 0);
|
|
832
|
-
addThemeFontFamily(fonts, 'minor', fontScheme ? directChild(fontScheme, 'minorFont') : void 0);
|
|
833
|
-
const colors = new Map();
|
|
834
|
-
const colorScheme = firstDescendant(themeDocument, 'clrScheme');
|
|
835
|
-
if (colorScheme) for (const entry of directChildren(colorScheme)){
|
|
836
|
-
const color = themeColorValue(directChildren(entry)[0]);
|
|
837
|
-
if (color) colors.set(entry.localName.toLowerCase(), color);
|
|
838
|
-
}
|
|
839
|
-
return {
|
|
840
|
-
colors,
|
|
841
|
-
colorMapping,
|
|
842
|
-
fonts
|
|
843
|
-
};
|
|
844
|
-
}
|
|
845
|
-
function resolveDocxThemeResolver(source) {
|
|
846
|
-
return isDocxThemeResolver(source) ? source : createDocxThemeResolver(source);
|
|
847
|
-
}
|
|
848
|
-
function docxThemeFont(resolver, key) {
|
|
849
|
-
return key ? resolver.fonts.get(key.trim().toLowerCase()) : void 0;
|
|
850
|
-
}
|
|
851
|
-
function docxThemeColor(resolver, key, tint, shade) {
|
|
852
|
-
const sourceKey = key?.trim().toLowerCase();
|
|
853
|
-
const mappedKey = sourceKey ? mappedWordThemeColorKey(sourceKey, resolver.colorMapping) : void 0;
|
|
854
|
-
const colorKey = mappedKey ? WORD_THEME_COLOR_KEYS.get(mappedKey) ?? mappedKey : void 0;
|
|
855
|
-
const color = colorKey ? resolver.colors.get(colorKey) : void 0;
|
|
856
|
-
if (!color) return;
|
|
857
|
-
const channels = [
|
|
858
|
-
Number.parseInt(color.slice(0, 2), 16),
|
|
859
|
-
Number.parseInt(color.slice(2, 4), 16),
|
|
860
|
-
Number.parseInt(color.slice(4, 6), 16)
|
|
861
|
-
];
|
|
862
|
-
const shadeFactor = hexFactor(shade);
|
|
863
|
-
const tintFactor = hexFactor(tint);
|
|
864
|
-
const transformed = channels.map((channel)=>{
|
|
865
|
-
const shaded = void 0 === shadeFactor ? channel : channel * shadeFactor;
|
|
866
|
-
const tinted = void 0 === tintFactor ? shaded : shaded + (255 - shaded) * tintFactor;
|
|
867
|
-
return Math.max(0, Math.min(255, Math.round(tinted)));
|
|
868
|
-
});
|
|
869
|
-
return transformed.map((channel)=>channel.toString(16).padStart(2, '0')).join('');
|
|
870
|
-
}
|
|
871
|
-
function docxColorSchemeMapping(settingsDocument) {
|
|
872
|
-
const root = settingsDocument?.documentElement;
|
|
873
|
-
if (!root || 'settings' !== root.localName || !WORDPROCESSING_NAMESPACES.has(root.namespaceURI ?? '')) return new Map();
|
|
874
|
-
const candidates = directChildren(root, 'clrSchemeMapping').filter((element)=>element.namespaceURI === root.namespaceURI);
|
|
875
|
-
if (1 !== candidates.length) return new Map();
|
|
876
|
-
return parseDocxColorSchemeMappingElement(candidates[0]) ?? new Map();
|
|
877
|
-
}
|
|
878
|
-
function parseDocxColorSchemeMappingElement(element) {
|
|
879
|
-
const namespace = element?.namespaceURI ?? '';
|
|
880
|
-
if (!element || 'clrSchemeMapping' !== element.localName || !WORDPROCESSING_NAMESPACES.has(namespace) || directChildren(element).length || Array.from(element.childNodes).some((node)=>node.nodeType === Node.TEXT_NODE && node.textContent?.trim())) return null;
|
|
881
|
-
const semanticsByAttribute = new Map(Array.from(DOCX_COLOR_SCHEME_MAPPING_ATTRIBUTES).map(([semantic, attributeName])=>[
|
|
882
|
-
attributeName,
|
|
883
|
-
semantic
|
|
884
|
-
]));
|
|
885
|
-
const mapping = new Map();
|
|
886
|
-
for (const item of Array.from(element.attributes)){
|
|
887
|
-
if (item.namespaceURI === XMLNS_NAMESPACE || 'xmlns' === item.name || item.name.startsWith('xmlns:')) continue;
|
|
888
|
-
const attributeName = xmlAttributeLocalName(item);
|
|
889
|
-
const semantic = semanticsByAttribute.get(attributeName);
|
|
890
|
-
const value = item.value.trim();
|
|
891
|
-
if (xmlAttributeNamespace(element, item) !== namespace || !semantic || mapping.has(semantic) || !WORD_COLOR_SCHEME_INDEXES.has(value)) return null;
|
|
892
|
-
mapping.set(semantic, value);
|
|
893
|
-
}
|
|
894
|
-
return mapping;
|
|
895
|
-
}
|
|
896
|
-
function mappedWordThemeColorKey(source, mapping) {
|
|
897
|
-
let current = source;
|
|
898
|
-
const visited = new Set();
|
|
899
|
-
for(let depth = 0; depth < MAX_COLOR_MAPPING_DEPTH; depth += 1){
|
|
900
|
-
if (visited.has(current)) break;
|
|
901
|
-
visited.add(current);
|
|
902
|
-
const next = mapping?.get(current)?.toLowerCase();
|
|
903
|
-
if (!next || next === current) return current;
|
|
904
|
-
current = next;
|
|
905
|
-
}
|
|
906
|
-
}
|
|
907
|
-
function addThemeFontFamily(fonts, prefix, family) {
|
|
908
|
-
if (!family) return;
|
|
909
|
-
const latin = typeface(directChild(family, 'latin'));
|
|
910
|
-
const eastAsia = typeface(directChild(family, 'ea')) || scriptTypeface(family, [
|
|
911
|
-
'Hans',
|
|
912
|
-
'Hant',
|
|
913
|
-
'Jpan',
|
|
914
|
-
'Hang'
|
|
915
|
-
]) || latin;
|
|
916
|
-
const complex = typeface(directChild(family, 'cs')) || latin;
|
|
917
|
-
if (latin) {
|
|
918
|
-
fonts.set(`${prefix}ascii`, latin);
|
|
919
|
-
fonts.set(`${prefix}hansi`, latin);
|
|
920
|
-
}
|
|
921
|
-
if (eastAsia) fonts.set(`${prefix}eastasia`, eastAsia);
|
|
922
|
-
if (complex) fonts.set(`${prefix}bidi`, complex);
|
|
923
|
-
}
|
|
924
|
-
function scriptTypeface(family, scripts) {
|
|
925
|
-
const fonts = directChildren(family, 'font');
|
|
926
|
-
for (const script of scripts){
|
|
927
|
-
const font = fonts.find((candidate)=>drawingAttribute(candidate, "script") === script);
|
|
928
|
-
const value = font ? typeface(font) : void 0;
|
|
929
|
-
if (value) return value;
|
|
930
|
-
}
|
|
931
|
-
}
|
|
932
|
-
function typeface(element) {
|
|
933
|
-
const value = element ? drawingAttribute(element, 'typeface')?.trim() : void 0;
|
|
934
|
-
return value || void 0;
|
|
935
|
-
}
|
|
936
|
-
function themeColorValue(element) {
|
|
937
|
-
if (!element) return;
|
|
938
|
-
const value = 'sysClr' === element.localName ? drawingAttribute(element, 'lastClr') : drawingAttribute(element, 'val');
|
|
939
|
-
return value && /^[0-9a-f]{6}$/i.test(value) ? value.toLowerCase() : void 0;
|
|
940
|
-
}
|
|
941
|
-
function drawingAttribute(element, name) {
|
|
942
|
-
return work_ooxml_package_attribute(element, name) ?? work_ooxml_package_attribute(element, `a:${name}`);
|
|
943
|
-
}
|
|
944
|
-
function hexFactor(value) {
|
|
945
|
-
if (!value || !/^[0-9a-f]{2}$/i.test(value)) return;
|
|
946
|
-
return Number.parseInt(value, 16) / 255;
|
|
947
|
-
}
|
|
948
|
-
function isDocxThemeResolver(source) {
|
|
949
|
-
return Boolean(source && 'colors' in source && source.colors instanceof Map && 'fonts' in source && source.fonts instanceof Map);
|
|
950
|
-
}
|
|
951
711
|
function paragraphAlignment(element, docx) {
|
|
952
712
|
const alignment = element.style.textAlign;
|
|
953
713
|
if ('center' === alignment) return docx.AlignmentType.CENTER;
|
|
@@ -1276,4 +1036,244 @@ function isParagraphPartRoot(root, path) {
|
|
|
1276
1036
|
const expected = /^word\/header\d*\.xml$/i.test(path) ? 'hdr' : /^word\/footer\d*\.xml$/i.test(path) ? 'ftr' : /^word\/footnotes\.xml$/i.test(path) ? 'footnotes' : /^word\/endnotes\.xml$/i.test(path) ? 'endnotes' : 'document';
|
|
1277
1037
|
return root.localName === expected && DOCX_WORDPROCESSING_NAMESPACES.has(root.namespaceURI ?? '');
|
|
1278
1038
|
}
|
|
1039
|
+
const WORD_THEME_COLOR_KEYS = new Map([
|
|
1040
|
+
[
|
|
1041
|
+
'dark1',
|
|
1042
|
+
'dk1'
|
|
1043
|
+
],
|
|
1044
|
+
[
|
|
1045
|
+
'light1',
|
|
1046
|
+
'lt1'
|
|
1047
|
+
],
|
|
1048
|
+
[
|
|
1049
|
+
'dark2',
|
|
1050
|
+
'dk2'
|
|
1051
|
+
],
|
|
1052
|
+
[
|
|
1053
|
+
'light2',
|
|
1054
|
+
'lt2'
|
|
1055
|
+
],
|
|
1056
|
+
[
|
|
1057
|
+
'background1',
|
|
1058
|
+
'lt1'
|
|
1059
|
+
],
|
|
1060
|
+
[
|
|
1061
|
+
'text1',
|
|
1062
|
+
'dk1'
|
|
1063
|
+
],
|
|
1064
|
+
[
|
|
1065
|
+
'background2',
|
|
1066
|
+
'lt2'
|
|
1067
|
+
],
|
|
1068
|
+
[
|
|
1069
|
+
'text2',
|
|
1070
|
+
'dk2'
|
|
1071
|
+
],
|
|
1072
|
+
[
|
|
1073
|
+
'hyperlink',
|
|
1074
|
+
'hlink'
|
|
1075
|
+
],
|
|
1076
|
+
[
|
|
1077
|
+
'followedhyperlink',
|
|
1078
|
+
'folhlink'
|
|
1079
|
+
]
|
|
1080
|
+
]);
|
|
1081
|
+
const DOCX_COLOR_SCHEME_MAPPING_ATTRIBUTES = new Map([
|
|
1082
|
+
[
|
|
1083
|
+
'background1',
|
|
1084
|
+
'bg1'
|
|
1085
|
+
],
|
|
1086
|
+
[
|
|
1087
|
+
'text1',
|
|
1088
|
+
't1'
|
|
1089
|
+
],
|
|
1090
|
+
[
|
|
1091
|
+
'background2',
|
|
1092
|
+
'bg2'
|
|
1093
|
+
],
|
|
1094
|
+
[
|
|
1095
|
+
'text2',
|
|
1096
|
+
't2'
|
|
1097
|
+
],
|
|
1098
|
+
[
|
|
1099
|
+
'accent1',
|
|
1100
|
+
'accent1'
|
|
1101
|
+
],
|
|
1102
|
+
[
|
|
1103
|
+
'accent2',
|
|
1104
|
+
'accent2'
|
|
1105
|
+
],
|
|
1106
|
+
[
|
|
1107
|
+
'accent3',
|
|
1108
|
+
'accent3'
|
|
1109
|
+
],
|
|
1110
|
+
[
|
|
1111
|
+
'accent4',
|
|
1112
|
+
'accent4'
|
|
1113
|
+
],
|
|
1114
|
+
[
|
|
1115
|
+
'accent5',
|
|
1116
|
+
'accent5'
|
|
1117
|
+
],
|
|
1118
|
+
[
|
|
1119
|
+
'accent6',
|
|
1120
|
+
'accent6'
|
|
1121
|
+
],
|
|
1122
|
+
[
|
|
1123
|
+
'hyperlink',
|
|
1124
|
+
'hyperlink'
|
|
1125
|
+
],
|
|
1126
|
+
[
|
|
1127
|
+
'followedhyperlink',
|
|
1128
|
+
'followedHyperlink'
|
|
1129
|
+
]
|
|
1130
|
+
]);
|
|
1131
|
+
const WORD_COLOR_SCHEME_INDEXES = new Set([
|
|
1132
|
+
'dark1',
|
|
1133
|
+
'light1',
|
|
1134
|
+
'dark2',
|
|
1135
|
+
'light2',
|
|
1136
|
+
'accent1',
|
|
1137
|
+
'accent2',
|
|
1138
|
+
'accent3',
|
|
1139
|
+
'accent4',
|
|
1140
|
+
'accent5',
|
|
1141
|
+
'accent6',
|
|
1142
|
+
'hyperlink',
|
|
1143
|
+
'followedHyperlink'
|
|
1144
|
+
]);
|
|
1145
|
+
const WORDPROCESSING_NAMESPACES = new Set([
|
|
1146
|
+
'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
|
|
1147
|
+
'http://purl.oclc.org/ooxml/wordprocessingml/main'
|
|
1148
|
+
]);
|
|
1149
|
+
const MAX_COLOR_MAPPING_DEPTH = 16;
|
|
1150
|
+
function createDocxThemeResolver(themeDocument, settingsDocument) {
|
|
1151
|
+
const colorMapping = docxColorSchemeMapping(settingsDocument);
|
|
1152
|
+
if (!themeDocument) return {
|
|
1153
|
+
colors: new Map(),
|
|
1154
|
+
colorMapping,
|
|
1155
|
+
fonts: new Map()
|
|
1156
|
+
};
|
|
1157
|
+
const fonts = new Map();
|
|
1158
|
+
const fontScheme = firstDescendant(themeDocument, 'fontScheme');
|
|
1159
|
+
addThemeFontFamily(fonts, 'major', fontScheme ? directChild(fontScheme, 'majorFont') : void 0);
|
|
1160
|
+
addThemeFontFamily(fonts, 'minor', fontScheme ? directChild(fontScheme, 'minorFont') : void 0);
|
|
1161
|
+
const colors = new Map();
|
|
1162
|
+
const colorScheme = firstDescendant(themeDocument, 'clrScheme');
|
|
1163
|
+
if (colorScheme) for (const entry of directChildren(colorScheme)){
|
|
1164
|
+
const color = themeColorValue(directChildren(entry)[0]);
|
|
1165
|
+
if (color) colors.set(entry.localName.toLowerCase(), color);
|
|
1166
|
+
}
|
|
1167
|
+
return {
|
|
1168
|
+
colors,
|
|
1169
|
+
colorMapping,
|
|
1170
|
+
fonts
|
|
1171
|
+
};
|
|
1172
|
+
}
|
|
1173
|
+
function resolveDocxThemeResolver(source) {
|
|
1174
|
+
return isDocxThemeResolver(source) ? source : createDocxThemeResolver(source);
|
|
1175
|
+
}
|
|
1176
|
+
function docxThemeFont(resolver, key) {
|
|
1177
|
+
return key ? resolver.fonts.get(key.trim().toLowerCase()) : void 0;
|
|
1178
|
+
}
|
|
1179
|
+
function docxThemeColor(resolver, key, tint, shade) {
|
|
1180
|
+
const sourceKey = key?.trim().toLowerCase();
|
|
1181
|
+
const mappedKey = sourceKey ? mappedWordThemeColorKey(sourceKey, resolver.colorMapping) : void 0;
|
|
1182
|
+
const colorKey = mappedKey ? WORD_THEME_COLOR_KEYS.get(mappedKey) ?? mappedKey : void 0;
|
|
1183
|
+
const color = colorKey ? resolver.colors.get(colorKey) : void 0;
|
|
1184
|
+
if (!color) return;
|
|
1185
|
+
const channels = [
|
|
1186
|
+
Number.parseInt(color.slice(0, 2), 16),
|
|
1187
|
+
Number.parseInt(color.slice(2, 4), 16),
|
|
1188
|
+
Number.parseInt(color.slice(4, 6), 16)
|
|
1189
|
+
];
|
|
1190
|
+
const shadeFactor = hexFactor(shade);
|
|
1191
|
+
const tintFactor = hexFactor(tint);
|
|
1192
|
+
const transformed = channels.map((channel)=>{
|
|
1193
|
+
const shaded = void 0 === shadeFactor ? channel : channel * shadeFactor;
|
|
1194
|
+
const tinted = void 0 === tintFactor ? shaded : shaded + (255 - shaded) * tintFactor;
|
|
1195
|
+
return Math.max(0, Math.min(255, Math.round(tinted)));
|
|
1196
|
+
});
|
|
1197
|
+
return transformed.map((channel)=>channel.toString(16).padStart(2, '0')).join('');
|
|
1198
|
+
}
|
|
1199
|
+
function docxColorSchemeMapping(settingsDocument) {
|
|
1200
|
+
const root = settingsDocument?.documentElement;
|
|
1201
|
+
if (!root || 'settings' !== root.localName || !WORDPROCESSING_NAMESPACES.has(root.namespaceURI ?? '')) return new Map();
|
|
1202
|
+
const candidates = directChildren(root, 'clrSchemeMapping').filter((element)=>element.namespaceURI === root.namespaceURI);
|
|
1203
|
+
if (1 !== candidates.length) return new Map();
|
|
1204
|
+
return parseDocxColorSchemeMappingElement(candidates[0]) ?? new Map();
|
|
1205
|
+
}
|
|
1206
|
+
function parseDocxColorSchemeMappingElement(element) {
|
|
1207
|
+
const namespace = element?.namespaceURI ?? '';
|
|
1208
|
+
if (!element || 'clrSchemeMapping' !== element.localName || !WORDPROCESSING_NAMESPACES.has(namespace) || directChildren(element).length || Array.from(element.childNodes).some((node)=>node.nodeType === Node.TEXT_NODE && node.textContent?.trim())) return null;
|
|
1209
|
+
const semanticsByAttribute = new Map(Array.from(DOCX_COLOR_SCHEME_MAPPING_ATTRIBUTES).map(([semantic, attributeName])=>[
|
|
1210
|
+
attributeName,
|
|
1211
|
+
semantic
|
|
1212
|
+
]));
|
|
1213
|
+
const mapping = new Map();
|
|
1214
|
+
for (const item of Array.from(element.attributes)){
|
|
1215
|
+
if (item.namespaceURI === XMLNS_NAMESPACE || 'xmlns' === item.name || item.name.startsWith('xmlns:')) continue;
|
|
1216
|
+
const attributeName = xmlAttributeLocalName(item);
|
|
1217
|
+
const semantic = semanticsByAttribute.get(attributeName);
|
|
1218
|
+
const value = item.value.trim();
|
|
1219
|
+
if (xmlAttributeNamespace(element, item) !== namespace || !semantic || mapping.has(semantic) || !WORD_COLOR_SCHEME_INDEXES.has(value)) return null;
|
|
1220
|
+
mapping.set(semantic, value);
|
|
1221
|
+
}
|
|
1222
|
+
return mapping;
|
|
1223
|
+
}
|
|
1224
|
+
function mappedWordThemeColorKey(source, mapping) {
|
|
1225
|
+
let current = source;
|
|
1226
|
+
const visited = new Set();
|
|
1227
|
+
for(let depth = 0; depth < MAX_COLOR_MAPPING_DEPTH; depth += 1){
|
|
1228
|
+
if (visited.has(current)) break;
|
|
1229
|
+
visited.add(current);
|
|
1230
|
+
const next = mapping?.get(current)?.toLowerCase();
|
|
1231
|
+
if (!next || next === current) return current;
|
|
1232
|
+
current = next;
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
function addThemeFontFamily(fonts, prefix, family) {
|
|
1236
|
+
if (!family) return;
|
|
1237
|
+
const latin = typeface(directChild(family, 'latin'));
|
|
1238
|
+
const eastAsia = typeface(directChild(family, 'ea')) || scriptTypeface(family, [
|
|
1239
|
+
'Hans',
|
|
1240
|
+
'Hant',
|
|
1241
|
+
'Jpan',
|
|
1242
|
+
'Hang'
|
|
1243
|
+
]) || latin;
|
|
1244
|
+
const complex = typeface(directChild(family, 'cs')) || latin;
|
|
1245
|
+
if (latin) {
|
|
1246
|
+
fonts.set(`${prefix}ascii`, latin);
|
|
1247
|
+
fonts.set(`${prefix}hansi`, latin);
|
|
1248
|
+
}
|
|
1249
|
+
if (eastAsia) fonts.set(`${prefix}eastasia`, eastAsia);
|
|
1250
|
+
if (complex) fonts.set(`${prefix}bidi`, complex);
|
|
1251
|
+
}
|
|
1252
|
+
function scriptTypeface(family, scripts) {
|
|
1253
|
+
const fonts = directChildren(family, 'font');
|
|
1254
|
+
for (const script of scripts){
|
|
1255
|
+
const font = fonts.find((candidate)=>drawingAttribute(candidate, "script") === script);
|
|
1256
|
+
const value = font ? typeface(font) : void 0;
|
|
1257
|
+
if (value) return value;
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
function typeface(element) {
|
|
1261
|
+
const value = element ? drawingAttribute(element, 'typeface')?.trim() : void 0;
|
|
1262
|
+
return value || void 0;
|
|
1263
|
+
}
|
|
1264
|
+
function themeColorValue(element) {
|
|
1265
|
+
if (!element) return;
|
|
1266
|
+
const value = 'sysClr' === element.localName ? drawingAttribute(element, 'lastClr') : drawingAttribute(element, 'val');
|
|
1267
|
+
return value && /^[0-9a-f]{6}$/i.test(value) ? value.toLowerCase() : void 0;
|
|
1268
|
+
}
|
|
1269
|
+
function drawingAttribute(element, name) {
|
|
1270
|
+
return work_ooxml_package_attribute(element, name) ?? work_ooxml_package_attribute(element, `a:${name}`);
|
|
1271
|
+
}
|
|
1272
|
+
function hexFactor(value) {
|
|
1273
|
+
if (!value || !/^[0-9a-f]{2}$/i.test(value)) return;
|
|
1274
|
+
return Number.parseInt(value, 16) / 255;
|
|
1275
|
+
}
|
|
1276
|
+
function isDocxThemeResolver(source) {
|
|
1277
|
+
return Boolean(source && 'colors' in source && source.colors instanceof Map && 'fonts' in source && source.fonts instanceof Map);
|
|
1278
|
+
}
|
|
1279
1279
|
export { DOCX_COLOR_SCHEME_MAPPING_ATTRIBUTES, DOCX_WORDPROCESSING_NAMESPACES, DocxParagraphDefaultCollapsedPatchCollector, XMLNS_NAMESPACE, XML_NAMESPACE, assertXmlRoot, cloneXmlElement, createDocxThemeResolver, cssColorToHex, cssFontFamily, cssFontSize, dataBoolean, docxThemeColor, docxThemeFont, domDirection, hasNonWhitespaceXmlText, mergeDocxIgnorableExtensions, mergeDocxIgnorableExtensionsAtPairs, paragraphAlignment, paragraphBidirectional, paragraphDirectionOptions, paragraphIndent, paragraphPaginationOptions, paragraphSpacingOptions, paragraphTabStops, parseDocxColorSchemeMappingElement, parseDocxParagraphDefaultCollapsed, patchDocxBibliography, patchDocxParagraphDefaultCollapsed, readDocxBibliography, resolveDocxThemeResolver, xmlAttributeLocalName, xmlAttributeNamespace, xmlDeclaredPrefix, xmlNamespaceUri };
|
package/dist/0~4980.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import jszip from "jszip";
|
|
2
|
-
import { documentNoteKey } from "./
|
|
2
|
+
import { documentNoteKey } from "./6282.js";
|
|
3
3
|
import { directChild, xmlNamespacePrefix, attribute, parseXml } from "./5184.js";
|
|
4
4
|
import { DEFAULT_DOCUMENT_PAGE_COLOR, normalizeDocumentPageColor } from "./0~work-document-page-color.js";
|
|
5
5
|
const MAX_NATIVE_ID = 2147483647;
|
package/dist/0~5050.js
CHANGED
|
@@ -276,25 +276,6 @@ function documentCurrentPage(editor) {
|
|
|
276
276
|
});
|
|
277
277
|
return page;
|
|
278
278
|
}
|
|
279
|
-
function documentWordCount(value) {
|
|
280
|
-
return Array.from(value.matchAll(/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}]|[\p{L}\p{N}]+/gu)).length;
|
|
281
|
-
}
|
|
282
|
-
function documentTextStatistics(editor) {
|
|
283
|
-
const text = editor.getText({
|
|
284
|
-
blockSeparator: '\n'
|
|
285
|
-
});
|
|
286
|
-
const characters = Array.from(text).filter((character)=>'\n' !== character && '\r' !== character);
|
|
287
|
-
let paragraphCount = 0;
|
|
288
|
-
editor.state.doc.descendants((node)=>{
|
|
289
|
-
if (node.isTextblock) paragraphCount += 1;
|
|
290
|
-
});
|
|
291
|
-
return {
|
|
292
|
-
characterCountWithSpaces: characters.length,
|
|
293
|
-
characterCountWithoutSpaces: characters.filter((character)=>!/\s/u.test(character)).length,
|
|
294
|
-
paragraphCount,
|
|
295
|
-
wordCount: documentWordCount(text)
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
279
|
async function copyDocumentSelection(selection) {
|
|
299
280
|
try {
|
|
300
281
|
if (!navigator.clipboard?.writeText) throw new Error('Clipboard API is unavailable');
|
|
@@ -316,4 +297,4 @@ function mergeOfficeTiptapExtensions(editorName, builtInExtensions, additionalEx
|
|
|
316
297
|
...additionalExtensions
|
|
317
298
|
];
|
|
318
299
|
}
|
|
319
|
-
export { createWorkDocumentSelectionAction, createWorkDocumentSelectionSnapshot, customSelectionMenuItems, documentAgentMenuItems, documentCurrentPage, documentCustomSelectionMenuItems, documentPageCount, documentPlainTextAsHtml,
|
|
300
|
+
export { createWorkDocumentSelectionAction, createWorkDocumentSelectionSnapshot, customSelectionMenuItems, documentAgentMenuItems, documentCurrentPage, documentCustomSelectionMenuItems, documentPageCount, documentPlainTextAsHtml, mergeOfficeTiptapExtensions };
|