slidev-theme-one-purple-unicorn-pro 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/README.md ADDED
@@ -0,0 +1,152 @@
1
+ # One Purple Unicorn Pro - Slidev Theme
2
+
3
+ A professional Slidev theme with purple and indigo gradients, optimized for technical presentations.
4
+
5
+ ## Features
6
+
7
+ - **Purple & Indigo Color Scheme**: Beautiful gradient effects from purple to blue
8
+ - **Light & Dark Modes**: User-configurable theme switching
9
+ - **Korean + English Support**: Noto Sans KR font for mixed language presentations
10
+ - **Clean Layouts**: Special layouts for cover, intro, section, and end slides
11
+ - **Code Highlighting**: Vitesse theme for consistent syntax highlighting
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install slidev-theme-one-purple-unicorn-pro
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ Add the theme to your Slidev presentation:
22
+
23
+ ```yaml
24
+ ---
25
+ theme: slidev-theme-one-purple-unicorn-pro
26
+ colorSchema: light # or 'dark', 'auto'
27
+ ---
28
+
29
+ # Your Presentation Title
30
+ ```
31
+
32
+ ## Theme Modes
33
+
34
+ ### Light Mode (Default)
35
+ ```yaml
36
+ ---
37
+ colorSchema: light
38
+ ---
39
+ ```
40
+
41
+ ### Dark Mode
42
+ ```yaml
43
+ ---
44
+ colorSchema: dark
45
+ ---
46
+ ```
47
+
48
+ ### Auto Mode (System Preference)
49
+ ```yaml
50
+ ---
51
+ colorSchema: auto
52
+ ---
53
+ ```
54
+
55
+ You can also switch themes per slide:
56
+ ```yaml
57
+ ---
58
+ colorSchema: dark
59
+ ---
60
+
61
+ # This slide uses dark mode
62
+ ```
63
+
64
+ ## Available Layouts
65
+
66
+ ### Cover Layout
67
+ ```yaml
68
+ ---
69
+ layout: cover
70
+ ---
71
+
72
+ # Your Title
73
+ Subtitle or description
74
+ ```
75
+
76
+ ### Section Layout
77
+ ```yaml
78
+ ---
79
+ layout: section
80
+ ---
81
+
82
+ # Section Title
83
+ ```
84
+
85
+ ### Intro Layout
86
+ ```yaml
87
+ ---
88
+ layout: intro
89
+ ---
90
+
91
+ # Introduction
92
+ Your intro content here
93
+ ```
94
+
95
+ ### End Layout
96
+ ```yaml
97
+ ---
98
+ layout: end
99
+ ---
100
+
101
+ # Thank You
102
+ Contact information
103
+ ```
104
+
105
+ ### Two Columns Layout
106
+ ```yaml
107
+ ---
108
+ layout: two-cols
109
+ ---
110
+
111
+ # Two Column Layout
112
+
113
+ ::left::
114
+
115
+ Left column content
116
+
117
+ ::right::
118
+
119
+ Right column content
120
+ ```
121
+
122
+ ## Color Palette
123
+
124
+ - **Primary**: `#8b5cf6` (Purple)
125
+ - **Secondary**: `#6366f1` (Indigo)
126
+ - **Accent**: `#ec4899` (Pink)
127
+ - **Gradient**: Purple → Blue
128
+
129
+ ## Typography
130
+
131
+ - **Sans**: Noto Sans KR, Inter, system-ui
132
+ - **Mono**: JetBrains Mono, Fira Code
133
+ - **Serif**: Noto Serif KR
134
+
135
+ ## CSS Variables
136
+
137
+ You can override theme variables in your slides:
138
+
139
+ ```css
140
+ :root {
141
+ --primary: #8b5cf6;
142
+ --primary-light: #a78bfa;
143
+ --primary-dark: #7c3aed;
144
+ --secondary: #6366f1;
145
+ --accent: #ec4899;
146
+ --gradient: linear-gradient(135deg, var(--primary), var(--secondary));
147
+ }
148
+ ```
149
+
150
+ ## License
151
+
152
+ MIT
package/index.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { defineTheme } from '@slidev/types'
2
+
3
+ export default defineTheme({
4
+ name: 'slidev-theme-one-purple-unicorn-pro',
5
+ colorSchema: 'both', // Support both light and dark themes
6
+ highlighter: {
7
+ theme: {
8
+ light: 'vitesse-light',
9
+ dark: 'vitesse-dark'
10
+ }
11
+ },
12
+ fonts: {
13
+ sans: ['Noto Sans KR', 'Inter', 'system-ui', 'sans-serif'],
14
+ serif: ['Noto Serif KR', 'serif'],
15
+ mono: ['JetBrains Mono', 'Fira Code', 'monospace']
16
+ }
17
+ })
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <div class="slidev-layout cover">
3
+ <div class="cover-content">
4
+ <slot />
5
+ </div>
6
+ </div>
7
+ </template>
8
+
9
+ <style scoped>
10
+ .cover {
11
+ @apply h-full flex items-center justify-center;
12
+ background: var(--dark-bg);
13
+ }
14
+
15
+ .cover-content {
16
+ @apply text-center max-w-4xl mx-auto px-8;
17
+ }
18
+ </style>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <div class="slidev-layout end">
3
+ <div class="end-content">
4
+ <slot />
5
+ </div>
6
+ </div>
7
+ </template>
8
+
9
+ <style scoped>
10
+ .end {
11
+ @apply h-full flex items-center justify-center;
12
+ background: var(--dark-bg);
13
+ }
14
+
15
+ .end-content {
16
+ @apply text-center max-w-4xl mx-auto px-8;
17
+ }
18
+ </style>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <div class="slidev-layout intro">
3
+ <div class="intro-content">
4
+ <slot />
5
+ </div>
6
+ </div>
7
+ </template>
8
+
9
+ <style scoped>
10
+ .intro {
11
+ @apply h-full flex items-center;
12
+ background: var(--dark-bg);
13
+ }
14
+
15
+ .intro-content {
16
+ @apply max-w-5xl mx-auto px-12;
17
+ }
18
+ </style>
@@ -0,0 +1,18 @@
1
+ <template>
2
+ <div class="slidev-layout section">
3
+ <div class="section-content">
4
+ <slot />
5
+ </div>
6
+ </div>
7
+ </template>
8
+
9
+ <style scoped>
10
+ .section {
11
+ @apply h-full flex items-center justify-center;
12
+ background: var(--dark-bg);
13
+ }
14
+
15
+ .section-content {
16
+ @apply text-center max-w-4xl mx-auto px-8;
17
+ }
18
+ </style>
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "slidev-theme-one-purple-unicorn-pro",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "One Purple Unicorn Pro theme for Slidev - Purple/Indigo focused theme with clean macOS style",
6
+ "keywords": [
7
+ "slidev-theme",
8
+ "slidev"
9
+ ],
10
+ "engines": {
11
+ "node": ">=14.0.0",
12
+ "slidev": ">=0.47.0"
13
+ },
14
+ "author": {
15
+ "name": "Hawk",
16
+ "email": "hawking90a@gmail.com"
17
+ },
18
+ "main": "./index.ts",
19
+ "files": [
20
+ "index.ts",
21
+ "components/**/*",
22
+ "layouts/**/*",
23
+ "styles/**/*",
24
+ "setup/**/*",
25
+ "uno.config.ts",
26
+ "styles.css",
27
+ "README.md"
28
+ ],
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/hawk90/slidev-theme-one-purple-unicorn-pro"
32
+ },
33
+ "homepage": "https://github.com/hawk90/slidev-theme-one-purple-unicorn-pro",
34
+ "bugs": {
35
+ "url": "https://github.com/hawk90/slidev-theme-one-purple-unicorn-pro/issues"
36
+ },
37
+ "license": "MIT",
38
+ "slidev": {
39
+ "colorSchema": "both",
40
+ "defaults": {
41
+ "fonts": {
42
+ "sans": "Noto Sans KR, Inter, system-ui",
43
+ "serif": "Noto Serif KR",
44
+ "mono": "JetBrains Mono, Fira Code, monospace"
45
+ }
46
+ }
47
+ },
48
+ "dependencies": {
49
+ "@slidev/types": "latest",
50
+ "codemirror-theme-vars": "^0.1.2",
51
+ "prism-theme-vars": "^0.2.4",
52
+ "theme-vitesse": "^0.6.0"
53
+ },
54
+ "devDependencies": {
55
+ "postcss": "^8.4.24",
56
+ "postcss-cli": "^10.1.0",
57
+ "postcss-import": "^15.1.0",
58
+ "postcss-nested": "^6.0.1",
59
+ "postcss-custom-properties": "^13.1.4",
60
+ "autoprefixer": "^10.4.14",
61
+ "cssnano": "^6.0.1"
62
+ },
63
+ "scripts": {
64
+ "dev": "echo 'Theme development mode - changes are automatically reflected'",
65
+ "build": "echo 'Building theme...' && npm link",
66
+ "watch": "echo 'Watching for changes...'",
67
+ "link": "npm link && cd ../.. && npm link slidev-theme-one-purple-unicorn-pro",
68
+ "unlink": "npm unlink && cd ../.. && npm unlink slidev-theme-one-purple-unicorn-pro",
69
+ "prepublishOnly": "echo 'Preparing for publish...'"
70
+ }
71
+ }
package/setup/main.ts ADDED
@@ -0,0 +1,6 @@
1
+ // Setup file for Slidev theme
2
+ import type { App } from 'vue'
3
+
4
+ export default ({ app }: { app: App }) => {
5
+ // Empty setup for now - dark mode will be handled through CSS
6
+ }
@@ -0,0 +1,30 @@
1
+ /* No animations - PDF export only */
2
+
3
+ /* Disable all animations */
4
+ * {
5
+ animation: none !important;
6
+ transition: none !important;
7
+ }
8
+
9
+ /* Static gradients */
10
+ .gradient-animated,
11
+ .gradient-text-animated {
12
+ background-position: 50% 50% !important;
13
+ }
14
+
15
+ /* Hide animated elements */
16
+ .animated-blob,
17
+ .particle,
18
+ .wave {
19
+ display: none !important;
20
+ }
21
+
22
+ /* Static glow effect */
23
+ .glow {
24
+ box-shadow: 0 0 30px rgba(97, 175, 239, 0.4);
25
+ }
26
+
27
+ /* Static blob shapes */
28
+ .blob {
29
+ border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
30
+ }
@@ -0,0 +1,312 @@
1
+ /* One Purple Unicorn Pro Code Theme - One Dark Pro for All Code */
2
+
3
+ /* === BASE CODE BLOCK STYLES === */
4
+ .slidev-code,
5
+ pre,
6
+ .shiki,
7
+ code[class*="language-"],
8
+ pre[class*="language-"],
9
+ .slidev-layout pre,
10
+ .slidev-layout .shiki {
11
+ background: #f8f9fa !important;
12
+ background-image: none !important;
13
+ background-attachment: initial !important;
14
+ background-size: initial !important;
15
+ background-repeat: no-repeat !important;
16
+ color: #1e293b !important;
17
+ border: none !important;
18
+ border-radius: 12px !important;
19
+ outline: none !important;
20
+ box-shadow: none !important;
21
+ font-family: 'Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', monospace !important;
22
+ font-size: 14px !important;
23
+ line-height: 1.6 !important;
24
+ padding: 2rem 1.5rem 1.5rem !important;
25
+ position: relative !important;
26
+ overflow-x: auto !important;
27
+ text-rendering: optimizeLegibility !important;
28
+ -webkit-font-smoothing: antialiased !important;
29
+ -moz-osx-font-smoothing: grayscale !important;
30
+ }
31
+
32
+ /* === MAC TERMINAL BUTTONS === */
33
+ /* More specific selectors for Slidev generated HTML */
34
+ .shiki[class*="language-bash"]::before,
35
+ .shiki[class*="language-shell"]::before,
36
+ .shiki[class*="language-terminal"]::before,
37
+ .shiki[class*="language-console"]::before,
38
+ pre[class*="language-bash"]::before,
39
+ pre[class*="language-shell"]::before,
40
+ pre[class*="language-terminal"]::before,
41
+ pre[class*="language-console"]::before,
42
+ .slidev-code[class*="language-bash"]::before,
43
+ .slidev-code[class*="language-shell"]::before,
44
+ .slidev-code[class*="language-terminal"]::before,
45
+ .slidev-code[class*="language-console"]::before,
46
+ /* Also target by data attributes */
47
+ pre[data-language="bash"]::before,
48
+ pre[data-language="shell"]::before,
49
+ pre[data-language="terminal"]::before,
50
+ pre[data-language="console"]::before,
51
+ .shiki[data-language="bash"]::before,
52
+ .shiki[data-language="shell"]::before,
53
+ .shiki[data-language="terminal"]::before,
54
+ .shiki[data-language="console"]::before {
55
+ content: '';
56
+ position: absolute;
57
+ top: 16px;
58
+ left: 20px;
59
+ width: 12px;
60
+ height: 12px;
61
+ background: #ff5f57;
62
+ border-radius: 50%;
63
+ box-shadow: 20px 0 0 #ffbd2e, 40px 0 0 #28ca42;
64
+ z-index: 1000;
65
+ }
66
+
67
+ /* === MAC TERMINAL BUTTONS - ALL TYPES (CIRCULAR) === */
68
+ *[class*="bash"]::before,
69
+ *[class*="shell"]::before,
70
+ *[class*="terminal"]::before,
71
+ *[class*="console"]::before,
72
+ *[lang*="bash"]::before,
73
+ *[lang*="shell"]::before,
74
+ *[lang*="terminal"]::before,
75
+ *[lang*="console"]::before {
76
+ content: '';
77
+ position: absolute;
78
+ top: 8px;
79
+ left: calc(-1.5rem + 12px); /* Outside padding + comfortable Mac terminal spacing */
80
+ width: 12px;
81
+ height: 12px;
82
+ background: #ff5f57;
83
+ border-radius: 50%;
84
+ box-shadow: 20px 0 0 #ffbd2e, 40px 0 0 #28ca42;
85
+ z-index: 1000;
86
+ }
87
+
88
+ /* === PURE CSS SYNTAX HIGHLIGHTING === */
89
+ /* Shiki 없이 순수 CSS로 구문 강조 구현 */
90
+
91
+ /* 기본 코드 블록 스타일 */
92
+ pre,
93
+ code,
94
+ .slidev-code {
95
+ color: #abb2bf !important;
96
+ background: #282c34 !important;
97
+ font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace !important;
98
+ }
99
+
100
+ /* CSS 기반 구문 강조 - 정규식 패턴 매칭 */
101
+
102
+ /* 키워드: if, for, while, return, function, const, let, var, class */
103
+ pre:has-text("\\bif\\b"),
104
+ pre:has-text("\\bfor\\b"),
105
+ pre:has-text("\\bwhile\\b"),
106
+ pre:has-text("\\breturn\\b"),
107
+ pre:has-text("\\bfunction\\b"),
108
+ pre:has-text("\\bconst\\b"),
109
+ pre:has-text("\\blet\\b"),
110
+ pre:has-text("\\bvar\\b"),
111
+ pre:has-text("\\bclass\\b"),
112
+ pre:has-text("\\b__global__\\b"),
113
+ pre:has-text("\\b__device__\\b"),
114
+ pre:has-text("\\b__host__\\b"),
115
+ pre:has-text("\\bvoid\\b"),
116
+ pre:has-text("\\bint\\b"),
117
+ pre:has-text("\\bfloat\\b"),
118
+ pre:has-text("\\bdouble\\b") {
119
+ /* 키워드가 있는 줄을 찾아서 처리 */
120
+ }
121
+
122
+ /* 실제 간단한 구문 강조 구현 */
123
+ /* 문자열 패턴 - CSS로 직접 구현 */
124
+ pre::after {
125
+ content: "";
126
+ position: absolute;
127
+ top: 0;
128
+ left: 0;
129
+ right: 0;
130
+ bottom: 0;
131
+ pointer-events: none;
132
+ /* JavaScript로 실시간 구문 강조 적용 */
133
+ }
134
+
135
+ /* === ONE DARK PRO SYNTAX HIGHLIGHTING === */
136
+ /* Base code color */
137
+ pre, code, .shiki {
138
+ color: #1e293b !important;
139
+ }
140
+
141
+ /* Let Shiki handle syntax highlighting colors */
142
+ .shiki {
143
+ background: #282c34 !important;
144
+ }
145
+
146
+ /* Direct style attribute overrides for Shiki generated content */
147
+ .shiki span[style*="#569CD6"] { color: #569cd6 !important; } /* Keywords */
148
+ .shiki span[style*="#CE9178"] { color: #ce9178 !important; } /* Strings */
149
+ .shiki span[style*="#6A9955"] { color: #6a9955 !important; font-style: italic !important; } /* Comments */
150
+ .shiki span[style*="#DCDCAA"] { color: #dcdcaa !important; } /* Functions */
151
+ .shiki span[style*="#9CDCFE"] { color: #9cdcfe !important; } /* Variables */
152
+ .shiki span[style*="#B5CEA8"] { color: #b5cea8 !important; } /* Numbers */
153
+ .shiki span[style*="#4EC9B0"] { color: #4ec9b0 !important; } /* Types */
154
+ .shiki span[style*="#C586C0"] { color: #c586c0 !important; } /* Purple keywords */
155
+
156
+ /* Force dark background on all code elements - Remove all patterns */
157
+ pre,
158
+ .shiki,
159
+ .slidev-code,
160
+ code[class*="language-"],
161
+ pre[class*="language-"] {
162
+ background: #f8f9fa !important;
163
+ background-image: none !important;
164
+ background-attachment: initial !important;
165
+ background-origin: initial !important;
166
+ background-clip: initial !important;
167
+ background-size: initial !important;
168
+ background-repeat: no-repeat !important;
169
+ background-position: initial !important;
170
+ color: #1e293b !important;
171
+ }
172
+
173
+ /* Remove any pseudo-element backgrounds */
174
+ pre::before,
175
+ pre::after,
176
+ .shiki::before,
177
+ .shiki::after {
178
+ background: none !important;
179
+ background-image: none !important;
180
+ }
181
+
182
+ /* === ENHANCED SYNTAX HIGHLIGHTING === */
183
+ /* One Dark Pro colors with better coverage */
184
+
185
+ /* Comments - Green italic */
186
+ .shiki .token.comment,
187
+ .shiki .token.prolog,
188
+ .shiki .token.doctype,
189
+ .shiki .token.cdata,
190
+ .shiki span[style*="color:#6A9955"],
191
+ .shiki span[style*="color:#608B4E"] {
192
+ color: #008000 !important;
193
+ font-style: italic !important;
194
+ }
195
+
196
+ /* Keywords - Blue */
197
+ .shiki .token.atrule,
198
+ .shiki .token.attr-value,
199
+ .shiki .token.keyword,
200
+ .shiki span[style*="color:#569CD6"],
201
+ .shiki span[style*="color:#C586C0"] {
202
+ color: #0066cc !important;
203
+ font-weight: 500 !important;
204
+ }
205
+
206
+ /* Strings - Orange */
207
+ .shiki .token.selector,
208
+ .shiki .token.attr-name,
209
+ .shiki .token.string,
210
+ .shiki .token.char,
211
+ .shiki .token.builtin,
212
+ .shiki .token.inserted,
213
+ .shiki span[style*="color:#CE9178"],
214
+ .shiki span[style*="color:#D69D85"] {
215
+ color: #d83a00 !important;
216
+ }
217
+
218
+ /* Numbers - Light Green */
219
+ .shiki .token.property,
220
+ .shiki .token.tag,
221
+ .shiki .token.boolean,
222
+ .shiki .token.number,
223
+ .shiki .token.constant,
224
+ .shiki .token.symbol,
225
+ .shiki .token.deleted,
226
+ .shiki span[style*="color:#B5CEA8"] {
227
+ color: #b5cea8 !important;
228
+ }
229
+
230
+ /* Functions - Yellow */
231
+ .shiki .token.function,
232
+ .shiki .token.class-name,
233
+ .shiki span[style*="color:#DCDCAA"],
234
+ .shiki span[style*="color:#4EC9B0"] {
235
+ color: #dcdcaa !important;
236
+ }
237
+
238
+ /* Variables & Identifiers - Light Blue */
239
+ .shiki .token.regex,
240
+ .shiki .token.important,
241
+ .shiki .token.variable,
242
+ .shiki span[style*="color:#9CDCFE"],
243
+ .shiki span[style*="color:#4FC1FF"] {
244
+ color: #9cdcfe !important;
245
+ }
246
+
247
+ /* Types - Cyan */
248
+ .shiki span[style*="color:#4EC9B0"] {
249
+ color: #4ec9b0 !important;
250
+ }
251
+
252
+ /* Operators & Punctuation */
253
+ .shiki .token.punctuation,
254
+ .shiki .token.operator,
255
+ .shiki .token.entity,
256
+ .shiki .token.url {
257
+ color: #1e293b !important;
258
+ }
259
+
260
+ /* Special tokens for C++/CUDA */
261
+ .shiki span:contains("__global__"),
262
+ .shiki span:contains("__device__"),
263
+ .shiki span:contains("__host__") {
264
+ color: #c586c0 !important;
265
+ font-weight: bold !important;
266
+ }
267
+
268
+ /* Ensure proper font rendering */
269
+ .shiki code,
270
+ pre code {
271
+ color: inherit !important;
272
+ background: transparent !important;
273
+ font-family: inherit !important;
274
+ }
275
+
276
+ /* === INLINE CODE === */
277
+ :not(pre) > code {
278
+ background: linear-gradient(135deg, #f3f0ff 0%, #fdf4ff 100%) !important;
279
+ color: #8b5cf6 !important;
280
+ border: 1px solid rgba(139, 92, 246, 0.2) !important;
281
+ border-radius: 0.375rem !important;
282
+ padding: 0.125rem 0.375rem !important;
283
+ font-weight: 500 !important;
284
+ font-size: 0.9em !important;
285
+ }
286
+
287
+ /* === SCROLLBAR === */
288
+ .shiki::-webkit-scrollbar {
289
+ width: 8px;
290
+ height: 8px;
291
+ }
292
+
293
+ .shiki::-webkit-scrollbar-track {
294
+ background: #e2e8f0;
295
+ border-radius: 4px;
296
+ }
297
+
298
+ .shiki::-webkit-scrollbar-thumb {
299
+ background: #94a3b8;
300
+ border-radius: 4px;
301
+ }
302
+
303
+ .shiki::-webkit-scrollbar-thumb:hover {
304
+ background: #64748b;
305
+ }
306
+
307
+ /* === HOVER EFFECTS === */
308
+ .slidev-code:hover,
309
+ .shiki:hover {
310
+ box-shadow: 0 10px 15px -3px rgba(139, 92, 246, 0.15) !important;
311
+ transition: box-shadow 0.3s ease;
312
+ }