fb-slides 0.9.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +96 -5
  3. package/lib/build.mjs +4 -2
  4. package/lib/config.mjs +10 -3
  5. package/lib/dev.mjs +30 -9
  6. package/lib/edit.mjs +3 -1
  7. package/lib/render.mjs +16 -4
  8. package/lib/theme.mjs +53 -5
  9. package/package.json +1 -1
  10. package/runtime/annotate.js +36 -0
  11. package/runtime/assets.js +42 -4
  12. package/runtime/deck.js +48 -3
  13. package/runtime/edit.js +45 -21
  14. package/runtime/snippets.js +43 -0
  15. package/runtime/theme.base.css +320 -14
  16. package/runtime/themes/custom-aurora.css +184 -0
  17. package/runtime/themes/custom-editoriale.css +185 -0
  18. package/runtime/themes.js +250 -0
  19. package/templates/starter/assets/author/JSDAY-26.jpg +0 -0
  20. package/templates/starter/assets/author/devfest-pisa-26.jpg +0 -0
  21. package/templates/starter/assets/author/devfestroma-25.jpg +0 -0
  22. package/templates/starter/assets/author/fb-mountain.jpg +0 -0
  23. package/templates/starter/assets/author/fb-mtb.jpeg +0 -0
  24. package/templates/starter/assets/author/gemini-masterclass-26.jpg +0 -0
  25. package/templates/starter/assets/author/webday-26.jpg +0 -0
  26. package/templates/starter/assets/jshd-sticker.png +0 -0
  27. package/templates/starter/decks/01-intro.md +4 -57
  28. package/templates/starter/decks/02-author.md +64 -0
  29. package/templates/starter/decks/02-demos.md +36 -0
  30. package/templates/starter/slides.config.js +26 -6
  31. package/templates/starter/assets/author/photo-1.svg +0 -11
  32. package/templates/starter/assets/author/photo-2.svg +0 -11
  33. package/templates/starter/assets/screen_2026_08_05_00_24_16.png +0 -0
@@ -4,63 +4,10 @@ title: __TITLE__
4
4
  section: Intro
5
5
  ---
6
6
 
7
- # __TITLE__
7
+ # Signals, _explained_, **bold**
8
8
 
9
- The subtitle goes here.
9
+ ## The subtitle goes here.
10
10
 
11
- ---
12
-
13
- <!-- .slide: class="author-slide" -->
14
-
15
- <div class="author-photo">
16
- <img src="assets/author/photo-1.svg" alt="" />
17
- <img src="assets/author/photo-2.svg" alt="" />
18
- </div>
19
-
20
- <div class="author-bio">
21
- <h1>Your name</h1>
22
- <ul>
23
- <li>What you do</li>
24
- <li>What you are <strong>known for</strong></li>
25
- <li>Where people can find you</li>
26
- </ul>
27
- <p class="author-meta">The stack · you · work · with</p>
28
- <p class="author-meta">❤️ Life outside work — <strong>yoursite.dev</strong></p>
29
- </div>
30
-
31
- Note: thirty seconds, no more. Swap the two placeholders in assets/author/ for your own photos — add as many as you like, they cross-fade in the order they are written.
32
-
33
- ---
34
-
35
- ## A slide
36
-
37
- A slide is whatever sits between two `---` lines.
38
-
39
- - lists of three or more reveal one item at a time
40
- - `?nofrag` shows them all at once
41
- - an `#` h1 on its own makes a section divider
42
-
43
- Note: this is a speaker note — only the speaker view (`S`) shows it.
44
-
45
- ---
46
-
47
- ## Code
48
-
49
- The ranges in the fence are reveal's: one group per click.
50
-
51
- ```js [1|3-5]
52
- const deck = 'decks/*.md';
53
-
54
- for (const slide of deck) {
55
- render(slide);
56
- }
57
- ```
58
-
59
- ---
60
-
61
- ## A diagram
11
+ ### heading 3
62
12
 
63
- ```mermaid
64
- flowchart LR
65
- MD[Markdown] --> DECK[fb-slides] --> R[reveal.js]
66
- ```
13
+ #### heading 4
@@ -0,0 +1,64 @@
1
+ ---
2
+ marp: true
3
+ title: About me
4
+ section: About
5
+ ---
6
+
7
+ <!-- .slide: class="author-slide" -->
8
+
9
+ <div class="author-photo">
10
+ <img src="assets/author/fb-mountain.jpg" alt="Fabio Biondi">
11
+ <img src="assets/author/gemini-masterclass-26.jpg" alt="Gemini masterclass 2026">
12
+ <img src="assets/author/fb-mtb.jpeg" alt="Fabio Biondi in mountain bike gear">
13
+ <img src="assets/author/webday-26.jpg" alt="Speaking at WebDay 2026">
14
+ <img src="assets/author/JSDAY-26.jpg" alt="Speaking at JSDay 2026">
15
+ <img src="assets/author/devfest-pisa-26.jpg" alt="Speaking at DevFest Pisa 2026">
16
+ <img src="assets/author/devfestroma-25.jpg" alt="Speaking at DevFest Roma 2025">
17
+
18
+ </div>
19
+
20
+
21
+
22
+ <div class="author-bio">
23
+ <h1>Fabio Biondi</h1>
24
+ <ul>
25
+ <li>Freelance</li>
26
+ <li>AI Gen & Front-end <strong>Training for Teams</strong></li>
27
+ <li><strong>Google Developer Expert (Angular)</strong></li>
28
+ <li><strong>Speaker</strong> &amp; Content Creator</li>
29
+ <li><strong>Community</strong> Founder</li>
30
+ <li><strong>LearnByDo.ing</strong> creator</li>
31
+ </ul>
32
+
33
+ <p class="author-stack">Main Skills: TypeScript · Angular · React · Next.js · Gemini · Claude</p>
34
+ <p class="author-meta">❤️ MTB · Snowboard · Tennis · Skate — <strong>FabioBiondi.dev</strong></p>
35
+
36
+
37
+ <br />
38
+
39
+ ## _fabiobiondi.dev_
40
+
41
+ </div>
42
+
43
+ Note: thirty seconds, no more. The credentials matter only to say why I spent the last months inside this protocol.
44
+
45
+ ---
46
+
47
+ <!-- demo: https://www.learnbydo.ing/ -->
48
+
49
+ ## Live demo
50
+
51
+
52
+ <iframe src="https://www.learnbydo.ing/" style="width:100%;height:60vh"></iframe>
53
+
54
+ ## New slide
55
+
56
+ ---
57
+
58
+ <!-- demo: https://www.building-ai.app -->
59
+
60
+ ## Live demo
61
+
62
+ <iframe src="https://www.building-ai.app" style="width:100%;height:60vh"></iframe>
63
+
64
+ ## New slide
@@ -4,6 +4,42 @@ title: Demos
4
4
  section: Demos
5
5
  ---
6
6
 
7
+
8
+ ## A slide
9
+
10
+ A slide is whatever sits between two `---` lines.
11
+
12
+ - lists of three or more reveal one item at a time
13
+ - `?nofrag` shows them all at once
14
+ - an `#` h1 on its own makes a section divider
15
+
16
+ Note: this is a speaker note — only the speaker view (`S`) shows it.
17
+
18
+ ---
19
+
20
+ ## Code
21
+
22
+ The ranges in the fence are reveal's: one group per click.
23
+
24
+ ```js [1|3-5]
25
+ const deck = 'decks/*.md';
26
+
27
+ for (const slide of deck) {
28
+ render(slide);
29
+ }
30
+ ```
31
+
32
+ ---
33
+
34
+ ## A diagram
35
+
36
+ ```mermaid
37
+ flowchart LR
38
+ MD[Markdown] --> DECK[fb-slides] --> R[reveal.js]
39
+ ```
40
+
41
+ ---
42
+
7
43
  <!-- demo: counter -->
8
44
 
9
45
  ## A page, running on the slide
@@ -9,11 +9,26 @@ export default {
9
9
  // Folder behind a bare `<!-- demo: counter -->` marker in the Markdown.
10
10
  demos: 'demo',
11
11
 
12
- // One of reveal.js's own themes, served from this project rather than from a
13
- // CDN: beige, black, black-contrast, blood, dracula, league, moon, night,
14
- // serif, simple, sky, solarized, white, white-contrast. Uncomment to wear one
15
- // — the deck's chrome follows it. Leave it out for this package's own look.
12
+ // ── Theme ─────────────────────────────────────────────────────────────────
13
+ // With both keys below commented out the deck wears this package's base look.
14
+ // To change it, uncomment ONE of the two — not both: layered together you get
15
+ // neither look, just whichever rule comes last. Run `fb-slides dev` and use
16
+ // the theme button in the toolbar to preview every option live; the popover
17
+ // prints the exact line to paste here.
18
+ //
19
+ // 1. A pack — one of this package's own named themes, a whole skin over the
20
+ // base look. Available packs:
21
+ // custom-aurora, custom-editoriale
22
+ // themePack: 'custom-aurora',
23
+ //
24
+ // 2. A reveal.js theme, served from this project rather than from a CDN — the
25
+ // deck's chrome follows it. Available themes:
26
+ // beige, black, black-contrast, blood, dracula, league, moon, night,
27
+ // serif, simple, sky, solarized, white, white-contrast
16
28
  // revealTheme: 'dracula',
29
+ //
30
+ // Either way, `theme.css` next to this file is still loaded last, so your own
31
+ // overrides sit on top of whatever you picked.
17
32
 
18
33
  // Six of those themes ask fonts.googleapis.com for their typefaces. Those
19
34
  // requests are stripped out, so a deck never depends on the room's wifi; the
@@ -50,8 +65,13 @@ export default {
50
65
  // a path on disk.
51
66
  editor: true,
52
67
 
53
- // The corner signature. Uncomment to show it.
54
- // signature: { name: 'fabiobiondi.dev', url: 'https://www.fabiobiondi.dev', logo: 'assets/logo.png' },
68
+ // The corner signature, shown on every slide: name and logo, linking to url.
69
+ // Swap the values for your own, or delete the whole key to have no footer.
70
+ signature: {
71
+ name: 'www.fabiobiondi.dev',
72
+ url: 'https://www.fabiobiondi.dev',
73
+ logo: 'assets/jshd-sticker.png',
74
+ },
55
75
 
56
76
  // Passed straight to Reveal.initialize().
57
77
  // reveal: { transition: 'fade', slideNumber: false },
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 800" width="600" height="800">
2
- <defs>
3
- <linearGradient id="g1" x1="0" y1="0" x2="0.6" y2="1">
4
- <stop offset="0" stop-color="#1f2937" />
5
- <stop offset="1" stop-color="#4b5563" />
6
- </linearGradient>
7
- </defs>
8
- <rect width="600" height="800" fill="url(#g1)" />
9
- <text x="300" y="400" text-anchor="middle" font-family="ui-sans-serif, system-ui, sans-serif"
10
- font-size="34" fill="#e8ebf0" fill-opacity="0.55">your photo 1</text>
11
- </svg>
@@ -1,11 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 800" width="600" height="800">
2
- <defs>
3
- <linearGradient id="g2" x1="0" y1="0" x2="0.6" y2="1">
4
- <stop offset="0" stop-color="#1e3a5f" />
5
- <stop offset="1" stop-color="#2f6f8f" />
6
- </linearGradient>
7
- </defs>
8
- <rect width="600" height="800" fill="url(#g2)" />
9
- <text x="300" y="400" text-anchor="middle" font-family="ui-sans-serif, system-ui, sans-serif"
10
- font-size="34" fill="#e8ebf0" fill-opacity="0.55">your photo 2</text>
11
- </svg>