@alphacifer/slidev-academic-theme 0.0.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/README.md +70 -0
- package/layouts/cover.vue +23 -0
- package/layouts/default.vue +5 -0
- package/layouts/end.vue +11 -0
- package/layouts/section.vue +11 -0
- package/package.json +56 -0
- package/slide-bottom.vue +20 -0
- package/style.css +116 -0
package/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Alpha Academic Theme
|
|
2
|
+
|
|
3
|
+
A light-only Slidev theme for lectures, research presentations, technical
|
|
4
|
+
reports, and thesis defenses.
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
pnpm add -D @alphacifer/slidev-theme-alpha-academic
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```yaml
|
|
15
|
+
---
|
|
16
|
+
theme: '@alphacifer/slidev-theme-alpha-academic'
|
|
17
|
+
---
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Combine it with Alpha's reusable Slidev addon when needed:
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
---
|
|
24
|
+
theme: '@alphacifer/slidev-theme-alpha-academic'
|
|
25
|
+
addons:
|
|
26
|
+
- '@alphacifer/slidev-addon-theme'
|
|
27
|
+
---
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Layouts
|
|
31
|
+
|
|
32
|
+
- `cover`: title slide with a restrained academic accent.
|
|
33
|
+
- `default`: standard content slide.
|
|
34
|
+
- `section`: centered section divider.
|
|
35
|
+
- `end`: closing slide.
|
|
36
|
+
|
|
37
|
+
## Design tokens
|
|
38
|
+
|
|
39
|
+
Override the CSS custom properties in a deck-level `style.css` to customize the
|
|
40
|
+
theme without replacing its layouts:
|
|
41
|
+
|
|
42
|
+
```css
|
|
43
|
+
:root {
|
|
44
|
+
/* Primary Text / Heading Color */
|
|
45
|
+
--alpha-academic-primary: #0f172a;
|
|
46
|
+
/* Content Background Color */
|
|
47
|
+
--alpha-academic-bg: #f8fafc;
|
|
48
|
+
/* Accent Highlight (e.g. Cover / Badge) */
|
|
49
|
+
--alpha-academic-accent: #0ea5e9;
|
|
50
|
+
/* Accent Foreground (e.g. highlighted terms / marks) */
|
|
51
|
+
--alpha-academic-accent-foreground: #0284c7;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.dark {
|
|
55
|
+
--alpha-academic-accent: #10b981;
|
|
56
|
+
--alpha-academic-accent-foreground: #34d399;
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Preview
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pnpm --filter @alphacifer/slidev-theme-alpha-academic dev
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Build the preview without opening a browser:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pnpm --filter @alphacifer/slidev-theme-alpha-academic preview:build
|
|
70
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { handleBackground } from '@slidev/client';
|
|
3
|
+
import { computed } from 'vue';
|
|
4
|
+
|
|
5
|
+
const { background } = defineProps({
|
|
6
|
+
background: {
|
|
7
|
+
default: '',
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const style = computed(() => handleBackground(background));
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<template>
|
|
15
|
+
<main
|
|
16
|
+
class="slidev-layout alpha-academic-cover"
|
|
17
|
+
:style="style"
|
|
18
|
+
>
|
|
19
|
+
<div class="alpha-academic-cover__content">
|
|
20
|
+
<slot />
|
|
21
|
+
</div>
|
|
22
|
+
</main>
|
|
23
|
+
</template>
|
package/layouts/end.vue
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alphacifer/slidev-academic-theme",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Alpha's light-only academic theme for Slidev",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"slidev-theme",
|
|
8
|
+
"slidev",
|
|
9
|
+
"academic"
|
|
10
|
+
],
|
|
11
|
+
"files": [
|
|
12
|
+
"layouts",
|
|
13
|
+
"setup",
|
|
14
|
+
"slide-bottom.vue",
|
|
15
|
+
"style.css",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public",
|
|
20
|
+
"registry": "https://registry.npmjs.org/"
|
|
21
|
+
},
|
|
22
|
+
"author": "Alpha",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "git+https://github.com/zgid123/alpha-dx.git",
|
|
26
|
+
"directory": "packages/slidev/academic-theme"
|
|
27
|
+
},
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"slidev": {
|
|
30
|
+
"colorSchema": "light",
|
|
31
|
+
"defaults": {
|
|
32
|
+
"aspectRatio": "16/9",
|
|
33
|
+
"canvasWidth": 980,
|
|
34
|
+
"transition": "slide-left",
|
|
35
|
+
"fonts": {
|
|
36
|
+
"provider": "none",
|
|
37
|
+
"sans": "Inter",
|
|
38
|
+
"serif": "Georgia",
|
|
39
|
+
"mono": "JetBrains Mono"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"@slidev/client": ">=52.18.0",
|
|
45
|
+
"vue": "^3.5.40"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@slidev/client": "52.19.0",
|
|
49
|
+
"@slidev/cli": "52.19.0",
|
|
50
|
+
"vue": "3.5.40"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"dev": "slidev slides.md --open",
|
|
54
|
+
"preview:build": "slidev build slides.md"
|
|
55
|
+
}
|
|
56
|
+
}
|
package/slide-bottom.vue
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useSlideContext } from '@slidev/client';
|
|
3
|
+
import { computed } from 'vue';
|
|
4
|
+
|
|
5
|
+
const { $frontmatter } = useSlideContext();
|
|
6
|
+
|
|
7
|
+
const isVisible = computed(() => !$frontmatter.hidePagy);
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<div
|
|
12
|
+
v-if="isVisible"
|
|
13
|
+
aria-label="Slide pagination"
|
|
14
|
+
class="alpha-academic-pagy"
|
|
15
|
+
>
|
|
16
|
+
<SlideCurrentNo />
|
|
17
|
+
<span aria-hidden="true">/</span>
|
|
18
|
+
<SlidesTotal />
|
|
19
|
+
</div>
|
|
20
|
+
</template>
|
package/style.css
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
/* --alpha-academic-primary: #0369a1; */
|
|
3
|
+
--alpha-academic-primary: #0f172a;
|
|
4
|
+
--alpha-academic-bg: #f8fafc;
|
|
5
|
+
--alpha-academic-accent: #0ea5e9;
|
|
6
|
+
--alpha-academic-accent-foreground: #0284c7;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.dark,
|
|
10
|
+
html.dark {
|
|
11
|
+
--alpha-academic-accent: #10b981;
|
|
12
|
+
--alpha-academic-accent-foreground: #34d399;
|
|
13
|
+
--slidev-code-background: #f5f5f5;
|
|
14
|
+
--slidev-code-foreground: #1b1b1b;
|
|
15
|
+
--slidev-code-tab-divider: #e5e5e5;
|
|
16
|
+
--slidev-code-tab-text-color: #67676c;
|
|
17
|
+
--slidev-code-tab-active-text-color: #3c3c43;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Force Shiki syntax tokens to always use light-mode colors */
|
|
21
|
+
html.dark .shiki {
|
|
22
|
+
--twoslash-popup-bg: var(--shiki-light-bg, inherit);
|
|
23
|
+
color: var(--shiki-light, inherit);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
html.dark pre.shiki span {
|
|
27
|
+
color: var(--shiki-light, inherit);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.slidev-page {
|
|
31
|
+
background-color: var(--alpha-academic-bg);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.alpha-bg-center {
|
|
35
|
+
/* Neutralise the dark gradient overlay injected by handleBackground(bg, true).
|
|
36
|
+
screen(black, X) = X, so the background image renders at its original brightness. */
|
|
37
|
+
background-blend-mode: screen;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.slidev-layout {
|
|
41
|
+
height: 100%;
|
|
42
|
+
padding: 2.5rem 3rem;
|
|
43
|
+
color: var(--alpha-academic-primary);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.slidev-layout mark {
|
|
47
|
+
font-weight: bold;
|
|
48
|
+
color: var(--alpha-academic-accent-foreground);
|
|
49
|
+
background-color: transparent;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.slidev-layout p {
|
|
53
|
+
font-size: 1.25rem;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.alpha-academic-cover {
|
|
57
|
+
display: grid;
|
|
58
|
+
place-items: center;
|
|
59
|
+
width: 100%;
|
|
60
|
+
height: 100%;
|
|
61
|
+
text-align: center;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.alpha-academic-cover__content {
|
|
65
|
+
width: 100%;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.slidev-layout h1 {
|
|
69
|
+
margin-bottom: 0.5rem;
|
|
70
|
+
font-size: 2.5rem;
|
|
71
|
+
font-weight: bold;
|
|
72
|
+
color: var(--alpha-academic-primary);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.alpha-academic-cover.slidev-layout h1 {
|
|
76
|
+
margin: 0;
|
|
77
|
+
font-size: 3.75rem;
|
|
78
|
+
font-weight: bold;
|
|
79
|
+
color: var(--alpha-academic-accent);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.alpha-speaker {
|
|
83
|
+
font-size: 20px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.alpha-academic-pagy {
|
|
87
|
+
position: absolute;
|
|
88
|
+
right: 3rem;
|
|
89
|
+
bottom: 2.5rem;
|
|
90
|
+
z-index: 50;
|
|
91
|
+
display: flex;
|
|
92
|
+
gap: 0.4rem;
|
|
93
|
+
font-size: 1.2rem;
|
|
94
|
+
font-weight: bold;
|
|
95
|
+
font-variant-numeric: tabular-nums;
|
|
96
|
+
color: var(--alpha-academic-primary);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.slidev-page:has(.alpha-academic-cover) .alpha-academic-pagy,
|
|
100
|
+
.slidev-page:has(.alpha-arc-toc) .alpha-academic-pagy,
|
|
101
|
+
.slidev-page:has(.alpha-bg-center) .alpha-academic-pagy {
|
|
102
|
+
display: none;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.alpha-arc-toc.slidev-layout .alpha-arc-toc__heading,
|
|
106
|
+
.alpha-arc-toc.slidev-layout .alpha-arc-toc__heading h1 {
|
|
107
|
+
font-size: 2.5rem;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.slidev-page .alpha-arc-toc.slidev-layout .alpha-arc-toc__item > a {
|
|
111
|
+
font-size: 1.25rem;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.alpha-bg-center .alpha-bg-center__index {
|
|
115
|
+
color: var(--alpha-academic-accent-foreground);
|
|
116
|
+
}
|