markdown-flow-ui 0.1.100 → 0.1.101

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 (163) hide show
  1. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/hast-util-to-jsx-runtime@2.3.6/node_modules/hast-util-to-jsx-runtime/lib/index.cjs.js +1 -1
  2. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/hast-util-to-jsx-runtime@2.3.6/node_modules/hast-util-to-jsx-runtime/lib/index.es.js +1 -1
  3. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.cjs.js +7 -0
  4. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.cjs.js.map +1 -0
  5. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.es.js +17 -0
  6. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.es.js.map +1 -0
  7. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.cjs.js +7 -0
  8. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.cjs.js.map +1 -0
  9. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.es.js +29 -0
  10. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.es.js.map +1 -0
  11. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.cjs.js +7 -0
  12. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.cjs.js.map +1 -0
  13. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.es.js +18 -0
  14. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.es.js.map +1 -0
  15. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js +7 -0
  16. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs.js.map +1 -0
  17. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js +16 -0
  18. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js.map +1 -0
  19. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.cjs.js +7 -0
  20. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.cjs.js.map +1 -0
  21. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js +16 -0
  22. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js.map +1 -0
  23. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.cjs.js +7 -0
  24. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.cjs.js.map +1 -0
  25. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.es.js +23 -0
  26. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.es.js.map +1 -0
  27. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/BaseInput.cjs.js +1 -1
  28. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-input@1.8.0_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-input/es/BaseInput.es.js +1 -1
  29. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/ResizableTextArea.cjs.js +1 -1
  30. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/ResizableTextArea.es.js +1 -1
  31. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.cjs.js +1 -1
  32. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/TextArea.es.js +1 -1
  33. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/index.cjs.js +1 -1
  34. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-textarea@1.10.2_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-textarea/es/index.es.js +1 -1
  35. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/remark-flow@0.1.6/node_modules/remark-flow/dist/remark-custom-variable.cjs.js +1 -1
  36. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/remark-flow@0.1.6/node_modules/remark-flow/dist/remark-custom-variable.es.js +1 -1
  37. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/remark-flow@0.1.6/node_modules/remark-flow/dist/remark-interaction.cjs.js +1 -1
  38. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/remark-flow@0.1.6/node_modules/remark-flow/dist/remark-interaction.es.js +1 -1
  39. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.cjs.js +1 -1
  40. package/dist/Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.es.js +1 -1
  41. package/dist/_virtual/index.cjs.js +1 -1
  42. package/dist/_virtual/index.cjs3.js +1 -1
  43. package/dist/_virtual/index.cjs4.js +1 -1
  44. package/dist/_virtual/index.cjs5.js +1 -1
  45. package/dist/_virtual/index.cjs6.js +1 -1
  46. package/dist/_virtual/index.es.js +1 -0
  47. package/dist/_virtual/index.es3.js +4 -5
  48. package/dist/_virtual/index.es3.js.map +1 -1
  49. package/dist/_virtual/index.es4.js +5 -4
  50. package/dist/_virtual/index.es4.js.map +1 -1
  51. package/dist/_virtual/index.es5.js +4 -4
  52. package/dist/_virtual/index.es6.js +5 -5
  53. package/dist/assets/markdown-flow-ui.css +1 -1
  54. package/dist/components/ContentRender/ContentRender.cjs.js +2 -2
  55. package/dist/components/ContentRender/ContentRender.cjs.js.map +1 -1
  56. package/dist/components/ContentRender/ContentRender.d.ts +13 -10
  57. package/dist/components/ContentRender/ContentRender.es.js +172 -155
  58. package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
  59. package/dist/components/ContentRender/ContentRender.stories.d.ts +1 -0
  60. package/dist/components/ContentRender/IframeSandbox.cjs.js +4 -4
  61. package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
  62. package/dist/components/ContentRender/IframeSandbox.d.ts +1 -0
  63. package/dist/components/ContentRender/IframeSandbox.es.js +214 -192
  64. package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
  65. package/dist/components/ContentRender/SandboxApp.cjs.js +3 -3
  66. package/dist/components/ContentRender/SandboxApp.cjs.js.map +1 -1
  67. package/dist/components/ContentRender/SandboxApp.d.ts +1 -0
  68. package/dist/components/ContentRender/SandboxApp.es.js +90 -90
  69. package/dist/components/ContentRender/SandboxApp.es.js.map +1 -1
  70. package/dist/components/ContentRender/plugins/CustomVariable.cjs.js +1 -1
  71. package/dist/components/ContentRender/plugins/CustomVariable.cjs.js.map +1 -1
  72. package/dist/components/ContentRender/plugins/CustomVariable.es.js +94 -86
  73. package/dist/components/ContentRender/plugins/CustomVariable.es.js.map +1 -1
  74. package/dist/components/ContentRender/utils/iframe-viewport-height.cjs.js +2 -0
  75. package/dist/components/ContentRender/utils/iframe-viewport-height.cjs.js.map +1 -0
  76. package/dist/components/ContentRender/utils/iframe-viewport-height.d.ts +24 -0
  77. package/dist/components/ContentRender/utils/iframe-viewport-height.es.js +127 -0
  78. package/dist/components/ContentRender/utils/iframe-viewport-height.es.js.map +1 -0
  79. package/dist/components/ContentRender/utils/iframe-viewport-height.test.d.ts +1 -0
  80. package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js +1 -1
  81. package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js.map +1 -1
  82. package/dist/components/MarkdownFlow/MarkdownFlow.d.ts +3 -0
  83. package/dist/components/MarkdownFlow/MarkdownFlow.es.js +19 -16
  84. package/dist/components/MarkdownFlow/MarkdownFlow.es.js.map +1 -1
  85. package/dist/components/Slide/Player.cjs.js +2 -0
  86. package/dist/components/Slide/Player.cjs.js.map +1 -0
  87. package/dist/components/Slide/Player.d.ts +21 -0
  88. package/dist/components/Slide/Player.es.js +386 -0
  89. package/dist/components/Slide/Player.es.js.map +1 -0
  90. package/dist/components/Slide/Slide.cjs.js +2 -0
  91. package/dist/components/Slide/Slide.cjs.js.map +1 -0
  92. package/dist/components/Slide/Slide.d.ts +27 -0
  93. package/dist/components/Slide/Slide.es.js +583 -0
  94. package/dist/components/Slide/Slide.es.js.map +1 -0
  95. package/dist/components/Slide/Slide.stories.d.ts +79 -0
  96. package/dist/components/Slide/diff-utils.cjs.js +5 -0
  97. package/dist/components/Slide/diff-utils.cjs.js.map +1 -0
  98. package/dist/components/Slide/diff-utils.d.ts +18 -0
  99. package/dist/components/Slide/diff-utils.es.js +113 -0
  100. package/dist/components/Slide/diff-utils.es.js.map +1 -0
  101. package/dist/components/Slide/index.cjs.js +2 -0
  102. package/dist/components/Slide/index.cjs.js.map +1 -0
  103. package/dist/components/Slide/index.d.ts +12 -0
  104. package/dist/components/Slide/index.es.js +12 -0
  105. package/dist/components/Slide/index.es.js.map +1 -0
  106. package/dist/components/Slide/types.d.ts +24 -0
  107. package/dist/components/Slide/useSlide.cjs.js +2 -0
  108. package/dist/components/Slide/useSlide.cjs.js.map +1 -0
  109. package/dist/components/Slide/useSlide.d.ts +24 -0
  110. package/dist/components/Slide/useSlide.es.js +144 -0
  111. package/dist/components/Slide/useSlide.es.js.map +1 -0
  112. package/dist/components/Slide/useWakePlayerFromIframe.cjs.js +2 -0
  113. package/dist/components/Slide/useWakePlayerFromIframe.cjs.js.map +1 -0
  114. package/dist/components/Slide/useWakePlayerFromIframe.d.ts +7 -0
  115. package/dist/components/Slide/useWakePlayerFromIframe.es.js +89 -0
  116. package/dist/components/Slide/useWakePlayerFromIframe.es.js.map +1 -0
  117. package/dist/components/Slide/utils/interactionPlayback.cjs.js +2 -0
  118. package/dist/components/Slide/utils/interactionPlayback.cjs.js.map +1 -0
  119. package/dist/components/Slide/utils/interactionPlayback.d.ts +9 -0
  120. package/dist/components/Slide/utils/interactionPlayback.es.js +11 -0
  121. package/dist/components/Slide/utils/interactionPlayback.es.js.map +1 -0
  122. package/dist/components/Slide/utils/interactionPlayback.test.d.ts +1 -0
  123. package/dist/components/Slide/utils/listenModeElementList.d.ts +81 -0
  124. package/dist/components/Slide/utils/listenModeElementList.test.d.ts +1 -0
  125. package/dist/components/Slide/utils/playbackSequence.cjs.js +2 -0
  126. package/dist/components/Slide/utils/playbackSequence.cjs.js.map +1 -0
  127. package/dist/components/Slide/utils/playbackSequence.d.ts +11 -0
  128. package/dist/components/Slide/utils/playbackSequence.es.js +16 -0
  129. package/dist/components/Slide/utils/playbackSequence.es.js.map +1 -0
  130. package/dist/components/Slide/utils/playbackSequence.test.d.ts +1 -0
  131. package/dist/components/Slide/utils/playerCustomActions.cjs.js +2 -0
  132. package/dist/components/Slide/utils/playerCustomActions.cjs.js.map +1 -0
  133. package/dist/components/Slide/utils/playerCustomActions.d.ts +3 -0
  134. package/dist/components/Slide/utils/playerCustomActions.es.js +7 -0
  135. package/dist/components/Slide/utils/playerCustomActions.es.js.map +1 -0
  136. package/dist/components/index.d.ts +7 -0
  137. package/dist/components/ui/inputGroup/textarea.cjs.js +1 -1
  138. package/dist/components/ui/inputGroup/textarea.es.js +1 -1
  139. package/dist/index.cjs.js +1 -1
  140. package/dist/index.es.js +13 -10
  141. package/dist/index.es.js.map +1 -1
  142. package/dist/lib/browserUserActivation.d.ts +5 -0
  143. package/dist/lib/interaction-defaults.cjs.js +2 -0
  144. package/dist/lib/interaction-defaults.cjs.js.map +1 -0
  145. package/dist/lib/interaction-defaults.d.ts +23 -0
  146. package/dist/lib/interaction-defaults.es.js +145 -0
  147. package/dist/lib/interaction-defaults.es.js.map +1 -0
  148. package/dist/lib/sandboxInteraction.cjs.js +2 -0
  149. package/dist/lib/sandboxInteraction.cjs.js.map +1 -0
  150. package/dist/lib/sandboxInteraction.d.ts +8 -0
  151. package/dist/lib/sandboxInteraction.es.js +12 -0
  152. package/dist/lib/sandboxInteraction.es.js.map +1 -0
  153. package/dist/markdown-flow-ui-lib.css +1 -1
  154. package/dist/renderer.cjs.js +1 -1
  155. package/dist/renderer.d.ts +3 -1
  156. package/dist/renderer.es.js +9 -6
  157. package/dist/renderer.es.js.map +1 -1
  158. package/dist/slide.cjs.js +2 -0
  159. package/dist/slide.cjs.js.map +1 -0
  160. package/dist/slide.d.ts +2 -0
  161. package/dist/slide.es.js +18 -0
  162. package/dist/slide.es.js.map +1 -0
  163. package/package.json +25 -2
@@ -0,0 +1,21 @@
1
+ import { default as React } from 'react';
2
+ import { SlideAudioItem } from './useSlide';
3
+ export type PlayerProps = Omit<React.ComponentProps<"div">, "onEnded"> & {
4
+ audioList?: SlideAudioItem[];
5
+ currentAudioIndex?: number;
6
+ defaultPlaying?: boolean;
7
+ onLoadingChange?: (loading: boolean) => void;
8
+ onPrev?: () => void;
9
+ onNext?: () => void;
10
+ onFullscreen?: () => void;
11
+ onEnded?: (audioIndex: number) => void;
12
+ onInteractionToggle?: () => void;
13
+ hasInteraction?: boolean;
14
+ isInteractionOpen?: boolean;
15
+ prevDisabled?: boolean;
16
+ nextDisabled?: boolean;
17
+ showControls?: boolean;
18
+ customActions?: React.ReactNode;
19
+ };
20
+ declare const Player: React.FC<PlayerProps>;
21
+ export default Player;
@@ -0,0 +1,386 @@
1
+ import { j as r } from "../../_virtual/jsx-runtime.es.js";
2
+ import be, { useRef as o, useState as Se, useMemo as T, useEffect as M, useCallback as a } from "react";
3
+ import { cn as Y } from "../../lib/utils.es.js";
4
+ import { toPlayerCustomActionList as _e } from "./utils/playerCustomActions.es.js";
5
+ /* empty css */
6
+ import xe from "../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/ellipsis-vertical.es.js";
7
+ import we from "../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/volume-2.es.js";
8
+ import je from "../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-ccw.es.js";
9
+ import Ae from "../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/rotate-cw.es.js";
10
+ import ke from "../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/maximize.es.js";
11
+ import Ne from "../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/file-pen-line.es.js";
12
+ const D = /* @__PURE__ */ new Map(), I = (_) => {
13
+ if (typeof window > "u" || !_ || D.has(_))
14
+ return;
15
+ const N = window.document.createElement("audio");
16
+ N.preload = "auto", N.setAttribute("playsinline", "true"), N.src = _, N.load(), D.set(_, N);
17
+ }, Re = () => /* @__PURE__ */ r.jsxs(
18
+ "svg",
19
+ {
20
+ xmlns: "http://www.w3.org/2000/svg",
21
+ width: "34",
22
+ height: "34",
23
+ viewBox: "0 0 34 34",
24
+ fill: "none",
25
+ children: [
26
+ /* @__PURE__ */ r.jsx(
27
+ "path",
28
+ {
29
+ d: "M16.6667 33.3333C25.8714 33.3333 33.3333 25.8714 33.3333 16.6667C33.3333 7.46192 25.8714 0 16.6667 0C7.46192 0 0 7.46192 0 16.6667C0 25.8714 7.46192 33.3333 16.6667 33.3333Z",
30
+ fill: "#0A0A0A"
31
+ }
32
+ ),
33
+ /* @__PURE__ */ r.jsx("path", { d: "M12 10H16V24H12V10ZM18 10H22V24H18V10Z", fill: "white" })
34
+ ]
35
+ }
36
+ ), ve = () => /* @__PURE__ */ r.jsxs(
37
+ "svg",
38
+ {
39
+ xmlns: "http://www.w3.org/2000/svg",
40
+ width: "34",
41
+ height: "34",
42
+ viewBox: "0 0 34 34",
43
+ fill: "none",
44
+ children: [
45
+ /* @__PURE__ */ r.jsx(
46
+ "path",
47
+ {
48
+ d: "M16.6667 33.3333C25.8714 33.3333 33.3333 25.8714 33.3333 16.6667C33.3333 7.46192 25.8714 0 16.6667 0C7.46192 0 0 7.46192 0 16.6667C0 25.8714 7.46192 33.3333 16.6667 33.3333Z",
49
+ fill: "#0A0A0A"
50
+ }
51
+ ),
52
+ /* @__PURE__ */ r.jsx("path", { d: "M13.3333 10L23.3333 16.6667L13.3333 23.3333V10Z", fill: "white" })
53
+ ]
54
+ }
55
+ ), Ke = ({
56
+ audioList: _ = [],
57
+ className: N,
58
+ currentAudioIndex: i = -1,
59
+ defaultPlaying: g = !0,
60
+ onLoadingChange: B,
61
+ onPrev: ee,
62
+ onNext: re,
63
+ onFullscreen: te,
64
+ onEnded: K,
65
+ onInteractionToggle: ne,
66
+ hasInteraction: se = !1,
67
+ isInteractionOpen: ue = !1,
68
+ prevDisabled: le = !1,
69
+ nextDisabled: ce = !1,
70
+ showControls: ae = !0,
71
+ customActions: Z,
72
+ ...oe
73
+ }) => {
74
+ const y = o(null), x = o(null), $ = o(null), w = o(0), f = o(null), H = o(void 0), P = o([]), q = o(!1), m = o(!1), v = o(null), p = o(!1), n = o(!1), d = o(null), h = o(!1), j = o("unknown"), [F, l] = Se(g), c = i >= 0 ? _[i] : void 0, C = c?.audioUrl, b = T(
75
+ () => [...c?.audioSegments ?? []].sort(
76
+ (e, u) => e.segment_index - u.segment_index
77
+ ),
78
+ [c?.audioSegments]
79
+ ), z = T(
80
+ () => _e(Z),
81
+ [Z]
82
+ ), O = z.length + 4, ie = T(
83
+ () => ({
84
+ "--slide-player-mobile-control-count": String(O)
85
+ }),
86
+ [O]
87
+ ), L = T(() => c ? c.audioKey ?? `${String(c.sequenceNumber ?? "none")}:${String(c.audioUrl ?? "")}` : "none", [c]);
88
+ M(() => {
89
+ H.current = c;
90
+ }, [c]), M(() => {
91
+ P.current = b;
92
+ }, [b]), M(() => {
93
+ const e = c?.audioUrl, u = i >= 0 ? _[i + 1]?.audioUrl : void 0;
94
+ I(e), I(u);
95
+ }, [_, c?.audioUrl, i]);
96
+ const t = a(
97
+ (e) => {
98
+ q.current !== e && (q.current = e, B?.(e));
99
+ },
100
+ [B]
101
+ ), G = a((e) => e instanceof DOMException ? e.name === "NotAllowedError" || e.name === "SecurityError" : !1, []), A = a(() => g && !m.current && j.current !== "blocked", [g]), J = a((e) => e ? e.startsWith("data:") ? e : `data:audio/mpeg;base64,${e}` : "", []), Q = a(() => {
102
+ const e = f.current;
103
+ return e == null || e <= 0 ? 0 : P.current.slice(0, e).reduce(
104
+ (u, s) => u + Math.max(Number(s.duration_ms ?? 0), 0),
105
+ 0
106
+ ) / 1e3;
107
+ }, []), U = a(() => {
108
+ const e = y.current;
109
+ e && (n.current = !1, m.current = !1, v.current = null, d.current = null, p.current = !1, h.current = !1, e.pause(), e.removeAttribute("src"), e.load(), x.current = null, w.current = 0, f.current = null, l(!1), t(!1));
110
+ }, [t]), S = a(
111
+ (e) => {
112
+ const u = y.current;
113
+ if (!u)
114
+ return !1;
115
+ const s = u.play();
116
+ return s && typeof s.then == "function" && s.then(() => {
117
+ j.current === "unknown" && (j.current = "auto"), n.current = !1, h.current = !1;
118
+ }).catch((R) => {
119
+ j.current === "unknown" && G(R) && (j.current = "blocked", n.current = !1, t(!1)), h.current = !1, l(!1);
120
+ }), !0;
121
+ },
122
+ [G, t]
123
+ ), E = a(
124
+ (e, u) => {
125
+ const s = y.current, R = P.current[e];
126
+ if (!s || !R)
127
+ return !1;
128
+ const k = J(R.audio_data);
129
+ w.current = e, f.current = null, p.current = !1, h.current = !0;
130
+ const W = A();
131
+ n.current = W, t(!1);
132
+ const ye = x.current !== k;
133
+ return v.current = "segment", ye && (s.pause(), s.removeAttribute("src"), s.load(), x.current = k, s.src = k, s.load()), d.current = 0, s.readyState > 0 && (s.currentTime = 0, d.current = null), W ? S(`start-segment:${u}`) : (n.current = !1, h.current = !1, s.pause(), l(!1), !0);
134
+ },
135
+ [
136
+ A,
137
+ J,
138
+ S,
139
+ t
140
+ ]
141
+ ), V = a(
142
+ (e) => {
143
+ n.current = !1, p.current = !1, h.current = !1, l(!1), t(!1), i >= 0 && K?.(i);
144
+ },
145
+ [i, K, t]
146
+ ), X = a(() => {
147
+ const e = w.current + 1, u = P.current, s = u[e], R = H.current, k = u.some((W) => W.is_final);
148
+ if (s) {
149
+ E(e, "ended");
150
+ return;
151
+ }
152
+ if (R?.isAudioStreaming || !k) {
153
+ w.current = e, f.current = e, p.current = !0, n.current = g, l(!1), t(!0);
154
+ return;
155
+ }
156
+ V("segments-completed");
157
+ }, [g, V, E, t]);
158
+ M(() => {
159
+ if ($.current === L)
160
+ return;
161
+ $.current = L, w.current = 0, f.current = null, p.current = !1, m.current = !1, n.current = !1, h.current = !1, v.current = null, x.current = null, t(!1);
162
+ const e = y.current;
163
+ e && (e.pause(), e.removeAttribute("src"), e.load(), l(!1));
164
+ }, [
165
+ i,
166
+ L,
167
+ b.length,
168
+ C,
169
+ t
170
+ ]), M(() => {
171
+ const e = y.current;
172
+ if (e) {
173
+ if (!c) {
174
+ U();
175
+ return;
176
+ }
177
+ if (C) {
178
+ const u = x.current !== C, s = A();
179
+ if (v.current === "segment" && !!x.current && f.current === null) {
180
+ if (!s) {
181
+ n.current = !1, e.pause(), l(!1);
182
+ return;
183
+ }
184
+ e.paused && (n.current = !0, S("keep-segment-source"));
185
+ return;
186
+ }
187
+ if (u) {
188
+ const k = f.current !== null ? Q() : 0;
189
+ e.pause(), e.removeAttribute("src"), e.load(), x.current = C, v.current = "url", e.src = C, e.load(), d.current = k, e.readyState > 0 && (e.currentTime = k, d.current = null);
190
+ }
191
+ if (n.current = s, p.current = !1, h.current = !1, t(!1), !s) {
192
+ n.current = !1, e.pause(), l(!1);
193
+ return;
194
+ }
195
+ S(u ? "sync-url-init" : "sync-url");
196
+ return;
197
+ }
198
+ if (f.current !== null) {
199
+ if (f.current < b.length) {
200
+ if (m.current) {
201
+ l(!1), t(!1);
202
+ return;
203
+ }
204
+ E(f.current, "wait-resume");
205
+ return;
206
+ }
207
+ p.current = !0, n.current = A(), l(!1), t(A());
208
+ return;
209
+ }
210
+ if (!b.length) {
211
+ if (c.isAudioStreaming) {
212
+ f.current = w.current, p.current = !0, n.current = A(), l(!1), t(A());
213
+ return;
214
+ }
215
+ U();
216
+ return;
217
+ }
218
+ if (!x.current) {
219
+ E(
220
+ Math.min(
221
+ w.current,
222
+ b.length - 1
223
+ ),
224
+ "effect-init"
225
+ );
226
+ return;
227
+ }
228
+ if (!g || m.current) {
229
+ n.current = !1, e.pause(), l(!1);
230
+ return;
231
+ }
232
+ e.paused && (n.current = !0, S("sync-paused-retry"));
233
+ }
234
+ }, [
235
+ c,
236
+ i,
237
+ b,
238
+ C,
239
+ g,
240
+ A,
241
+ U,
242
+ E,
243
+ S,
244
+ Q,
245
+ t
246
+ ]), M(() => U, [U]);
247
+ const fe = a(() => {
248
+ l(!0), t(!1);
249
+ }, [t]), de = a(() => {
250
+ p.current || h.current || l(!1);
251
+ }, [i]), me = a(() => {
252
+ const e = y.current;
253
+ e && d.current !== null && (e.currentTime = d.current, d.current = null), !(!n.current || !g) && S("canplay");
254
+ }, [i, g, S]), pe = a(() => {
255
+ const e = y.current;
256
+ e && d.current !== null && (e.currentTime = d.current, d.current = null);
257
+ }, [i]), he = a(() => {
258
+ const e = v.current === "url" || P.current.length === 0;
259
+ if (h.current = !1, e) {
260
+ V("url-ended");
261
+ return;
262
+ }
263
+ X();
264
+ }, [V, X]), ge = a(() => {
265
+ l(!1), t(!1);
266
+ }, [t]);
267
+ return /* @__PURE__ */ r.jsxs("div", { className: Y("slide-player", N), ...oe, children: [
268
+ /* @__PURE__ */ r.jsx(
269
+ "audio",
270
+ {
271
+ ref: y,
272
+ preload: "auto",
273
+ playsInline: !0,
274
+ onLoadedMetadata: pe,
275
+ onCanPlay: me,
276
+ onPlay: fe,
277
+ onPause: de,
278
+ onEnded: he,
279
+ onError: ge
280
+ }
281
+ ),
282
+ ae ? /* @__PURE__ */ r.jsxs("div", { className: "slide-player__controls", style: ie, children: [
283
+ /* @__PURE__ */ r.jsxs("div", { className: "slide-player__group", children: [
284
+ /* @__PURE__ */ r.jsx("button", { "aria-label": "More options", className: "hidden", type: "button", children: /* @__PURE__ */ r.jsx(
285
+ xe,
286
+ {
287
+ className: "slide-player__icon",
288
+ strokeWidth: 2.25
289
+ }
290
+ ) }),
291
+ /* @__PURE__ */ r.jsx("button", { "aria-label": "Volume", className: "hidden", type: "button", children: /* @__PURE__ */ r.jsx(we, { className: "slide-player__icon", strokeWidth: 2.25 }) }),
292
+ /* @__PURE__ */ r.jsx(
293
+ "button",
294
+ {
295
+ "aria-label": "Rewind",
296
+ className: "slide-player__action",
297
+ disabled: le,
298
+ onClick: ee,
299
+ type: "button",
300
+ children: /* @__PURE__ */ r.jsx(je, { className: "slide-player__icon", strokeWidth: 2.25 })
301
+ }
302
+ ),
303
+ /* @__PURE__ */ r.jsx(
304
+ "button",
305
+ {
306
+ "aria-label": F ? "Pause" : "Play",
307
+ className: "slide-player__toggle",
308
+ onClick: () => {
309
+ const e = y.current;
310
+ if (!(!e || !c)) {
311
+ if (f.current !== null) {
312
+ if (F) {
313
+ n.current = !1, m.current = !0, f.current = null, p.current = !1, l(!1), t(!1), e.pause();
314
+ return;
315
+ }
316
+ j.current = "manual", m.current = !1, n.current = !0, t(!0);
317
+ return;
318
+ }
319
+ if (!e.src && b.length > 0) {
320
+ j.current = "manual", m.current = !1, E(
321
+ Math.min(
322
+ w.current,
323
+ b.length - 1
324
+ ),
325
+ "toggle"
326
+ );
327
+ return;
328
+ }
329
+ if (e.paused) {
330
+ j.current = "manual", m.current = !1, n.current = !0, S("toggle-resume");
331
+ return;
332
+ }
333
+ n.current = !1, m.current = !0, e.pause();
334
+ }
335
+ },
336
+ type: "button",
337
+ children: F ? /* @__PURE__ */ r.jsx(Re, {}) : /* @__PURE__ */ r.jsx(ve, {})
338
+ }
339
+ ),
340
+ /* @__PURE__ */ r.jsx(
341
+ "button",
342
+ {
343
+ "aria-label": "Forward",
344
+ className: "slide-player__action",
345
+ disabled: ce,
346
+ onClick: re,
347
+ type: "button",
348
+ children: /* @__PURE__ */ r.jsx(Ae, { className: "slide-player__icon", strokeWidth: 2.25 })
349
+ }
350
+ ),
351
+ /* @__PURE__ */ r.jsx(
352
+ "button",
353
+ {
354
+ "aria-label": "Fullscreen",
355
+ className: "hidden",
356
+ onClick: te,
357
+ type: "button",
358
+ children: /* @__PURE__ */ r.jsx(ke, { className: "slide-player__icon", strokeWidth: 2.25 })
359
+ }
360
+ )
361
+ ] }),
362
+ /* @__PURE__ */ r.jsx("div", { className: "slide-player__separator" }),
363
+ /* @__PURE__ */ r.jsxs("div", { className: "slide-player__group", children: [
364
+ z.map((e, u) => /* @__PURE__ */ r.jsx(be.Fragment, { children: e }, `custom-action-${u}`)),
365
+ /* @__PURE__ */ r.jsx(
366
+ "button",
367
+ {
368
+ "aria-label": "Notes",
369
+ className: Y(
370
+ "slide-player__action",
371
+ ue && "slide-player__action--active"
372
+ ),
373
+ disabled: !se,
374
+ onClick: ne,
375
+ type: "button",
376
+ children: /* @__PURE__ */ r.jsx(Ne, { className: "slide-player__icon", strokeWidth: 2.25 })
377
+ }
378
+ )
379
+ ] })
380
+ ] }) : null
381
+ ] });
382
+ };
383
+ export {
384
+ Ke as default
385
+ };
386
+ //# sourceMappingURL=Player.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Player.es.js","sources":["../../../src/components/Slide/Player.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n EllipsisVertical,\n FilePenLine,\n Maximize,\n RotateCcw,\n RotateCw,\n Volume2,\n} from \"lucide-react\";\n\nimport { cn } from \"../../lib/utils\";\nimport type { SlideAudioItem } from \"./useSlide\";\nimport { toPlayerCustomActionList } from \"./utils/playerCustomActions\";\nimport \"./player.css\";\n\nconst audioPreloadElementCache = new Map<string, HTMLAudioElement>();\n\nconst preloadAudioUrl = (url?: string) => {\n if (typeof window === \"undefined\" || !url) {\n return;\n }\n\n if (audioPreloadElementCache.has(url)) {\n return;\n }\n\n // Use a detached audio element so warm-up follows the same media loading\n // path as the visible player instead of relying on link preload hints.\n const audio = window.document.createElement(\"audio\");\n audio.preload = \"auto\";\n audio.setAttribute(\"playsinline\", \"true\");\n audio.src = url;\n audio.load();\n\n audioPreloadElementCache.set(url, audio);\n};\n\nexport type PlayerProps = Omit<React.ComponentProps<\"div\">, \"onEnded\"> & {\n audioList?: SlideAudioItem[];\n currentAudioIndex?: number;\n defaultPlaying?: boolean;\n onLoadingChange?: (loading: boolean) => void;\n onPrev?: () => void;\n onNext?: () => void;\n onFullscreen?: () => void;\n onEnded?: (audioIndex: number) => void;\n onInteractionToggle?: () => void;\n hasInteraction?: boolean;\n isInteractionOpen?: boolean;\n prevDisabled?: boolean;\n nextDisabled?: boolean;\n showControls?: boolean;\n customActions?: React.ReactNode;\n};\n\nconst PauseIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"34\"\n height=\"34\"\n viewBox=\"0 0 34 34\"\n fill=\"none\"\n >\n <path\n d=\"M16.6667 33.3333C25.8714 33.3333 33.3333 25.8714 33.3333 16.6667C33.3333 7.46192 25.8714 0 16.6667 0C7.46192 0 0 7.46192 0 16.6667C0 25.8714 7.46192 33.3333 16.6667 33.3333Z\"\n fill=\"#0A0A0A\"\n />\n <path d=\"M12 10H16V24H12V10ZM18 10H22V24H18V10Z\" fill=\"white\" />\n </svg>\n);\n\nconst PlayIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"34\"\n height=\"34\"\n viewBox=\"0 0 34 34\"\n fill=\"none\"\n >\n <path\n d=\"M16.6667 33.3333C25.8714 33.3333 33.3333 25.8714 33.3333 16.6667C33.3333 7.46192 25.8714 0 16.6667 0C7.46192 0 0 7.46192 0 16.6667C0 25.8714 7.46192 33.3333 16.6667 33.3333Z\"\n fill=\"#0A0A0A\"\n />\n <path d=\"M13.3333 10L23.3333 16.6667L13.3333 23.3333V10Z\" fill=\"white\" />\n </svg>\n);\n\nconst Player: React.FC<PlayerProps> = ({\n audioList = [],\n className,\n currentAudioIndex = -1,\n defaultPlaying = true,\n onLoadingChange,\n onPrev,\n onNext,\n onFullscreen,\n onEnded,\n onInteractionToggle,\n hasInteraction = false,\n isInteractionOpen = false,\n prevDisabled = false,\n nextDisabled = false,\n showControls = true,\n customActions,\n ...props\n}) => {\n const audioRef = useRef<HTMLAudioElement | null>(null);\n const audioSrcRef = useRef<string | null>(null);\n const currentAudioKeyRef = useRef<string | null>(null);\n const currentSegmentIndexRef = useRef(0);\n const waitingSegmentIndexRef = useRef<number | null>(null);\n const currentAudioRef = useRef<SlideAudioItem | undefined>(undefined);\n const currentAudioSegmentsRef = useRef<\n NonNullable<SlideAudioItem[\"audioSegments\"]>\n >([]);\n const isLoadingRef = useRef(false);\n const isPausedByUserRef = useRef(false);\n const activeSourceTypeRef = useRef<\"url\" | \"segment\" | null>(null);\n const isWaitingForSegmentRef = useRef(false);\n const pendingAutoPlayRef = useRef(false);\n const pendingSeekTimeRef = useRef<number | null>(null);\n const isSwitchingSegmentRef = useRef(false);\n const playbackAccessModeRef = useRef<\n \"unknown\" | \"auto\" | \"manual\" | \"blocked\"\n >(\"unknown\");\n const [isPlaying, setIsPlaying] = useState(defaultPlaying);\n const currentAudio =\n currentAudioIndex >= 0 ? audioList[currentAudioIndex] : undefined;\n const currentAudioUrl = currentAudio?.audioUrl;\n const currentAudioSegments = useMemo(\n () =>\n [...(currentAudio?.audioSegments ?? [])].sort(\n (prevSegment, nextSegment) =>\n prevSegment.segment_index - nextSegment.segment_index\n ),\n [currentAudio?.audioSegments]\n );\n const customActionList = useMemo(\n () => toPlayerCustomActionList(customActions),\n [customActions]\n );\n const mobileVisibleActionCount = customActionList.length + 4;\n const controlsStyle = useMemo(\n () =>\n ({\n \"--slide-player-mobile-control-count\": String(mobileVisibleActionCount),\n }) as React.CSSProperties,\n [mobileVisibleActionCount]\n );\n const currentAudioKey = useMemo(() => {\n if (!currentAudio) {\n return \"none\";\n }\n\n return (\n currentAudio.audioKey ??\n `${String(currentAudio.sequenceNumber ?? \"none\")}:${String(currentAudio.audioUrl ?? \"\")}`\n );\n }, [currentAudio]);\n\n useEffect(() => {\n currentAudioRef.current = currentAudio;\n }, [currentAudio]);\n\n useEffect(() => {\n currentAudioSegmentsRef.current = currentAudioSegments;\n }, [currentAudioSegments]);\n\n useEffect(() => {\n const currentUrl = currentAudio?.audioUrl;\n const nextUrl =\n currentAudioIndex >= 0\n ? audioList[currentAudioIndex + 1]?.audioUrl\n : undefined;\n\n preloadAudioUrl(currentUrl);\n preloadAudioUrl(nextUrl);\n }, [audioList, currentAudio?.audioUrl, currentAudioIndex]);\n\n const updateLoading = useCallback(\n (loading: boolean) => {\n if (isLoadingRef.current === loading) {\n return;\n }\n\n isLoadingRef.current = loading;\n onLoadingChange?.(loading);\n },\n [onLoadingChange]\n );\n\n const isAutoplayBlockedError = useCallback((error: unknown) => {\n if (!(error instanceof DOMException)) {\n return false;\n }\n\n return error.name === \"NotAllowedError\" || error.name === \"SecurityError\";\n }, []);\n\n const canStartPlaybackAutomatically = useCallback(() => {\n return (\n defaultPlaying &&\n !isPausedByUserRef.current &&\n playbackAccessModeRef.current !== \"blocked\"\n );\n }, [defaultPlaying]);\n\n const getSegmentSrc = useCallback((audioData: string) => {\n if (!audioData) {\n return \"\";\n }\n\n if (audioData.startsWith(\"data:\")) {\n return audioData;\n }\n\n return `data:audio/mpeg;base64,${audioData}`;\n }, []);\n\n const getWaitingSegmentSeekTime = useCallback(() => {\n const waitingSegmentIndex = waitingSegmentIndexRef.current;\n\n if (waitingSegmentIndex == null || waitingSegmentIndex <= 0) {\n return 0;\n }\n\n return (\n currentAudioSegmentsRef.current\n .slice(0, waitingSegmentIndex)\n .reduce(\n (totalDurationMs, segment) =>\n totalDurationMs + Math.max(Number(segment.duration_ms ?? 0), 0),\n 0\n ) / 1000\n );\n }, []);\n\n const resetAudio = useCallback(() => {\n const audioElement = audioRef.current;\n\n if (!audioElement) {\n return;\n }\n\n pendingAutoPlayRef.current = false;\n isPausedByUserRef.current = false;\n activeSourceTypeRef.current = null;\n pendingSeekTimeRef.current = null;\n isWaitingForSegmentRef.current = false;\n isSwitchingSegmentRef.current = false;\n audioElement.pause();\n audioElement.removeAttribute(\"src\");\n audioElement.load();\n audioSrcRef.current = null;\n currentSegmentIndexRef.current = 0;\n waitingSegmentIndexRef.current = null;\n setIsPlaying(false);\n updateLoading(false);\n }, [updateLoading]);\n\n const tryPlayCurrentAudio = useCallback(\n (_reason: string) => {\n const audioElement = audioRef.current;\n\n if (!audioElement) {\n return false;\n }\n\n const playPromise = audioElement.play();\n\n if (playPromise && typeof playPromise.then === \"function\") {\n void playPromise\n .then(() => {\n if (playbackAccessModeRef.current === \"unknown\") {\n playbackAccessModeRef.current = \"auto\";\n }\n\n pendingAutoPlayRef.current = false;\n isSwitchingSegmentRef.current = false;\n })\n .catch((error: unknown) => {\n if (\n playbackAccessModeRef.current === \"unknown\" &&\n isAutoplayBlockedError(error)\n ) {\n // Lock autoplay after the first browser rejection.\n playbackAccessModeRef.current = \"blocked\";\n pendingAutoPlayRef.current = false;\n updateLoading(false);\n }\n\n isSwitchingSegmentRef.current = false;\n setIsPlaying(false);\n });\n }\n\n return true;\n },\n [isAutoplayBlockedError, updateLoading]\n );\n\n const startSegmentPlayback = useCallback(\n (segmentIndex: number, _reason: string) => {\n const audioElement = audioRef.current;\n const segment = currentAudioSegmentsRef.current[segmentIndex];\n\n if (!audioElement || !segment) {\n return false;\n }\n\n const nextAudioSrc = getSegmentSrc(segment.audio_data);\n\n currentSegmentIndexRef.current = segmentIndex;\n waitingSegmentIndexRef.current = null;\n isWaitingForSegmentRef.current = false;\n isSwitchingSegmentRef.current = true;\n const shouldAutoResume = canStartPlaybackAutomatically();\n\n pendingAutoPlayRef.current = shouldAutoResume;\n updateLoading(false);\n\n const hasNewSrc = audioSrcRef.current !== nextAudioSrc;\n\n activeSourceTypeRef.current = \"segment\";\n\n if (hasNewSrc) {\n audioElement.pause();\n audioElement.removeAttribute(\"src\");\n audioElement.load();\n audioSrcRef.current = nextAudioSrc;\n audioElement.src = nextAudioSrc;\n audioElement.load();\n }\n\n pendingSeekTimeRef.current = 0;\n\n if (audioElement.readyState > 0) {\n audioElement.currentTime = 0;\n pendingSeekTimeRef.current = null;\n }\n\n if (!shouldAutoResume) {\n pendingAutoPlayRef.current = false;\n isSwitchingSegmentRef.current = false;\n audioElement.pause();\n setIsPlaying(false);\n return true;\n }\n\n return tryPlayCurrentAudio(`start-segment:${_reason}`);\n },\n [\n canStartPlaybackAutomatically,\n getSegmentSrc,\n tryPlayCurrentAudio,\n updateLoading,\n ]\n );\n\n const finishAudioItem = useCallback(\n (_reason?: string) => {\n pendingAutoPlayRef.current = false;\n isWaitingForSegmentRef.current = false;\n isSwitchingSegmentRef.current = false;\n setIsPlaying(false);\n updateLoading(false);\n\n if (currentAudioIndex >= 0) {\n onEnded?.(currentAudioIndex);\n }\n },\n [currentAudioIndex, onEnded, updateLoading]\n );\n\n const handleSegmentEnded = useCallback(() => {\n const nextSegmentIndex = currentSegmentIndexRef.current + 1;\n const segments = currentAudioSegmentsRef.current;\n const nextSegment = segments[nextSegmentIndex];\n const activeAudio = currentAudioRef.current;\n const hasFinal = segments.some((segment) => segment.is_final);\n\n if (nextSegment) {\n startSegmentPlayback(nextSegmentIndex, \"ended\");\n return;\n }\n\n if (activeAudio?.isAudioStreaming || !hasFinal) {\n currentSegmentIndexRef.current = nextSegmentIndex;\n waitingSegmentIndexRef.current = nextSegmentIndex;\n isWaitingForSegmentRef.current = true;\n pendingAutoPlayRef.current = defaultPlaying;\n setIsPlaying(false);\n updateLoading(true);\n\n return;\n }\n\n finishAudioItem(\"segments-completed\");\n }, [defaultPlaying, finishAudioItem, startSegmentPlayback, updateLoading]);\n\n useEffect(() => {\n if (currentAudioKeyRef.current === currentAudioKey) {\n return;\n }\n\n currentAudioKeyRef.current = currentAudioKey;\n currentSegmentIndexRef.current = 0;\n waitingSegmentIndexRef.current = null;\n isWaitingForSegmentRef.current = false;\n isPausedByUserRef.current = false;\n pendingAutoPlayRef.current = false;\n isSwitchingSegmentRef.current = false;\n activeSourceTypeRef.current = null;\n audioSrcRef.current = null;\n updateLoading(false);\n\n const audioElement = audioRef.current;\n\n if (!audioElement) {\n return;\n }\n\n audioElement.pause();\n audioElement.removeAttribute(\"src\");\n audioElement.load();\n setIsPlaying(false);\n }, [\n currentAudioIndex,\n currentAudioKey,\n currentAudioSegments.length,\n currentAudioUrl,\n updateLoading,\n ]);\n\n useEffect(() => {\n const audioElement = audioRef.current;\n\n if (!audioElement) {\n return;\n }\n\n if (!currentAudio) {\n resetAudio();\n return;\n }\n\n if (currentAudioUrl) {\n const hasNewSrc = audioSrcRef.current !== currentAudioUrl;\n const shouldAutoResume = canStartPlaybackAutomatically();\n const shouldKeepSegmentSource =\n activeSourceTypeRef.current === \"segment\" &&\n Boolean(audioSrcRef.current) &&\n waitingSegmentIndexRef.current === null;\n\n if (shouldKeepSegmentSource) {\n if (!shouldAutoResume) {\n pendingAutoPlayRef.current = false;\n audioElement.pause();\n setIsPlaying(false);\n return;\n }\n\n if (audioElement.paused) {\n pendingAutoPlayRef.current = true;\n tryPlayCurrentAudio(\"keep-segment-source\");\n }\n\n return;\n }\n\n if (hasNewSrc) {\n const nextSeekTime =\n waitingSegmentIndexRef.current !== null\n ? getWaitingSegmentSeekTime()\n : 0;\n\n audioElement.pause();\n audioElement.removeAttribute(\"src\");\n audioElement.load();\n audioSrcRef.current = currentAudioUrl;\n activeSourceTypeRef.current = \"url\";\n audioElement.src = currentAudioUrl;\n audioElement.load();\n pendingSeekTimeRef.current = nextSeekTime;\n\n if (audioElement.readyState > 0) {\n audioElement.currentTime = nextSeekTime;\n pendingSeekTimeRef.current = null;\n }\n }\n\n pendingAutoPlayRef.current = shouldAutoResume;\n isWaitingForSegmentRef.current = false;\n isSwitchingSegmentRef.current = false;\n updateLoading(false);\n\n if (!shouldAutoResume) {\n pendingAutoPlayRef.current = false;\n audioElement.pause();\n setIsPlaying(false);\n return;\n }\n\n tryPlayCurrentAudio(hasNewSrc ? \"sync-url-init\" : \"sync-url\");\n return;\n }\n\n if (waitingSegmentIndexRef.current !== null) {\n if (waitingSegmentIndexRef.current < currentAudioSegments.length) {\n if (isPausedByUserRef.current) {\n setIsPlaying(false);\n updateLoading(false);\n return;\n }\n\n startSegmentPlayback(waitingSegmentIndexRef.current, \"wait-resume\");\n return;\n }\n\n isWaitingForSegmentRef.current = true;\n pendingAutoPlayRef.current = canStartPlaybackAutomatically();\n setIsPlaying(false);\n updateLoading(canStartPlaybackAutomatically());\n return;\n }\n\n if (!currentAudioSegments.length) {\n if (currentAudio.isAudioStreaming) {\n waitingSegmentIndexRef.current = currentSegmentIndexRef.current;\n isWaitingForSegmentRef.current = true;\n pendingAutoPlayRef.current = canStartPlaybackAutomatically();\n setIsPlaying(false);\n updateLoading(canStartPlaybackAutomatically());\n return;\n }\n\n resetAudio();\n return;\n }\n\n if (!audioSrcRef.current) {\n startSegmentPlayback(\n Math.min(\n currentSegmentIndexRef.current,\n currentAudioSegments.length - 1\n ),\n \"effect-init\"\n );\n return;\n }\n\n if (!defaultPlaying || isPausedByUserRef.current) {\n pendingAutoPlayRef.current = false;\n audioElement.pause();\n setIsPlaying(false);\n return;\n }\n\n if (audioElement.paused) {\n pendingAutoPlayRef.current = true;\n tryPlayCurrentAudio(\"sync-paused-retry\");\n }\n }, [\n currentAudio,\n currentAudioIndex,\n currentAudioSegments,\n currentAudioUrl,\n defaultPlaying,\n canStartPlaybackAutomatically,\n resetAudio,\n startSegmentPlayback,\n tryPlayCurrentAudio,\n getWaitingSegmentSeekTime,\n updateLoading,\n ]);\n\n useEffect(() => resetAudio, [resetAudio]);\n\n const handleAudioPlay = useCallback(() => {\n setIsPlaying(true);\n updateLoading(false);\n }, [updateLoading]);\n\n const handleAudioPause = useCallback(() => {\n if (isWaitingForSegmentRef.current || isSwitchingSegmentRef.current) {\n return;\n }\n\n setIsPlaying(false);\n }, [currentAudioIndex]);\n\n const handleAudioCanPlay = useCallback(() => {\n const audioElement = audioRef.current;\n\n if (audioElement && pendingSeekTimeRef.current !== null) {\n audioElement.currentTime = pendingSeekTimeRef.current;\n pendingSeekTimeRef.current = null;\n }\n\n if (!pendingAutoPlayRef.current || !defaultPlaying) {\n return;\n }\n\n tryPlayCurrentAudio(\"canplay\");\n }, [currentAudioIndex, defaultPlaying, tryPlayCurrentAudio]);\n\n const handleLoadedMetadata = useCallback(() => {\n const audioElement = audioRef.current;\n\n if (audioElement && pendingSeekTimeRef.current !== null) {\n audioElement.currentTime = pendingSeekTimeRef.current;\n pendingSeekTimeRef.current = null;\n }\n }, [currentAudioIndex]);\n\n const handleAudioEnded = useCallback(() => {\n const shouldFinishAsUrl =\n activeSourceTypeRef.current === \"url\" ||\n currentAudioSegmentsRef.current.length === 0;\n\n isSwitchingSegmentRef.current = false;\n\n if (shouldFinishAsUrl) {\n finishAudioItem(\"url-ended\");\n return;\n }\n\n handleSegmentEnded();\n }, [finishAudioItem, handleSegmentEnded]);\n\n const handleAudioError = useCallback(() => {\n setIsPlaying(false);\n updateLoading(false);\n }, [updateLoading]);\n\n return (\n <div className={cn(\"slide-player\", className)} {...props}>\n <audio\n ref={audioRef}\n preload=\"auto\"\n playsInline\n onLoadedMetadata={handleLoadedMetadata}\n onCanPlay={handleAudioCanPlay}\n onPlay={handleAudioPlay}\n onPause={handleAudioPause}\n onEnded={handleAudioEnded}\n onError={handleAudioError}\n />\n\n {showControls ? (\n <div className=\"slide-player__controls\" style={controlsStyle}>\n <div className=\"slide-player__group\">\n <button aria-label=\"More options\" className=\"hidden\" type=\"button\">\n <EllipsisVertical\n className=\"slide-player__icon\"\n strokeWidth={2.25}\n />\n </button>\n <button aria-label=\"Volume\" className=\"hidden\" type=\"button\">\n <Volume2 className=\"slide-player__icon\" strokeWidth={2.25} />\n </button>\n <button\n aria-label=\"Rewind\"\n className=\"slide-player__action\"\n disabled={prevDisabled}\n onClick={onPrev}\n type=\"button\"\n >\n <RotateCcw className=\"slide-player__icon\" strokeWidth={2.25} />\n </button>\n <button\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n className=\"slide-player__toggle\"\n onClick={() => {\n const audioElement = audioRef.current;\n\n if (!audioElement || !currentAudio) {\n return;\n }\n\n if (waitingSegmentIndexRef.current !== null) {\n if (isPlaying) {\n pendingAutoPlayRef.current = false;\n isPausedByUserRef.current = true;\n waitingSegmentIndexRef.current = null;\n isWaitingForSegmentRef.current = false;\n setIsPlaying(false);\n updateLoading(false);\n audioElement.pause();\n return;\n }\n\n playbackAccessModeRef.current = \"manual\";\n isPausedByUserRef.current = false;\n pendingAutoPlayRef.current = true;\n updateLoading(true);\n return;\n }\n\n if (!audioElement.src && currentAudioSegments.length > 0) {\n playbackAccessModeRef.current = \"manual\";\n isPausedByUserRef.current = false;\n startSegmentPlayback(\n Math.min(\n currentSegmentIndexRef.current,\n currentAudioSegments.length - 1\n ),\n \"toggle\"\n );\n return;\n }\n\n if (audioElement.paused) {\n playbackAccessModeRef.current = \"manual\";\n isPausedByUserRef.current = false;\n pendingAutoPlayRef.current = true;\n tryPlayCurrentAudio(\"toggle-resume\");\n return;\n }\n\n pendingAutoPlayRef.current = false;\n isPausedByUserRef.current = true;\n audioElement.pause();\n }}\n type=\"button\"\n >\n {isPlaying ? <PauseIcon /> : <PlayIcon />}\n </button>\n <button\n aria-label=\"Forward\"\n className=\"slide-player__action\"\n disabled={nextDisabled}\n onClick={onNext}\n type=\"button\"\n >\n <RotateCw className=\"slide-player__icon\" strokeWidth={2.25} />\n </button>\n <button\n aria-label=\"Fullscreen\"\n className=\"hidden\"\n onClick={onFullscreen}\n type=\"button\"\n >\n <Maximize className=\"slide-player__icon\" strokeWidth={2.25} />\n </button>\n </div>\n\n <div className=\"slide-player__separator\" />\n\n <div className=\"slide-player__group\">\n {customActionList.map((customAction, customActionIndex) => (\n <React.Fragment key={`custom-action-${customActionIndex}`}>\n {customAction}\n </React.Fragment>\n ))}\n <button\n aria-label=\"Notes\"\n className={cn(\n \"slide-player__action\",\n isInteractionOpen && \"slide-player__action--active\"\n )}\n disabled={!hasInteraction}\n onClick={onInteractionToggle}\n type=\"button\"\n >\n <FilePenLine className=\"slide-player__icon\" strokeWidth={2.25} />\n </button>\n </div>\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default Player;\n"],"names":["audioPreloadElementCache","preloadAudioUrl","url","audio","PauseIcon","jsxs","jsx","PlayIcon","Player","audioList","className","currentAudioIndex","defaultPlaying","onLoadingChange","onPrev","onNext","onFullscreen","onEnded","onInteractionToggle","hasInteraction","isInteractionOpen","prevDisabled","nextDisabled","showControls","customActions","props","audioRef","useRef","audioSrcRef","currentAudioKeyRef","currentSegmentIndexRef","waitingSegmentIndexRef","currentAudioRef","currentAudioSegmentsRef","isLoadingRef","isPausedByUserRef","activeSourceTypeRef","isWaitingForSegmentRef","pendingAutoPlayRef","pendingSeekTimeRef","isSwitchingSegmentRef","playbackAccessModeRef","isPlaying","setIsPlaying","useState","currentAudio","currentAudioUrl","currentAudioSegments","useMemo","prevSegment","nextSegment","customActionList","toPlayerCustomActionList","mobileVisibleActionCount","controlsStyle","currentAudioKey","useEffect","currentUrl","nextUrl","updateLoading","useCallback","loading","isAutoplayBlockedError","error","canStartPlaybackAutomatically","getSegmentSrc","audioData","getWaitingSegmentSeekTime","waitingSegmentIndex","totalDurationMs","segment","resetAudio","audioElement","tryPlayCurrentAudio","_reason","playPromise","startSegmentPlayback","segmentIndex","nextAudioSrc","shouldAutoResume","hasNewSrc","finishAudioItem","handleSegmentEnded","nextSegmentIndex","segments","activeAudio","hasFinal","nextSeekTime","handleAudioPlay","handleAudioPause","handleAudioCanPlay","handleLoadedMetadata","handleAudioEnded","shouldFinishAsUrl","handleAudioError","cn","EllipsisVertical","Volume2","RotateCcw","RotateCw","Maximize","customAction","customActionIndex","React","FilePenLine"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("../../_virtual/jsx-runtime.cjs.js"),t=require("react"),st=require("../../lib/sandboxInteraction.cjs.js"),V=require("../../lib/utils.cjs.js"),ot=require("../ContentRender/ContentRender.cjs.js"),qe=require("../ContentRender/IframeSandbox.cjs.js");require("../ui/inputGroup/input-group.cjs.js");const Te=require("../../lib/interaction-defaults.cjs.js"),ut=require("./Player.cjs.js"),lt=require("./useSlide.cjs.js"),it=require("./useWakePlayerFromIframe.cjs.js"),at=require("./utils/interactionPlayback.cjs.js"),ct=require("./utils/playbackSequence.cjs.js"),dt=require("./utils/playerCustomActions.cjs.js");;/* empty css */const ft=require("../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/lucide-react@0.525.0_react@19.0.1/node_modules/lucide-react/dist/esm/icons/loader-circle.cjs.js"),mt=1e3,Be=t.memo(({content:C,title:A,defaultButtonText:m,defaultInputText:O,defaultSelectedValues:S,confirmButtonText:te,copyButtonText:ne,copiedButtonText:_,onSend:L,readonly:k=!1})=>r.jsxRuntimeExports.jsxs("div",{className:"slide-player__interaction-card",children:[r.jsxRuntimeExports.jsx("div",{className:"slide-player__interaction-header",children:r.jsxRuntimeExports.jsx("p",{className:"slide-player__interaction-title",children:A})}),r.jsxRuntimeExports.jsx("div",{className:"slide-player__interaction-body",children:r.jsxRuntimeExports.jsx(ot.default,{content:C,defaultButtonText:m,defaultInputText:O,defaultSelectedValues:S,confirmButtonText:te,copyButtonText:ne,copiedButtonText:_,onSend:L,readonly:k,enableTypewriter:!1,sandboxMode:"content"})}),r.jsxRuntimeExports.jsx("div",{className:"slide-player__interaction-arrow"})]}));Be.displayName="InteractionOverlayCard";const pt=(C,A)=>C.length===A.length&&C.every((m,O)=>{const S=A[O];return m.sequence_number===S?.sequence_number&&m.type===S?.type&&m.content===S?.content}),xt=({elementList:C=[],showPlayer:A=!0,playerAlwaysVisible:m=!1,playerClassName:O,playerCustomActions:S,bufferingText:te="Buffering...",interactionTitle:ne,interactionTexts:_,playerAutoHideDelay:L=3e3,interactionDefaultValueOptions:k,onSend:ae,onPlayerVisibilityChange:re,onStepChange:ce,className:Me,onPointerDown:de,...Ne})=>{const se=t.useRef(null),oe=t.useRef(null),fe=t.useRef(null),H=t.useRef(null),$=t.useRef(null),z=t.useRef(null),me=t.useRef([]),W=t.useRef(!1),P=t.useRef(null),pe=t.useRef(null),{currentElementList:b,stepElementLists:xe,slideElementList:q,currentIndex:c,audioList:h,currentAudioSequenceIndexes:he,currentStepHasSpeakableElement:v,currentInteractionElement:a,canGoPrev:Ke,canGoNext:j,handlePrev:ye,handleNext:E}=lt.default(C),ge=t.useMemo(()=>{if(!(c<0))return q[c]},[c,q]),Fe=q.filter(e=>e.is_renderable!==!1).length===1,y=A&&(q.length>0||h.length>0||!!a),g=t.useMemo(()=>he.map(e=>h[e]?.audioKey).filter(e=>!!e),[h,he]),[Se,G]=t.useState(!0),[Y,D]=t.useState(!1),[f,T]=t.useState(null),[Oe,p]=t.useState(!1),[I,be]=t.useState(!1),[o,J]=t.useState(),[Q,U]=t.useState(!1),B=y&&(m||Se),ve=t.useMemo(()=>dt.getPlayerCustomActionCount(S),[S]),Le=t.useMemo(()=>({"--slide-player-custom-action-count":String(ve)}),[ve]),{mountedStepStates:He,currentMountedStateIndex:$e}=t.useMemo(()=>{const e=[],n=new Map;return xe.forEach((l,i)=>{const s=e.findIndex(u=>pt(u.elementList,l));if(s>=0){e[s]?.sourceStepIndexes.push(i),n.set(i,s);return}e.push({elementList:l,sourceStepIndexes:[i]}),n.set(i,e.length-1)}),{mountedStepStates:e,currentMountedStateIndex:c>=0?n.get(c)??-1:-1}},[c,xe]),Re=t.useMemo(()=>String(c),[c]),ue=t.useMemo(()=>f?h.findIndex(e=>(e.audioKey??"")===f):-1,[h,f]),X=t.useMemo(()=>g[0]??"none",[g]),Ee=g.length>0,Ie=t.useMemo(()=>a?`${a.sequence_number??"none"}:${String(a.content??"")}`:"none",[a]),le=t.useMemo(()=>[Re,Ie].join("|"),[Ie,Re]),je=!!t.useMemo(()=>!X||X==="none"?"":h.find(n=>n.audioKey===X)?.audioUrl?.trim()??"",[h,X]),w=t.useCallback(()=>{H.current!==null&&(window.clearTimeout(H.current),H.current=null)},[]),R=t.useCallback(()=>{z.current!==null&&(window.clearTimeout(z.current),z.current=null)},[]),M=t.useCallback(()=>{$.current!==null&&(window.clearTimeout($.current),$.current=null)},[]),N=t.useCallback(()=>{M(),R(),T(null),p(!1),be(!1),J(void 0),U(!1)},[M,R]),K=t.useCallback(()=>{const e=g[0];return e?(T(e),!0):!1},[g]),Z=t.useCallback(()=>{R(),U(!1),!K()&&j&&E()},[j,R,E,K]),d=t.useCallback((e=Y)=>{y&&(G(!0),w(),!(m||!e||L<=0)&&(H.current=window.setTimeout(()=>{G(!1),H.current=null},L)))},[w,Y,m,L,y]),ie=!!(a?.readonly||a?.user_input?.trim()),F=!!a&&!ie;t.useEffect(()=>()=>{M(),w(),R()},[M,R,w]),t.useEffect(()=>(re?.(B),()=>{re?.(!1)}),[re,B]),t.useEffect(()=>{ce?.(ge,c)},[c,ge,ce]),t.useEffect(()=>{if(!y){w(),G(!1);return}if(m){w(),G(!0);return}Y||d(!0)},[w,Y,m,y,d]),t.useEffect(()=>{if(typeof window>"u")return;const e=n=>{n.origin===window.location.origin&&st.isSandboxInteractionMessage(n.data)&&y&&(D(!0),d(!0))};return window.addEventListener("message",e),()=>{window.removeEventListener("message",e)}},[y,d]),it.default({sectionRef:se,enabled:y,onWake:()=>{D(!0),d(!0)}}),t.useEffect(()=>{const{hasPlaybackContextChanged:e,shouldInitializeAudioSequence:n}=ct.getPlaybackSequenceTransition({previousResetKey:pe.current,nextResetKey:le,currentAudioKey:f,hasCompletedCurrentStepAudio:I});pe.current=le;const l=P.current===c&&!!a,i=at.shouldPresentInteractionOverlay({hasInteraction:!!a,shouldBlockPlaybackForInteraction:F,shouldOpenInteractionOverlayAfterAudio:l,hasResolvedCurrentInteraction:ie,currentStepHasSpeakableElement:v});if(e&&N(),!(b.length===0&&!a)){if(i){J(a),U(!0),P.current=null;return}if(a&&(J(a),U(!1),P.current=null),!!n&&!K()){if(v){p(!0);return}if(j)return $.current=window.setTimeout(()=>{$.current=null,E()},mt),()=>{M()}}}},[j,M,b.length,a,f,le,v,E,I,ie,F,N,K]),t.useEffect(()=>{if(!v||F){p(!1);return}if(I){p(!1);return}if(Ee){p(!1);return}p(!0)},[Ee,v,I,F]),t.useEffect(()=>{f||g.length===0||!v||F||I||K()},[f,g,v,I,F,K]),t.useEffect(()=>{!f||ue>=0||T(null)},[ue,f]);const we=t.useMemo(()=>{if(!o)return{};const e=!!o.user_input?.trim();return Te.getInteractionDefaultValues(typeof o.content=="string"?o.content:void 0,o.user_input,e?void 0:k)},[o,k]),ze=t.useMemo(()=>{if(!o)return;const e=!!o.user_input?.trim();return Te.getInteractionDefaultSelectedValues(typeof o.content=="string"?o.content:void 0,o.user_input,e?void 0:k)},[o,k]),Ce=!!o?.user_input?.trim(),Ae=!!o?.readonly||Ce,_e=Ae||Ce,De=t.useCallback(e=>{const l=[...e.selectedValues??[],e.inputText?.trim()??"",e.buttonText?.trim()??""].filter(Boolean).join(", ");J(i=>!i||!l?i:{...i,user_input:l}),ae?.(e,o),Z()},[o,Z,ae]);t.useEffect(()=>{if(R(),!(!Q||!_e))return z.current=window.setTimeout(()=>{z.current=null,Z()},2e3),()=>{R()}},[R,Z,Q,_e]);const Ue=(e,n={})=>e?e.type==="slot"?r.jsxRuntimeExports.jsx(r.jsxRuntimeExports.Fragment,{children:e.content}):e.type==="html"?r.jsxRuntimeExports.jsx(qe.default,{className:"content-render-iframe",hideFullScreen:!0,mode:"blackboard",replaceRootScreenHeightWithFull:n.replaceRootScreenHeightWithFull,type:"sandbox",content:e.content}):r.jsxRuntimeExports.jsx(qe.default,{className:"content-render-iframe",hideFullScreen:!0,mode:"blackboard",type:"markdown",content:e.content}):null,Ve=(e=[],n=!1)=>{if(e.length===0)return null;const l=e.filter(s=>s.is_renderable!==!1).length,i=e.reduce((s,u,x)=>u.is_renderable!==!1?x:s,-1);return r.jsxRuntimeExports.jsx("div",{className:"slide-stage__content flex w-full flex-col gap-4",children:e.map((s,u)=>{const x=s.type==="html"&&s.is_renderable===!1;return r.jsxRuntimeExports.jsx("div",{ref:n&&u===i?fe:null,"aria-hidden":x||void 0,className:V.cn("w-full shrink-0",l===1&&s.is_renderable!==!1&&"slide-element--single",x?"pointer-events-none fixed left-[-200vw] top-0 -z-10 h-[100dvh] w-[100vw] overflow-hidden opacity-0":s.is_renderable===!1&&"hidden"),children:Ue(s,{replaceRootScreenHeightWithFull:l===1&&s.type==="html"&&s.is_renderable!==!1})},s.sequence_number??`${s.type}-${u}`)})})},We=()=>{const e=se.current;if(e){if(document.fullscreenElement){document.exitFullscreen().catch(()=>{});return}e.requestFullscreen?.().catch(()=>{})}},ke=t.useCallback(()=>{const e=oe.current;e&&e.scrollTo({top:e.scrollHeight,behavior:"smooth"})},[]),Ge=t.useCallback(()=>{W.current=!0,P.current=null,D(!0),p(!1),d(!0),N(),ye()},[ye,N,d]),Ye=t.useCallback(()=>{W.current=!0,P.current=null,D(!0),p(!1),d(!0),N(),E()},[E,N,d]),Je=t.useCallback(e=>{if(!v||I){p(!1);return}p(e)},[v,I]),Qe=t.useCallback(e=>{const n=h[e]?.audioKey;if(!n||!f||n!==f)return;const l=g.findIndex(u=>u===n);if(l<0){T(null);return}const i=l+1,s=g[i];if(s){T(s);return}if(T(null),be(!0),p(!1),j){const u=c+1,x=q[u];je&&x?.type==="interaction"&&(P.current=u),E()}},[h,j,c,f,g,E,je,q]),Xe=t.useCallback(()=>{o&&U(e=>!e)},[o]),Pe=t.useCallback(e=>{e.stopPropagation(),B&&d(!0)},[Se,d]),Ze=t.useCallback(e=>{de?.(e),D(!0),d(!0)},[de,d]),et=!!o&&Q,ee=t.useMemo(()=>b.map((e,n)=>`${e.sequence_number??`${e.type}-${n}`}:${String(e.is_new??"")}`),[b]);return t.useEffect(()=>{const e=me.current,i=(e.length>0&&e.length<ee.length&&e.every((u,x)=>u===ee[x])?b.slice(e.length):[]).some(u=>u.is_new===!1);if(me.current=ee,!i)return;const s=window.requestAnimationFrame(()=>{const u=oe.current,x=fe.current;if(!u||!x)return;const tt=u.getBoundingClientRect(),nt=x.getBoundingClientRect(),rt=u.scrollTop+(nt.top-tt.top);u.scrollTo({top:Math.max(rt,0),behavior:"smooth"})});return()=>{window.cancelAnimationFrame(s)}},[b,ee]),t.useEffect(()=>{if(!W.current||(W.current=!1,b.length===0))return;const e=window.requestAnimationFrame(()=>{ke()});return()=>{window.cancelAnimationFrame(e)}},[b,ke]),r.jsxRuntimeExports.jsxs("section",{ref:se,className:V.cn("relative h-full w-full",Me),onPointerDown:Ze,...Ne,children:[r.jsxRuntimeExports.jsx("div",{className:V.cn("h-full min-h-0 w-full",Fe?"slide-content--single":"grid gap-4"),children:b.length>0?r.jsxRuntimeExports.jsx("div",{className:"slide-stage",children:r.jsxRuntimeExports.jsx("div",{ref:oe,className:"slide-stage__layer w-full",children:He.map((e,n)=>{const l=n===$e;return r.jsxRuntimeExports.jsx("div",{"aria-hidden":!l||void 0,className:"w-full h-full",style:{display:l?void 0:"none"},children:Ve(e.elementList,l)},e.sourceStepIndexes[0]??n)})})}):null}),Oe?r.jsxRuntimeExports.jsxs("div",{className:"pointer-events-none absolute left-1/2 top-1/2 z-[3] flex size-28 -translate-x-1/2 -translate-y-1/2 flex-col items-center justify-center gap-2 rounded-2xl bg-foreground/65 px-3 py-4 text-center text-xs leading-4 font-medium text-background shadow-lg backdrop-blur-sm",children:[r.jsxRuntimeExports.jsx(ft.default,{className:"size-5 animate-spin text-background"}),r.jsxRuntimeExports.jsx("span",{children:te})]}):null,et?r.jsxRuntimeExports.jsx("div",{className:V.cn("slide-interaction-overlay",B&&y?"slide-interaction-overlay--with-player":"slide-interaction-overlay--standalone"),onClick:Pe,onPointerDown:Pe,style:Le,children:r.jsxRuntimeExports.jsx(Be,{content:String(o?.content??""),defaultButtonText:we.buttonText??"",defaultInputText:we.inputText??"",defaultSelectedValues:ze,confirmButtonText:_?.confirmButtonText,copyButtonText:_?.copyButtonText,copiedButtonText:_?.copiedButtonText,onSend:De,readonly:Ae,title:_?.title??ne??"Submit the content below to continue."})}):null,y?r.jsxRuntimeExports.jsx(ut.default,{audioList:h,className:V.cn("absolute left-1/2 bottom-6 z-[2] -translate-x-1/2",O,!B&&"pointer-events-none opacity-0"),currentAudioIndex:ue,defaultPlaying:!0,hasInteraction:!!o,isInteractionOpen:Q,onLoadingChange:Je,nextDisabled:!j,onEnded:Qe,onFullscreen:We,onInteractionToggle:Xe,onNext:Ye,onPrev:Ge,prevDisabled:!Ke,showControls:B,customActions:S}):null]})};exports.default=xt;
2
+ //# sourceMappingURL=Slide.cjs.js.map