create-marp-presentation 1.1.0 → 1.2.1
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 +45 -37
- package/cli/commands/add-themes-cli.js +85 -0
- package/cli/commands/create-project.js +199 -0
- package/cli/utils/file-utils.js +106 -0
- package/cli/utils/prompt-utils.js +89 -0
- package/docs/plans/2025-02-19-marp-template-design.md +207 -0
- package/docs/plans/2025-02-19-marp-template-implementation.md +848 -0
- package/docs/plans/2026-02-20-example-slides-design.md +179 -0
- package/docs/plans/2026-02-20-example-slides-implementation.md +811 -0
- package/docs/plans/2026-02-23-theme-management-design.md +836 -0
- package/docs/plans/2026-02-23-theme-management-implementation.md +3585 -0
- package/docs/plans/2026-02-26-theme-addition-refactoring-design.md +172 -0
- package/docs/plans/2026-02-26-theme-addition-refactoring.md +456 -0
- package/docs/plans/2026-02-27-theme-add-fix-design.md +136 -0
- package/docs/plans/2026-02-27-theme-add-fix.md +353 -0
- package/docs/plans/TODO.md +5 -0
- package/docs/reqs/themes-requirements.md +49 -0
- package/docs/theme-management.md +261 -0
- package/index.js +111 -164
- package/lib/add-themes-command.js +381 -0
- package/lib/errors.js +62 -0
- package/lib/frontmatter.js +71 -0
- package/lib/prompts.js +222 -0
- package/lib/theme-manager.js +238 -0
- package/lib/theme-resolver.js +227 -0
- package/lib/vscode-integration.js +198 -0
- package/package.json +15 -5
- package/template/README.md +28 -17
- package/template/package.json +13 -1
- package/template/scripts/theme-cli.js +248 -0
- package/themes/beam/beam.css +141 -0
- package/themes/default-clean/default-clean.css +57 -0
- package/themes/gaia-dark/gaia-dark.css +27 -0
- package/themes/marpx/marpx.css +1735 -0
- package/themes/marpx/socrates.css +105 -0
- package/themes/uncover-minimal/uncover-minimal.css +22 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Design: Опциональные примеры слайдов для Marp-шаблона
|
|
2
|
+
|
|
3
|
+
**Дата:** 2026-02-20
|
|
4
|
+
**Статус:** Approved
|
|
5
|
+
|
|
6
|
+
## Обзор
|
|
7
|
+
|
|
8
|
+
Добавить опциональный файл с примерами слайдов, демонстрирующими все возможности Marp. Пользователь выбирает при создании проекта — создавать ли файл с примерами.
|
|
9
|
+
|
|
10
|
+
## Архитектура
|
|
11
|
+
|
|
12
|
+
### Структура файлов
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
marp-presentation-template/
|
|
16
|
+
├── index.js # + интерактивный запрос + условное копирование
|
|
17
|
+
├── template/ # базовый шаблон (копируется всегда)
|
|
18
|
+
│ ├── presentation.md
|
|
19
|
+
│ ├── marp.config.js
|
|
20
|
+
│ ├── package.json
|
|
21
|
+
│ ├── static/
|
|
22
|
+
│ └── scripts/
|
|
23
|
+
├── template-optional/ # опциональные файлы
|
|
24
|
+
│ ├── examples.md # копируется при запросе
|
|
25
|
+
│ └── static/ # демо-изображения для examples
|
|
26
|
+
│ └── demo-image.png # минималистичное демо-изображение
|
|
27
|
+
└── package.json # files: ["index.js", "template/", "template-optional/"]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Принцип
|
|
31
|
+
|
|
32
|
+
- `template/` — базовый шаблон, копируется всегда
|
|
33
|
+
- `template-optional/` — опциональные файлы, копируются только при согласии пользователя
|
|
34
|
+
- Масштабируемо: в будущем можно добавить другие опциональные файлы
|
|
35
|
+
|
|
36
|
+
## CLI изменения (index.js)
|
|
37
|
+
|
|
38
|
+
### Новый flow
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
валидация имени → запрос примеров → создание папки
|
|
42
|
+
→ копирование template/
|
|
43
|
+
→ (если да) копирование template-optional/
|
|
44
|
+
→ npm install
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Реализация запроса
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
const readline = require('readline');
|
|
51
|
+
|
|
52
|
+
async function askCreateExamples() {
|
|
53
|
+
// Неинтерактивный режим — по умолчанию создаём примеры
|
|
54
|
+
if (!process.stdin.isTTY) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const rl = readline.createInterface({
|
|
59
|
+
input: process.stdin,
|
|
60
|
+
output: process.stdout
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return new Promise((resolve) => {
|
|
64
|
+
rl.question('Create example slides file? (Y/n) ', (answer) => {
|
|
65
|
+
rl.close();
|
|
66
|
+
const normalized = answer.toLowerCase().trim();
|
|
67
|
+
resolve(normalized !== 'n' && normalized !== 'no');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Копирование опциональных файлов
|
|
74
|
+
|
|
75
|
+
```javascript
|
|
76
|
+
if (createExamples) {
|
|
77
|
+
// Копируем examples.md
|
|
78
|
+
fs.copyFileSync(
|
|
79
|
+
path.join(__dirname, 'template-optional', 'examples.md'),
|
|
80
|
+
path.join(projectPath, 'examples.md')
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
// Копируем демо-изображение в static/
|
|
84
|
+
const demoImageSrc = path.join(__dirname, 'template-optional', 'static', 'demo-image.png');
|
|
85
|
+
const demoImageDest = path.join(projectPath, 'static', 'demo-image.png');
|
|
86
|
+
fs.copyFileSync(demoImageSrc, demoImageDest);
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Вывод в консоль
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
Creating Marp presentation: my-project
|
|
94
|
+
|
|
95
|
+
Create example slides file? (Y/n) y
|
|
96
|
+
|
|
97
|
+
✓ Project created
|
|
98
|
+
✓ Example slides added
|
|
99
|
+
✓ Demo image added to static/
|
|
100
|
+
|
|
101
|
+
Installing dependencies...
|
|
102
|
+
✓ Dependencies installed
|
|
103
|
+
|
|
104
|
+
Next steps:
|
|
105
|
+
cd my-slides
|
|
106
|
+
npm run dev # preview presentation.md
|
|
107
|
+
marp examples.md # preview examples.md
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Структура examples.md
|
|
111
|
+
|
|
112
|
+
**13 слайдов-примеров:**
|
|
113
|
+
|
|
114
|
+
| # | Слайд | Демонстрирует |
|
|
115
|
+
|---|-------|---------------|
|
|
116
|
+
| 1 | Титульный | Титульный слайд, theme, paginate |
|
|
117
|
+
| 2 | Оглавление | Автоматическое оглавление Marp |
|
|
118
|
+
| 3 | Базовое форматирование | Заголовки, **жирный**, *курсив*, ~~зачёркнутый~~, `inline code` |
|
|
119
|
+
| 4 | Списки | Маркированные, нумерованные, вложенные |
|
|
120
|
+
| 5 | Цитаты и сноски | > Блок-цитаты, [^1] сноски |
|
|
121
|
+
| 6 | Код | Блоки кода с подсветкой (JS, Python, Bash) |
|
|
122
|
+
| 7 | Таблицы | Простая и сложная таблица |
|
|
123
|
+
| 8 | Формулы LaTeX | Inline `$...$`, блоки `$$...$$`, уравнения |
|
|
124
|
+
| 9 | Изображения | Вставка, размеры, позиционирование |
|
|
125
|
+
| 10 | Многоколоночный layout | `<div class="columns">` или HTML-таблицы |
|
|
126
|
+
| 11 | Фоны и стилизация | `<!-- _backgroundColor: -->`, gradient, background-image |
|
|
127
|
+
| 12 | Фрагменты (анимация) | `* item` — пошаговое появление |
|
|
128
|
+
| 13 | Контакты / Q&A | Финальный слайд |
|
|
129
|
+
|
|
130
|
+
## Демо-изображение
|
|
131
|
+
|
|
132
|
+
- Минималистичная графика (геометрические фигуры, абстрактный паттерн)
|
|
133
|
+
- Размер: ~800x400px, оптимизированный PNG
|
|
134
|
+
- Назначение: демонстрация вставки изображений в слайдах
|
|
135
|
+
|
|
136
|
+
## Обработка ошибок
|
|
137
|
+
|
|
138
|
+
### Неинтерактивный режим (CI/CD, скрипты)
|
|
139
|
+
|
|
140
|
+
- Если `process.stdin.isTTY === false` — создаём примеры по умолчанию
|
|
141
|
+
- Это позволяет использовать CLI в пайплайнах без зависания
|
|
142
|
+
|
|
143
|
+
### Пользовательский ввод
|
|
144
|
+
|
|
145
|
+
- `y`, `Y`, `yes`, `YES`, пустой ввод (Enter) → создаём примеры
|
|
146
|
+
- `n`, `N`, `no`, `NO` → пропускаем примеры
|
|
147
|
+
- Любой другой ввод → создаём примеры (безопасное значение по умолчанию)
|
|
148
|
+
|
|
149
|
+
### Обработка отсутствия файла
|
|
150
|
+
|
|
151
|
+
- Если `template-optional/examples.md` не найден — предупреждение, но продолжаем без краха
|
|
152
|
+
- Логируем ошибку, но не прерываем создание проекта
|
|
153
|
+
|
|
154
|
+
## Итоговая структура проекта пользователя
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
my-slides/
|
|
158
|
+
├── presentation.md # рабочий шаблон
|
|
159
|
+
├── examples.md # справочник возможностей Marp
|
|
160
|
+
├── static/
|
|
161
|
+
│ ├── .gitkeep
|
|
162
|
+
│ └── demo-image.png # для демонстрации изображений
|
|
163
|
+
├── marp.config.js
|
|
164
|
+
├── package.json
|
|
165
|
+
└── scripts/
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Файлы для изменения
|
|
169
|
+
|
|
170
|
+
1. **Создать:**
|
|
171
|
+
- `template-optional/examples.md` — примеры слайдов
|
|
172
|
+
- `template-optional/static/demo-image.png` — демо-изображение
|
|
173
|
+
|
|
174
|
+
2. **Изменить:**
|
|
175
|
+
- `index.js` — добавить интерактивный запрос и условное копирование
|
|
176
|
+
- `package.json` — обновить поле `files`
|
|
177
|
+
|
|
178
|
+
3. **Не изменять:**
|
|
179
|
+
- `template/` — остаётся без изменений
|