@squadbase/vantage 0.6.2-dev1.0017a4d → 0.6.2-dev1.02aab78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{build-X5NVCQKT.js → build-YOPOGPQB.js} +7 -7
- package/dist/{build-X5NVCQKT.js.map → build-YOPOGPQB.js.map} +1 -1
- package/dist/{check-ZBIH422T.js → check-FBHT6W6J.js} +5 -5
- package/dist/{check-ZBIH422T.js.map → check-FBHT6W6J.js.map} +1 -1
- package/dist/{chunk-7DZGJQ3P.js → chunk-5C2SEDPH.js} +21 -4
- package/dist/chunk-5C2SEDPH.js.map +1 -0
- package/dist/chunk-6OTTGAPO.js +44 -0
- package/dist/chunk-6OTTGAPO.js.map +1 -0
- package/dist/{chunk-2ICNHUG6.js → chunk-7652CGJJ.js} +10 -3
- package/dist/{chunk-2ICNHUG6.js.map → chunk-7652CGJJ.js.map} +1 -1
- package/dist/{chunk-RU6WKEOG.js → chunk-QOXXOFGL.js} +7 -4
- package/dist/chunk-QOXXOFGL.js.map +1 -0
- package/dist/{chunk-WAMZWZJB.js → chunk-R6MTJAHX.js} +6 -6
- package/dist/chunk-R6MTJAHX.js.map +1 -0
- package/dist/{chunk-CEXAQQ5W.js → chunk-S5MDTHH7.js} +180 -18
- package/dist/chunk-S5MDTHH7.js.map +1 -0
- package/dist/{chunk-JKLLFVEU.js → chunk-UWSQUHX6.js} +4 -99
- package/dist/chunk-UWSQUHX6.js.map +1 -0
- package/dist/cli.js +6 -6
- package/dist/components/index.d.ts +8 -4
- package/dist/components/index.js +1 -1
- package/dist/delta-text-CvwBGJ95.d.ts +15 -0
- package/dist/{dev-4XEDTELV.js → dev-GUKQT6U6.js} +7 -7
- package/dist/{dev-4XEDTELV.js.map → dev-GUKQT6U6.js.map} +1 -1
- package/dist/doc/index.d.ts +22 -1
- package/dist/doc/index.js +45 -72
- package/dist/doc/index.js.map +1 -1
- package/dist/{doctor-5E2VEZPK.js → doctor-B2O3GJDU.js} +5 -5
- package/dist/{doctor-5E2VEZPK.js.map → doctor-B2O3GJDU.js.map} +1 -1
- package/dist/{routes-3SGAFDMC.js → routes-PVKNT777.js} +4 -4
- package/dist/{routes-3SGAFDMC.js.map → routes-PVKNT777.js.map} +1 -1
- package/dist/slide/index.d.ts +96 -1
- package/dist/slide/index.js +414 -297
- package/dist/slide/index.js.map +1 -1
- package/dist/table/index.js +1 -1
- package/dist/{upgrade-JHXZBGQS.js → upgrade-7ZXMCTTR.js} +4 -4
- package/dist/{upgrade-JHXZBGQS.js.map → upgrade-7ZXMCTTR.js.map} +1 -1
- package/dist/vite/index.js +3 -3
- package/docs/en/changelog.md +2 -0
- package/docs/en/components.md +4 -2
- package/docs/en/doc/delta-text.md +40 -0
- package/docs/en/doc/doc-notes-and-sources.md +43 -0
- package/docs/en/pages-and-metadata.md +15 -0
- package/docs/en/parts/delta.md +4 -3
- package/docs/en/parts/kpi-card.md +2 -1
- package/docs/en/slide/slide-chart-full.md +48 -0
- package/docs/en/slide/slide-columns.md +46 -0
- package/docs/en/slide/slide-comparison.md +68 -0
- package/docs/en/slide/slide-heading.md +38 -0
- package/docs/en/slide/slide-section.md +44 -0
- package/docs/en/slide/slide-source-line.md +34 -0
- package/docs/index.json +208 -48
- package/docs/ja/changelog.md +2 -0
- package/docs/ja/components.md +4 -2
- package/docs/ja/doc/delta-text.md +40 -0
- package/docs/ja/doc/doc-notes-and-sources.md +43 -0
- package/docs/ja/page-types/slide.md +1 -0
- package/docs/ja/pages-and-metadata.md +15 -0
- package/docs/ja/parts/delta.md +5 -4
- package/docs/ja/parts/kpi-card.md +2 -1
- package/docs/ja/slide/slide-chart-full.md +48 -0
- package/docs/ja/slide/slide-columns.md +46 -0
- package/docs/ja/slide/slide-comparison.md +68 -0
- package/docs/ja/slide/slide-heading.md +38 -0
- package/docs/ja/slide/slide-section.md +44 -0
- package/docs/ja/slide/slide-source-line.md +34 -0
- package/package.json +2 -2
- package/registry/ui/delta.tsx +7 -4
- package/registry/ui/kpi-card.tsx +9 -4
- package/skills/vantage-pitfalls/SKILL.md +5 -0
- package/skills/vantage-slide/SKILL.md +2 -2
- package/templates/AGENTS.md +4 -2
- package/templates/agents/doc.md +3 -0
- package/templates/agents/slide.md +16 -1
- package/theme.css +7 -4
- package/dist/chunk-7DZGJQ3P.js.map +0 -1
- package/dist/chunk-CEXAQQ5W.js.map +0 -1
- package/dist/chunk-JKLLFVEU.js.map +0 -1
- package/dist/chunk-RU6WKEOG.js.map +0 -1
- package/dist/chunk-WAMZWZJB.js.map +0 -1
package/dist/slide/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { DeltaText } from '../chunk-6OTTGAPO.js';
|
|
2
|
+
export { DeltaText } from '../chunk-6OTTGAPO.js';
|
|
1
3
|
import { useSearchState } from '../chunk-ZO62C6T4.js';
|
|
2
4
|
import '../chunk-6S4BAIGV.js';
|
|
3
5
|
import { EChart } from '../chunk-JXFCSF3K.js';
|
|
@@ -226,8 +228,13 @@ async function exportDeckAsPptx({
|
|
|
226
228
|
background: "var(--slide-bg)",
|
|
227
229
|
color: "var(--slide-fg)",
|
|
228
230
|
fontFamily: "var(--slide-font-body)",
|
|
229
|
-
fontSize: "var(--slide-size-body)"
|
|
231
|
+
fontSize: "var(--slide-size-body)",
|
|
232
|
+
// Same phrase-aware line breaking as the on-screen canvas (see canvas.tsx).
|
|
233
|
+
wordBreak: "auto-phrase",
|
|
234
|
+
lineBreak: "strict",
|
|
235
|
+
overflowWrap: "break-word"
|
|
230
236
|
});
|
|
237
|
+
if (document.documentElement.lang) host.lang = document.documentElement.lang;
|
|
231
238
|
if (themeVars) {
|
|
232
239
|
for (const [key, value] of Object.entries(themeVars)) {
|
|
233
240
|
host.style.setProperty(key, String(value));
|
|
@@ -1636,16 +1643,32 @@ var SLIDE_SPEC = {
|
|
|
1636
1643
|
/** Gaps between elements, in canvas px. */
|
|
1637
1644
|
space: { sm: 32, md: 48, lg: 64 }
|
|
1638
1645
|
};
|
|
1639
|
-
|
|
1640
|
-
var MAX_INSIGHT_CHARS = 40;
|
|
1641
|
-
var LINE_TYPES = ["solid", "dashed", "dotted"];
|
|
1642
|
-
var SYMBOLS = ["circle", "rect", "triangle", "diamond"];
|
|
1643
|
-
function SlideHeading({ title }) {
|
|
1646
|
+
function SlideColumns({ children, align = "stretch" }) {
|
|
1644
1647
|
return /* @__PURE__ */ jsx(
|
|
1645
|
-
"
|
|
1648
|
+
"div",
|
|
1646
1649
|
{
|
|
1647
1650
|
style: {
|
|
1648
1651
|
gridColumn: "1 / -1",
|
|
1652
|
+
minHeight: 0,
|
|
1653
|
+
display: "grid",
|
|
1654
|
+
gridTemplateColumns: `repeat(${SLIDE_SPEC.grid.columns}, 1fr)`,
|
|
1655
|
+
gridTemplateRows: "minmax(0, 1fr)",
|
|
1656
|
+
columnGap: SLIDE_SPEC.grid.gutter,
|
|
1657
|
+
alignItems: align
|
|
1658
|
+
},
|
|
1659
|
+
children
|
|
1660
|
+
}
|
|
1661
|
+
);
|
|
1662
|
+
}
|
|
1663
|
+
function SlideColumn({ span, children }) {
|
|
1664
|
+
return /* @__PURE__ */ jsx("div", { style: { gridColumn: `span ${span}`, minWidth: 0, minHeight: 0 }, children });
|
|
1665
|
+
}
|
|
1666
|
+
function SlideHeading({ title, eyebrow }) {
|
|
1667
|
+
const heading = /* @__PURE__ */ jsx(
|
|
1668
|
+
"h2",
|
|
1669
|
+
{
|
|
1670
|
+
style: {
|
|
1671
|
+
...eyebrow ? {} : { gridColumn: "1 / -1" },
|
|
1649
1672
|
margin: 0,
|
|
1650
1673
|
fontFamily: "var(--slide-font-display)",
|
|
1651
1674
|
fontSize: SLIDE_SPEC.fontSize.page,
|
|
@@ -1659,8 +1682,27 @@ function SlideHeading({ title }) {
|
|
|
1659
1682
|
children: title
|
|
1660
1683
|
}
|
|
1661
1684
|
);
|
|
1685
|
+
if (!eyebrow) return heading;
|
|
1686
|
+
return /* @__PURE__ */ jsxs("div", { style: { gridColumn: "1 / -1", display: "flex", flexDirection: "column", gap: SLIDE_SPEC.space.sm }, children: [
|
|
1687
|
+
/* @__PURE__ */ jsx(
|
|
1688
|
+
"p",
|
|
1689
|
+
{
|
|
1690
|
+
style: {
|
|
1691
|
+
margin: 0,
|
|
1692
|
+
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
1693
|
+
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
1694
|
+
fontWeight: 700,
|
|
1695
|
+
color: "var(--slide-accent)"
|
|
1696
|
+
},
|
|
1697
|
+
children: eyebrow
|
|
1698
|
+
}
|
|
1699
|
+
),
|
|
1700
|
+
heading
|
|
1701
|
+
] });
|
|
1662
1702
|
}
|
|
1663
|
-
function SlideSourceLine({ asOf, source }) {
|
|
1703
|
+
function SlideSourceLine({ asOf, source, page }) {
|
|
1704
|
+
const text = [asOf ? `${asOf} \u6642\u70B9` : null, source ? `\u51FA\u5178: ${source}` : null].filter(Boolean).join(" / ");
|
|
1705
|
+
if (!text && !page) return null;
|
|
1664
1706
|
return /* @__PURE__ */ jsx(
|
|
1665
1707
|
"p",
|
|
1666
1708
|
{
|
|
@@ -1669,49 +1711,110 @@ function SlideSourceLine({ asOf, source }) {
|
|
|
1669
1711
|
margin: 0,
|
|
1670
1712
|
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
1671
1713
|
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
1672
|
-
color: "var(--slide-muted)"
|
|
1714
|
+
color: "var(--slide-muted)",
|
|
1715
|
+
...page ? { display: "flex", justifyContent: "space-between", gap: SLIDE_SPEC.space.md } : {}
|
|
1673
1716
|
},
|
|
1674
|
-
children:
|
|
1717
|
+
children: page ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1718
|
+
/* @__PURE__ */ jsx("span", { children: text }),
|
|
1719
|
+
/* @__PURE__ */ jsx("span", { style: { fontVariantNumeric: "tabular-nums" }, children: `${page.current} / ${page.total}` })
|
|
1720
|
+
] }) : text
|
|
1675
1721
|
}
|
|
1676
1722
|
);
|
|
1677
1723
|
}
|
|
1724
|
+
var MAX_INSIGHTS = 3;
|
|
1725
|
+
var MAX_INSIGHT_CHARS = 40;
|
|
1726
|
+
var LINE_TYPES = ["solid", "dashed", "dotted"];
|
|
1727
|
+
var SYMBOLS = ["circle", "rect", "triangle", "diamond"];
|
|
1728
|
+
function buildSlideChartOption(chart) {
|
|
1729
|
+
return {
|
|
1730
|
+
animation: false,
|
|
1731
|
+
textStyle: { fontSize: SLIDE_SPEC.fontSize.caption },
|
|
1732
|
+
grid: {
|
|
1733
|
+
left: 0,
|
|
1734
|
+
right: SLIDE_SPEC.space.sm,
|
|
1735
|
+
top: chart.series.length > 1 ? SLIDE_SPEC.space.lg : SLIDE_SPEC.space.sm,
|
|
1736
|
+
bottom: 0,
|
|
1737
|
+
containLabel: true
|
|
1738
|
+
},
|
|
1739
|
+
legend: chart.series.length > 1 ? {
|
|
1740
|
+
top: 0,
|
|
1741
|
+
left: 0,
|
|
1742
|
+
textStyle: { fontSize: SLIDE_SPEC.fontSize.caption }
|
|
1743
|
+
} : { show: false },
|
|
1744
|
+
// The first x label and the lowest y label meet at the corner: the margin keeps the x labels clear of the axis, and
|
|
1745
|
+
// `hideOverlap` drops whichever still collides.
|
|
1746
|
+
xAxis: {
|
|
1747
|
+
type: "category",
|
|
1748
|
+
data: chart.categories,
|
|
1749
|
+
// Half a category of room on both sides keeps the first point off the y-axis labels (a line from the axis touches them).
|
|
1750
|
+
boundaryGap: true,
|
|
1751
|
+
axisLabel: {
|
|
1752
|
+
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
1753
|
+
margin: SLIDE_SPEC.space.sm,
|
|
1754
|
+
hideOverlap: true
|
|
1755
|
+
}
|
|
1756
|
+
},
|
|
1757
|
+
yAxis: {
|
|
1758
|
+
type: "value",
|
|
1759
|
+
// A line from 0 hugs the top when the values sit in a narrow band; bars must keep their zero baseline.
|
|
1760
|
+
scale: chart.type !== "bar",
|
|
1761
|
+
axisLabel: {
|
|
1762
|
+
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
1763
|
+
hideOverlap: true,
|
|
1764
|
+
formatter: (v) => formatValue(v, "compact")
|
|
1765
|
+
}
|
|
1766
|
+
},
|
|
1767
|
+
...chart.type === "bar" && chart.series.length > 1 ? { aria: { enabled: true, decal: { show: true } } } : {},
|
|
1768
|
+
series: chart.series.map((s, i) => ({
|
|
1769
|
+
name: s.name,
|
|
1770
|
+
type: chart.type === "bar" ? "bar" : "line",
|
|
1771
|
+
data: s.data,
|
|
1772
|
+
...chart.type === "bar" ? {} : {
|
|
1773
|
+
symbol: SYMBOLS[i % SYMBOLS.length],
|
|
1774
|
+
symbolSize: SLIDE_SPEC.space.sm / 2,
|
|
1775
|
+
lineStyle: { width: 6, type: LINE_TYPES[i % LINE_TYPES.length] }
|
|
1776
|
+
},
|
|
1777
|
+
...chart.type === "area" ? { areaStyle: { opacity: 0.16 } } : {}
|
|
1778
|
+
}))
|
|
1779
|
+
};
|
|
1780
|
+
}
|
|
1678
1781
|
function SlideChartInsight({ title, chart, insights, chartSide = "left", asOf, source }) {
|
|
1679
1782
|
const hasSource = Boolean(asOf || source);
|
|
1680
1783
|
if (insights.some((t) => t.length > MAX_INSIGHT_CHARS)) console.warn(`SlideChartInsight: an insight is over ${MAX_INSIGHT_CHARS} characters; the column is narrow. Shorten it.`);
|
|
1681
1784
|
if (insights.length > MAX_INSIGHTS) console.warn(`SlideChartInsight: ${insights.length} insights; ${MAX_INSIGHTS} fit beside the chart. Split the slide.`);
|
|
1682
|
-
const option = useMemo(
|
|
1683
|
-
() => ({
|
|
1684
|
-
animation: false,
|
|
1685
|
-
textStyle: { fontSize: SLIDE_SPEC.fontSize.caption },
|
|
1686
|
-
grid: { left: 0, right: SLIDE_SPEC.space.sm, top: chart.series.length > 1 ? SLIDE_SPEC.space.lg : SLIDE_SPEC.space.sm, bottom: 0, containLabel: true },
|
|
1687
|
-
legend: chart.series.length > 1 ? { top: 0, left: 0, textStyle: { fontSize: SLIDE_SPEC.fontSize.caption } } : { show: false },
|
|
1688
|
-
// The first x label and the lowest y label meet at the corner: the margin keeps the x labels clear of the axis, and
|
|
1689
|
-
// `hideOverlap` drops whichever still collides.
|
|
1690
|
-
xAxis: {
|
|
1691
|
-
type: "category",
|
|
1692
|
-
data: chart.categories,
|
|
1693
|
-
// Half a category of room on both sides keeps the first point off the y-axis labels (a line from the axis touches them).
|
|
1694
|
-
boundaryGap: true,
|
|
1695
|
-
axisLabel: { fontSize: SLIDE_SPEC.fontSize.caption, margin: SLIDE_SPEC.space.sm, hideOverlap: true }
|
|
1696
|
-
},
|
|
1697
|
-
yAxis: {
|
|
1698
|
-
type: "value",
|
|
1699
|
-
// A line from 0 hugs the top when the values sit in a narrow band; bars must keep their zero baseline.
|
|
1700
|
-
scale: chart.type !== "bar",
|
|
1701
|
-
axisLabel: { fontSize: SLIDE_SPEC.fontSize.caption, hideOverlap: true, formatter: (v) => formatValue(v, "compact") }
|
|
1702
|
-
},
|
|
1703
|
-
...chart.type === "bar" && chart.series.length > 1 ? { aria: { enabled: true, decal: { show: true } } } : {},
|
|
1704
|
-
series: chart.series.map((s, i) => ({
|
|
1705
|
-
name: s.name,
|
|
1706
|
-
type: chart.type === "bar" ? "bar" : "line",
|
|
1707
|
-
data: s.data,
|
|
1708
|
-
...chart.type === "bar" ? {} : { symbol: SYMBOLS[i % SYMBOLS.length], symbolSize: SLIDE_SPEC.space.sm / 2, lineStyle: { width: 6, type: LINE_TYPES[i % LINE_TYPES.length] } },
|
|
1709
|
-
...chart.type === "area" ? { areaStyle: { opacity: 0.16 } } : {}
|
|
1710
|
-
}))
|
|
1711
|
-
}),
|
|
1712
|
-
[chart]
|
|
1713
|
-
);
|
|
1785
|
+
const option = useMemo(() => buildSlideChartOption(chart), [chart]);
|
|
1714
1786
|
const chartFirst = chartSide === "left";
|
|
1787
|
+
const chartColumn = /* @__PURE__ */ jsx(SlideColumn, { span: 7, children: /* @__PURE__ */ jsx("div", { "data-waitfor": "canvas", style: { minHeight: 0, height: "100%" }, children: /* @__PURE__ */ jsx(EChart, { option, height: "100%", ariaLabel: title }) }) });
|
|
1788
|
+
const insightsColumn = /* @__PURE__ */ jsx(SlideColumn, { span: 5, children: /* @__PURE__ */ jsx(
|
|
1789
|
+
"ul",
|
|
1790
|
+
{
|
|
1791
|
+
style: {
|
|
1792
|
+
height: "100%",
|
|
1793
|
+
boxSizing: "border-box",
|
|
1794
|
+
margin: 0,
|
|
1795
|
+
padding: 0,
|
|
1796
|
+
listStyle: "none",
|
|
1797
|
+
minHeight: 0,
|
|
1798
|
+
display: "flex",
|
|
1799
|
+
flexDirection: "column",
|
|
1800
|
+
justifyContent: "center",
|
|
1801
|
+
gap: SLIDE_SPEC.space.md
|
|
1802
|
+
},
|
|
1803
|
+
children: insights.map((text, i) => /* @__PURE__ */ jsx(
|
|
1804
|
+
"li",
|
|
1805
|
+
{
|
|
1806
|
+
style: {
|
|
1807
|
+
paddingLeft: SLIDE_SPEC.space.sm,
|
|
1808
|
+
borderLeft: "4px solid var(--slide-accent)",
|
|
1809
|
+
fontSize: "var(--slide-size-body)",
|
|
1810
|
+
lineHeight: SLIDE_SPEC.lineHeight.body
|
|
1811
|
+
},
|
|
1812
|
+
children: text
|
|
1813
|
+
},
|
|
1814
|
+
i
|
|
1815
|
+
))
|
|
1816
|
+
}
|
|
1817
|
+
) });
|
|
1715
1818
|
return /* @__PURE__ */ jsxs(
|
|
1716
1819
|
"section",
|
|
1717
1820
|
{
|
|
@@ -1731,37 +1834,10 @@ function SlideChartInsight({ title, chart, insights, chartSide = "left", asOf, s
|
|
|
1731
1834
|
},
|
|
1732
1835
|
children: [
|
|
1733
1836
|
/* @__PURE__ */ jsx(SlideHeading, { title }),
|
|
1734
|
-
/* @__PURE__ */
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
style: {
|
|
1739
|
-
gridColumn: chartFirst ? "8 / span 5" : "1 / span 5",
|
|
1740
|
-
gridRow: 2,
|
|
1741
|
-
margin: 0,
|
|
1742
|
-
padding: 0,
|
|
1743
|
-
listStyle: "none",
|
|
1744
|
-
minHeight: 0,
|
|
1745
|
-
display: "flex",
|
|
1746
|
-
flexDirection: "column",
|
|
1747
|
-
justifyContent: "center",
|
|
1748
|
-
gap: SLIDE_SPEC.space.md
|
|
1749
|
-
},
|
|
1750
|
-
children: insights.map((text, i) => /* @__PURE__ */ jsx(
|
|
1751
|
-
"li",
|
|
1752
|
-
{
|
|
1753
|
-
style: {
|
|
1754
|
-
paddingLeft: SLIDE_SPEC.space.sm,
|
|
1755
|
-
borderLeft: "4px solid var(--slide-accent)",
|
|
1756
|
-
fontSize: "var(--slide-size-body)",
|
|
1757
|
-
lineHeight: SLIDE_SPEC.lineHeight.body
|
|
1758
|
-
},
|
|
1759
|
-
children: text
|
|
1760
|
-
},
|
|
1761
|
-
i
|
|
1762
|
-
))
|
|
1763
|
-
}
|
|
1764
|
-
),
|
|
1837
|
+
/* @__PURE__ */ jsxs(SlideColumns, { children: [
|
|
1838
|
+
chartFirst ? chartColumn : insightsColumn,
|
|
1839
|
+
chartFirst ? insightsColumn : chartColumn
|
|
1840
|
+
] }),
|
|
1765
1841
|
hasSource && /* @__PURE__ */ jsx(SlideSourceLine, { asOf, source })
|
|
1766
1842
|
]
|
|
1767
1843
|
}
|
|
@@ -1791,11 +1867,12 @@ function SlideCover({ title, subtitle, period, author, asOf, source }) {
|
|
|
1791
1867
|
fontFamily: "var(--slide-font-body)"
|
|
1792
1868
|
},
|
|
1793
1869
|
children: [
|
|
1794
|
-
/* @__PURE__ */ jsxs(
|
|
1870
|
+
/* @__PURE__ */ jsx(SlideColumns, { children: /* @__PURE__ */ jsx(SlideColumn, { span: 8, children: /* @__PURE__ */ jsxs(
|
|
1795
1871
|
"div",
|
|
1796
1872
|
{
|
|
1797
1873
|
style: {
|
|
1798
|
-
|
|
1874
|
+
height: "100%",
|
|
1875
|
+
boxSizing: "border-box",
|
|
1799
1876
|
display: "flex",
|
|
1800
1877
|
flexDirection: "column",
|
|
1801
1878
|
justifyContent: "center",
|
|
@@ -1821,7 +1898,7 @@ function SlideCover({ title, subtitle, period, author, asOf, source }) {
|
|
|
1821
1898
|
subtitle && /* @__PURE__ */ jsx("p", { style: { margin: 0, fontSize: "var(--slide-size-body)", lineHeight: SLIDE_SPEC.lineHeight.body, color: "var(--slide-muted)" }, children: subtitle })
|
|
1822
1899
|
]
|
|
1823
1900
|
}
|
|
1824
|
-
),
|
|
1901
|
+
) }) }),
|
|
1825
1902
|
meta.length > 0 && /* @__PURE__ */ jsx(
|
|
1826
1903
|
"p",
|
|
1827
1904
|
{
|
|
@@ -1840,41 +1917,6 @@ function SlideCover({ title, subtitle, period, author, asOf, source }) {
|
|
|
1840
1917
|
);
|
|
1841
1918
|
}
|
|
1842
1919
|
var MAX_POINTS = 5;
|
|
1843
|
-
function SlideHeading2({ title }) {
|
|
1844
|
-
return /* @__PURE__ */ jsx(
|
|
1845
|
-
"h2",
|
|
1846
|
-
{
|
|
1847
|
-
style: {
|
|
1848
|
-
gridColumn: "1 / -1",
|
|
1849
|
-
margin: 0,
|
|
1850
|
-
fontFamily: "var(--slide-font-display)",
|
|
1851
|
-
fontSize: SLIDE_SPEC.fontSize.page,
|
|
1852
|
-
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
1853
|
-
fontWeight: 700,
|
|
1854
|
-
display: "-webkit-box",
|
|
1855
|
-
WebkitBoxOrient: "vertical",
|
|
1856
|
-
WebkitLineClamp: 2,
|
|
1857
|
-
overflow: "hidden"
|
|
1858
|
-
},
|
|
1859
|
-
children: title
|
|
1860
|
-
}
|
|
1861
|
-
);
|
|
1862
|
-
}
|
|
1863
|
-
function SlideSourceLine2({ asOf, source }) {
|
|
1864
|
-
return /* @__PURE__ */ jsx(
|
|
1865
|
-
"p",
|
|
1866
|
-
{
|
|
1867
|
-
style: {
|
|
1868
|
-
gridColumn: "1 / -1",
|
|
1869
|
-
margin: 0,
|
|
1870
|
-
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
1871
|
-
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
1872
|
-
color: "var(--slide-muted)"
|
|
1873
|
-
},
|
|
1874
|
-
children: [asOf ? `${asOf} \u6642\u70B9` : null, source ? `\u51FA\u5178: ${source}` : null].filter(Boolean).join(" / ")
|
|
1875
|
-
}
|
|
1876
|
-
);
|
|
1877
|
-
}
|
|
1878
1920
|
function SlideExecSummary({ title, points, layout = "rows", asOf, source }) {
|
|
1879
1921
|
const hasSource = Boolean(asOf || source);
|
|
1880
1922
|
if (points.length > MAX_POINTS) console.warn(`SlideExecSummary: ${points.length} points; ${MAX_POINTS} fit the canvas. Split the slide.`);
|
|
@@ -1897,7 +1939,7 @@ function SlideExecSummary({ title, points, layout = "rows", asOf, source }) {
|
|
|
1897
1939
|
fontFamily: "var(--slide-font-body)"
|
|
1898
1940
|
},
|
|
1899
1941
|
children: [
|
|
1900
|
-
/* @__PURE__ */ jsx(
|
|
1942
|
+
/* @__PURE__ */ jsx(SlideHeading, { title }),
|
|
1901
1943
|
layout === "columns" ? /* @__PURE__ */ jsx(
|
|
1902
1944
|
"ol",
|
|
1903
1945
|
{
|
|
@@ -1965,47 +2007,12 @@ function SlideExecSummary({ title, points, layout = "rows", asOf, source }) {
|
|
|
1965
2007
|
))
|
|
1966
2008
|
}
|
|
1967
2009
|
),
|
|
1968
|
-
hasSource && /* @__PURE__ */ jsx(
|
|
2010
|
+
hasSource && /* @__PURE__ */ jsx(SlideSourceLine, { asOf, source })
|
|
1969
2011
|
]
|
|
1970
2012
|
}
|
|
1971
2013
|
);
|
|
1972
2014
|
}
|
|
1973
2015
|
var MAX_ITEMS = 4;
|
|
1974
|
-
function SlideHeading3({ title }) {
|
|
1975
|
-
return /* @__PURE__ */ jsx(
|
|
1976
|
-
"h2",
|
|
1977
|
-
{
|
|
1978
|
-
style: {
|
|
1979
|
-
gridColumn: "1 / -1",
|
|
1980
|
-
margin: 0,
|
|
1981
|
-
fontFamily: "var(--slide-font-display)",
|
|
1982
|
-
fontSize: SLIDE_SPEC.fontSize.page,
|
|
1983
|
-
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
1984
|
-
fontWeight: 700,
|
|
1985
|
-
display: "-webkit-box",
|
|
1986
|
-
WebkitBoxOrient: "vertical",
|
|
1987
|
-
WebkitLineClamp: 2,
|
|
1988
|
-
overflow: "hidden"
|
|
1989
|
-
},
|
|
1990
|
-
children: title
|
|
1991
|
-
}
|
|
1992
|
-
);
|
|
1993
|
-
}
|
|
1994
|
-
function SlideSourceLine3({ asOf, source }) {
|
|
1995
|
-
return /* @__PURE__ */ jsx(
|
|
1996
|
-
"p",
|
|
1997
|
-
{
|
|
1998
|
-
style: {
|
|
1999
|
-
gridColumn: "1 / -1",
|
|
2000
|
-
margin: 0,
|
|
2001
|
-
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
2002
|
-
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
2003
|
-
color: "var(--slide-muted)"
|
|
2004
|
-
},
|
|
2005
|
-
children: [asOf ? `${asOf} \u6642\u70B9` : null, source ? `\u51FA\u5178: ${source}` : null].filter(Boolean).join(" / ")
|
|
2006
|
-
}
|
|
2007
|
-
);
|
|
2008
|
-
}
|
|
2009
2016
|
var ARROW = { up: "\u25B2", down: "\u25BC", flat: "\u25AC" };
|
|
2010
2017
|
var WORD = { up: "\u5897", down: "\u6E1B", flat: "\u6A2A\u3070\u3044" };
|
|
2011
2018
|
function deltaView(delta, betterWhen) {
|
|
@@ -2042,7 +2049,7 @@ function SlideKpiGrid({ title, items, asOf, source }) {
|
|
|
2042
2049
|
fontFamily: "var(--slide-font-body)"
|
|
2043
2050
|
},
|
|
2044
2051
|
children: [
|
|
2045
|
-
/* @__PURE__ */ jsx(
|
|
2052
|
+
/* @__PURE__ */ jsx(SlideHeading, { title }),
|
|
2046
2053
|
/* @__PURE__ */ jsx(
|
|
2047
2054
|
"div",
|
|
2048
2055
|
{
|
|
@@ -2100,46 +2107,11 @@ function SlideKpiGrid({ title, items, asOf, source }) {
|
|
|
2100
2107
|
})
|
|
2101
2108
|
}
|
|
2102
2109
|
),
|
|
2103
|
-
hasSource && /* @__PURE__ */ jsx(
|
|
2110
|
+
hasSource && /* @__PURE__ */ jsx(SlideSourceLine, { asOf, source })
|
|
2104
2111
|
]
|
|
2105
2112
|
}
|
|
2106
2113
|
);
|
|
2107
2114
|
}
|
|
2108
|
-
function SlideHeading4({ title }) {
|
|
2109
|
-
return /* @__PURE__ */ jsx(
|
|
2110
|
-
"h2",
|
|
2111
|
-
{
|
|
2112
|
-
style: {
|
|
2113
|
-
gridColumn: "1 / -1",
|
|
2114
|
-
margin: 0,
|
|
2115
|
-
fontFamily: "var(--slide-font-display)",
|
|
2116
|
-
fontSize: SLIDE_SPEC.fontSize.page,
|
|
2117
|
-
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
2118
|
-
fontWeight: 700,
|
|
2119
|
-
display: "-webkit-box",
|
|
2120
|
-
WebkitBoxOrient: "vertical",
|
|
2121
|
-
WebkitLineClamp: 2,
|
|
2122
|
-
overflow: "hidden"
|
|
2123
|
-
},
|
|
2124
|
-
children: title
|
|
2125
|
-
}
|
|
2126
|
-
);
|
|
2127
|
-
}
|
|
2128
|
-
function SlideSourceLine4({ asOf, source }) {
|
|
2129
|
-
return /* @__PURE__ */ jsx(
|
|
2130
|
-
"p",
|
|
2131
|
-
{
|
|
2132
|
-
style: {
|
|
2133
|
-
gridColumn: "1 / -1",
|
|
2134
|
-
margin: 0,
|
|
2135
|
-
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
2136
|
-
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
2137
|
-
color: "var(--slide-muted)"
|
|
2138
|
-
},
|
|
2139
|
-
children: [asOf ? `${asOf} \u6642\u70B9` : null, source ? `\u51FA\u5178: ${source}` : null].filter(Boolean).join(" / ")
|
|
2140
|
-
}
|
|
2141
|
-
);
|
|
2142
|
-
}
|
|
2143
2115
|
var ARROW2 = { up: "\u25B2", down: "\u25BC", flat: "\u25AC" };
|
|
2144
2116
|
var WORD2 = { up: "\u5897", down: "\u6E1B", flat: "\u6A2A\u3070\u3044" };
|
|
2145
2117
|
function deltaView2(delta, betterWhen) {
|
|
@@ -2200,84 +2172,51 @@ function SlideKpiHero({ title, label, value, format, display, delta, betterWhen
|
|
|
2200
2172
|
fontFamily: "var(--slide-font-body)"
|
|
2201
2173
|
},
|
|
2202
2174
|
children: [
|
|
2203
|
-
/* @__PURE__ */ jsx(
|
|
2204
|
-
/* @__PURE__ */ jsxs(
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
deltaShown && /* @__PURE__ */
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2175
|
+
/* @__PURE__ */ jsx(SlideHeading, { title }),
|
|
2176
|
+
/* @__PURE__ */ jsxs(SlideColumns, { children: [
|
|
2177
|
+
/* @__PURE__ */ jsx(SlideColumn, { span: option ? 6 : 12, children: /* @__PURE__ */ jsxs(
|
|
2178
|
+
"div",
|
|
2179
|
+
{
|
|
2180
|
+
style: {
|
|
2181
|
+
height: "100%",
|
|
2182
|
+
boxSizing: "border-box",
|
|
2183
|
+
display: "flex",
|
|
2184
|
+
flexDirection: "column",
|
|
2185
|
+
justifyContent: "center",
|
|
2186
|
+
gap: SLIDE_SPEC.space.sm
|
|
2187
|
+
},
|
|
2188
|
+
children: [
|
|
2189
|
+
/* @__PURE__ */ jsx("span", { style: { fontSize: "var(--slide-size-body)", lineHeight: SLIDE_SPEC.lineHeight.heading, color: "var(--slide-muted)" }, children: label }),
|
|
2190
|
+
/* @__PURE__ */ jsx(
|
|
2191
|
+
"span",
|
|
2192
|
+
{
|
|
2193
|
+
"data-raw": value ?? void 0,
|
|
2194
|
+
style: {
|
|
2195
|
+
fontFamily: "var(--slide-font-display)",
|
|
2196
|
+
fontSize: "var(--slide-size-hero)",
|
|
2197
|
+
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
2198
|
+
fontWeight: 700,
|
|
2199
|
+
fontVariantNumeric: "tabular-nums"
|
|
2200
|
+
},
|
|
2201
|
+
children: display ?? formatValue(value, format)
|
|
2202
|
+
}
|
|
2203
|
+
),
|
|
2204
|
+
(deltaShown || comparisonLabel) && /* @__PURE__ */ jsxs("span", { style: { display: "flex", flexWrap: "wrap", alignItems: "baseline", gap: SLIDE_SPEC.space.sm, fontSize: "var(--slide-size-body)", lineHeight: SLIDE_SPEC.lineHeight.heading }, children: [
|
|
2205
|
+
deltaShown && /* @__PURE__ */ jsx("span", { style: { color: deltaShown.color, fontWeight: 700 }, children: deltaShown.text }),
|
|
2206
|
+
comparisonLabel && /* @__PURE__ */ jsx("span", { style: { fontSize: SLIDE_SPEC.fontSize.caption, color: "var(--slide-muted)" }, children: comparisonLabel })
|
|
2207
|
+
] })
|
|
2208
|
+
]
|
|
2209
|
+
}
|
|
2210
|
+
) }),
|
|
2211
|
+
option && /* @__PURE__ */ jsx(SlideColumn, { span: 6, children: /* @__PURE__ */ jsx("div", { "data-waitfor": "canvas", style: { minHeight: 0, height: "100%" }, children: /* @__PURE__ */ jsx(EChart, { option, height: "100%", ariaLabel: `${label}\u306E\u63A8\u79FB` }) }) })
|
|
2212
|
+
] }),
|
|
2213
|
+
hasSource && /* @__PURE__ */ jsx(SlideSourceLine, { asOf, source })
|
|
2240
2214
|
]
|
|
2241
2215
|
}
|
|
2242
2216
|
);
|
|
2243
2217
|
}
|
|
2244
2218
|
var MAX_ITEMS2 = 5;
|
|
2245
2219
|
var MAX_DUE_CHARS = 10;
|
|
2246
|
-
function SlideHeading5({ title }) {
|
|
2247
|
-
return /* @__PURE__ */ jsx(
|
|
2248
|
-
"h2",
|
|
2249
|
-
{
|
|
2250
|
-
style: {
|
|
2251
|
-
gridColumn: "1 / -1",
|
|
2252
|
-
margin: 0,
|
|
2253
|
-
fontFamily: "var(--slide-font-display)",
|
|
2254
|
-
fontSize: SLIDE_SPEC.fontSize.page,
|
|
2255
|
-
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
2256
|
-
fontWeight: 700,
|
|
2257
|
-
display: "-webkit-box",
|
|
2258
|
-
WebkitBoxOrient: "vertical",
|
|
2259
|
-
WebkitLineClamp: 2,
|
|
2260
|
-
overflow: "hidden"
|
|
2261
|
-
},
|
|
2262
|
-
children: title
|
|
2263
|
-
}
|
|
2264
|
-
);
|
|
2265
|
-
}
|
|
2266
|
-
function SlideSourceLine5({ asOf, source }) {
|
|
2267
|
-
return /* @__PURE__ */ jsx(
|
|
2268
|
-
"p",
|
|
2269
|
-
{
|
|
2270
|
-
style: {
|
|
2271
|
-
gridColumn: "1 / -1",
|
|
2272
|
-
margin: 0,
|
|
2273
|
-
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
2274
|
-
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
2275
|
-
color: "var(--slide-muted)"
|
|
2276
|
-
},
|
|
2277
|
-
children: [asOf ? `${asOf} \u6642\u70B9` : null, source ? `\u51FA\u5178: ${source}` : null].filter(Boolean).join(" / ")
|
|
2278
|
-
}
|
|
2279
|
-
);
|
|
2280
|
-
}
|
|
2281
2220
|
function SlideNextActions({ title, items, asOf, source }) {
|
|
2282
2221
|
const hasSource = Boolean(asOf || source);
|
|
2283
2222
|
if (items.length > MAX_ITEMS2) console.warn(`SlideNextActions: ${items.length} items; ${MAX_ITEMS2} fit the canvas. Split the slide.`);
|
|
@@ -2308,7 +2247,7 @@ function SlideNextActions({ title, items, asOf, source }) {
|
|
|
2308
2247
|
fontFamily: "var(--slide-font-body)"
|
|
2309
2248
|
},
|
|
2310
2249
|
children: [
|
|
2311
|
-
/* @__PURE__ */ jsx(
|
|
2250
|
+
/* @__PURE__ */ jsx(SlideHeading, { title }),
|
|
2312
2251
|
/* @__PURE__ */ jsxs("div", { style: { gridColumn: "1 / -1", minHeight: 0, display: "flex", flexDirection: "column", justifyContent: "center" }, children: [
|
|
2313
2252
|
shown.length > 0 && /* @__PURE__ */ jsxs(
|
|
2314
2253
|
"div",
|
|
@@ -2354,48 +2293,13 @@ function SlideNextActions({ title, items, asOf, source }) {
|
|
|
2354
2293
|
i
|
|
2355
2294
|
)) })
|
|
2356
2295
|
] }),
|
|
2357
|
-
hasSource && /* @__PURE__ */ jsx(
|
|
2296
|
+
hasSource && /* @__PURE__ */ jsx(SlideSourceLine, { asOf, source })
|
|
2358
2297
|
]
|
|
2359
2298
|
}
|
|
2360
2299
|
);
|
|
2361
2300
|
}
|
|
2362
2301
|
var MAX_ROWS = 8;
|
|
2363
2302
|
var DENSE_ROWS = 6;
|
|
2364
|
-
function SlideHeading6({ title }) {
|
|
2365
|
-
return /* @__PURE__ */ jsx(
|
|
2366
|
-
"h2",
|
|
2367
|
-
{
|
|
2368
|
-
style: {
|
|
2369
|
-
gridColumn: "1 / -1",
|
|
2370
|
-
margin: 0,
|
|
2371
|
-
fontFamily: "var(--slide-font-display)",
|
|
2372
|
-
fontSize: SLIDE_SPEC.fontSize.page,
|
|
2373
|
-
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
2374
|
-
fontWeight: 700,
|
|
2375
|
-
display: "-webkit-box",
|
|
2376
|
-
WebkitBoxOrient: "vertical",
|
|
2377
|
-
WebkitLineClamp: 2,
|
|
2378
|
-
overflow: "hidden"
|
|
2379
|
-
},
|
|
2380
|
-
children: title
|
|
2381
|
-
}
|
|
2382
|
-
);
|
|
2383
|
-
}
|
|
2384
|
-
function SlideSourceLine6({ asOf, source }) {
|
|
2385
|
-
return /* @__PURE__ */ jsx(
|
|
2386
|
-
"p",
|
|
2387
|
-
{
|
|
2388
|
-
style: {
|
|
2389
|
-
gridColumn: "1 / -1",
|
|
2390
|
-
margin: 0,
|
|
2391
|
-
fontSize: SLIDE_SPEC.fontSize.caption,
|
|
2392
|
-
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
2393
|
-
color: "var(--slide-muted)"
|
|
2394
|
-
},
|
|
2395
|
-
children: [asOf ? `${asOf} \u6642\u70B9` : null, source ? `\u51FA\u5178: ${source}` : null].filter(Boolean).join(" / ")
|
|
2396
|
-
}
|
|
2397
|
-
);
|
|
2398
|
-
}
|
|
2399
2303
|
var STATUS = {
|
|
2400
2304
|
on: { label: "\u9806\u8ABF", color: "var(--positive)" },
|
|
2401
2305
|
risk: { label: "\u8981\u6CE8\u610F", color: "var(--warning)" },
|
|
@@ -2438,7 +2342,7 @@ function SlideScorecardTable({ title, rows, columns, asOf, source }) {
|
|
|
2438
2342
|
fontFamily: "var(--slide-font-body)"
|
|
2439
2343
|
},
|
|
2440
2344
|
children: [
|
|
2441
|
-
/* @__PURE__ */ jsx(
|
|
2345
|
+
/* @__PURE__ */ jsx(SlideHeading, { title }),
|
|
2442
2346
|
/* @__PURE__ */ jsx("div", { style: { gridColumn: "1 / -1", minHeight: 0 }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", fontSize: cellSize, lineHeight: SLIDE_SPEC.lineHeight.body }, children: [
|
|
2443
2347
|
/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: { color: "var(--slide-muted)", fontSize: SLIDE_SPEC.fontSize.caption }, children: [
|
|
2444
2348
|
/* @__PURE__ */ jsx("th", { style: { ...cell, fontWeight: 700 }, children: head.metric }),
|
|
@@ -2459,12 +2363,225 @@ function SlideScorecardTable({ title, rows, columns, asOf, source }) {
|
|
|
2459
2363
|
] })
|
|
2460
2364
|
] }, i)) })
|
|
2461
2365
|
] }) }),
|
|
2462
|
-
hasSource && /* @__PURE__ */ jsx(
|
|
2366
|
+
hasSource && /* @__PURE__ */ jsx(SlideSourceLine, { asOf, source })
|
|
2367
|
+
]
|
|
2368
|
+
}
|
|
2369
|
+
);
|
|
2370
|
+
}
|
|
2371
|
+
function SlideChartFull({ title, chart, note, asOf, source }) {
|
|
2372
|
+
const hasSource = Boolean(asOf || source);
|
|
2373
|
+
const option = useMemo(() => buildSlideChartOption(chart), [chart]);
|
|
2374
|
+
return /* @__PURE__ */ jsxs(
|
|
2375
|
+
"section",
|
|
2376
|
+
{
|
|
2377
|
+
"data-slot": "slide-chart-full",
|
|
2378
|
+
style: {
|
|
2379
|
+
width: "100%",
|
|
2380
|
+
height: "100%",
|
|
2381
|
+
boxSizing: "border-box",
|
|
2382
|
+
display: "grid",
|
|
2383
|
+
gridTemplateColumns: `repeat(${SLIDE_SPEC.grid.columns}, 1fr)`,
|
|
2384
|
+
gridTemplateRows: ["auto", "1fr", note ? "auto" : null, hasSource ? "auto" : null].filter(Boolean).join(" "),
|
|
2385
|
+
columnGap: SLIDE_SPEC.grid.gutter,
|
|
2386
|
+
rowGap: SLIDE_SPEC.space.lg,
|
|
2387
|
+
padding: `${SLIDE_SPEC.safeArea.y}px ${SLIDE_SPEC.safeArea.x}px`,
|
|
2388
|
+
color: "var(--slide-fg)",
|
|
2389
|
+
fontFamily: "var(--slide-font-body)"
|
|
2390
|
+
},
|
|
2391
|
+
children: [
|
|
2392
|
+
/* @__PURE__ */ jsx(SlideHeading, { title }),
|
|
2393
|
+
/* @__PURE__ */ jsx(SlideColumns, { children: /* @__PURE__ */ jsx(SlideColumn, { span: 12, children: /* @__PURE__ */ jsx("div", { "data-waitfor": "canvas", style: { minHeight: 0, height: "100%" }, children: /* @__PURE__ */ jsx(EChart, { option, height: "100%", ariaLabel: title }) }) }) }),
|
|
2394
|
+
note && /* @__PURE__ */ jsx("p", { style: { gridColumn: "1 / -1", margin: 0, fontSize: "var(--slide-size-body)", lineHeight: SLIDE_SPEC.lineHeight.body }, children: note }),
|
|
2395
|
+
hasSource && /* @__PURE__ */ jsx(SlideSourceLine, { asOf, source })
|
|
2396
|
+
]
|
|
2397
|
+
}
|
|
2398
|
+
);
|
|
2399
|
+
}
|
|
2400
|
+
var MAX_POINTS2 = 3;
|
|
2401
|
+
var MAX_POINT_CHARS = 24;
|
|
2402
|
+
function SlideComparison({ title, columns, verdict, asOf, source }) {
|
|
2403
|
+
const hasSource = Boolean(asOf || source);
|
|
2404
|
+
if (columns.length < 2 || columns.length > 3) console.warn(`SlideComparison: ${columns.length} columns; 2\u20133 fit. Split the slide.`);
|
|
2405
|
+
if (columns.some((c) => c.points.length > MAX_POINTS2 || c.points.some((t) => t.length > MAX_POINT_CHARS)))
|
|
2406
|
+
console.warn(`SlideComparison: a column has over ${MAX_POINTS2} points or a point over ${MAX_POINT_CHARS} characters. Shorten it.`);
|
|
2407
|
+
const span = Math.floor(SLIDE_SPEC.grid.columns / Math.max(columns.length, 1));
|
|
2408
|
+
return /* @__PURE__ */ jsxs(
|
|
2409
|
+
"section",
|
|
2410
|
+
{
|
|
2411
|
+
"data-slot": "slide-comparison",
|
|
2412
|
+
style: {
|
|
2413
|
+
width: "100%",
|
|
2414
|
+
height: "100%",
|
|
2415
|
+
boxSizing: "border-box",
|
|
2416
|
+
display: "grid",
|
|
2417
|
+
gridTemplateColumns: `repeat(${SLIDE_SPEC.grid.columns}, 1fr)`,
|
|
2418
|
+
gridTemplateRows: ["auto", "1fr", verdict ? "auto" : null, hasSource ? "auto" : null].filter(Boolean).join(" "),
|
|
2419
|
+
columnGap: SLIDE_SPEC.grid.gutter,
|
|
2420
|
+
rowGap: SLIDE_SPEC.space.lg,
|
|
2421
|
+
padding: `${SLIDE_SPEC.safeArea.y}px ${SLIDE_SPEC.safeArea.x}px`,
|
|
2422
|
+
color: "var(--slide-fg)",
|
|
2423
|
+
fontFamily: "var(--slide-font-body)"
|
|
2424
|
+
},
|
|
2425
|
+
children: [
|
|
2426
|
+
/* @__PURE__ */ jsx(SlideHeading, { title }),
|
|
2427
|
+
/* @__PURE__ */ jsx(SlideColumns, { children: columns.map((col, i) => {
|
|
2428
|
+
const main = col.display ?? (col.value === void 0 ? void 0 : col.value === null ? "\u2014" : formatValue(col.value, col.format));
|
|
2429
|
+
return /* @__PURE__ */ jsx(SlideColumn, { span, children: /* @__PURE__ */ jsxs(
|
|
2430
|
+
"div",
|
|
2431
|
+
{
|
|
2432
|
+
style: {
|
|
2433
|
+
height: "100%",
|
|
2434
|
+
boxSizing: "border-box",
|
|
2435
|
+
display: "flex",
|
|
2436
|
+
flexDirection: "column",
|
|
2437
|
+
gap: SLIDE_SPEC.space.md,
|
|
2438
|
+
paddingTop: SLIDE_SPEC.space.sm,
|
|
2439
|
+
borderTop: "4px solid var(--slide-accent)"
|
|
2440
|
+
},
|
|
2441
|
+
children: [
|
|
2442
|
+
/* @__PURE__ */ jsx(
|
|
2443
|
+
"h3",
|
|
2444
|
+
{
|
|
2445
|
+
style: {
|
|
2446
|
+
margin: 0,
|
|
2447
|
+
fontSize: "var(--slide-size-body)",
|
|
2448
|
+
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
2449
|
+
fontWeight: 700
|
|
2450
|
+
},
|
|
2451
|
+
children: col.heading
|
|
2452
|
+
}
|
|
2453
|
+
),
|
|
2454
|
+
main !== void 0 && /* @__PURE__ */ jsxs("p", { style: { margin: 0, display: "flex", flexDirection: "column", gap: SLIDE_SPEC.space.sm }, children: [
|
|
2455
|
+
/* @__PURE__ */ jsx(
|
|
2456
|
+
"span",
|
|
2457
|
+
{
|
|
2458
|
+
style: {
|
|
2459
|
+
fontFamily: "var(--slide-font-display)",
|
|
2460
|
+
fontSize: SLIDE_SPEC.fontSize.section,
|
|
2461
|
+
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
2462
|
+
fontWeight: 700,
|
|
2463
|
+
fontVariantNumeric: "tabular-nums"
|
|
2464
|
+
},
|
|
2465
|
+
children: main
|
|
2466
|
+
}
|
|
2467
|
+
),
|
|
2468
|
+
col.delta && /* @__PURE__ */ jsx("span", { style: { fontSize: "var(--slide-size-body)", lineHeight: SLIDE_SPEC.lineHeight.body }, children: /* @__PURE__ */ jsx(DeltaText, { value: col.delta.value, format: col.delta.format ?? col.format, betterWhen: col.betterWhen, comparisonLabel: col.comparisonLabel }) })
|
|
2469
|
+
] }),
|
|
2470
|
+
col.points.length > 0 && /* @__PURE__ */ jsx(
|
|
2471
|
+
"ul",
|
|
2472
|
+
{
|
|
2473
|
+
style: {
|
|
2474
|
+
margin: 0,
|
|
2475
|
+
padding: 0,
|
|
2476
|
+
listStyle: "none",
|
|
2477
|
+
display: "flex",
|
|
2478
|
+
flexDirection: "column",
|
|
2479
|
+
gap: SLIDE_SPEC.space.sm
|
|
2480
|
+
},
|
|
2481
|
+
children: col.points.map((text, j) => /* @__PURE__ */ jsx("li", { style: { fontSize: "var(--slide-size-body)", lineHeight: SLIDE_SPEC.lineHeight.body }, children: text }, j))
|
|
2482
|
+
}
|
|
2483
|
+
)
|
|
2484
|
+
]
|
|
2485
|
+
}
|
|
2486
|
+
) }, i);
|
|
2487
|
+
}) }),
|
|
2488
|
+
verdict && /* @__PURE__ */ jsx(
|
|
2489
|
+
"p",
|
|
2490
|
+
{
|
|
2491
|
+
style: {
|
|
2492
|
+
gridColumn: "1 / -1",
|
|
2493
|
+
margin: 0,
|
|
2494
|
+
paddingLeft: SLIDE_SPEC.space.sm,
|
|
2495
|
+
borderLeft: "4px solid var(--slide-accent)",
|
|
2496
|
+
fontSize: "var(--slide-size-body)",
|
|
2497
|
+
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
2498
|
+
fontWeight: 700
|
|
2499
|
+
},
|
|
2500
|
+
children: verdict
|
|
2501
|
+
}
|
|
2502
|
+
),
|
|
2503
|
+
hasSource && /* @__PURE__ */ jsx(SlideSourceLine, { asOf, source })
|
|
2463
2504
|
]
|
|
2464
2505
|
}
|
|
2465
2506
|
);
|
|
2466
2507
|
}
|
|
2508
|
+
function SlideSection({ index, title, lead, items, current }) {
|
|
2509
|
+
const hasItems = Boolean(items && items.length > 0);
|
|
2510
|
+
return /* @__PURE__ */ jsx(
|
|
2511
|
+
"section",
|
|
2512
|
+
{
|
|
2513
|
+
"data-slot": "slide-section",
|
|
2514
|
+
style: {
|
|
2515
|
+
width: "100%",
|
|
2516
|
+
height: "100%",
|
|
2517
|
+
boxSizing: "border-box",
|
|
2518
|
+
display: "grid",
|
|
2519
|
+
gridTemplateColumns: `repeat(${SLIDE_SPEC.grid.columns}, 1fr)`,
|
|
2520
|
+
gridTemplateRows: "minmax(0, 1fr)",
|
|
2521
|
+
columnGap: SLIDE_SPEC.grid.gutter,
|
|
2522
|
+
padding: `${SLIDE_SPEC.safeArea.y}px ${SLIDE_SPEC.safeArea.x}px`,
|
|
2523
|
+
color: "var(--slide-fg)",
|
|
2524
|
+
fontFamily: "var(--slide-font-body)"
|
|
2525
|
+
},
|
|
2526
|
+
children: /* @__PURE__ */ jsxs(SlideColumns, { align: "center", children: [
|
|
2527
|
+
/* @__PURE__ */ jsx(SlideColumn, { span: hasItems ? 7 : 12, children: /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: SLIDE_SPEC.space.md }, children: [
|
|
2528
|
+
/* @__PURE__ */ jsx("div", { style: { width: SLIDE_SPEC.grid.columnWidth, height: 8, background: "var(--slide-accent)" } }),
|
|
2529
|
+
index !== void 0 && /* @__PURE__ */ jsx(
|
|
2530
|
+
"p",
|
|
2531
|
+
{
|
|
2532
|
+
style: {
|
|
2533
|
+
margin: 0,
|
|
2534
|
+
fontSize: SLIDE_SPEC.fontSize.page,
|
|
2535
|
+
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
2536
|
+
fontWeight: 700,
|
|
2537
|
+
color: "var(--slide-accent)",
|
|
2538
|
+
fontVariantNumeric: "tabular-nums"
|
|
2539
|
+
},
|
|
2540
|
+
children: String(index).padStart(2, "0")
|
|
2541
|
+
}
|
|
2542
|
+
),
|
|
2543
|
+
/* @__PURE__ */ jsx(
|
|
2544
|
+
"h1",
|
|
2545
|
+
{
|
|
2546
|
+
style: {
|
|
2547
|
+
margin: 0,
|
|
2548
|
+
fontFamily: "var(--slide-font-display)",
|
|
2549
|
+
fontSize: SLIDE_SPEC.fontSize.section,
|
|
2550
|
+
lineHeight: SLIDE_SPEC.lineHeight.heading,
|
|
2551
|
+
fontWeight: 700
|
|
2552
|
+
},
|
|
2553
|
+
children: title
|
|
2554
|
+
}
|
|
2555
|
+
),
|
|
2556
|
+
lead && /* @__PURE__ */ jsx("p", { style: { margin: 0, fontSize: "var(--slide-size-body)", lineHeight: SLIDE_SPEC.lineHeight.body, color: "var(--slide-muted)" }, children: lead })
|
|
2557
|
+
] }) }),
|
|
2558
|
+
hasItems && /* @__PURE__ */ jsx(SlideColumn, { span: 5, children: /* @__PURE__ */ jsx("ol", { style: { margin: 0, padding: 0, listStyle: "none", display: "flex", flexDirection: "column", gap: SLIDE_SPEC.space.sm }, children: items.map((text, i) => {
|
|
2559
|
+
const active = current === i + 1;
|
|
2560
|
+
return /* @__PURE__ */ jsxs(
|
|
2561
|
+
"li",
|
|
2562
|
+
{
|
|
2563
|
+
"aria-current": active ? "step" : void 0,
|
|
2564
|
+
style: {
|
|
2565
|
+
display: "flex",
|
|
2566
|
+
gap: SLIDE_SPEC.space.sm,
|
|
2567
|
+
fontSize: "var(--slide-size-body)",
|
|
2568
|
+
lineHeight: SLIDE_SPEC.lineHeight.body,
|
|
2569
|
+
fontWeight: active ? 700 : 400,
|
|
2570
|
+
color: active ? "var(--slide-accent)" : "var(--slide-muted)"
|
|
2571
|
+
},
|
|
2572
|
+
children: [
|
|
2573
|
+
/* @__PURE__ */ jsx("span", { style: { fontVariantNumeric: "tabular-nums" }, children: String(i + 1).padStart(2, "0") }),
|
|
2574
|
+
/* @__PURE__ */ jsx("span", { children: text })
|
|
2575
|
+
]
|
|
2576
|
+
},
|
|
2577
|
+
i
|
|
2578
|
+
);
|
|
2579
|
+
}) }) })
|
|
2580
|
+
] })
|
|
2581
|
+
}
|
|
2582
|
+
);
|
|
2583
|
+
}
|
|
2467
2584
|
|
|
2468
|
-
export { CANVAS_HEIGHT, CANVAS_WIDTH, MorphElement, Slide, SlideCanvas, SlideChartInsight, SlideCover, SlideDeck, SlideExecSummary, SlideKpiGrid, SlideKpiHero, SlideNextActions, SlideScorecardTable, Step, Steps, exportDeckAsPptx, useIsActiveSlide, useSlideNumber };
|
|
2585
|
+
export { CANVAS_HEIGHT, CANVAS_WIDTH, MorphElement, Slide, SlideCanvas, SlideChartFull, SlideChartInsight, SlideColumn, SlideColumns, SlideComparison, SlideCover, SlideDeck, SlideExecSummary, SlideHeading, SlideKpiGrid, SlideKpiHero, SlideNextActions, SlideScorecardTable, SlideSection, SlideSourceLine, Step, Steps, exportDeckAsPptx, useIsActiveSlide, useSlideNumber };
|
|
2469
2586
|
//# sourceMappingURL=index.js.map
|
|
2470
2587
|
//# sourceMappingURL=index.js.map
|