slidev-theme-practicum 0.1.0 → 0.1.2
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/LICENSE +21 -0
- package/README.md +72 -10
- package/components/Slide.vue +81 -26
- package/components/Slot.vue +33 -48
- package/components/Text.vue +68 -2
- package/components/Timeline.vue +2 -23
- package/composables/deck-slot-markup.cjs +249 -0
- package/composables/decor-catalog.mjs +169 -47
- package/composables/layout-authoring.ts +6 -2
- package/composables/layout-markdown.mjs +33 -0
- package/composables/layout-recipes.ts +51 -5
- package/composables/layout-shorthands.ts +251 -81
- package/composables/markdown-to-vnodes.cjs +1 -0
- package/composables/markdown-to-vnodes.mjs +237 -0
- package/composables/slot-placement.ts +1 -1
- package/composables/slot-spacing.ts +66 -0
- package/composables/text-fit-runtime.ts +458 -76
- package/composables/text-fit-scope.ts +13 -0
- package/composables/text-slot-markdown.mjs +193 -0
- package/composables/text-typography.mjs +2 -0
- package/composables/theme-assets.mjs +60 -0
- package/composables/timeline-grid.ts +27 -0
- package/composables/typescript-require.cjs +29 -0
- package/composables/validate-deck-layouts.cjs +277 -0
- package/decor-library.md +2 -0
- package/example.md +132 -10
- package/package.json +25 -11
- package/public/photos/photo-1.webp +0 -0
- package/public/photos/photo-10.webp +0 -0
- package/public/photos/photo-11.webp +0 -0
- package/public/photos/photo-12.webp +0 -0
- package/public/photos/photo-13.webp +0 -0
- package/public/photos/photo-14.webp +0 -0
- package/public/photos/photo-15.webp +0 -0
- package/public/photos/photo-16.webp +0 -0
- package/public/photos/photo-17.webp +0 -0
- package/public/photos/photo-18.webp +0 -0
- package/public/photos/photo-19.webp +0 -0
- package/public/photos/photo-2.webp +0 -0
- package/public/photos/photo-20.webp +0 -0
- package/public/photos/photo-21.webp +0 -0
- package/public/photos/photo-22.webp +0 -0
- package/public/photos/photo-23.webp +0 -0
- package/public/photos/photo-24.webp +0 -0
- package/public/photos/photo-25.webp +0 -0
- package/public/photos/photo-26.webp +0 -0
- package/public/photos/photo-27.webp +0 -0
- package/public/photos/photo-28.webp +0 -0
- package/public/photos/photo-29.webp +0 -0
- package/public/photos/photo-3.webp +0 -0
- package/public/photos/photo-30.webp +0 -0
- package/public/photos/photo-4.webp +0 -0
- package/public/photos/photo-5.webp +0 -0
- package/public/photos/photo-6.webp +0 -0
- package/public/photos/photo-7.webp +0 -0
- package/public/photos/photo-8.webp +0 -0
- package/public/photos/photo-9.webp +0 -0
- package/scripts/browser-smoke-runtime.mjs +428 -0
- package/scripts/browser-smoke.mjs +424 -0
- package/scripts/build-artifact-assets.mjs +55 -0
- package/scripts/check-build-artifact.mjs +243 -0
- package/scripts/check-package.mjs +132 -0
- package/scripts/check-test-architecture.mjs +176 -0
- package/scripts/npm-spawn.mjs +31 -0
- package/scripts/test-architecture-policy.mjs +245 -0
- package/scripts/theme-asset-inventory.mjs +83 -0
- package/scripts/validate-deck.cjs +18 -0
- package/setup/decor-save-middleware.ts +244 -0
- package/setup/vite-plugins.ts +14 -84
- package/skills/slidev-practicum/SKILL.md +25 -0
- package/skills/slidev-practicum/agents/openai.yaml +4 -0
- package/styles/index.css +10 -1
- package/composables/layout-registry.ts +0 -47
- package/env.d.ts +0 -6
- package/public/photos/photo-1.png +0 -0
- package/public/photos/photo-10.png +0 -0
- package/public/photos/photo-2.png +0 -0
- package/public/photos/photo-3.png +0 -0
- package/public/photos/photo-4.png +0 -0
- package/public/photos/photo-5.png +0 -0
- package/public/photos/photo-6.png +0 -0
- package/public/photos/photo-7.png +0 -0
- package/public/photos/photo-8.png +0 -0
- package/public/photos/photo-9.png +0 -0
- package/slidev-theme-practicum.png +0 -0
- package/slidev-theme-practicum.svg +0 -102
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slidev-practicum
|
|
3
|
+
description: Используй, когда нужно создать, отредактировать, проверить или экспортировать Slidev-презентацию для slidev-theme-practicum, Яндекс Практикума, стиля Практикума или запроса вроде «слайды в стиле Практикума».
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Slidev Практикума
|
|
7
|
+
|
|
8
|
+
Используй этот скилл как тонкий маршрутизатор для коротких запросов вроде «сделай слайды в стиле Практикума».
|
|
9
|
+
|
|
10
|
+
**ОБЯЗАТЕЛЬНЫЙ ПОДСКИЛЛ:** используй `slidev` для платформенной механики: Markdown-синтаксиса, frontmatter, блоков кода, заметок, анимаций, dev-сервера, сборки и экспорта.
|
|
11
|
+
|
|
12
|
+
Для авторинга в стиле Практикума не дублируй правила из документации темы. Читай локальный источник истины:
|
|
13
|
+
|
|
14
|
+
- `README.md` — публичный авторский контракт, лейауты, компоненты, `themeConfig`, декор и правила контента.
|
|
15
|
+
- `example.md` — канонические паттерны слайдов, которые нужно копировать и адаптировать.
|
|
16
|
+
- `composables/layout-recipes.ts` и `composables/layout-shorthands.ts` — только когда по README и примерам непонятен точный контракт варианта или shorthand-синтаксиса.
|
|
17
|
+
|
|
18
|
+
Дефолты:
|
|
19
|
+
|
|
20
|
+
- Внутри этого репозитория используй `theme: ./`.
|
|
21
|
+
- Во внешней колоде с установленным пакетом используй `theme: practicum`.
|
|
22
|
+
- Пиши по-русски, если пользователь не попросил другой язык.
|
|
23
|
+
- Выбирай тип слайда по задаче кадра, следуя `README.md`.
|
|
24
|
+
|
|
25
|
+
Не используй `slidev-theme-architect-skill.md` для обычных колод; он нужен для создания или редизайна theme package.
|
package/styles/index.css
CHANGED
|
@@ -18,6 +18,15 @@
|
|
|
18
18
|
font-display: swap;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
@font-face {
|
|
22
|
+
font-family: 'YS Text';
|
|
23
|
+
src: url('https://yastatic.net/s3/home/fonts/ys/4/text-bold.woff2') format('woff2'),
|
|
24
|
+
url('https://yastatic.net/s3/home/fonts/ys/4/text-bold.woff') format('woff');
|
|
25
|
+
font-weight: 600;
|
|
26
|
+
font-style: normal;
|
|
27
|
+
font-display: swap;
|
|
28
|
+
}
|
|
29
|
+
|
|
21
30
|
html,
|
|
22
31
|
body,
|
|
23
32
|
#slide-content,
|
|
@@ -124,7 +133,7 @@ body,
|
|
|
124
133
|
|
|
125
134
|
.slidev-layout strong,
|
|
126
135
|
.slidev-layout b {
|
|
127
|
-
font-weight:
|
|
136
|
+
font-weight: 600;
|
|
128
137
|
}
|
|
129
138
|
|
|
130
139
|
.slidev-layout em,
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
normalizeRecipeRegions,
|
|
3
|
-
resolveLayoutRecipe,
|
|
4
|
-
} from './layout-recipes'
|
|
5
|
-
|
|
6
|
-
export type {
|
|
7
|
-
ThemeLayout,
|
|
8
|
-
ThemeLayoutHeader,
|
|
9
|
-
ThemeLayoutMarginLevel,
|
|
10
|
-
ThemeLayoutRole,
|
|
11
|
-
ThemeLayoutSlotSpec,
|
|
12
|
-
ThemeLayoutSpec,
|
|
13
|
-
ThemeLayoutSurface,
|
|
14
|
-
} from './layout-recipes'
|
|
15
|
-
|
|
16
|
-
import type { ThemeLayout, ThemeLayoutRole } from './layout-recipes'
|
|
17
|
-
|
|
18
|
-
function fail(label: string, message: string): never {
|
|
19
|
-
throw new Error(`[${label}] ${message}`)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function resolveLayoutVariant(layout: ThemeLayout | '', variant: string, arrangement = '') {
|
|
23
|
-
if (!layout)
|
|
24
|
-
return variant.trim()
|
|
25
|
-
|
|
26
|
-
return resolveLayoutRecipe(layout, variant, arrangement).aliases[0].variant
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function resolveLayoutSpec(layout: ThemeLayout, variant: string) {
|
|
30
|
-
return normalizeRecipeRegions(resolveLayoutRecipe(layout, variant))
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export function resolveLayoutSlotSpec(
|
|
34
|
-
layout: ThemeLayout,
|
|
35
|
-
variant: string,
|
|
36
|
-
role: ThemeLayoutRole,
|
|
37
|
-
index: number,
|
|
38
|
-
) {
|
|
39
|
-
const layoutSpec = resolveLayoutSpec(layout, variant)
|
|
40
|
-
const roleSlots = layoutSpec.slots[role] ?? []
|
|
41
|
-
const resolved = roleSlots[index]
|
|
42
|
-
|
|
43
|
-
if (!resolved)
|
|
44
|
-
fail('Slide', `Variant "${layout}:${variant}" не поддерживает ${role}[${index}].`)
|
|
45
|
-
|
|
46
|
-
return resolved
|
|
47
|
-
}
|
package/env.d.ts
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" role="img" aria-labelledby="title desc">
|
|
2
|
-
<title id="title">Логотип на подвесном экране</title>
|
|
3
|
-
<desc id="desc">Квадратная иконка: логотип Практикума на слегка сером экране для слайдов с монохромной рамой.</desc>
|
|
4
|
-
|
|
5
|
-
<defs>
|
|
6
|
-
<linearGradient id="rail" x1="0" x2="0" y1="0" y2="1">
|
|
7
|
-
<stop offset="0" stop-color="#4b4b4b"/>
|
|
8
|
-
<stop offset=".22" stop-color="#1f1f1f"/>
|
|
9
|
-
<stop offset=".72" stop-color="#050505"/>
|
|
10
|
-
<stop offset="1" stop-color="#151515"/>
|
|
11
|
-
</linearGradient>
|
|
12
|
-
|
|
13
|
-
<linearGradient id="railHighlight" x1="0" x2="0" y1="0" y2="1">
|
|
14
|
-
<stop offset="0" stop-color="#ffffff" stop-opacity=".42"/>
|
|
15
|
-
<stop offset=".7" stop-color="#ffffff" stop-opacity="0"/>
|
|
16
|
-
</linearGradient>
|
|
17
|
-
|
|
18
|
-
<linearGradient id="screen" x1="0" x2="1" y1="0" y2="1">
|
|
19
|
-
<stop offset="0" stop-color="#f5f5f5"/>
|
|
20
|
-
<stop offset=".52" stop-color="#eeeeee"/>
|
|
21
|
-
<stop offset="1" stop-color="#f7f7f7"/>
|
|
22
|
-
</linearGradient>
|
|
23
|
-
|
|
24
|
-
<linearGradient id="logoTile" x1="0" x2="1" y1="0" y2="1">
|
|
25
|
-
<stop offset="0" stop-color="#202020"/>
|
|
26
|
-
<stop offset=".58" stop-color="#151515"/>
|
|
27
|
-
<stop offset="1" stop-color="#070707"/>
|
|
28
|
-
</linearGradient>
|
|
29
|
-
|
|
30
|
-
<radialGradient id="cap" cx=".35" cy=".25" r=".78">
|
|
31
|
-
<stop offset="0" stop-color="#666"/>
|
|
32
|
-
<stop offset=".38" stop-color="#222"/>
|
|
33
|
-
<stop offset="1" stop-color="#030303"/>
|
|
34
|
-
</radialGradient>
|
|
35
|
-
|
|
36
|
-
<filter id="softShadow" x="-12%" y="-12%" width="124%" height="132%">
|
|
37
|
-
<feDropShadow dx="0" dy="10" stdDeviation="10" flood-color="#000" flood-opacity=".16"/>
|
|
38
|
-
</filter>
|
|
39
|
-
|
|
40
|
-
<filter id="railShadow" x="-8%" y="-30%" width="116%" height="180%">
|
|
41
|
-
<feDropShadow dx="0" dy="7" stdDeviation="5" flood-color="#000" flood-opacity=".25"/>
|
|
42
|
-
</filter>
|
|
43
|
-
|
|
44
|
-
<filter id="logoShadow" x="-8%" y="-8%" width="116%" height="116%">
|
|
45
|
-
<feDropShadow dx="0" dy="4" stdDeviation="5" flood-color="#000" flood-opacity=".18"/>
|
|
46
|
-
</filter>
|
|
47
|
-
</defs>
|
|
48
|
-
|
|
49
|
-
<rect width="1024" height="1024" fill="#fff"/>
|
|
50
|
-
|
|
51
|
-
<g filter="url(#softShadow)">
|
|
52
|
-
<path d="M119 219h786v617H119z" fill="url(#screen)"/>
|
|
53
|
-
<path d="M119 219h786v26H119z" fill="#dbdbdb" opacity=".72"/>
|
|
54
|
-
<path d="M119 219v617M905 219v617" fill="none" stroke="#b8b8b8" stroke-width="4"/>
|
|
55
|
-
</g>
|
|
56
|
-
|
|
57
|
-
<g fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
58
|
-
<path d="M254 178 512 72l258 106" stroke="#0b0b0b" stroke-width="18"/>
|
|
59
|
-
<path d="M254 178 512 72l258 106" stroke="#3f3f3f" stroke-width="7" opacity=".55"/>
|
|
60
|
-
</g>
|
|
61
|
-
|
|
62
|
-
<circle cx="512" cy="73" r="30" fill="url(#cap)" filter="url(#railShadow)"/>
|
|
63
|
-
<ellipse cx="502" cy="61" rx="14" ry="9" fill="#fff" opacity=".22"/>
|
|
64
|
-
|
|
65
|
-
<g filter="url(#railShadow)">
|
|
66
|
-
<rect x="89" y="165" width="846" height="67" rx="22" fill="url(#rail)"/>
|
|
67
|
-
<rect x="101" y="174" width="822" height="17" rx="9" fill="url(#railHighlight)"/>
|
|
68
|
-
<path d="M111 229h802" stroke="#000" stroke-width="7" opacity=".34"/>
|
|
69
|
-
</g>
|
|
70
|
-
|
|
71
|
-
<g filter="url(#logoShadow)">
|
|
72
|
-
<rect x="288" y="304" width="448" height="448" rx="123" fill="url(#logoTile)"/>
|
|
73
|
-
<g transform="translate(512 512)" fill="#fff">
|
|
74
|
-
<rect x="-7" y="-150" width="14" height="172"/>
|
|
75
|
-
<rect x="-8" y="-9" width="174" height="17" transform="rotate(-35)"/>
|
|
76
|
-
<rect x="-7" y="-8" width="164" height="16" transform="rotate(25)"/>
|
|
77
|
-
<rect x="-7" y="-8" width="160" height="16" transform="rotate(177)"/>
|
|
78
|
-
<rect x="-7" y="-8" width="142" height="16" transform="rotate(-139)"/>
|
|
79
|
-
<rect x="-7" y="-8" width="140" height="16" transform="rotate(139)"/>
|
|
80
|
-
<rect x="-7" y="-8" width="152" height="16" transform="rotate(110)"/>
|
|
81
|
-
<rect x="-6" y="-7" width="162" height="14" transform="rotate(95)"/>
|
|
82
|
-
<rect x="-6" y="-7" width="155" height="14" transform="rotate(86)"/>
|
|
83
|
-
<circle cx="0" cy="0" r="10"/>
|
|
84
|
-
</g>
|
|
85
|
-
</g>
|
|
86
|
-
|
|
87
|
-
<g filter="url(#railShadow)">
|
|
88
|
-
<rect x="97" y="824" width="830" height="39" rx="17" fill="url(#rail)"/>
|
|
89
|
-
<rect x="108" y="830" width="808" height="10" rx="5" fill="url(#railHighlight)"/>
|
|
90
|
-
</g>
|
|
91
|
-
|
|
92
|
-
<g stroke-linecap="round">
|
|
93
|
-
<path d="M512 862v44" stroke="#0b0b0b" stroke-width="15"/>
|
|
94
|
-
<path d="M512 866v37" stroke="#555" stroke-width="5" opacity=".5"/>
|
|
95
|
-
</g>
|
|
96
|
-
|
|
97
|
-
<g filter="url(#railShadow)">
|
|
98
|
-
<circle cx="512" cy="929" r="35" fill="url(#rail)"/>
|
|
99
|
-
<circle cx="512" cy="929" r="20" fill="#fff"/>
|
|
100
|
-
<circle cx="512" cy="929" r="27" fill="none" stroke="#3a3a3a" stroke-width="5" opacity=".75"/>
|
|
101
|
-
</g>
|
|
102
|
-
</svg>
|