@troshab/slidev-theme-troshab 0.1.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 (168) hide show
  1. package/CLAUDE.md +537 -0
  2. package/LICENSE +134 -0
  3. package/README.md +168 -0
  4. package/SKILL.md +414 -0
  5. package/components/AnimatedCounter.vue +35 -0
  6. package/components/Background.vue +204 -0
  7. package/components/Callout.vue +135 -0
  8. package/components/Card.vue +75 -0
  9. package/components/CardGrid.vue +67 -0
  10. package/components/CaseStudy.vue +66 -0
  11. package/components/CodeDiff.vue +229 -0
  12. package/components/CodeHighlight.vue +337 -0
  13. package/components/ColorSwatch.vue +114 -0
  14. package/components/Confetti.vue +292 -0
  15. package/components/Conversation.vue +405 -0
  16. package/components/Countdown.vue +476 -0
  17. package/components/Definition.vue +59 -0
  18. package/components/DeviceMockup.vue +392 -0
  19. package/components/Funnel.vue +87 -0
  20. package/components/Icon.vue +73 -0
  21. package/components/Iframe.vue +38 -0
  22. package/components/Image.vue +69 -0
  23. package/components/ImageCompare.vue +436 -0
  24. package/components/MatrixGrid.vue +85 -0
  25. package/components/MermaidChart.vue +299 -0
  26. package/components/Metric.vue +161 -0
  27. package/components/PersonCard.vue +165 -0
  28. package/components/PricingTable.vue +144 -0
  29. package/components/Progress.vue +100 -0
  30. package/components/Pyramid.vue +81 -0
  31. package/components/QRCode.vue +137 -0
  32. package/components/QuoteBlock.vue +101 -0
  33. package/components/SpeechBubble.vue +169 -0
  34. package/components/Stepper.vue +542 -0
  35. package/components/StyledList.vue +156 -0
  36. package/components/StyledText.vue +275 -0
  37. package/components/SwotGrid.vue +99 -0
  38. package/components/Tags.vue +20 -0
  39. package/components/Testimonial.vue +243 -0
  40. package/components/Typewriter.vue +181 -0
  41. package/components_base/AnimatedCounter.vue +208 -0
  42. package/components_base/CodeHighlight.vue +364 -0
  43. package/composables/useColors.ts +101 -0
  44. package/composables/useShiki.ts +81 -0
  45. package/example_content.md +371 -0
  46. package/example_dark.md +10 -0
  47. package/example_slides/001-cover.md +15 -0
  48. package/example_slides/002-agenda.md +25 -0
  49. package/example_slides/003-section-layouts.md +14 -0
  50. package/example_slides/004-fullscreen-centered.md +7 -0
  51. package/example_slides/005-fullscreen-align-bottom.md +14 -0
  52. package/example_slides/006-fullscreen-no-padding.md +14 -0
  53. package/example_slides/007-fullscreen-bg-image-dark.md +13 -0
  54. package/example_slides/008-fullscreen-bg-image-light.md +13 -0
  55. package/example_slides/009-fullscreen-bg-gradient.md +15 -0
  56. package/example_slides/010-fullscreen-bg-color.md +13 -0
  57. package/example_slides/011-split-basic.md +17 -0
  58. package/example_slides/012-split-image-text.md +18 -0
  59. package/example_slides/013-split-contrast.md +22 -0
  60. package/example_slides/014-columns-basic.md +13 -0
  61. package/example_slides/015-columns-two.md +26 -0
  62. package/example_slides/016-columns-ratios.md +22 -0
  63. package/example_slides/017-columns-three.md +31 -0
  64. package/example_slides/018-columns-four.md +22 -0
  65. package/example_slides/019-columns-alignment.md +23 -0
  66. package/example_slides/020-columns-styled.md +21 -0
  67. package/example_slides/021-footnote-prop.md +16 -0
  68. package/example_slides/022-iframe-fullscreen.md +8 -0
  69. package/example_slides/023-iframe-split.md +18 -0
  70. package/example_slides/024-section-components.md +14 -0
  71. package/example_slides/025-styled-text.md +9 -0
  72. package/example_slides/026-styled-text.md +15 -0
  73. package/example_slides/027-text-formatting.md +28 -0
  74. package/example_slides/028-text-spoiler.md +15 -0
  75. package/example_slides/029-icon-component.md +47 -0
  76. package/example_slides/030-metric-component.md +29 -0
  77. package/example_slides/031-person-card.md +33 -0
  78. package/example_slides/032-styled-list.md +50 -0
  79. package/example_slides/033-color-swatch.md +35 -0
  80. package/example_slides/034-code-highlight.md +9 -0
  81. package/example_slides/035-iframe-component.md +9 -0
  82. package/example_slides/036-callout.md +15 -0
  83. package/example_slides/037-card-grid.md +27 -0
  84. package/example_slides/038-stepper-variants.md +18 -0
  85. package/example_slides/039-stepper-clicks.md +49 -0
  86. package/example_slides/040-stepper-interactive.md +28 -0
  87. package/example_slides/041-tags-progress.md +21 -0
  88. package/example_slides/042-speech-bubble.md +30 -0
  89. package/example_slides/043-conversation.md +13 -0
  90. package/example_slides/044-device-iphone.md +26 -0
  91. package/example_slides/045-device-browser.md +7 -0
  92. package/example_slides/046-qrcode.md +26 -0
  93. package/example_slides/047-countdown.md +14 -0
  94. package/example_slides/048-typewriter.md +8 -0
  95. package/example_slides/049-confetti.md +16 -0
  96. package/example_slides/050-image-compare.md +13 -0
  97. package/example_slides/051-code-diff.md +24 -0
  98. package/example_slides/052-quote-block.md +8 -0
  99. package/example_slides/053-testimonial.md +26 -0
  100. package/example_slides/054-testimonial-featured.md +16 -0
  101. package/example_slides/055-funnel.md +12 -0
  102. package/example_slides/056-pyramid.md +13 -0
  103. package/example_slides/057-pricing-table.md +9 -0
  104. package/example_slides/058-swot-grid.md +12 -0
  105. package/example_slides/059-matrix-grid.md +12 -0
  106. package/example_slides/060-case-study.md +11 -0
  107. package/example_slides/061-definition.md +15 -0
  108. package/example_slides/062-mermaid-intro.md +34 -0
  109. package/example_slides/063-mermaid-flowchart.md +19 -0
  110. package/example_slides/064-mermaid-sequence.md +17 -0
  111. package/example_slides/065-mermaid-xy-chart.md +16 -0
  112. package/example_slides/066-mermaid-pie.md +17 -0
  113. package/example_slides/067-mermaid-class.md +19 -0
  114. package/example_slides/068-mermaid-state.md +19 -0
  115. package/example_slides/069-mermaid-er.md +22 -0
  116. package/example_slides/070-mermaid-gantt.md +24 -0
  117. package/example_slides/071-mermaid-timeline.md +17 -0
  118. package/example_slides/072-mermaid-mindmap.md +21 -0
  119. package/example_slides/073-mermaid-gitgraph.md +20 -0
  120. package/example_slides/074-mermaid-split.md +30 -0
  121. package/example_slides/075-mermaid-columns.md +32 -0
  122. package/example_slides/076-section-addons.md +14 -0
  123. package/example_slides/077-asciinema.md +27 -0
  124. package/example_slides/078-fancyarrow.md +31 -0
  125. package/example_slides/079-fancyarrow-demo.md +23 -0
  126. package/example_slides/080-section-theme.md +14 -0
  127. package/example_slides/081-color-architecture.md +22 -0
  128. package/example_slides/082-semantic-text-colors.md +25 -0
  129. package/example_slides/083-typography.md +16 -0
  130. package/example_slides/084-typography-rationale.md +22 -0
  131. package/example_slides/085-icons.md +24 -0
  132. package/example_slides/086-tables.md +14 -0
  133. package/example_slides/087-code-blocks.md +18 -0
  134. package/example_slides/088-motion-modes.md +35 -0
  135. package/example_slides/089-slide-transitions.md +31 -0
  136. package/example_slides/090-v-click-reveals.md +40 -0
  137. package/example_slides/091-accessibility.md +27 -0
  138. package/example_slides/092-safe-zone.md +17 -0
  139. package/example_slides/093-questions.md +8 -0
  140. package/example_white.md +10 -0
  141. package/fonts/IBMPlexMono-Medium.woff2 +1449 -0
  142. package/fonts/IBMPlexMono-Regular.woff2 +1449 -0
  143. package/fonts/IBMPlexSans-Bold.woff2 +1449 -0
  144. package/fonts/IBMPlexSans-Medium.woff2 +1449 -0
  145. package/fonts/IBMPlexSans-Regular.woff2 +1449 -0
  146. package/fonts/IBMPlexSans-SemiBold.woff2 +1449 -0
  147. package/fonts/LICENSE.txt +93 -0
  148. package/layouts/slide.vue +251 -0
  149. package/package.json +62 -0
  150. package/public/avatars/alice.png +0 -0
  151. package/public/avatars/bob.png +0 -0
  152. package/public/avatars/carol.png +0 -0
  153. package/scripts/chart-audit.mjs +216 -0
  154. package/scripts/contrast-audit.mjs +299 -0
  155. package/scripts/generate-palette.mjs +395 -0
  156. package/scripts/integrity-audit.mjs +357 -0
  157. package/scripts/shared/css-utils.mjs +216 -0
  158. package/scripts/shiki-audit.mjs +300 -0
  159. package/scripts/typography-audit.mjs +300 -0
  160. package/setup/main.ts +107 -0
  161. package/setup/mermaid.ts +237 -0
  162. package/setup/shiki.ts +40 -0
  163. package/snippets/demo.ts +26 -0
  164. package/styles/base.css +1053 -0
  165. package/styles/colors.css +422 -0
  166. package/styles/index.css +12 -0
  167. package/styles/motion.css +486 -0
  168. package/uno.config.ts +67 -0
@@ -0,0 +1,23 @@
1
+ ---
2
+ layout: slide
3
+ ---
4
+
5
+ ## <span v-mark.underline.orange="0">FancyArrow</span> Demo
6
+
7
+ <div style="display: flex; justify-content: space-between; align-items: center; margin-top: 4rem; padding: 0 4rem;">
8
+ <div data-id="idea" style="padding: 1.5rem 2.5rem; border: 2px solid var(--color-primary); border-radius: 12px; text-align: center;">
9
+ <Icon name="ph-lightbulb-fill" color="warning" size="lg" />
10
+ <StyledText tag="p" bold><span v-mark.highlight.yellow="0" style="color: var(--color-drac-bg-900)">Idea</span></StyledText>
11
+ </div>
12
+ <div data-id="code" style="padding: 1.5rem 2.5rem; border: 2px solid var(--color-success); border-radius: 12px; text-align: center;">
13
+ <Icon name="ph-code-fill" color="success" size="lg" />
14
+ <StyledText tag="p" bold><span v-mark.highlight.green="0" style="color: var(--color-drac-bg-900)">Code</span></StyledText>
15
+ </div>
16
+ <div data-id="ship" style="padding: 1.5rem 2.5rem; border: 2px solid var(--color-info); border-radius: 12px; text-align: center;">
17
+ <Icon name="ph-rocket-launch-fill" color="info" size="lg" />
18
+ <StyledText tag="p" bold><span v-mark.highlight.cyan="0" style="color: var(--color-drac-bg-900)">Ship</span></StyledText>
19
+ </div>
20
+ </div>
21
+
22
+ <FancyArrow from="[data-id=idea]@right" to="[data-id=code]@left" color="var(--color-primary)" :width="2" arc="0.3" :roughness="2" :duration="500" />
23
+ <FancyArrow from="[data-id=code]@right" to="[data-id=ship]@left" color="var(--color-success)" :width="2" arc="0.3" :roughness="2" :duration="500" :delay="500" />
@@ -0,0 +1,14 @@
1
+ ---
2
+ layout: slide
3
+ mode: fullscreen
4
+ transition: fade
5
+ ---
6
+
7
+ ::bg::
8
+ <Background :gradient="'subtle'" />
9
+
10
+ ::default::
11
+
12
+ # Theme Features
13
+
14
+ Colors, typography, motion, and accessibility
@@ -0,0 +1,22 @@
1
+ ---
2
+ layout: slide
3
+ cols: 2
4
+ ---
5
+
6
+ ## Color Architecture
7
+
8
+ ::col1::
9
+
10
+ ### 3-Layer System
11
+
12
+ - **Palette** - 11 families x 11 OKLCH shades
13
+ - **Semantic** - meaning (`--color-primary`)
14
+ - **Usage** - components use semantic only
15
+
16
+ ::col2::
17
+
18
+ ### Dracula / Alucard
19
+
20
+ **Dark:** drac-bg-900, drac-fg-50, cyan-300 primary
21
+
22
+ **Light:** alu-bg-50, drac-fg-900, purple-700 primary
@@ -0,0 +1,25 @@
1
+ ---
2
+ layout: slide
3
+ cols: 2
4
+ ---
5
+
6
+ ## Semantic Text Colors
7
+
8
+ ::col1::
9
+
10
+ <StyledText color="primary">Primary</StyledText>
11
+ <StyledText color="success">Success</StyledText>
12
+ <StyledText color="warning">Warning</StyledText>
13
+ <StyledText color="danger">Danger</StyledText>
14
+ <StyledText color="info">Info</StyledText>
15
+ <StyledText color="accent">Accent</StyledText>
16
+
17
+ ::col2::
18
+
19
+ ### Hierarchy
20
+
21
+ Primary text - highest contrast
22
+
23
+ <StyledText color="secondary">Secondary - supporting</StyledText>
24
+
25
+ <StyledText color="tertiary" size="small">Tertiary - captions</StyledText>
@@ -0,0 +1,16 @@
1
+ ---
2
+ layout: slide
3
+ ---
4
+
5
+ # Typography
6
+
7
+ ## Heading 2 (43px)
8
+
9
+ **Bold** for emphasis. *Italic* for titles/terms only.
10
+
11
+ Body text 24px, `code` 18px (IBM Plex Mono).
12
+
13
+ - Line height: 1.35 / Letter spacing: 0.02em
14
+ - BDA-compliant word spacing: 0.07em (3.5x ratio)
15
+
16
+ <StyledText size="small" color="tertiary">Sizes: h1 (57px), h2 (43px), base (24px), small (18px)</StyledText>
@@ -0,0 +1,22 @@
1
+ ---
2
+ layout: slide
3
+ cols: 2
4
+ ---
5
+
6
+ # Why IBM Plex?
7
+
8
+ ::col1::
9
+
10
+ ### Readability
11
+
12
+ - **Open-source** Sans + Mono family
13
+ - **Large x-height** for small sizes
14
+ - **Clear letterforms**, projector-tested
15
+
16
+ ::col2::
17
+
18
+ ### Dyslexia-Friendly
19
+
20
+ - Distinct b/d/p/q shapes
21
+ - Weight 400+ (no thin/light)
22
+ - BDA spacing, left-aligned only
@@ -0,0 +1,24 @@
1
+ ---
2
+ layout: slide
3
+ cols: 2
4
+ ---
5
+
6
+ # Phosphor Icons
7
+
8
+ ::col1::
9
+
10
+ ### Sizes
11
+
12
+ <Icon name="ph-star" size="sm" /> sm <Icon name="ph-star" size="md" /> md <Icon name="ph-star" size="lg" /> lg <Icon name="ph-star" size="xl" /> xl
13
+
14
+ ### Weights
15
+
16
+ <Icon name="ph-heart" size="lg" /> regular <Icon name="ph-heart-bold" size="lg" /> bold <Icon name="ph-heart-fill" size="lg" /> fill
17
+
18
+ ::col2::
19
+
20
+ ### Colors
21
+
22
+ <Icon name="ph-check-circle-fill" size="lg" color="success" /> <Icon name="ph-warning-fill" size="lg" color="warning" /> <Icon name="ph-x-circle-fill" size="lg" color="danger" /> <Icon name="ph-info-fill" size="lg" color="info" />
23
+
24
+ `<Icon name="ph-github-logo" />`
@@ -0,0 +1,14 @@
1
+ ---
2
+ layout: slide
3
+ ---
4
+
5
+ # Tables
6
+
7
+ | Framework | Bundle | Performance | Learning | Ecosystem |
8
+ |-----------|--------|-------------|----------|-----------|
9
+ | React | ~42kb | 4/5 | Medium | Huge |
10
+ | Vue | ~33kb | 4/5 | Easy | Large |
11
+ | Svelte | ~1.6kb | 5/5 | Easy | Growing |
12
+ | Solid | ~7kb | 5/5 | Medium | Growing |
13
+
14
+ Markdown tables are auto-styled with theme colors, borders, and hover effects.
@@ -0,0 +1,18 @@
1
+ ---
2
+ layout: slide
3
+ ---
4
+
5
+ ## Code Blocks
6
+
7
+ Shiki highlighting with Dracula/Alucard tokens
8
+
9
+ ```typescript {1,3-4}
10
+ interface User {
11
+ id: string;
12
+ role: 'admin' | 'user';
13
+ }
14
+ async function fetchUsers(): Promise<User[]> {
15
+ const res = await fetch('/api/users');
16
+ return res.json();
17
+ }
18
+ ```
@@ -0,0 +1,35 @@
1
+ ---
2
+ layout: slide
3
+ cols: 3
4
+ gap: '4'
5
+ ---
6
+
7
+ # Motion Modes
8
+
9
+ ::col1::
10
+
11
+ <Card title="Calm (default)" icon="ph-wave-sine">
12
+
13
+ 240ms, 20px shift. Standard presentations.
14
+
15
+ </Card>
16
+
17
+ ::col2::
18
+
19
+ <Card title="Crisp" icon="ph-lightning">
20
+
21
+ 150ms, 12px shift. Technical demos.
22
+
23
+ </Card>
24
+
25
+ ::col3::
26
+
27
+ <Card title="Expressive" icon="ph-sparkle">
28
+
29
+ 400ms, 28px shift. Creative storytelling.
30
+
31
+ </Card>
32
+
33
+ ::footer::
34
+
35
+ Apply via frontmatter: `class: motion-crisp` or `class: motion-expressive`
@@ -0,0 +1,31 @@
1
+ ---
2
+ layout: slide
3
+ cols: 2
4
+ ---
5
+
6
+ # Slide Transitions
7
+
8
+ ::col1::
9
+
10
+ ### Available
11
+
12
+ - `slide-left` - page turn (default)
13
+ - `slide-right` - reverse page turn
14
+ - `slide-up` - vertical
15
+ - `slide-down` - vertical reverse
16
+ - `fade` - crossfade
17
+ - `none` - instant
18
+
19
+ ::col2::
20
+
21
+ ### Usage
22
+
23
+ ```yaml
24
+ # Global (first slide)
25
+ transition: slide-left
26
+
27
+ # Per-slide override
28
+ transition: fade
29
+ ```
30
+
31
+ Set `transition: fade` on section headers for smooth breaks between sections.
@@ -0,0 +1,40 @@
1
+ ---
2
+ layout: slide
3
+ cols: 2
4
+ gap: '4'
5
+ class: reveal-fade
6
+ ---
7
+
8
+ # v-click Reveal Styles
9
+
10
+ ::col1::
11
+
12
+ <v-click>
13
+
14
+ **Default** - Fade + subtle rise
15
+
16
+ </v-click>
17
+
18
+ <v-click>
19
+
20
+ **reveal-fade** - Opacity only (this slide)
21
+
22
+ </v-click>
23
+
24
+ ::col2::
25
+
26
+ <v-click>
27
+
28
+ **reveal-slide** - Slide from right
29
+
30
+ </v-click>
31
+
32
+ <v-click>
33
+
34
+ **reveal-pop** - Scale up
35
+
36
+ </v-click>
37
+
38
+ ::footer::
39
+
40
+ Apply via frontmatter: `class: reveal-fade` / `reveal-slide` / `reveal-pop`
@@ -0,0 +1,27 @@
1
+ ---
2
+ layout: slide
3
+ cols: 2
4
+ ---
5
+
6
+ ## Accessibility
7
+
8
+ ::col1::
9
+
10
+ ### WCAG Compliance
11
+
12
+ - **AA contrast** (4.5:1+) all text
13
+ - **AAA target** (7:1) primary text
14
+ - **Non-text** (3:1+) borders, UI
15
+ - **Focus visible** - 3px outline
16
+ - **Reduced motion** (planned)
17
+
18
+ ::col2::
19
+
20
+ ### BDA-Friendly
21
+
22
+ - IBM Plex: distinct letterforms
23
+ - No thin/light weights
24
+ - Left-aligned, never justified
25
+ - Word spacing 0.08em
26
+ - Letter spacing 0.02em
27
+ - Off-white/off-black backgrounds
@@ -0,0 +1,17 @@
1
+ ---
2
+ layout: slide
3
+ mode: fullscreen
4
+ ---
5
+
6
+ ::bg::
7
+ <Background color="primary" />
8
+
9
+ ::default::
10
+
11
+ # Safe Zone
12
+
13
+ 5% padding on all sides protects content from projector/TV overscan.
14
+
15
+ `--safe-inset-x` and `--safe-inset-y` CSS variables.
16
+
17
+ Use `padding: false` in fullscreen mode for true edge-to-edge content.
@@ -0,0 +1,8 @@
1
+ ---
2
+ layout: slide
3
+ mode: fullscreen
4
+ transition: fade
5
+ ---
6
+
7
+ <StyledText tag="h1" align="center">Questions?</StyledText>
8
+ <StyledText align="center" color="secondary">github.com/troshab/slidev-theme-troshab</StyledText>
@@ -0,0 +1,10 @@
1
+ ---
2
+ theme: ./
3
+ title: slidev-theme-troshab Demo (Light)
4
+ info: |
5
+ ## slidev-theme-troshab
6
+ Complete theme showcase — all layouts, components, and features
7
+ colorSchema: light
8
+ transition: slide-left
9
+ src: ./example_content.md
10
+ ---