markdown-flow-ui 0.2.1 → 0.2.2

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.
Files changed (57) hide show
  1. package/dist/assets/markdown-flow-ui.css +1 -1
  2. package/dist/components/ContentRender/IframeSandbox.cjs.js +7 -7
  3. package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
  4. package/dist/components/ContentRender/IframeSandbox.es.js +283 -252
  5. package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
  6. package/dist/components/ContentRender/blackboard-vendor.cjs.js +1 -1
  7. package/dist/components/ContentRender/blackboard-vendor.cjs.js.map +1 -1
  8. package/dist/components/ContentRender/blackboard-vendor.d.ts +2 -0
  9. package/dist/components/ContentRender/blackboard-vendor.es.js +9 -12
  10. package/dist/components/ContentRender/blackboard-vendor.es.js.map +1 -1
  11. package/dist/components/ContentRender/utils/iframe-scaling.cjs.js +12 -9
  12. package/dist/components/ContentRender/utils/iframe-scaling.cjs.js.map +1 -1
  13. package/dist/components/ContentRender/utils/iframe-scaling.es.js +16 -12
  14. package/dist/components/ContentRender/utils/iframe-scaling.es.js.map +1 -1
  15. package/dist/components/ContentRender/utils/presentation-scaling.cjs.js +2 -0
  16. package/dist/components/ContentRender/utils/presentation-scaling.cjs.js.map +1 -0
  17. package/dist/components/ContentRender/utils/presentation-scaling.d.ts +34 -0
  18. package/dist/components/ContentRender/utils/presentation-scaling.es.js +67 -0
  19. package/dist/components/ContentRender/utils/presentation-scaling.es.js.map +1 -0
  20. package/dist/components/ContentRender/utils/presentation-scaling.test.d.ts +1 -0
  21. package/dist/components/ContentRender/utils/tailwind-runtime.cjs.js +2 -0
  22. package/dist/components/ContentRender/utils/tailwind-runtime.cjs.js.map +1 -0
  23. package/dist/components/ContentRender/utils/tailwind-runtime.d.ts +5 -0
  24. package/dist/components/ContentRender/utils/tailwind-runtime.es.js +11 -0
  25. package/dist/components/ContentRender/utils/tailwind-runtime.es.js.map +1 -0
  26. package/dist/components/ContentRender/utils/tailwind-runtime.test.d.ts +1 -0
  27. package/dist/components/Slide/MarkdownSlideScaling.cjs.js +2 -0
  28. package/dist/components/Slide/MarkdownSlideScaling.cjs.js.map +1 -0
  29. package/dist/components/Slide/MarkdownSlideScaling.d.ts +13 -0
  30. package/dist/components/Slide/MarkdownSlideScaling.es.js +109 -0
  31. package/dist/components/Slide/MarkdownSlideScaling.es.js.map +1 -0
  32. package/dist/components/Slide/Slide.cjs.js +1 -1
  33. package/dist/components/Slide/Slide.cjs.js.map +1 -1
  34. package/dist/components/Slide/Slide.d.ts +7 -0
  35. package/dist/components/Slide/Slide.es.js +448 -438
  36. package/dist/components/Slide/Slide.es.js.map +1 -1
  37. package/dist/components/Slide/Slide.stories.d.ts +2473 -0
  38. package/dist/components/Slide/utils/markdownScaling.cjs.js +2 -0
  39. package/dist/components/Slide/utils/markdownScaling.cjs.js.map +1 -0
  40. package/dist/components/Slide/utils/markdownScaling.d.ts +7 -0
  41. package/dist/components/Slide/utils/markdownScaling.es.js +12 -0
  42. package/dist/components/Slide/utils/markdownScaling.es.js.map +1 -0
  43. package/dist/components/Slide/utils/markdownScaling.test.d.ts +1 -0
  44. package/dist/markdown-flow-ui-lib.css +1 -1
  45. package/dist/node_modules/cose-base/cose-base.cjs.js +1 -1
  46. package/dist/node_modules/cose-base/cose-base.cjs.js.map +1 -1
  47. package/dist/node_modules/cose-base/cose-base.es.js +1 -1
  48. package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.cjs.js +1 -1
  49. package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.cjs.js.map +1 -1
  50. package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.es.js +1 -1
  51. package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.cjs.js +1 -1
  52. package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.cjs.js.map +1 -1
  53. package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.es.js +1 -1
  54. package/dist/node_modules/layout-base/layout-base.cjs.js +1 -1
  55. package/dist/node_modules/layout-base/layout-base.cjs.js.map +1 -1
  56. package/dist/node_modules/layout-base/layout-base.es.js +1 -1
  57. package/package.json +1 -1
@@ -0,0 +1,67 @@
1
+ const o = 16, e = 12, A = 8, h = 48, F = 0.03, a = 4;
2
+ const N = (t) => Number.isFinite(t) && t > 0, s = ({
3
+ height: t,
4
+ width: _
5
+ }) => !N(_) || !N(t) ? 16 : Math.max(
6
+ 8,
7
+ Math.min(
8
+ Math.max(
9
+ 12,
10
+ _ / 48
11
+ ),
12
+ t * 0.03
13
+ )
14
+ ), S = (t, _) => _.height <= t.height + 4 && _.width <= t.width + 4, P = ({
15
+ baseFontSize: t,
16
+ content: _,
17
+ currentRatio: O = 1,
18
+ viewport: E
19
+ }) => {
20
+ if (!N(t) || !N(E.width) || !N(E.height) || !N(_.width) || !N(_.height))
21
+ return 1;
22
+ const T = _.height > E.height + 4 ? E.height / _.height : 1, I = _.width > E.width + 4 ? E.width / _.width : 1, i = Math.min(
23
+ 1,
24
+ 8 / t
25
+ );
26
+ return Math.max(
27
+ i,
28
+ Math.min(1, O * Math.min(T, I))
29
+ );
30
+ }, r = ({
31
+ measure: t,
32
+ viewport: _
33
+ }) => {
34
+ const O = s(_);
35
+ let E = 1, T = O;
36
+ for (let I = 0; I < 8; I += 1) {
37
+ const i = t(T);
38
+ if (S(_, i))
39
+ return T;
40
+ const R = P({
41
+ baseFontSize: O,
42
+ content: i,
43
+ currentRatio: E,
44
+ viewport: _
45
+ }), n = Math.max(
46
+ 8,
47
+ O * R
48
+ );
49
+ if (Math.abs(n - T) < 0.05)
50
+ return n;
51
+ E = R, T = n;
52
+ }
53
+ return T;
54
+ };
55
+ export {
56
+ o as PRESENTATION_DEFAULT_FONT_SIZE_PX,
57
+ F as PRESENTATION_HEIGHT_FONT_RATIO,
58
+ e as PRESENTATION_MIN_BASE_FONT_SIZE_PX,
59
+ A as PRESENTATION_MIN_FONT_SIZE_PX,
60
+ a as PRESENTATION_OVERFLOW_TOLERANCE_PX,
61
+ h as PRESENTATION_WIDTH_FONT_DIVISOR,
62
+ r as fitPresentationFontSize,
63
+ S as presentationContentFits,
64
+ s as resolvePresentationBaseFontSize,
65
+ P as resolvePresentationCompressionRatio
66
+ };
67
+ //# sourceMappingURL=presentation-scaling.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation-scaling.es.js","sources":["../../../../src/components/ContentRender/utils/presentation-scaling.ts"],"sourcesContent":["export const PRESENTATION_DEFAULT_FONT_SIZE_PX = 16;\nexport const PRESENTATION_MIN_BASE_FONT_SIZE_PX = 12;\nexport const PRESENTATION_MIN_FONT_SIZE_PX = 8;\nexport const PRESENTATION_WIDTH_FONT_DIVISOR = 48;\nexport const PRESENTATION_HEIGHT_FONT_RATIO = 0.03;\nexport const PRESENTATION_OVERFLOW_TOLERANCE_PX = 4;\n\nconst MAX_FIT_ITERATIONS = 8;\nconst MIN_FONT_SIZE_DELTA_PX = 0.05;\n\nexport interface PresentationSize {\n height: number;\n width: number;\n}\n\nexport interface FitPresentationFontSizeOptions {\n measure: (fontSize: number) => PresentationSize;\n viewport: PresentationSize;\n}\n\nconst isPositiveFinite = (value: number) => Number.isFinite(value) && value > 0;\n\n/**\n * Matches the viewport-driven base font-size used by HTML presentation slides.\n */\nexport const resolvePresentationBaseFontSize = ({\n height,\n width,\n}: PresentationSize) => {\n if (!isPositiveFinite(width) || !isPositiveFinite(height)) {\n return PRESENTATION_DEFAULT_FONT_SIZE_PX;\n }\n\n return Math.max(\n PRESENTATION_MIN_FONT_SIZE_PX,\n Math.min(\n Math.max(\n PRESENTATION_MIN_BASE_FONT_SIZE_PX,\n width / PRESENTATION_WIDTH_FONT_DIVISOR\n ),\n height * PRESENTATION_HEIGHT_FONT_RATIO\n )\n );\n};\n\nexport const presentationContentFits = (\n viewport: PresentationSize,\n content: PresentationSize\n) =>\n content.height <= viewport.height + PRESENTATION_OVERFLOW_TOLERANCE_PX &&\n content.width <= viewport.width + PRESENTATION_OVERFLOW_TOLERANCE_PX;\n\nexport interface ResolvePresentationCompressionRatioOptions {\n baseFontSize: number;\n content: PresentationSize;\n currentRatio?: number;\n viewport: PresentationSize;\n}\n\n/**\n * Returns the next cumulative compression ratio for content that overflows.\n */\nexport const resolvePresentationCompressionRatio = ({\n baseFontSize,\n content,\n currentRatio = 1,\n viewport,\n}: ResolvePresentationCompressionRatioOptions) => {\n if (\n !isPositiveFinite(baseFontSize) ||\n !isPositiveFinite(viewport.width) ||\n !isPositiveFinite(viewport.height) ||\n !isPositiveFinite(content.width) ||\n !isPositiveFinite(content.height)\n ) {\n return 1;\n }\n\n const heightRatio =\n content.height > viewport.height + PRESENTATION_OVERFLOW_TOLERANCE_PX\n ? viewport.height / content.height\n : 1;\n const widthRatio =\n content.width > viewport.width + PRESENTATION_OVERFLOW_TOLERANCE_PX\n ? viewport.width / content.width\n : 1;\n const minimumRatio = Math.min(\n 1,\n PRESENTATION_MIN_FONT_SIZE_PX / baseFontSize\n );\n\n return Math.max(\n minimumRatio,\n Math.min(1, currentRatio * Math.min(heightRatio, widthRatio))\n );\n};\n\n/**\n * Applies the presentation font-size through `measure` and iteratively shrinks\n * it until the content fits or reaches the shared 8px lower bound.\n */\nexport const fitPresentationFontSize = ({\n measure,\n viewport,\n}: FitPresentationFontSizeOptions) => {\n const baseFontSize = resolvePresentationBaseFontSize(viewport);\n let compressionRatio = 1;\n let fontSize = baseFontSize;\n\n for (let iteration = 0; iteration < MAX_FIT_ITERATIONS; iteration += 1) {\n const content = measure(fontSize);\n\n if (presentationContentFits(viewport, content)) {\n return fontSize;\n }\n\n const nextCompressionRatio = resolvePresentationCompressionRatio({\n baseFontSize,\n content,\n currentRatio: compressionRatio,\n viewport,\n });\n const nextFontSize = Math.max(\n PRESENTATION_MIN_FONT_SIZE_PX,\n baseFontSize * nextCompressionRatio\n );\n\n if (Math.abs(nextFontSize - fontSize) < MIN_FONT_SIZE_DELTA_PX) {\n return nextFontSize;\n }\n\n compressionRatio = nextCompressionRatio;\n fontSize = nextFontSize;\n }\n\n return fontSize;\n};\n"],"names":["PRESENTATION_DEFAULT_FONT_SIZE_PX","PRESENTATION_MIN_BASE_FONT_SIZE_PX","PRESENTATION_MIN_FONT_SIZE_PX","PRESENTATION_WIDTH_FONT_DIVISOR","PRESENTATION_HEIGHT_FONT_RATIO","PRESENTATION_OVERFLOW_TOLERANCE_PX","isPositiveFinite","value","resolvePresentationBaseFontSize","height","width","presentationContentFits","viewport","content","resolvePresentationCompressionRatio","baseFontSize","currentRatio","heightRatio","widthRatio","minimumRatio","fitPresentationFontSize","measure","compressionRatio","fontSize","iteration","nextCompressionRatio","nextFontSize"],"mappings":"AAAO,MAAMA,IAAoC,IACpCC,IAAqC,IACrCC,IAAgC,GAChCC,IAAkC,IAClCC,IAAiC,MACjCC,IAAqC;AAelD,MAAMC,IAAmB,CAACC,MAAkB,OAAO,SAASA,CAAK,KAAKA,IAAQ,GAKjEC,IAAkC,CAAC;AAAA,EAC9C,QAAAC;AAAA,EACA,OAAAC;AACF,MACM,CAACJ,EAAiBI,CAAK,KAAK,CAACJ,EAAiBG,CAAM,IAC/C,KAGF,KAAK;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,KAAK;AAAA,MACH;AAAA,MACAC,IAAQ;AAAA,IAAA;AAAA,IAEVD,IAAS;AAAA,EAAA;AACX,GAISE,IAA0B,CACrCC,GACAC,MAEAA,EAAQ,UAAUD,EAAS,SAAS,KACpCC,EAAQ,SAASD,EAAS,QAAQ,GAYvBE,IAAsC,CAAC;AAAA,EAClD,cAAAC;AAAA,EACA,SAAAF;AAAA,EACA,cAAAG,IAAe;AAAA,EACf,UAAAJ;AACF,MAAkD;AAChD,MACE,CAACN,EAAiBS,CAAY,KAC9B,CAACT,EAAiBM,EAAS,KAAK,KAChC,CAACN,EAAiBM,EAAS,MAAM,KACjC,CAACN,EAAiBO,EAAQ,KAAK,KAC/B,CAACP,EAAiBO,EAAQ,MAAM;AAEhC,WAAO;AAGT,QAAMI,IACJJ,EAAQ,SAASD,EAAS,SAAS,IAC/BA,EAAS,SAASC,EAAQ,SAC1B,GACAK,IACJL,EAAQ,QAAQD,EAAS,QAAQ,IAC7BA,EAAS,QAAQC,EAAQ,QACzB,GACAM,IAAe,KAAK;AAAA,IACxB;AAAA,IACA,IAAgCJ;AAAA,EAAA;AAGlC,SAAO,KAAK;AAAA,IACVI;AAAA,IACA,KAAK,IAAI,GAAGH,IAAe,KAAK,IAAIC,GAAaC,CAAU,CAAC;AAAA,EAAA;AAEhE,GAMaE,IAA0B,CAAC;AAAA,EACtC,SAAAC;AAAA,EACA,UAAAT;AACF,MAAsC;AACpC,QAAMG,IAAeP,EAAgCI,CAAQ;AAC7D,MAAIU,IAAmB,GACnBC,IAAWR;AAEf,WAASS,IAAY,GAAGA,IAAY,GAAoBA,KAAa,GAAG;AACtE,UAAMX,IAAUQ,EAAQE,CAAQ;AAEhC,QAAIZ,EAAwBC,GAAUC,CAAO;AAC3C,aAAOU;AAGT,UAAME,IAAuBX,EAAoC;AAAA,MAC/D,cAAAC;AAAA,MACA,SAAAF;AAAA,MACA,cAAcS;AAAA,MACd,UAAAV;AAAA,IAAA,CACD,GACKc,IAAe,KAAK;AAAA,MACxB;AAAA,MACAX,IAAeU;AAAA,IAAA;AAGjB,QAAI,KAAK,IAAIC,IAAeH,CAAQ,IAAI;AACtC,aAAOG;AAGT,IAAAJ,IAAmBG,GACnBF,IAAWG;AAAA,EACb;AAEA,SAAOH;AACT;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../cjkFontFamily.cjs.js"),t=i=>{const e=i.defaultView?.tailwind;return e?(e.config=n.addCjkSafeSansToTailwindConfig(e.config),!0):!1};exports.refreshTailwindRuntime=t;
2
+ //# sourceMappingURL=tailwind-runtime.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-runtime.cjs.js","sources":["../../../../src/components/ContentRender/utils/tailwind-runtime.ts"],"sourcesContent":["import { addCjkSafeSansToTailwindConfig } from \"../cjkFontFamily\";\n\ninterface TailwindRuntimeWindow extends Window {\n tailwind?: {\n config?: unknown;\n };\n}\n\n/**\n * Reassigns the Tailwind Play config so its JIT runtime rescans the iframe DOM.\n * This is required when a sandbox was initialized under a display:none parent.\n */\nexport const refreshTailwindRuntime = (doc: Document): boolean => {\n const tailwindRuntime = (doc.defaultView as TailwindRuntimeWindow | null)\n ?.tailwind;\n\n if (!tailwindRuntime) {\n return false;\n }\n\n tailwindRuntime.config = addCjkSafeSansToTailwindConfig(\n tailwindRuntime.config\n );\n return true;\n};\n"],"names":["refreshTailwindRuntime","doc","tailwindRuntime","addCjkSafeSansToTailwindConfig"],"mappings":"2HAYaA,EAA0BC,GAA2B,CAChE,MAAMC,EAAmBD,EAAI,aACzB,SAEJ,OAAKC,GAILA,EAAgB,OAASC,EAAAA,+BACvBD,EAAgB,MAAA,EAEX,IANE,EAOX"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Reassigns the Tailwind Play config so its JIT runtime rescans the iframe DOM.
3
+ * This is required when a sandbox was initialized under a display:none parent.
4
+ */
5
+ export declare const refreshTailwindRuntime: (doc: Document) => boolean;
@@ -0,0 +1,11 @@
1
+ import { addCjkSafeSansToTailwindConfig as e } from "../cjkFontFamily.es.js";
2
+ const r = (n) => {
3
+ const i = n.defaultView?.tailwind;
4
+ return i ? (i.config = e(
5
+ i.config
6
+ ), !0) : !1;
7
+ };
8
+ export {
9
+ r as refreshTailwindRuntime
10
+ };
11
+ //# sourceMappingURL=tailwind-runtime.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-runtime.es.js","sources":["../../../../src/components/ContentRender/utils/tailwind-runtime.ts"],"sourcesContent":["import { addCjkSafeSansToTailwindConfig } from \"../cjkFontFamily\";\n\ninterface TailwindRuntimeWindow extends Window {\n tailwind?: {\n config?: unknown;\n };\n}\n\n/**\n * Reassigns the Tailwind Play config so its JIT runtime rescans the iframe DOM.\n * This is required when a sandbox was initialized under a display:none parent.\n */\nexport const refreshTailwindRuntime = (doc: Document): boolean => {\n const tailwindRuntime = (doc.defaultView as TailwindRuntimeWindow | null)\n ?.tailwind;\n\n if (!tailwindRuntime) {\n return false;\n }\n\n tailwindRuntime.config = addCjkSafeSansToTailwindConfig(\n tailwindRuntime.config\n );\n return true;\n};\n"],"names":["refreshTailwindRuntime","doc","tailwindRuntime","addCjkSafeSansToTailwindConfig"],"mappings":";AAYO,MAAMA,IAAyB,CAACC,MAA2B;AAChE,QAAMC,IAAmBD,EAAI,aACzB;AAEJ,SAAKC,KAILA,EAAgB,SAASC;AAAA,IACvBD,EAAgB;AAAA,EAAA,GAEX,MANE;AAOX;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const b=require("../../_virtual/jsx-runtime.cjs.js"),i=require("react"),R=require("../../lib/utils.cjs.js"),y=require("../ContentRender/utils/presentation-scaling.cjs.js"),p="--mdf-slide-font-size",m=typeof window>"u"?i.useEffect:i.useLayoutEffect,z=(o,c)=>o.contentHeight===c.contentHeight&&o.contentWidth===c.contentWidth&&o.mode===c.mode&&o.viewportHeight===c.viewportHeight&&o.viewportWidth===c.viewportWidth,H=({children:o,className:c,mode:e,...E})=>{const w=i.useRef(null),d=i.useRef(null),s=i.useRef(null),v=i.useRef(!1),f=i.useRef(null),h=i.useCallback(()=>{const r=w.current,t=d.current;if(e==="disabled"||!r||!t||v.current)return;const n={height:r.clientHeight,width:r.clientWidth};if(n.height<=0||n.width<=0)return;const u={contentHeight:t.scrollHeight,contentWidth:t.scrollWidth,mode:e,viewportHeight:n.height,viewportWidth:n.width},a=f.current;if(!(a&&z(a,u))){v.current=!0;try{const S=e==="fit"?y.fitPresentationFontSize({viewport:n,measure:F=>(t.style.setProperty(p,`${F}px`),{height:t.scrollHeight,width:t.scrollWidth})}):y.resolvePresentationBaseFontSize(n);t.style.setProperty(p,`${S}px`),t.dataset.markdownSlideFontSize=String(S),f.current={contentHeight:t.scrollHeight,contentWidth:t.scrollWidth,mode:e,viewportHeight:n.height,viewportWidth:n.width}}finally{v.current=!1}}},[e]),l=i.useCallback(()=>{e==="disabled"||s.current!==null||(s.current=window.requestAnimationFrame(()=>{s.current=null,h()}))},[h,e]);m(()=>{s.current!==null&&(window.cancelAnimationFrame(s.current),s.current=null);const r=d.current;if(r){if(e==="disabled"){r.style.removeProperty(p),delete r.dataset.markdownSlideFontSize,f.current=null;return}h()}},[h,e]),i.useEffect(()=>{const r=w.current,t=d.current;if(e==="disabled"||!r||!t)return;const n=typeof ResizeObserver>"u"?null:new ResizeObserver(l);n?.observe(r);const u=()=>{f.current=null,l()},a=e==="fit"&&typeof MutationObserver<"u"?new MutationObserver(u):null;return e==="fit"&&(n?.observe(t),a?.observe(t,{childList:!0,characterData:!0,subtree:!0}),t.addEventListener("load",u,!0)),window.addEventListener("resize",l),l(),()=>{n?.disconnect(),a?.disconnect(),e==="fit"&&t.removeEventListener("load",u,!0),window.removeEventListener("resize",l),s.current!==null&&(window.cancelAnimationFrame(s.current),s.current=null)}},[e,l]);const g=e!=="disabled";return b.jsxRuntimeExports.jsx("div",{ref:w,className:R.cn(c,g&&"slide-markdown-scaling"),"data-markdown-slide-scaling":g?e:void 0,...E,children:b.jsxRuntimeExports.jsx("div",{ref:d,className:R.cn("slide-markdown-scaling__content flex w-full flex-col gap-4",e!=="fit"&&"slide-markdown-scaling__content--contents"),children:o})})};exports.default=H;
2
+ //# sourceMappingURL=MarkdownSlideScaling.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownSlideScaling.cjs.js","sources":["../../../src/components/Slide/MarkdownSlideScaling.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useLayoutEffect, useRef } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n fitPresentationFontSize,\n resolvePresentationBaseFontSize,\n} from \"../ContentRender/utils/presentation-scaling\";\nimport type { MarkdownScalingMode } from \"./utils/markdownScaling\";\n\nconst SLIDE_FONT_SIZE_PROPERTY = \"--mdf-slide-font-size\";\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\ninterface MarkdownFitSnapshot {\n contentHeight: number;\n contentWidth: number;\n mode: MarkdownScalingMode;\n viewportHeight: number;\n viewportWidth: number;\n}\n\nconst areFitSnapshotsEqual = (\n left: MarkdownFitSnapshot,\n right: MarkdownFitSnapshot\n) =>\n left.contentHeight === right.contentHeight &&\n left.contentWidth === right.contentWidth &&\n left.mode === right.mode &&\n left.viewportHeight === right.viewportHeight &&\n left.viewportWidth === right.viewportWidth;\n\nexport interface MarkdownSlideScalingProps\n extends React.ComponentPropsWithoutRef<\"div\"> {\n /** Controls whether Markdown content is fitted, base-scaled, or unscaled. */\n mode: MarkdownScalingMode;\n}\n\n/**\n * Fits all Markdown elements in one logical slide with a shared font-size.\n * Keeping this boundary outside ContentRender lets accumulated title, text,\n * table, and code elements participate in the same presentation layout.\n */\nconst MarkdownSlideScaling: React.FC<MarkdownSlideScalingProps> = ({\n children,\n className,\n mode,\n ...props\n}) => {\n const viewportRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const fitFrameRef = useRef<number | null>(null);\n const isFittingRef = useRef(false);\n const lastFitSnapshotRef = useRef<MarkdownFitSnapshot | null>(null);\n\n const fitContent = useCallback(() => {\n const viewport = viewportRef.current;\n const content = contentRef.current;\n\n if (mode === \"disabled\" || !viewport || !content || isFittingRef.current) {\n return;\n }\n\n const viewportSize = {\n height: viewport.clientHeight,\n width: viewport.clientWidth,\n };\n\n if (viewportSize.height <= 0 || viewportSize.width <= 0) {\n return;\n }\n\n const currentSnapshot: MarkdownFitSnapshot = {\n contentHeight: content.scrollHeight,\n contentWidth: content.scrollWidth,\n mode,\n viewportHeight: viewportSize.height,\n viewportWidth: viewportSize.width,\n };\n const lastSnapshot = lastFitSnapshotRef.current;\n\n if (lastSnapshot && areFitSnapshotsEqual(lastSnapshot, currentSnapshot)) {\n return;\n }\n\n isFittingRef.current = true;\n\n try {\n const fontSize =\n mode === \"fit\"\n ? fitPresentationFontSize({\n viewport: viewportSize,\n measure: (candidateFontSize) => {\n content.style.setProperty(\n SLIDE_FONT_SIZE_PROPERTY,\n `${candidateFontSize}px`\n );\n\n // Read after the CSS variable update so wrapping and em-based\n // styles are included in the next compression step.\n return {\n height: content.scrollHeight,\n width: content.scrollWidth,\n };\n },\n })\n : resolvePresentationBaseFontSize(viewportSize);\n\n content.style.setProperty(SLIDE_FONT_SIZE_PROPERTY, `${fontSize}px`);\n content.dataset.markdownSlideFontSize = String(fontSize);\n lastFitSnapshotRef.current = {\n contentHeight: content.scrollHeight,\n contentWidth: content.scrollWidth,\n mode,\n viewportHeight: viewportSize.height,\n viewportWidth: viewportSize.width,\n };\n } finally {\n isFittingRef.current = false;\n }\n }, [mode]);\n\n const scheduleFit = useCallback(() => {\n if (mode === \"disabled\" || fitFrameRef.current !== null) {\n return;\n }\n\n fitFrameRef.current = window.requestAnimationFrame(() => {\n fitFrameRef.current = null;\n fitContent();\n });\n }, [fitContent, mode]);\n\n useIsomorphicLayoutEffect(() => {\n if (fitFrameRef.current !== null) {\n window.cancelAnimationFrame(fitFrameRef.current);\n fitFrameRef.current = null;\n }\n\n const content = contentRef.current;\n\n if (!content) {\n return;\n }\n\n if (mode === \"disabled\") {\n content.style.removeProperty(SLIDE_FONT_SIZE_PROPERTY);\n delete content.dataset.markdownSlideFontSize;\n lastFitSnapshotRef.current = null;\n return;\n }\n\n fitContent();\n }, [fitContent, mode]);\n\n useEffect(() => {\n const viewport = viewportRef.current;\n const content = contentRef.current;\n\n if (mode === \"disabled\" || !viewport || !content) {\n return;\n }\n\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(scheduleFit);\n resizeObserver?.observe(viewport);\n\n const handleContentChange = () => {\n lastFitSnapshotRef.current = null;\n scheduleFit();\n };\n const mutationObserver =\n mode === \"fit\" && typeof MutationObserver !== \"undefined\"\n ? new MutationObserver(handleContentChange)\n : null;\n\n if (mode === \"fit\") {\n resizeObserver?.observe(content);\n mutationObserver?.observe(content, {\n childList: true,\n characterData: true,\n subtree: true,\n });\n content.addEventListener(\"load\", handleContentChange, true);\n }\n\n window.addEventListener(\"resize\", scheduleFit);\n scheduleFit();\n\n return () => {\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n\n if (mode === \"fit\") {\n content.removeEventListener(\"load\", handleContentChange, true);\n }\n\n window.removeEventListener(\"resize\", scheduleFit);\n\n if (fitFrameRef.current !== null) {\n window.cancelAnimationFrame(fitFrameRef.current);\n fitFrameRef.current = null;\n }\n };\n }, [mode, scheduleFit]);\n\n const isScaling = mode !== \"disabled\";\n\n return (\n <div\n ref={viewportRef}\n className={cn(className, isScaling && \"slide-markdown-scaling\")}\n data-markdown-slide-scaling={isScaling ? mode : undefined}\n {...props}\n >\n <div\n ref={contentRef}\n className={cn(\n \"slide-markdown-scaling__content flex w-full flex-col gap-4\",\n mode !== \"fit\" && \"slide-markdown-scaling__content--contents\"\n )}\n >\n {children}\n </div>\n </div>\n );\n};\n\nexport default MarkdownSlideScaling;\n"],"names":["SLIDE_FONT_SIZE_PROPERTY","useIsomorphicLayoutEffect","useEffect","useLayoutEffect","areFitSnapshotsEqual","left","right","MarkdownSlideScaling","children","className","mode","props","viewportRef","useRef","contentRef","fitFrameRef","isFittingRef","lastFitSnapshotRef","fitContent","useCallback","viewport","content","viewportSize","currentSnapshot","lastSnapshot","fontSize","fitPresentationFontSize","candidateFontSize","resolvePresentationBaseFontSize","scheduleFit","resizeObserver","handleContentChange","mutationObserver","isScaling","jsx","cn"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { default as React } from 'react';
2
+ import { MarkdownScalingMode } from './utils/markdownScaling';
3
+ export interface MarkdownSlideScalingProps extends React.ComponentPropsWithoutRef<"div"> {
4
+ /** Controls whether Markdown content is fitted, base-scaled, or unscaled. */
5
+ mode: MarkdownScalingMode;
6
+ }
7
+ /**
8
+ * Fits all Markdown elements in one logical slide with a shared font-size.
9
+ * Keeping this boundary outside ContentRender lets accumulated title, text,
10
+ * table, and code elements participate in the same presentation layout.
11
+ */
12
+ declare const MarkdownSlideScaling: React.FC<MarkdownSlideScalingProps>;
13
+ export default MarkdownSlideScaling;
@@ -0,0 +1,109 @@
1
+ import { j as m } from "../../_virtual/jsx-runtime.es.js";
2
+ import { useRef as u, useCallback as b, useEffect as F, useLayoutEffect as H } from "react";
3
+ import { cn as y } from "../../lib/utils.es.js";
4
+ import { fitPresentationFontSize as W, resolvePresentationBaseFontSize as R } from "../ContentRender/utils/presentation-scaling.es.js";
5
+ const v = "--mdf-slide-font-size", x = typeof window > "u" ? F : H, k = (o, s) => o.contentHeight === s.contentHeight && o.contentWidth === s.contentWidth && o.mode === s.mode && o.viewportHeight === s.viewportHeight && o.viewportWidth === s.viewportWidth, j = ({
6
+ children: o,
7
+ className: s,
8
+ mode: t,
9
+ ...z
10
+ }) => {
11
+ const w = u(null), d = u(null), i = u(null), p = u(!1), f = u(null), h = b(() => {
12
+ const r = w.current, e = d.current;
13
+ if (t === "disabled" || !r || !e || p.current)
14
+ return;
15
+ const n = {
16
+ height: r.clientHeight,
17
+ width: r.clientWidth
18
+ };
19
+ if (n.height <= 0 || n.width <= 0)
20
+ return;
21
+ const l = {
22
+ contentHeight: e.scrollHeight,
23
+ contentWidth: e.scrollWidth,
24
+ mode: t,
25
+ viewportHeight: n.height,
26
+ viewportWidth: n.width
27
+ }, a = f.current;
28
+ if (!(a && k(a, l))) {
29
+ p.current = !0;
30
+ try {
31
+ const S = t === "fit" ? W({
32
+ viewport: n,
33
+ measure: (E) => (e.style.setProperty(
34
+ v,
35
+ `${E}px`
36
+ ), {
37
+ height: e.scrollHeight,
38
+ width: e.scrollWidth
39
+ })
40
+ }) : R(n);
41
+ e.style.setProperty(v, `${S}px`), e.dataset.markdownSlideFontSize = String(S), f.current = {
42
+ contentHeight: e.scrollHeight,
43
+ contentWidth: e.scrollWidth,
44
+ mode: t,
45
+ viewportHeight: n.height,
46
+ viewportWidth: n.width
47
+ };
48
+ } finally {
49
+ p.current = !1;
50
+ }
51
+ }
52
+ }, [t]), c = b(() => {
53
+ t === "disabled" || i.current !== null || (i.current = window.requestAnimationFrame(() => {
54
+ i.current = null, h();
55
+ }));
56
+ }, [h, t]);
57
+ x(() => {
58
+ i.current !== null && (window.cancelAnimationFrame(i.current), i.current = null);
59
+ const r = d.current;
60
+ if (r) {
61
+ if (t === "disabled") {
62
+ r.style.removeProperty(v), delete r.dataset.markdownSlideFontSize, f.current = null;
63
+ return;
64
+ }
65
+ h();
66
+ }
67
+ }, [h, t]), F(() => {
68
+ const r = w.current, e = d.current;
69
+ if (t === "disabled" || !r || !e)
70
+ return;
71
+ const n = typeof ResizeObserver > "u" ? null : new ResizeObserver(c);
72
+ n?.observe(r);
73
+ const l = () => {
74
+ f.current = null, c();
75
+ }, a = t === "fit" && typeof MutationObserver < "u" ? new MutationObserver(l) : null;
76
+ return t === "fit" && (n?.observe(e), a?.observe(e, {
77
+ childList: !0,
78
+ characterData: !0,
79
+ subtree: !0
80
+ }), e.addEventListener("load", l, !0)), window.addEventListener("resize", c), c(), () => {
81
+ n?.disconnect(), a?.disconnect(), t === "fit" && e.removeEventListener("load", l, !0), window.removeEventListener("resize", c), i.current !== null && (window.cancelAnimationFrame(i.current), i.current = null);
82
+ };
83
+ }, [t, c]);
84
+ const g = t !== "disabled";
85
+ return /* @__PURE__ */ m.jsx(
86
+ "div",
87
+ {
88
+ ref: w,
89
+ className: y(s, g && "slide-markdown-scaling"),
90
+ "data-markdown-slide-scaling": g ? t : void 0,
91
+ ...z,
92
+ children: /* @__PURE__ */ m.jsx(
93
+ "div",
94
+ {
95
+ ref: d,
96
+ className: y(
97
+ "slide-markdown-scaling__content flex w-full flex-col gap-4",
98
+ t !== "fit" && "slide-markdown-scaling__content--contents"
99
+ ),
100
+ children: o
101
+ }
102
+ )
103
+ }
104
+ );
105
+ };
106
+ export {
107
+ j as default
108
+ };
109
+ //# sourceMappingURL=MarkdownSlideScaling.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownSlideScaling.es.js","sources":["../../../src/components/Slide/MarkdownSlideScaling.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useLayoutEffect, useRef } from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n fitPresentationFontSize,\n resolvePresentationBaseFontSize,\n} from \"../ContentRender/utils/presentation-scaling\";\nimport type { MarkdownScalingMode } from \"./utils/markdownScaling\";\n\nconst SLIDE_FONT_SIZE_PROPERTY = \"--mdf-slide-font-size\";\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\ninterface MarkdownFitSnapshot {\n contentHeight: number;\n contentWidth: number;\n mode: MarkdownScalingMode;\n viewportHeight: number;\n viewportWidth: number;\n}\n\nconst areFitSnapshotsEqual = (\n left: MarkdownFitSnapshot,\n right: MarkdownFitSnapshot\n) =>\n left.contentHeight === right.contentHeight &&\n left.contentWidth === right.contentWidth &&\n left.mode === right.mode &&\n left.viewportHeight === right.viewportHeight &&\n left.viewportWidth === right.viewportWidth;\n\nexport interface MarkdownSlideScalingProps\n extends React.ComponentPropsWithoutRef<\"div\"> {\n /** Controls whether Markdown content is fitted, base-scaled, or unscaled. */\n mode: MarkdownScalingMode;\n}\n\n/**\n * Fits all Markdown elements in one logical slide with a shared font-size.\n * Keeping this boundary outside ContentRender lets accumulated title, text,\n * table, and code elements participate in the same presentation layout.\n */\nconst MarkdownSlideScaling: React.FC<MarkdownSlideScalingProps> = ({\n children,\n className,\n mode,\n ...props\n}) => {\n const viewportRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const fitFrameRef = useRef<number | null>(null);\n const isFittingRef = useRef(false);\n const lastFitSnapshotRef = useRef<MarkdownFitSnapshot | null>(null);\n\n const fitContent = useCallback(() => {\n const viewport = viewportRef.current;\n const content = contentRef.current;\n\n if (mode === \"disabled\" || !viewport || !content || isFittingRef.current) {\n return;\n }\n\n const viewportSize = {\n height: viewport.clientHeight,\n width: viewport.clientWidth,\n };\n\n if (viewportSize.height <= 0 || viewportSize.width <= 0) {\n return;\n }\n\n const currentSnapshot: MarkdownFitSnapshot = {\n contentHeight: content.scrollHeight,\n contentWidth: content.scrollWidth,\n mode,\n viewportHeight: viewportSize.height,\n viewportWidth: viewportSize.width,\n };\n const lastSnapshot = lastFitSnapshotRef.current;\n\n if (lastSnapshot && areFitSnapshotsEqual(lastSnapshot, currentSnapshot)) {\n return;\n }\n\n isFittingRef.current = true;\n\n try {\n const fontSize =\n mode === \"fit\"\n ? fitPresentationFontSize({\n viewport: viewportSize,\n measure: (candidateFontSize) => {\n content.style.setProperty(\n SLIDE_FONT_SIZE_PROPERTY,\n `${candidateFontSize}px`\n );\n\n // Read after the CSS variable update so wrapping and em-based\n // styles are included in the next compression step.\n return {\n height: content.scrollHeight,\n width: content.scrollWidth,\n };\n },\n })\n : resolvePresentationBaseFontSize(viewportSize);\n\n content.style.setProperty(SLIDE_FONT_SIZE_PROPERTY, `${fontSize}px`);\n content.dataset.markdownSlideFontSize = String(fontSize);\n lastFitSnapshotRef.current = {\n contentHeight: content.scrollHeight,\n contentWidth: content.scrollWidth,\n mode,\n viewportHeight: viewportSize.height,\n viewportWidth: viewportSize.width,\n };\n } finally {\n isFittingRef.current = false;\n }\n }, [mode]);\n\n const scheduleFit = useCallback(() => {\n if (mode === \"disabled\" || fitFrameRef.current !== null) {\n return;\n }\n\n fitFrameRef.current = window.requestAnimationFrame(() => {\n fitFrameRef.current = null;\n fitContent();\n });\n }, [fitContent, mode]);\n\n useIsomorphicLayoutEffect(() => {\n if (fitFrameRef.current !== null) {\n window.cancelAnimationFrame(fitFrameRef.current);\n fitFrameRef.current = null;\n }\n\n const content = contentRef.current;\n\n if (!content) {\n return;\n }\n\n if (mode === \"disabled\") {\n content.style.removeProperty(SLIDE_FONT_SIZE_PROPERTY);\n delete content.dataset.markdownSlideFontSize;\n lastFitSnapshotRef.current = null;\n return;\n }\n\n fitContent();\n }, [fitContent, mode]);\n\n useEffect(() => {\n const viewport = viewportRef.current;\n const content = contentRef.current;\n\n if (mode === \"disabled\" || !viewport || !content) {\n return;\n }\n\n const resizeObserver =\n typeof ResizeObserver === \"undefined\"\n ? null\n : new ResizeObserver(scheduleFit);\n resizeObserver?.observe(viewport);\n\n const handleContentChange = () => {\n lastFitSnapshotRef.current = null;\n scheduleFit();\n };\n const mutationObserver =\n mode === \"fit\" && typeof MutationObserver !== \"undefined\"\n ? new MutationObserver(handleContentChange)\n : null;\n\n if (mode === \"fit\") {\n resizeObserver?.observe(content);\n mutationObserver?.observe(content, {\n childList: true,\n characterData: true,\n subtree: true,\n });\n content.addEventListener(\"load\", handleContentChange, true);\n }\n\n window.addEventListener(\"resize\", scheduleFit);\n scheduleFit();\n\n return () => {\n resizeObserver?.disconnect();\n mutationObserver?.disconnect();\n\n if (mode === \"fit\") {\n content.removeEventListener(\"load\", handleContentChange, true);\n }\n\n window.removeEventListener(\"resize\", scheduleFit);\n\n if (fitFrameRef.current !== null) {\n window.cancelAnimationFrame(fitFrameRef.current);\n fitFrameRef.current = null;\n }\n };\n }, [mode, scheduleFit]);\n\n const isScaling = mode !== \"disabled\";\n\n return (\n <div\n ref={viewportRef}\n className={cn(className, isScaling && \"slide-markdown-scaling\")}\n data-markdown-slide-scaling={isScaling ? mode : undefined}\n {...props}\n >\n <div\n ref={contentRef}\n className={cn(\n \"slide-markdown-scaling__content flex w-full flex-col gap-4\",\n mode !== \"fit\" && \"slide-markdown-scaling__content--contents\"\n )}\n >\n {children}\n </div>\n </div>\n );\n};\n\nexport default MarkdownSlideScaling;\n"],"names":["SLIDE_FONT_SIZE_PROPERTY","useIsomorphicLayoutEffect","useEffect","useLayoutEffect","areFitSnapshotsEqual","left","right","MarkdownSlideScaling","children","className","mode","props","viewportRef","useRef","contentRef","fitFrameRef","isFittingRef","lastFitSnapshotRef","fitContent","useCallback","viewport","content","viewportSize","currentSnapshot","lastSnapshot","fontSize","fitPresentationFontSize","candidateFontSize","resolvePresentationBaseFontSize","scheduleFit","resizeObserver","handleContentChange","mutationObserver","isScaling","jsx","cn"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("../../_virtual/jsx-runtime.cjs.js"),t=require("react"),Wn=require("../../lib/sandboxInteraction.cjs.js"),te=require("../../lib/utils.cjs.js"),Jn=require("../ui/loading-overlay-card.cjs.js"),Gn=require("../ContentRender/ContentRender.cjs.js"),Dt=require("../ContentRender/IframeSandbox.cjs.js");require("../ui/inputGroup/input-group.cjs.js");require("../ContentRender/contentRenderI18n.cjs.js");const Kt=require("../../lib/interaction-defaults.cjs.js"),qe=require("../../lib/mobileDevice.cjs.js"),Hn=require("./Player.cjs.js"),zn=require("./SubtitleOverlay.cjs.js"),$n=require("./useSlide.cjs.js"),Yn=require("./useWakePlayerFromIframe.cjs.js"),Xn=require("./utils/playerKeyboardShortcutContext.cjs.js"),Qn=require("./utils/playerKeyboardShortcuts.cjs.js"),ye=require("./utils/mobileScreenMode.cjs.js"),Zn=require("./utils/interactionPlayback.cjs.js"),Ze=require("./utils/playerNavigationContext.cjs.js"),er=require("./utils/appendedMarkerAdvance.cjs.js"),Ut=require("./utils/playbackSequence.cjs.js"),et=require("./utils/subtitleJumpNavigation.cjs.js"),Wt=require("./utils/playerCustomActions.cjs.js"),tr=require("./utils/playbackTimeStore.cjs.js"),nr=require("./utils/playerToggleMode.cjs.js"),rr=require("./utils/playerVisibility.cjs.js"),Jt=require("./slideI18n.cjs.js");;/* empty css */const sr=require("../../node_modules/lucide-react/dist/esm/icons/chevron-left.cjs.js"),or=2e3,lr=300,ur=160,ir=16,tt="waitingForAudio",ar=(f,c)=>typeof f=="string"?f:f[c]??f[tt]??Jt.DEFAULT_SLIDE_BUFFERING_TEXTS[c],cr=(f,c)=>typeof f=="string"?f:{...c,...f},dr=(f,c)=>c?f!=="loadingAudio":!1,Gt=t.memo(({content:f,title:c,locale:N,defaultButtonText:ne,defaultInputText:O,defaultSelectedValues:L,confirmButtonText:U,copyButtonText:re,copiedButtonText:Se,onSend:Be,readonly:W=!1})=>s.jsxRuntimeExports.jsxs("div",{className:"slide-player__interaction-card",children:[s.jsxRuntimeExports.jsx("div",{className:"slide-player__interaction-header",children:s.jsxRuntimeExports.jsx("p",{className:"slide-player__interaction-title",children:c})}),s.jsxRuntimeExports.jsx("div",{className:"slide-player__interaction-body",children:s.jsxRuntimeExports.jsx(Gn.default,{content:f,locale:N,defaultButtonText:ne,defaultInputText:O,defaultSelectedValues:L,confirmButtonText:U,copyButtonText:re,copiedButtonText:Se,onSend:Be,readonly:W,sandboxMode:"content"})})]}));Gt.displayName="InteractionOverlayCard";const fr=(f,c)=>f.length===c.length&&f.every((N,ne)=>{const O=c[ne];return N.sequence_number===O?.sequence_number&&N.type===O?.type&&N.content===O?.content}),mr=({elementList:f=[],locale:c,playerEnabled:N,playerControlsVisibility:ne,playerClassName:O,fullscreenHeader:L,playerCustomActions:U,playerCustomActionPauseOnActive:re=!0,bufferingText:Se,interactionTitle:Be,interactionTexts:W,playerTexts:Ht,playerAutoHideDelay:Fe=3e3,markerAutoAdvanceDelay:nt=or,interactionDefaultValueOptions:ve,onSend:rt,onPlayerVisibilityChange:Ne,onMobileViewModeChange:st,onStepChange:ot,enableKeyboardShortcuts:J=!0,enableIframeScaling:zt=!0,disableLoadingOverlay:C=!1,className:$t,onPointerDown:lt,onFocusCapture:ut,...Yt})=>{const V=t.useMemo(()=>Jt.getSlideLocaleTexts(c),[c]),Xt=t.useMemo(()=>cr(Se,V.bufferingText),[Se,V.bufferingText]),{playerEnabled:Qt,playerControlsVisibility:q}=rr.resolveSlidePlayerVisibility({playerEnabled:N,playerControlsVisibility:ne}),Ee=t.useId(),se=t.useRef(null),it=t.useRef(null),Oe=t.useRef(null),at=t.useRef(null),G=t.useRef(null),ge=t.useRef(!1),oe=t.useRef(null),le=t.useRef(null),ue=t.useRef(null),ct=t.useRef(null),dt=t.useRef([]),ie=t.useRef(!1),D=t.useRef(null),ae=t.useRef(null),ft=t.useRef(0),mt=t.useRef(null),pt=t.useRef({markerCount:0,currentIndex:-1,canGoNext:!1}),Le=t.useRef(!1),{currentElementList:M,stepElementLists:ht,slideElementList:S,currentIndex:l,audioList:h,audioSlideIndexes:Ie,currentAudioSequenceIndexes:Ce,currentStepHasSpeakableElement:v,currentInteractionElement:d,canGoPrev:Zt,canGoNext:g,handlePrev:bt,handleNext:R,handleGoTo:xt}=$n.default(f),ce=t.useMemo(()=>{if(!(l<0))return S[l]},[l,S]),en=S.filter(e=>e.is_renderable!==!1).length===1,m=Qt&&(S.length>0||h.length>0||!!d),tn=t.useMemo(()=>({enabled:J,ownerId:Ee}),[J,Ee]),B=t.useCallback(()=>{!J||!m||Qn.activatePlayerKeyboardShortcutOwner(Ee)},[J,Ee,m]),A=t.useMemo(()=>Ce.map(e=>h[e]?.audioKey).filter(e=>!!e),[h,Ce]),[nn,de]=t.useState(!0),[Re,H]=t.useState(!1),[fe,yt]=t.useState(!0),[me,St]=t.useState(!0),[x,F]=t.useState(null),[rn,vt]=t.useState(null),[sn,b]=t.useState(!1),[on,Ve]=t.useState(tt),[k,De]=t.useState(!1),[ln,Ae]=t.useState(!1),[Et,un]=t.useState(!0),[Ke,Ue]=t.useState(!1),[o,We]=t.useState(),[ke,we]=t.useState(!1),[an,pe]=t.useState(0),[gt,cn]=t.useState(!1),T=t.useMemo(()=>qe.isMobileDevice(),[]),[Pe,Je]=t.useState(ye.DEFAULT_MOBILE_VIEW_MODE),[It,Ge]=t.useState(!1),[dn,Ct]=t.useState(()=>T?qe.isLandscapeViewport():!1),z=t.useMemo(()=>tr.createPlaybackTimeStore(),[]),{effectiveMobileViewMode:$,isImmersiveMobileFullscreen:Y,isNativeMobileFullscreen:Rt,shouldRotateFullscreenViewport:fn}=t.useMemo(()=>ye.resolveMobileViewModeState({hasManualMobileViewMode:It,isMobileDevice:T,mobileViewMode:Pe}),[It,T,dn,Pe]),mn=t.useRef($),E=m&&q!=="hidden"&&(q==="visible"||nn),pn=Y&&E,hn=Y&&E,bn=Y||Rt,At=gt&&!T,xn=t.useCallback(e=>{Ge(!0),Je(e)},[]),kt=t.useCallback(()=>{Ge(!1),Je(ye.DEFAULT_MOBILE_VIEW_MODE)},[]),yn=t.useCallback(()=>{kt(),L?.onBack?.()},[L,kt]),wt=t.useCallback(e=>{Ue(e)},[]),Pt=t.useCallback(()=>{Ue(e=>!e)},[]),{mountedStepStates:Sn,currentMountedStateIndex:vn}=t.useMemo(()=>{const e=[],n=new Map;return ht.forEach((u,i)=>{const r=e.findIndex(a=>fr(a.elementList,u));if(r>=0){e[r]?.sourceStepIndexes.push(i),n.set(i,r);return}e.push({elementList:u,sourceStepIndexes:[i]}),n.set(i,e.length-1)}),{mountedStepStates:e,currentMountedStateIndex:l>=0?n.get(l)??-1:-1}},[l,ht]),Mt=t.useMemo(()=>String(l),[l]),y=t.useMemo(()=>x?h.findIndex(e=>(e.audioKey??"")===x):-1,[h,x]),He=t.useMemo(()=>y>=0?h[y]:void 0,[h,y]),En=He?.element?.subtitle_cues??[],Me=t.useMemo(()=>A[0]??"none",[A]),ze=t.useMemo(()=>({currentElement:Wt.resolvePlayerCustomActionElement({currentAudioIndex:y,currentAudioSequenceIndexes:Ce,audioList:h,currentInteractionElement:o,currentStepElement:ce}),currentIndex:l,currentStepElement:ce,isActive:Ke,setActive:wt,toggleActive:Pt}),[o,h,y,Ce,l,ce,Ke,wt,Pt]),$e=t.useMemo(()=>Wt.getPlayerCustomActionCount(U,ze),[ze,U]),gn=t.useMemo(()=>({"--slide-player-custom-action-count":String($e),"--slide-player-mobile-control-count":String($e+4)}),[$e]),Tt=A.length>0,_t=t.useMemo(()=>d?`${d.sequence_number??"none"}:${String(d.content??"")}`:"none",[d]),he=t.useMemo(()=>[Mt,_t].join("|"),[_t,Mt]),In=t.useMemo(()=>[he,He?.audioKey??"none",String(y)].join("|"),[y,He?.audioKey,he]),jt=!!t.useMemo(()=>!Me||Me==="none"?"":h.find(n=>n.audioKey===Me)?.audioUrl?.trim()??"",[h,Me]),K=re&&!!U&&Ke,be=t.useMemo(()=>nr.shouldUseAutoAdvanceToggle({canGoNext:g,currentAudioIndex:y,currentStepHasSpeakableElement:v,hasInteraction:!!d}),[g,y,d,v]),_=t.useCallback(()=>{G.current!==null&&(window.clearTimeout(G.current),G.current=null)},[]),j=t.useCallback(()=>{le.current!==null&&(window.clearTimeout(le.current),le.current=null)},[]),w=t.useCallback(()=>{ue.current!==null&&(window.clearTimeout(ue.current),ue.current=null)},[]),X=t.useCallback(()=>{oe.current!==null&&(window.clearTimeout(oe.current),oe.current=null)},[]),P=t.useCallback((e={})=>{X(),j(),w(),F(null),z.reset(),b(!1),Ve(tt),De(!1),Ae(!1),vt(null),e.preservePendingSubtitleJump||(ae.current=null),We(void 0),we(!1),pe(0)},[X,j,w,z]),Te=t.useCallback(e=>{ft.current+=1,vt({...e,id:ft.current})},[]),Q=t.useCallback(()=>{const e=A[0];return e?(F(e),!0):!1},[A]),_e=t.useCallback(()=>{j(),w(),we(!1),pe(0),!Q()&&g&&R()},[g,j,w,R,Q]),qt=t.useCallback(e=>{if(w(),!e)return;const n=()=>{ue.current=null,pe(ur),we(!0),D.current=null};ue.current=window.setTimeout(n,lr)},[w]),Ye=t.useCallback(()=>ge.current||!!se.current?.querySelector(".slide-player__controls:hover"),[]),p=t.useCallback((e=Re)=>{!m||q==="hidden"||(de(!0),_(),!(q==="visible"||!e||Fe<=0||Ye())&&(G.current=window.setTimeout(()=>{if(Ye()){G.current=null;return}de(!1),G.current=null},Fe)))},[_,Re,Ye,Fe,q,m]),xe=!!et.hasResolvedInteractionElement(d),Z=!!d&&!xe,Cn=t.useCallback(e=>{yt(e)},[]),ee=t.useCallback(e=>{const n=e?.shouldContinuePlayback??fe;yt(n)},[fe]);t.useEffect(()=>{St(fe),re&&Ue(!1)},[l,fe,re]),t.useEffect(()=>()=>{X(),_(),j(),w()},[X,j,w,_]),t.useEffect(()=>(Ne?.(E),()=>{Ne?.(!1)}),[Ne,E]),t.useEffect(()=>{E||(ge.current=!1)},[E]),t.useEffect(()=>{T||Pe===ye.DEFAULT_MOBILE_VIEW_MODE||(Ge(!1),Je(ye.DEFAULT_MOBILE_VIEW_MODE))},[T,Pe]),t.useEffect(()=>{if(!T){Ct(!1);return}const e=()=>{Ct(qe.isLandscapeViewport())};return e(),qe.subscribeMobileDeviceChange(e)},[T]),t.useEffect(()=>{st?.($)},[$,st]),t.useEffect(()=>{mn.current=$},[$]),t.useEffect(()=>{ot?.(ce,l)},[l,ce,ot]),t.useEffect(()=>{const e=pt.current,n=er.shouldAutoAdvanceIntoAppendedMarker({previousMarkerCount:e.markerCount,nextMarkerCount:S.length,previousIndex:e.currentIndex,previousCanGoNext:e.canGoNext,nextCanGoNext:g,currentAudioKey:x,hasCompletedCurrentStepAudio:k,hasResolvedCurrentInteraction:xe,currentStepHasSpeakableElement:v,currentInteractionElement:d,isAutoAdvanceEnabled:me,shouldUseSilentStepAutoAdvanceToggle:be});pt.current={markerCount:S.length,currentIndex:l,canGoNext:g},n&&R()},[g,x,l,d,v,R,k,xe,me,be,S.length]),t.useEffect(()=>{if(!m||q==="hidden"){_(),de(!1);return}if(q==="visible"){_(),de(!0);return}Re||p(!0)},[_,Re,q,m,p]),t.useEffect(()=>{if(typeof window>"u")return;const e=n=>{n.origin===window.location.origin&&Wn.isSandboxInteractionMessage(n.data)&&n.data.eventType==="click"&&m&&(B(),H(!0),p(!0))};return window.addEventListener("message",e),()=>{window.removeEventListener("message",e)}},[B,m,p]),Yn.default({sectionRef:se,enabled:m,keyboardShortcutsEnabled:J,onKeyboardShortcut:B,onWake:()=>{B(),H(!0),p(!0)}}),t.useEffect(()=>{if(!m){P();return}const{hasPlaybackContextChanged:e,shouldInitializeAudioSequence:n}=Ut.getPlaybackSequenceTransition({previousResetKey:mt.current,nextResetKey:he,currentAudioKey:x,hasCompletedCurrentStepAudio:k});mt.current=he;const u=D.current===l&&!!d,i=Zn.shouldPresentInteractionOverlay({hasInteraction:!!d,shouldBlockPlaybackForInteraction:Z,shouldOpenInteractionOverlayAfterAudio:u,hasPlaybackContextChanged:e,hasResolvedCurrentInteraction:xe,currentStepHasSpeakableElement:v}),r=ae.current,a=r?.slideIndex===l;if(e&&P({preservePendingSubtitleJump:a}),!(M.length===0&&!d)&&!K){if(r?.slideIndex===l&&et.canReachSubtitleJumpTarget({currentIndex:l,resolvedCurrentInteractionElement:o,slideElementList:S,targetSlideIndex:r.slideIndex})){ae.current=null,Le.current=!0,F(r.audioKey),Te({audioIndex:r.audioIndex,timeMs:r.timeMs});return}if(d&&We(d),i){qt(d);return}if(w(),D.current=null,!!n&&!Q()){if(v){if(C){b(!1);return}b(!0);return}if(g&&!(be&&!me))return oe.current=window.setTimeout(()=>{oe.current=null,R()},nt),()=>{X()}}}},[o,g,X,M.length,l,d,x,he,v,nt,R,k,C,me,xe,Z,w,P,Te,qt,m,S,Q,K,be]),t.useEffect(()=>{if(C||K||!v||Z){b(!1);return}if(k){b(!1);return}if(Tt){b(!1);return}Ve("waitingForAudio"),b(!0)},[Tt,v,k,C,K,Z]),t.useEffect(()=>{const e=Le.current;Le.current=!1,Ut.shouldStartDefaultAudioSequence({currentAudioKey:x,currentAudioSequenceLength:A.length,currentStepHasSpeakableElement:v,hasCompletedCurrentStepAudio:k,shouldBlockPlaybackForInteraction:Z,shouldPausePlaybackForCustomAction:K,shouldSkipDefaultAudioStart:e})&&Q()},[x,A,v,k,K,Z,Q]),t.useEffect(()=>{!x||y>=0||F(null)},[y,x]),t.useEffect(()=>{y>=0||z.reset()},[y,z]),t.useEffect(()=>{Ae(!1)},[In]);const Bt=t.useMemo(()=>{if(!o)return{};const e=!!o.user_input?.trim();return Kt.getInteractionDefaultValues(typeof o.content=="string"?o.content:void 0,o.user_input,e?void 0:ve)},[o,ve]),Rn=t.useMemo(()=>{if(!o)return;const e=!!o.user_input?.trim();return Kt.getInteractionDefaultSelectedValues(typeof o.content=="string"?o.content:void 0,o.user_input,e?void 0:ve)},[o,ve]),Ft=!!o?.user_input?.trim(),Nt=!!o?.readonly||Ft,Ot=Nt||Ft,Xe=!!o&&ke,An=t.useCallback(e=>{const u=[...e.selectedValues??[],e.inputText?.trim()??"",e.buttonText?.trim()??""].filter(Boolean).join(", ");We(i=>!i||!u?i:{...i,user_input:u}),rt?.(e,o),_e()},[o,_e,rt]);t.useEffect(()=>{const e=()=>{cn(document.fullscreenElement===se.current)};return e(),document.addEventListener("fullscreenchange",e),()=>{document.removeEventListener("fullscreenchange",e)}},[]),t.useEffect(()=>{if(!Xe){pe(0);return}const e=ct.current;if(!e)return;const n=()=>{const i=Math.ceil(e.getBoundingClientRect().height);pe(i+ir)};if(n(),typeof ResizeObserver>"u")return;const u=new ResizeObserver(()=>{n()});return u.observe(e),()=>{u.disconnect()}},[Xe]),t.useEffect(()=>{if(j(),!(!ke||!Ot))return le.current=window.setTimeout(()=>{le.current=null,_e()},2e3),()=>{j()}},[j,_e,ke,Ot]);const kn=(e,n={})=>e?e.type==="slot"?s.jsxRuntimeExports.jsx(s.jsxRuntimeExports.Fragment,{children:e.content}):e.type==="html"?s.jsxRuntimeExports.jsx(Dt.default,{className:"content-render-iframe",disableLoadingOverlay:C,hideFullScreen:!0,locale:c,mode:"blackboard",replaceRootScreenHeightWithFull:n.replaceRootScreenHeightWithFull,type:"sandbox",content:e.content,enableScaling:zt}):s.jsxRuntimeExports.jsx(Dt.default,{className:"content-render-iframe",disableLoadingOverlay:C,hideFullScreen:!0,locale:c,mode:"blackboard",type:"markdown",content:e.content}):null,wn=(e=[],n=!1)=>{if(e.length===0)return null;const u=e.filter(r=>r.is_renderable!==!1).length,i=e.reduce((r,a,I)=>a.is_renderable!==!1?I:r,-1);return s.jsxRuntimeExports.jsx("div",{className:"slide-stage__content flex w-full flex-col gap-4",children:e.map((r,a)=>{const I=r.type==="html"&&r.is_renderable===!1;return s.jsxRuntimeExports.jsx("div",{ref:n&&a===i?at:null,"aria-hidden":I||void 0,className:te.cn("w-full shrink-0",u===1&&r.is_renderable!==!1&&"slide-element--single",I?"pointer-events-none fixed left-[-200vw] top-0 -z-10 h-[100dvh] w-[100vw] overflow-hidden opacity-0":r.is_renderable===!1&&"hidden"),children:kn(r,{replaceRootScreenHeightWithFull:u===1&&r.type==="html"&&r.is_renderable!==!1})},r.sequence_number??`${r.type}-${a}`)})})},Pn=t.useCallback(()=>{const e=se.current;if(e){if(document.fullscreenElement===e){document.exitFullscreen().catch(()=>{});return}e.requestFullscreen?.().catch(()=>{})}},[]),Lt=t.useCallback(()=>{const e=Oe.current;e&&e.scrollTo({top:e.scrollHeight,behavior:"smooth"})},[]),Qe=t.useCallback(e=>et.canReachSubtitleJumpTarget({currentIndex:l,resolvedCurrentInteractionElement:o,slideElementList:S,targetSlideIndex:Ie[e.audioIndex]}),[o,Ie,l,S]),Mn=t.useCallback((e,n)=>{const i=h[e.audioIndex]?.audioKey,r=Ie[e.audioIndex];return!i||r==null||!Qe(e)?!1:(ee(n),D.current=null,b(!1),De(!1),Ae(!1),Ze.shouldWakePlayerControlsAfterNavigation(n)&&(H(!0),p(!0)),r===l?(ae.current=null,P(),F(i),Te(e),!0):(ie.current=!0,P(),ae.current={audioIndex:e.audioIndex,audioKey:i,slideIndex:r,timeMs:e.timeMs},xt(r),!0))},[h,Ie,Qe,l,xt,Te,P,p,ee]),Tn=t.useCallback(e=>{ee(e),ie.current=!0,D.current=null,b(!1),Ze.shouldWakePlayerControlsAfterNavigation(e)&&(H(!0),p(!0)),P(),bt()},[bt,P,p,ee]),_n=t.useCallback(e=>{ee(e),ie.current=!0,D.current=null,b(!1),Ze.shouldWakePlayerControlsAfterNavigation(e)&&(H(!0),p(!0)),P(),R()},[R,P,p,ee]),jn=t.useCallback(({loading:e,reason:n})=>{if(C){b(!1);return}if(!v||k){b(!1);return}e&&n&&Ve(n),b(dr(n,e))},[v,k,C]);t.useEffect(()=>{C&&b(!1)},[C]);const qn=t.useCallback(e=>{const n=h[e]?.audioKey;if(!n||!x||n!==x)return;const u=A.findIndex(a=>a===n);if(u<0){F(null);return}const i=u+1,r=A[i];if(r){F(r);return}if(F(null),De(!0),b(!1),g){const a=l+1,I=S[a];jt&&I?.type==="interaction"&&(D.current=a),R();return}},[h,g,l,x,A,R,jt,S]),Bn=t.useCallback(()=>{o&&we(e=>!e)},[o]),Fn=t.useCallback(()=>{ge.current=!0,_(),m&&de(!0)},[_,m]),Nn=t.useCallback(()=>{ge.current=!1,p(!0)},[p]),Vt=t.useCallback(e=>{e.stopPropagation(),E&&p(!0)},[E,p]),On=t.useCallback(e=>{B(),lt?.(e)},[B,lt]),Ln=t.useCallback(e=>{B(),ut?.(e)},[B,ut]),Vn=t.useCallback(()=>{H(!0),p(!0)},[p]),je=t.useMemo(()=>M.map((e,n)=>`${e.sequence_number??`${e.type}-${n}`}:${String(e.is_new??"")}`),[M]);return t.useEffect(()=>{const e=dt.current,i=(e.length>0&&e.length<je.length&&e.every((a,I)=>a===je[I])?M.slice(e.length):[]).some(a=>a.is_new===!1);if(dt.current=je,!i)return;const r=window.requestAnimationFrame(()=>{const a=Oe.current,I=at.current;if(!a||!I)return;const Dn=a.getBoundingClientRect(),Kn=I.getBoundingClientRect(),Un=a.scrollTop+(Kn.top-Dn.top);a.scrollTo({top:Math.max(Un,0),behavior:"smooth"})});return()=>{window.cancelAnimationFrame(r)}},[M,je]),t.useEffect(()=>{if(!ie.current||(ie.current=!1,M.length===0))return;const e=window.requestAnimationFrame(()=>{Lt()});return()=>{window.cancelAnimationFrame(e)}},[M,Lt]),s.jsxRuntimeExports.jsxs("section",{ref:se,className:te.cn("relative h-full w-full",T&&"slide--mobile-device",At&&"slide--browser-fullscreen",Y&&"slide--mobile-landscape",Rt&&"slide--mobile-landscape-native",$t),onClick:Vn,onFocusCapture:Ln,onPointerDown:On,...Yt,children:[bn?s.jsxRuntimeExports.jsx("div",{"aria-hidden":"true",className:"pointer-events-none fixed left-0 top-0 z-[9999] h-[100vh] max-h-[100vh] w-[100vw]"}):null,s.jsxRuntimeExports.jsxs("div",{ref:it,className:te.cn("slide__viewport relative h-full min-h-0 w-full",Y&&"slide__viewport--mobile-landscape",Y&&!fn&&"slide__viewport--mobile-landscape-native"),children:[pn?s.jsxRuntimeExports.jsxs("div",{className:"slide-landscape-header",children:[s.jsxRuntimeExports.jsx("button",{"aria-label":L?.backAriaLabel??V.fullscreenBackAriaLabel,className:"slide-landscape-header__back",onClick:yn,type:"button",children:s.jsxRuntimeExports.jsx(sr.default,{className:"slide-landscape-header__icon h-6 w-6",strokeWidth:2.25})}),L?.content?s.jsxRuntimeExports.jsx("div",{className:"min-w-0 flex-1 overflow-hidden",children:L.content}):null]}):null,s.jsxRuntimeExports.jsx("div",{className:te.cn("h-full min-h-0 w-full",hn&&"slide__viewport-content--with-header",en?"slide-content--single":"grid gap-4"),children:M.length>0?s.jsxRuntimeExports.jsx("div",{className:"slide-stage",children:s.jsxRuntimeExports.jsx("div",{ref:Oe,className:"slide-stage__layer w-full",children:Sn.map((e,n)=>{const u=n===vn;return s.jsxRuntimeExports.jsx("div",{"aria-hidden":!u||void 0,className:"w-full h-full",style:{display:u?void 0:"none"},children:wn(e.elementList,u)},e.sourceStepIndexes[0]??n)})})}):null}),sn?s.jsxRuntimeExports.jsx(Jn.default,{message:ar(Xt,on),className:"absolute left-1/2 top-1/2 z-[3] -translate-x-1/2 -translate-y-1/2"}):null,s.jsxRuntimeExports.jsx(zn.default,{extraBottomOffset:an,hasPlayerGap:E,isEnabled:Et&&ln,isPlayerHidden:m&&!E,playbackTimeStore:z,subtitleCues:En}),Xe?s.jsxRuntimeExports.jsx("div",{ref:ct,"data-player-keyboard-shortcuts-ignore":"true",className:te.cn("slide-interaction-overlay",E&&m?"slide-interaction-overlay--with-player":"slide-interaction-overlay--standalone"),onClick:Vt,onPointerDown:Vt,style:gn,children:s.jsxRuntimeExports.jsx(Gt,{content:String(o?.content??""),locale:c,defaultButtonText:Bt.buttonText??"",defaultInputText:Bt.inputText??"",defaultSelectedValues:Rn,confirmButtonText:W?.confirmButtonText??V.interactionTexts.confirmButtonText,copyButtonText:W?.copyButtonText??V.interactionTexts.copyButtonText,copiedButtonText:W?.copiedButtonText??V.interactionTexts.copiedButtonText,onSend:An,readonly:Nt,title:W?.title??Be??V.interactionTexts.title})}):null,m?s.jsxRuntimeExports.jsx(Xn.PlayerKeyboardShortcutContext.Provider,{value:tn,children:s.jsxRuntimeExports.jsx(Hn.default,{audioList:h,className:te.cn("absolute left-1/2 z-[2] -translate-x-1/2",At?"bottom-3":"-bottom-3",O,!E&&"pointer-events-none opacity-0"),currentAudioIndex:y,defaultPlaying:fe,enableKeyboardShortcuts:J,isPlaybackPaused:K,isAutoAdvanceEnabled:me,locale:c,hasInteraction:!!o,isInteractionOpen:ke,isSubtitleEnabled:Et,onAutoAdvanceToggle:St,onLoadingChange:jn,onPlaybackStarted:()=>{Ae(!0)},onPlaybackPreferenceChange:Cn,onPlaybackTimeChange:z.setTime,onSubtitleToggle:()=>{un(e=>!e)},nextDisabled:!g,onEnded:qn,onFullscreen:Pn,isFullscreen:gt,mobileViewMode:$,settingsPortalContainer:it.current,onMobileViewModeChange:xn,onControlsPointerEnter:Fn,onControlsPointerLeave:Nn,onInteractionToggle:Bn,onNext:_n,onPrev:Tn,onSubtitleJump:Mn,canJumpToSubtitleTarget:Qe,prevDisabled:!Zt,showControls:E,subtitleSeekRequest:rn,texts:Ht,customActionContext:ze,customActions:U,useAutoAdvanceToggle:be})}):null]})]})};exports.default=mr;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("../../_virtual/jsx-runtime.cjs.js"),t=require("react"),Jn=require("../../lib/sandboxInteraction.cjs.js"),ne=require("../../lib/utils.cjs.js"),Gn=require("../ui/loading-overlay-card.cjs.js"),Hn=require("../ContentRender/ContentRender.cjs.js"),Kt=require("../ContentRender/IframeSandbox.cjs.js");require("../ui/inputGroup/input-group.cjs.js");require("../ContentRender/contentRenderI18n.cjs.js");const Ut=require("../../lib/interaction-defaults.cjs.js"),Be=require("../../lib/mobileDevice.cjs.js"),zn=require("./Player.cjs.js"),$n=require("./MarkdownSlideScaling.cjs.js"),Yn=require("./SubtitleOverlay.cjs.js"),Xn=require("./useSlide.cjs.js"),Qn=require("./useWakePlayerFromIframe.cjs.js"),Zn=require("./utils/playerKeyboardShortcutContext.cjs.js"),er=require("./utils/playerKeyboardShortcuts.cjs.js"),ye=require("./utils/mobileScreenMode.cjs.js"),tr=require("./utils/interactionPlayback.cjs.js"),nr=require("./utils/markdownScaling.cjs.js"),et=require("./utils/playerNavigationContext.cjs.js"),rr=require("./utils/appendedMarkerAdvance.cjs.js"),Wt=require("./utils/playbackSequence.cjs.js"),tt=require("./utils/subtitleJumpNavigation.cjs.js"),Jt=require("./utils/playerCustomActions.cjs.js"),sr=require("./utils/playbackTimeStore.cjs.js"),or=require("./utils/playerToggleMode.cjs.js"),lr=require("./utils/playerVisibility.cjs.js"),Gt=require("./slideI18n.cjs.js");;/* empty css */const ur=require("../../node_modules/lucide-react/dist/esm/icons/chevron-left.cjs.js"),ir=2e3,ar=300,cr=160,dr=16,nt="waitingForAudio",fr=(f,c)=>typeof f=="string"?f:f[c]??f[nt]??Gt.DEFAULT_SLIDE_BUFFERING_TEXTS[c],mr=(f,c)=>typeof f=="string"?f:{...c,...f},pr=(f,c)=>c?f!=="loadingAudio":!1,Ht=t.memo(({content:f,title:c,locale:N,defaultButtonText:re,defaultInputText:O,defaultSelectedValues:L,confirmButtonText:U,copyButtonText:se,copiedButtonText:ve,onSend:Fe,readonly:W=!1})=>s.jsxRuntimeExports.jsxs("div",{className:"slide-player__interaction-card",children:[s.jsxRuntimeExports.jsx("div",{className:"slide-player__interaction-header",children:s.jsxRuntimeExports.jsx("p",{className:"slide-player__interaction-title",children:c})}),s.jsxRuntimeExports.jsx("div",{className:"slide-player__interaction-body",children:s.jsxRuntimeExports.jsx(Hn.default,{content:f,locale:N,defaultButtonText:re,defaultInputText:O,defaultSelectedValues:L,confirmButtonText:U,copyButtonText:se,copiedButtonText:ve,onSend:Fe,readonly:W,sandboxMode:"content"})})]}));Ht.displayName="InteractionOverlayCard";const hr=(f,c)=>f.length===c.length&&f.every((N,re)=>{const O=c[re];return N.sequence_number===O?.sequence_number&&N.type===O?.type&&N.content===O?.content}),br=({elementList:f=[],locale:c,playerEnabled:N,playerControlsVisibility:re,playerClassName:O,fullscreenHeader:L,playerCustomActions:U,playerCustomActionPauseOnActive:se=!0,bufferingText:ve,interactionTitle:Fe,interactionTexts:W,playerTexts:zt,playerAutoHideDelay:Ne=3e3,markerAutoAdvanceDelay:rt=ir,interactionDefaultValueOptions:Ee,onSend:st,onPlayerVisibilityChange:Oe,onMobileViewModeChange:ot,onStepChange:lt,enableKeyboardShortcuts:J=!0,enableIframeScaling:$t=!0,enableMarkdownScaling:Yt=!0,disableLoadingOverlay:C=!1,className:Xt,onPointerDown:ut,onFocusCapture:it,...Qt})=>{const V=t.useMemo(()=>Gt.getSlideLocaleTexts(c),[c]),Zt=t.useMemo(()=>mr(ve,V.bufferingText),[ve,V.bufferingText]),{playerEnabled:en,playerControlsVisibility:q}=lr.resolveSlidePlayerVisibility({playerEnabled:N,playerControlsVisibility:re}),ge=t.useId(),oe=t.useRef(null),at=t.useRef(null),Le=t.useRef(null),ct=t.useRef(null),G=t.useRef(null),Ie=t.useRef(!1),le=t.useRef(null),ue=t.useRef(null),ie=t.useRef(null),dt=t.useRef(null),ft=t.useRef([]),ae=t.useRef(!1),D=t.useRef(null),ce=t.useRef(null),mt=t.useRef(0),pt=t.useRef(null),ht=t.useRef({markerCount:0,currentIndex:-1,canGoNext:!1}),Ve=t.useRef(!1),{currentElementList:P,stepElementLists:bt,slideElementList:y,currentIndex:l,audioList:h,audioSlideIndexes:Ce,currentAudioSequenceIndexes:Re,currentStepHasSpeakableElement:v,currentInteractionElement:d,canGoPrev:tn,canGoNext:g,handlePrev:xt,handleNext:R,handleGoTo:St}=Xn.default(f),de=t.useMemo(()=>{if(!(l<0))return y[l]},[l,y]),nn=y.filter(e=>e.is_renderable!==!1).length===1,m=en&&(y.length>0||h.length>0||!!d),rn=t.useMemo(()=>({enabled:J,ownerId:ge}),[J,ge]),B=t.useCallback(()=>{!J||!m||er.activatePlayerKeyboardShortcutOwner(ge)},[J,ge,m]),A=t.useMemo(()=>Re.map(e=>h[e]?.audioKey).filter(e=>!!e),[h,Re]),[sn,fe]=t.useState(!0),[Ae,H]=t.useState(!1),[me,yt]=t.useState(!0),[pe,vt]=t.useState(!0),[x,F]=t.useState(null),[on,Et]=t.useState(null),[ln,b]=t.useState(!1),[un,De]=t.useState(nt),[k,Ke]=t.useState(!1),[an,ke]=t.useState(!1),[gt,cn]=t.useState(!0),[Ue,We]=t.useState(!1),[o,Je]=t.useState(),[we,Me]=t.useState(!1),[dn,he]=t.useState(0),[It,fn]=t.useState(!1),T=t.useMemo(()=>Be.isMobileDevice(),[]),[Pe,Ge]=t.useState(ye.DEFAULT_MOBILE_VIEW_MODE),[Ct,He]=t.useState(!1),[mn,Rt]=t.useState(()=>T?Be.isLandscapeViewport():!1),z=t.useMemo(()=>sr.createPlaybackTimeStore(),[]),{effectiveMobileViewMode:$,isImmersiveMobileFullscreen:Y,isNativeMobileFullscreen:At,shouldRotateFullscreenViewport:pn}=t.useMemo(()=>ye.resolveMobileViewModeState({hasManualMobileViewMode:Ct,isMobileDevice:T,mobileViewMode:Pe}),[Ct,T,mn,Pe]),hn=t.useRef($),E=m&&q!=="hidden"&&(q==="visible"||sn),bn=Y&&E,xn=Y&&E,Sn=Y||At,kt=It&&!T,yn=t.useCallback(e=>{He(!0),Ge(e)},[]),wt=t.useCallback(()=>{He(!1),Ge(ye.DEFAULT_MOBILE_VIEW_MODE)},[]),vn=t.useCallback(()=>{wt(),L?.onBack?.()},[L,wt]),Mt=t.useCallback(e=>{We(e)},[]),Pt=t.useCallback(()=>{We(e=>!e)},[]),{mountedStepStates:En,currentMountedStateIndex:gn}=t.useMemo(()=>{const e=[],n=new Map;return bt.forEach((u,i)=>{const a=e.findIndex(r=>hr(r.elementList,u));if(a>=0){e[a]?.sourceStepIndexes.push(i),n.set(i,a);return}e.push({elementList:u,sourceStepIndexes:[i]}),n.set(i,e.length-1)}),{mountedStepStates:e,currentMountedStateIndex:l>=0?n.get(l)??-1:-1}},[l,bt]),Tt=t.useMemo(()=>String(l),[l]),S=t.useMemo(()=>x?h.findIndex(e=>(e.audioKey??"")===x):-1,[h,x]),ze=t.useMemo(()=>S>=0?h[S]:void 0,[h,S]),In=ze?.element?.subtitle_cues??[],Te=t.useMemo(()=>A[0]??"none",[A]),$e=t.useMemo(()=>({currentElement:Jt.resolvePlayerCustomActionElement({currentAudioIndex:S,currentAudioSequenceIndexes:Re,audioList:h,currentInteractionElement:o,currentStepElement:de}),currentIndex:l,currentStepElement:de,isActive:Ue,setActive:Mt,toggleActive:Pt}),[o,h,S,Re,l,de,Ue,Mt,Pt]),Ye=t.useMemo(()=>Jt.getPlayerCustomActionCount(U,$e),[$e,U]),Cn=t.useMemo(()=>({"--slide-player-custom-action-count":String(Ye),"--slide-player-mobile-control-count":String(Ye+4)}),[Ye]),_t=A.length>0,jt=t.useMemo(()=>d?`${d.sequence_number??"none"}:${String(d.content??"")}`:"none",[d]),be=t.useMemo(()=>[Tt,jt].join("|"),[jt,Tt]),Rn=t.useMemo(()=>[be,ze?.audioKey??"none",String(S)].join("|"),[S,ze?.audioKey,be]),qt=!!t.useMemo(()=>!Te||Te==="none"?"":h.find(n=>n.audioKey===Te)?.audioUrl?.trim()??"",[h,Te]),K=se&&!!U&&Ue,xe=t.useMemo(()=>or.shouldUseAutoAdvanceToggle({canGoNext:g,currentAudioIndex:S,currentStepHasSpeakableElement:v,hasInteraction:!!d}),[g,S,d,v]),_=t.useCallback(()=>{G.current!==null&&(window.clearTimeout(G.current),G.current=null)},[]),j=t.useCallback(()=>{ue.current!==null&&(window.clearTimeout(ue.current),ue.current=null)},[]),w=t.useCallback(()=>{ie.current!==null&&(window.clearTimeout(ie.current),ie.current=null)},[]),X=t.useCallback(()=>{le.current!==null&&(window.clearTimeout(le.current),le.current=null)},[]),M=t.useCallback((e={})=>{X(),j(),w(),F(null),z.reset(),b(!1),De(nt),Ke(!1),ke(!1),Et(null),e.preservePendingSubtitleJump||(ce.current=null),Je(void 0),Me(!1),he(0)},[X,j,w,z]),_e=t.useCallback(e=>{mt.current+=1,Et({...e,id:mt.current})},[]),Q=t.useCallback(()=>{const e=A[0];return e?(F(e),!0):!1},[A]),je=t.useCallback(()=>{j(),w(),Me(!1),he(0),!Q()&&g&&R()},[g,j,w,R,Q]),Bt=t.useCallback(e=>{if(w(),!e)return;const n=()=>{ie.current=null,he(cr),Me(!0),D.current=null};ie.current=window.setTimeout(n,ar)},[w]),Xe=t.useCallback(()=>Ie.current||!!oe.current?.querySelector(".slide-player__controls:hover"),[]),p=t.useCallback((e=Ae)=>{!m||q==="hidden"||(fe(!0),_(),!(q==="visible"||!e||Ne<=0||Xe())&&(G.current=window.setTimeout(()=>{if(Xe()){G.current=null;return}fe(!1),G.current=null},Ne)))},[_,Ae,Xe,Ne,q,m]),Se=!!tt.hasResolvedInteractionElement(d),Z=!!d&&!Se,An=t.useCallback(e=>{yt(e)},[]),ee=t.useCallback(e=>{const n=e?.shouldContinuePlayback??me;yt(n)},[me]);t.useEffect(()=>{vt(me),se&&We(!1)},[l,me,se]),t.useEffect(()=>()=>{X(),_(),j(),w()},[X,j,w,_]),t.useEffect(()=>(Oe?.(E),()=>{Oe?.(!1)}),[Oe,E]),t.useEffect(()=>{E||(Ie.current=!1)},[E]),t.useEffect(()=>{T||Pe===ye.DEFAULT_MOBILE_VIEW_MODE||(He(!1),Ge(ye.DEFAULT_MOBILE_VIEW_MODE))},[T,Pe]),t.useEffect(()=>{if(!T){Rt(!1);return}const e=()=>{Rt(Be.isLandscapeViewport())};return e(),Be.subscribeMobileDeviceChange(e)},[T]),t.useEffect(()=>{ot?.($)},[$,ot]),t.useEffect(()=>{hn.current=$},[$]),t.useEffect(()=>{lt?.(de,l)},[l,de,lt]),t.useEffect(()=>{const e=ht.current,n=rr.shouldAutoAdvanceIntoAppendedMarker({previousMarkerCount:e.markerCount,nextMarkerCount:y.length,previousIndex:e.currentIndex,previousCanGoNext:e.canGoNext,nextCanGoNext:g,currentAudioKey:x,hasCompletedCurrentStepAudio:k,hasResolvedCurrentInteraction:Se,currentStepHasSpeakableElement:v,currentInteractionElement:d,isAutoAdvanceEnabled:pe,shouldUseSilentStepAutoAdvanceToggle:xe});ht.current={markerCount:y.length,currentIndex:l,canGoNext:g},n&&R()},[g,x,l,d,v,R,k,Se,pe,xe,y.length]),t.useEffect(()=>{if(!m||q==="hidden"){_(),fe(!1);return}if(q==="visible"){_(),fe(!0);return}Ae||p(!0)},[_,Ae,q,m,p]),t.useEffect(()=>{if(typeof window>"u")return;const e=n=>{n.origin===window.location.origin&&Jn.isSandboxInteractionMessage(n.data)&&n.data.eventType==="click"&&m&&(B(),H(!0),p(!0))};return window.addEventListener("message",e),()=>{window.removeEventListener("message",e)}},[B,m,p]),Qn.default({sectionRef:oe,enabled:m,keyboardShortcutsEnabled:J,onKeyboardShortcut:B,onWake:()=>{B(),H(!0),p(!0)}}),t.useEffect(()=>{if(!m){M();return}const{hasPlaybackContextChanged:e,shouldInitializeAudioSequence:n}=Wt.getPlaybackSequenceTransition({previousResetKey:pt.current,nextResetKey:be,currentAudioKey:x,hasCompletedCurrentStepAudio:k});pt.current=be;const u=D.current===l&&!!d,i=tr.shouldPresentInteractionOverlay({hasInteraction:!!d,shouldBlockPlaybackForInteraction:Z,shouldOpenInteractionOverlayAfterAudio:u,hasPlaybackContextChanged:e,hasResolvedCurrentInteraction:Se,currentStepHasSpeakableElement:v}),a=ce.current,r=a?.slideIndex===l;if(e&&M({preservePendingSubtitleJump:r}),!(P.length===0&&!d)&&!K){if(a?.slideIndex===l&&tt.canReachSubtitleJumpTarget({currentIndex:l,resolvedCurrentInteractionElement:o,slideElementList:y,targetSlideIndex:a.slideIndex})){ce.current=null,Ve.current=!0,F(a.audioKey),_e({audioIndex:a.audioIndex,timeMs:a.timeMs});return}if(d&&Je(d),i){Bt(d);return}if(w(),D.current=null,!!n&&!Q()){if(v){if(C){b(!1);return}b(!0);return}if(g&&!(xe&&!pe))return le.current=window.setTimeout(()=>{le.current=null,R()},rt),()=>{X()}}}},[o,g,X,P.length,l,d,x,be,v,rt,R,k,C,pe,Se,Z,w,M,_e,Bt,m,y,Q,K,xe]),t.useEffect(()=>{if(C||K||!v||Z){b(!1);return}if(k){b(!1);return}if(_t){b(!1);return}De("waitingForAudio"),b(!0)},[_t,v,k,C,K,Z]),t.useEffect(()=>{const e=Ve.current;Ve.current=!1,Wt.shouldStartDefaultAudioSequence({currentAudioKey:x,currentAudioSequenceLength:A.length,currentStepHasSpeakableElement:v,hasCompletedCurrentStepAudio:k,shouldBlockPlaybackForInteraction:Z,shouldPausePlaybackForCustomAction:K,shouldSkipDefaultAudioStart:e})&&Q()},[x,A,v,k,K,Z,Q]),t.useEffect(()=>{!x||S>=0||F(null)},[S,x]),t.useEffect(()=>{S>=0||z.reset()},[S,z]),t.useEffect(()=>{ke(!1)},[Rn]);const Ft=t.useMemo(()=>{if(!o)return{};const e=!!o.user_input?.trim();return Ut.getInteractionDefaultValues(typeof o.content=="string"?o.content:void 0,o.user_input,e?void 0:Ee)},[o,Ee]),kn=t.useMemo(()=>{if(!o)return;const e=!!o.user_input?.trim();return Ut.getInteractionDefaultSelectedValues(typeof o.content=="string"?o.content:void 0,o.user_input,e?void 0:Ee)},[o,Ee]),Nt=!!o?.user_input?.trim(),Ot=!!o?.readonly||Nt,Lt=Ot||Nt,Qe=!!o&&we,wn=t.useCallback(e=>{const u=[...e.selectedValues??[],e.inputText?.trim()??"",e.buttonText?.trim()??""].filter(Boolean).join(", ");Je(i=>!i||!u?i:{...i,user_input:u}),st?.(e,o),je()},[o,je,st]);t.useEffect(()=>{const e=()=>{fn(document.fullscreenElement===oe.current)};return e(),document.addEventListener("fullscreenchange",e),()=>{document.removeEventListener("fullscreenchange",e)}},[]),t.useEffect(()=>{if(!Qe){he(0);return}const e=dt.current;if(!e)return;const n=()=>{const i=Math.ceil(e.getBoundingClientRect().height);he(i+dr)};if(n(),typeof ResizeObserver>"u")return;const u=new ResizeObserver(()=>{n()});return u.observe(e),()=>{u.disconnect()}},[Qe]),t.useEffect(()=>{if(j(),!(!we||!Lt))return ue.current=window.setTimeout(()=>{ue.current=null,je()},2e3),()=>{j()}},[j,je,we,Lt]);const Mn=(e,n={})=>e?e.type==="slot"?s.jsxRuntimeExports.jsx(s.jsxRuntimeExports.Fragment,{children:e.content}):e.type==="html"?s.jsxRuntimeExports.jsx(Kt.default,{className:"content-render-iframe",disableLoadingOverlay:C,hideFullScreen:!0,locale:c,mode:"blackboard",replaceRootScreenHeightWithFull:n.replaceRootScreenHeightWithFull,type:"sandbox",content:e.content,enableScaling:$t}):s.jsxRuntimeExports.jsx(Kt.default,{className:"content-render-iframe",disableLoadingOverlay:C,hideFullScreen:!0,locale:c,mode:"blackboard",type:"markdown",content:e.content}):null,Pn=(e=[],n=!1)=>{if(e.length===0)return null;const u=e.filter(r=>r.is_renderable!==!1).length,i=n&&Yt?nr.resolveMarkdownScalingMode(e):"disabled",a=e.reduce((r,I,te)=>I.is_renderable!==!1?te:r,-1);return s.jsxRuntimeExports.jsx($n.default,{className:"slide-stage__content flex w-full flex-col gap-4",mode:i,children:e.map((r,I)=>{const te=r.type==="html"&&r.is_renderable===!1;return s.jsxRuntimeExports.jsx("div",{ref:n&&I===a?ct:null,"aria-hidden":te||void 0,className:ne.cn("w-full shrink-0",u===1&&r.is_renderable!==!1&&"slide-element--single",te?"pointer-events-none fixed left-[-200vw] top-0 -z-10 h-[100dvh] w-[100vw] overflow-hidden opacity-0":r.is_renderable===!1&&"hidden"),children:Mn(r,{replaceRootScreenHeightWithFull:u===1&&r.type==="html"&&r.is_renderable!==!1})},r.sequence_number??`${r.type}-${I}`)})})},Tn=t.useCallback(()=>{const e=oe.current;if(e){if(document.fullscreenElement===e){document.exitFullscreen().catch(()=>{});return}e.requestFullscreen?.().catch(()=>{})}},[]),Vt=t.useCallback(()=>{const e=Le.current;e&&e.scrollTo({top:e.scrollHeight,behavior:"smooth"})},[]),Ze=t.useCallback(e=>tt.canReachSubtitleJumpTarget({currentIndex:l,resolvedCurrentInteractionElement:o,slideElementList:y,targetSlideIndex:Ce[e.audioIndex]}),[o,Ce,l,y]),_n=t.useCallback((e,n)=>{const i=h[e.audioIndex]?.audioKey,a=Ce[e.audioIndex];return!i||a==null||!Ze(e)?!1:(ee(n),D.current=null,b(!1),Ke(!1),ke(!1),et.shouldWakePlayerControlsAfterNavigation(n)&&(H(!0),p(!0)),a===l?(ce.current=null,M(),F(i),_e(e),!0):(ae.current=!0,M(),ce.current={audioIndex:e.audioIndex,audioKey:i,slideIndex:a,timeMs:e.timeMs},St(a),!0))},[h,Ce,Ze,l,St,_e,M,p,ee]),jn=t.useCallback(e=>{ee(e),ae.current=!0,D.current=null,b(!1),et.shouldWakePlayerControlsAfterNavigation(e)&&(H(!0),p(!0)),M(),xt()},[xt,M,p,ee]),qn=t.useCallback(e=>{ee(e),ae.current=!0,D.current=null,b(!1),et.shouldWakePlayerControlsAfterNavigation(e)&&(H(!0),p(!0)),M(),R()},[R,M,p,ee]),Bn=t.useCallback(({loading:e,reason:n})=>{if(C){b(!1);return}if(!v||k){b(!1);return}e&&n&&De(n),b(pr(n,e))},[v,k,C]);t.useEffect(()=>{C&&b(!1)},[C]);const Fn=t.useCallback(e=>{const n=h[e]?.audioKey;if(!n||!x||n!==x)return;const u=A.findIndex(r=>r===n);if(u<0){F(null);return}const i=u+1,a=A[i];if(a){F(a);return}if(F(null),Ke(!0),b(!1),g){const r=l+1,I=y[r];qt&&I?.type==="interaction"&&(D.current=r),R();return}},[h,g,l,x,A,R,qt,y]),Nn=t.useCallback(()=>{o&&Me(e=>!e)},[o]),On=t.useCallback(()=>{Ie.current=!0,_(),m&&fe(!0)},[_,m]),Ln=t.useCallback(()=>{Ie.current=!1,p(!0)},[p]),Dt=t.useCallback(e=>{e.stopPropagation(),E&&p(!0)},[E,p]),Vn=t.useCallback(e=>{B(),ut?.(e)},[B,ut]),Dn=t.useCallback(e=>{B(),it?.(e)},[B,it]),Kn=t.useCallback(()=>{H(!0),p(!0)},[p]),qe=t.useMemo(()=>P.map((e,n)=>`${e.sequence_number??`${e.type}-${n}`}:${String(e.is_new??"")}`),[P]);return t.useEffect(()=>{const e=ft.current,i=(e.length>0&&e.length<qe.length&&e.every((r,I)=>r===qe[I])?P.slice(e.length):[]).some(r=>r.is_new===!1);if(ft.current=qe,!i)return;const a=window.requestAnimationFrame(()=>{const r=Le.current,I=ct.current;if(!r||!I)return;const te=r.getBoundingClientRect(),Un=I.getBoundingClientRect(),Wn=r.scrollTop+(Un.top-te.top);r.scrollTo({top:Math.max(Wn,0),behavior:"smooth"})});return()=>{window.cancelAnimationFrame(a)}},[P,qe]),t.useEffect(()=>{if(!ae.current||(ae.current=!1,P.length===0))return;const e=window.requestAnimationFrame(()=>{Vt()});return()=>{window.cancelAnimationFrame(e)}},[P,Vt]),s.jsxRuntimeExports.jsxs("section",{ref:oe,className:ne.cn("relative h-full w-full",T&&"slide--mobile-device",kt&&"slide--browser-fullscreen",Y&&"slide--mobile-landscape",At&&"slide--mobile-landscape-native",Xt),onClick:Kn,onFocusCapture:Dn,onPointerDown:Vn,...Qt,children:[Sn?s.jsxRuntimeExports.jsx("div",{"aria-hidden":"true",className:"pointer-events-none fixed left-0 top-0 z-[9999] h-[100vh] max-h-[100vh] w-[100vw]"}):null,s.jsxRuntimeExports.jsxs("div",{ref:at,className:ne.cn("slide__viewport relative h-full min-h-0 w-full",Y&&"slide__viewport--mobile-landscape",Y&&!pn&&"slide__viewport--mobile-landscape-native"),children:[bn?s.jsxRuntimeExports.jsxs("div",{className:"slide-landscape-header",children:[s.jsxRuntimeExports.jsx("button",{"aria-label":L?.backAriaLabel??V.fullscreenBackAriaLabel,className:"slide-landscape-header__back",onClick:vn,type:"button",children:s.jsxRuntimeExports.jsx(ur.default,{className:"slide-landscape-header__icon h-6 w-6",strokeWidth:2.25})}),L?.content?s.jsxRuntimeExports.jsx("div",{className:"min-w-0 flex-1 overflow-hidden",children:L.content}):null]}):null,s.jsxRuntimeExports.jsx("div",{className:ne.cn("h-full min-h-0 w-full",xn&&"slide__viewport-content--with-header",nn?"slide-content--single":"grid gap-4"),children:P.length>0?s.jsxRuntimeExports.jsx("div",{className:"slide-stage",children:s.jsxRuntimeExports.jsx("div",{ref:Le,className:"slide-stage__layer w-full",children:En.map((e,n)=>{const u=n===gn;return s.jsxRuntimeExports.jsx("div",{"aria-hidden":!u||void 0,className:"w-full h-full",style:{display:u?void 0:"none"},children:Pn(e.elementList,u)},e.sourceStepIndexes[0]??n)})})}):null}),ln?s.jsxRuntimeExports.jsx(Gn.default,{message:fr(Zt,un),className:"absolute left-1/2 top-1/2 z-[3] -translate-x-1/2 -translate-y-1/2"}):null,s.jsxRuntimeExports.jsx(Yn.default,{extraBottomOffset:dn,hasPlayerGap:E,isEnabled:gt&&an,isPlayerHidden:m&&!E,playbackTimeStore:z,subtitleCues:In}),Qe?s.jsxRuntimeExports.jsx("div",{ref:dt,"data-player-keyboard-shortcuts-ignore":"true",className:ne.cn("slide-interaction-overlay",E&&m?"slide-interaction-overlay--with-player":"slide-interaction-overlay--standalone"),onClick:Dt,onPointerDown:Dt,style:Cn,children:s.jsxRuntimeExports.jsx(Ht,{content:String(o?.content??""),locale:c,defaultButtonText:Ft.buttonText??"",defaultInputText:Ft.inputText??"",defaultSelectedValues:kn,confirmButtonText:W?.confirmButtonText??V.interactionTexts.confirmButtonText,copyButtonText:W?.copyButtonText??V.interactionTexts.copyButtonText,copiedButtonText:W?.copiedButtonText??V.interactionTexts.copiedButtonText,onSend:wn,readonly:Ot,title:W?.title??Fe??V.interactionTexts.title})}):null,m?s.jsxRuntimeExports.jsx(Zn.PlayerKeyboardShortcutContext.Provider,{value:rn,children:s.jsxRuntimeExports.jsx(zn.default,{audioList:h,className:ne.cn("absolute left-1/2 z-[2] -translate-x-1/2",kt?"bottom-3":"-bottom-3",O,!E&&"pointer-events-none opacity-0"),currentAudioIndex:S,defaultPlaying:me,enableKeyboardShortcuts:J,isPlaybackPaused:K,isAutoAdvanceEnabled:pe,locale:c,hasInteraction:!!o,isInteractionOpen:we,isSubtitleEnabled:gt,onAutoAdvanceToggle:vt,onLoadingChange:Bn,onPlaybackStarted:()=>{ke(!0)},onPlaybackPreferenceChange:An,onPlaybackTimeChange:z.setTime,onSubtitleToggle:()=>{cn(e=>!e)},nextDisabled:!g,onEnded:Fn,onFullscreen:Tn,isFullscreen:It,mobileViewMode:$,settingsPortalContainer:at.current,onMobileViewModeChange:yn,onControlsPointerEnter:On,onControlsPointerLeave:Ln,onInteractionToggle:Nn,onNext:qn,onPrev:jn,onSubtitleJump:_n,canJumpToSubtitleTarget:Ze,prevDisabled:!tn,showControls:E,subtitleSeekRequest:on,texts:zt,customActionContext:$e,customActions:U,useAutoAdvanceToggle:xe})}):null]})]})};exports.default=br;
2
2
  //# sourceMappingURL=Slide.cjs.js.map