@bendyline/squisq-react 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/BlockRenderer.d.ts.map +1 -1
  2. package/dist/BlockRenderer.js +3 -0
  3. package/dist/BlockRenderer.js.map +1 -1
  4. package/dist/CaptionOverlay.d.ts +16 -7
  5. package/dist/CaptionOverlay.d.ts.map +1 -1
  6. package/dist/CaptionOverlay.js +7 -3
  7. package/dist/CaptionOverlay.js.map +1 -1
  8. package/dist/DocControlsBottom.d.ts.map +1 -1
  9. package/dist/DocControlsBottom.js +5 -1
  10. package/dist/DocControlsBottom.js.map +1 -1
  11. package/dist/DocControlsOverlay.d.ts.map +1 -1
  12. package/dist/DocControlsOverlay.js +9 -4
  13. package/dist/DocControlsOverlay.js.map +1 -1
  14. package/dist/DocControlsSidebar.d.ts.map +1 -1
  15. package/dist/DocControlsSidebar.js +5 -1
  16. package/dist/DocControlsSidebar.js.map +1 -1
  17. package/dist/DocPlayer.d.ts +5 -2
  18. package/dist/DocPlayer.d.ts.map +1 -1
  19. package/dist/DocPlayer.js +36 -7
  20. package/dist/DocPlayer.js.map +1 -1
  21. package/dist/DocPlayerWithSidebar.d.ts.map +1 -1
  22. package/dist/DocPlayerWithSidebar.js +1 -0
  23. package/dist/DocPlayerWithSidebar.js.map +1 -1
  24. package/dist/DocProgressBar.js +2 -2
  25. package/dist/LinearDocView.d.ts.map +1 -1
  26. package/dist/LinearDocView.js +130 -6
  27. package/dist/LinearDocView.js.map +1 -1
  28. package/dist/SocialCaptionOverlay.d.ts +27 -0
  29. package/dist/SocialCaptionOverlay.d.ts.map +1 -0
  30. package/dist/SocialCaptionOverlay.js +184 -0
  31. package/dist/SocialCaptionOverlay.js.map +1 -0
  32. package/dist/__tests__/DocControlsSlideshow.test.js +1 -0
  33. package/dist/__tests__/DocControlsSlideshow.test.js.map +1 -1
  34. package/dist/__tests__/TableLayer.test.d.ts +2 -0
  35. package/dist/__tests__/TableLayer.test.d.ts.map +1 -0
  36. package/dist/__tests__/TableLayer.test.js +121 -0
  37. package/dist/__tests__/TableLayer.test.js.map +1 -0
  38. package/dist/hooks/useAudioSync.d.ts.map +1 -1
  39. package/dist/hooks/useAudioSync.js +4 -2
  40. package/dist/hooks/useAudioSync.js.map +1 -1
  41. package/dist/hooks/useDocPlayback.d.ts.map +1 -1
  42. package/dist/hooks/useDocPlayback.js +7 -4
  43. package/dist/hooks/useDocPlayback.js.map +1 -1
  44. package/dist/index.d.ts +3 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +2 -0
  47. package/dist/index.js.map +1 -1
  48. package/dist/layers/ShapeLayer.d.ts.map +1 -1
  49. package/dist/layers/ShapeLayer.js +7 -3
  50. package/dist/layers/ShapeLayer.js.map +1 -1
  51. package/dist/layers/TableLayer.d.ts +23 -0
  52. package/dist/layers/TableLayer.d.ts.map +1 -0
  53. package/dist/layers/TableLayer.js +58 -0
  54. package/dist/layers/TableLayer.js.map +1 -0
  55. package/dist/layers/TextLayer.js +1 -1
  56. package/dist/layers/TextLayer.js.map +1 -1
  57. package/dist/squisq-player.global.js +91 -5
  58. package/dist/squisq-player.global.js.map +1 -1
  59. package/dist/standalone-entry.d.ts +8 -0
  60. package/dist/standalone-entry.d.ts.map +1 -1
  61. package/dist/standalone-entry.js +6 -3
  62. package/dist/standalone-entry.js.map +1 -1
  63. package/dist/standalone-source.js +1 -1
  64. package/dist/types.d.ts +19 -0
  65. package/dist/types.d.ts.map +1 -1
  66. package/dist/types.js.map +1 -1
  67. package/package.json +2 -2
  68. package/src/BlockRenderer.tsx +3 -0
  69. package/src/CaptionOverlay.tsx +33 -8
  70. package/src/DocControlsBottom.tsx +11 -5
  71. package/src/DocControlsOverlay.tsx +18 -6
  72. package/src/DocControlsSidebar.tsx +11 -5
  73. package/src/DocPlayer.tsx +56 -9
  74. package/src/DocPlayerWithSidebar.tsx +1 -0
  75. package/src/DocProgressBar.tsx +2 -2
  76. package/src/LinearDocView.tsx +149 -12
  77. package/src/SocialCaptionOverlay.tsx +254 -0
  78. package/src/__tests__/DocControlsSlideshow.test.tsx +1 -0
  79. package/src/__tests__/TableLayer.test.tsx +142 -0
  80. package/src/hooks/useAudioSync.ts +5 -2
  81. package/src/hooks/useDocPlayback.ts +8 -3
  82. package/src/index.ts +4 -0
  83. package/src/layers/ShapeLayer.tsx +8 -3
  84. package/src/layers/TableLayer.tsx +129 -0
  85. package/src/layers/TextLayer.tsx +1 -1
  86. package/src/standalone-entry.tsx +23 -3
  87. package/src/types.ts +21 -0
@@ -53,6 +53,14 @@ export interface MountOptions {
53
53
  theme?: Theme;
54
54
  /** Auto-play on mount (only for slideshow mode, default: false) */
55
55
  autoPlay?: boolean;
56
+ /**
57
+ * Enable render mode for headless frame capture.
58
+ * Exposes window.seekTo(), getDuration(), getCaptions(), etc.
59
+ * Disables controls and auto-play. Used by Playwright video export.
60
+ */
61
+ renderMode?: boolean;
62
+ /** Caption style: 'standard' or 'social'. Omit or set to undefined for no captions. */
63
+ captionStyle?: 'standard' | 'social';
56
64
  }
57
65
 
58
66
  // ── CSS Injection ──────────────────────────────────────────────────
@@ -159,7 +167,16 @@ const roots = new WeakMap<Element, Root>();
159
167
  export function mount(element: Element, doc: Doc, options: MountOptions = {}): void {
160
168
  injectCss();
161
169
 
162
- const { mode = 'slideshow', basePath = '.', images, audio, autoPlay = false, theme } = options;
170
+ const {
171
+ mode = 'slideshow',
172
+ basePath = '.',
173
+ images,
174
+ audio,
175
+ autoPlay = false,
176
+ theme,
177
+ renderMode = false,
178
+ captionStyle,
179
+ } = options;
163
180
 
164
181
  // Rewrite audio URLs if map provided
165
182
  const finalDoc = audio ? rewriteAudioUrls(doc, audio) : doc;
@@ -180,9 +197,12 @@ export function mount(element: Element, doc: Doc, options: MountOptions = {}): v
180
197
  script: finalDoc,
181
198
  basePath,
182
199
  displayMode: 'slideshow',
183
- autoPlay,
184
- showControls: true,
200
+ autoPlay: renderMode ? false : autoPlay,
201
+ showControls: !renderMode,
202
+ renderMode,
185
203
  theme,
204
+ captionsEnabled: !!captionStyle,
205
+ captionStyle: captionStyle ?? 'standard',
186
206
  });
187
207
  }
188
208
 
package/src/types.ts CHANGED
@@ -32,6 +32,23 @@ export type ControlsLayout = 'overlay' | 'sidebar' | 'bottom';
32
32
  */
33
33
  export type DisplayMode = 'video' | 'slideshow' | 'linear';
34
34
 
35
+ /**
36
+ * Caption display style.
37
+ *
38
+ * - `'standard'` — Traditional broadcast-style captions: small white text
39
+ * on a semi-transparent black badge at the top of the player.
40
+ * - `'social'` — Social media-style (Instagram/TikTok): large centered words
41
+ * showing 3-5 words at a time with the active word highlighted in the
42
+ * theme's primary color. Font and colors pulled from the active theme.
43
+ */
44
+ export type CaptionStyle = 'standard' | 'social';
45
+
46
+ /**
47
+ * Caption display mode — combines enable/disable with style selection.
48
+ * The CC button cycles through: off → standard → social → off.
49
+ */
50
+ export type CaptionMode = 'off' | 'standard' | 'social';
51
+
35
52
  /** Slide navigation actions for slideshow display mode */
36
53
  export interface SlideNavActions {
37
54
  /** Navigate to the next slide */
@@ -52,6 +69,8 @@ export interface PlaybackState {
52
69
  docProgress: number;
53
70
  hasCaptions: boolean;
54
71
  captionsEnabled: boolean;
72
+ /** Current caption display mode (off, standard, social). */
73
+ captionMode: CaptionMode;
55
74
  isFullscreen?: boolean;
56
75
  /** Current audio segment index (0-based) */
57
76
  currentSegmentIndex: number;
@@ -67,6 +86,8 @@ export interface PlaybackActions {
67
86
  restart: () => void;
68
87
  seekTo: (time: number) => void;
69
88
  setCaptionsEnabled: (enabled: boolean) => void;
89
+ /** Cycle caption mode: off → standard → social → off */
90
+ cycleCaptionMode: () => void;
70
91
  toggleFullscreen?: () => void;
71
92
  }
72
93