taleem-slides 0.6.0 → 0.6.2-rc.1

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.
@@ -0,0 +1,289 @@
1
+ /* =====================================================
2
+ TALEEM — Single Public Stylesheet
3
+
4
+ /* -------------------------------
5
+ Global Page Reset
6
+ ------------------------------- */
7
+
8
+ html,body {
9
+ height: 100%;
10
+ overflow: hidden;
11
+ margin: 0;
12
+ font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
13
+ background: var(--backgroundColor, #0b1220);
14
+ color: var(--primaryColor, #e6e9ff);
15
+ }
16
+
17
+ #app {
18
+ position: relative;
19
+ width: 100vw;
20
+ min-height: 100vh;
21
+ overflow: hidden;
22
+ }
23
+
24
+ /* -------------------------------
25
+ Browser / Player Layers
26
+ ------------------------------- */
27
+ .taleem-browser-bg {
28
+ position: absolute;
29
+ inset: 0;
30
+ z-index: 0;
31
+ background-size: cover;
32
+ background-position: center;
33
+ }
34
+
35
+ .taleem-browser-slide {
36
+ position: relative;
37
+ z-index: 1;
38
+ }
39
+
40
+ /* -------------------------------
41
+ Base Slide Grammar
42
+ ------------------------------- */
43
+ .slide {
44
+ height: 100vh;
45
+ box-sizing: border-box;
46
+
47
+ display: flex;
48
+ flex-direction: column;
49
+ justify-content: center;
50
+ align-items: center;
51
+
52
+ padding: 64px 80px;
53
+ gap: 32px;
54
+
55
+ overflow: hidden;
56
+ background: transparent;
57
+ color: var(--primaryColor, #e6e9ff);
58
+
59
+ font-size: 2.4rem;
60
+ line-height: 1.6;
61
+ letter-spacing: 0.01em;
62
+ text-align: center;
63
+ }
64
+
65
+ /* -------------------------------
66
+ Global Image Safety
67
+ ------------------------------- */
68
+ .slide img {
69
+ max-width: 100%;
70
+ max-height: 100%;
71
+ height: auto;
72
+ width: auto;
73
+ display: block;
74
+ }
75
+
76
+ /* -------------------------------
77
+ Headings
78
+ ------------------------------- */
79
+ .slide h1 {
80
+ margin: 0;
81
+ letter-spacing: -0.015em;
82
+ }
83
+
84
+ /* -------------------------------
85
+ Slide Types
86
+ ------------------------------- */
87
+ .slide.titleSlide h1 {
88
+ font-size: 5.6rem;
89
+ font-weight: 700;
90
+ line-height: 1.2;
91
+ }
92
+
93
+ .slide.titleAndSubtitle h1 {
94
+ font-size: 5.8rem;
95
+ font-weight: 700;
96
+ }
97
+
98
+ .slide.titleAndSubtitle h2 {
99
+ font-size: 3.8rem;
100
+ font-weight: 400;
101
+ opacity: 0.8;
102
+ margin: 0;
103
+ }
104
+
105
+ .slide.titleAndPara h1 {
106
+ font-size: 4.8rem;
107
+ font-weight: 600;
108
+ }
109
+
110
+ .slide.titleAndPara p {
111
+ font-size: 3rem;
112
+ max-width: 70ch;
113
+ opacity: 0.9;
114
+ margin: 0;
115
+ }
116
+
117
+ /* -------------------------------
118
+ Bullet List
119
+ ------------------------------- */
120
+ .slide.bulletList ul {
121
+ list-style: disc;
122
+ padding-left: 2rem;
123
+ margin: 0;
124
+ }
125
+
126
+ .slide.bulletList li {
127
+ font-size: 3.6rem;
128
+ margin-bottom: 1rem;
129
+ text-align: left;
130
+ font-weight: 500;
131
+ }
132
+
133
+ /* -------------------------------
134
+ Image Variants
135
+ ------------------------------- */
136
+ .slide.imageSlide {
137
+ padding: 0;
138
+ }
139
+
140
+ .slide.imageSlide img {
141
+ object-fit: contain;
142
+ }
143
+
144
+ .slide.imageWithTitle {
145
+ position: relative;
146
+ padding: 48px;
147
+ }
148
+
149
+ .slide.imageWithTitle img {
150
+ height: calc(100vh - 96px);
151
+ border-radius: 12px;
152
+ }
153
+
154
+ .slide.imageWithTitle h1 {
155
+ position: absolute;
156
+ bottom: 64px;
157
+ left: 50%;
158
+ transform: translateX(-50%);
159
+ font-size: 4.6rem;
160
+ background: rgba(0, 0, 0, 0.45);
161
+ padding: 0.4em 0.8em;
162
+ border-radius: 6px;
163
+ }
164
+
165
+ .slide.imageWithCaption {
166
+ display: flex;
167
+ flex-direction: column;
168
+ justify-content: center;
169
+ gap: 32px;
170
+ height: 100vh;
171
+ overflow: hidden;
172
+ }
173
+
174
+ .slide.imageWithCaption img {
175
+ max-height: 55vh; /* reduce slightly */
176
+ object-fit: contain;
177
+ flex-shrink: 0;
178
+ }
179
+
180
+ .slide.imageWithCaption p {
181
+ max-height: 20vh; /* hard cap text */
182
+ overflow: hidden;
183
+ text-overflow: ellipsis;
184
+ }
185
+
186
+ /* -------------------------------
187
+ Two Column Text
188
+ ------------------------------- */
189
+ .slide.twoColumnText .columns {
190
+ display: grid;
191
+ grid-template-columns: 1fr 1fr;
192
+ gap: 64px;
193
+ max-width: 1200px;
194
+ }
195
+
196
+ .slide.twoColumnText p {
197
+ font-size: 3rem;
198
+ text-align: left;
199
+ }
200
+ .slide.quoteSlide {
201
+ display: flex;
202
+ flex-direction: column;
203
+ justify-content: center;
204
+ gap: 32px;
205
+ height: 100vh;
206
+ overflow: hidden;
207
+ }
208
+
209
+ .slide.quoteSlide blockquote {
210
+ max-height: 60vh;
211
+ overflow: hidden;
212
+ }
213
+
214
+ .slide.quoteSlide cite {
215
+ flex-shrink: 0;
216
+ }
217
+
218
+ /* -------------------------------
219
+ Quote Slide
220
+ ------------------------------- */
221
+ .slide.quoteSlide blockquote {
222
+ font-size: 3.8rem;
223
+ font-style: italic;
224
+ max-width: 60ch;
225
+ }
226
+
227
+ .slide.quoteSlide cite {
228
+ font-size: 2.4rem;
229
+ opacity: 0.75;
230
+ }
231
+
232
+ /* -------------------------------
233
+ Big Number
234
+ ------------------------------- */
235
+ .slide.bigNumber .number {
236
+ font-size: 9rem;
237
+ font-weight: 700;
238
+ }
239
+
240
+ /* -------------------------------
241
+ Fill Image (Full Bleed)
242
+ ------------------------------- */
243
+ .slide.fillImage {
244
+ padding: 0;
245
+ height: 100vh;
246
+ display: block;
247
+ }
248
+
249
+ .slide.fillImage img {
250
+ width: 100%;
251
+ height: 100%;
252
+ object-fit: cover;
253
+ }
254
+
255
+ /* -------------------------------
256
+ Demo / Player UI (Optional)
257
+ ------------------------------- */
258
+ #timebar {
259
+ position: fixed;
260
+ bottom: 0;
261
+ left: 0;
262
+ right: 0;
263
+ height: 32px;
264
+ background: rgba(0, 0, 0, 0.6);
265
+ backdrop-filter: blur(6px);
266
+ z-index: 10;
267
+ }
268
+
269
+
270
+
271
+ /* ///////fixes */
272
+
273
+ /* -------------------------------
274
+ Image + Bullets (Side by Side)
275
+ ------------------------------- */
276
+
277
+ .slide.imageRightBulletsLeft,
278
+ .slide.imageLeftBulletsRight {
279
+ display: flex;
280
+ flex-direction: row;
281
+ align-items: center;
282
+ gap: 64px;
283
+ text-align: left;
284
+ }
285
+
286
+ /* image on right */
287
+ .slide.imageRightBulletsLeft img {
288
+ order: 2;
289
+ }
@@ -0,0 +1,6 @@
1
+
2
+ :root {
3
+ --backgroundColor: #081b7a;
4
+ --primaryColor: #ccd0e4;
5
+ }
6
+
@@ -0,0 +1,6 @@
1
+
2
+ :root {
3
+ --backgroundColor: #15df1b;
4
+ --primaryColor: #cbd44b;
5
+ }
6
+
@@ -0,0 +1,6 @@
1
+
2
+ :root {
3
+ --backgroundColor: #f8f9fb;
4
+ --primaryColor: #1a1f36;
5
+ }
6
+
package/package.json CHANGED
@@ -1,23 +1,38 @@
1
1
  {
2
2
  "name": "taleem-slides",
3
- "version": "0.6.0",
3
+ "version": "0.6.2-rc.1",
4
4
  "type": "module",
5
- "description": "Convert json taleem schema into html for slides",
5
+ "description": "Convert Taleem schema into HTML slides",
6
+
6
7
  "exports": {
7
- ".": "./src/index.js"
8
+ ".": "./src/index.js",
9
+
10
+ "./styles/taleem.css": "./dist/taleem.css",
11
+ "./styles/themes/dark.css": "./dist/themes/dark.css",
12
+ "./styles/themes/light.css": "./dist/themes/light.css",
13
+ "./styles/themes/paper.css": "./dist/themes/paper.css"
8
14
  },
15
+
16
+ "files": [
17
+ "dist",
18
+ "src"
19
+ ],
20
+
9
21
  "scripts": {
22
+ "build": "node scripts/build.js",
10
23
  "test": "vitest run",
11
24
  "test:watch": "vitest",
12
25
  "test:ui": "vitest --ui",
13
26
  "lint": "echo \"no lint yet\""
14
27
  },
15
- "devDependencies": {
16
- "vite": "^5.0.0",
17
- "vitest": "^1.5.0"
18
- },
28
+
19
29
  "dependencies": {
20
30
  "taleem-core": "^1.3.2",
21
31
  "zod": "^4.3.5"
32
+ },
33
+
34
+ "devDependencies": {
35
+ "vite": "^5.0.0",
36
+ "vitest": "^1.5.0"
22
37
  }
23
38
  }
@@ -1,15 +0,0 @@
1
- // tests/slides.titleSlide.test.js
2
- import { describe, test, expect } from "vitest";
3
- import { TitleSlide } from "../src/slides/TitleSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("TitleSlide", () => {
7
- test("renders from golden deck", () => {
8
- const raw = goldenDeckV1.deck.find(s => s.type === "titleSlide");
9
- const slide = TitleSlide.fromJSON(raw);
10
- const html = slide.render();
11
-
12
- expect(html).toContain("titleSlide");
13
- expect(html).toContain("Golden Deck");
14
- });
15
- });
@@ -1,24 +0,0 @@
1
- import { describe, test, expect } from "vitest";
2
- import { BarChartSlide } from "../src/slides/BarChartSlide.js";
3
- import { goldenDeckV1 } from "taleem-core"; // path may vary in monorepo
4
-
5
- describe("BarChartSlide", () => {
6
- test("renders barChart slide from golden deck", () => {
7
- // 1. Extract canonical barChart slide from golden deck
8
- const barChartSlide = goldenDeckV1.deck.find(
9
- slide => slide.type === "barChart"
10
- );
11
-
12
- // Safety check (optional but fine during refactor)
13
- expect(barChartSlide).toBeTruthy();
14
-
15
- // 2. Feed EXACT golden-deck data into renderer
16
- const slide = BarChartSlide.fromJSON(barChartSlide);
17
- const html = slide.render();
18
-
19
- // 3. Assert rendered HTML (presentation only)
20
- expect(html).toContain("bar");
21
- expect(html).toContain("span");
22
- expect(html).toContain("barChart");
23
- });
24
- });
@@ -1,17 +0,0 @@
1
- import { describe, test, expect } from "vitest";
2
- import { BigNumberSlide } from "../src/slides/BigNumberSlide.js";
3
- import { goldenDeckV1 } from "taleem-core";
4
-
5
- describe("BigNumberSlide", () => {
6
- test("renders bigNumber from golden deck", () => {
7
- const slideData = goldenDeckV1.deck.find(
8
- slide => slide.type === "bigNumber"
9
- );
10
-
11
- const slide = BigNumberSlide.fromJSON(slideData);
12
- const html = slide.render();
13
-
14
- expect(html).toContain("bigNumber");
15
- expect(html).toContain(slide.number);
16
- });
17
- });
@@ -1,17 +0,0 @@
1
- import { describe, test, expect } from "vitest";
2
- import { BulletListSlide } from "../src/slides/BulletListSlide.js";
3
- import { goldenDeckV1 } from "taleem-core";
4
-
5
- describe("BulletListSlide", () => {
6
- test("renders bulletList from golden deck", () => {
7
- const slideData = goldenDeckV1.deck.find(
8
- slide => slide.type === "bulletList"
9
- );
10
-
11
- const slide = BulletListSlide.fromJSON(slideData);
12
- const html = slide.render();
13
-
14
- expect(html).toContain("bulletList");
15
- expect(html).toContain("<li");
16
- });
17
- });
@@ -1,18 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { ContactSlide } from "../src/slides/ContactSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("ContactSlide", () => {
7
- test("renders contactSlide from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- slide => slide.type === "contactSlide"
10
- );
11
-
12
- const slide = ContactSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("contactSlide");
16
- expect(html).toContain("<div>");
17
- });
18
- });
@@ -1,18 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { CornerWordsSlide } from "../src/slides/CornerWordsSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("CornerWordsSlide", () => {
7
- test("renders cornerWordsSlide from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- slide => slide.type === "cornerWordsSlide"
10
- );
11
-
12
- const slide = CornerWordsSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("cornerWordsSlide");
16
- expect(html).toContain("corner-card");
17
- });
18
- });
@@ -1,19 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { DonutChartSlide } from "../src/slides/DonutChartSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("DonutChartSlide", () => {
7
- test("renders donutChart from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- slide => slide.type === "donutChart"
10
- );
11
-
12
- const slide = DonutChartSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("donutChart");
16
- expect(html).toContain("%");
17
- });
18
- });
19
-
@@ -1,18 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { EqSlide } from "../src/slides/EqSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("EqSlide", () => {
7
- test("renders eq slide from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- slide => slide.type === "eq"
10
- );
11
-
12
- const slide = EqSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("eq");
16
- expect(html).toContain("eq-line");
17
- });
18
- });
@@ -1,18 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { FillImageSlide } from "../src/slides/FillImageSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("FillImageSlide", () => {
7
- test("renders fillImage from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- slide => slide.type === "fillImage"
10
- );
11
-
12
- const slide = FillImageSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("fillImage");
16
- expect(html).toContain("<img");
17
- });
18
- });
@@ -1,19 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { ImageLeftBulletsRightSlide } from "../src/slides/ImageLeftBulletsRightSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("ImageLeftBulletsRightSlide", () => {
7
- test("renders imageLeftBulletsRight from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- s => s.type === "imageLeftBulletsRight"
10
- );
11
-
12
- const slide = ImageLeftBulletsRightSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("imageLeftBulletsRight");
16
- expect(html).toContain("<img");
17
- expect(html).toContain("<li>");
18
- });
19
- });
@@ -1,18 +0,0 @@
1
- import { describe, test, expect } from "vitest";
2
- import { ImageRightBulletsLeftSlide } from "../src/slides/ImageRightBulletsLeftSlide.js";
3
- import { goldenDeckV1 } from "taleem-core";
4
-
5
- describe("ImageRightBulletsLeftSlide", () => {
6
- test("renders imageRightBulletsLeft from golden deck", () => {
7
- const slideData = goldenDeckV1.deck.find(
8
- s => s.type === "imageRightBulletsLeft"
9
- );
10
-
11
- const slide = ImageRightBulletsLeftSlide.fromJSON(slideData);
12
- const html = slide.render();
13
-
14
- expect(html).toContain("imageRightBulletsLeft");
15
- expect(html).toContain("<img");
16
- expect(html).toContain("<li>");
17
- });
18
- });
@@ -1,18 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { ImageSlide } from "../src/slides/ImageSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("ImageSlide", () => {
7
- test("renders imageSlide from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- s => s.type === "imageSlide"
10
- );
11
-
12
- const slide = ImageSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("imageSlide");
16
- expect(html).toContain("<img");
17
- });
18
- });
@@ -1,18 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { ImageWithCaptionSlide } from "../src/slides/ImageWithCaptionSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("ImageWithCaptionSlide", () => {
7
- test("renders imageWithCaption from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- s => s.type === "imageWithCaption"
10
- );
11
-
12
- const slide = ImageWithCaptionSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("imageWithCaption");
16
- expect(html).toContain("<figcaption>");
17
- });
18
- });
@@ -1,18 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { ImageWithTitleSlide } from "../src/slides/ImageWithTitleSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("ImageWithTitleSlide", () => {
7
- test("renders imageWithTitle from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- s => s.type === "imageWithTitle"
10
- );
11
-
12
- const slide = ImageWithTitleSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("imageWithTitle");
16
- expect(html).toContain("<h1>");
17
- });
18
- });
@@ -1,17 +0,0 @@
1
- import { describe, test, expect } from "vitest";
2
- import { QuoteSlide } from "../src/slides/QuoteSlide.js";
3
- import { goldenDeckV1 } from "taleem-core";
4
-
5
- describe("QuoteSlide", () => {
6
- test("renders quoteSlide from golden deck", () => {
7
- const slideData = goldenDeckV1.deck.find(
8
- s => s.type === "quoteSlide"
9
- );
10
-
11
- const slide = QuoteSlide.fromJSON(slideData);
12
- const html = slide.render();
13
-
14
- expect(html).toContain("quoteSlide");
15
- expect(html).toContain("<blockquote");
16
- });
17
- });
@@ -1,19 +0,0 @@
1
-
2
- import { describe, test, expect } from "vitest";
3
- import { QuoteWithImageSlide } from "../src/slides/QuoteWithImageSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("QuoteWithImageSlide", () => {
7
- test("renders quoteWithImage from golden deck", () => {
8
- const slideData = goldenDeckV1.deck.find(
9
- s => s.type === "quoteWithImage"
10
- );
11
-
12
- const slide = QuoteWithImageSlide.fromJSON(slideData);
13
- const html = slide.render();
14
-
15
- expect(html).toContain("quoteWithImage");
16
- expect(html).toContain("<img");
17
- expect(html).toContain("<blockquote");
18
- });
19
- });
@@ -1,18 +0,0 @@
1
- import { describe, test, expect } from "vitest";
2
- import { StatisticSlide } from "../src/slides/StatisticSlide.js";
3
- import { goldenDeckV1 } from "taleem-core";
4
-
5
- describe("StatisticSlide", () => {
6
- test("renders statistic slide from golden deck", () => {
7
- const raw = goldenDeckV1.deck.find(s => s.type === "statistic");
8
-
9
- const slide = StatisticSlide.fromJSON(raw);
10
- const html = slide.render();
11
-
12
- expect(html).toContain("slide statistic");
13
- expect(html).toContain("stat-value");
14
- expect(html).toContain("stat-label");
15
- expect(html).toContain("75%");
16
- expect(html).toContain("Completion Rate");
17
- });
18
- });
@@ -1,16 +0,0 @@
1
- // tests/slides.table.test.js
2
- import { describe, test, expect } from "vitest";
3
- import { TableSlide } from "../src/slides/TableSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("TableSlide", () => {
7
- test("renders from golden deck", () => {
8
- const raw = goldenDeckV1.deck.find(s => s.type === "table");
9
- const slide = TableSlide.fromJSON(raw);
10
- const html = slide.render();
11
-
12
- expect(html).toContain("slide table");
13
- expect(html).toContain("<th>A</th>");
14
- expect(html).toContain("<td>1</td>");
15
- });
16
- });
@@ -1,17 +0,0 @@
1
-
2
- // tests/slides.titleAndPara.test.js
3
- import { describe, test, expect } from "vitest";
4
- import { TitleAndParaSlide } from "../src/slides/TitleAndParaSlide.js";
5
- import { goldenDeckV1 } from "taleem-core";
6
-
7
- describe("TitleAndParaSlide", () => {
8
- test("renders from golden deck", () => {
9
- const raw = goldenDeckV1.deck.find(s => s.type === "titleAndPara");
10
- const slide = TitleAndParaSlide.fromJSON(raw);
11
- const html = slide.render();
12
-
13
- expect(html).toContain("titleAndPara");
14
- expect(html).toContain("End");
15
- expect(html).toContain("All 21 slide types validated.");
16
- });
17
- });
@@ -1,17 +0,0 @@
1
-
2
- // tests/slides.titleAndSubtitle.test.js
3
- import { describe, test, expect } from "vitest";
4
- import { TitleAndSubtitleSlide } from "../src/slides/TitleAndSubtitleSlide.js";
5
- import { goldenDeckV1 } from "taleem-core";
6
-
7
- describe("TitleAndSubtitleSlide", () => {
8
- test("renders from golden deck", () => {
9
- const raw = goldenDeckV1.deck.find(s => s.type === "titleAndSubtitle");
10
- const slide = TitleAndSubtitleSlide.fromJSON(raw);
11
- const html = slide.render();
12
-
13
- expect(html).toContain("titleAndSubtitle");
14
- expect(html).toContain("Title & Subtitle");
15
- expect(html).toContain("Schema language demo");
16
- });
17
- });
@@ -1,16 +0,0 @@
1
- // tests/slides.twoColumnText.test.js
2
- import { describe, test, expect } from "vitest";
3
- import { TwoColumnTextSlide } from "../src/slides/TwoColumnTextSlide.js";
4
- import { goldenDeckV1 } from "taleem-core";
5
-
6
- describe("TwoColumnTextSlide", () => {
7
- test("renders from golden deck", () => {
8
- const raw = goldenDeckV1.deck.find(s => s.type === "twoColumnText");
9
- const slide = TwoColumnTextSlide.fromJSON(raw);
10
- const html = slide.render();
11
-
12
- expect(html).toContain("twoColumnText");
13
- expect(html).toContain("Left column");
14
- expect(html).toContain("Right column");
15
- });
16
- });