markdown-flow-ui 0.1.100-beta.2 → 0.1.100-beta.21

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 (90) hide show
  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. package/dist/_virtual/index.cjs3.js +1 -1
  14. package/dist/_virtual/index.cjs4.js +1 -1
  15. package/dist/_virtual/index.es3.js +4 -5
  16. package/dist/_virtual/index.es3.js.map +1 -1
  17. package/dist/_virtual/index.es4.js +5 -4
  18. package/dist/_virtual/index.es4.js.map +1 -1
  19. package/dist/assets/markdown-flow-ui.css +1 -1
  20. package/dist/components/ContentRender/ContentRender.cjs.js +2 -2
  21. package/dist/components/ContentRender/ContentRender.cjs.js.map +1 -1
  22. package/dist/components/ContentRender/ContentRender.d.ts +13 -10
  23. package/dist/components/ContentRender/ContentRender.es.js +175 -158
  24. package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
  25. package/dist/components/ContentRender/IframeSandbox.cjs.js +3 -3
  26. package/dist/components/ContentRender/IframeSandbox.cjs.js.map +1 -1
  27. package/dist/components/ContentRender/IframeSandbox.d.ts +1 -0
  28. package/dist/components/ContentRender/IframeSandbox.es.js +331 -202
  29. package/dist/components/ContentRender/IframeSandbox.es.js.map +1 -1
  30. package/dist/components/ContentRender/SandboxApp.cjs.js +3 -3
  31. package/dist/components/ContentRender/SandboxApp.cjs.js.map +1 -1
  32. package/dist/components/ContentRender/SandboxApp.d.ts +4 -0
  33. package/dist/components/ContentRender/SandboxApp.es.js +144 -111
  34. package/dist/components/ContentRender/SandboxApp.es.js.map +1 -1
  35. package/dist/components/ContentRender/plugins/CustomVariable.cjs.js +1 -1
  36. package/dist/components/ContentRender/plugins/CustomVariable.cjs.js.map +1 -1
  37. package/dist/components/ContentRender/plugins/CustomVariable.es.js +68 -64
  38. package/dist/components/ContentRender/plugins/CustomVariable.es.js.map +1 -1
  39. package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js +1 -1
  40. package/dist/components/MarkdownFlow/MarkdownFlow.cjs.js.map +1 -1
  41. package/dist/components/MarkdownFlow/MarkdownFlow.d.ts +3 -0
  42. package/dist/components/MarkdownFlow/MarkdownFlow.es.js +19 -16
  43. package/dist/components/MarkdownFlow/MarkdownFlow.es.js.map +1 -1
  44. package/dist/components/Slide/Player.cjs.js +1 -1
  45. package/dist/components/Slide/Player.cjs.js.map +1 -1
  46. package/dist/components/Slide/Player.d.ts +1 -0
  47. package/dist/components/Slide/Player.es.js +208 -168
  48. package/dist/components/Slide/Player.es.js.map +1 -1
  49. package/dist/components/Slide/Slide.cjs.js +1 -1
  50. package/dist/components/Slide/Slide.cjs.js.map +1 -1
  51. package/dist/components/Slide/Slide.d.ts +13 -0
  52. package/dist/components/Slide/Slide.es.js +374 -255
  53. package/dist/components/Slide/Slide.es.js.map +1 -1
  54. package/dist/components/Slide/Slide.stories.d.ts +21 -1
  55. package/dist/components/Slide/index.d.ts +3 -3
  56. package/dist/components/Slide/types.d.ts +6 -6
  57. package/dist/components/Slide/useSlide.cjs.js +1 -1
  58. package/dist/components/Slide/useSlide.cjs.js.map +1 -1
  59. package/dist/components/Slide/useSlide.d.ts +4 -1
  60. package/dist/components/Slide/useSlide.es.js +115 -81
  61. package/dist/components/Slide/useSlide.es.js.map +1 -1
  62. package/dist/components/Slide/useWakePlayerFromIframe.cjs.js +2 -0
  63. package/dist/components/Slide/useWakePlayerFromIframe.cjs.js.map +1 -0
  64. package/dist/components/Slide/useWakePlayerFromIframe.d.ts +7 -0
  65. package/dist/components/Slide/useWakePlayerFromIframe.es.js +89 -0
  66. package/dist/components/Slide/useWakePlayerFromIframe.es.js.map +1 -0
  67. package/dist/components/index.d.ts +4 -2
  68. package/dist/components/ui/inputGroup/textarea.cjs.js +1 -1
  69. package/dist/components/ui/inputGroup/textarea.es.js +1 -1
  70. package/dist/index.cjs.js +1 -1
  71. package/dist/index.es.js +24 -22
  72. package/dist/lib/interaction-defaults.cjs.js +2 -0
  73. package/dist/lib/interaction-defaults.cjs.js.map +1 -0
  74. package/dist/lib/interaction-defaults.es.js +106 -0
  75. package/dist/lib/interaction-defaults.es.js.map +1 -0
  76. package/dist/lib/sandboxInteraction.cjs.js +2 -0
  77. package/dist/lib/sandboxInteraction.cjs.js.map +1 -0
  78. package/dist/lib/sandboxInteraction.d.ts +8 -0
  79. package/dist/lib/sandboxInteraction.es.js +12 -0
  80. package/dist/lib/sandboxInteraction.es.js.map +1 -0
  81. package/dist/markdown-flow-ui-lib.css +1 -1
  82. package/dist/renderer.cjs.js +1 -1
  83. package/dist/renderer.d.ts +5 -3
  84. package/dist/renderer.es.js +18 -16
  85. package/package.json +17 -2
  86. package/dist/components/Slide/interaction-defaults.cjs.js +0 -2
  87. package/dist/components/Slide/interaction-defaults.cjs.js.map +0 -1
  88. package/dist/components/Slide/interaction-defaults.es.js +0 -85
  89. package/dist/components/Slide/interaction-defaults.es.js.map +0 -1
  90. /package/dist/{components/Slide → lib}/interaction-defaults.d.ts +0 -0
@@ -1,102 +1,136 @@
1
- import { useRef as A, useMemo as u, useState as w, useEffect as y, useCallback as m } from "react";
2
- import { applyDiffElement as k } from "./diff-utils.es.js";
3
- const C = (t) => t.filter((n) => n.is_checkpoint), q = (t) => t.reduce((n, e, r) => (e.is_checkpoint && n.push(r), n), []), g = (t) => !!(t?.is_read && (t.audio_url || (t.audio_segments?.length ?? 0) > 0)), N = (t = []) => t.length > 0 && !t.some((n) => n.is_final), P = (t) => t.reduce((n, e) => (g(e) && n.push({
4
- serialNumber: e.serial_number,
5
- audioUrl: e.audio_url,
6
- audioSegments: e.audio_segments,
7
- isAudioStreaming: N(e.audio_segments)
8
- }), n), []), R = (t) => {
1
+ import { useRef as b, useMemo as c, useState as N, useEffect as R, useCallback as m } from "react";
2
+ import { applyDiffElement as w } from "./diff-utils.es.js";
3
+ const P = (e) => e.filter((n) => n.is_marker), B = (e) => e.reduce((n, t, r) => (t.is_marker && n.push(r), n), []), h = (e) => !!(e?.is_speakable && (e.audio_url || (e.audio_segments?.length ?? 0) > 0)), G = (e = []) => e.length > 0 && !e.some((n) => n.is_final), H = (e, n) => {
4
+ const t = e;
5
+ return t.element_bid || t.blockBid || t.generated_block_bid || `${e.type}:${String(e.sequence_number ?? n)}`;
6
+ }, K = (e) => e.reduce((n, t, r) => (h(t) && n.push({
7
+ audioKey: H(t, r),
8
+ sequenceNumber: t.sequence_number,
9
+ audioUrl: t.audio_url,
10
+ audioSegments: t.audio_segments,
11
+ isAudioStreaming: G(t.audio_segments)
12
+ }), n), []), $ = (e) => {
9
13
  const n = /* @__PURE__ */ new Map();
10
- let e = 0;
11
- return t.forEach((r, s) => {
12
- g(r) && (n.set(s, e), e += 1);
14
+ let t = 0;
15
+ return e.forEach((r, s) => {
16
+ h(r) && (n.set(s, t), t += 1);
13
17
  }), n;
14
- }, G = (t, n, e) => n.reduce(
15
- (r, s, c) => {
16
- const l = n[c + 1] ?? t.length, a = [];
17
- for (let o = s; o < l; o += 1) {
18
- const d = t[o];
19
- if (!g(d))
18
+ }, v = (e, n, t) => n.reduce(
19
+ (r, s, i) => {
20
+ const f = n[i + 1] ?? e.length, l = [];
21
+ for (let a = s; a < f; a += 1) {
22
+ const o = e[a];
23
+ if (!h(o))
20
24
  continue;
21
- const f = e.get(o);
22
- f != null && a.push(f);
25
+ const d = t.get(a);
26
+ d != null && l.push(d);
23
27
  }
24
- return r.set(c, a), r;
28
+ return r.set(i, l), r;
25
29
  },
26
30
  /* @__PURE__ */ new Map()
27
- ), p = (t) => {
28
- const n = t.findIndex(
29
- (e) => e.is_show === !0
31
+ ), p = (e) => {
32
+ const n = e.findIndex(
33
+ (t) => t.is_renderable === !0
30
34
  );
31
- return n >= 0 ? n : t.findIndex((e) => e.is_show !== !1);
32
- }, x = (t) => ({
33
- ...t,
34
- is_show: !0
35
- }), v = (t, n) => n < 0 ? [] : t.slice(0, n + 1).reduce((e, r) => {
35
+ return n >= 0 ? n : e.findIndex(
36
+ (t) => t.is_renderable !== !1
37
+ );
38
+ }, S = (e) => ({
39
+ ...e,
40
+ is_renderable: !0
41
+ }), _ = (e, n) => n < 0 ? [] : e.slice(0, n + 1).reduce((t, r) => {
36
42
  if (r.type === "interaction")
37
- return e;
38
- const s = x(r);
39
- return s.type === "diff" ? k(e, s) ?? [...e, s] : r.operation === "new" ? [s] : e.length === 0 ? [s] : [...e, s];
40
- }, []), B = (t, n) => t.length === n.length && t.every((e, r) => e === n[r]), V = (t = []) => {
41
- const n = A(t), e = u(() => B(n.current, t) ? n.current : (n.current = t, t), [t]), r = u(
42
- () => C(e),
43
- [e]
44
- ), s = u(
45
- () => q(e),
46
- [e]
47
- ), c = u(
48
- () => P(e),
49
- [e]
50
- ), l = u(
51
- () => R(e),
52
- [e]
53
- ), a = u(
54
- () => G(
55
- e,
56
- s,
43
+ return t;
44
+ const s = S(r);
45
+ return s.type === "diff" ? w(t, s) ?? [...t, s] : r.is_new ? [s] : t.length === 0 ? [s] : [...t, s];
46
+ }, []), D = (e) => e.map(
47
+ (n, t) => _(e, t)
48
+ ), U = (e, n, t) => {
49
+ if (t < 0)
50
+ return !1;
51
+ const r = n[t];
52
+ if (typeof r != "number")
53
+ return !1;
54
+ const s = n[t + 1] ?? e.length;
55
+ for (let i = r; i < s; i += 1)
56
+ if (e[i]?.is_speakable)
57
+ return !0;
58
+ return !1;
59
+ }, j = (e, n) => e.length === n.length && e.every((t, r) => t === n[r]), z = (e, n) => e.length === n.length && e.every((t, r) => t === n[r]), O = (e = []) => {
60
+ const n = b(e), t = b([]), r = c(() => j(n.current, e) ? n.current : (n.current = e, e), [e]), s = c(
61
+ () => P(r),
62
+ [r]
63
+ ), i = c(
64
+ () => B(r),
65
+ [r]
66
+ ), f = c(
67
+ () => K(r),
68
+ [r]
69
+ ), l = c(
70
+ () => $(r),
71
+ [r]
72
+ ), a = c(
73
+ () => v(
74
+ r,
75
+ i,
57
76
  l
58
77
  ),
59
- [l, s, e]
60
- ), [o, d] = w(
61
- () => p(r)
78
+ [l, i, r]
79
+ ), [o, d] = N(
80
+ () => p(s)
62
81
  );
63
- y(() => {
64
- d((i) => r.length === 0 ? -1 : i >= 0 && i < r.length ? i : p(r));
65
- }, [r]);
66
- const f = m(() => {
67
- d((i) => i <= 0 ? Math.max(i, 0) : Math.max(i - 1, 0));
68
- }, []), S = m(() => {
69
- d((i) => i < 0 ? i : Math.min(i + 1, r.length - 1));
70
- }, [r.length]), _ = o > 0, E = o >= 0 && o < r.length - 1, h = u(() => {
82
+ R(() => {
83
+ d((u) => s.length === 0 ? -1 : u >= 0 && u < s.length ? u : p(s));
84
+ }, [s]);
85
+ const x = m(() => {
86
+ d((u) => u <= 0 ? Math.max(u, 0) : Math.max(u - 1, 0));
87
+ }, []), E = m(() => {
88
+ d((u) => u < 0 ? u : Math.min(u + 1, s.length - 1));
89
+ }, [s.length]), M = o > 0, k = o >= 0 && o < s.length - 1, g = c(() => {
71
90
  if (o < 0)
72
91
  return;
73
- const i = r[o];
74
- if (i)
75
- return x(i);
76
- }, [o, r]), M = u(
77
- () => v(r, o),
78
- [o, r]
79
- ), b = u(
80
- () => a.get(o) ?? [],
81
- [o, a]
82
- ), I = u(
83
- () => h?.type === "interaction" ? h : void 0,
84
- [h]
92
+ const u = s[o];
93
+ if (u)
94
+ return S(u);
95
+ }, [o, s]), y = c(
96
+ () => _(s, o),
97
+ [o, s]
98
+ ), A = c(
99
+ () => D(s),
100
+ [s]
101
+ ), I = c(() => {
102
+ const u = a.get(o) ?? [];
103
+ return z(
104
+ t.current,
105
+ u
106
+ ) ? t.current : (t.current = u, u);
107
+ }, [o, a]), q = c(
108
+ () => U(
109
+ r,
110
+ i,
111
+ o
112
+ ),
113
+ [o, i, r]
114
+ ), C = c(
115
+ () => g?.type === "interaction" ? g : void 0,
116
+ [g]
85
117
  );
86
118
  return {
87
- currentElementList: M,
88
- slideElementList: r,
119
+ currentElementList: y,
120
+ stepElementLists: A,
121
+ slideElementList: s,
89
122
  currentIndex: o,
90
- audioList: c,
91
- currentAudioSequenceIndexes: b,
92
- currentInteractionElement: I,
93
- canGoPrev: _,
94
- canGoNext: E,
95
- handlePrev: f,
96
- handleNext: S
123
+ audioList: f,
124
+ currentAudioSequenceIndexes: I,
125
+ currentStepHasSpeakableElement: q,
126
+ currentInteractionElement: C,
127
+ canGoPrev: M,
128
+ canGoNext: k,
129
+ handlePrev: x,
130
+ handleNext: E
97
131
  };
98
132
  };
99
133
  export {
100
- V as default
134
+ O as default
101
135
  };
102
136
  //# sourceMappingURL=useSlide.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSlide.es.js","sources":["../../../src/components/Slide/useSlide.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { applyDiffElement } from \"./diff-utils\";\nimport type { Element, ElementAudioSegment } from \"./types\";\n\nexport interface SlideAudioItem {\n serialNumber?: number;\n audioUrl?: string;\n audioSegments?: ElementAudioSegment[];\n isAudioStreaming?: boolean;\n}\n\nexport interface UseSlideResult {\n currentElementList: Element[];\n slideElementList: Element[];\n currentIndex: number;\n audioList: SlideAudioItem[];\n currentAudioSequenceIndexes: number[];\n currentInteractionElement?: Element;\n canGoPrev: boolean;\n canGoNext: boolean;\n handlePrev: () => void;\n handleNext: () => void;\n}\n\nconst getSlideElementList = (elementList: Element[]) =>\n elementList.filter((element) => element.is_checkpoint);\n\nconst getSlideElementIndexes = (elementList: Element[]) =>\n elementList.reduce<number[]>((indexes, element, index) => {\n if (element.is_checkpoint) {\n indexes.push(index);\n }\n\n return indexes;\n }, []);\n\nconst hasPlayableAudio = (element?: Element) =>\n Boolean(\n element?.is_read &&\n (element.audio_url || (element.audio_segments?.length ?? 0) > 0)\n );\n\nconst isStreamingAudio = (segments: ElementAudioSegment[] = []) =>\n segments.length > 0 && !segments.some((segment) => segment.is_final);\n\nconst getAudioList = (elementList: Element[]) =>\n elementList.reduce<SlideAudioItem[]>((list, element) => {\n if (hasPlayableAudio(element)) {\n list.push({\n serialNumber: element.serial_number,\n audioUrl: element.audio_url,\n audioSegments: element.audio_segments,\n isAudioStreaming: isStreamingAudio(element.audio_segments),\n });\n }\n\n return list;\n }, []);\n\nconst getAudioIndexMap = (elementList: Element[]) => {\n const audioIndexMap = new Map<number, number>();\n let audioIndex = 0;\n\n elementList.forEach((element, index) => {\n if (hasPlayableAudio(element)) {\n audioIndexMap.set(index, audioIndex);\n audioIndex += 1;\n }\n });\n\n return audioIndexMap;\n};\n\nconst getSlideAudioSequenceMap = (\n elementList: Element[],\n slideElementIndexes: number[],\n audioIndexMap: Map<number, number>\n) =>\n slideElementIndexes.reduce<Map<number, number[]>>(\n (sequenceMap, startIndex, slideIndex) => {\n const nextCheckpointIndex =\n slideElementIndexes[slideIndex + 1] ?? elementList.length;\n const sequenceIndexes: number[] = [];\n\n for (let index = startIndex; index < nextCheckpointIndex; index += 1) {\n const element = elementList[index];\n\n if (!hasPlayableAudio(element)) {\n continue;\n }\n\n const audioIndex = audioIndexMap.get(index);\n\n if (audioIndex == null) {\n continue;\n }\n\n sequenceIndexes.push(audioIndex);\n }\n\n sequenceMap.set(slideIndex, sequenceIndexes);\n return sequenceMap;\n },\n new Map<number, number[]>()\n );\n\nconst getInitialSlideIndex = (slideElementList: Element[]) => {\n const visibleIndex = slideElementList.findIndex(\n (element) => element.is_show === true\n );\n\n if (visibleIndex >= 0) {\n return visibleIndex;\n }\n\n return slideElementList.findIndex((element) => element.is_show !== false);\n};\n\nconst getVisibleElement = (element: Element): Element => ({\n ...element,\n is_show: true,\n});\n\nconst getCurrentElementList = (\n slideElementList: Element[],\n currentIndex: number\n) => {\n if (currentIndex < 0) {\n return [];\n }\n\n return slideElementList\n .slice(0, currentIndex + 1)\n .reduce<Element[]>((currentList, element) => {\n if (element.type === \"interaction\") {\n return currentList;\n }\n\n const visibleElement = getVisibleElement(element);\n\n if (visibleElement.type === \"diff\") {\n const nextList = applyDiffElement(currentList, visibleElement);\n\n return nextList ?? [...currentList, visibleElement];\n }\n\n if (element.operation === \"new\") {\n return [visibleElement];\n }\n\n if (currentList.length === 0) {\n return [visibleElement];\n }\n\n return [...currentList, visibleElement];\n }, []);\n};\n\nconst hasSameElementReferences = (\n prevElementList: Element[],\n nextElementList: Element[]\n) =>\n prevElementList.length === nextElementList.length &&\n prevElementList.every((element, index) => element === nextElementList[index]);\n\nconst useSlide = (elementList: Element[] = []): UseSlideResult => {\n const stableElementListRef = useRef(elementList);\n const stableElementList = useMemo(() => {\n if (hasSameElementReferences(stableElementListRef.current, elementList)) {\n return stableElementListRef.current;\n }\n\n // Reuse the previous wrapper array when the element references are unchanged.\n stableElementListRef.current = elementList;\n return elementList;\n }, [elementList]);\n const slideElementList = useMemo(\n () => getSlideElementList(stableElementList),\n [stableElementList]\n );\n const slideElementIndexes = useMemo(\n () => getSlideElementIndexes(stableElementList),\n [stableElementList]\n );\n const audioList = useMemo(\n () => getAudioList(stableElementList),\n [stableElementList]\n );\n const audioIndexMap = useMemo(\n () => getAudioIndexMap(stableElementList),\n [stableElementList]\n );\n const slideAudioSequenceMap = useMemo(\n () =>\n getSlideAudioSequenceMap(\n stableElementList,\n slideElementIndexes,\n audioIndexMap\n ),\n [audioIndexMap, slideElementIndexes, stableElementList]\n );\n const [currentIndex, setCurrentIndex] = useState(() =>\n getInitialSlideIndex(slideElementList)\n );\n\n useEffect(() => {\n setCurrentIndex((prevIndex) => {\n if (slideElementList.length === 0) {\n return -1;\n }\n\n if (prevIndex >= 0 && prevIndex < slideElementList.length) {\n return prevIndex;\n }\n\n return getInitialSlideIndex(slideElementList);\n });\n }, [slideElementList]);\n\n const handlePrev = useCallback(() => {\n setCurrentIndex((prevIndex) => {\n if (prevIndex <= 0) {\n return Math.max(prevIndex, 0);\n }\n\n return Math.max(prevIndex - 1, 0);\n });\n }, []);\n\n const handleNext = useCallback(() => {\n setCurrentIndex((prevIndex) => {\n if (prevIndex < 0) {\n return prevIndex;\n }\n\n return Math.min(prevIndex + 1, slideElementList.length - 1);\n });\n }, [slideElementList.length]);\n\n const canGoPrev = currentIndex > 0;\n const canGoNext =\n currentIndex >= 0 && currentIndex < slideElementList.length - 1;\n const currentStepElement = useMemo(() => {\n if (currentIndex < 0) {\n return undefined;\n }\n\n const element = slideElementList[currentIndex];\n\n if (!element) {\n return undefined;\n }\n\n return getVisibleElement(element);\n }, [currentIndex, slideElementList]);\n const currentElementList = useMemo(\n () => getCurrentElementList(slideElementList, currentIndex),\n [currentIndex, slideElementList]\n );\n const currentAudioSequenceIndexes = useMemo(\n () => slideAudioSequenceMap.get(currentIndex) ?? [],\n [currentIndex, slideAudioSequenceMap]\n );\n const currentInteractionElement = useMemo(\n () =>\n currentStepElement?.type === \"interaction\"\n ? currentStepElement\n : undefined,\n [currentStepElement]\n );\n\n return {\n currentElementList,\n slideElementList,\n currentIndex,\n audioList,\n currentAudioSequenceIndexes,\n currentInteractionElement,\n canGoPrev,\n canGoNext,\n handlePrev,\n handleNext,\n };\n};\n\nexport default useSlide;\n"],"names":["getSlideElementList","elementList","element","getSlideElementIndexes","indexes","index","hasPlayableAudio","isStreamingAudio","segments","segment","getAudioList","list","getAudioIndexMap","audioIndexMap","audioIndex","getSlideAudioSequenceMap","slideElementIndexes","sequenceMap","startIndex","slideIndex","nextCheckpointIndex","sequenceIndexes","getInitialSlideIndex","slideElementList","visibleIndex","getVisibleElement","getCurrentElementList","currentIndex","currentList","visibleElement","applyDiffElement","hasSameElementReferences","prevElementList","nextElementList","useSlide","stableElementListRef","useRef","stableElementList","useMemo","audioList","slideAudioSequenceMap","setCurrentIndex","useState","useEffect","prevIndex","handlePrev","useCallback","handleNext","canGoPrev","canGoNext","currentStepElement","currentElementList","currentAudioSequenceIndexes","currentInteractionElement"],"mappings":"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"}
1
+ {"version":3,"file":"useSlide.es.js","sources":["../../../src/components/Slide/useSlide.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { applyDiffElement } from \"./diff-utils\";\nimport type { Element, ElementAudioSegment } from \"./types\";\n\nexport interface SlideAudioItem {\n audioKey?: string;\n sequenceNumber?: number;\n audioUrl?: string;\n audioSegments?: ElementAudioSegment[];\n isAudioStreaming?: boolean;\n}\n\nexport interface UseSlideResult {\n currentElementList: Element[];\n stepElementLists: Element[][];\n slideElementList: Element[];\n currentIndex: number;\n audioList: SlideAudioItem[];\n currentAudioSequenceIndexes: number[];\n currentStepHasSpeakableElement: boolean;\n currentInteractionElement?: Element;\n canGoPrev: boolean;\n canGoNext: boolean;\n handlePrev: () => void;\n handleNext: () => void;\n}\n\nconst getMarkerElementList = (elementList: Element[]) =>\n elementList.filter((element) => element.is_marker);\n\nconst getMarkerElementIndexes = (elementList: Element[]) =>\n elementList.reduce<number[]>((indexes, element, index) => {\n if (element.is_marker) {\n indexes.push(index);\n }\n\n return indexes;\n }, []);\n\nconst hasPlayableAudio = (element?: Element) =>\n Boolean(\n element?.is_speakable &&\n (element.audio_url || (element.audio_segments?.length ?? 0) > 0)\n );\n\nconst isStreamingAudio = (segments: ElementAudioSegment[] = []) =>\n segments.length > 0 && !segments.some((segment) => segment.is_final);\n\nconst getElementAudioKey = (element: Element, index: number) => {\n const candidateElement = element as Element & {\n element_bid?: string;\n blockBid?: string;\n generated_block_bid?: string;\n };\n\n return (\n candidateElement.element_bid ||\n candidateElement.blockBid ||\n candidateElement.generated_block_bid ||\n `${element.type}:${String(element.sequence_number ?? index)}`\n );\n};\n\nconst getAudioList = (elementList: Element[]) =>\n elementList.reduce<SlideAudioItem[]>((list, element, elementIndex) => {\n if (hasPlayableAudio(element)) {\n list.push({\n audioKey: getElementAudioKey(element, elementIndex),\n sequenceNumber: element.sequence_number,\n audioUrl: element.audio_url,\n audioSegments: element.audio_segments,\n isAudioStreaming: isStreamingAudio(element.audio_segments),\n });\n }\n\n return list;\n }, []);\n\nconst getAudioIndexMap = (elementList: Element[]) => {\n const audioIndexMap = new Map<number, number>();\n let audioIndex = 0;\n\n elementList.forEach((element, index) => {\n if (hasPlayableAudio(element)) {\n audioIndexMap.set(index, audioIndex);\n audioIndex += 1;\n }\n });\n\n return audioIndexMap;\n};\n\nconst getSlideAudioSequenceMap = (\n elementList: Element[],\n markerElementIndexes: number[],\n audioIndexMap: Map<number, number>\n) =>\n markerElementIndexes.reduce<Map<number, number[]>>(\n (sequenceMap, startIndex, slideIndex) => {\n const nextMarkerIndex =\n markerElementIndexes[slideIndex + 1] ?? elementList.length;\n const sequenceIndexes: number[] = [];\n\n for (let index = startIndex; index < nextMarkerIndex; index += 1) {\n const element = elementList[index];\n\n if (!hasPlayableAudio(element)) {\n continue;\n }\n\n const audioIndex = audioIndexMap.get(index);\n\n if (audioIndex == null) {\n continue;\n }\n\n sequenceIndexes.push(audioIndex);\n }\n\n sequenceMap.set(slideIndex, sequenceIndexes);\n return sequenceMap;\n },\n new Map<number, number[]>()\n );\n\nconst getInitialSlideIndex = (slideElementList: Element[]) => {\n const visibleIndex = slideElementList.findIndex(\n (element) => element.is_renderable === true\n );\n\n if (visibleIndex >= 0) {\n return visibleIndex;\n }\n\n return slideElementList.findIndex(\n (element) => element.is_renderable !== false\n );\n};\n\nconst getVisibleElement = (element: Element): Element => ({\n ...element,\n is_renderable: true,\n});\n\nconst getCurrentElementList = (\n slideElementList: Element[],\n currentIndex: number\n) => {\n if (currentIndex < 0) {\n return [];\n }\n\n return slideElementList\n .slice(0, currentIndex + 1)\n .reduce<Element[]>((currentList, element) => {\n if (element.type === \"interaction\") {\n return currentList;\n }\n\n const visibleElement = getVisibleElement(element);\n\n if (visibleElement.type === \"diff\") {\n const nextList = applyDiffElement(currentList, visibleElement);\n\n return nextList ?? [...currentList, visibleElement];\n }\n\n if (element.is_new) {\n return [visibleElement];\n }\n\n if (currentList.length === 0) {\n return [visibleElement];\n }\n\n return [...currentList, visibleElement];\n }, []);\n};\n\nconst getStepElementLists = (slideElementList: Element[]) =>\n slideElementList.map((_, index) =>\n getCurrentElementList(slideElementList, index)\n );\n\nconst getStepHasSpeakableElement = (\n elementList: Element[],\n markerElementIndexes: number[],\n currentIndex: number\n) => {\n if (currentIndex < 0) {\n return false;\n }\n\n const startIndex = markerElementIndexes[currentIndex];\n\n if (typeof startIndex !== \"number\") {\n return false;\n }\n\n const nextMarkerIndex =\n markerElementIndexes[currentIndex + 1] ?? elementList.length;\n\n for (let index = startIndex; index < nextMarkerIndex; index += 1) {\n if (elementList[index]?.is_speakable) {\n return true;\n }\n }\n\n return false;\n};\n\nconst hasSameElementReferences = (\n prevElementList: Element[],\n nextElementList: Element[]\n) =>\n prevElementList.length === nextElementList.length &&\n prevElementList.every((element, index) => element === nextElementList[index]);\n\nconst hasSameNumberValues = (prevValues: number[], nextValues: number[]) =>\n prevValues.length === nextValues.length &&\n prevValues.every((value, index) => value === nextValues[index]);\n\nconst useSlide = (elementList: Element[] = []): UseSlideResult => {\n const stableElementListRef = useRef(elementList);\n const stableCurrentAudioSequenceIndexesRef = useRef<number[]>([]);\n const stableElementList = useMemo(() => {\n if (hasSameElementReferences(stableElementListRef.current, elementList)) {\n return stableElementListRef.current;\n }\n\n // Reuse the previous wrapper array when the element references are unchanged.\n stableElementListRef.current = elementList;\n return elementList;\n }, [elementList]);\n const slideElementList = useMemo(\n () => getMarkerElementList(stableElementList),\n [stableElementList]\n );\n const markerElementIndexes = useMemo(\n () => getMarkerElementIndexes(stableElementList),\n [stableElementList]\n );\n const audioList = useMemo(\n () => getAudioList(stableElementList),\n [stableElementList]\n );\n const audioIndexMap = useMemo(\n () => getAudioIndexMap(stableElementList),\n [stableElementList]\n );\n const slideAudioSequenceMap = useMemo(\n () =>\n getSlideAudioSequenceMap(\n stableElementList,\n markerElementIndexes,\n audioIndexMap\n ),\n [audioIndexMap, markerElementIndexes, stableElementList]\n );\n const [currentIndex, setCurrentIndex] = useState(() =>\n getInitialSlideIndex(slideElementList)\n );\n\n useEffect(() => {\n setCurrentIndex((prevIndex) => {\n if (slideElementList.length === 0) {\n return -1;\n }\n\n if (prevIndex >= 0 && prevIndex < slideElementList.length) {\n return prevIndex;\n }\n\n return getInitialSlideIndex(slideElementList);\n });\n }, [slideElementList]);\n\n const handlePrev = useCallback(() => {\n setCurrentIndex((prevIndex) => {\n if (prevIndex <= 0) {\n return Math.max(prevIndex, 0);\n }\n\n return Math.max(prevIndex - 1, 0);\n });\n }, []);\n\n const handleNext = useCallback(() => {\n setCurrentIndex((prevIndex) => {\n if (prevIndex < 0) {\n return prevIndex;\n }\n\n return Math.min(prevIndex + 1, slideElementList.length - 1);\n });\n }, [slideElementList.length]);\n\n const canGoPrev = currentIndex > 0;\n const canGoNext =\n currentIndex >= 0 && currentIndex < slideElementList.length - 1;\n const currentStepElement = useMemo(() => {\n if (currentIndex < 0) {\n return undefined;\n }\n\n const element = slideElementList[currentIndex];\n\n if (!element) {\n return undefined;\n }\n\n return getVisibleElement(element);\n }, [currentIndex, slideElementList]);\n const currentElementList = useMemo(\n () => getCurrentElementList(slideElementList, currentIndex),\n [currentIndex, slideElementList]\n );\n const stepElementLists = useMemo(\n () => getStepElementLists(slideElementList),\n [slideElementList]\n );\n const currentAudioSequenceIndexes = useMemo(() => {\n const nextAudioSequenceIndexes =\n slideAudioSequenceMap.get(currentIndex) ?? [];\n\n if (\n hasSameNumberValues(\n stableCurrentAudioSequenceIndexesRef.current,\n nextAudioSequenceIndexes\n )\n ) {\n return stableCurrentAudioSequenceIndexesRef.current;\n }\n\n stableCurrentAudioSequenceIndexesRef.current = nextAudioSequenceIndexes;\n\n return nextAudioSequenceIndexes;\n }, [currentIndex, slideAudioSequenceMap]);\n const currentStepHasSpeakableElement = useMemo(\n () =>\n getStepHasSpeakableElement(\n stableElementList,\n markerElementIndexes,\n currentIndex\n ),\n [currentIndex, markerElementIndexes, stableElementList]\n );\n const currentInteractionElement = useMemo(\n () =>\n currentStepElement?.type === \"interaction\"\n ? currentStepElement\n : undefined,\n [currentStepElement]\n );\n\n return {\n currentElementList,\n stepElementLists,\n slideElementList,\n currentIndex,\n audioList,\n currentAudioSequenceIndexes,\n currentStepHasSpeakableElement,\n currentInteractionElement,\n canGoPrev,\n canGoNext,\n handlePrev,\n handleNext,\n };\n};\n\nexport default useSlide;\n"],"names":["getMarkerElementList","elementList","element","getMarkerElementIndexes","indexes","index","hasPlayableAudio","isStreamingAudio","segments","segment","getElementAudioKey","candidateElement","getAudioList","list","elementIndex","getAudioIndexMap","audioIndexMap","audioIndex","getSlideAudioSequenceMap","markerElementIndexes","sequenceMap","startIndex","slideIndex","nextMarkerIndex","sequenceIndexes","getInitialSlideIndex","slideElementList","visibleIndex","getVisibleElement","getCurrentElementList","currentIndex","currentList","visibleElement","applyDiffElement","getStepElementLists","_","getStepHasSpeakableElement","hasSameElementReferences","prevElementList","nextElementList","hasSameNumberValues","prevValues","nextValues","value","useSlide","stableElementListRef","useRef","stableCurrentAudioSequenceIndexesRef","stableElementList","useMemo","audioList","slideAudioSequenceMap","setCurrentIndex","useState","useEffect","prevIndex","handlePrev","useCallback","handleNext","canGoPrev","canGoNext","currentStepElement","currentElementList","stepElementLists","currentAudioSequenceIndexes","nextAudioSequenceIndexes","currentStepHasSpeakableElement","currentInteractionElement"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react"),h=({sectionRef:d,enabled:u,onWake:c})=>{const i=s.useRef(u),l=s.useRef(c);s.useEffect(()=>{i.current=u},[u]),s.useEffect(()=>{l.current=c},[c]),s.useEffect(()=>{const a=d.current;if(!a)return;const r=new Map,L=()=>{i.current&&l.current()},v=e=>{if(r.has(e))return;const o=()=>{r.get(e)?.cleanup(),r.delete(e),v(e)};e.addEventListener("load",o);const t=e.contentDocument;if(!t){r.set(e,{cleanup:()=>{e.removeEventListener("load",o)}});return}const n=()=>{L()};t.addEventListener("pointerdown",n,!0),t.addEventListener("mousedown",n,!0),t.addEventListener("touchstart",n,!0),r.set(e,{cleanup:()=>{t.removeEventListener("pointerdown",n,!0),t.removeEventListener("mousedown",n,!0),t.removeEventListener("touchstart",n,!0),e.removeEventListener("load",o)}})},f=()=>{const e=Array.from(a.querySelectorAll("iframe.content-render-iframe"));e.forEach(v),r.forEach((o,t)=>{e.includes(t)||(o.cleanup(),r.delete(t))})},p=new MutationObserver(()=>{f()});return f(),p.observe(a,{childList:!0,subtree:!0}),()=>{p.disconnect(),r.forEach(e=>e.cleanup()),r.clear()}},[d])};exports.default=h;
2
+ //# sourceMappingURL=useWakePlayerFromIframe.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWakePlayerFromIframe.cjs.js","sources":["../../../src/components/Slide/useWakePlayerFromIframe.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n\ntype UseWakePlayerFromIframeParams = {\n sectionRef: React.RefObject<HTMLElement | null>;\n enabled: boolean;\n onWake: () => void;\n};\n\nconst useWakePlayerFromIframe = ({\n sectionRef,\n enabled,\n onWake,\n}: UseWakePlayerFromIframeParams) => {\n const enabledRef = useRef(enabled);\n const onWakeRef = useRef(onWake);\n\n useEffect(() => {\n enabledRef.current = enabled;\n }, [enabled]);\n\n useEffect(() => {\n onWakeRef.current = onWake;\n }, [onWake]);\n\n useEffect(() => {\n const sectionElement = sectionRef.current;\n\n if (!sectionElement) {\n return;\n }\n\n const cleanupMap = new Map<\n HTMLIFrameElement,\n {\n cleanup: () => void;\n }\n >();\n\n const restorePlayerControls = () => {\n if (!enabledRef.current) {\n return;\n }\n\n onWakeRef.current();\n };\n\n const bindIframeDocument = (iframeElement: HTMLIFrameElement) => {\n if (cleanupMap.has(iframeElement)) {\n return;\n }\n\n const handleLoad = () => {\n cleanupMap.get(iframeElement)?.cleanup();\n cleanupMap.delete(iframeElement);\n bindIframeDocument(iframeElement);\n };\n\n iframeElement.addEventListener(\"load\", handleLoad);\n\n const iframeDocument = iframeElement.contentDocument;\n\n if (!iframeDocument) {\n cleanupMap.set(iframeElement, {\n cleanup: () => {\n iframeElement.removeEventListener(\"load\", handleLoad);\n },\n });\n return;\n }\n\n const handleIframeDocumentInteraction = () => {\n restorePlayerControls();\n };\n\n iframeDocument.addEventListener(\n \"pointerdown\",\n handleIframeDocumentInteraction,\n true\n );\n iframeDocument.addEventListener(\n \"mousedown\",\n handleIframeDocumentInteraction,\n true\n );\n iframeDocument.addEventListener(\n \"touchstart\",\n handleIframeDocumentInteraction,\n true\n );\n\n cleanupMap.set(iframeElement, {\n cleanup: () => {\n iframeDocument.removeEventListener(\n \"pointerdown\",\n handleIframeDocumentInteraction,\n true\n );\n iframeDocument.removeEventListener(\n \"mousedown\",\n handleIframeDocumentInteraction,\n true\n );\n iframeDocument.removeEventListener(\n \"touchstart\",\n handleIframeDocumentInteraction,\n true\n );\n iframeElement.removeEventListener(\"load\", handleLoad);\n },\n });\n };\n\n const syncIframeBindings = () => {\n const iframeElements = Array.from(\n sectionElement.querySelectorAll<HTMLIFrameElement>(\n \"iframe.content-render-iframe\"\n )\n );\n\n iframeElements.forEach(bindIframeDocument);\n\n cleanupMap.forEach((value, iframeElement) => {\n if (iframeElements.includes(iframeElement)) {\n return;\n }\n\n value.cleanup();\n cleanupMap.delete(iframeElement);\n });\n };\n\n const mutationObserver = new MutationObserver(() => {\n syncIframeBindings();\n });\n\n syncIframeBindings();\n mutationObserver.observe(sectionElement, {\n childList: true,\n subtree: true,\n });\n\n return () => {\n mutationObserver.disconnect();\n cleanupMap.forEach((value) => value.cleanup());\n cleanupMap.clear();\n };\n }, [sectionRef]);\n};\n\nexport default useWakePlayerFromIframe;\n"],"names":["useWakePlayerFromIframe","sectionRef","enabled","onWake","enabledRef","useRef","onWakeRef","useEffect","sectionElement","cleanupMap","restorePlayerControls","bindIframeDocument","iframeElement","handleLoad","iframeDocument","handleIframeDocumentInteraction","syncIframeBindings","iframeElements","value","mutationObserver"],"mappings":"qIAQMA,EAA0B,CAAC,CAC/B,WAAAC,EACA,QAAAC,EACA,OAAAC,CACF,IAAqC,CACnC,MAAMC,EAAaC,EAAAA,OAAOH,CAAO,EAC3BI,EAAYD,EAAAA,OAAOF,CAAM,EAE/BI,EAAAA,UAAU,IAAM,CACdH,EAAW,QAAUF,CACvB,EAAG,CAACA,CAAO,CAAC,EAEZK,EAAAA,UAAU,IAAM,CACdD,EAAU,QAAUH,CACtB,EAAG,CAACA,CAAM,CAAC,EAEXI,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAiBP,EAAW,QAElC,GAAI,CAACO,EACH,OAGF,MAAMC,MAAiB,IAOjBC,EAAwB,IAAM,CAC7BN,EAAW,SAIhBE,EAAU,QAAA,CACZ,EAEMK,EAAsBC,GAAqC,CAC/D,GAAIH,EAAW,IAAIG,CAAa,EAC9B,OAGF,MAAMC,EAAa,IAAM,CACvBJ,EAAW,IAAIG,CAAa,GAAG,QAAA,EAC/BH,EAAW,OAAOG,CAAa,EAC/BD,EAAmBC,CAAa,CAClC,EAEAA,EAAc,iBAAiB,OAAQC,CAAU,EAEjD,MAAMC,EAAiBF,EAAc,gBAErC,GAAI,CAACE,EAAgB,CACnBL,EAAW,IAAIG,EAAe,CAC5B,QAAS,IAAM,CACbA,EAAc,oBAAoB,OAAQC,CAAU,CACtD,CAAA,CACD,EACD,MACF,CAEA,MAAME,EAAkC,IAAM,CAC5CL,EAAA,CACF,EAEAI,EAAe,iBACb,cACAC,EACA,EAAA,EAEFD,EAAe,iBACb,YACAC,EACA,EAAA,EAEFD,EAAe,iBACb,aACAC,EACA,EAAA,EAGFN,EAAW,IAAIG,EAAe,CAC5B,QAAS,IAAM,CACbE,EAAe,oBACb,cACAC,EACA,EAAA,EAEFD,EAAe,oBACb,YACAC,EACA,EAAA,EAEFD,EAAe,oBACb,aACAC,EACA,EAAA,EAEFH,EAAc,oBAAoB,OAAQC,CAAU,CACtD,CAAA,CACD,CACH,EAEMG,EAAqB,IAAM,CAC/B,MAAMC,EAAiB,MAAM,KAC3BT,EAAe,iBACb,8BAAA,CACF,EAGFS,EAAe,QAAQN,CAAkB,EAEzCF,EAAW,QAAQ,CAACS,EAAON,IAAkB,CACvCK,EAAe,SAASL,CAAa,IAIzCM,EAAM,QAAA,EACNT,EAAW,OAAOG,CAAa,EACjC,CAAC,CACH,EAEMO,EAAmB,IAAI,iBAAiB,IAAM,CAClDH,EAAA,CACF,CAAC,EAED,OAAAA,EAAA,EACAG,EAAiB,QAAQX,EAAgB,CACvC,UAAW,GACX,QAAS,EAAA,CACV,EAEM,IAAM,CACXW,EAAiB,WAAA,EACjBV,EAAW,QAASS,GAAUA,EAAM,SAAS,EAC7CT,EAAW,MAAA,CACb,CACF,EAAG,CAACR,CAAU,CAAC,CACjB"}
@@ -0,0 +1,7 @@
1
+ type UseWakePlayerFromIframeParams = {
2
+ sectionRef: React.RefObject<HTMLElement | null>;
3
+ enabled: boolean;
4
+ onWake: () => void;
5
+ };
6
+ declare const useWakePlayerFromIframe: ({ sectionRef, enabled, onWake, }: UseWakePlayerFromIframeParams) => void;
7
+ export default useWakePlayerFromIframe;
@@ -0,0 +1,89 @@
1
+ import { useRef as L, useEffect as a } from "react";
2
+ const w = ({
3
+ sectionRef: d,
4
+ enabled: s,
5
+ onWake: c
6
+ }) => {
7
+ const i = L(s), v = L(c);
8
+ a(() => {
9
+ i.current = s;
10
+ }, [s]), a(() => {
11
+ v.current = c;
12
+ }, [c]), a(() => {
13
+ const u = d.current;
14
+ if (!u)
15
+ return;
16
+ const r = /* @__PURE__ */ new Map(), h = () => {
17
+ i.current && v.current();
18
+ }, l = (e) => {
19
+ if (r.has(e))
20
+ return;
21
+ const o = () => {
22
+ r.get(e)?.cleanup(), r.delete(e), l(e);
23
+ };
24
+ e.addEventListener("load", o);
25
+ const t = e.contentDocument;
26
+ if (!t) {
27
+ r.set(e, {
28
+ cleanup: () => {
29
+ e.removeEventListener("load", o);
30
+ }
31
+ });
32
+ return;
33
+ }
34
+ const n = () => {
35
+ h();
36
+ };
37
+ t.addEventListener(
38
+ "pointerdown",
39
+ n,
40
+ !0
41
+ ), t.addEventListener(
42
+ "mousedown",
43
+ n,
44
+ !0
45
+ ), t.addEventListener(
46
+ "touchstart",
47
+ n,
48
+ !0
49
+ ), r.set(e, {
50
+ cleanup: () => {
51
+ t.removeEventListener(
52
+ "pointerdown",
53
+ n,
54
+ !0
55
+ ), t.removeEventListener(
56
+ "mousedown",
57
+ n,
58
+ !0
59
+ ), t.removeEventListener(
60
+ "touchstart",
61
+ n,
62
+ !0
63
+ ), e.removeEventListener("load", o);
64
+ }
65
+ });
66
+ }, f = () => {
67
+ const e = Array.from(
68
+ u.querySelectorAll(
69
+ "iframe.content-render-iframe"
70
+ )
71
+ );
72
+ e.forEach(l), r.forEach((o, t) => {
73
+ e.includes(t) || (o.cleanup(), r.delete(t));
74
+ });
75
+ }, p = new MutationObserver(() => {
76
+ f();
77
+ });
78
+ return f(), p.observe(u, {
79
+ childList: !0,
80
+ subtree: !0
81
+ }), () => {
82
+ p.disconnect(), r.forEach((e) => e.cleanup()), r.clear();
83
+ };
84
+ }, [d]);
85
+ };
86
+ export {
87
+ w as default
88
+ };
89
+ //# sourceMappingURL=useWakePlayerFromIframe.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useWakePlayerFromIframe.es.js","sources":["../../../src/components/Slide/useWakePlayerFromIframe.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n\ntype UseWakePlayerFromIframeParams = {\n sectionRef: React.RefObject<HTMLElement | null>;\n enabled: boolean;\n onWake: () => void;\n};\n\nconst useWakePlayerFromIframe = ({\n sectionRef,\n enabled,\n onWake,\n}: UseWakePlayerFromIframeParams) => {\n const enabledRef = useRef(enabled);\n const onWakeRef = useRef(onWake);\n\n useEffect(() => {\n enabledRef.current = enabled;\n }, [enabled]);\n\n useEffect(() => {\n onWakeRef.current = onWake;\n }, [onWake]);\n\n useEffect(() => {\n const sectionElement = sectionRef.current;\n\n if (!sectionElement) {\n return;\n }\n\n const cleanupMap = new Map<\n HTMLIFrameElement,\n {\n cleanup: () => void;\n }\n >();\n\n const restorePlayerControls = () => {\n if (!enabledRef.current) {\n return;\n }\n\n onWakeRef.current();\n };\n\n const bindIframeDocument = (iframeElement: HTMLIFrameElement) => {\n if (cleanupMap.has(iframeElement)) {\n return;\n }\n\n const handleLoad = () => {\n cleanupMap.get(iframeElement)?.cleanup();\n cleanupMap.delete(iframeElement);\n bindIframeDocument(iframeElement);\n };\n\n iframeElement.addEventListener(\"load\", handleLoad);\n\n const iframeDocument = iframeElement.contentDocument;\n\n if (!iframeDocument) {\n cleanupMap.set(iframeElement, {\n cleanup: () => {\n iframeElement.removeEventListener(\"load\", handleLoad);\n },\n });\n return;\n }\n\n const handleIframeDocumentInteraction = () => {\n restorePlayerControls();\n };\n\n iframeDocument.addEventListener(\n \"pointerdown\",\n handleIframeDocumentInteraction,\n true\n );\n iframeDocument.addEventListener(\n \"mousedown\",\n handleIframeDocumentInteraction,\n true\n );\n iframeDocument.addEventListener(\n \"touchstart\",\n handleIframeDocumentInteraction,\n true\n );\n\n cleanupMap.set(iframeElement, {\n cleanup: () => {\n iframeDocument.removeEventListener(\n \"pointerdown\",\n handleIframeDocumentInteraction,\n true\n );\n iframeDocument.removeEventListener(\n \"mousedown\",\n handleIframeDocumentInteraction,\n true\n );\n iframeDocument.removeEventListener(\n \"touchstart\",\n handleIframeDocumentInteraction,\n true\n );\n iframeElement.removeEventListener(\"load\", handleLoad);\n },\n });\n };\n\n const syncIframeBindings = () => {\n const iframeElements = Array.from(\n sectionElement.querySelectorAll<HTMLIFrameElement>(\n \"iframe.content-render-iframe\"\n )\n );\n\n iframeElements.forEach(bindIframeDocument);\n\n cleanupMap.forEach((value, iframeElement) => {\n if (iframeElements.includes(iframeElement)) {\n return;\n }\n\n value.cleanup();\n cleanupMap.delete(iframeElement);\n });\n };\n\n const mutationObserver = new MutationObserver(() => {\n syncIframeBindings();\n });\n\n syncIframeBindings();\n mutationObserver.observe(sectionElement, {\n childList: true,\n subtree: true,\n });\n\n return () => {\n mutationObserver.disconnect();\n cleanupMap.forEach((value) => value.cleanup());\n cleanupMap.clear();\n };\n }, [sectionRef]);\n};\n\nexport default useWakePlayerFromIframe;\n"],"names":["useWakePlayerFromIframe","sectionRef","enabled","onWake","enabledRef","useRef","onWakeRef","useEffect","sectionElement","cleanupMap","restorePlayerControls","bindIframeDocument","iframeElement","handleLoad","iframeDocument","handleIframeDocumentInteraction","syncIframeBindings","iframeElements","value","mutationObserver"],"mappings":";AAQA,MAAMA,IAA0B,CAAC;AAAA,EAC/B,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AACF,MAAqC;AACnC,QAAMC,IAAaC,EAAOH,CAAO,GAC3BI,IAAYD,EAAOF,CAAM;AAE/B,EAAAI,EAAU,MAAM;AACd,IAAAH,EAAW,UAAUF;AAAA,EACvB,GAAG,CAACA,CAAO,CAAC,GAEZK,EAAU,MAAM;AACd,IAAAD,EAAU,UAAUH;AAAA,EACtB,GAAG,CAACA,CAAM,CAAC,GAEXI,EAAU,MAAM;AACd,UAAMC,IAAiBP,EAAW;AAElC,QAAI,CAACO;AACH;AAGF,UAAMC,wBAAiB,IAAA,GAOjBC,IAAwB,MAAM;AAClC,MAAKN,EAAW,WAIhBE,EAAU,QAAA;AAAA,IACZ,GAEMK,IAAqB,CAACC,MAAqC;AAC/D,UAAIH,EAAW,IAAIG,CAAa;AAC9B;AAGF,YAAMC,IAAa,MAAM;AACvB,QAAAJ,EAAW,IAAIG,CAAa,GAAG,QAAA,GAC/BH,EAAW,OAAOG,CAAa,GAC/BD,EAAmBC,CAAa;AAAA,MAClC;AAEA,MAAAA,EAAc,iBAAiB,QAAQC,CAAU;AAEjD,YAAMC,IAAiBF,EAAc;AAErC,UAAI,CAACE,GAAgB;AACnB,QAAAL,EAAW,IAAIG,GAAe;AAAA,UAC5B,SAAS,MAAM;AACb,YAAAA,EAAc,oBAAoB,QAAQC,CAAU;AAAA,UACtD;AAAA,QAAA,CACD;AACD;AAAA,MACF;AAEA,YAAME,IAAkC,MAAM;AAC5C,QAAAL,EAAA;AAAA,MACF;AAEA,MAAAI,EAAe;AAAA,QACb;AAAA,QACAC;AAAA,QACA;AAAA,MAAA,GAEFD,EAAe;AAAA,QACb;AAAA,QACAC;AAAA,QACA;AAAA,MAAA,GAEFD,EAAe;AAAA,QACb;AAAA,QACAC;AAAA,QACA;AAAA,MAAA,GAGFN,EAAW,IAAIG,GAAe;AAAA,QAC5B,SAAS,MAAM;AACb,UAAAE,EAAe;AAAA,YACb;AAAA,YACAC;AAAA,YACA;AAAA,UAAA,GAEFD,EAAe;AAAA,YACb;AAAA,YACAC;AAAA,YACA;AAAA,UAAA,GAEFD,EAAe;AAAA,YACb;AAAA,YACAC;AAAA,YACA;AAAA,UAAA,GAEFH,EAAc,oBAAoB,QAAQC,CAAU;AAAA,QACtD;AAAA,MAAA,CACD;AAAA,IACH,GAEMG,IAAqB,MAAM;AAC/B,YAAMC,IAAiB,MAAM;AAAA,QAC3BT,EAAe;AAAA,UACb;AAAA,QAAA;AAAA,MACF;AAGF,MAAAS,EAAe,QAAQN,CAAkB,GAEzCF,EAAW,QAAQ,CAACS,GAAON,MAAkB;AAC3C,QAAIK,EAAe,SAASL,CAAa,MAIzCM,EAAM,QAAA,GACNT,EAAW,OAAOG,CAAa;AAAA,MACjC,CAAC;AAAA,IACH,GAEMO,IAAmB,IAAI,iBAAiB,MAAM;AAClD,MAAAH,EAAA;AAAA,IACF,CAAC;AAED,WAAAA,EAAA,GACAG,EAAiB,QAAQX,GAAgB;AAAA,MACvC,WAAW;AAAA,MACX,SAAS;AAAA,IAAA,CACV,GAEM,MAAM;AACX,MAAAW,EAAiB,WAAA,GACjBV,EAAW,QAAQ,CAACS,MAAUA,EAAM,SAAS,GAC7CT,EAAW,MAAA;AAAA,IACb;AAAA,EACF,GAAG,CAACR,CAAU,CAAC;AACjB;"}
@@ -3,10 +3,12 @@ export { default as MarkdownFlow } from './MarkdownFlow';
3
3
  export { default as ScrollableMarkdown } from './MarkdownFlow/ScrollableMarkdownFlow';
4
4
  export { default as MarkdownFlowEditor } from './MarkdownFlowEditor';
5
5
  export { default as Slide } from './Slide';
6
- export { Player, useSlide, getInteractionDefaultValues, getInteractionDefaultSelectedValues, } from './Slide';
6
+ export { Player, useSlide } from './Slide';
7
+ export { getInteractionDefaultValues, getInteractionDefaultSelectedValues, } from '../lib/interaction-defaults';
7
8
  export type { ContentRenderProps } from './ContentRender/ContentRender';
8
9
  export type { OnSendContentParams, CustomRenderBarProps } from './types';
9
10
  export type { EditMode, UploadProps, ImageResource, } from './MarkdownFlowEditor';
10
- export type { Element, InteractionDefaultResolver, InteractionDefaultResolverParams, InteractionDefaultValueOptions, InteractionDefaultValues, InteractionParseResult, SlideProps, } from './Slide';
11
+ export type { Element, SlideInteractionTexts, SlideProps } from './Slide';
12
+ export type { InteractionDefaultResolver, InteractionDefaultResolverParams, InteractionDefaultValueOptions, InteractionDefaultValues, InteractionParseResult, } from '../lib/interaction-defaults';
11
13
  export type { PlayerProps } from './Slide';
12
14
  export type { UseSlideResult } from './Slide';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../_virtual/jsx-runtime.cjs.js"),s=require("react"),u=require("../../../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");require("../../../_virtual/index.cjs3.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.cjs.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.cjs.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/raf.cjs.js");const d=require("../../../lib/utils.cjs.js");function c(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const l=c(s),i=l.forwardRef(({className:e,autoSize:t={minRows:1},style:r,...a},n)=>o.jsxRuntimeExports.jsx(u.default,{ref:n,autoSize:t,className:d.cn("border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50","resize-none",e),style:{whiteSpace:"pre-wrap",wordBreak:"break-word",...r},...a}));i.displayName="Textarea";exports.Textarea=i;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../_virtual/jsx-runtime.cjs.js"),s=require("react"),u=require("../../../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");require("../../../_virtual/index.cjs4.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.cjs.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.cjs.js");require("../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/raf.cjs.js");const d=require("../../../lib/utils.cjs.js");function c(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const l=c(s),i=l.forwardRef(({className:e,autoSize:t={minRows:1},style:r,...a},n)=>o.jsxRuntimeExports.jsx(u.default,{ref:n,autoSize:t,className:d.cn("border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50","resize-none",e),style:{whiteSpace:"pre-wrap",wordBreak:"break-word",...r},...a}));i.displayName="Textarea";exports.Textarea=i;
2
2
  //# sourceMappingURL=textarea.cjs.js.map
@@ -1,7 +1,7 @@
1
1
  import { j as i } from "../../../_virtual/jsx-runtime.es.js";
2
2
  import * as d from "react";
3
3
  import n from "../../../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";
4
- import "../../../_virtual/index.es3.js";
4
+ import "../../../_virtual/index.es4.js";
5
5
  import "../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-resize-observer@1.4.3_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-resize-observer/es/index.es.js";
6
6
  import "../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/hooks/useLayoutEffect.es.js";
7
7
  import "../../../Documents/ai-shifu/markdown-flow-ui/node_modules/.pnpm/rc-util@5.44.4_react-dom@19.0.1_react@19.0.1__react@19.0.1/node_modules/rc-util/es/raf.es.js";
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js"),r=require("./components/MarkdownFlow/MarkdownFlow.cjs.js");require("./_virtual/jsx-runtime.cjs.js");require("react");;/* empty css */const i=require("./components/ContentRender/ContentRender.cjs.js"),n=require("./components/ContentRender/IframeSandbox.cjs.js"),o=require("./components/ContentRender/utils/split-content.cjs.js"),l=require("./components/ContentRender/MarkdownFlowInput.cjs.js"),f=require("./components/Slide/Slide.cjs.js"),d=require("./components/Slide/Player.cjs.js"),e=require("./components/Slide/diff-utils.cjs.js");require("./components/Slide/interaction-defaults.cjs.js");const u=require("./components/Slide/useSlide.cjs.js");exports.MarkdownFlowEditor=t.default;exports.MarkdownFlow=r.default;exports.ContentRender=i.default;exports.IframeSandbox=n.default;exports.splitContentSegments=o.splitContentSegments;exports.MarkdownFlowInput=l.default;exports.Slide=f.default;exports.Player=d.default;exports.applyDiffElement=e.applyDiffElement;exports.applyUnifiedDiff=e.applyUnifiedDiff;exports.parseUnifiedDiff=e.parseUnifiedDiff;exports.splitDiffContent=e.splitDiffContent;exports.useSlide=u.default;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.js"),r=require("./components/MarkdownFlow/MarkdownFlow.cjs.js");require("./_virtual/jsx-runtime.cjs.js");require("react");;/* empty css */const i=require("./components/ContentRender/ContentRender.cjs.js"),l=require("./components/ContentRender/IframeSandbox.cjs.js"),o=require("./components/ContentRender/utils/split-content.cjs.js"),a=require("./components/ContentRender/MarkdownFlowInput.cjs.js"),f=require("./components/Slide/Slide.cjs.js"),u=require("./components/Slide/Player.cjs.js"),e=require("./components/Slide/diff-utils.cjs.js"),t=require("./lib/interaction-defaults.cjs.js"),d=require("./components/Slide/useSlide.cjs.js");exports.MarkdownFlowEditor=n.default;exports.MarkdownFlow=r.default;exports.ContentRender=i.default;exports.IframeSandbox=l.default;exports.splitContentSegments=o.splitContentSegments;exports.MarkdownFlowInput=a.default;exports.Slide=f.default;exports.Player=u.default;exports.applyDiffElement=e.applyDiffElement;exports.applyUnifiedDiff=e.applyUnifiedDiff;exports.parseUnifiedDiff=e.parseUnifiedDiff;exports.splitDiffContent=e.splitDiffContent;exports.getInteractionDefaultSelectedValues=t.getInteractionDefaultSelectedValues;exports.getInteractionDefaultValues=t.getInteractionDefaultValues;exports.useSlide=d.default;
2
2
  //# sourceMappingURL=index.cjs.js.map
package/dist/index.es.js CHANGED
@@ -1,30 +1,32 @@
1
- import { default as p } from "./components/MarkdownFlowEditor/MarkdownFlowEditor.es.js";
2
- import { default as d } from "./components/MarkdownFlow/MarkdownFlow.es.js";
1
+ import { default as a } from "./components/MarkdownFlowEditor/MarkdownFlowEditor.es.js";
2
+ import { default as p } from "./components/MarkdownFlow/MarkdownFlow.es.js";
3
3
  import "./_virtual/jsx-runtime.es.js";
4
4
  import "react";
5
5
  /* empty css */
6
- import { default as m } from "./components/ContentRender/ContentRender.es.js";
7
- import { default as s } from "./components/ContentRender/IframeSandbox.es.js";
6
+ import { default as d } from "./components/ContentRender/ContentRender.es.js";
7
+ import { default as m } from "./components/ContentRender/IframeSandbox.es.js";
8
8
  import { splitContentSegments as u } from "./components/ContentRender/utils/split-content.es.js";
9
- import { default as D } from "./components/ContentRender/MarkdownFlowInput.es.js";
10
- import { default as k } from "./components/Slide/Slide.es.js";
11
- import { default as C } from "./components/Slide/Player.es.js";
12
- import { applyDiffElement as M, applyUnifiedDiff as E, parseUnifiedDiff as I, splitDiffContent as U } from "./components/Slide/diff-utils.es.js";
13
- import "./components/Slide/interaction-defaults.es.js";
14
- import { default as g } from "./components/Slide/useSlide.es.js";
9
+ import { default as w } from "./components/ContentRender/MarkdownFlowInput.es.js";
10
+ import { default as S } from "./components/Slide/Slide.es.js";
11
+ import { default as c } from "./components/Slide/Player.es.js";
12
+ import { applyDiffElement as k, applyUnifiedDiff as y, parseUnifiedDiff as C, splitDiffContent as F } from "./components/Slide/diff-utils.es.js";
13
+ import { getInteractionDefaultSelectedValues as E, getInteractionDefaultValues as U } from "./lib/interaction-defaults.es.js";
14
+ import { default as b } from "./components/Slide/useSlide.es.js";
15
15
  export {
16
- m as ContentRender,
17
- s as IframeSandbox,
18
- d as MarkdownFlow,
19
- p as MarkdownFlowEditor,
20
- D as MarkdownFlowInput,
21
- C as Player,
22
- k as Slide,
23
- M as applyDiffElement,
24
- E as applyUnifiedDiff,
25
- I as parseUnifiedDiff,
16
+ d as ContentRender,
17
+ m as IframeSandbox,
18
+ p as MarkdownFlow,
19
+ a as MarkdownFlowEditor,
20
+ w as MarkdownFlowInput,
21
+ c as Player,
22
+ S as Slide,
23
+ k as applyDiffElement,
24
+ y as applyUnifiedDiff,
25
+ E as getInteractionDefaultSelectedValues,
26
+ U as getInteractionDefaultValues,
27
+ C as parseUnifiedDiff,
26
28
  u as splitContentSegments,
27
- U as splitDiffContent,
28
- g as useSlide
29
+ F as splitDiffContent,
30
+ b as useSlide
29
31
  };
30
32
  //# sourceMappingURL=index.es.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("../_virtual/index.cjs.js"),T=m.distExports.createInteractionParser(),v=t=>{if(!t)return null;try{return T.parseToRemarkFormat(t)}catch(n){return console.warn("Failed to parse interaction block",n),null}},p=(t,n)=>{if(!t)return null;const u=t.trim(),e=n.buttonValues||[],r=n.buttonTexts||[],l=e.indexOf(u);if(l>-1)return{value:e[l],display:r[l]};const s=r.indexOf(u);return s>-1?{value:e[s]||r[s],display:r[s]}:null},V=t=>t.split(/[,,\n]/).map(n=>n.trim()).filter(Boolean),b=t=>{if(!t||Array.isArray(t))return null;const n=Array.isArray(t.selectedValues)?t.selectedValues.map(r=>`${r??""}`.trim()).filter(Boolean):void 0,u=`${t.buttonText??""}`.trim(),e=typeof t.inputText=="string"?t.inputText:void 0;return!n?.length&&!u&&!e?null:{buttonText:u||void 0,inputText:e,selectedValues:n?.length?n:void 0}},g=t=>{if(!t)return null;try{const n=JSON.parse(t);return b(n)}catch{return null}},h=(t,n,u,e)=>e?.resolveDefaultValues?.({content:t,rawValue:n,interactionInfo:u})??null,x=(t,n,u)=>{const e=n?.toString().trim();if(!e)return{};const r=v(t),l=h(t,e,r,u);if(l)return l;const s=g(e);if(s)return s;if(!r)return{buttonText:e,inputText:e};if(r.isMultiSelect){const f=V(e);if(!f.length)return{};const o=[],c=[];return f.forEach(a=>{const d=p(a,r);if(d){o.push(d.value);return}if(r.placeholder){c.push(a);return}o.push(a)}),{selectedValues:o.length?o:void 0,inputText:c.length?c.join(", "):void 0}}const i=p(e,r);return i?{buttonText:i.value||i.display||e}:r.placeholder?{inputText:e}:{buttonText:e,inputText:e}},I=(t,n,u)=>{const e=x(t,n,u);return e.selectedValues?e.selectedValues:n?n.split(",").map(r=>r.trim()).filter(Boolean):void 0};exports.getInteractionDefaultSelectedValues=I;exports.getInteractionDefaultValues=x;
2
+ //# sourceMappingURL=interaction-defaults.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-defaults.cjs.js","sources":["../../src/lib/interaction-defaults.ts"],"sourcesContent":["import { createInteractionParser } from \"remark-flow\";\n\nexport interface InteractionParseResult {\n buttonTexts?: string[];\n buttonValues?: string[];\n placeholder?: string;\n variableName?: string;\n isMultiSelect?: boolean;\n}\n\nexport interface InteractionDefaultValues {\n buttonText?: string;\n inputText?: string;\n selectedValues?: string[];\n}\n\nexport interface InteractionDefaultResolverParams {\n content?: string | null;\n rawValue?: string | null;\n interactionInfo?: InteractionParseResult | null;\n}\n\nexport type InteractionDefaultResolver = (\n params: InteractionDefaultResolverParams\n) => InteractionDefaultValues | null | undefined;\n\nexport interface InteractionDefaultValueOptions {\n resolveDefaultValues?: InteractionDefaultResolver;\n}\n\ninterface StructuredInteractionPayload {\n buttonText?: unknown;\n inputText?: unknown;\n selectedValues?: unknown;\n}\n\nconst interactionParser = createInteractionParser();\n\nconst parseInteractionBlock = (\n content?: string | null\n): InteractionParseResult | null => {\n if (!content) {\n return null;\n }\n\n try {\n return interactionParser.parseToRemarkFormat(\n content\n ) as InteractionParseResult;\n } catch (error) {\n console.warn(\"Failed to parse interaction block\", error);\n return null;\n }\n};\n\nconst normalizeButtonValue = (\n token: string,\n info: InteractionParseResult\n): { value: string; display?: string } | null => {\n if (!token) {\n return null;\n }\n\n const cleaned = token.trim();\n const buttonValues = info.buttonValues || [];\n const buttonTexts = info.buttonTexts || [];\n const valueIndex = buttonValues.indexOf(cleaned);\n\n if (valueIndex > -1) {\n return {\n value: buttonValues[valueIndex],\n display: buttonTexts[valueIndex],\n };\n }\n\n const textIndex = buttonTexts.indexOf(cleaned);\n\n if (textIndex > -1) {\n return {\n value: buttonValues[textIndex] || buttonTexts[textIndex],\n display: buttonTexts[textIndex],\n };\n }\n\n return null;\n};\n\nconst splitPresetValues = (raw: string) => {\n return raw\n .split(/[,,\\n]/)\n .map((item) => item.trim())\n .filter(Boolean);\n};\n\nconst normalizeStructuredInteractionDefaults = (\n payload?: StructuredInteractionPayload | null\n): InteractionDefaultValues | null => {\n if (!payload || Array.isArray(payload)) {\n return null;\n }\n\n const selectedValues = Array.isArray(payload.selectedValues)\n ? payload.selectedValues\n .map((item) => `${item ?? \"\"}`.trim())\n .filter(Boolean)\n : undefined;\n const buttonText = `${payload.buttonText ?? \"\"}`.trim();\n const inputText =\n typeof payload.inputText === \"string\" ? payload.inputText : undefined;\n\n if (!selectedValues?.length && !buttonText && !inputText) {\n return null;\n }\n\n return {\n buttonText: buttonText || undefined,\n inputText,\n selectedValues: selectedValues?.length ? selectedValues : undefined,\n };\n};\n\nconst parseStructuredInteractionDefaults = (rawValue?: string | null) => {\n if (!rawValue) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(rawValue) as StructuredInteractionPayload;\n return normalizeStructuredInteractionDefaults(parsed);\n } catch {\n return null;\n }\n};\n\nconst resolveCustomInteractionDefaults = (\n content?: string | null,\n rawValue?: string | null,\n interactionInfo?: InteractionParseResult | null,\n options?: InteractionDefaultValueOptions\n) => {\n return (\n options?.resolveDefaultValues?.({\n content,\n rawValue,\n interactionInfo,\n }) ?? null\n );\n};\n\nexport const getInteractionDefaultValues = (\n content?: string | null,\n rawValue?: string | null,\n options?: InteractionDefaultValueOptions\n): InteractionDefaultValues => {\n const normalized = rawValue?.toString().trim();\n\n if (!normalized) {\n return {};\n }\n\n const interactionInfo = parseInteractionBlock(content);\n const customDefaults = resolveCustomInteractionDefaults(\n content,\n normalized,\n interactionInfo,\n options\n );\n\n if (customDefaults) {\n return customDefaults;\n }\n\n const structuredDefaults = parseStructuredInteractionDefaults(normalized);\n\n if (structuredDefaults) {\n return structuredDefaults;\n }\n\n if (!interactionInfo) {\n return {\n buttonText: normalized,\n inputText: normalized,\n };\n }\n\n if (interactionInfo.isMultiSelect) {\n const tokens = splitPresetValues(normalized);\n\n if (!tokens.length) {\n return {};\n }\n\n const selectedValues: string[] = [];\n const customInputs: string[] = [];\n\n tokens.forEach((token) => {\n const mapped = normalizeButtonValue(token, interactionInfo);\n\n if (mapped) {\n selectedValues.push(mapped.value);\n return;\n }\n\n if (interactionInfo.placeholder) {\n customInputs.push(token);\n return;\n }\n\n selectedValues.push(token);\n });\n\n return {\n selectedValues: selectedValues.length ? selectedValues : undefined,\n inputText: customInputs.length ? customInputs.join(\", \") : undefined,\n };\n }\n\n const mapped = normalizeButtonValue(normalized, interactionInfo);\n\n if (mapped) {\n return {\n buttonText: mapped.value || mapped.display || normalized,\n };\n }\n\n if (interactionInfo.placeholder) {\n return {\n inputText: normalized,\n };\n }\n\n return {\n buttonText: normalized,\n inputText: normalized,\n };\n};\n\nexport const getInteractionDefaultSelectedValues = (\n content?: string | null,\n rawValue?: string | null,\n options?: InteractionDefaultValueOptions\n) => {\n const defaults = getInteractionDefaultValues(content, rawValue, options);\n\n if (defaults.selectedValues) {\n return defaults.selectedValues;\n }\n\n return rawValue\n ? rawValue\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean)\n : undefined;\n};\n"],"names":["interactionParser","createInteractionParser","parseInteractionBlock","content","error","normalizeButtonValue","token","info","cleaned","buttonValues","buttonTexts","valueIndex","textIndex","splitPresetValues","raw","item","normalizeStructuredInteractionDefaults","payload","selectedValues","buttonText","inputText","parseStructuredInteractionDefaults","rawValue","parsed","resolveCustomInteractionDefaults","interactionInfo","options","getInteractionDefaultValues","normalized","customDefaults","structuredDefaults","tokens","customInputs","mapped","getInteractionDefaultSelectedValues","defaults","value"],"mappings":"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"}