From 88f8d6b681e739944e8a06658150222c55d1b8c8 Mon Sep 17 00:00:00 2001 From: padreug Date: Wed, 22 Jul 2026 02:53:45 +0200 Subject: [PATCH] feat: slide-deck engine and shared slide layouts Keyboard-navigable full-screen deck (arrow keys, progress bar, hash deep-linking that lands directly on the target slide) plus the reusable Shell / Title / Bullets / Keys / Resources layout components. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/components/slides/BulletsSlide.vue | 33 +++++ src/components/slides/KeysSlide.vue | 40 ++++++ src/components/slides/ResourcesSlide.vue | 43 +++++++ src/components/slides/SlideShell.vue | 31 +++++ src/components/slides/TitleSlide.vue | 32 +++++ src/features/slides/types.ts | 16 +++ src/views/PresentationView.vue | 150 +++++++++++++++++++++++ 7 files changed, 345 insertions(+) create mode 100644 src/components/slides/BulletsSlide.vue create mode 100644 src/components/slides/KeysSlide.vue create mode 100644 src/components/slides/ResourcesSlide.vue create mode 100644 src/components/slides/SlideShell.vue create mode 100644 src/components/slides/TitleSlide.vue create mode 100644 src/features/slides/types.ts create mode 100644 src/views/PresentationView.vue diff --git a/src/components/slides/BulletsSlide.vue b/src/components/slides/BulletsSlide.vue new file mode 100644 index 0000000..2d4a4cb --- /dev/null +++ b/src/components/slides/BulletsSlide.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/slides/KeysSlide.vue b/src/components/slides/KeysSlide.vue new file mode 100644 index 0000000..e08c205 --- /dev/null +++ b/src/components/slides/KeysSlide.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/components/slides/ResourcesSlide.vue b/src/components/slides/ResourcesSlide.vue new file mode 100644 index 0000000..8590a4d --- /dev/null +++ b/src/components/slides/ResourcesSlide.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/slides/SlideShell.vue b/src/components/slides/SlideShell.vue new file mode 100644 index 0000000..84faf57 --- /dev/null +++ b/src/components/slides/SlideShell.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/components/slides/TitleSlide.vue b/src/components/slides/TitleSlide.vue new file mode 100644 index 0000000..20599df --- /dev/null +++ b/src/components/slides/TitleSlide.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/features/slides/types.ts b/src/features/slides/types.ts new file mode 100644 index 0000000..d3ce619 --- /dev/null +++ b/src/features/slides/types.ts @@ -0,0 +1,16 @@ +import type { Component } from 'vue' + +/** + * A slide is a layout component plus the props that feed it. + * The deck renders ``, so any + * component under `src/components/slides/` can be dropped in here — generic + * layouts for text-heavy slides, bespoke components for the diagram slides. + */ +export interface Slide { + /** Stable id used for the URL hash (e.g. #keys) and nav. */ + id: string + /** Short label for the overview / progress tooltip. */ + label: string + component: Component + props?: Record +} diff --git a/src/views/PresentationView.vue b/src/views/PresentationView.vue new file mode 100644 index 0000000..96e29e8 --- /dev/null +++ b/src/views/PresentationView.vue @@ -0,0 +1,150 @@ + + + + +