@bendyline/squisq-react 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/dist/index.d.ts +710 -35
  2. package/dist/index.js +4288 -33
  3. package/dist/index.js.map +1 -1
  4. package/dist/squisq-player.global.js +1 -1
  5. package/dist/standalone-source.js +1 -1
  6. package/package.json +2 -2
  7. package/dist/BlockRenderer.d.ts +0 -37
  8. package/dist/BlockRenderer.d.ts.map +0 -1
  9. package/dist/BlockRenderer.js +0 -54
  10. package/dist/BlockRenderer.js.map +0 -1
  11. package/dist/CaptionOverlay.d.ts +0 -33
  12. package/dist/CaptionOverlay.d.ts.map +0 -1
  13. package/dist/CaptionOverlay.js +0 -44
  14. package/dist/CaptionOverlay.js.map +0 -1
  15. package/dist/DocControlsBottom.d.ts +0 -28
  16. package/dist/DocControlsBottom.d.ts.map +0 -1
  17. package/dist/DocControlsBottom.js +0 -27
  18. package/dist/DocControlsBottom.js.map +0 -1
  19. package/dist/DocControlsOverlay.d.ts +0 -28
  20. package/dist/DocControlsOverlay.d.ts.map +0 -1
  21. package/dist/DocControlsOverlay.js +0 -80
  22. package/dist/DocControlsOverlay.js.map +0 -1
  23. package/dist/DocControlsSidebar.d.ts +0 -27
  24. package/dist/DocControlsSidebar.d.ts.map +0 -1
  25. package/dist/DocControlsSidebar.js +0 -10
  26. package/dist/DocControlsSidebar.js.map +0 -1
  27. package/dist/DocControlsSlideshow.d.ts +0 -20
  28. package/dist/DocControlsSlideshow.d.ts.map +0 -1
  29. package/dist/DocControlsSlideshow.js +0 -69
  30. package/dist/DocControlsSlideshow.js.map +0 -1
  31. package/dist/DocPlayer.d.ts +0 -97
  32. package/dist/DocPlayer.d.ts.map +0 -1
  33. package/dist/DocPlayer.js +0 -657
  34. package/dist/DocPlayer.js.map +0 -1
  35. package/dist/DocPlayerWithSidebar.d.ts +0 -41
  36. package/dist/DocPlayerWithSidebar.d.ts.map +0 -1
  37. package/dist/DocPlayerWithSidebar.js +0 -69
  38. package/dist/DocPlayerWithSidebar.js.map +0 -1
  39. package/dist/DocProgressBar.d.ts +0 -31
  40. package/dist/DocProgressBar.d.ts.map +0 -1
  41. package/dist/DocProgressBar.js +0 -122
  42. package/dist/DocProgressBar.js.map +0 -1
  43. package/dist/InlineAudioPlayer.d.ts +0 -15
  44. package/dist/InlineAudioPlayer.d.ts.map +0 -1
  45. package/dist/InlineAudioPlayer.js +0 -22
  46. package/dist/InlineAudioPlayer.js.map +0 -1
  47. package/dist/InlineVideoPlayer.d.ts +0 -21
  48. package/dist/InlineVideoPlayer.d.ts.map +0 -1
  49. package/dist/InlineVideoPlayer.js +0 -29
  50. package/dist/InlineVideoPlayer.js.map +0 -1
  51. package/dist/LinearDocView.d.ts +0 -73
  52. package/dist/LinearDocView.d.ts.map +0 -1
  53. package/dist/LinearDocView.js +0 -451
  54. package/dist/LinearDocView.js.map +0 -1
  55. package/dist/MarkdownRenderer.d.ts +0 -32
  56. package/dist/MarkdownRenderer.d.ts.map +0 -1
  57. package/dist/MarkdownRenderer.js +0 -259
  58. package/dist/MarkdownRenderer.js.map +0 -1
  59. package/dist/SocialCaptionOverlay.d.ts +0 -27
  60. package/dist/SocialCaptionOverlay.d.ts.map +0 -1
  61. package/dist/SocialCaptionOverlay.js +0 -185
  62. package/dist/SocialCaptionOverlay.js.map +0 -1
  63. package/dist/__tests__/BlockRenderer.test.d.ts +0 -2
  64. package/dist/__tests__/BlockRenderer.test.d.ts.map +0 -1
  65. package/dist/__tests__/BlockRenderer.test.js +0 -82
  66. package/dist/__tests__/BlockRenderer.test.js.map +0 -1
  67. package/dist/__tests__/DocControlsSlideshow.test.d.ts +0 -2
  68. package/dist/__tests__/DocControlsSlideshow.test.d.ts.map +0 -1
  69. package/dist/__tests__/DocControlsSlideshow.test.js +0 -89
  70. package/dist/__tests__/DocControlsSlideshow.test.js.map +0 -1
  71. package/dist/__tests__/JsonView.test.d.ts +0 -2
  72. package/dist/__tests__/JsonView.test.d.ts.map +0 -1
  73. package/dist/__tests__/JsonView.test.js +0 -93
  74. package/dist/__tests__/JsonView.test.js.map +0 -1
  75. package/dist/__tests__/LinearDocView.test.d.ts +0 -2
  76. package/dist/__tests__/LinearDocView.test.d.ts.map +0 -1
  77. package/dist/__tests__/LinearDocView.test.js +0 -250
  78. package/dist/__tests__/LinearDocView.test.js.map +0 -1
  79. package/dist/__tests__/MarkdownRenderer.test.d.ts +0 -2
  80. package/dist/__tests__/MarkdownRenderer.test.d.ts.map +0 -1
  81. package/dist/__tests__/MarkdownRenderer.test.js +0 -208
  82. package/dist/__tests__/MarkdownRenderer.test.js.map +0 -1
  83. package/dist/__tests__/TableLayer.test.d.ts +0 -2
  84. package/dist/__tests__/TableLayer.test.d.ts.map +0 -1
  85. package/dist/__tests__/TableLayer.test.js +0 -121
  86. package/dist/__tests__/TableLayer.test.js.map +0 -1
  87. package/dist/__tests__/exports.test.d.ts +0 -2
  88. package/dist/__tests__/exports.test.d.ts.map +0 -1
  89. package/dist/__tests__/exports.test.js +0 -48
  90. package/dist/__tests__/exports.test.js.map +0 -1
  91. package/dist/hooks/AudioProvider.d.ts +0 -71
  92. package/dist/hooks/AudioProvider.d.ts.map +0 -1
  93. package/dist/hooks/AudioProvider.js +0 -52
  94. package/dist/hooks/AudioProvider.js.map +0 -1
  95. package/dist/hooks/MediaContext.d.ts +0 -35
  96. package/dist/hooks/MediaContext.d.ts.map +0 -1
  97. package/dist/hooks/MediaContext.js +0 -72
  98. package/dist/hooks/MediaContext.js.map +0 -1
  99. package/dist/hooks/index.d.ts +0 -6
  100. package/dist/hooks/index.d.ts.map +0 -1
  101. package/dist/hooks/index.js +0 -5
  102. package/dist/hooks/index.js.map +0 -1
  103. package/dist/hooks/useAudioSync.d.ts +0 -18
  104. package/dist/hooks/useAudioSync.d.ts.map +0 -1
  105. package/dist/hooks/useAudioSync.js +0 -340
  106. package/dist/hooks/useAudioSync.js.map +0 -1
  107. package/dist/hooks/useAutoSurface.d.ts +0 -11
  108. package/dist/hooks/useAutoSurface.d.ts.map +0 -1
  109. package/dist/hooks/useAutoSurface.js +0 -24
  110. package/dist/hooks/useAutoSurface.js.map +0 -1
  111. package/dist/hooks/useDocPlayback.d.ts +0 -47
  112. package/dist/hooks/useDocPlayback.d.ts.map +0 -1
  113. package/dist/hooks/useDocPlayback.js +0 -179
  114. package/dist/hooks/useDocPlayback.js.map +0 -1
  115. package/dist/hooks/useViewportOrientation.d.ts +0 -31
  116. package/dist/hooks/useViewportOrientation.d.ts.map +0 -1
  117. package/dist/hooks/useViewportOrientation.js +0 -92
  118. package/dist/hooks/useViewportOrientation.js.map +0 -1
  119. package/dist/index.d.ts.map +0 -1
  120. package/dist/jsonView/JsonView.d.ts +0 -26
  121. package/dist/jsonView/JsonView.d.ts.map +0 -1
  122. package/dist/jsonView/JsonView.js +0 -12
  123. package/dist/jsonView/JsonView.js.map +0 -1
  124. package/dist/jsonView/RenderNode.d.ts +0 -22
  125. package/dist/jsonView/RenderNode.d.ts.map +0 -1
  126. package/dist/jsonView/RenderNode.js +0 -30
  127. package/dist/jsonView/RenderNode.js.map +0 -1
  128. package/dist/jsonView/index.d.ts +0 -3
  129. package/dist/jsonView/index.d.ts.map +0 -1
  130. package/dist/jsonView/index.js +0 -2
  131. package/dist/jsonView/index.js.map +0 -1
  132. package/dist/jsonView/useJsonViewTokens.d.ts +0 -14
  133. package/dist/jsonView/useJsonViewTokens.d.ts.map +0 -1
  134. package/dist/jsonView/useJsonViewTokens.js +0 -34
  135. package/dist/jsonView/useJsonViewTokens.js.map +0 -1
  136. package/dist/jsonView/viewers.d.ts +0 -30
  137. package/dist/jsonView/viewers.d.ts.map +0 -1
  138. package/dist/jsonView/viewers.js +0 -226
  139. package/dist/jsonView/viewers.js.map +0 -1
  140. package/dist/layers/ImageLayer.d.ts +0 -23
  141. package/dist/layers/ImageLayer.d.ts.map +0 -1
  142. package/dist/layers/ImageLayer.js +0 -104
  143. package/dist/layers/ImageLayer.js.map +0 -1
  144. package/dist/layers/MapLayer.d.ts +0 -29
  145. package/dist/layers/MapLayer.d.ts.map +0 -1
  146. package/dist/layers/MapLayer.js +0 -97
  147. package/dist/layers/MapLayer.js.map +0 -1
  148. package/dist/layers/ShapeLayer.d.ts +0 -20
  149. package/dist/layers/ShapeLayer.d.ts.map +0 -1
  150. package/dist/layers/ShapeLayer.js +0 -39
  151. package/dist/layers/ShapeLayer.js.map +0 -1
  152. package/dist/layers/TableLayer.d.ts +0 -23
  153. package/dist/layers/TableLayer.d.ts.map +0 -1
  154. package/dist/layers/TableLayer.js +0 -58
  155. package/dist/layers/TableLayer.js.map +0 -1
  156. package/dist/layers/TextLayer.d.ts +0 -23
  157. package/dist/layers/TextLayer.d.ts.map +0 -1
  158. package/dist/layers/TextLayer.js +0 -126
  159. package/dist/layers/TextLayer.js.map +0 -1
  160. package/dist/layers/VideoLayer.d.ts +0 -40
  161. package/dist/layers/VideoLayer.d.ts.map +0 -1
  162. package/dist/layers/VideoLayer.js +0 -105
  163. package/dist/layers/VideoLayer.js.map +0 -1
  164. package/dist/layers/index.d.ts +0 -6
  165. package/dist/layers/index.d.ts.map +0 -1
  166. package/dist/layers/index.js +0 -6
  167. package/dist/layers/index.js.map +0 -1
  168. package/dist/standalone-entry.d.ts +0 -69
  169. package/dist/standalone-entry.d.ts.map +0 -1
  170. package/dist/standalone-entry.js +0 -185
  171. package/dist/standalone-entry.js.map +0 -1
  172. package/dist/types.d.ts +0 -154
  173. package/dist/types.d.ts.map +0 -1
  174. package/dist/types.js +0 -21
  175. package/dist/types.js.map +0 -1
  176. package/dist/utils/animationUtils.d.ts +0 -8
  177. package/dist/utils/animationUtils.d.ts.map +0 -1
  178. package/dist/utils/animationUtils.js +0 -8
  179. package/dist/utils/animationUtils.js.map +0 -1
  180. package/dist/utils/layerUtils.d.ts +0 -17
  181. package/dist/utils/layerUtils.d.ts.map +0 -1
  182. package/dist/utils/layerUtils.js +0 -37
  183. package/dist/utils/layerUtils.js.map +0 -1
  184. package/dist/utils/mapTileUtils.d.ts +0 -105
  185. package/dist/utils/mapTileUtils.d.ts.map +0 -1
  186. package/dist/utils/mapTileUtils.js +0 -268
  187. package/dist/utils/mapTileUtils.js.map +0 -1
@@ -1,208 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { describe, it, expect } from 'vitest';
3
- import { render } from '@testing-library/react';
4
- import { MarkdownRenderer } from '../MarkdownRenderer';
5
- // ── Helpers ────────────────────────────────────────────────────────
6
- function text(value) {
7
- return { type: 'text', value };
8
- }
9
- function paragraph(...children) {
10
- return { type: 'paragraph', children };
11
- }
12
- function heading(depth, ...children) {
13
- return { type: 'heading', depth, children };
14
- }
15
- // ── Tests ──────────────────────────────────────────────────────────
16
- describe('MarkdownRenderer', () => {
17
- it('renders null for empty nodes', () => {
18
- const { container } = render(_jsx(MarkdownRenderer, { nodes: [] }));
19
- expect(container.innerHTML).toBe('');
20
- });
21
- it('renders a paragraph', () => {
22
- const { container } = render(_jsx(MarkdownRenderer, { nodes: [paragraph(text('Hello world'))] }));
23
- const p = container.querySelector('p.squisq-md-p');
24
- expect(p).toBeTruthy();
25
- expect(p?.textContent).toBe('Hello world');
26
- });
27
- it('renders headings at correct depth', () => {
28
- const nodes = [
29
- heading(1, text('Title')),
30
- heading(2, text('Subtitle')),
31
- heading(3, text('Section')),
32
- ];
33
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
34
- expect(container.querySelector('h1')?.textContent).toBe('Title');
35
- expect(container.querySelector('h2')?.textContent).toBe('Subtitle');
36
- expect(container.querySelector('h3')?.textContent).toBe('Section');
37
- });
38
- it('renders emphasis and strong inline', () => {
39
- const nodes = [
40
- paragraph(text('normal '), { type: 'emphasis', children: [text('italic')] }, text(' and '), {
41
- type: 'strong',
42
- children: [text('bold')],
43
- }),
44
- ];
45
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
46
- expect(container.querySelector('em')?.textContent).toBe('italic');
47
- expect(container.querySelector('strong')?.textContent).toBe('bold');
48
- });
49
- it('renders inline code', () => {
50
- const nodes = [
51
- paragraph(text('run '), { type: 'inlineCode', value: 'npm install' }),
52
- ];
53
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
54
- const code = container.querySelector('code.squisq-md-inline-code');
55
- expect(code?.textContent).toBe('npm install');
56
- });
57
- it('renders a link with target _blank', () => {
58
- const nodes = [
59
- paragraph({
60
- type: 'link',
61
- url: 'https://example.com',
62
- title: 'Example',
63
- children: [text('click')],
64
- }),
65
- ];
66
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
67
- const a = container.querySelector('a.squisq-md-link');
68
- expect(a).toBeTruthy();
69
- expect(a.href).toContain('example.com');
70
- expect(a.target).toBe('_blank');
71
- expect(a.textContent).toBe('click');
72
- });
73
- it('renders an image', () => {
74
- const nodes = [
75
- paragraph({
76
- type: 'image',
77
- url: '/cat.jpg',
78
- alt: 'A cat',
79
- }),
80
- ];
81
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
82
- const img = container.querySelector('img.squisq-md-image');
83
- expect(img).toBeTruthy();
84
- expect(img.alt).toBe('A cat');
85
- });
86
- it('renders an unordered list', () => {
87
- const nodes = [
88
- {
89
- type: 'list',
90
- ordered: false,
91
- children: [
92
- { type: 'listItem', children: [paragraph(text('Item A'))] },
93
- { type: 'listItem', children: [paragraph(text('Item B'))] },
94
- ],
95
- },
96
- ];
97
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
98
- const ul = container.querySelector('ul.squisq-md-ul');
99
- expect(ul).toBeTruthy();
100
- const items = ul?.querySelectorAll('li');
101
- expect(items?.length).toBe(2);
102
- expect(items?.[0]?.textContent).toBe('Item A');
103
- });
104
- it('renders an ordered list with start number', () => {
105
- const nodes = [
106
- {
107
- type: 'list',
108
- ordered: true,
109
- start: 3,
110
- children: [{ type: 'listItem', children: [paragraph(text('Third'))] }],
111
- },
112
- ];
113
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
114
- const ol = container.querySelector('ol.squisq-md-ol');
115
- expect(ol).toBeTruthy();
116
- expect(ol.start).toBe(3);
117
- });
118
- it('renders a task list item with checkbox', () => {
119
- const nodes = [
120
- {
121
- type: 'list',
122
- ordered: false,
123
- children: [
124
- { type: 'listItem', checked: true, children: [paragraph(text('Done'))] },
125
- { type: 'listItem', checked: false, children: [paragraph(text('Todo'))] },
126
- ],
127
- },
128
- ];
129
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
130
- const checkboxes = container.querySelectorAll('input[type="checkbox"]');
131
- expect(checkboxes.length).toBe(2);
132
- expect(checkboxes[0].checked).toBe(true);
133
- expect(checkboxes[1].checked).toBe(false);
134
- });
135
- it('renders a code block', () => {
136
- const nodes = [
137
- { type: 'code', lang: 'typescript', value: 'const x = 1;' },
138
- ];
139
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
140
- const pre = container.querySelector('pre.squisq-md-code-block');
141
- expect(pre).toBeTruthy();
142
- const code = pre?.querySelector('code.language-typescript');
143
- expect(code?.textContent).toBe('const x = 1;');
144
- });
145
- it('renders a blockquote', () => {
146
- const nodes = [
147
- { type: 'blockquote', children: [paragraph(text('Quoted text'))] },
148
- ];
149
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
150
- const bq = container.querySelector('blockquote.squisq-md-blockquote');
151
- expect(bq).toBeTruthy();
152
- expect(bq?.textContent).toBe('Quoted text');
153
- });
154
- it('renders a thematic break', () => {
155
- const nodes = [
156
- paragraph(text('Before')),
157
- { type: 'thematicBreak' },
158
- paragraph(text('After')),
159
- ];
160
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
161
- expect(container.querySelector('hr.squisq-md-hr')).toBeTruthy();
162
- });
163
- it('renders a table', () => {
164
- const nodes = [
165
- {
166
- type: 'table',
167
- align: ['left', 'right'],
168
- children: [
169
- {
170
- type: 'tableRow',
171
- children: [
172
- { type: 'tableCell', isHeader: true, children: [text('Name')] },
173
- { type: 'tableCell', isHeader: true, children: [text('Value')] },
174
- ],
175
- },
176
- {
177
- type: 'tableRow',
178
- children: [
179
- { type: 'tableCell', children: [text('A')] },
180
- { type: 'tableCell', children: [text('1')] },
181
- ],
182
- },
183
- ],
184
- },
185
- ];
186
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
187
- const table = container.querySelector('table.squisq-md-table');
188
- expect(table).toBeTruthy();
189
- expect(table?.querySelectorAll('th').length).toBe(2);
190
- expect(table?.querySelectorAll('td').length).toBe(2);
191
- });
192
- it('renders strikethrough', () => {
193
- const nodes = [paragraph({ type: 'delete', children: [text('removed')] })];
194
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
195
- const del = container.querySelector('del.squisq-md-del');
196
- expect(del?.textContent).toBe('removed');
197
- });
198
- it('renders a hard break', () => {
199
- const nodes = [paragraph(text('line1'), { type: 'break' }, text('line2'))];
200
- const { container } = render(_jsx(MarkdownRenderer, { nodes: nodes }));
201
- expect(container.querySelector('br')).toBeTruthy();
202
- });
203
- it('applies custom className', () => {
204
- const { container } = render(_jsx(MarkdownRenderer, { nodes: [paragraph(text('test'))], className: "custom" }));
205
- expect(container.querySelector('.squisq-md.custom')).toBeTruthy();
206
- });
207
- });
208
- //# sourceMappingURL=MarkdownRenderer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarkdownRenderer.test.js","sourceRoot":"","sources":["../../src/__tests__/MarkdownRenderer.test.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TableLayer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableLayer.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/TableLayer.test.tsx"],"names":[],"mappings":""}
@@ -1,121 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { describe, it, expect } from 'vitest';
3
- import { render } from '@testing-library/react';
4
- import { TableLayer } from '../layers/TableLayer';
5
- // ---------------------------------------------------------------------------
6
- // Helpers
7
- // ---------------------------------------------------------------------------
8
- function makeTableLayer(overrides = {}) {
9
- return {
10
- type: 'table',
11
- id: 'test-table',
12
- content: {
13
- headers: ['Name', 'Age', 'City'],
14
- rows: [
15
- ['Alice', '30', 'Seattle'],
16
- ['Bob', '25', 'Portland'],
17
- ],
18
- style: {
19
- headerBackground: '#1e3a5f',
20
- headerColor: '#ffffff',
21
- cellBackground: 'rgba(255,255,255,0.05)',
22
- cellColor: '#e0e0e0',
23
- borderColor: 'rgba(255,255,255,0.12)',
24
- fontSize: 28,
25
- fontFamily: 'system-ui',
26
- headerFontFamily: 'Georgia',
27
- borderRadius: 8,
28
- },
29
- },
30
- position: { x: '10%', y: '10%', width: '80%', height: '80%' },
31
- ...overrides,
32
- };
33
- }
34
- const viewport = { width: 1920, height: 1080 };
35
- function renderTableLayer(layer) {
36
- return render(_jsx("svg", { children: _jsx(TableLayer, { layer: layer ?? makeTableLayer(), viewport: viewport, blockTime: 0 }) }));
37
- }
38
- // ---------------------------------------------------------------------------
39
- // Tests
40
- // ---------------------------------------------------------------------------
41
- describe('TableLayer', () => {
42
- it('renders a foreignObject element', () => {
43
- const { container } = renderTableLayer();
44
- const fo = container.querySelector('foreignObject');
45
- expect(fo).toBeTruthy();
46
- });
47
- it('renders a table element', () => {
48
- const { container } = renderTableLayer();
49
- const table = container.querySelector('table');
50
- expect(table).toBeTruthy();
51
- });
52
- it('renders the correct number of header cells', () => {
53
- const { container } = renderTableLayer();
54
- const headers = container.querySelectorAll('th');
55
- expect(headers.length).toBe(3);
56
- });
57
- it('renders header text content', () => {
58
- const { container } = renderTableLayer();
59
- const headers = container.querySelectorAll('th');
60
- expect(headers[0].textContent).toBe('Name');
61
- expect(headers[1].textContent).toBe('Age');
62
- expect(headers[2].textContent).toBe('City');
63
- });
64
- it('renders the correct number of data rows', () => {
65
- const { container } = renderTableLayer();
66
- const rows = container.querySelectorAll('tbody tr');
67
- expect(rows.length).toBe(2);
68
- });
69
- it('renders cell text content', () => {
70
- const { container } = renderTableLayer();
71
- const cells = container.querySelectorAll('td');
72
- expect(cells[0].textContent).toBe('Alice');
73
- expect(cells[1].textContent).toBe('30');
74
- expect(cells[2].textContent).toBe('Seattle');
75
- expect(cells[3].textContent).toBe('Bob');
76
- });
77
- it('applies header background color', () => {
78
- const { container } = renderTableLayer();
79
- const th = container.querySelector('th');
80
- expect(th?.style.background).toBe('rgb(30, 58, 95)');
81
- });
82
- it('applies font size from style', () => {
83
- const { container } = renderTableLayer();
84
- const table = container.querySelector('table');
85
- expect(table?.style.fontSize).toBe('28px');
86
- });
87
- it('applies column alignment when provided', () => {
88
- const layer = makeTableLayer();
89
- layer.content.align = ['left', 'center', 'right'];
90
- const { container } = renderTableLayer(layer);
91
- const headers = container.querySelectorAll('th');
92
- expect(headers[0].style.textAlign).toBe('left');
93
- expect(headers[1].style.textAlign).toBe('center');
94
- expect(headers[2].style.textAlign).toBe('right');
95
- });
96
- it('handles empty headers gracefully', () => {
97
- const layer = makeTableLayer();
98
- layer.content.headers = [];
99
- const { container } = renderTableLayer(layer);
100
- const thead = container.querySelector('thead');
101
- // No thead or empty thead
102
- expect(thead).toBeFalsy();
103
- });
104
- it('handles empty rows gracefully', () => {
105
- const layer = makeTableLayer();
106
- layer.content.rows = [];
107
- const { container } = renderTableLayer(layer);
108
- const tbody = container.querySelector('tbody');
109
- // No tbody or empty tbody
110
- expect(tbody).toBeFalsy();
111
- });
112
- it('sets foreignObject dimensions based on viewport percentage', () => {
113
- const { container } = renderTableLayer();
114
- const fo = container.querySelector('foreignObject');
115
- // 80% of 1920 = 1536
116
- expect(fo?.getAttribute('width')).toBe('1536');
117
- // 80% of 1080 = 864
118
- expect(fo?.getAttribute('height')).toBe('864');
119
- });
120
- });
121
- //# sourceMappingURL=TableLayer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableLayer.test.js","sourceRoot":"","sources":["../../src/__tests__/TableLayer.test.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=exports.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exports.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/exports.test.ts"],"names":[],"mappings":""}
@@ -1,48 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import * as squisqReact from '../index';
3
- describe('@bendyline/squisq-react exports', () => {
4
- it('exports DocPlayer component', () => {
5
- expect(squisqReact.DocPlayer).toBeDefined();
6
- expect(typeof squisqReact.DocPlayer).toBe('function');
7
- });
8
- it('exports BlockRenderer component', () => {
9
- expect(squisqReact.BlockRenderer).toBeDefined();
10
- expect(typeof squisqReact.BlockRenderer).toBe('function');
11
- });
12
- it('exports all layer components', () => {
13
- expect(typeof squisqReact.ImageLayer).toBe('function');
14
- expect(typeof squisqReact.TextLayer).toBe('function');
15
- expect(typeof squisqReact.ShapeLayer).toBe('function');
16
- expect(typeof squisqReact.VideoLayer).toBe('function');
17
- expect(typeof squisqReact.MapLayer).toBe('function');
18
- });
19
- it('exports control components', () => {
20
- expect(typeof squisqReact.CaptionOverlay).toBe('function');
21
- expect(typeof squisqReact.DocControlsOverlay).toBe('function');
22
- expect(typeof squisqReact.DocControlsBottom).toBe('function');
23
- expect(typeof squisqReact.DocControlsSidebar).toBe('function');
24
- expect(typeof squisqReact.DocControlsSlideshow).toBe('function');
25
- expect(typeof squisqReact.DocPlayerWithSidebar).toBe('function');
26
- expect(typeof squisqReact.DocProgressBar).toBe('function');
27
- });
28
- it('exports MarkdownRenderer and LinearDocView', () => {
29
- expect(typeof squisqReact.MarkdownRenderer).toBe('function');
30
- expect(typeof squisqReact.LinearDocView).toBe('function');
31
- });
32
- it('exports hooks', () => {
33
- expect(typeof squisqReact.useAudioSync).toBe('function');
34
- expect(typeof squisqReact.useDocPlayback).toBe('function');
35
- expect(typeof squisqReact.useViewportOrientation).toBe('function');
36
- });
37
- it('exports utility functions', () => {
38
- expect(typeof squisqReact.getAnimationStyle).toBe('function');
39
- expect(typeof squisqReact.getTransitionClass).toBe('function');
40
- });
41
- it('exports formatTime utility', () => {
42
- expect(typeof squisqReact.formatTime).toBe('function');
43
- expect(squisqReact.formatTime(65)).toBe('1:05');
44
- expect(squisqReact.formatTime(0)).toBe('0:00');
45
- expect(squisqReact.formatTime(3661)).toBe('61:01');
46
- });
47
- });
48
- //# sourceMappingURL=exports.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exports.test.js","sourceRoot":"","sources":["../../src/__tests__/exports.test.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- /**
2
- * AudioProvider - Abstraction for audio playback in DocPlayer
3
- *
4
- * This module defines an interface for audio playback operations that can have
5
- * different implementations depending on the runtime environment:
6
- *
7
- * - Site/Browser: Uses HTML5 Audio element directly
8
- * - EFB/MSFS: Routes through CompanionAPI to Electron app
9
- *
10
- * The DocPlayer uses this abstraction instead of directly manipulating audio,
11
- * allowing the same component code to work in both environments.
12
- */
13
- import type { AudioTrack, AudioSegment } from '@bendyline/squisq/schemas';
14
- export interface AudioState {
15
- /** Current time in overall timeline (seconds) */
16
- currentTime: number;
17
- /** Whether audio is currently playing */
18
- isPlaying: boolean;
19
- /** Index of current audio segment */
20
- currentSegment: number;
21
- /** Total duration of all segments */
22
- totalDuration: number;
23
- /** Whether audio has finished */
24
- isEnded: boolean;
25
- /** Whether audio is loaded and ready to play */
26
- isReady: boolean;
27
- /** Whether the audio backend is available/connected */
28
- isAvailable: boolean;
29
- /** Message to show when not available */
30
- unavailableMessage?: string;
31
- }
32
- export interface AudioActions {
33
- /** Start or resume playback */
34
- play: () => Promise<void>;
35
- /** Pause playback */
36
- pause: () => Promise<void>;
37
- /** Toggle play/pause */
38
- toggle: () => Promise<void>;
39
- /** Seek to specific time in timeline */
40
- seekTo: (time: number) => Promise<void>;
41
- /** Skip to specific segment */
42
- skipToSegment: (index: number) => Promise<void>;
43
- /** Restart from beginning */
44
- restart: () => Promise<void>;
45
- }
46
- export type AudioProvider = AudioState & AudioActions;
47
- export interface AudioProviderConfig {
48
- /** Audio track with segments */
49
- audioTrack: AudioTrack | undefined;
50
- /** Base path for resolving audio URLs */
51
- basePath: string;
52
- /** Article ID (for EFB companion) */
53
- articleId?: string;
54
- /** Tile/geohash (for EFB companion) */
55
- tile?: string;
56
- }
57
- /**
58
- * Calculate segment start times and total duration from an audio track
59
- */
60
- export declare function calculateSegmentTiming(segments: AudioSegment[] | undefined): {
61
- segmentStarts: number[];
62
- totalDuration: number;
63
- };
64
- /**
65
- * Find which segment a given time falls into
66
- */
67
- export declare function findSegmentAtTime(time: number, segments: AudioSegment[] | undefined, segmentStarts: number[]): {
68
- segmentIndex: number;
69
- segmentStart: number;
70
- };
71
- //# sourceMappingURL=AudioProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioProvider.d.ts","sourceRoot":"","sources":["../../src/hooks/AudioProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE1E,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,SAAS,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,WAAW,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,qBAAqB;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,wBAAwB;IACxB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,wCAAwC;IACxC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,+BAA+B;IAC/B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,6BAA6B;IAC7B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,YAAY,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IACnC,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,GAAG;IAC5E,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB,CAaA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,EAAE,GAAG,SAAS,EACpC,aAAa,EAAE,MAAM,EAAE,GACtB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAuBhD"}
@@ -1,52 +0,0 @@
1
- /**
2
- * AudioProvider - Abstraction for audio playback in DocPlayer
3
- *
4
- * This module defines an interface for audio playback operations that can have
5
- * different implementations depending on the runtime environment:
6
- *
7
- * - Site/Browser: Uses HTML5 Audio element directly
8
- * - EFB/MSFS: Routes through CompanionAPI to Electron app
9
- *
10
- * The DocPlayer uses this abstraction instead of directly manipulating audio,
11
- * allowing the same component code to work in both environments.
12
- */
13
- /**
14
- * Calculate segment start times and total duration from an audio track
15
- */
16
- export function calculateSegmentTiming(segments) {
17
- if (!segments?.length) {
18
- return { segmentStarts: [], totalDuration: 0 };
19
- }
20
- let time = 0;
21
- const segmentStarts = segments.map((seg) => {
22
- const start = time;
23
- time += seg.duration;
24
- return start;
25
- });
26
- return { segmentStarts, totalDuration: time };
27
- }
28
- /**
29
- * Find which segment a given time falls into
30
- */
31
- export function findSegmentAtTime(time, segments, segmentStarts) {
32
- if (!segments?.length) {
33
- return { segmentIndex: 0, segmentStart: 0 };
34
- }
35
- let segmentIndex = 0;
36
- let segmentStart = 0;
37
- for (let i = 0; i < segments.length; i++) {
38
- const segEnd = segmentStarts[i] + segments[i].duration;
39
- if (time < segEnd) {
40
- segmentIndex = i;
41
- segmentStart = segmentStarts[i];
42
- break;
43
- }
44
- // Handle edge case: time exactly at end goes to last segment
45
- if (i === segments.length - 1) {
46
- segmentIndex = i;
47
- segmentStart = segmentStarts[i];
48
- }
49
- }
50
- return { segmentIndex, segmentStart };
51
- }
52
- //# sourceMappingURL=AudioProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AudioProvider.js","sourceRoot":"","sources":["../../src/hooks/AudioProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmDH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAoC;IAIzE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC;QACnB,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,QAAoC,EACpC,aAAuB;IAEvB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACtB,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvD,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;YAClB,YAAY,GAAG,CAAC,CAAC;YACjB,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM;QACR,CAAC;QACD,6DAA6D;QAC7D,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,YAAY,GAAG,CAAC,CAAC;YACjB,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC"}
@@ -1,35 +0,0 @@
1
- /**
2
- * MediaContext — React context for providing a MediaProvider to layer components.
3
- *
4
- * When a MediaProvider is available in context, layer components (ImageLayer,
5
- * VideoLayer) will use it to resolve media URLs instead of the basePath prop.
6
- * This enables slot-based media storage where binary assets are served from
7
- * IndexedDB as blob URLs.
8
- *
9
- * Usage:
10
- * const provider = createSlotMediaProvider(slotId);
11
- * <MediaContext.Provider value={provider}>
12
- * <DocPlayer doc={doc} basePath="/" />
13
- * </MediaContext.Provider>
14
- */
15
- import type { MediaProvider } from '@bendyline/squisq/schemas';
16
- /**
17
- * React context holding the current MediaProvider (or null if none provided).
18
- */
19
- export declare const MediaContext: import("react").Context<MediaProvider | null>;
20
- /**
21
- * Hook to access the current MediaProvider from context.
22
- * Returns null if no provider is set.
23
- */
24
- export declare function useMediaProvider(): MediaProvider | null;
25
- /**
26
- * Hook to resolve a media URL via the MediaProvider (if available),
27
- * falling back to basePath-based resolution.
28
- *
29
- * Returns the resolved URL string. Updates when the provider or path changes.
30
- *
31
- * @param relativePath - Relative media path from the document (e.g., 'hero.jpg')
32
- * @param basePath - Fallback base path for URL construction
33
- */
34
- export declare function useMediaUrl(relativePath: string, basePath: string): string;
35
- //# sourceMappingURL=MediaContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MediaContext.d.ts","sourceRoot":"","sources":["../../src/hooks/MediaContext.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,YAAY,+CAA4C,CAAC;AAEtE;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAEvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA+C1E"}