@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.
- package/CLAUDE.md +537 -0
- package/LICENSE +134 -0
- package/README.md +168 -0
- package/SKILL.md +414 -0
- package/components/AnimatedCounter.vue +35 -0
- package/components/Background.vue +204 -0
- package/components/Callout.vue +135 -0
- package/components/Card.vue +75 -0
- package/components/CardGrid.vue +67 -0
- package/components/CaseStudy.vue +66 -0
- package/components/CodeDiff.vue +229 -0
- package/components/CodeHighlight.vue +337 -0
- package/components/ColorSwatch.vue +114 -0
- package/components/Confetti.vue +292 -0
- package/components/Conversation.vue +405 -0
- package/components/Countdown.vue +476 -0
- package/components/Definition.vue +59 -0
- package/components/DeviceMockup.vue +392 -0
- package/components/Funnel.vue +87 -0
- package/components/Icon.vue +73 -0
- package/components/Iframe.vue +38 -0
- package/components/Image.vue +69 -0
- package/components/ImageCompare.vue +436 -0
- package/components/MatrixGrid.vue +85 -0
- package/components/MermaidChart.vue +299 -0
- package/components/Metric.vue +161 -0
- package/components/PersonCard.vue +165 -0
- package/components/PricingTable.vue +144 -0
- package/components/Progress.vue +100 -0
- package/components/Pyramid.vue +81 -0
- package/components/QRCode.vue +137 -0
- package/components/QuoteBlock.vue +101 -0
- package/components/SpeechBubble.vue +169 -0
- package/components/Stepper.vue +542 -0
- package/components/StyledList.vue +156 -0
- package/components/StyledText.vue +275 -0
- package/components/SwotGrid.vue +99 -0
- package/components/Tags.vue +20 -0
- package/components/Testimonial.vue +243 -0
- package/components/Typewriter.vue +181 -0
- package/components_base/AnimatedCounter.vue +208 -0
- package/components_base/CodeHighlight.vue +364 -0
- package/composables/useColors.ts +101 -0
- package/composables/useShiki.ts +81 -0
- package/example_content.md +371 -0
- package/example_dark.md +10 -0
- package/example_slides/001-cover.md +15 -0
- package/example_slides/002-agenda.md +25 -0
- package/example_slides/003-section-layouts.md +14 -0
- package/example_slides/004-fullscreen-centered.md +7 -0
- package/example_slides/005-fullscreen-align-bottom.md +14 -0
- package/example_slides/006-fullscreen-no-padding.md +14 -0
- package/example_slides/007-fullscreen-bg-image-dark.md +13 -0
- package/example_slides/008-fullscreen-bg-image-light.md +13 -0
- package/example_slides/009-fullscreen-bg-gradient.md +15 -0
- package/example_slides/010-fullscreen-bg-color.md +13 -0
- package/example_slides/011-split-basic.md +17 -0
- package/example_slides/012-split-image-text.md +18 -0
- package/example_slides/013-split-contrast.md +22 -0
- package/example_slides/014-columns-basic.md +13 -0
- package/example_slides/015-columns-two.md +26 -0
- package/example_slides/016-columns-ratios.md +22 -0
- package/example_slides/017-columns-three.md +31 -0
- package/example_slides/018-columns-four.md +22 -0
- package/example_slides/019-columns-alignment.md +23 -0
- package/example_slides/020-columns-styled.md +21 -0
- package/example_slides/021-footnote-prop.md +16 -0
- package/example_slides/022-iframe-fullscreen.md +8 -0
- package/example_slides/023-iframe-split.md +18 -0
- package/example_slides/024-section-components.md +14 -0
- package/example_slides/025-styled-text.md +9 -0
- package/example_slides/026-styled-text.md +15 -0
- package/example_slides/027-text-formatting.md +28 -0
- package/example_slides/028-text-spoiler.md +15 -0
- package/example_slides/029-icon-component.md +47 -0
- package/example_slides/030-metric-component.md +29 -0
- package/example_slides/031-person-card.md +33 -0
- package/example_slides/032-styled-list.md +50 -0
- package/example_slides/033-color-swatch.md +35 -0
- package/example_slides/034-code-highlight.md +9 -0
- package/example_slides/035-iframe-component.md +9 -0
- package/example_slides/036-callout.md +15 -0
- package/example_slides/037-card-grid.md +27 -0
- package/example_slides/038-stepper-variants.md +18 -0
- package/example_slides/039-stepper-clicks.md +49 -0
- package/example_slides/040-stepper-interactive.md +28 -0
- package/example_slides/041-tags-progress.md +21 -0
- package/example_slides/042-speech-bubble.md +30 -0
- package/example_slides/043-conversation.md +13 -0
- package/example_slides/044-device-iphone.md +26 -0
- package/example_slides/045-device-browser.md +7 -0
- package/example_slides/046-qrcode.md +26 -0
- package/example_slides/047-countdown.md +14 -0
- package/example_slides/048-typewriter.md +8 -0
- package/example_slides/049-confetti.md +16 -0
- package/example_slides/050-image-compare.md +13 -0
- package/example_slides/051-code-diff.md +24 -0
- package/example_slides/052-quote-block.md +8 -0
- package/example_slides/053-testimonial.md +26 -0
- package/example_slides/054-testimonial-featured.md +16 -0
- package/example_slides/055-funnel.md +12 -0
- package/example_slides/056-pyramid.md +13 -0
- package/example_slides/057-pricing-table.md +9 -0
- package/example_slides/058-swot-grid.md +12 -0
- package/example_slides/059-matrix-grid.md +12 -0
- package/example_slides/060-case-study.md +11 -0
- package/example_slides/061-definition.md +15 -0
- package/example_slides/062-mermaid-intro.md +34 -0
- package/example_slides/063-mermaid-flowchart.md +19 -0
- package/example_slides/064-mermaid-sequence.md +17 -0
- package/example_slides/065-mermaid-xy-chart.md +16 -0
- package/example_slides/066-mermaid-pie.md +17 -0
- package/example_slides/067-mermaid-class.md +19 -0
- package/example_slides/068-mermaid-state.md +19 -0
- package/example_slides/069-mermaid-er.md +22 -0
- package/example_slides/070-mermaid-gantt.md +24 -0
- package/example_slides/071-mermaid-timeline.md +17 -0
- package/example_slides/072-mermaid-mindmap.md +21 -0
- package/example_slides/073-mermaid-gitgraph.md +20 -0
- package/example_slides/074-mermaid-split.md +30 -0
- package/example_slides/075-mermaid-columns.md +32 -0
- package/example_slides/076-section-addons.md +14 -0
- package/example_slides/077-asciinema.md +27 -0
- package/example_slides/078-fancyarrow.md +31 -0
- package/example_slides/079-fancyarrow-demo.md +23 -0
- package/example_slides/080-section-theme.md +14 -0
- package/example_slides/081-color-architecture.md +22 -0
- package/example_slides/082-semantic-text-colors.md +25 -0
- package/example_slides/083-typography.md +16 -0
- package/example_slides/084-typography-rationale.md +22 -0
- package/example_slides/085-icons.md +24 -0
- package/example_slides/086-tables.md +14 -0
- package/example_slides/087-code-blocks.md +18 -0
- package/example_slides/088-motion-modes.md +35 -0
- package/example_slides/089-slide-transitions.md +31 -0
- package/example_slides/090-v-click-reveals.md +40 -0
- package/example_slides/091-accessibility.md +27 -0
- package/example_slides/092-safe-zone.md +17 -0
- package/example_slides/093-questions.md +8 -0
- package/example_white.md +10 -0
- package/fonts/IBMPlexMono-Medium.woff2 +1449 -0
- package/fonts/IBMPlexMono-Regular.woff2 +1449 -0
- package/fonts/IBMPlexSans-Bold.woff2 +1449 -0
- package/fonts/IBMPlexSans-Medium.woff2 +1449 -0
- package/fonts/IBMPlexSans-Regular.woff2 +1449 -0
- package/fonts/IBMPlexSans-SemiBold.woff2 +1449 -0
- package/fonts/LICENSE.txt +93 -0
- package/layouts/slide.vue +251 -0
- package/package.json +62 -0
- package/public/avatars/alice.png +0 -0
- package/public/avatars/bob.png +0 -0
- package/public/avatars/carol.png +0 -0
- package/scripts/chart-audit.mjs +216 -0
- package/scripts/contrast-audit.mjs +299 -0
- package/scripts/generate-palette.mjs +395 -0
- package/scripts/integrity-audit.mjs +357 -0
- package/scripts/shared/css-utils.mjs +216 -0
- package/scripts/shiki-audit.mjs +300 -0
- package/scripts/typography-audit.mjs +300 -0
- package/setup/main.ts +107 -0
- package/setup/mermaid.ts +237 -0
- package/setup/shiki.ts +40 -0
- package/snippets/demo.ts +26 -0
- package/styles/base.css +1053 -0
- package/styles/colors.css +422 -0
- package/styles/index.css +12 -0
- package/styles/motion.css +486 -0
- 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,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.
|
package/example_white.md
ADDED