pptx-react-viewer 4.73.1 → 4.74.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/CHANGELOG.md +6 -0
- package/dist/{chunk-YLJSLYQS.js → chunk-D4WC35PL.js} +113 -163
- package/dist/chunk-D4WC35PL.js.br +0 -0
- package/dist/chunk-D4WC35PL.js.gz +0 -0
- package/dist/{chunk-BGWFZCRX.mjs → chunk-SQ7OASDY.mjs} +115 -166
- package/dist/chunk-SQ7OASDY.mjs.br +0 -0
- package/dist/chunk-SQ7OASDY.mjs.gz +0 -0
- package/dist/index.d.ts +25 -2
- package/dist/index.js +25 -21
- package/dist/index.js.br +0 -0
- package/dist/index.js.gz +0 -0
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.br +0 -0
- package/dist/index.mjs.gz +0 -0
- package/dist/pptx-viewer.css +1 -1
- package/dist/pptx-viewer.css.br +0 -0
- package/dist/pptx-viewer.css.gz +0 -0
- package/dist/viewer/index.js +5 -5
- package/dist/viewer/index.js.br +0 -0
- package/dist/viewer/index.js.gz +0 -0
- package/dist/viewer/index.mjs +1 -1
- package/dist/viewer/index.mjs.br +0 -0
- package/dist/viewer/index.mjs.gz +0 -0
- package/package.json +2 -2
- package/dist/chunk-BGWFZCRX.mjs.br +0 -0
- package/dist/chunk-BGWFZCRX.mjs.gz +0 -0
- package/dist/chunk-YLJSLYQS.js.br +0 -0
- package/dist/chunk-YLJSLYQS.js.gz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ A release listed with no entries carried no Conventional Commit in this package'
|
|
|
7
7
|
scope: scripts/release-plan.mjs releases whenever any published file changes, not only on
|
|
8
8
|
conventional commits.
|
|
9
9
|
|
|
10
|
+
## [4.74.0](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.74.0) - 2026-11-11
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **pptx:** Export a slide thumbnail building block in every binding ([#242](https://github.com/ChristopherVR/ooxml/issues/242)) ([f717202](https://github.com/ChristopherVR/ooxml/commit/f717202d7af2cbb01b65cf2d02f598bff1dbb492))
|
|
15
|
+
|
|
10
16
|
## [4.73.1](https://github.com/ChristopherVR/ooxml/releases/tag/pptx-react-viewer@4.73.1) - 2026-11-09
|
|
11
17
|
|
|
12
18
|
### Dependencies
|
|
@@ -36,6 +36,113 @@ function useThemeStyle(theme) {
|
|
|
36
36
|
return vars;
|
|
37
37
|
}, [theme]);
|
|
38
38
|
}
|
|
39
|
+
function getReactSlideBackgroundStyle(slide, slideSize) {
|
|
40
|
+
const style = pptx.getSlideBackgroundStyle(slide, slideSize);
|
|
41
|
+
return {
|
|
42
|
+
backgroundColor: style["background-color"],
|
|
43
|
+
backgroundImage: slide?.backgroundImage ? void 0 : style["background-image"],
|
|
44
|
+
backgroundSize: style["background-size"],
|
|
45
|
+
backgroundRepeat: style["background-repeat"]
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function SlideThumbnailImpl({
|
|
49
|
+
slide,
|
|
50
|
+
templateElements,
|
|
51
|
+
canvasSize,
|
|
52
|
+
previewWidth,
|
|
53
|
+
fieldContext,
|
|
54
|
+
tableStyleContext
|
|
55
|
+
}) {
|
|
56
|
+
const safeCanvasWidth = Math.max(canvasSize.width, 1);
|
|
57
|
+
const safeCanvasHeight = Math.max(canvasSize.height, 1);
|
|
58
|
+
const layout = pptx.slideThumbnailLayout(
|
|
59
|
+
safeCanvasWidth,
|
|
60
|
+
safeCanvasHeight,
|
|
61
|
+
previewWidth ?? chunkP2COO2QO_js.SLIDE_NAV_THUMBNAIL_WIDTH
|
|
62
|
+
);
|
|
63
|
+
const { height: previewHeight, scale } = layout;
|
|
64
|
+
const previewElements = pptx.buildPreviewElements(slide, templateElements);
|
|
65
|
+
const slideFieldContext = pptx.deriveSlideFieldContext(fieldContext, slide);
|
|
66
|
+
const { t } = chunkP2COO2QO_js.useTranslation();
|
|
67
|
+
const transitionBadge = pptx.slideThumbnailTransitionBadge(slide, t);
|
|
68
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
69
|
+
"div",
|
|
70
|
+
{
|
|
71
|
+
className: previewWidth === void 0 ? "relative w-full overflow-hidden rounded border border-border bg-white" : "relative w-full overflow-hidden bg-white",
|
|
72
|
+
style: {
|
|
73
|
+
height: previewHeight,
|
|
74
|
+
...getReactSlideBackgroundStyle(slide, {
|
|
75
|
+
widthPx: safeCanvasWidth,
|
|
76
|
+
heightPx: safeCanvasHeight
|
|
77
|
+
})
|
|
78
|
+
},
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
className: "absolute top-0 left-0 origin-top-left",
|
|
84
|
+
style: {
|
|
85
|
+
width: safeCanvasWidth,
|
|
86
|
+
height: safeCanvasHeight,
|
|
87
|
+
transform: `scale(${scale})`,
|
|
88
|
+
transformOrigin: "top left",
|
|
89
|
+
...pptx.deviceStrokeStageStyle(scale)
|
|
90
|
+
},
|
|
91
|
+
children: [
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.SlideBackgroundImageLayer, { slide }),
|
|
93
|
+
previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
94
|
+
chunkXG4WSJ4O_js.StaticElementRenderer,
|
|
95
|
+
{
|
|
96
|
+
element,
|
|
97
|
+
activeSlide: slide,
|
|
98
|
+
allSlides: [slide],
|
|
99
|
+
zIndex: index,
|
|
100
|
+
fieldContext: slideFieldContext,
|
|
101
|
+
tableStyleContext
|
|
102
|
+
},
|
|
103
|
+
element.id
|
|
104
|
+
))
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
),
|
|
108
|
+
transitionBadge && /* @__PURE__ */ jsxRuntime.jsx(
|
|
109
|
+
"div",
|
|
110
|
+
{
|
|
111
|
+
"data-pptx-thumbnail-transition": "",
|
|
112
|
+
title: transitionBadge.title,
|
|
113
|
+
style: pptx.slideThumbnailTransitionBadgeStyle(layout),
|
|
114
|
+
children: transitionBadge.label
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
function slideThumbnailPropsEqual(prev, next) {
|
|
122
|
+
if (prev.previewWidth !== next.previewWidth) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
if (prev.slide !== next.slide) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
if (prev.templateElements !== next.templateElements) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
if (prev.fieldContext !== next.fieldContext) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
if (prev.tableStyleContext !== next.tableStyleContext) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
if (prev.canvasSize.width !== next.canvasSize.width || prev.canvasSize.height !== next.canvasSize.height) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
var SlideThumbnail = /* @__PURE__ */ React108__default.default.memo(
|
|
143
|
+
SlideThumbnailImpl,
|
|
144
|
+
slideThumbnailPropsEqual
|
|
145
|
+
);
|
|
39
146
|
function getInitials(name) {
|
|
40
147
|
const parts = name.trim().split(/\s+/u);
|
|
41
148
|
if (parts.length >= 2) {
|
|
@@ -525,134 +632,6 @@ function SlideContextMenu({
|
|
|
525
632
|
}
|
|
526
633
|
);
|
|
527
634
|
}
|
|
528
|
-
function getReactSlideBackgroundStyle(slide, slideSize) {
|
|
529
|
-
const style = pptx.getSlideBackgroundStyle(slide, slideSize);
|
|
530
|
-
return {
|
|
531
|
-
backgroundColor: style["background-color"],
|
|
532
|
-
backgroundImage: slide?.backgroundImage ? void 0 : style["background-image"],
|
|
533
|
-
backgroundSize: style["background-size"],
|
|
534
|
-
backgroundRepeat: style["background-repeat"]
|
|
535
|
-
};
|
|
536
|
-
}
|
|
537
|
-
function SlideThumbnailImpl({
|
|
538
|
-
slide,
|
|
539
|
-
templateElements,
|
|
540
|
-
canvasSize,
|
|
541
|
-
previewWidth,
|
|
542
|
-
fieldContext,
|
|
543
|
-
tableStyleContext
|
|
544
|
-
}) {
|
|
545
|
-
const safeCanvasWidth = Math.max(canvasSize.width, 1);
|
|
546
|
-
const safeCanvasHeight = Math.max(canvasSize.height, 1);
|
|
547
|
-
const width = previewWidth ?? chunkP2COO2QO_js.SLIDE_NAV_THUMBNAIL_WIDTH;
|
|
548
|
-
const scale = width / safeCanvasWidth;
|
|
549
|
-
const previewHeight = pptx.editorThumbnailHeight(safeCanvasWidth, safeCanvasHeight, width);
|
|
550
|
-
const previewElements = pptx.buildPreviewElements(slide, templateElements);
|
|
551
|
-
const slideFieldContext = pptx.deriveSlideFieldContext(fieldContext, slide);
|
|
552
|
-
const { t } = chunkP2COO2QO_js.useTranslation();
|
|
553
|
-
const transitionLabel = slide.transition ? (() => {
|
|
554
|
-
const opt = chunkP2COO2QO_js.SLIDE_TRANSITION_OPTIONS.find((o) => o.value === slide.transition?.type);
|
|
555
|
-
return opt ? t(opt.i18nKey) : slide.transition.type;
|
|
556
|
-
})() : void 0;
|
|
557
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
558
|
-
"div",
|
|
559
|
-
{
|
|
560
|
-
className: previewWidth === void 0 ? "relative w-full overflow-hidden rounded border border-border bg-white" : "relative w-full overflow-hidden bg-white",
|
|
561
|
-
style: {
|
|
562
|
-
height: previewHeight,
|
|
563
|
-
...getReactSlideBackgroundStyle(slide, {
|
|
564
|
-
widthPx: safeCanvasWidth,
|
|
565
|
-
heightPx: safeCanvasHeight
|
|
566
|
-
})
|
|
567
|
-
},
|
|
568
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
569
|
-
"div",
|
|
570
|
-
{
|
|
571
|
-
className: "absolute top-0 left-0 origin-top-left",
|
|
572
|
-
style: {
|
|
573
|
-
width: safeCanvasWidth,
|
|
574
|
-
height: safeCanvasHeight,
|
|
575
|
-
transform: `scale(${scale})`,
|
|
576
|
-
transformOrigin: "top left",
|
|
577
|
-
...pptx.deviceStrokeStageStyle(scale)
|
|
578
|
-
},
|
|
579
|
-
children: [
|
|
580
|
-
/* @__PURE__ */ jsxRuntime.jsx(chunkXG4WSJ4O_js.SlideBackgroundImageLayer, { slide }),
|
|
581
|
-
slide.transition && slide.transition.type !== "none" && slide.transition.type !== "cut" && /* @__PURE__ */ jsxRuntime.jsx(
|
|
582
|
-
"div",
|
|
583
|
-
{
|
|
584
|
-
className: "absolute top-0.5 right-0.5 z-10 px-1 py-px rounded bg-primary/80 text-[7px] text-white leading-tight pointer-events-none",
|
|
585
|
-
title: t("pptx.slideThumbnail.transitionTooltip", { name: transitionLabel }),
|
|
586
|
-
children: transitionLabel
|
|
587
|
-
}
|
|
588
|
-
),
|
|
589
|
-
previewElements.map((element, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
590
|
-
chunkXG4WSJ4O_js.StaticElementRenderer,
|
|
591
|
-
{
|
|
592
|
-
element,
|
|
593
|
-
activeSlide: slide,
|
|
594
|
-
allSlides: [slide],
|
|
595
|
-
zIndex: index,
|
|
596
|
-
fieldContext: slideFieldContext,
|
|
597
|
-
tableStyleContext
|
|
598
|
-
},
|
|
599
|
-
element.id
|
|
600
|
-
))
|
|
601
|
-
]
|
|
602
|
-
}
|
|
603
|
-
)
|
|
604
|
-
}
|
|
605
|
-
);
|
|
606
|
-
}
|
|
607
|
-
function slideThumbnailPropsEqual(prev, next) {
|
|
608
|
-
if (prev.previewWidth !== next.previewWidth) {
|
|
609
|
-
return false;
|
|
610
|
-
}
|
|
611
|
-
if (prev.slide.id !== next.slide.id) {
|
|
612
|
-
return false;
|
|
613
|
-
}
|
|
614
|
-
if (prev.slide.isDirty !== next.slide.isDirty) {
|
|
615
|
-
return false;
|
|
616
|
-
}
|
|
617
|
-
if (prev.slide.hidden !== next.slide.hidden) {
|
|
618
|
-
return false;
|
|
619
|
-
}
|
|
620
|
-
if (prev.slide.elements !== next.slide.elements) {
|
|
621
|
-
return false;
|
|
622
|
-
}
|
|
623
|
-
if (prev.slide.showMasterShapes !== next.slide.showMasterShapes) {
|
|
624
|
-
return false;
|
|
625
|
-
}
|
|
626
|
-
if (prev.slide.backgroundColor !== next.slide.backgroundColor) {
|
|
627
|
-
return false;
|
|
628
|
-
}
|
|
629
|
-
if (prev.slide.backgroundImage !== next.slide.backgroundImage) {
|
|
630
|
-
return false;
|
|
631
|
-
}
|
|
632
|
-
if (prev.slide.backgroundGradient !== next.slide.backgroundGradient) {
|
|
633
|
-
return false;
|
|
634
|
-
}
|
|
635
|
-
if (prev.slide.backgroundPattern !== next.slide.backgroundPattern) {
|
|
636
|
-
return false;
|
|
637
|
-
}
|
|
638
|
-
if (prev.templateElements !== next.templateElements) {
|
|
639
|
-
return false;
|
|
640
|
-
}
|
|
641
|
-
if (prev.fieldContext !== next.fieldContext) {
|
|
642
|
-
return false;
|
|
643
|
-
}
|
|
644
|
-
if (prev.tableStyleContext !== next.tableStyleContext) {
|
|
645
|
-
return false;
|
|
646
|
-
}
|
|
647
|
-
if (prev.canvasSize.width !== next.canvasSize.width || prev.canvasSize.height !== next.canvasSize.height) {
|
|
648
|
-
return false;
|
|
649
|
-
}
|
|
650
|
-
return true;
|
|
651
|
-
}
|
|
652
|
-
var SlideThumbnail = /* @__PURE__ */ React108__default.default.memo(
|
|
653
|
-
SlideThumbnailImpl,
|
|
654
|
-
slideThumbnailPropsEqual
|
|
655
|
-
);
|
|
656
635
|
function LazyThumbnailInner({
|
|
657
636
|
slide,
|
|
658
637
|
templateElements,
|
|
@@ -2853,7 +2832,7 @@ function AccountPage() {
|
|
|
2853
2832
|
refreshUsage();
|
|
2854
2833
|
setTimeout(() => setCleared(false), 4e3);
|
|
2855
2834
|
};
|
|
2856
|
-
const version = "4.
|
|
2835
|
+
const version = "4.74.0" ;
|
|
2857
2836
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 max-w-[700px] space-y-6", children: [
|
|
2858
2837
|
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: cardClass, children: [
|
|
2859
2838
|
/* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "flex items-center gap-2 text-sm font-semibold", children: [
|
|
@@ -10600,17 +10579,8 @@ function SlideCardImpl({
|
|
|
10600
10579
|
}
|
|
10601
10580
|
);
|
|
10602
10581
|
}
|
|
10603
|
-
function
|
|
10604
|
-
if (prev.slide
|
|
10605
|
-
return false;
|
|
10606
|
-
}
|
|
10607
|
-
if (prev.slide.isDirty !== next.slide.isDirty) {
|
|
10608
|
-
return false;
|
|
10609
|
-
}
|
|
10610
|
-
if (prev.slide.hidden !== next.slide.hidden) {
|
|
10611
|
-
return false;
|
|
10612
|
-
}
|
|
10613
|
-
if (prev.slide.elements !== next.slide.elements) {
|
|
10582
|
+
function slideCardPropsEqual(prev, next) {
|
|
10583
|
+
if (prev.slide !== next.slide) {
|
|
10614
10584
|
return false;
|
|
10615
10585
|
}
|
|
10616
10586
|
if (prev.index !== next.index) {
|
|
@@ -10642,7 +10612,7 @@ function arePropsEqual(prev, next) {
|
|
|
10642
10612
|
}
|
|
10643
10613
|
return true;
|
|
10644
10614
|
}
|
|
10645
|
-
var SlideCard = /* @__PURE__ */ React108__default.default.memo(SlideCardImpl,
|
|
10615
|
+
var SlideCard = /* @__PURE__ */ React108__default.default.memo(SlideCardImpl, slideCardPropsEqual);
|
|
10646
10616
|
var ICON_CLASS = "h-3.5 w-3.5 text-muted-foreground";
|
|
10647
10617
|
function SorterContextMenu({
|
|
10648
10618
|
x,
|
|
@@ -13970,28 +13940,7 @@ function ScaledSlidePreviewImpl({
|
|
|
13970
13940
|
);
|
|
13971
13941
|
}
|
|
13972
13942
|
function scaledSlidePreviewPropsEqual(prev, next) {
|
|
13973
|
-
if (prev.slide
|
|
13974
|
-
return false;
|
|
13975
|
-
}
|
|
13976
|
-
if (prev.slide.isDirty !== next.slide.isDirty) {
|
|
13977
|
-
return false;
|
|
13978
|
-
}
|
|
13979
|
-
if (prev.slide.hidden !== next.slide.hidden) {
|
|
13980
|
-
return false;
|
|
13981
|
-
}
|
|
13982
|
-
if (prev.slide.elements !== next.slide.elements) {
|
|
13983
|
-
return false;
|
|
13984
|
-
}
|
|
13985
|
-
if (prev.slide.showMasterShapes !== next.slide.showMasterShapes) {
|
|
13986
|
-
return false;
|
|
13987
|
-
}
|
|
13988
|
-
if (prev.slide.backgroundColor !== next.slide.backgroundColor) {
|
|
13989
|
-
return false;
|
|
13990
|
-
}
|
|
13991
|
-
if (prev.slide.backgroundImage !== next.slide.backgroundImage) {
|
|
13992
|
-
return false;
|
|
13993
|
-
}
|
|
13994
|
-
if (prev.slide.backgroundGradient !== next.slide.backgroundGradient) {
|
|
13943
|
+
if (prev.slide !== next.slide) {
|
|
13995
13944
|
return false;
|
|
13996
13945
|
}
|
|
13997
13946
|
if (prev.templateElements !== next.templateElements) {
|
|
@@ -35646,6 +35595,7 @@ exports.PptxI18nProvider = PptxI18nProvider;
|
|
|
35646
35595
|
exports.SlideCanvas = SlideCanvas;
|
|
35647
35596
|
exports.SlideTemplateGalleryDialog = SlideTemplateGalleryDialog;
|
|
35648
35597
|
exports.SlideTemplatePreview = SlideTemplatePreview;
|
|
35598
|
+
exports.SlideThumbnail = SlideThumbnail;
|
|
35649
35599
|
exports.SlidesPaneSidebar = SlidesPaneSidebar;
|
|
35650
35600
|
exports.Toolbar = Toolbar;
|
|
35651
35601
|
exports.UserAvatarBar = UserAvatarBar;
|
|
Binary file
|
|
Binary file
|