@thanh01.pmt/presentation-kit 0.2.14 → 0.2.15

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.
@@ -186,6 +186,8 @@ interface HtmlSlideViewerProps {
186
186
  className?: string;
187
187
  /** Callback fired when active slide index changes */
188
188
  onSlideChange?: (current: number, total: number) => void;
189
+ /** Callback fired when slide deck is exported or saved from inline editor */
190
+ onSaveHtml?: (savedHtml: string) => void;
189
191
  /** Show top control bar */
190
192
  showTopBar?: boolean;
191
193
  }
@@ -186,6 +186,8 @@ interface HtmlSlideViewerProps {
186
186
  className?: string;
187
187
  /** Callback fired when active slide index changes */
188
188
  onSlideChange?: (current: number, total: number) => void;
189
+ /** Callback fired when slide deck is exported or saved from inline editor */
190
+ onSaveHtml?: (savedHtml: string) => void;
189
191
  /** Show top control bar */
190
192
  showTopBar?: boolean;
191
193
  }
@@ -1,6 +1,6 @@
1
1
  import { renderSlide, renderMermaidDiagrams } from '../chunk-NYLDRVHZ.js';
2
2
  export { defineTheme, extractMaxClicks, generateClickCss, postprocessClicks, preprocessClicks, renderSlide, renderSlideAsync, resolveTheme } from '../chunk-NYLDRVHZ.js';
3
- import { SLIDE_LAYOUT_PRESETS, updateSlideLayoutInMarkdown, compileHtmlDeck } from '../chunk-A7T5Y2G4.js';
3
+ import { SLIDE_LAYOUT_PRESETS, updateSlideLayoutInMarkdown, compileHtmlDeck } from '../chunk-YPYAP4TF.js';
4
4
  import React2, { useState, useRef, useMemo, useEffect, useCallback } from 'react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
 
@@ -1605,6 +1605,7 @@ var HtmlSlideViewer = ({
1605
1605
  title: propTitle,
1606
1606
  className = "",
1607
1607
  onSlideChange,
1608
+ onSaveHtml,
1608
1609
  showTopBar = true
1609
1610
  }) => {
1610
1611
  const iframeRef = useRef(null);
@@ -1631,11 +1632,15 @@ var HtmlSlideViewer = ({
1631
1632
  if (onSlideChange) {
1632
1633
  onSlideChange(cur, tot);
1633
1634
  }
1635
+ } else if (e.data.type === "SLIDE_HTML_SAVED") {
1636
+ if (onSaveHtml && typeof e.data.html === "string") {
1637
+ onSaveHtml(e.data.html);
1638
+ }
1634
1639
  }
1635
1640
  };
1636
1641
  window.addEventListener("message", handleMessage);
1637
1642
  return () => window.removeEventListener("message", handleMessage);
1638
- }, [onSlideChange]);
1643
+ }, [onSlideChange, onSaveHtml]);
1639
1644
  useEffect(() => {
1640
1645
  const onFsChange = () => {
1641
1646
  setIsFullscreen(Boolean(document.fullscreenElement));
@@ -1648,6 +1653,14 @@ var HtmlSlideViewer = ({
1648
1653
  iframeRef.current.contentWindow.postMessage(msg, "*");
1649
1654
  }
1650
1655
  }, []);
1656
+ useEffect(() => {
1657
+ if (!containerRef.current || typeof ResizeObserver === "undefined") return;
1658
+ const ro = new ResizeObserver(() => {
1659
+ sendIframeMessage({ type: "RESIZE" });
1660
+ });
1661
+ ro.observe(containerRef.current);
1662
+ return () => ro.disconnect();
1663
+ }, [sendIframeMessage]);
1651
1664
  const handleNext = () => sendIframeMessage({ type: "NEXT_SLIDE" });
1652
1665
  const handlePrev = () => sendIframeMessage({ type: "PREV_SLIDE" });
1653
1666
  const handleToggleFullscreen = () => {
@@ -1746,7 +1759,10 @@ var HtmlSlideViewer = ({
1746
1759
  srcDoc: fullHtml,
1747
1760
  title: deckTitle,
1748
1761
  sandbox: "allow-scripts allow-same-origin allow-popups allow-forms",
1749
- className: "w-full h-full border-0 block"
1762
+ className: "w-full h-full border-0 block",
1763
+ onLoad: () => {
1764
+ sendIframeMessage({ type: "RESIZE" });
1765
+ }
1750
1766
  }
1751
1767
  ) : /* @__PURE__ */ jsx("div", { className: "w-full h-full flex items-center justify-center text-neutral-500 text-sm", children: "No slide deck content loaded." }) })
1752
1768
  ]