@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.
- package/dist/index.d.ts +710 -35
- package/dist/index.js +4288 -33
- package/dist/index.js.map +1 -1
- package/dist/squisq-player.global.js +1 -1
- package/dist/standalone-source.js +1 -1
- package/package.json +2 -2
- package/dist/BlockRenderer.d.ts +0 -37
- package/dist/BlockRenderer.d.ts.map +0 -1
- package/dist/BlockRenderer.js +0 -54
- package/dist/BlockRenderer.js.map +0 -1
- package/dist/CaptionOverlay.d.ts +0 -33
- package/dist/CaptionOverlay.d.ts.map +0 -1
- package/dist/CaptionOverlay.js +0 -44
- package/dist/CaptionOverlay.js.map +0 -1
- package/dist/DocControlsBottom.d.ts +0 -28
- package/dist/DocControlsBottom.d.ts.map +0 -1
- package/dist/DocControlsBottom.js +0 -27
- package/dist/DocControlsBottom.js.map +0 -1
- package/dist/DocControlsOverlay.d.ts +0 -28
- package/dist/DocControlsOverlay.d.ts.map +0 -1
- package/dist/DocControlsOverlay.js +0 -80
- package/dist/DocControlsOverlay.js.map +0 -1
- package/dist/DocControlsSidebar.d.ts +0 -27
- package/dist/DocControlsSidebar.d.ts.map +0 -1
- package/dist/DocControlsSidebar.js +0 -10
- package/dist/DocControlsSidebar.js.map +0 -1
- package/dist/DocControlsSlideshow.d.ts +0 -20
- package/dist/DocControlsSlideshow.d.ts.map +0 -1
- package/dist/DocControlsSlideshow.js +0 -69
- package/dist/DocControlsSlideshow.js.map +0 -1
- package/dist/DocPlayer.d.ts +0 -97
- package/dist/DocPlayer.d.ts.map +0 -1
- package/dist/DocPlayer.js +0 -657
- package/dist/DocPlayer.js.map +0 -1
- package/dist/DocPlayerWithSidebar.d.ts +0 -41
- package/dist/DocPlayerWithSidebar.d.ts.map +0 -1
- package/dist/DocPlayerWithSidebar.js +0 -69
- package/dist/DocPlayerWithSidebar.js.map +0 -1
- package/dist/DocProgressBar.d.ts +0 -31
- package/dist/DocProgressBar.d.ts.map +0 -1
- package/dist/DocProgressBar.js +0 -122
- package/dist/DocProgressBar.js.map +0 -1
- package/dist/InlineAudioPlayer.d.ts +0 -15
- package/dist/InlineAudioPlayer.d.ts.map +0 -1
- package/dist/InlineAudioPlayer.js +0 -22
- package/dist/InlineAudioPlayer.js.map +0 -1
- package/dist/InlineVideoPlayer.d.ts +0 -21
- package/dist/InlineVideoPlayer.d.ts.map +0 -1
- package/dist/InlineVideoPlayer.js +0 -29
- package/dist/InlineVideoPlayer.js.map +0 -1
- package/dist/LinearDocView.d.ts +0 -73
- package/dist/LinearDocView.d.ts.map +0 -1
- package/dist/LinearDocView.js +0 -451
- package/dist/LinearDocView.js.map +0 -1
- package/dist/MarkdownRenderer.d.ts +0 -32
- package/dist/MarkdownRenderer.d.ts.map +0 -1
- package/dist/MarkdownRenderer.js +0 -259
- package/dist/MarkdownRenderer.js.map +0 -1
- package/dist/SocialCaptionOverlay.d.ts +0 -27
- package/dist/SocialCaptionOverlay.d.ts.map +0 -1
- package/dist/SocialCaptionOverlay.js +0 -185
- package/dist/SocialCaptionOverlay.js.map +0 -1
- package/dist/__tests__/BlockRenderer.test.d.ts +0 -2
- package/dist/__tests__/BlockRenderer.test.d.ts.map +0 -1
- package/dist/__tests__/BlockRenderer.test.js +0 -82
- package/dist/__tests__/BlockRenderer.test.js.map +0 -1
- package/dist/__tests__/DocControlsSlideshow.test.d.ts +0 -2
- package/dist/__tests__/DocControlsSlideshow.test.d.ts.map +0 -1
- package/dist/__tests__/DocControlsSlideshow.test.js +0 -89
- package/dist/__tests__/DocControlsSlideshow.test.js.map +0 -1
- package/dist/__tests__/JsonView.test.d.ts +0 -2
- package/dist/__tests__/JsonView.test.d.ts.map +0 -1
- package/dist/__tests__/JsonView.test.js +0 -93
- package/dist/__tests__/JsonView.test.js.map +0 -1
- package/dist/__tests__/LinearDocView.test.d.ts +0 -2
- package/dist/__tests__/LinearDocView.test.d.ts.map +0 -1
- package/dist/__tests__/LinearDocView.test.js +0 -250
- package/dist/__tests__/LinearDocView.test.js.map +0 -1
- package/dist/__tests__/MarkdownRenderer.test.d.ts +0 -2
- package/dist/__tests__/MarkdownRenderer.test.d.ts.map +0 -1
- package/dist/__tests__/MarkdownRenderer.test.js +0 -208
- package/dist/__tests__/MarkdownRenderer.test.js.map +0 -1
- package/dist/__tests__/TableLayer.test.d.ts +0 -2
- package/dist/__tests__/TableLayer.test.d.ts.map +0 -1
- package/dist/__tests__/TableLayer.test.js +0 -121
- package/dist/__tests__/TableLayer.test.js.map +0 -1
- package/dist/__tests__/exports.test.d.ts +0 -2
- package/dist/__tests__/exports.test.d.ts.map +0 -1
- package/dist/__tests__/exports.test.js +0 -48
- package/dist/__tests__/exports.test.js.map +0 -1
- package/dist/hooks/AudioProvider.d.ts +0 -71
- package/dist/hooks/AudioProvider.d.ts.map +0 -1
- package/dist/hooks/AudioProvider.js +0 -52
- package/dist/hooks/AudioProvider.js.map +0 -1
- package/dist/hooks/MediaContext.d.ts +0 -35
- package/dist/hooks/MediaContext.d.ts.map +0 -1
- package/dist/hooks/MediaContext.js +0 -72
- package/dist/hooks/MediaContext.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -6
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -5
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useAudioSync.d.ts +0 -18
- package/dist/hooks/useAudioSync.d.ts.map +0 -1
- package/dist/hooks/useAudioSync.js +0 -340
- package/dist/hooks/useAudioSync.js.map +0 -1
- package/dist/hooks/useAutoSurface.d.ts +0 -11
- package/dist/hooks/useAutoSurface.d.ts.map +0 -1
- package/dist/hooks/useAutoSurface.js +0 -24
- package/dist/hooks/useAutoSurface.js.map +0 -1
- package/dist/hooks/useDocPlayback.d.ts +0 -47
- package/dist/hooks/useDocPlayback.d.ts.map +0 -1
- package/dist/hooks/useDocPlayback.js +0 -179
- package/dist/hooks/useDocPlayback.js.map +0 -1
- package/dist/hooks/useViewportOrientation.d.ts +0 -31
- package/dist/hooks/useViewportOrientation.d.ts.map +0 -1
- package/dist/hooks/useViewportOrientation.js +0 -92
- package/dist/hooks/useViewportOrientation.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/jsonView/JsonView.d.ts +0 -26
- package/dist/jsonView/JsonView.d.ts.map +0 -1
- package/dist/jsonView/JsonView.js +0 -12
- package/dist/jsonView/JsonView.js.map +0 -1
- package/dist/jsonView/RenderNode.d.ts +0 -22
- package/dist/jsonView/RenderNode.d.ts.map +0 -1
- package/dist/jsonView/RenderNode.js +0 -30
- package/dist/jsonView/RenderNode.js.map +0 -1
- package/dist/jsonView/index.d.ts +0 -3
- package/dist/jsonView/index.d.ts.map +0 -1
- package/dist/jsonView/index.js +0 -2
- package/dist/jsonView/index.js.map +0 -1
- package/dist/jsonView/useJsonViewTokens.d.ts +0 -14
- package/dist/jsonView/useJsonViewTokens.d.ts.map +0 -1
- package/dist/jsonView/useJsonViewTokens.js +0 -34
- package/dist/jsonView/useJsonViewTokens.js.map +0 -1
- package/dist/jsonView/viewers.d.ts +0 -30
- package/dist/jsonView/viewers.d.ts.map +0 -1
- package/dist/jsonView/viewers.js +0 -226
- package/dist/jsonView/viewers.js.map +0 -1
- package/dist/layers/ImageLayer.d.ts +0 -23
- package/dist/layers/ImageLayer.d.ts.map +0 -1
- package/dist/layers/ImageLayer.js +0 -104
- package/dist/layers/ImageLayer.js.map +0 -1
- package/dist/layers/MapLayer.d.ts +0 -29
- package/dist/layers/MapLayer.d.ts.map +0 -1
- package/dist/layers/MapLayer.js +0 -97
- package/dist/layers/MapLayer.js.map +0 -1
- package/dist/layers/ShapeLayer.d.ts +0 -20
- package/dist/layers/ShapeLayer.d.ts.map +0 -1
- package/dist/layers/ShapeLayer.js +0 -39
- package/dist/layers/ShapeLayer.js.map +0 -1
- package/dist/layers/TableLayer.d.ts +0 -23
- package/dist/layers/TableLayer.d.ts.map +0 -1
- package/dist/layers/TableLayer.js +0 -58
- package/dist/layers/TableLayer.js.map +0 -1
- package/dist/layers/TextLayer.d.ts +0 -23
- package/dist/layers/TextLayer.d.ts.map +0 -1
- package/dist/layers/TextLayer.js +0 -126
- package/dist/layers/TextLayer.js.map +0 -1
- package/dist/layers/VideoLayer.d.ts +0 -40
- package/dist/layers/VideoLayer.d.ts.map +0 -1
- package/dist/layers/VideoLayer.js +0 -105
- package/dist/layers/VideoLayer.js.map +0 -1
- package/dist/layers/index.d.ts +0 -6
- package/dist/layers/index.d.ts.map +0 -1
- package/dist/layers/index.js +0 -6
- package/dist/layers/index.js.map +0 -1
- package/dist/standalone-entry.d.ts +0 -69
- package/dist/standalone-entry.d.ts.map +0 -1
- package/dist/standalone-entry.js +0 -185
- package/dist/standalone-entry.js.map +0 -1
- package/dist/types.d.ts +0 -154
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -21
- package/dist/types.js.map +0 -1
- package/dist/utils/animationUtils.d.ts +0 -8
- package/dist/utils/animationUtils.d.ts.map +0 -1
- package/dist/utils/animationUtils.js +0 -8
- package/dist/utils/animationUtils.js.map +0 -1
- package/dist/utils/layerUtils.d.ts +0 -17
- package/dist/utils/layerUtils.d.ts.map +0 -1
- package/dist/utils/layerUtils.js +0 -37
- package/dist/utils/layerUtils.js.map +0 -1
- package/dist/utils/mapTileUtils.d.ts +0 -105
- package/dist/utils/mapTileUtils.d.ts.map +0 -1
- package/dist/utils/mapTileUtils.js +0 -268
- 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 +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 +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"}
|