dom-docx 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/API.md +533 -0
- package/LICENSE +21 -0
- package/README.md +236 -0
- package/dist/browser.d.ts +34 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +35 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +118 -0
- package/dist/cli.js.map +1 -0
- package/dist/converter/bordered-block.d.ts +54 -0
- package/dist/converter/bordered-block.d.ts.map +1 -0
- package/dist/converter/bordered-block.js +124 -0
- package/dist/converter/bordered-block.js.map +1 -0
- package/dist/converter/build-docx.d.ts +46 -0
- package/dist/converter/build-docx.d.ts.map +1 -0
- package/dist/converter/build-docx.js +161 -0
- package/dist/converter/build-docx.js.map +1 -0
- package/dist/converter/computed-style-snapshot.browser.js +73 -0
- package/dist/converter/computed-style-snapshot.d.ts +10 -0
- package/dist/converter/computed-style-snapshot.d.ts.map +1 -0
- package/dist/converter/computed-style-snapshot.js +78 -0
- package/dist/converter/computed-style-snapshot.js.map +1 -0
- package/dist/converter/constants.d.ts +51 -0
- package/dist/converter/constants.d.ts.map +1 -0
- package/dist/converter/constants.js +163 -0
- package/dist/converter/constants.js.map +1 -0
- package/dist/converter/css.d.ts +112 -0
- package/dist/converter/css.d.ts.map +1 -0
- package/dist/converter/css.js +621 -0
- package/dist/converter/css.js.map +1 -0
- package/dist/converter/flex.d.ts +59 -0
- package/dist/converter/flex.d.ts.map +1 -0
- package/dist/converter/flex.js +252 -0
- package/dist/converter/flex.js.map +1 -0
- package/dist/converter/image.d.ts +38 -0
- package/dist/converter/image.d.ts.map +1 -0
- package/dist/converter/image.js +159 -0
- package/dist/converter/image.js.map +1 -0
- package/dist/converter/inline.d.ts +18 -0
- package/dist/converter/inline.d.ts.map +1 -0
- package/dist/converter/inline.js +213 -0
- package/dist/converter/inline.js.map +1 -0
- package/dist/converter/ooxml-patch.d.ts +23 -0
- package/dist/converter/ooxml-patch.d.ts.map +1 -0
- package/dist/converter/ooxml-patch.js +54 -0
- package/dist/converter/ooxml-patch.js.map +1 -0
- package/dist/converter/style-path.d.ts +4 -0
- package/dist/converter/style-path.d.ts.map +1 -0
- package/dist/converter/style-path.js +17 -0
- package/dist/converter/style-path.js.map +1 -0
- package/dist/converter/style-resolver-node.d.ts +7 -0
- package/dist/converter/style-resolver-node.d.ts.map +1 -0
- package/dist/converter/style-resolver-node.js +26 -0
- package/dist/converter/style-resolver-node.js.map +1 -0
- package/dist/converter/style-resolver.d.ts +24 -0
- package/dist/converter/style-resolver.d.ts.map +1 -0
- package/dist/converter/style-resolver.js +122 -0
- package/dist/converter/style-resolver.js.map +1 -0
- package/dist/converter/svg.d.ts +11 -0
- package/dist/converter/svg.d.ts.map +1 -0
- package/dist/converter/svg.js +116 -0
- package/dist/converter/svg.js.map +1 -0
- package/dist/converter/table.d.ts +8 -0
- package/dist/converter/table.d.ts.map +1 -0
- package/dist/converter/table.js +745 -0
- package/dist/converter/table.js.map +1 -0
- package/dist/converter/text-metrics.d.ts +17 -0
- package/dist/converter/text-metrics.d.ts.map +1 -0
- package/dist/converter/text-metrics.js +51 -0
- package/dist/converter/text-metrics.js.map +1 -0
- package/dist/converter/types.d.ts +82 -0
- package/dist/converter/types.d.ts.map +1 -0
- package/dist/converter/types.js +9 -0
- package/dist/converter/types.js.map +1 -0
- package/dist/converter/visitor.d.ts +11 -0
- package/dist/converter/visitor.d.ts.map +1 -0
- package/dist/converter/visitor.js +910 -0
- package/dist/converter/visitor.js.map +1 -0
- package/dist/converter.d.ts +28 -0
- package/dist/converter.d.ts.map +1 -0
- package/dist/converter.js +44 -0
- package/dist/converter.js.map +1 -0
- package/dist/html-wrap.d.ts +3 -0
- package/dist/html-wrap.d.ts.map +1 -0
- package/dist/html-wrap.js +26 -0
- package/dist/html-wrap.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/examples/README.md +39 -0
- package/examples/balance-sheet/compare_side_by_side.png +0 -0
- package/examples/balance-sheet/input.html +41 -0
- package/examples/balance-sheet/output.docx +0 -0
- package/examples/balance-sheet/preview.png +0 -0
- package/examples/invoice/compare_side_by_side.png +0 -0
- package/examples/invoice/input.html +88 -0
- package/examples/invoice/logo.png +0 -0
- package/examples/invoice/output.docx +0 -0
- package/examples/invoice/preview.png +0 -0
- package/examples/javascript-essay/compare_side_by_side.png +0 -0
- package/examples/javascript-essay/input.html +39 -0
- package/examples/javascript-essay/output.docx +0 -0
- package/examples/javascript-essay/preview.png +0 -0
- package/examples/product-launch-brief/compare_side_by_side.png +0 -0
- package/examples/product-launch-brief/input.html +120 -0
- package/examples/product-launch-brief/output.docx +0 -0
- package/examples/product-launch-brief/preview.png +0 -0
- package/examples/quarterly-financials/compare_side_by_side.png +0 -0
- package/examples/quarterly-financials/input.html +27 -0
- package/examples/quarterly-financials/output.docx +0 -0
- package/examples/quarterly-financials/preview.png +0 -0
- package/examples/react-dashboard/compare_side_by_side.png +0 -0
- package/examples/react-dashboard/input.html +1 -0
- package/examples/react-dashboard/output.docx +0 -0
- package/examples/react-dashboard/preview.html +107 -0
- package/examples/react-dashboard/preview.png +0 -0
- package/examples/regional-sales-dashboard/compare_side_by_side.png +0 -0
- package/examples/regional-sales-dashboard/input.html +129 -0
- package/examples/regional-sales-dashboard/output.docx +0 -0
- package/examples/regional-sales-dashboard/preview.png +0 -0
- package/examples/sales-contract/compare_side_by_side.png +0 -0
- package/examples/sales-contract/input.html +68 -0
- package/examples/sales-contract/output.docx +0 -0
- package/examples/sales-contract/preview.png +0 -0
- package/examples/sprint-retrospective/compare_side_by_side.png +0 -0
- package/examples/sprint-retrospective/input.html +51 -0
- package/examples/sprint-retrospective/output.docx +0 -0
- package/examples/sprint-retrospective/preview.png +0 -0
- package/package.json +108 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<div style="font-family:Georgia,'Times New Roman',serif;color:#1c1917">
|
|
2
|
+
<p style="margin:0 0 4px;font-size:11px;letter-spacing:0.12em;text-transform:uppercase;color:#78716c">Audited · Form 10-Q excerpt</p>
|
|
3
|
+
<h1 style="color:#14532d;margin:0 0 4px;font-size:26px;font-weight:normal">Meridian Analytics, Inc.</h1>
|
|
4
|
+
<p style="color:#57534e;margin:0 0 16px;font-size:13px;border-bottom:2px solid #ca8a04;padding-bottom:8px">
|
|
5
|
+
Condensed Income Statement · Quarter ended March 31, 2026 · (USD, thousands)
|
|
6
|
+
</p>
|
|
7
|
+
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse:collapse;width:100%;font-size:13px">
|
|
8
|
+
<tr style="background:#14532d;color:#fef9c3">
|
|
9
|
+
<td><strong>Line item</strong></td>
|
|
10
|
+
<td style="text-align:right"><strong>Q1 2026</strong></td>
|
|
11
|
+
<td style="text-align:right"><strong>Q1 2025</strong></td>
|
|
12
|
+
<td style="text-align:right"><strong>YoY %</strong></td>
|
|
13
|
+
</tr>
|
|
14
|
+
<tr><td>Revenue</td><td style="text-align:right">$48,320</td><td style="text-align:right">$41,180</td><td style="text-align:right;color:#15803d">+17.3%</td></tr>
|
|
15
|
+
<tr><td>Cost of revenue</td><td style="text-align:right">($14,896)</td><td style="text-align:right">($13,574)</td><td style="text-align:right">+9.7%</td></tr>
|
|
16
|
+
<tr style="background:#ecfdf5"><td><strong>Gross profit</strong></td><td style="text-align:right"><strong>$33,424</strong></td><td style="text-align:right"><strong>$27,606</strong></td><td style="text-align:right"><strong>+21.1%</strong></td></tr>
|
|
17
|
+
<tr><td>Sales & marketing</td><td style="text-align:right">($9,664)</td><td style="text-align:right">($8,236)</td><td style="text-align:right">+17.3%</td></tr>
|
|
18
|
+
<tr><td>Research & development</td><td style="text-align:right">($7,248)</td><td style="text-align:right">($6,177)</td><td style="text-align:right">+17.3%</td></tr>
|
|
19
|
+
<tr><td>General & administrative</td><td style="text-align:right">($4,832)</td><td style="text-align:right">($4,118)</td><td style="text-align:right">+17.3%</td></tr>
|
|
20
|
+
<tr style="background:#ecfdf5"><td><strong>Operating income</strong></td><td style="text-align:right"><strong>$11,680</strong></td><td style="text-align:right"><strong>$9,075</strong></td><td style="text-align:right"><strong>+28.7%</strong></td></tr>
|
|
21
|
+
<tr><td>Interest & other</td><td style="text-align:right">($412)</td><td style="text-align:right">($388)</td><td style="text-align:right">+6.2%</td></tr>
|
|
22
|
+
<tr style="background:#fef9c3"><td><strong>Net income</strong></td><td style="text-align:right"><strong>$11,268</strong></td><td style="text-align:right"><strong>$8,687</strong></td><td style="text-align:right;color:#15803d"><strong>+29.7%</strong></td></tr>
|
|
23
|
+
</table>
|
|
24
|
+
<p style="font-size:11px;color:#78716c;margin-top:12px;font-style:italic">
|
|
25
|
+
Non-GAAP adjustments excluded. Prepared by Finance · <a href="#" style="color:#14532d">full 10-Q draft</a>.
|
|
26
|
+
</p>
|
|
27
|
+
</div>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<div><h1 style="color: rgb(29, 53, 87); font-size: 22px; margin: 0px 0px 4px;">Q3 Performance</h1><p style="color: rgb(91, 107, 124); font-size: 13px; margin: 0px 0px 16px;">July – September 2026 · company-wide metrics</p><div style="display: flex; gap: 16px; margin-bottom: 20px;"><div style="flex: 1 1 0%; background: rgb(240, 247, 255); border-left: 4px solid rgb(69, 123, 157); padding: 16px 18px;"><div style="color: rgb(91, 107, 124); font-size: 12px; font-weight: bold;">REVENUE</div><div style="color: rgb(29, 53, 87); font-size: 30px; font-weight: bold;">$2.4M</div><div style="color: rgb(42, 157, 143); font-size: 13px;">▲ 12% vs last quarter</div></div><div style="flex: 1 1 0%; background: rgb(240, 247, 255); border-left: 4px solid rgb(231, 111, 81); padding: 16px 18px;"><div style="color: rgb(91, 107, 124); font-size: 12px; font-weight: bold;">ACTIVE USERS</div><div style="color: rgb(29, 53, 87); font-size: 30px; font-weight: bold;">18,204</div><div style="color: rgb(230, 57, 70); font-size: 13px;">▼ 3% vs last quarter</div></div></div><h2 style="color: rgb(29, 53, 87); font-size: 15px; margin: 0px 0px 8px;">Revenue by channel</h2><table border="1" cellpadding="8" style="border-collapse: collapse; width: 100%; font-size: 13px;"><tbody><tr style="background: rgb(29, 53, 87); color: rgb(255, 255, 255);"><td><strong>Channel</strong></td><td style="text-align: right;"><strong>Q3</strong></td><td style="text-align: right;"><strong>Share</strong></td></tr><tr><td>Direct sales</td><td style="text-align: right;">$1.1M</td><td style="text-align: right;">46%</td></tr><tr><td>Self-serve</td><td style="text-align: right;">$820K</td><td style="text-align: right;">34%</td></tr><tr><td>Partners</td><td style="text-align: right;">$480K</td><td style="text-align: right;">20%</td></tr></tbody></table><p style="color: rgb(91, 107, 124); font-size: 12px; margin-top: 12px;">Note: user growth lagged plan in APAC; retention held steady at 91%.</p></div>
|
|
Binary file
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>React Dashboard (CDN, no build)</title>
|
|
6
|
+
<!-- CDN React + Babel: whole example lives in this one file, no build step. -->
|
|
7
|
+
<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
|
|
8
|
+
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
|
|
9
|
+
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
|
10
|
+
<style>
|
|
11
|
+
* { box-sizing: border-box; }
|
|
12
|
+
body {
|
|
13
|
+
margin: 0;
|
|
14
|
+
padding: 96px;
|
|
15
|
+
width: 816px;
|
|
16
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
line-height: 1.4;
|
|
19
|
+
color: #111;
|
|
20
|
+
background: #fff;
|
|
21
|
+
}
|
|
22
|
+
</style>
|
|
23
|
+
</head>
|
|
24
|
+
<body>
|
|
25
|
+
<div id="root"></div>
|
|
26
|
+
|
|
27
|
+
<script type="text/babel">
|
|
28
|
+
function StatCard({ label, value, delta, up, accent }) {
|
|
29
|
+
return (
|
|
30
|
+
<div style={{
|
|
31
|
+
flex: 1,
|
|
32
|
+
background: "#f0f7ff",
|
|
33
|
+
borderLeft: "4px solid " + accent,
|
|
34
|
+
padding: "16px 18px"
|
|
35
|
+
}}>
|
|
36
|
+
<div style={{ color: "#5b6b7c", fontSize: "12px", fontWeight: "bold" }}>
|
|
37
|
+
{label}
|
|
38
|
+
</div>
|
|
39
|
+
<div style={{ color: "#1d3557", fontSize: "30px", fontWeight: "bold" }}>
|
|
40
|
+
{value}
|
|
41
|
+
</div>
|
|
42
|
+
<div style={{ color: up ? "#2a9d8f" : "#e63946", fontSize: "13px" }}>
|
|
43
|
+
{(up ? "▲ " : "▼ ") + delta}
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function Dashboard() {
|
|
50
|
+
return (
|
|
51
|
+
<div>
|
|
52
|
+
<h1 style={{ color: "#1d3557", fontSize: "22px", margin: "0 0 4px" }}>Q3 Performance</h1>
|
|
53
|
+
<p style={{ color: "#5b6b7c", fontSize: "13px", margin: "0 0 16px" }}>
|
|
54
|
+
July – September 2026 · company-wide metrics
|
|
55
|
+
</p>
|
|
56
|
+
<div style={{ display: "flex", gap: "16px", marginBottom: "20px" }}>
|
|
57
|
+
<StatCard
|
|
58
|
+
label="REVENUE"
|
|
59
|
+
value="$2.4M"
|
|
60
|
+
delta="12% vs last quarter"
|
|
61
|
+
up
|
|
62
|
+
accent="#457b9d"
|
|
63
|
+
/>
|
|
64
|
+
<StatCard
|
|
65
|
+
label="ACTIVE USERS"
|
|
66
|
+
value="18,204"
|
|
67
|
+
delta="3% vs last quarter"
|
|
68
|
+
up={false}
|
|
69
|
+
accent="#e76f51"
|
|
70
|
+
/>
|
|
71
|
+
</div>
|
|
72
|
+
<h2 style={{ color: "#1d3557", fontSize: "15px", margin: "0 0 8px" }}>Revenue by channel</h2>
|
|
73
|
+
<table style={{ borderCollapse: "collapse", width: "100%", fontSize: "13px" }} border="1" cellPadding="8">
|
|
74
|
+
<tbody>
|
|
75
|
+
<tr style={{ background: "#1d3557", color: "#fff" }}>
|
|
76
|
+
<td><strong>Channel</strong></td>
|
|
77
|
+
<td style={{ textAlign: "right" }}><strong>Q3</strong></td>
|
|
78
|
+
<td style={{ textAlign: "right" }}><strong>Share</strong></td>
|
|
79
|
+
</tr>
|
|
80
|
+
<tr>
|
|
81
|
+
<td>Direct sales</td>
|
|
82
|
+
<td style={{ textAlign: "right" }}>$1.1M</td>
|
|
83
|
+
<td style={{ textAlign: "right" }}>46%</td>
|
|
84
|
+
</tr>
|
|
85
|
+
<tr>
|
|
86
|
+
<td>Self-serve</td>
|
|
87
|
+
<td style={{ textAlign: "right" }}>$820K</td>
|
|
88
|
+
<td style={{ textAlign: "right" }}>34%</td>
|
|
89
|
+
</tr>
|
|
90
|
+
<tr>
|
|
91
|
+
<td>Partners</td>
|
|
92
|
+
<td style={{ textAlign: "right" }}>$480K</td>
|
|
93
|
+
<td style={{ textAlign: "right" }}>20%</td>
|
|
94
|
+
</tr>
|
|
95
|
+
</tbody>
|
|
96
|
+
</table>
|
|
97
|
+
<p style={{ color: "#5b6b7c", fontSize: "12px", marginTop: "12px" }}>
|
|
98
|
+
Note: user growth lagged plan in APAC; retention held steady at 91%.
|
|
99
|
+
</p>
|
|
100
|
+
</div>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
ReactDOM.createRoot(document.getElementById("root")).render(<Dashboard />);
|
|
105
|
+
</script>
|
|
106
|
+
</body>
|
|
107
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
<style>
|
|
2
|
+
.dashboard { font-family: Arial, Helvetica, sans-serif; }
|
|
3
|
+
.header {
|
|
4
|
+
background: #115e59;
|
|
5
|
+
color: #ccfbf1;
|
|
6
|
+
padding: 16px 20px;
|
|
7
|
+
margin-bottom: 14px;
|
|
8
|
+
}
|
|
9
|
+
.header h1 {
|
|
10
|
+
margin: 0;
|
|
11
|
+
font-size: 22px;
|
|
12
|
+
color: #fff;
|
|
13
|
+
}
|
|
14
|
+
.header .subtitle {
|
|
15
|
+
margin: 6px 0 0;
|
|
16
|
+
font-size: 12px;
|
|
17
|
+
color: #99f6e4;
|
|
18
|
+
}
|
|
19
|
+
.legend { font-size: 12px; margin-bottom: 12px; }
|
|
20
|
+
.tag {
|
|
21
|
+
padding: 2px 8px;
|
|
22
|
+
}
|
|
23
|
+
.tag-above {
|
|
24
|
+
background: #d1fae5;
|
|
25
|
+
color: #065f46;
|
|
26
|
+
}
|
|
27
|
+
.tag-below {
|
|
28
|
+
background: #fce7f3;
|
|
29
|
+
color: #9d174d;
|
|
30
|
+
margin-left: 6px;
|
|
31
|
+
}
|
|
32
|
+
table.metrics {
|
|
33
|
+
border-collapse: collapse;
|
|
34
|
+
width: 100%;
|
|
35
|
+
font-size: 13px;
|
|
36
|
+
}
|
|
37
|
+
table.metrics td {
|
|
38
|
+
padding: 8px;
|
|
39
|
+
border: 1px solid #ccc;
|
|
40
|
+
}
|
|
41
|
+
table.metrics tr.head {
|
|
42
|
+
background: #581c87;
|
|
43
|
+
color: #f3e8ff;
|
|
44
|
+
}
|
|
45
|
+
table.metrics td.num {
|
|
46
|
+
text-align: right;
|
|
47
|
+
font-family: Consolas, monospace;
|
|
48
|
+
}
|
|
49
|
+
table.metrics tr.alt { background: #f0fdfa; }
|
|
50
|
+
table.metrics tr.total {
|
|
51
|
+
background: #115e59;
|
|
52
|
+
color: #fff;
|
|
53
|
+
}
|
|
54
|
+
.delta-up { color: #059669; }
|
|
55
|
+
.delta-down { color: #db2777; }
|
|
56
|
+
.pct-above { background: #d1fae5; color: #065f46; }
|
|
57
|
+
.pct-below { background: #fce7f3; color: #9d174d; }
|
|
58
|
+
h2.leaderboard {
|
|
59
|
+
font-size: 13px;
|
|
60
|
+
margin-top: 20px;
|
|
61
|
+
color: #581c87;
|
|
62
|
+
letter-spacing: 0.08em;
|
|
63
|
+
text-transform: uppercase;
|
|
64
|
+
}
|
|
65
|
+
ol.leaderboard { font-size: 14px; }
|
|
66
|
+
.mono { font-family: Consolas, monospace; }
|
|
67
|
+
.quota-good { color: #059669; }
|
|
68
|
+
.quota-warn { color: #d97706; }
|
|
69
|
+
</style>
|
|
70
|
+
<div class="dashboard">
|
|
71
|
+
<div class="header">
|
|
72
|
+
<h1>Regional Sales Dashboard</h1>
|
|
73
|
+
<p class="subtitle">March · USD millions</p>
|
|
74
|
+
</div>
|
|
75
|
+
<p class="legend">
|
|
76
|
+
<span class="tag tag-above">▲ Above plan</span>
|
|
77
|
+
<span class="tag tag-below">▼ Below plan</span>
|
|
78
|
+
</p>
|
|
79
|
+
<table class="metrics" border="1" cellpadding="8">
|
|
80
|
+
<tr class="head">
|
|
81
|
+
<td><strong>Region</strong></td>
|
|
82
|
+
<td class="num"><strong>Actual</strong></td>
|
|
83
|
+
<td class="num"><strong>Plan</strong></td>
|
|
84
|
+
<td class="num"><strong>Δ</strong></td>
|
|
85
|
+
<td class="num"><strong>% plan</strong></td>
|
|
86
|
+
</tr>
|
|
87
|
+
<tr>
|
|
88
|
+
<td>West</td>
|
|
89
|
+
<td class="num">$2.41</td>
|
|
90
|
+
<td class="num">$2.20</td>
|
|
91
|
+
<td class="num delta-up">+9.5%</td>
|
|
92
|
+
<td class="num"><span class="pct-above">110%</span></td>
|
|
93
|
+
</tr>
|
|
94
|
+
<tr class="alt">
|
|
95
|
+
<td>East</td>
|
|
96
|
+
<td class="num">$1.98</td>
|
|
97
|
+
<td class="num">$2.05</td>
|
|
98
|
+
<td class="num delta-down">-3.4%</td>
|
|
99
|
+
<td class="num"><span class="pct-below">97%</span></td>
|
|
100
|
+
</tr>
|
|
101
|
+
<tr>
|
|
102
|
+
<td>EMEA</td>
|
|
103
|
+
<td class="num">$1.62</td>
|
|
104
|
+
<td class="num">$1.50</td>
|
|
105
|
+
<td class="num delta-up">+8.0%</td>
|
|
106
|
+
<td class="num"><span class="pct-above">108%</span></td>
|
|
107
|
+
</tr>
|
|
108
|
+
<tr class="alt">
|
|
109
|
+
<td>APAC</td>
|
|
110
|
+
<td class="num">$1.15</td>
|
|
111
|
+
<td class="num">$1.20</td>
|
|
112
|
+
<td class="num delta-down">-4.2%</td>
|
|
113
|
+
<td class="num"><span class="pct-below">96%</span></td>
|
|
114
|
+
</tr>
|
|
115
|
+
<tr class="total">
|
|
116
|
+
<td><strong>Total</strong></td>
|
|
117
|
+
<td class="num"><strong>$7.16</strong></td>
|
|
118
|
+
<td class="num"><strong>$6.95</strong></td>
|
|
119
|
+
<td class="num"><strong>+3.0%</strong></td>
|
|
120
|
+
<td class="num"><strong>103%</strong></td>
|
|
121
|
+
</tr>
|
|
122
|
+
</table>
|
|
123
|
+
<h2 class="leaderboard">Rep leaderboard</h2>
|
|
124
|
+
<ol class="leaderboard">
|
|
125
|
+
<li><strong>A. Chen</strong> — <span class="mono">$840k</span> <span class="quota-good">(128% quota)</span></li>
|
|
126
|
+
<li><strong>M. Ortiz</strong> — <span class="mono">$790k</span> <span class="quota-good">(119% quota)</span></li>
|
|
127
|
+
<li><strong>S. Patel</strong> — <span class="mono">$755k</span> <span class="quota-warn">(104% quota)</span></li>
|
|
128
|
+
</ol>
|
|
129
|
+
</div>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<div style="font-family:Georgia,'Times New Roman',serif;color:#1c1917;padding:4px 0">
|
|
2
|
+
<p style="margin:0 0 6px;font-size:11px;letter-spacing:0.14em;text-transform:uppercase;color:#78716c;text-align:center">Master subscription agreement</p>
|
|
3
|
+
<h1 style="font-size:22px;text-align:center;margin:0 0 4px;font-weight:normal;color:#292524">Software Subscription Agreement</h1>
|
|
4
|
+
<p style="text-align:center;font-size:13px;color:#57534e;margin:0 0 20px;border-bottom:1px solid #d6d3d1;padding-bottom:14px">
|
|
5
|
+
Effective as of April 1 · Atlas CRM Enterprise
|
|
6
|
+
</p>
|
|
7
|
+
<p style="font-size:14px;line-height:1.55;margin-bottom:16px">
|
|
8
|
+
This Software Subscription Agreement ("Agreement") is entered into by and between
|
|
9
|
+
<strong>Meridian Analytics, Inc.</strong> ("Provider"), a Delaware corporation with offices at
|
|
10
|
+
1200 Market Street, San Francisco, CA, and <strong>Northwind Traders LLC</strong> ("Customer"),
|
|
11
|
+
with its principal place of business at 88 Harbor Way, Boston, MA.
|
|
12
|
+
</p>
|
|
13
|
+
<h2 style="font-size:15px;color:#44403c;margin:20px 0 8px;font-weight:bold">1. Subscription & access</h2>
|
|
14
|
+
<p style="font-size:14px;line-height:1.55;margin:0 0 12px">
|
|
15
|
+
Provider grants Customer a non-exclusive, non-transferable right to access the Atlas CRM platform
|
|
16
|
+
for up to <strong>250 named users</strong> during the Initial Term. Customer may not sublicense,
|
|
17
|
+
reverse engineer, or use the service to build a competing product.
|
|
18
|
+
</p>
|
|
19
|
+
<h2 style="font-size:15px;color:#44403c;margin:20px 0 8px;font-weight:bold">2. Fees & payment</h2>
|
|
20
|
+
<table border="1" cellpadding="8" style="border-collapse:collapse;width:100%;font-size:13px;margin-bottom:12px">
|
|
21
|
+
<tr style="background:#44403c;color:#fafaf9">
|
|
22
|
+
<td><strong>Item</strong></td>
|
|
23
|
+
<td style="text-align:right"><strong>Annual fee (USD)</strong></td>
|
|
24
|
+
</tr>
|
|
25
|
+
<tr><td>Atlas CRM Enterprise — 250 seats</td><td style="text-align:right">$186,000</td></tr>
|
|
26
|
+
<tr><td>Premium support (24×5)</td><td style="text-align:right">$24,000</td></tr>
|
|
27
|
+
<tr style="background:#f5f5f4"><td><strong>Total annual fee</strong></td><td style="text-align:right"><strong>$210,000</strong></td></tr>
|
|
28
|
+
</table>
|
|
29
|
+
<p style="font-size:14px;line-height:1.55;margin:0 0 12px">
|
|
30
|
+
Fees are invoiced annually in advance, due <strong>Net 30</strong>. Late payments accrue interest at
|
|
31
|
+
1.5% per month. Customer is responsible for applicable sales and use taxes.
|
|
32
|
+
</p>
|
|
33
|
+
<h2 style="font-size:15px;color:#44403c;margin:20px 0 8px;font-weight:bold">3. Term & termination</h2>
|
|
34
|
+
<p style="font-size:14px;line-height:1.55;margin:0 0 12px">
|
|
35
|
+
The Initial Term is <strong>twelve (12) months</strong>, auto-renewing for successive one-year periods
|
|
36
|
+
unless either party gives written notice at least <strong>sixty (60) days</strong> before renewal.
|
|
37
|
+
Either party may terminate for material breach uncured within thirty (30) days of notice.
|
|
38
|
+
</p>
|
|
39
|
+
<h2 style="font-size:15px;color:#44403c;margin:20px 0 8px;font-weight:bold">4. Confidentiality & data</h2>
|
|
40
|
+
<p style="font-size:14px;line-height:1.55;margin:0 0 12px">
|
|
41
|
+
Each party shall protect the other's Confidential Information with reasonable care. Provider processes
|
|
42
|
+
Customer data solely to deliver the service and maintains SOC 2 Type II controls. Upon termination,
|
|
43
|
+
Provider will delete Customer data within ninety (90) days unless retention is required by law.
|
|
44
|
+
</p>
|
|
45
|
+
<h2 style="font-size:15px;color:#44403c;margin:20px 0 8px;font-weight:bold">5. Limitation of liability</h2>
|
|
46
|
+
<p style="font-size:14px;line-height:1.55;margin:0 0 20px">
|
|
47
|
+
Except for breaches of confidentiality or indemnification obligations, neither party's aggregate
|
|
48
|
+
liability shall exceed fees paid in the <strong>twelve (12) months</strong> preceding the claim.
|
|
49
|
+
Neither party is liable for indirect, incidental, or consequential damages.
|
|
50
|
+
</p>
|
|
51
|
+
<table border="0" cellpadding="0" style="width:100%;margin-top:28px;font-size:13px">
|
|
52
|
+
<tr>
|
|
53
|
+
<td style="width:48%;vertical-align:top;padding-top:40px;border-top:1px solid #1c1917">
|
|
54
|
+
<p style="margin:0"><strong>Meridian Analytics, Inc.</strong></p>
|
|
55
|
+
<p style="margin:8px 0 0;color:#78716c">By: _________________________</p>
|
|
56
|
+
<p style="margin:4px 0 0;color:#78716c">Name: Jordan Lee, VP Sales</p>
|
|
57
|
+
<p style="margin:4px 0 0;color:#78716c">Date: _________________________</p>
|
|
58
|
+
</td>
|
|
59
|
+
<td style="width:4%"></td>
|
|
60
|
+
<td style="width:48%;vertical-align:top;padding-top:40px;border-top:1px solid #1c1917">
|
|
61
|
+
<p style="margin:0"><strong>Northwind Traders LLC</strong></p>
|
|
62
|
+
<p style="margin:8px 0 0;color:#78716c">By: _________________________</p>
|
|
63
|
+
<p style="margin:4px 0 0;color:#78716c">Name: _________________________</p>
|
|
64
|
+
<p style="margin:4px 0 0;color:#78716c">Date: _________________________</p>
|
|
65
|
+
</td>
|
|
66
|
+
</tr>
|
|
67
|
+
</table>
|
|
68
|
+
</div>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<div style="font-family:'Trebuchet MS',Arial,sans-serif">
|
|
2
|
+
<div style="background:#fef08a;padding:14px 18px;margin-bottom:16px;border:2px dashed #ca8a04">
|
|
3
|
+
<h1 style="margin:0;font-size:22px;color:#713f12">📋 Sprint 24 Retrospective</h1>
|
|
4
|
+
<p style="margin:6px 0 0;color:#854d0e;font-size:13px">Platform Team · Mar 3 – Mar 14 · Velocity: <strong>42 pts</strong></p>
|
|
5
|
+
</div>
|
|
6
|
+
<div style="background:#dcfce7;padding:12px 16px;margin-bottom:12px;border-left:5px solid #16a34a">
|
|
7
|
+
<h2 style="font-size:14px;margin:0 0 8px;color:#14532d">✓ What went well</h2>
|
|
8
|
+
<ul style="margin:0;padding-left:20px;color:#166534">
|
|
9
|
+
<li>Reduced P95 API latency by <strong>18%</strong></li>
|
|
10
|
+
<li>Zero sev-1 incidents during migration</li>
|
|
11
|
+
<li>Pairing sessions improved onboarding scores</li>
|
|
12
|
+
</ul>
|
|
13
|
+
</div>
|
|
14
|
+
<div style="background:#fee2e2;padding:12px 16px;margin-bottom:16px;border-left:5px solid #dc2626">
|
|
15
|
+
<h2 style="font-size:14px;margin:0 0 8px;color:#7f1d1d">△ What to improve</h2>
|
|
16
|
+
<ul style="margin:0;padding-left:20px;color:#991b1b">
|
|
17
|
+
<li>Flaky CI caused <strong>3 re-runs</strong> on main</li>
|
|
18
|
+
<li>Scope creep on billing webhook refactor</li>
|
|
19
|
+
</ul>
|
|
20
|
+
</div>
|
|
21
|
+
<h2 style="font-size:14px;color:#713f12;margin-bottom:8px">Action items</h2>
|
|
22
|
+
<table border="1" cellpadding="8" style="border-collapse:collapse;width:100%;border-color:#fde047">
|
|
23
|
+
<tr style="background:#713f12;color:#fef08a">
|
|
24
|
+
<td><strong>Action</strong></td>
|
|
25
|
+
<td><strong>Owner</strong></td>
|
|
26
|
+
<td><strong>Due</strong></td>
|
|
27
|
+
<td><strong>Status</strong></td>
|
|
28
|
+
</tr>
|
|
29
|
+
<tr>
|
|
30
|
+
<td>Quarantine flaky Playwright suite</td>
|
|
31
|
+
<td>R. Kim</td>
|
|
32
|
+
<td>Mar 21</td>
|
|
33
|
+
<td><span style="background:#bbf7d0;color:#14532d;padding:1px 6px">On track</span></td>
|
|
34
|
+
</tr>
|
|
35
|
+
<tr style="background:#fefce8">
|
|
36
|
+
<td>Define webhook MVP cut line</td>
|
|
37
|
+
<td>Patel / Lee</td>
|
|
38
|
+
<td>Mar 19</td>
|
|
39
|
+
<td><span style="background:#fde68a;color:#92400e;padding:1px 6px">At risk</span></td>
|
|
40
|
+
</tr>
|
|
41
|
+
<tr>
|
|
42
|
+
<td>Document on-call runbook v3</td>
|
|
43
|
+
<td>Ops</td>
|
|
44
|
+
<td>Mar 28</td>
|
|
45
|
+
<td><span style="background:#fecaca;color:#991b1b;padding:1px 6px">Blocked</span></td>
|
|
46
|
+
</tr>
|
|
47
|
+
</table>
|
|
48
|
+
<p style="font-size:12px;color:#854d0e;margin-top:14px">
|
|
49
|
+
Next retro: <strong>Mar 28, 2026</strong> · celebrate the latency win in all-hands 🎉
|
|
50
|
+
</p>
|
|
51
|
+
</div>
|
|
Binary file
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dom-docx",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Convert semantic HTML fragments to native, editable Word documents (OOXML)",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Blair Googer",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/dom-docx/dom-docx.git"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/dom-docx/dom-docx/issues"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/dom-docx/dom-docx#readme",
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"html",
|
|
20
|
+
"docx",
|
|
21
|
+
"word",
|
|
22
|
+
"ooxml",
|
|
23
|
+
"converter",
|
|
24
|
+
"document",
|
|
25
|
+
"cheerio",
|
|
26
|
+
"office"
|
|
27
|
+
],
|
|
28
|
+
"type": "module",
|
|
29
|
+
"sideEffects": false,
|
|
30
|
+
"main": "./dist/index.js",
|
|
31
|
+
"module": "./dist/index.js",
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"README.md",
|
|
36
|
+
"LICENSE",
|
|
37
|
+
"API.md",
|
|
38
|
+
"examples"
|
|
39
|
+
],
|
|
40
|
+
"exports": {
|
|
41
|
+
".": {
|
|
42
|
+
"types": "./dist/index.d.ts",
|
|
43
|
+
"node": "./dist/index.js",
|
|
44
|
+
"default": "./dist/index.js"
|
|
45
|
+
},
|
|
46
|
+
"./browser": {
|
|
47
|
+
"types": "./dist/browser.d.ts",
|
|
48
|
+
"browser": "./dist/browser/dom-docx.browser.js",
|
|
49
|
+
"default": "./dist/browser/dom-docx.browser.js"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"bin": {
|
|
53
|
+
"dom-docx": "dist/cli.js"
|
|
54
|
+
},
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json && cp src/converter/computed-style-snapshot.browser.js dist/converter/",
|
|
57
|
+
"build:all": "npm run build && npm run build:browser",
|
|
58
|
+
"prepack": "npm run build",
|
|
59
|
+
"build:browser": "node scripts/build-browser.mjs",
|
|
60
|
+
"test:suite": "tsx tools/validator.ts",
|
|
61
|
+
"test:suite:priority": "tsx tools/validator.ts --priority",
|
|
62
|
+
"test:suite:strict": "tsx tools/validator.ts --strict-visual",
|
|
63
|
+
"test:showcase": "tsx tools/showcase-runner.ts",
|
|
64
|
+
"test:benchmark": "tsx tools/benchmark-runner.ts all",
|
|
65
|
+
"test:inline-guard": "tsx tools/inline-path-guard.ts",
|
|
66
|
+
"test:config": "tsx tools/config-options-test.ts",
|
|
67
|
+
"label:renders": "tsx tools/label-renders.ts",
|
|
68
|
+
"test:calibration": "tsx tools/calibration-runner.ts",
|
|
69
|
+
"test:pack-smoke": "node scripts/pack-smoke.mjs",
|
|
70
|
+
"setup": "playwright install chromium",
|
|
71
|
+
"typecheck": "tsc --noEmit",
|
|
72
|
+
"test:wild": "tsx tools/wild-runner.ts",
|
|
73
|
+
"wild:corpus": "tsx tools/wild-corpus-build.ts",
|
|
74
|
+
"concordance": "tsx tools/concordance.ts"
|
|
75
|
+
},
|
|
76
|
+
"engines": {
|
|
77
|
+
"node": ">=20"
|
|
78
|
+
},
|
|
79
|
+
"dependencies": {
|
|
80
|
+
"cheerio": "^1.2.0",
|
|
81
|
+
"docx": "^9.5.0",
|
|
82
|
+
"fflate": "^0.8.3"
|
|
83
|
+
},
|
|
84
|
+
"devDependencies": {
|
|
85
|
+
"@turbodocx/html-to-docx": "^1.22.0",
|
|
86
|
+
"@types/node": "^22.15.0",
|
|
87
|
+
"@types/pixelmatch": "^5.2.6",
|
|
88
|
+
"@types/pngjs": "^6.0.5",
|
|
89
|
+
"@xarsh/ooxml-validator": "^0.1.10",
|
|
90
|
+
"esbuild": "^0.25.12",
|
|
91
|
+
"html-to-docx": "^1.8.0",
|
|
92
|
+
"pdf-to-img": "^6.2.0",
|
|
93
|
+
"pdfjs-dist": "~5.6.205",
|
|
94
|
+
"pixelmatch": "^7.1.0",
|
|
95
|
+
"playwright": "^1.52.0",
|
|
96
|
+
"pngjs": "^7.0.0",
|
|
97
|
+
"tsx": "^4.19.4",
|
|
98
|
+
"typescript": "^5.8.3"
|
|
99
|
+
},
|
|
100
|
+
"peerDependencies": {
|
|
101
|
+
"playwright": ">=1.40.0"
|
|
102
|
+
},
|
|
103
|
+
"peerDependenciesMeta": {
|
|
104
|
+
"playwright": {
|
|
105
|
+
"optional": true
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|