@office-open/core 0.10.15 → 0.12.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 +2 -1
- package/dist/chart/index.d.mts +2 -2
- package/dist/chart/index.mjs +2 -2
- package/dist/chart-DED4tXC9.mjs +2325 -0
- package/dist/chart-DED4tXC9.mjs.map +1 -0
- package/dist/color-mapping-CFF0vRSe.mjs +117 -0
- package/dist/color-mapping-CFF0vRSe.mjs.map +1 -0
- package/dist/data-type-CZMKVaaT.d.mts.map +1 -1
- package/dist/descriptor/index.d.mts +2 -2
- package/dist/descriptor/index.mjs +1 -1
- package/dist/{descriptor-BjNkn5jo.mjs → descriptor-BqaNZrrZ.mjs} +43 -11
- package/dist/{descriptor-BjNkn5jo.mjs.map → descriptor-BqaNZrrZ.mjs.map} +1 -1
- package/dist/drawing/index.d.mts +2 -0
- package/dist/drawing/index.mjs +2 -0
- package/dist/{drawingml-sj1J3lb0.mjs → drawing-BCAyrCCw.mjs} +4456 -3452
- package/dist/drawing-BCAyrCCw.mjs.map +1 -0
- package/dist/{converters-C_Y2QX1w.mjs → ext-uri-BHBcIrW7.mjs} +742 -45
- package/dist/ext-uri-BHBcIrW7.mjs.map +1 -0
- package/dist/index-BAxlDUQ1.d.mts +590 -0
- package/dist/index-BAxlDUQ1.d.mts.map +1 -0
- package/dist/index-BP541uS-.d.mts +489 -0
- package/dist/index-BP541uS-.d.mts.map +1 -0
- package/dist/{index-BVK2dv6C.d.mts → index-BQLIofaF.d.mts} +10 -4
- package/dist/index-BQLIofaF.d.mts.map +1 -0
- package/dist/{index-k8WKLXnA.d.mts → index-CaNwM5_e.d.mts} +19 -20
- package/dist/index-CaNwM5_e.d.mts.map +1 -0
- package/dist/index-DPkf_CtG.d.mts +1578 -0
- package/dist/index-DPkf_CtG.d.mts.map +1 -0
- package/dist/index-DcukVskh.d.mts +31 -0
- package/dist/index-DcukVskh.d.mts.map +1 -0
- package/dist/index-Di6XPdGl.d.mts +322 -0
- package/dist/index-Di6XPdGl.d.mts.map +1 -0
- package/dist/index-L6AXewfV.d.mts +872 -0
- package/dist/index-L6AXewfV.d.mts.map +1 -0
- package/dist/index.d.mts +294 -30
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1327 -112
- package/dist/index.mjs.map +1 -1
- package/dist/{output-D_G_JR_8.d.mts → output-yyxdkG0C.d.mts} +2 -3
- package/dist/output-yyxdkG0C.d.mts.map +1 -0
- package/dist/patch/index.d.mts +2 -2
- package/dist/patch/index.mjs +2 -2
- package/dist/{patch-BmRfghOo.mjs → patch-AkQY17CD.mjs} +73 -28
- package/dist/patch-AkQY17CD.mjs.map +1 -0
- package/dist/smartart/index.d.mts +2 -2
- package/dist/smartart/index.mjs +2 -2
- package/dist/smartart-n1kYJ6Jg.mjs +1650 -0
- package/dist/smartart-n1kYJ6Jg.mjs.map +1 -0
- package/dist/style-matrix-B6jhPAT3.mjs +123 -0
- package/dist/style-matrix-B6jhPAT3.mjs.map +1 -0
- package/dist/theme/index.d.mts +4 -2
- package/dist/theme/index.mjs +4 -2
- package/dist/theme-BKnXRmvn.mjs +426 -0
- package/dist/theme-BKnXRmvn.mjs.map +1 -0
- package/dist/theme-options-kO89NUEX.d.mts +109 -0
- package/dist/theme-options-kO89NUEX.d.mts.map +1 -0
- package/dist/util/index.d.mts +3 -3
- package/dist/util/index.mjs +3 -3
- package/dist/{util-Tq9PSjK0.mjs → util-ptE16MEk.mjs} +237 -459
- package/dist/util-ptE16MEk.mjs.map +1 -0
- package/dist/{values-8di32lIe.d.mts → values-BECDm4zr.d.mts} +17 -31
- package/dist/values-BECDm4zr.d.mts.map +1 -0
- package/dist/vector/index.d.mts +2 -0
- package/dist/vector/index.mjs +2 -0
- package/dist/vector-DhLGZjP5.mjs +3049 -0
- package/dist/vector-DhLGZjP5.mjs.map +1 -0
- package/package.json +16 -8
- package/dist/chart-DIGJna_6.mjs +0 -582
- package/dist/chart-DIGJna_6.mjs.map +0 -1
- package/dist/converters-C_Y2QX1w.mjs.map +0 -1
- package/dist/drawingml/index.d.mts +0 -2
- package/dist/drawingml/index.mjs +0 -2
- package/dist/drawingml-sj1J3lb0.mjs.map +0 -1
- package/dist/index-BVK2dv6C.d.mts.map +0 -1
- package/dist/index-BfHfKuKy.d.mts +0 -275
- package/dist/index-BfHfKuKy.d.mts.map +0 -1
- package/dist/index-CE53SwpZ.d.mts +0 -1463
- package/dist/index-CE53SwpZ.d.mts.map +0 -1
- package/dist/index-D6VE-MnJ.d.mts +0 -43
- package/dist/index-D6VE-MnJ.d.mts.map +0 -1
- package/dist/index-DE4CLElr.d.mts +0 -145
- package/dist/index-DE4CLElr.d.mts.map +0 -1
- package/dist/index-DlPA26cw.d.mts +0 -91
- package/dist/index-DlPA26cw.d.mts.map +0 -1
- package/dist/index-k8WKLXnA.d.mts.map +0 -1
- package/dist/output-D_G_JR_8.d.mts.map +0 -1
- package/dist/patch-BmRfghOo.mjs.map +0 -1
- package/dist/smartart-B7ukZ-Tw.mjs +0 -305
- package/dist/smartart-B7ukZ-Tw.mjs.map +0 -1
- package/dist/theme-CiNzdl-9.mjs +0 -177
- package/dist/theme-CiNzdl-9.mjs.map +0 -1
- package/dist/util-Tq9PSjK0.mjs.map +0 -1
- package/dist/values-8di32lIe.d.mts.map +0 -1
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
import { escapeXml } from "@office-open/xml";
|
|
2
|
-
//#region src/smartart/categories.ts
|
|
3
|
-
/** Layout ID → OOXML category type */
|
|
4
|
-
const LAYOUT_CATEGORIES = {
|
|
5
|
-
default: "list",
|
|
6
|
-
list1: "list",
|
|
7
|
-
list2: "list",
|
|
8
|
-
vList2: "list",
|
|
9
|
-
hList1: "list",
|
|
10
|
-
pList1: "list",
|
|
11
|
-
process1: "process",
|
|
12
|
-
process2: "process",
|
|
13
|
-
process3: "process",
|
|
14
|
-
process4: "process",
|
|
15
|
-
chevron1: "process",
|
|
16
|
-
chevron2: "process",
|
|
17
|
-
arrow1: "process",
|
|
18
|
-
arrow2: "process",
|
|
19
|
-
cycle1: "cycle",
|
|
20
|
-
cycle2: "cycle",
|
|
21
|
-
cycle3: "cycle",
|
|
22
|
-
cycle4: "cycle",
|
|
23
|
-
cycle5: "cycle",
|
|
24
|
-
hierarchy1: "hier",
|
|
25
|
-
hierarchy2: "hier",
|
|
26
|
-
hierarchy3: "hier",
|
|
27
|
-
hierarchy4: "hier",
|
|
28
|
-
orgChart1: "hier",
|
|
29
|
-
pyramid1: "pyramid",
|
|
30
|
-
pyramid2: "pyramid",
|
|
31
|
-
pyramid3: "pyramid",
|
|
32
|
-
matrix1: "matrix",
|
|
33
|
-
matrix2: "matrix",
|
|
34
|
-
matrix3: "matrix",
|
|
35
|
-
radial1: "rel",
|
|
36
|
-
radial2: "rel",
|
|
37
|
-
radial3: "rel",
|
|
38
|
-
venn1: "rel",
|
|
39
|
-
funnel1: "rel",
|
|
40
|
-
balance1: "rel",
|
|
41
|
-
gear1: "rel",
|
|
42
|
-
constOrg1: "rel",
|
|
43
|
-
oppId1: "rel"
|
|
44
|
-
};
|
|
45
|
-
/** Style ID → OOXML category type */
|
|
46
|
-
const STYLE_CATEGORIES = {
|
|
47
|
-
simple1: "simple",
|
|
48
|
-
simple2: "simple",
|
|
49
|
-
simple3: "simple",
|
|
50
|
-
simple4: "simple",
|
|
51
|
-
simple5: "simple",
|
|
52
|
-
moderate1: "moderate",
|
|
53
|
-
moderate2: "moderate",
|
|
54
|
-
moderate3: "moderate",
|
|
55
|
-
moderate4: "moderate",
|
|
56
|
-
polished1: "polished",
|
|
57
|
-
polished2: "polished",
|
|
58
|
-
polished3: "polished",
|
|
59
|
-
polished4: "polished",
|
|
60
|
-
professional1: "professional",
|
|
61
|
-
professional2: "professional",
|
|
62
|
-
professional3: "professional",
|
|
63
|
-
professional4: "professional",
|
|
64
|
-
cartoon1: "cartoon",
|
|
65
|
-
cartoon2: "cartoon",
|
|
66
|
-
cartoon3: "cartoon",
|
|
67
|
-
cartoon4: "cartoon",
|
|
68
|
-
powdery1: "powdery",
|
|
69
|
-
powdery2: "powdery",
|
|
70
|
-
powdery3: "powdery",
|
|
71
|
-
powdery4: "powdery",
|
|
72
|
-
burnt1: "burnt",
|
|
73
|
-
burnt2: "burnt",
|
|
74
|
-
burnt3: "burnt",
|
|
75
|
-
burnt4: "burnt"
|
|
76
|
-
};
|
|
77
|
-
/** Color ID → OOXML category type */
|
|
78
|
-
const COLOR_CATEGORIES = {
|
|
79
|
-
accent1_2: "accent1",
|
|
80
|
-
accent2_2: "accent2",
|
|
81
|
-
accent3_2: "accent3",
|
|
82
|
-
accent4_2: "accent4",
|
|
83
|
-
accent5_2: "accent5",
|
|
84
|
-
accent6_2: "accent6",
|
|
85
|
-
colorful1: "colorful",
|
|
86
|
-
colorful2: "colorful",
|
|
87
|
-
colorful3: "colorful",
|
|
88
|
-
colorful4: "colorful",
|
|
89
|
-
dark1: "dark",
|
|
90
|
-
dark2: "dark",
|
|
91
|
-
primary1: "primary",
|
|
92
|
-
primary2: "primary",
|
|
93
|
-
gray1: "gray",
|
|
94
|
-
gray2: "gray"
|
|
95
|
-
};
|
|
96
|
-
//#endregion
|
|
97
|
-
//#region src/smartart/built-in-definitions.ts
|
|
98
|
-
/**
|
|
99
|
-
* Returns layout XML. Full XML for "default", minimal stub for others.
|
|
100
|
-
* Stub has no layoutNode so PowerPoint falls back to built-in definitions
|
|
101
|
-
* based on the uniqueId / loTypeId in the data model.
|
|
102
|
-
*/
|
|
103
|
-
function getLayoutXml(layoutId) {
|
|
104
|
-
if (layoutId === "default") return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><dgm:layoutDef xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/layout/default\"><dgm:title val=\"\"/><dgm:desc val=\"\"/><dgm:catLst><dgm:cat type=\"list\" pri=\"400\"/></dgm:catLst><dgm:sampData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"2\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"3\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"4\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"5\"><dgm:prSet phldr=\"1\"/></dgm:pt></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"6\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"7\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/><dgm:cxn modelId=\"8\" srcId=\"0\" destId=\"3\" srcOrd=\"2\" destOrd=\"0\"/><dgm:cxn modelId=\"9\" srcId=\"0\" destId=\"4\" srcOrd=\"3\" destOrd=\"0\"/><dgm:cxn modelId=\"10\" srcId=\"0\" destId=\"5\" srcOrd=\"4\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:sampData><dgm:styleData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"/><dgm:pt modelId=\"2\"/></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"3\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"4\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:styleData><dgm:clrData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"/><dgm:pt modelId=\"2\"/><dgm:pt modelId=\"3\"/><dgm:pt modelId=\"4\"/><dgm:pt modelId=\"5\"/><dgm:pt modelId=\"6\"/></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"7\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"8\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/><dgm:cxn modelId=\"9\" srcId=\"0\" destId=\"3\" srcOrd=\"2\" destOrd=\"0\"/><dgm:cxn modelId=\"10\" srcId=\"0\" destId=\"4\" srcOrd=\"3\" destOrd=\"0\"/><dgm:cxn modelId=\"11\" srcId=\"0\" destId=\"5\" srcOrd=\"4\" destOrd=\"0\"/><dgm:cxn modelId=\"12\" srcId=\"0\" destId=\"6\" srcOrd=\"5\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:clrData><dgm:layoutNode name=\"diagram\" chOrder=\"b\"><dgm:varLst><dgm:dir/><dgm:resizeHandles val=\"exact\"/></dgm:varLst><dgm:choose name=\"Name0\"><dgm:if name=\"Name1\" func=\"var\" arg=\"dir\" op=\"equ\" val=\"norm\"><dgm:alg type=\"snake\"><dgm:param type=\"grDir\" val=\"tL\"/><dgm:param type=\"flowDir\" val=\"row\"/><dgm:param type=\"contDir\" val=\"sameDir\"/><dgm:param type=\"off\" val=\"ctr\"/></dgm:alg></dgm:if><dgm:else name=\"Name2\"><dgm:alg type=\"snake\"><dgm:param type=\"grDir\" val=\"tR\"/><dgm:param type=\"flowDir\" val=\"row\"/><dgm:param type=\"contDir\" val=\"sameDir\"/><dgm:param type=\"off\" val=\"ctr\"/></dgm:alg></dgm:else></dgm:choose><dgm:shape blipPhldr=\"false\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\"><dgm:adjLst/></dgm:shape><dgm:presOf/><dgm:constrLst><dgm:constr type=\"w\" for=\"ch\" forName=\"node\" refType=\"w\" refPtType=\"all\"/><dgm:constr type=\"h\" for=\"ch\" forName=\"node\" refType=\"w\" refFor=\"ch\" refForName=\"node\" fact=\"0.6\"/><dgm:constr type=\"w\" for=\"ch\" forName=\"sibTrans\" refType=\"w\" refFor=\"ch\" refForName=\"node\" fact=\"0.1\"/><dgm:constr type=\"sp\" refType=\"w\" refFor=\"ch\" refForName=\"sibTrans\"/><dgm:constr type=\"primFontSz\" for=\"ch\" forName=\"node\" op=\"equ\" val=\"65\"/></dgm:constrLst><dgm:ruleLst/><dgm:forEach name=\"Name3\" axis=\"ch\" ptType=\"node\" st=\"1\"><dgm:layoutNode name=\"node\"><dgm:varLst><dgm:bulletEnabled val=\"1\"/></dgm:varLst><dgm:alg type=\"tx\"/><dgm:shape type=\"rect\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\"><dgm:adjLst/></dgm:shape><dgm:presOf axis=\"desOrSelf\" ptType=\"node\"/><dgm:constrLst><dgm:constr type=\"lMarg\" refType=\"primFontSz\" fact=\"0.3\"/><dgm:constr type=\"rMarg\" refType=\"primFontSz\" fact=\"0.3\"/><dgm:constr type=\"tMarg\" refType=\"primFontSz\" fact=\"0.3\"/><dgm:constr type=\"bMarg\" refType=\"primFontSz\" fact=\"0.3\"/></dgm:constrLst><dgm:ruleLst><dgm:rule type=\"primFontSz\" val=\"5\" fact=\"NaN\" max=\"NaN\"/></dgm:ruleLst></dgm:layoutNode><dgm:forEach name=\"Name4\" axis=\"followSib\" ptType=\"sibTrans\" cnt=\"1\"><dgm:layoutNode name=\"sibTrans\"><dgm:alg type=\"sp\"/><dgm:shape xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\"><dgm:adjLst/></dgm:shape><dgm:presOf/><dgm:constrLst/><dgm:ruleLst/></dgm:layoutNode></dgm:forEach></dgm:layoutNode></dgm:layoutDef>";
|
|
105
|
-
const cat = LAYOUT_CATEGORIES[layoutId] ?? "list";
|
|
106
|
-
return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><dgm:layoutDef xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/layout/" + layoutId + "\"><dgm:title val=\"\"/><dgm:desc val=\"\"/><dgm:catLst><dgm:cat type=\"" + cat + "\" pri=\"400\"/></dgm:catLst><dgm:sampData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"2\"><dgm:prSet phldr=\"1\"/></dgm:pt></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"3\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"4\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:sampData></dgm:layoutDef>";
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Returns style XML with basic style definitions (fillClrLst, linClrLst, etc.)
|
|
110
|
-
* that allow PowerPoint to correctly render SmartArt colors and effects.
|
|
111
|
-
*/
|
|
112
|
-
function getStyleXml(styleId) {
|
|
113
|
-
const cat = STYLE_CATEGORIES[styleId] ?? "simple";
|
|
114
|
-
return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><dgm:styleDef xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/quickstyle/" + styleId + "\"><dgm:title val=\"\"/><dgm:desc val=\"\"/><dgm:catLst><dgm:cat type=\"" + cat + "\" pri=\"10100\"/></dgm:catLst><dgm:scene3d><a:camera prst=\"orthographicFront\"/><a:lightRig rig=\"threePt\" dir=\"t\"/></dgm:scene3d><dgm:fillClrLst><a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent2\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent3\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent4\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent5\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent6\"/></a:solidFill></dgm:fillClrLst><dgm:linClrLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:linClrLst><dgm:effectClrLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:effectClrLst><dgm:fontClrLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:fontClrLst></dgm:styleDef>";
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Returns color XML with basic color definitions (fillLst, linLst, etc.)
|
|
118
|
-
* that allow PowerPoint to correctly render SmartArt with the specified color scheme.
|
|
119
|
-
*/
|
|
120
|
-
function getColorXml(colorId) {
|
|
121
|
-
const cat = COLOR_CATEGORIES[colorId] ?? "accent1";
|
|
122
|
-
const accentMatch = colorId.match(/^(accent\d)/);
|
|
123
|
-
const accentVal = accentMatch ? accentMatch[1] : "accent1";
|
|
124
|
-
let colorContent;
|
|
125
|
-
if (colorId.startsWith("accent")) colorContent = `<dgm:fillLst><a:solidFill><a:schemeClr val="${accentVal}"/></a:solidFill></dgm:fillLst><dgm:linLst><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></dgm:linLst><dgm:effectLst><a:solidFill><a:schemeClr val="tx1"/></a:solidFill></dgm:effectLst><dgm:txFillLst><a:solidFill><a:schemeClr val="tx1"/></a:solidFill></dgm:txFillLst><dgm:txLinLst><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></dgm:txLinLst><dgm:txEffectLst><a:solidFill><a:schemeClr val="tx1"/></a:solidFill></dgm:txEffectLst>`;
|
|
126
|
-
else if (colorId.startsWith("colorful")) colorContent = "<dgm:fillLst><a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent2\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent3\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent4\"/></a:solidFill><a:solidFill><a:schemeClr val=\"accent5\"/></a:solidFill></dgm:fillLst><dgm:linLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:linLst><dgm:effectLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:effectLst><dgm:txFillLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:txFillLst><dgm:txLinLst/><dgm:txEffectLst/>";
|
|
127
|
-
else if (colorId.startsWith("dark")) colorContent = "<dgm:fillLst><a:solidFill><a:schemeClr val=\"dk1\"/></a:solidFill><a:solidFill><a:schemeClr val=\"dk2\"/></a:solidFill></dgm:fillLst><dgm:linLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:linLst><dgm:effectLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:effectLst><dgm:txFillLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:txFillLst><dgm:txLinLst/><dgm:txEffectLst/>";
|
|
128
|
-
else colorContent = "<dgm:fillLst><a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill></dgm:fillLst><dgm:linLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:linLst><dgm:effectLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:effectLst><dgm:txFillLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:txFillLst><dgm:txLinLst/><dgm:txEffectLst/>";
|
|
129
|
-
return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><dgm:colorsDef xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/colors/" + colorId + "\"><dgm:title val=\"\"/><dgm:desc val=\"\"/><dgm:catLst><dgm:cat type=\"" + cat + "\" pri=\"11200\"/></dgm:catLst>" + colorContent + "</dgm:colorsDef>";
|
|
130
|
-
}
|
|
131
|
-
/** Minimal drawing cache for SmartArt (Office apps auto-regenerate this on open) */
|
|
132
|
-
const DEFAULT_DRAWING_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><dsp:drawing xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\" xmlns:dsp=\"http://schemas.microsoft.com/office/drawing/2008/diagram\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"><dsp:spTree><dsp:nvGrpSpPr><dsp:cNvPr id=\"0\" name=\"\"/><dsp:cNvGrpSpPr/></dsp:nvGrpSpPr><dsp:grpSpPr/></dsp:spTree></dsp:drawing>";
|
|
133
|
-
//#endregion
|
|
134
|
-
//#region src/smartart/data-model/connection.ts
|
|
135
|
-
/**
|
|
136
|
-
* dgm:cxn — SmartArt data model connection (edge) XML stringifier.
|
|
137
|
-
*/
|
|
138
|
-
function stringifyConnection(opts) {
|
|
139
|
-
const attrs = [
|
|
140
|
-
`modelId="${escapeXml(String(opts.modelId))}"`,
|
|
141
|
-
`srcId="${escapeXml(String(opts.srcId))}"`,
|
|
142
|
-
`destId="${escapeXml(String(opts.destId))}"`,
|
|
143
|
-
`srcOrd="${opts.srcOrd ?? 0}"`,
|
|
144
|
-
`destOrd="${opts.destOrd ?? 0}"`
|
|
145
|
-
];
|
|
146
|
-
if (opts.type) attrs.push(`type="${escapeXml(opts.type)}"`);
|
|
147
|
-
if (opts.parTransId) attrs.push(`parTransId="${escapeXml(opts.parTransId)}"`);
|
|
148
|
-
if (opts.sibTransId) attrs.push(`sibTransId="${escapeXml(opts.sibTransId)}"`);
|
|
149
|
-
if (opts.presId) attrs.push(`presId="${escapeXml(opts.presId)}"`);
|
|
150
|
-
return `<dgm:cxn ${attrs.join(" ")}/>`;
|
|
151
|
-
}
|
|
152
|
-
//#endregion
|
|
153
|
-
//#region src/smartart/data-model/data-model.ts
|
|
154
|
-
/**
|
|
155
|
-
* CT_DataModel XML stringifier — assembles complete SmartArt data model XML.
|
|
156
|
-
*
|
|
157
|
-
* @module
|
|
158
|
-
*/
|
|
159
|
-
/**
|
|
160
|
-
* Build the complete dgm:dataModel XML from pre-serialized point and connection strings.
|
|
161
|
-
*/
|
|
162
|
-
function stringifyDataModel(points, connections) {
|
|
163
|
-
return [
|
|
164
|
-
"<dgm:dataModel xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\">",
|
|
165
|
-
`<dgm:ptLst>${points.join("")}</dgm:ptLst>`,
|
|
166
|
-
`<dgm:cxnLst>${connections.join("")}</dgm:cxnLst>`,
|
|
167
|
-
"<dgm:bg/>",
|
|
168
|
-
"<dgm:whole/>",
|
|
169
|
-
"</dgm:dataModel>"
|
|
170
|
-
].join("");
|
|
171
|
-
}
|
|
172
|
-
//#endregion
|
|
173
|
-
//#region src/smartart/data-model/point.ts
|
|
174
|
-
/**
|
|
175
|
-
* dgm:pt — SmartArt data model point (node) XML stringifier.
|
|
176
|
-
*/
|
|
177
|
-
function stringifyPoint(modelId, text, type = "node", propertySet) {
|
|
178
|
-
const parts = [];
|
|
179
|
-
parts.push(`<dgm:pt modelId="${escapeXml(String(modelId))}" type="${escapeXml(type)}">`);
|
|
180
|
-
if (propertySet) parts.push(stringifyPropertySet(propertySet));
|
|
181
|
-
parts.push(stringifyPointText(text));
|
|
182
|
-
parts.push("</dgm:pt>");
|
|
183
|
-
return parts.join("");
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* dgm:pt — transition point (parTrans or sibTrans) XML stringifier.
|
|
187
|
-
*/
|
|
188
|
-
function stringifyTransPoint(modelId, type, cxnId) {
|
|
189
|
-
return `<dgm:pt modelId="${escapeXml(modelId)}" type="${escapeXml(type)}" cxnId="${escapeXml(cxnId)}"><dgm:spPr/></dgm:pt>`;
|
|
190
|
-
}
|
|
191
|
-
function stringifyPropertySet(opts) {
|
|
192
|
-
const attr = [];
|
|
193
|
-
if (opts.presentationAssociationId !== void 0) attr.push(`presAssocID="${escapeXml(opts.presentationAssociationId)}"`);
|
|
194
|
-
if (opts.presentationName !== void 0) attr.push(`presName="${escapeXml(opts.presentationName)}"`);
|
|
195
|
-
if (opts.presentationStyleLabel !== void 0) attr.push(`presStyleLbl="${escapeXml(opts.presentationStyleLabel)}"`);
|
|
196
|
-
if (opts.presentationStyleIndex !== void 0) attr.push(`presStyleIdx="${opts.presentationStyleIndex}"`);
|
|
197
|
-
if (opts.presentationStyleCount !== void 0) attr.push(`presStyleCnt="${opts.presentationStyleCount}"`);
|
|
198
|
-
if (opts.placeholderText !== void 0) attr.push(`phldrT="${escapeXml(opts.placeholderText)}"`);
|
|
199
|
-
if (opts.placeholder !== void 0) attr.push(`phldr="${opts.placeholder ? 1 : 0}"`);
|
|
200
|
-
if (opts.customAngle !== void 0) attr.push(`custAng="${opts.customAngle}"`);
|
|
201
|
-
if (opts.customFlipVertical !== void 0) attr.push(`custFlipVert="${opts.customFlipVertical ? 1 : 0}"`);
|
|
202
|
-
if (opts.customFlipHorizontal !== void 0) attr.push(`custFlipHor="${opts.customFlipHorizontal ? 1 : 0}"`);
|
|
203
|
-
if (opts.customSizeX !== void 0) attr.push(`custSzX="${opts.customSizeX}"`);
|
|
204
|
-
if (opts.customSizeY !== void 0) attr.push(`custSzY="${opts.customSizeY}"`);
|
|
205
|
-
if (opts.customScaleX !== void 0) attr.push(`custScaleX="${opts.customScaleX}"`);
|
|
206
|
-
if (opts.customScaleY !== void 0) attr.push(`custScaleY="${opts.customScaleY}"`);
|
|
207
|
-
if (opts.customText !== void 0) attr.push(`custT="${opts.customText ? 1 : 0}"`);
|
|
208
|
-
if (opts.customLinearFactorX !== void 0) attr.push(`custLinFactX="${opts.customLinearFactorX}"`);
|
|
209
|
-
if (opts.customLinearFactorY !== void 0) attr.push(`custLinFactY="${opts.customLinearFactorY}"`);
|
|
210
|
-
if (opts.customLinearFactorNeighborX !== void 0) attr.push(`custLinFactNeighborX="${opts.customLinearFactorNeighborX}"`);
|
|
211
|
-
if (opts.customLinearFactorNeighborY !== void 0) attr.push(`custLinFactNeighborY="${opts.customLinearFactorNeighborY}"`);
|
|
212
|
-
if (opts.customRadialScaleRadius !== void 0) attr.push(`custRadScaleRad="${opts.customRadialScaleRadius}"`);
|
|
213
|
-
if (opts.customRadialScaleIncrement !== void 0) attr.push(`custRadScaleInc="${opts.customRadialScaleIncrement}"`);
|
|
214
|
-
if (opts.coherent3DOffset !== void 0) attr.push(`coherent3DOff="${opts.coherent3DOffset ? 1 : 0}"`);
|
|
215
|
-
if (opts.hideGeometry !== void 0) attr.push(`hideGeom="${opts.hideGeometry ? 1 : 0}"`);
|
|
216
|
-
if (opts.hideLastTransition !== void 0) attr.push(`hideLastTrans="${opts.hideLastTransition ? 1 : 0}"`);
|
|
217
|
-
if (opts.lockTextEntry !== void 0) attr.push(`lkTxEntry="${opts.lockTextEntry ? 1 : 0}"`);
|
|
218
|
-
if (opts.moveWith !== void 0) attr.push(`moveWith="${escapeXml(opts.moveWith)}"`);
|
|
219
|
-
if (opts.useDefault !== void 0) attr.push(`useDef="${opts.useDefault ? 1 : 0}"`);
|
|
220
|
-
if (opts.zOrderOffset !== void 0) attr.push(`zOrderOff="${opts.zOrderOffset}"`);
|
|
221
|
-
if (opts.layoutTypeId !== void 0) attr.push(`loTypeId="${escapeXml(opts.layoutTypeId)}"`);
|
|
222
|
-
if (opts.layoutCategoryId !== void 0) attr.push(`loCatId="${escapeXml(opts.layoutCategoryId)}"`);
|
|
223
|
-
if (opts.quickStyleTypeId !== void 0) attr.push(`qsTypeId="${escapeXml(opts.quickStyleTypeId)}"`);
|
|
224
|
-
if (opts.quickStyleCategoryId !== void 0) attr.push(`qsCatId="${escapeXml(opts.quickStyleCategoryId)}"`);
|
|
225
|
-
if (opts.colorStyleTypeId !== void 0) attr.push(`csTypeId="${escapeXml(opts.colorStyleTypeId)}"`);
|
|
226
|
-
if (opts.colorStyleCategoryId !== void 0) attr.push(`csCatId="${escapeXml(opts.colorStyleCategoryId)}"`);
|
|
227
|
-
if (attr.length === 0) return "";
|
|
228
|
-
return `<dgm:prSet ${attr.join(" ")}/>`;
|
|
229
|
-
}
|
|
230
|
-
function stringifyPointText(text) {
|
|
231
|
-
return `<dgm:t><a:bodyPr/><a:lstStyle/><a:p>${text ? `<a:r><a:t>${escapeXml(text)}</a:t></a:r>` : ""}</a:p></dgm:t>`;
|
|
232
|
-
}
|
|
233
|
-
//#endregion
|
|
234
|
-
//#region src/smartart/smartart-collection.ts
|
|
235
|
-
/**
|
|
236
|
-
* Manages SmartArt parts in a document.
|
|
237
|
-
*/
|
|
238
|
-
var SmartArtCollection = class {
|
|
239
|
-
map;
|
|
240
|
-
constructor() {
|
|
241
|
-
this.map = /* @__PURE__ */ new Map();
|
|
242
|
-
}
|
|
243
|
-
addSmartArt(key, data) {
|
|
244
|
-
this.map.set(key, data);
|
|
245
|
-
}
|
|
246
|
-
get array() {
|
|
247
|
-
return [...this.map.values()];
|
|
248
|
-
}
|
|
249
|
-
};
|
|
250
|
-
//#endregion
|
|
251
|
-
//#region src/smartart/tree-to-model.ts
|
|
252
|
-
function stringifyDocPoint(layout, style, color) {
|
|
253
|
-
const loTypeId = `urn:microsoft.com/office/officeart/2005/8/layout/${layout}`;
|
|
254
|
-
const loCatId = LAYOUT_CATEGORIES[layout] ?? "list";
|
|
255
|
-
const qsTypeId = `urn:microsoft.com/office/officeart/2005/8/quickstyle/${style}`;
|
|
256
|
-
const qsCatId = STYLE_CATEGORIES[style] ?? "simple";
|
|
257
|
-
const csTypeId = `urn:microsoft.com/office/officeart/2005/8/colors/${color}`;
|
|
258
|
-
const csCatId = COLOR_CATEGORIES[color] ?? "accent1";
|
|
259
|
-
return [
|
|
260
|
-
"<dgm:pt modelId=\"0\" type=\"doc\">",
|
|
261
|
-
`<dgm:prSet loTypeId="${escapeXml(loTypeId)}" loCatId="${escapeXml(loCatId)}" qsTypeId="${escapeXml(qsTypeId)}" qsCatId="${escapeXml(qsCatId)}" csTypeId="${escapeXml(csTypeId)}" csCatId="${escapeXml(csCatId)}" phldr="0"/>`,
|
|
262
|
-
"<dgm:spPr/>",
|
|
263
|
-
"<dgm:t><a:bodyPr/><a:lstStyle/><a:p/></dgm:t>",
|
|
264
|
-
"</dgm:pt>"
|
|
265
|
-
].join("");
|
|
266
|
-
}
|
|
267
|
-
function uuid() {
|
|
268
|
-
return `{${crypto.randomUUID().toUpperCase()}}`;
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* Creates SmartArt data model XML from tree nodes with layout/style/color settings.
|
|
272
|
-
* Returns the XML string body (no XML declaration).
|
|
273
|
-
*/
|
|
274
|
-
const createDataModel = (nodes, layout = "default", style = "simple1", color = "accent1_2") => {
|
|
275
|
-
const pointStrs = [];
|
|
276
|
-
const connectionStrs = [];
|
|
277
|
-
pointStrs.push(stringifyDocPoint(layout, style, color));
|
|
278
|
-
for (const [i, node] of nodes.entries()) {
|
|
279
|
-
const walk = (node, parentUuid, srcOrd) => {
|
|
280
|
-
const nodeUuid = uuid();
|
|
281
|
-
const parTransUuid = uuid();
|
|
282
|
-
const sibTransUuid = uuid();
|
|
283
|
-
const cxnUuid = uuid();
|
|
284
|
-
pointStrs.push(stringifyTransPoint(parTransUuid, "parTrans", cxnUuid));
|
|
285
|
-
pointStrs.push(stringifyTransPoint(sibTransUuid, "sibTrans", cxnUuid));
|
|
286
|
-
pointStrs.push(stringifyPoint(nodeUuid, node.text));
|
|
287
|
-
connectionStrs.push(stringifyConnection({
|
|
288
|
-
modelId: parTransUuid,
|
|
289
|
-
srcId: parentUuid,
|
|
290
|
-
destId: nodeUuid,
|
|
291
|
-
srcOrd,
|
|
292
|
-
destOrd: 0,
|
|
293
|
-
parTransId: parTransUuid,
|
|
294
|
-
sibTransId: sibTransUuid
|
|
295
|
-
}));
|
|
296
|
-
if (node.children) for (const [j, child] of node.children.entries()) walk(child, nodeUuid, j);
|
|
297
|
-
};
|
|
298
|
-
walk(node, "0", i);
|
|
299
|
-
}
|
|
300
|
-
return stringifyDataModel(pointStrs, connectionStrs);
|
|
301
|
-
};
|
|
302
|
-
//#endregion
|
|
303
|
-
export { stringifyDataModel as a, getColorXml as c, COLOR_CATEGORIES as d, LAYOUT_CATEGORIES as f, stringifyTransPoint as i, getLayoutXml as l, SmartArtCollection as n, stringifyConnection as o, STYLE_CATEGORIES as p, stringifyPoint as r, DEFAULT_DRAWING_XML as s, createDataModel as t, getStyleXml as u };
|
|
304
|
-
|
|
305
|
-
//# sourceMappingURL=smartart-B7ukZ-Tw.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smartart-B7ukZ-Tw.mjs","names":[],"sources":["../src/smartart/categories.ts","../src/smartart/built-in-definitions.ts","../src/smartart/data-model/connection.ts","../src/smartart/data-model/data-model.ts","../src/smartart/data-model/point.ts","../src/smartart/smartart-collection.ts","../src/smartart/tree-to-model.ts"],"sourcesContent":["/** Layout ID → OOXML category type */\nexport const LAYOUT_CATEGORIES: Record<string, string> = {\n default: \"list\",\n list1: \"list\",\n list2: \"list\",\n vList2: \"list\",\n hList1: \"list\",\n pList1: \"list\",\n process1: \"process\",\n process2: \"process\",\n process3: \"process\",\n process4: \"process\",\n chevron1: \"process\",\n chevron2: \"process\",\n arrow1: \"process\",\n arrow2: \"process\",\n cycle1: \"cycle\",\n cycle2: \"cycle\",\n cycle3: \"cycle\",\n cycle4: \"cycle\",\n cycle5: \"cycle\",\n hierarchy1: \"hier\",\n hierarchy2: \"hier\",\n hierarchy3: \"hier\",\n hierarchy4: \"hier\",\n orgChart1: \"hier\",\n pyramid1: \"pyramid\",\n pyramid2: \"pyramid\",\n pyramid3: \"pyramid\",\n matrix1: \"matrix\",\n matrix2: \"matrix\",\n matrix3: \"matrix\",\n radial1: \"rel\",\n radial2: \"rel\",\n radial3: \"rel\",\n venn1: \"rel\",\n funnel1: \"rel\",\n balance1: \"rel\",\n gear1: \"rel\",\n constOrg1: \"rel\",\n oppId1: \"rel\",\n};\n\n/** Style ID → OOXML category type */\nexport const STYLE_CATEGORIES: Record<string, string> = {\n simple1: \"simple\",\n simple2: \"simple\",\n simple3: \"simple\",\n simple4: \"simple\",\n simple5: \"simple\",\n moderate1: \"moderate\",\n moderate2: \"moderate\",\n moderate3: \"moderate\",\n moderate4: \"moderate\",\n polished1: \"polished\",\n polished2: \"polished\",\n polished3: \"polished\",\n polished4: \"polished\",\n professional1: \"professional\",\n professional2: \"professional\",\n professional3: \"professional\",\n professional4: \"professional\",\n cartoon1: \"cartoon\",\n cartoon2: \"cartoon\",\n cartoon3: \"cartoon\",\n cartoon4: \"cartoon\",\n powdery1: \"powdery\",\n powdery2: \"powdery\",\n powdery3: \"powdery\",\n powdery4: \"powdery\",\n burnt1: \"burnt\",\n burnt2: \"burnt\",\n burnt3: \"burnt\",\n burnt4: \"burnt\",\n};\n\n/** Color ID → OOXML category type */\nexport const COLOR_CATEGORIES: Record<string, string> = {\n accent1_2: \"accent1\",\n accent2_2: \"accent2\",\n accent3_2: \"accent3\",\n accent4_2: \"accent4\",\n accent5_2: \"accent5\",\n accent6_2: \"accent6\",\n colorful1: \"colorful\",\n colorful2: \"colorful\",\n colorful3: \"colorful\",\n colorful4: \"colorful\",\n dark1: \"dark\",\n dark2: \"dark\",\n primary1: \"primary\",\n primary2: \"primary\",\n gray1: \"gray\",\n gray2: \"gray\",\n};\n","/**\n * SmartArt built-in definitions — layout, quick style, and color transforms.\n *\n * Provides XML generators for layoutDef, styleDef, and colorsDef stubs.\n * The \"default\" layout uses a full embedded XML; all others use minimal stubs\n * that carry only the uniqueId — Office applications resolve these to built-in definitions.\n *\n * @module\n */\n\nexport { COLOR_CATEGORIES, LAYOUT_CATEGORIES, STYLE_CATEGORIES } from \"./categories\";\n\nimport { LAYOUT_CATEGORIES, STYLE_CATEGORIES, COLOR_CATEGORIES } from \"./categories\";\n\n// ---------------------------------------------------------------------------\n// Layout XML — full for \"default\", stubs for everything else\n// ---------------------------------------------------------------------------\n\nconst DGM_NS = \"http://schemas.openxmlformats.org/drawingml/2006/diagram\";\nconst A_NS = \"http://schemas.openxmlformats.org/drawingml/2006/main\";\nconst XML_DECL = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n/** Full default list layout (urn:microsoft.com/office/officeart/2005/8/layout/default) */\nconst FULL_DEFAULT_LAYOUT_XML =\n '<dgm:layoutDef xmlns:dgm=\"' +\n DGM_NS +\n '\" xmlns:a=\"' +\n A_NS +\n '\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/layout/default\">' +\n '<dgm:title val=\"\"/><dgm:desc val=\"\"/>' +\n '<dgm:catLst><dgm:cat type=\"list\" pri=\"400\"/></dgm:catLst>' +\n '<dgm:sampData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"2\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"3\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"4\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"5\"><dgm:prSet phldr=\"1\"/></dgm:pt></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"6\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"7\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/><dgm:cxn modelId=\"8\" srcId=\"0\" destId=\"3\" srcOrd=\"2\" destOrd=\"0\"/><dgm:cxn modelId=\"9\" srcId=\"0\" destId=\"4\" srcOrd=\"3\" destOrd=\"0\"/><dgm:cxn modelId=\"10\" srcId=\"0\" destId=\"5\" srcOrd=\"4\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:sampData>' +\n '<dgm:styleData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"/><dgm:pt modelId=\"2\"/></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"3\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"4\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:styleData>' +\n '<dgm:clrData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"/><dgm:pt modelId=\"2\"/><dgm:pt modelId=\"3\"/><dgm:pt modelId=\"4\"/><dgm:pt modelId=\"5\"/><dgm:pt modelId=\"6\"/></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"7\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"8\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/><dgm:cxn modelId=\"9\" srcId=\"0\" destId=\"3\" srcOrd=\"2\" destOrd=\"0\"/><dgm:cxn modelId=\"10\" srcId=\"0\" destId=\"4\" srcOrd=\"3\" destOrd=\"0\"/><dgm:cxn modelId=\"11\" srcId=\"0\" destId=\"5\" srcOrd=\"4\" destOrd=\"0\"/><dgm:cxn modelId=\"12\" srcId=\"0\" destId=\"6\" srcOrd=\"5\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:clrData>' +\n '<dgm:layoutNode name=\"diagram\" chOrder=\"b\"><dgm:varLst><dgm:dir/><dgm:resizeHandles val=\"exact\"/></dgm:varLst>' +\n '<dgm:choose name=\"Name0\"><dgm:if name=\"Name1\" func=\"var\" arg=\"dir\" op=\"equ\" val=\"norm\"><dgm:alg type=\"snake\"><dgm:param type=\"grDir\" val=\"tL\"/><dgm:param type=\"flowDir\" val=\"row\"/><dgm:param type=\"contDir\" val=\"sameDir\"/><dgm:param type=\"off\" val=\"ctr\"/></dgm:alg></dgm:if><dgm:else name=\"Name2\"><dgm:alg type=\"snake\"><dgm:param type=\"grDir\" val=\"tR\"/><dgm:param type=\"flowDir\" val=\"row\"/><dgm:param type=\"contDir\" val=\"sameDir\"/><dgm:param type=\"off\" val=\"ctr\"/></dgm:alg></dgm:else></dgm:choose>' +\n '<dgm:shape blipPhldr=\"false\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\"><dgm:adjLst/></dgm:shape><dgm:presOf/>' +\n '<dgm:constrLst><dgm:constr type=\"w\" for=\"ch\" forName=\"node\" refType=\"w\" refPtType=\"all\"/><dgm:constr type=\"h\" for=\"ch\" forName=\"node\" refType=\"w\" refFor=\"ch\" refForName=\"node\" fact=\"0.6\"/><dgm:constr type=\"w\" for=\"ch\" forName=\"sibTrans\" refType=\"w\" refFor=\"ch\" refForName=\"node\" fact=\"0.1\"/><dgm:constr type=\"sp\" refType=\"w\" refFor=\"ch\" refForName=\"sibTrans\"/><dgm:constr type=\"primFontSz\" for=\"ch\" forName=\"node\" op=\"equ\" val=\"65\"/></dgm:constrLst><dgm:ruleLst/>' +\n '<dgm:forEach name=\"Name3\" axis=\"ch\" ptType=\"node\" st=\"1\">' +\n '<dgm:layoutNode name=\"node\"><dgm:varLst><dgm:bulletEnabled val=\"1\"/></dgm:varLst>' +\n '<dgm:alg type=\"tx\"/><dgm:shape type=\"rect\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\">' +\n '<dgm:adjLst/></dgm:shape><dgm:presOf axis=\"desOrSelf\" ptType=\"node\"/>' +\n '<dgm:constrLst><dgm:constr type=\"lMarg\" refType=\"primFontSz\" fact=\"0.3\"/>' +\n '<dgm:constr type=\"rMarg\" refType=\"primFontSz\" fact=\"0.3\"/>' +\n '<dgm:constr type=\"tMarg\" refType=\"primFontSz\" fact=\"0.3\"/>' +\n '<dgm:constr type=\"bMarg\" refType=\"primFontSz\" fact=\"0.3\"/></dgm:constrLst>' +\n '<dgm:ruleLst><dgm:rule type=\"primFontSz\" val=\"5\" fact=\"NaN\" max=\"NaN\"/></dgm:ruleLst></dgm:layoutNode>' +\n '<dgm:forEach name=\"Name4\" axis=\"followSib\" ptType=\"sibTrans\" cnt=\"1\">' +\n '<dgm:layoutNode name=\"sibTrans\"><dgm:alg type=\"sp\"/>' +\n '<dgm:shape xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:blip=\"\">' +\n \"<dgm:adjLst/></dgm:shape><dgm:presOf/><dgm:constrLst/><dgm:ruleLst/>\" +\n \"</dgm:layoutNode></dgm:forEach></dgm:layoutNode></dgm:layoutDef>\";\n\n/**\n * Returns layout XML. Full XML for \"default\", minimal stub for others.\n * Stub has no layoutNode so PowerPoint falls back to built-in definitions\n * based on the uniqueId / loTypeId in the data model.\n */\nexport function getLayoutXml(layoutId: string): string {\n if (layoutId === \"default\") {\n return XML_DECL + FULL_DEFAULT_LAYOUT_XML;\n }\n const cat = LAYOUT_CATEGORIES[layoutId] ?? \"list\";\n return (\n XML_DECL +\n '<dgm:layoutDef xmlns:dgm=\"' +\n DGM_NS +\n '\" xmlns:a=\"' +\n A_NS +\n '\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/layout/' +\n layoutId +\n '\">' +\n '<dgm:title val=\"\"/><dgm:desc val=\"\"/>' +\n '<dgm:catLst><dgm:cat type=\"' +\n cat +\n '\" pri=\"400\"/></dgm:catLst>' +\n '<dgm:sampData><dgm:dataModel><dgm:ptLst><dgm:pt modelId=\"0\" type=\"doc\"/><dgm:pt modelId=\"1\"><dgm:prSet phldr=\"1\"/></dgm:pt><dgm:pt modelId=\"2\"><dgm:prSet phldr=\"1\"/></dgm:pt></dgm:ptLst><dgm:cxnLst><dgm:cxn modelId=\"3\" srcId=\"0\" destId=\"1\" srcOrd=\"0\" destOrd=\"0\"/><dgm:cxn modelId=\"4\" srcId=\"0\" destId=\"2\" srcOrd=\"1\" destOrd=\"0\"/></dgm:cxnLst><dgm:bg/><dgm:whole/></dgm:dataModel></dgm:sampData>' +\n \"</dgm:layoutDef>\"\n );\n}\n\n/**\n * Returns style XML with basic style definitions (fillClrLst, linClrLst, etc.)\n * that allow PowerPoint to correctly render SmartArt colors and effects.\n */\nexport function getStyleXml(styleId: string): string {\n const cat = STYLE_CATEGORIES[styleId] ?? \"simple\";\n\n // Basic style content: fill color list + line color list + effect + font color\n const styleContent =\n \"<dgm:fillClrLst>\" +\n '<a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent2\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent3\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent4\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent5\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent6\"/></a:solidFill>' +\n \"</dgm:fillClrLst>\" +\n '<dgm:linClrLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:linClrLst>' +\n '<dgm:effectClrLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:effectClrLst>' +\n \"<dgm:fontClrLst>\" +\n '<a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill>' +\n \"</dgm:fontClrLst>\";\n\n return (\n XML_DECL +\n '<dgm:styleDef xmlns:dgm=\"' +\n DGM_NS +\n '\" xmlns:a=\"' +\n A_NS +\n '\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/quickstyle/' +\n styleId +\n '\">' +\n '<dgm:title val=\"\"/><dgm:desc val=\"\"/>' +\n '<dgm:catLst><dgm:cat type=\"' +\n cat +\n '\" pri=\"10100\"/></dgm:catLst>' +\n '<dgm:scene3d><a:camera prst=\"orthographicFront\"/><a:lightRig rig=\"threePt\" dir=\"t\"/></dgm:scene3d>' +\n styleContent +\n \"</dgm:styleDef>\"\n );\n}\n\n/**\n * Returns color XML with basic color definitions (fillLst, linLst, etc.)\n * that allow PowerPoint to correctly render SmartArt with the specified color scheme.\n */\nexport function getColorXml(colorId: string): string {\n const cat = COLOR_CATEGORIES[colorId] ?? \"accent1\";\n\n // Resolve the accent color index from colorId (e.g., \"accent1_2\" → \"accent1\")\n const accentMatch = colorId.match(/^(accent\\d)/);\n const accentVal = accentMatch ? accentMatch[1] : \"accent1\";\n\n // Build color content based on colorId patterns\n let colorContent: string;\n if (colorId.startsWith(\"accent\")) {\n // Accent-based: fill with the specified accent color\n colorContent =\n \"<dgm:fillLst>\" +\n `<a:solidFill><a:schemeClr val=\"${accentVal}\"/></a:solidFill>` +\n \"</dgm:fillLst>\" +\n '<dgm:linLst><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></dgm:linLst>' +\n '<dgm:effectLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:effectLst>' +\n '<dgm:txFillLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:txFillLst>' +\n '<dgm:txLinLst><a:solidFill><a:schemeClr val=\"tx1\"><a:tint val=\"75000\"/></a:schemeClr></a:solidFill></dgm:txLinLst>' +\n '<dgm:txEffectLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:txEffectLst>';\n } else if (colorId.startsWith(\"colorful\")) {\n // Colorful: cycle through all accent colors\n colorContent =\n \"<dgm:fillLst>\" +\n '<a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent2\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent3\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent4\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"accent5\"/></a:solidFill>' +\n \"</dgm:fillLst>\" +\n '<dgm:linLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:linLst>' +\n '<dgm:effectLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:effectLst>' +\n '<dgm:txFillLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:txFillLst>' +\n \"<dgm:txLinLst/>\" +\n \"<dgm:txEffectLst/>\";\n } else if (colorId.startsWith(\"dark\")) {\n // Dark: dark backgrounds\n colorContent =\n \"<dgm:fillLst>\" +\n '<a:solidFill><a:schemeClr val=\"dk1\"/></a:solidFill>' +\n '<a:solidFill><a:schemeClr val=\"dk2\"/></a:solidFill>' +\n \"</dgm:fillLst>\" +\n '<dgm:linLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:linLst>' +\n '<dgm:effectLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:effectLst>' +\n '<dgm:txFillLst><a:solidFill><a:schemeClr val=\"lt1\"/></a:solidFill></dgm:txFillLst>' +\n \"<dgm:txLinLst/>\" +\n \"<dgm:txEffectLst/>\";\n } else {\n // Default/primary/gray: use accent color\n colorContent =\n '<dgm:fillLst><a:solidFill><a:schemeClr val=\"accent1\"/></a:solidFill></dgm:fillLst>' +\n '<dgm:linLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:linLst>' +\n '<dgm:effectLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:effectLst>' +\n '<dgm:txFillLst><a:solidFill><a:schemeClr val=\"tx1\"/></a:solidFill></dgm:txFillLst>' +\n \"<dgm:txLinLst/>\" +\n \"<dgm:txEffectLst/>\";\n }\n\n return (\n XML_DECL +\n '<dgm:colorsDef xmlns:dgm=\"' +\n DGM_NS +\n '\" xmlns:a=\"' +\n A_NS +\n '\" uniqueId=\"urn:microsoft.com/office/officeart/2005/8/colors/' +\n colorId +\n '\">' +\n '<dgm:title val=\"\"/><dgm:desc val=\"\"/>' +\n '<dgm:catLst><dgm:cat type=\"' +\n cat +\n '\" pri=\"11200\"/></dgm:catLst>' +\n colorContent +\n \"</dgm:colorsDef>\"\n );\n}\n\n/** Minimal drawing cache for SmartArt (Office apps auto-regenerate this on open) */\nexport const DEFAULT_DRAWING_XML =\n '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>' +\n '<dsp:drawing xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\" xmlns:dsp=\"http://schemas.microsoft.com/office/drawing/2008/diagram\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">' +\n \"<dsp:spTree>\" +\n '<dsp:nvGrpSpPr><dsp:cNvPr id=\"0\" name=\"\"/><dsp:cNvGrpSpPr/></dsp:nvGrpSpPr>' +\n \"<dsp:grpSpPr/>\" +\n \"</dsp:spTree>\" +\n \"</dsp:drawing>\";\n","import { escapeXml } from \"@office-open/xml\";\n\n/**\n * dgm:cxn — SmartArt data model connection (edge) XML stringifier.\n */\nexport function stringifyConnection(opts: {\n modelId: string | number;\n srcId: string | number;\n destId: string | number;\n type?: string;\n srcOrd?: number;\n destOrd?: number;\n parTransId?: string;\n sibTransId?: string;\n presId?: string;\n}): string {\n const attrs: string[] = [\n `modelId=\"${escapeXml(String(opts.modelId))}\"`,\n `srcId=\"${escapeXml(String(opts.srcId))}\"`,\n `destId=\"${escapeXml(String(opts.destId))}\"`,\n `srcOrd=\"${opts.srcOrd ?? 0}\"`,\n `destOrd=\"${opts.destOrd ?? 0}\"`,\n ];\n if (opts.type) attrs.push(`type=\"${escapeXml(opts.type)}\"`);\n if (opts.parTransId) attrs.push(`parTransId=\"${escapeXml(opts.parTransId)}\"`);\n if (opts.sibTransId) attrs.push(`sibTransId=\"${escapeXml(opts.sibTransId)}\"`);\n if (opts.presId) attrs.push(`presId=\"${escapeXml(opts.presId)}\"`);\n return `<dgm:cxn ${attrs.join(\" \")}/>`;\n}\n","/**\n * CT_DataModel XML stringifier — assembles complete SmartArt data model XML.\n *\n * @module\n */\n\n/**\n * Build the complete dgm:dataModel XML from pre-serialized point and connection strings.\n */\nexport function stringifyDataModel(\n points: readonly string[],\n connections: readonly string[],\n): string {\n return [\n '<dgm:dataModel xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\">',\n `<dgm:ptLst>${points.join(\"\")}</dgm:ptLst>`,\n `<dgm:cxnLst>${connections.join(\"\")}</dgm:cxnLst>`,\n \"<dgm:bg/>\",\n \"<dgm:whole/>\",\n \"</dgm:dataModel>\",\n ].join(\"\");\n}\n","import { escapeXml } from \"@office-open/xml\";\n\nexport interface PointPropertySetOptions {\n presentationAssociationId?: string;\n presentationName?: string;\n presentationStyleLabel?: string;\n presentationStyleIndex?: number;\n presentationStyleCount?: number;\n placeholderText?: string;\n placeholder?: boolean;\n customAngle?: number;\n customFlipVertical?: boolean;\n customFlipHorizontal?: boolean;\n customSizeX?: number;\n customSizeY?: number;\n customScaleX?: number;\n customScaleY?: number;\n customText?: boolean;\n customLinearFactorX?: number;\n customLinearFactorY?: number;\n customLinearFactorNeighborX?: number;\n customLinearFactorNeighborY?: number;\n customRadialScaleRadius?: number;\n customRadialScaleIncrement?: number;\n coherent3DOffset?: boolean;\n hideGeometry?: boolean;\n hideLastTransition?: boolean;\n lockTextEntry?: boolean;\n moveWith?: string;\n useDefault?: boolean;\n zOrderOffset?: number;\n layoutTypeId?: string;\n layoutCategoryId?: string;\n quickStyleTypeId?: string;\n quickStyleCategoryId?: string;\n colorStyleTypeId?: string;\n colorStyleCategoryId?: string;\n}\n\n/**\n * dgm:pt — SmartArt data model point (node) XML stringifier.\n */\nexport function stringifyPoint(\n modelId: string | number,\n text: string,\n type: string = \"node\",\n propertySet?: PointPropertySetOptions,\n): string {\n const parts: string[] = [];\n parts.push(`<dgm:pt modelId=\"${escapeXml(String(modelId))}\" type=\"${escapeXml(type)}\">`);\n if (propertySet) {\n parts.push(stringifyPropertySet(propertySet));\n }\n parts.push(stringifyPointText(text));\n parts.push(\"</dgm:pt>\");\n return parts.join(\"\");\n}\n\n/**\n * dgm:pt — transition point (parTrans or sibTrans) XML stringifier.\n */\nexport function stringifyTransPoint(modelId: string, type: string, cxnId: string): string {\n return `<dgm:pt modelId=\"${escapeXml(modelId)}\" type=\"${escapeXml(type)}\" cxnId=\"${escapeXml(cxnId)}\"><dgm:spPr/></dgm:pt>`;\n}\n\nfunction stringifyPropertySet(opts: PointPropertySetOptions): string {\n const attr: string[] = [];\n if (opts.presentationAssociationId !== undefined)\n attr.push(`presAssocID=\"${escapeXml(opts.presentationAssociationId)}\"`);\n if (opts.presentationName !== undefined)\n attr.push(`presName=\"${escapeXml(opts.presentationName)}\"`);\n if (opts.presentationStyleLabel !== undefined)\n attr.push(`presStyleLbl=\"${escapeXml(opts.presentationStyleLabel)}\"`);\n if (opts.presentationStyleIndex !== undefined)\n attr.push(`presStyleIdx=\"${opts.presentationStyleIndex}\"`);\n if (opts.presentationStyleCount !== undefined)\n attr.push(`presStyleCnt=\"${opts.presentationStyleCount}\"`);\n if (opts.placeholderText !== undefined) attr.push(`phldrT=\"${escapeXml(opts.placeholderText)}\"`);\n if (opts.placeholder !== undefined) attr.push(`phldr=\"${opts.placeholder ? 1 : 0}\"`);\n if (opts.customAngle !== undefined) attr.push(`custAng=\"${opts.customAngle}\"`);\n if (opts.customFlipVertical !== undefined)\n attr.push(`custFlipVert=\"${opts.customFlipVertical ? 1 : 0}\"`);\n if (opts.customFlipHorizontal !== undefined)\n attr.push(`custFlipHor=\"${opts.customFlipHorizontal ? 1 : 0}\"`);\n if (opts.customSizeX !== undefined) attr.push(`custSzX=\"${opts.customSizeX}\"`);\n if (opts.customSizeY !== undefined) attr.push(`custSzY=\"${opts.customSizeY}\"`);\n if (opts.customScaleX !== undefined) attr.push(`custScaleX=\"${opts.customScaleX}\"`);\n if (opts.customScaleY !== undefined) attr.push(`custScaleY=\"${opts.customScaleY}\"`);\n if (opts.customText !== undefined) attr.push(`custT=\"${opts.customText ? 1 : 0}\"`);\n if (opts.customLinearFactorX !== undefined)\n attr.push(`custLinFactX=\"${opts.customLinearFactorX}\"`);\n if (opts.customLinearFactorY !== undefined)\n attr.push(`custLinFactY=\"${opts.customLinearFactorY}\"`);\n if (opts.customLinearFactorNeighborX !== undefined)\n attr.push(`custLinFactNeighborX=\"${opts.customLinearFactorNeighborX}\"`);\n if (opts.customLinearFactorNeighborY !== undefined)\n attr.push(`custLinFactNeighborY=\"${opts.customLinearFactorNeighborY}\"`);\n if (opts.customRadialScaleRadius !== undefined)\n attr.push(`custRadScaleRad=\"${opts.customRadialScaleRadius}\"`);\n if (opts.customRadialScaleIncrement !== undefined)\n attr.push(`custRadScaleInc=\"${opts.customRadialScaleIncrement}\"`);\n if (opts.coherent3DOffset !== undefined)\n attr.push(`coherent3DOff=\"${opts.coherent3DOffset ? 1 : 0}\"`);\n if (opts.hideGeometry !== undefined) attr.push(`hideGeom=\"${opts.hideGeometry ? 1 : 0}\"`);\n if (opts.hideLastTransition !== undefined)\n attr.push(`hideLastTrans=\"${opts.hideLastTransition ? 1 : 0}\"`);\n if (opts.lockTextEntry !== undefined) attr.push(`lkTxEntry=\"${opts.lockTextEntry ? 1 : 0}\"`);\n if (opts.moveWith !== undefined) attr.push(`moveWith=\"${escapeXml(opts.moveWith)}\"`);\n if (opts.useDefault !== undefined) attr.push(`useDef=\"${opts.useDefault ? 1 : 0}\"`);\n if (opts.zOrderOffset !== undefined) attr.push(`zOrderOff=\"${opts.zOrderOffset}\"`);\n if (opts.layoutTypeId !== undefined) attr.push(`loTypeId=\"${escapeXml(opts.layoutTypeId)}\"`);\n if (opts.layoutCategoryId !== undefined)\n attr.push(`loCatId=\"${escapeXml(opts.layoutCategoryId)}\"`);\n if (opts.quickStyleTypeId !== undefined)\n attr.push(`qsTypeId=\"${escapeXml(opts.quickStyleTypeId)}\"`);\n if (opts.quickStyleCategoryId !== undefined)\n attr.push(`qsCatId=\"${escapeXml(opts.quickStyleCategoryId)}\"`);\n if (opts.colorStyleTypeId !== undefined)\n attr.push(`csTypeId=\"${escapeXml(opts.colorStyleTypeId)}\"`);\n if (opts.colorStyleCategoryId !== undefined)\n attr.push(`csCatId=\"${escapeXml(opts.colorStyleCategoryId)}\"`);\n\n if (attr.length === 0) return \"\";\n return `<dgm:prSet ${attr.join(\" \")}/>`;\n}\n\nfunction stringifyPointText(text: string): string {\n const body = text ? `<a:r><a:t>${escapeXml(text)}</a:t></a:r>` : \"\";\n return `<dgm:t><a:bodyPr/><a:lstStyle/><a:p>${body}</a:p></dgm:t>`;\n}\n","/**\n * SmartArt data and collection for document generation.\n *\n * @module\n */\n\nexport interface SmartArtData {\n key: string;\n dataModelXml: string;\n layout: string;\n style: string;\n color: string;\n}\n\n/**\n * Manages SmartArt parts in a document.\n */\nexport class SmartArtCollection {\n private map: Map<string, SmartArtData>;\n\n public constructor() {\n this.map = new Map<string, SmartArtData>();\n }\n\n public addSmartArt(key: string, data: SmartArtData): void {\n this.map.set(key, data);\n }\n\n public get array(): SmartArtData[] {\n return [...this.map.values()];\n }\n}\n","import { escapeXml } from \"@office-open/xml\";\n\nimport { COLOR_CATEGORIES, LAYOUT_CATEGORIES, STYLE_CATEGORIES } from \"./categories\";\nimport { stringifyConnection } from \"./data-model/connection\";\nimport { stringifyDataModel } from \"./data-model/data-model\";\nimport { stringifyPoint, stringifyTransPoint } from \"./data-model/point\";\n\nexport interface TreeNode {\n text: string;\n children?: readonly TreeNode[];\n}\n\nfunction stringifyDocPoint(layout: string, style: string, color: string): string {\n const loTypeId = `urn:microsoft.com/office/officeart/2005/8/layout/${layout}`;\n const loCatId = LAYOUT_CATEGORIES[layout] ?? \"list\";\n const qsTypeId = `urn:microsoft.com/office/officeart/2005/8/quickstyle/${style}`;\n const qsCatId = STYLE_CATEGORIES[style] ?? \"simple\";\n const csTypeId = `urn:microsoft.com/office/officeart/2005/8/colors/${color}`;\n const csCatId = COLOR_CATEGORIES[color] ?? \"accent1\";\n\n return [\n '<dgm:pt modelId=\"0\" type=\"doc\">',\n `<dgm:prSet loTypeId=\"${escapeXml(loTypeId)}\" loCatId=\"${escapeXml(loCatId)}\" qsTypeId=\"${escapeXml(qsTypeId)}\" qsCatId=\"${escapeXml(qsCatId)}\" csTypeId=\"${escapeXml(csTypeId)}\" csCatId=\"${escapeXml(csCatId)}\" phldr=\"0\"/>`,\n \"<dgm:spPr/>\",\n \"<dgm:t><a:bodyPr/><a:lstStyle/><a:p/></dgm:t>\",\n \"</dgm:pt>\",\n ].join(\"\");\n}\n\nfunction uuid(): string {\n return `{${crypto.randomUUID().toUpperCase()}}`;\n}\n\n/**\n * Creates SmartArt data model XML from tree nodes with layout/style/color settings.\n * Returns the XML string body (no XML declaration).\n */\nexport const createDataModel = (\n nodes: readonly TreeNode[],\n layout: string = \"default\",\n style: string = \"simple1\",\n color: string = \"accent1_2\",\n): string => {\n const pointStrs: string[] = [];\n const connectionStrs: string[] = [];\n\n pointStrs.push(stringifyDocPoint(layout, style, color));\n\n for (const [i, node] of nodes.entries()) {\n const walk = (node: TreeNode, parentUuid: string, srcOrd: number): void => {\n const nodeUuid = uuid();\n const parTransUuid = uuid();\n const sibTransUuid = uuid();\n const cxnUuid = uuid();\n\n pointStrs.push(stringifyTransPoint(parTransUuid, \"parTrans\", cxnUuid));\n pointStrs.push(stringifyTransPoint(sibTransUuid, \"sibTrans\", cxnUuid));\n pointStrs.push(stringifyPoint(nodeUuid, node.text));\n\n connectionStrs.push(\n stringifyConnection({\n modelId: parTransUuid,\n srcId: parentUuid,\n destId: nodeUuid,\n srcOrd,\n destOrd: 0,\n parTransId: parTransUuid,\n sibTransId: sibTransUuid,\n }),\n );\n\n if (node.children) {\n for (const [j, child] of node.children.entries()) {\n walk(child, nodeUuid, j);\n }\n }\n };\n walk(node, \"0\", i);\n }\n\n return stringifyDataModel(pointStrs, connectionStrs);\n};\n"],"mappings":"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"}
|
package/dist/theme-CiNzdl-9.mjs
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
import { findChild } from "@office-open/xml";
|
|
2
|
-
//#region src/theme/default-colors.ts
|
|
3
|
-
/** Office 2016+ default theme colors (hex without #). */
|
|
4
|
-
const DEFAULT_COLORS = {
|
|
5
|
-
dark1: "000000",
|
|
6
|
-
light1: "FFFFFF",
|
|
7
|
-
dark2: "44546A",
|
|
8
|
-
light2: "E7E6E6",
|
|
9
|
-
accent1: "4472C4",
|
|
10
|
-
accent2: "ED7D31",
|
|
11
|
-
accent3: "A5A5A5",
|
|
12
|
-
accent4: "FFC000",
|
|
13
|
-
accent5: "5B9BD5",
|
|
14
|
-
accent6: "70AD47",
|
|
15
|
-
hyperlink: "0563C1",
|
|
16
|
-
followedHyperlink: "954F72"
|
|
17
|
-
};
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/theme/build-theme-xml.ts
|
|
20
|
-
/**
|
|
21
|
-
* Build theme XML string — pure function, no side effects.
|
|
22
|
-
*
|
|
23
|
-
* fmtScheme uses the complete Office version (gradFill, outerShdw, bgFillStyleLst)
|
|
24
|
-
* matching what Excel generates.
|
|
25
|
-
*
|
|
26
|
-
* @module
|
|
27
|
-
*/
|
|
28
|
-
function buildThemeXml(options) {
|
|
29
|
-
const name = options?.name ?? "Office Theme";
|
|
30
|
-
const c = {
|
|
31
|
-
...DEFAULT_COLORS,
|
|
32
|
-
...options?.colors
|
|
33
|
-
};
|
|
34
|
-
const f = options?.fonts;
|
|
35
|
-
const majorFont = f?.majorFont ?? "Calibri Light";
|
|
36
|
-
const minorFont = f?.minorFont ?? "Calibri";
|
|
37
|
-
const majorFontAsian = f?.majorFontAsian ?? "";
|
|
38
|
-
const minorFontAsian = f?.minorFontAsian ?? "";
|
|
39
|
-
return `<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="${name}"><a:themeElements><a:clrScheme name="${name}"><a:dk1>${options?.colors?.dark1 !== void 0 ? `<a:srgbClr val="${c.dark1}"/>` : `<a:sysClr val="windowText" lastClr="000000"/>`}</a:dk1><a:lt1>${options?.colors?.light1 !== void 0 ? `<a:srgbClr val="${c.light1}"/>` : `<a:sysClr val="window" lastClr="FFFFFF"/>`}</a:lt1><a:dk2><a:srgbClr val="${c.dark2}"/></a:dk2><a:lt2><a:srgbClr val="${c.light2}"/></a:lt2><a:accent1><a:srgbClr val="${c.accent1}"/></a:accent1><a:accent2><a:srgbClr val="${c.accent2}"/></a:accent2><a:accent3><a:srgbClr val="${c.accent3}"/></a:accent3><a:accent4><a:srgbClr val="${c.accent4}"/></a:accent4><a:accent5><a:srgbClr val="${c.accent5}"/></a:accent5><a:accent6><a:srgbClr val="${c.accent6}"/></a:accent6><a:hlink><a:srgbClr val="${c.hyperlink}"/></a:hlink><a:folHlink><a:srgbClr val="${c.followedHyperlink}"/></a:folHlink></a:clrScheme><a:fontScheme name="${name}"><a:majorFont><a:latin typeface="${majorFont}" panose="020F0302020204030204"/><a:ea typeface="${majorFontAsian}"/><a:cs typeface=""/></a:majorFont><a:minorFont><a:latin typeface="${minorFont}" panose="020F0502020204030204"/><a:ea typeface="${minorFontAsian}"/><a:cs typeface=""/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:lumMod val="110000"/><a:satMod val="105000"/><a:tint val="67000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="103000"/><a:tint val="73000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="109000"/><a:tint val="81000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:lumMod val="102000"/><a:satMod val="103000"/><a:tint val="94000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:lumMod val="100000"/><a:satMod val="110000"/><a:shade val="100000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="99000"/><a:satMod val="120000"/><a:shade val="78000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="6350" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="12700" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="19050" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="57150" dist="19050" dir="5400000" algn="ctr" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="63000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"><a:tint val="95000"/><a:satMod val="170000"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:lumMod val="102000"/><a:satMod val="150000"/><a:tint val="93000"/><a:shade val="98000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:lumMod val="103000"/><a:satMod val="130000"/><a:tint val="98000"/><a:shade val="90000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:satMod val="120000"/><a:shade val="63000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>`;
|
|
40
|
-
}
|
|
41
|
-
//#endregion
|
|
42
|
-
//#region src/theme/default-theme.ts
|
|
43
|
-
/**
|
|
44
|
-
* Theme XML generation — pure function with caching.
|
|
45
|
-
*
|
|
46
|
-
* Replaces the DefaultTheme class with a functionally equivalent
|
|
47
|
-
* pure function. Caches by serialized options key.
|
|
48
|
-
*
|
|
49
|
-
* @module
|
|
50
|
-
*/
|
|
51
|
-
const DEFAULT_XML = buildThemeXml();
|
|
52
|
-
const customCache = /* @__PURE__ */ new Map();
|
|
53
|
-
function themeKey(o) {
|
|
54
|
-
const c = o.colors;
|
|
55
|
-
const f = o.fonts;
|
|
56
|
-
return `n${o.name ?? ""}c${c?.dark1 ?? ""}${c?.light1 ?? ""}${c?.dark2 ?? ""}${c?.light2 ?? ""}${c?.accent1 ?? ""}${c?.accent2 ?? ""}${c?.accent3 ?? ""}${c?.accent4 ?? ""}${c?.accent5 ?? ""}${c?.accent6 ?? ""}${c?.hyperlink ?? ""}${c?.followedHyperlink ?? ""}f${f?.majorFont ?? ""}${f?.minorFont ?? ""}${f?.majorFontAsian ?? ""}${f?.minorFontAsian ?? ""}`;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Generate theme XML string from options.
|
|
60
|
-
* Returns cached default when no options provided.
|
|
61
|
-
*/
|
|
62
|
-
function createThemeXml(options) {
|
|
63
|
-
if (!options) return DEFAULT_XML;
|
|
64
|
-
const key = themeKey(options);
|
|
65
|
-
const cached = customCache.get(key);
|
|
66
|
-
if (cached) return cached;
|
|
67
|
-
const built = buildThemeXml(options);
|
|
68
|
-
customCache.set(key, built);
|
|
69
|
-
return built;
|
|
70
|
-
}
|
|
71
|
-
//#endregion
|
|
72
|
-
//#region src/theme/theme-descriptors.ts
|
|
73
|
-
/**
|
|
74
|
-
* Theme descriptors — bidirectional mapping between ThemeOptions and theme XML.
|
|
75
|
-
*
|
|
76
|
-
* @module
|
|
77
|
-
*/
|
|
78
|
-
/** Color scheme XML tag → ThemeOptions.colors key mapping. */
|
|
79
|
-
const COLOR_TAGS = [
|
|
80
|
-
{
|
|
81
|
-
tag: "a:dk1",
|
|
82
|
-
key: "dark1"
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
tag: "a:lt1",
|
|
86
|
-
key: "light1"
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
tag: "a:dk2",
|
|
90
|
-
key: "dark2"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
tag: "a:lt2",
|
|
94
|
-
key: "light2"
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
tag: "a:accent1",
|
|
98
|
-
key: "accent1"
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
tag: "a:accent2",
|
|
102
|
-
key: "accent2"
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
tag: "a:accent3",
|
|
106
|
-
key: "accent3"
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
tag: "a:accent4",
|
|
110
|
-
key: "accent4"
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
tag: "a:accent5",
|
|
114
|
-
key: "accent5"
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
tag: "a:accent6",
|
|
118
|
-
key: "accent6"
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
tag: "a:hlink",
|
|
122
|
-
key: "hyperlink"
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
tag: "a:folHlink",
|
|
126
|
-
key: "followedHyperlink"
|
|
127
|
-
}
|
|
128
|
-
];
|
|
129
|
-
/** Read the hex color value from a color element (a:dk1/a:lt1 may be sysClr or srgbClr). */
|
|
130
|
-
function readColorValue(el) {
|
|
131
|
-
if (!el) return void 0;
|
|
132
|
-
const srgb = findChild(el, "a:srgbClr");
|
|
133
|
-
if (srgb) return String(srgb.attributes?.["val"] ?? "");
|
|
134
|
-
const sysClr = findChild(el, "a:sysClr");
|
|
135
|
-
if (sysClr) return String(sysClr.attributes?.["lastClr"] ?? "");
|
|
136
|
-
}
|
|
137
|
-
const themeDesc = {
|
|
138
|
-
kind: "custom",
|
|
139
|
-
stringify(opts, _ctx) {
|
|
140
|
-
return buildThemeXml(opts);
|
|
141
|
-
},
|
|
142
|
-
parse(el, _ctx) {
|
|
143
|
-
const result = {};
|
|
144
|
-
const name = el.attributes?.["name"];
|
|
145
|
-
if (name) result.name = String(name);
|
|
146
|
-
const themeElements = findChild(el, "a:themeElements");
|
|
147
|
-
const clrScheme = themeElements ? findChild(themeElements, "a:clrScheme") : void 0;
|
|
148
|
-
if (clrScheme) {
|
|
149
|
-
const colors = {};
|
|
150
|
-
for (const { tag, key } of COLOR_TAGS) {
|
|
151
|
-
const value = readColorValue(findChild(clrScheme, tag));
|
|
152
|
-
if (value) colors[key] = value;
|
|
153
|
-
}
|
|
154
|
-
if (Object.keys(colors).length > 0) result.colors = colors;
|
|
155
|
-
}
|
|
156
|
-
const fontScheme = themeElements ? findChild(themeElements, "a:fontScheme") : void 0;
|
|
157
|
-
if (fontScheme) {
|
|
158
|
-
const majorFontEl = findChild(fontScheme, "a:majorFont");
|
|
159
|
-
const minorFontEl = findChild(fontScheme, "a:minorFont");
|
|
160
|
-
const majorLatin = majorFontEl ? findChild(majorFontEl, "a:latin") : void 0;
|
|
161
|
-
const minorLatin = minorFontEl ? findChild(minorFontEl, "a:latin") : void 0;
|
|
162
|
-
const majorTypeface = majorLatin?.attributes?.["typeface"];
|
|
163
|
-
const minorTypeface = minorLatin?.attributes?.["typeface"];
|
|
164
|
-
if (majorTypeface || minorTypeface) {
|
|
165
|
-
const fonts = {};
|
|
166
|
-
if (majorTypeface) fonts.majorFont = String(majorTypeface);
|
|
167
|
-
if (minorTypeface) fonts.minorFont = String(minorTypeface);
|
|
168
|
-
result.fonts = fonts;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return result;
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
//#endregion
|
|
175
|
-
export { DEFAULT_COLORS as i, createThemeXml as n, buildThemeXml as r, themeDesc as t };
|
|
176
|
-
|
|
177
|
-
//# sourceMappingURL=theme-CiNzdl-9.mjs.map
|