@pep/term-deck 1.0.14 → 1.0.15
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/bin/term-deck.d.ts +1 -0
- package/dist/bin/term-deck.js +1720 -0
- package/dist/bin/term-deck.js.map +1 -0
- package/dist/index.d.ts +670 -0
- package/dist/index.js +159 -0
- package/dist/index.js.map +1 -0
- package/package.json +16 -13
- package/bin/term-deck.js +0 -14
- package/bin/term-deck.ts +0 -45
- package/src/cli/__tests__/errors.test.ts +0 -201
- package/src/cli/__tests__/help.test.ts +0 -157
- package/src/cli/__tests__/init.test.ts +0 -110
- package/src/cli/commands/export.ts +0 -33
- package/src/cli/commands/init.ts +0 -125
- package/src/cli/commands/present.ts +0 -29
- package/src/cli/errors.ts +0 -77
- package/src/core/__tests__/slide.test.ts +0 -1759
- package/src/core/__tests__/theme.test.ts +0 -1103
- package/src/core/slide.ts +0 -509
- package/src/core/theme.ts +0 -388
- package/src/export/__tests__/recorder.test.ts +0 -566
- package/src/export/recorder.ts +0 -639
- package/src/index.ts +0 -36
- package/src/presenter/__tests__/main.test.ts +0 -244
- package/src/presenter/main.ts +0 -658
- package/src/renderer/__tests__/screen-extended.test.ts +0 -801
- package/src/renderer/__tests__/screen.test.ts +0 -525
- package/src/renderer/screen.ts +0 -671
- package/src/schemas/__tests__/config.test.ts +0 -429
- package/src/schemas/__tests__/slide.test.ts +0 -349
- package/src/schemas/__tests__/theme.test.ts +0 -970
- package/src/schemas/__tests__/validation.test.ts +0 -256
- package/src/schemas/config.ts +0 -58
- package/src/schemas/slide.ts +0 -56
- package/src/schemas/theme.ts +0 -203
- package/src/schemas/validation.ts +0 -64
- package/src/themes/matrix/index.ts +0 -53
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, mock, spyOn } from 'bun:test';
|
|
2
|
-
import { jumpToSlide, nextSlide, prevSlide } from '../main';
|
|
3
|
-
import type { Presenter } from '../main';
|
|
4
|
-
import { createRenderer, destroyRenderer } from '../../renderer/screen';
|
|
5
|
-
import { DEFAULT_THEME } from '../../schemas/theme';
|
|
6
|
-
import type { Deck } from '../../core/slide';
|
|
7
|
-
import type { Slide } from '../../schemas/slide';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Create a test presenter with a real renderer but mocked navigation
|
|
11
|
-
*/
|
|
12
|
-
function createTestPresenter(slideCount: number): Presenter {
|
|
13
|
-
const slides: Slide[] = Array.from({ length: slideCount }, (_, i) => ({
|
|
14
|
-
frontmatter: { title: `Slide ${i}` },
|
|
15
|
-
body: `Content for slide ${i}`,
|
|
16
|
-
notes: '',
|
|
17
|
-
sourcePath: `/slides/${i}.md`,
|
|
18
|
-
index: i,
|
|
19
|
-
}));
|
|
20
|
-
|
|
21
|
-
const deck: Deck = {
|
|
22
|
-
slides,
|
|
23
|
-
config: {
|
|
24
|
-
title: 'Test Deck',
|
|
25
|
-
author: 'Test Author',
|
|
26
|
-
theme: DEFAULT_THEME,
|
|
27
|
-
settings: {
|
|
28
|
-
startSlide: 0,
|
|
29
|
-
loop: false,
|
|
30
|
-
autoAdvance: 0,
|
|
31
|
-
showSlideNumbers: true,
|
|
32
|
-
showProgress: true,
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
basePath: '/slides',
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const renderer = createRenderer(DEFAULT_THEME);
|
|
39
|
-
|
|
40
|
-
return {
|
|
41
|
-
deck,
|
|
42
|
-
renderer,
|
|
43
|
-
currentSlide: 0,
|
|
44
|
-
isAnimating: false,
|
|
45
|
-
notesWindow: null,
|
|
46
|
-
autoAdvanceTimer: null,
|
|
47
|
-
progressBar: null,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
describe('Presenter Navigation', () => {
|
|
52
|
-
describe('jumpToSlide', () => {
|
|
53
|
-
it('checks bounds - accepts valid index', async () => {
|
|
54
|
-
const presenter = createTestPresenter(10);
|
|
55
|
-
presenter.currentSlide = 0;
|
|
56
|
-
|
|
57
|
-
await jumpToSlide(presenter, 5);
|
|
58
|
-
|
|
59
|
-
expect(presenter.currentSlide).toBe(5);
|
|
60
|
-
destroyRenderer(presenter.renderer);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('checks bounds - ignores negative index', async () => {
|
|
64
|
-
const presenter = createTestPresenter(10);
|
|
65
|
-
presenter.currentSlide = 5;
|
|
66
|
-
|
|
67
|
-
await jumpToSlide(presenter, -1);
|
|
68
|
-
|
|
69
|
-
// Should remain at current slide
|
|
70
|
-
expect(presenter.currentSlide).toBe(5);
|
|
71
|
-
destroyRenderer(presenter.renderer);
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('checks bounds - ignores index beyond deck length', async () => {
|
|
75
|
-
const presenter = createTestPresenter(10);
|
|
76
|
-
presenter.currentSlide = 5;
|
|
77
|
-
|
|
78
|
-
await jumpToSlide(presenter, 10);
|
|
79
|
-
|
|
80
|
-
// Should remain at current slide
|
|
81
|
-
expect(presenter.currentSlide).toBe(5);
|
|
82
|
-
destroyRenderer(presenter.renderer);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('checks bounds - ignores index far beyond deck length', async () => {
|
|
86
|
-
const presenter = createTestPresenter(10);
|
|
87
|
-
presenter.currentSlide = 5;
|
|
88
|
-
|
|
89
|
-
await jumpToSlide(presenter, 100);
|
|
90
|
-
|
|
91
|
-
// Should remain at current slide
|
|
92
|
-
expect(presenter.currentSlide).toBe(5);
|
|
93
|
-
destroyRenderer(presenter.renderer);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('updates currentSlide when jumping', async () => {
|
|
97
|
-
const presenter = createTestPresenter(10);
|
|
98
|
-
presenter.currentSlide = 0;
|
|
99
|
-
|
|
100
|
-
await jumpToSlide(presenter, 7);
|
|
101
|
-
|
|
102
|
-
expect(presenter.currentSlide).toBe(7);
|
|
103
|
-
destroyRenderer(presenter.renderer);
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it('handles jump to first slide', async () => {
|
|
107
|
-
const presenter = createTestPresenter(10);
|
|
108
|
-
presenter.currentSlide = 5;
|
|
109
|
-
|
|
110
|
-
await jumpToSlide(presenter, 0);
|
|
111
|
-
|
|
112
|
-
expect(presenter.currentSlide).toBe(0);
|
|
113
|
-
destroyRenderer(presenter.renderer);
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('handles jump to last slide', async () => {
|
|
117
|
-
const presenter = createTestPresenter(10);
|
|
118
|
-
presenter.currentSlide = 0;
|
|
119
|
-
|
|
120
|
-
await jumpToSlide(presenter, 9);
|
|
121
|
-
|
|
122
|
-
expect(presenter.currentSlide).toBe(9);
|
|
123
|
-
destroyRenderer(presenter.renderer);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
it('handles jump to same slide', async () => {
|
|
127
|
-
const presenter = createTestPresenter(10);
|
|
128
|
-
presenter.currentSlide = 5;
|
|
129
|
-
|
|
130
|
-
await jumpToSlide(presenter, 5);
|
|
131
|
-
|
|
132
|
-
expect(presenter.currentSlide).toBe(5);
|
|
133
|
-
destroyRenderer(presenter.renderer);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it('handles single-slide deck', async () => {
|
|
137
|
-
const presenter = createTestPresenter(1);
|
|
138
|
-
|
|
139
|
-
await jumpToSlide(presenter, 0);
|
|
140
|
-
|
|
141
|
-
expect(presenter.currentSlide).toBe(0);
|
|
142
|
-
destroyRenderer(presenter.renderer);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it('rejects invalid index in single-slide deck', async () => {
|
|
146
|
-
const presenter = createTestPresenter(1);
|
|
147
|
-
|
|
148
|
-
await jumpToSlide(presenter, 1);
|
|
149
|
-
|
|
150
|
-
expect(presenter.currentSlide).toBe(0);
|
|
151
|
-
destroyRenderer(presenter.renderer);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it('preserves window stack by re-rendering from start', async () => {
|
|
155
|
-
const presenter = createTestPresenter(5);
|
|
156
|
-
presenter.currentSlide = 0;
|
|
157
|
-
|
|
158
|
-
await jumpToSlide(presenter, 3);
|
|
159
|
-
|
|
160
|
-
// Should have created windows for slides 0-3 (4 windows total)
|
|
161
|
-
expect(presenter.renderer.windowStack.length).toBe(4);
|
|
162
|
-
destroyRenderer(presenter.renderer);
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
describe('nextSlide', () => {
|
|
167
|
-
it('advances to next slide', async () => {
|
|
168
|
-
const presenter = createTestPresenter(5);
|
|
169
|
-
presenter.currentSlide = 0;
|
|
170
|
-
|
|
171
|
-
await nextSlide(presenter);
|
|
172
|
-
|
|
173
|
-
expect(presenter.currentSlide).toBe(1);
|
|
174
|
-
destroyRenderer(presenter.renderer);
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it('does not advance past last slide when loop is disabled', async () => {
|
|
178
|
-
const presenter = createTestPresenter(3);
|
|
179
|
-
presenter.currentSlide = 2;
|
|
180
|
-
|
|
181
|
-
await nextSlide(presenter);
|
|
182
|
-
|
|
183
|
-
// Should stay at slide 2
|
|
184
|
-
expect(presenter.currentSlide).toBe(2);
|
|
185
|
-
destroyRenderer(presenter.renderer);
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it('loops to first slide when loop is enabled', async () => {
|
|
189
|
-
const presenter = createTestPresenter(3);
|
|
190
|
-
presenter.deck.config.settings = { loop: true } as any;
|
|
191
|
-
presenter.currentSlide = 2;
|
|
192
|
-
|
|
193
|
-
await nextSlide(presenter);
|
|
194
|
-
|
|
195
|
-
expect(presenter.currentSlide).toBe(0);
|
|
196
|
-
destroyRenderer(presenter.renderer);
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
describe('prevSlide', () => {
|
|
201
|
-
it('goes to previous slide', async () => {
|
|
202
|
-
const presenter = createTestPresenter(5);
|
|
203
|
-
presenter.currentSlide = 2;
|
|
204
|
-
|
|
205
|
-
await prevSlide(presenter);
|
|
206
|
-
|
|
207
|
-
expect(presenter.currentSlide).toBe(1);
|
|
208
|
-
destroyRenderer(presenter.renderer);
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it('does not go before first slide when loop is disabled', async () => {
|
|
212
|
-
const presenter = createTestPresenter(3);
|
|
213
|
-
presenter.currentSlide = 0;
|
|
214
|
-
|
|
215
|
-
await prevSlide(presenter);
|
|
216
|
-
|
|
217
|
-
// Should stay at slide 0
|
|
218
|
-
expect(presenter.currentSlide).toBe(0);
|
|
219
|
-
destroyRenderer(presenter.renderer);
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
it('loops to last slide when loop is enabled', async () => {
|
|
223
|
-
const presenter = createTestPresenter(3);
|
|
224
|
-
presenter.deck.config.settings = { loop: true } as any;
|
|
225
|
-
presenter.currentSlide = 0;
|
|
226
|
-
|
|
227
|
-
await prevSlide(presenter);
|
|
228
|
-
|
|
229
|
-
expect(presenter.currentSlide).toBe(2);
|
|
230
|
-
destroyRenderer(presenter.renderer);
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
it('re-renders from start to preserve stacking', async () => {
|
|
234
|
-
const presenter = createTestPresenter(5);
|
|
235
|
-
presenter.currentSlide = 3;
|
|
236
|
-
|
|
237
|
-
await prevSlide(presenter);
|
|
238
|
-
|
|
239
|
-
// Should have windows for slides 0, 1, 2 (3 windows)
|
|
240
|
-
expect(presenter.renderer.windowStack.length).toBe(3);
|
|
241
|
-
destroyRenderer(presenter.renderer);
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
});
|