@sp-days-framework/docusaurus-plugin-slidev 1.1.0-beta2 → 1.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/docs/advanced-configuration.mdx +103 -24
- package/docs/changelog.mdx +41 -9
- package/docs/install.mdx +28 -19
- package/docs/slide-directory.mdx +184 -0
- package/docs/slidev-link.mdx +40 -0
- package/lib/plugin/builder.d.ts +9 -3
- package/lib/plugin/builder.d.ts.map +1 -1
- package/lib/plugin/builder.js +130 -39
- package/lib/plugin/builder.js.map +1 -1
- package/lib/plugin/index.d.ts.map +1 -1
- package/lib/plugin/index.js +108 -26
- package/lib/plugin/index.js.map +1 -1
- package/lib/plugin/scanner.d.ts +9 -2
- package/lib/plugin/scanner.d.ts.map +1 -1
- package/lib/plugin/scanner.js +180 -29
- package/lib/plugin/scanner.js.map +1 -1
- package/lib/theme/SlidevCard/index.d.ts.map +1 -1
- package/lib/theme/SlidevCard/index.js +1 -2
- package/lib/theme/SlidevCard/index.js.map +1 -1
- package/lib/theme/SlidevCard/styles.module.css +6 -2
- package/lib/theme/SlidevCategoryCard/index.d.ts +11 -0
- package/lib/theme/SlidevCategoryCard/index.d.ts.map +1 -0
- package/lib/theme/SlidevCategoryCard/index.js +31 -0
- package/lib/theme/SlidevCategoryCard/index.js.map +1 -0
- package/lib/theme/SlidevCategoryCard/styles.module.css +158 -0
- package/lib/theme/SlidevLink/index.d.ts +32 -0
- package/lib/theme/SlidevLink/index.d.ts.map +1 -0
- package/lib/theme/SlidevLink/index.js +139 -0
- package/lib/theme/SlidevLink/index.js.map +1 -0
- package/lib/theme/SlidevLink/styles.module.css +228 -0
- package/lib/theme/SlidevListItem/index.d.ts +18 -0
- package/lib/theme/SlidevListItem/index.d.ts.map +1 -0
- package/lib/theme/SlidevListItem/index.js +44 -0
- package/lib/theme/SlidevListItem/index.js.map +1 -0
- package/lib/theme/SlidevListItem/styles.module.css +128 -0
- package/lib/theme/SlidevOverview/index.d.ts +1 -0
- package/lib/theme/SlidevOverview/index.d.ts.map +1 -1
- package/lib/theme/SlidevOverview/index.js +156 -71
- package/lib/theme/SlidevOverview/index.js.map +1 -1
- package/lib/theme/SlidevOverview/styles.module.css +176 -147
- package/lib/types/index.d.ts +85 -6
- package/lib/types/index.d.ts.map +1 -1
- package/lib/utils/fileSystem.d.ts +53 -0
- package/lib/utils/fileSystem.d.ts.map +1 -1
- package/lib/utils/fileSystem.js +151 -0
- package/lib/utils/fileSystem.js.map +1 -1
- package/lib/utils/icons.d.ts +34 -0
- package/lib/utils/icons.d.ts.map +1 -1
- package/lib/utils/icons.js +60 -0
- package/lib/utils/icons.js.map +1 -1
- package/lib/utils/logger.d.ts +11 -2
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +64 -8
- package/lib/utils/logger.js.map +1 -1
- package/package.json +2 -1
- package/publish-package-docs.js +11 -3
package/lib/plugin/scanner.js
CHANGED
|
@@ -10,14 +10,28 @@ exports.scanPresentations = scanPresentations;
|
|
|
10
10
|
const fs_1 = __importDefault(require("fs"));
|
|
11
11
|
const path_1 = __importDefault(require("path"));
|
|
12
12
|
const gray_matter_1 = __importDefault(require("gray-matter"));
|
|
13
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
13
14
|
const logger_1 = require("../utils/logger");
|
|
15
|
+
const fileSystem_1 = require("../utils/fileSystem");
|
|
16
|
+
/**
|
|
17
|
+
* Derives the URL path from the path option
|
|
18
|
+
* e.g., './slidev' -> 'slidev', './presentations' -> 'presentations'
|
|
19
|
+
*/
|
|
20
|
+
function getUrlPathFromPath(pathOption) {
|
|
21
|
+
// Remove leading ./ or / and trailing /
|
|
22
|
+
const normalized = pathOption.replace(/^\.?\//, "").replace(/\/$/, "");
|
|
23
|
+
// Get the last segment (folder name)
|
|
24
|
+
const segments = normalized.split("/");
|
|
25
|
+
return segments[segments.length - 1] || "slidev";
|
|
26
|
+
}
|
|
14
27
|
/**
|
|
15
28
|
* Recursively scans a directory for Slidev markdown files
|
|
16
29
|
* @param dir Directory to scan
|
|
17
30
|
* @param baseDir Base directory for relative path calculation
|
|
18
|
-
* @
|
|
31
|
+
* @param currentCategory Current category path (for nested directories)
|
|
32
|
+
* @returns Array of scanned files with category info
|
|
19
33
|
*/
|
|
20
|
-
function scanDirectory(dir, baseDir) {
|
|
34
|
+
function scanDirectory(dir, baseDir, currentCategory = "") {
|
|
21
35
|
const files = [];
|
|
22
36
|
if (!fs_1.default.existsSync(dir)) {
|
|
23
37
|
return files;
|
|
@@ -30,33 +44,145 @@ function scanDirectory(dir, baseDir) {
|
|
|
30
44
|
if (entry.name === "node_modules" || entry.name.startsWith(".")) {
|
|
31
45
|
continue;
|
|
32
46
|
}
|
|
33
|
-
// Recursively scan subdirectories
|
|
34
|
-
|
|
47
|
+
// Recursively scan subdirectories with updated category path
|
|
48
|
+
const newCategory = currentCategory
|
|
49
|
+
? `${currentCategory}/${entry.name}`
|
|
50
|
+
: entry.name;
|
|
51
|
+
files.push(...scanDirectory(fullPath, baseDir, newCategory));
|
|
35
52
|
}
|
|
36
|
-
else if (entry.isFile() &&
|
|
37
|
-
|
|
53
|
+
else if (entry.isFile() &&
|
|
54
|
+
entry.name.endsWith(".md") &&
|
|
55
|
+
!entry.name.startsWith("_")) {
|
|
56
|
+
// Add markdown files (skip _category_.md and similar)
|
|
38
57
|
const relativePath = path_1.default.relative(baseDir, fullPath);
|
|
39
|
-
files.push(relativePath);
|
|
58
|
+
files.push({ relativePath, category: currentCategory });
|
|
40
59
|
}
|
|
41
60
|
}
|
|
42
61
|
return files;
|
|
43
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Scans for category directories and extracts their metadata
|
|
65
|
+
* @param sourceDir Base source directory
|
|
66
|
+
* @param baseUrl Site base URL
|
|
67
|
+
* @param urlPath URL path derived from path option
|
|
68
|
+
* @param routeBasePath Base route path for category URLs
|
|
69
|
+
* @returns Map of category paths to their metadata
|
|
70
|
+
*/
|
|
71
|
+
function scanCategories(sourceDir, baseUrl, urlPath, routeBasePath) {
|
|
72
|
+
const categories = new Map();
|
|
73
|
+
function scanDir(dir, categoryPath = "") {
|
|
74
|
+
if (!fs_1.default.existsSync(dir))
|
|
75
|
+
return;
|
|
76
|
+
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
77
|
+
for (const entry of entries) {
|
|
78
|
+
if (!entry.isDirectory())
|
|
79
|
+
continue;
|
|
80
|
+
if (entry.name === "node_modules" || entry.name.startsWith("."))
|
|
81
|
+
continue;
|
|
82
|
+
const fullPath = path_1.default.join(dir, entry.name);
|
|
83
|
+
const newCategoryPath = categoryPath
|
|
84
|
+
? `${categoryPath}/${entry.name}`
|
|
85
|
+
: entry.name;
|
|
86
|
+
// Check if this directory contains any .md files (directly or in subdirs)
|
|
87
|
+
const hasMarkdownFiles = checkForMarkdownFiles(fullPath);
|
|
88
|
+
if (hasMarkdownFiles) {
|
|
89
|
+
// Try to read _category_.yml or _category_.json
|
|
90
|
+
const categoryData = readCategoryFile(fullPath);
|
|
91
|
+
// Build category URL
|
|
92
|
+
const normalizedBaseUrl = baseUrl.endsWith("/")
|
|
93
|
+
? baseUrl.slice(0, -1)
|
|
94
|
+
: baseUrl;
|
|
95
|
+
const normalizedRouteBasePath = routeBasePath.startsWith("/")
|
|
96
|
+
? routeBasePath
|
|
97
|
+
: `/${routeBasePath}`;
|
|
98
|
+
const categoryUrl = `${normalizedBaseUrl}${normalizedRouteBasePath}/${newCategoryPath}`;
|
|
99
|
+
categories.set(newCategoryPath, {
|
|
100
|
+
path: newCategoryPath,
|
|
101
|
+
label: categoryData.label || formatDirectoryName(entry.name),
|
|
102
|
+
description: categoryData.description,
|
|
103
|
+
position: categoryData.position ?? 99,
|
|
104
|
+
count: 0, // Will be updated after scanning presentations
|
|
105
|
+
url: categoryUrl,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// Continue scanning subdirectories
|
|
109
|
+
scanDir(fullPath, newCategoryPath);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
scanDir(sourceDir);
|
|
113
|
+
return categories;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if a directory contains any markdown files (recursively)
|
|
117
|
+
*/
|
|
118
|
+
function checkForMarkdownFiles(dir) {
|
|
119
|
+
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
120
|
+
for (const entry of entries) {
|
|
121
|
+
if (entry.isFile() &&
|
|
122
|
+
entry.name.endsWith(".md") &&
|
|
123
|
+
!entry.name.startsWith("_")) {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
if (entry.isDirectory() &&
|
|
127
|
+
!entry.name.startsWith(".") &&
|
|
128
|
+
entry.name !== "node_modules") {
|
|
129
|
+
if (checkForMarkdownFiles(path_1.default.join(dir, entry.name))) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Read _category_.yml or _category_.json from a directory
|
|
138
|
+
*/
|
|
139
|
+
function readCategoryFile(dirPath) {
|
|
140
|
+
const ymlPath = path_1.default.join(dirPath, "_category_.yml");
|
|
141
|
+
const yamlPath = path_1.default.join(dirPath, "_category_.yaml");
|
|
142
|
+
const jsonPath = path_1.default.join(dirPath, "_category_.json");
|
|
143
|
+
try {
|
|
144
|
+
if (fs_1.default.existsSync(ymlPath)) {
|
|
145
|
+
const content = fs_1.default.readFileSync(ymlPath, "utf-8");
|
|
146
|
+
return js_yaml_1.default.load(content) || {};
|
|
147
|
+
}
|
|
148
|
+
if (fs_1.default.existsSync(yamlPath)) {
|
|
149
|
+
const content = fs_1.default.readFileSync(yamlPath, "utf-8");
|
|
150
|
+
return js_yaml_1.default.load(content) || {};
|
|
151
|
+
}
|
|
152
|
+
if (fs_1.default.existsSync(jsonPath)) {
|
|
153
|
+
const content = fs_1.default.readFileSync(jsonPath, "utf-8");
|
|
154
|
+
return JSON.parse(content);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
(0, logger_1.logWarn)(`Failed to read category file in ${(0, logger_1.formatPath)(dirPath)}: ${error}`);
|
|
159
|
+
}
|
|
160
|
+
return {};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Format a directory name into a readable label
|
|
164
|
+
* 'my-category' -> 'My Category'
|
|
165
|
+
* 'module_01' -> 'Module 01'
|
|
166
|
+
*/
|
|
167
|
+
function formatDirectoryName(name) {
|
|
168
|
+
return name
|
|
169
|
+
.replace(/[-_]/g, " ")
|
|
170
|
+
.replace(/\b\w/g, (char) => char.toUpperCase());
|
|
171
|
+
}
|
|
44
172
|
/**
|
|
45
173
|
* Generates a presentation ID from a file path
|
|
174
|
+
* For files in directories, includes the directory path
|
|
46
175
|
* Examples:
|
|
47
176
|
* 'presentation.md' -> 'presentation'
|
|
48
|
-
* '
|
|
49
|
-
* '
|
|
177
|
+
* 'advanced/topic-a.md' -> 'advanced/topic-a'
|
|
178
|
+
* 'workshops/intro/slides.md' -> 'workshops/intro/slides'
|
|
50
179
|
*/
|
|
51
180
|
function generatePresentationId(filePath) {
|
|
52
|
-
// Remove .md extension
|
|
181
|
+
// Remove .md extension and normalize separators
|
|
53
182
|
const withoutExt = filePath.replace(/\.md$/, "");
|
|
54
|
-
// Replace
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
.replace(/\s+/g, "-")
|
|
58
|
-
.toLowerCase();
|
|
59
|
-
return id;
|
|
183
|
+
// Replace backslashes with forward slashes for consistency
|
|
184
|
+
const normalized = withoutExt.replace(/\\/g, "/");
|
|
185
|
+
return normalized;
|
|
60
186
|
}
|
|
61
187
|
/**
|
|
62
188
|
* Extracts frontmatter metadata from a Slidev markdown file
|
|
@@ -76,44 +202,69 @@ function extractMetadata(filePath) {
|
|
|
76
202
|
* Scans for Slidev presentations and extracts metadata
|
|
77
203
|
*/
|
|
78
204
|
async function scanPresentations(options, context) {
|
|
79
|
-
const sourceDir = path_1.default.resolve(context.siteDir, options.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
205
|
+
const sourceDir = path_1.default.resolve(context.siteDir, options.path);
|
|
206
|
+
const urlPath = getUrlPathFromPath(options.path);
|
|
207
|
+
// Scan for categories first
|
|
208
|
+
const categoriesMap = scanCategories(sourceDir, context.baseUrl, urlPath, options.routeBasePath);
|
|
209
|
+
// Scan for markdown files with category info
|
|
210
|
+
const scannedFiles = scanDirectory(sourceDir, sourceDir);
|
|
211
|
+
if (scannedFiles.length === 0) {
|
|
83
212
|
(0, logger_1.logWarn)(`No Slidev presentations found in ${(0, logger_1.formatPath)(sourceDir)}`);
|
|
84
|
-
return [];
|
|
213
|
+
return { presentations: [], categories: [] };
|
|
214
|
+
}
|
|
215
|
+
(0, logger_1.logInfo)(`Found ${(0, logger_1.formatNumber)(scannedFiles.length)} Slidev file(s) in: ${(0, logger_1.formatPath)(sourceDir)}`);
|
|
216
|
+
// Count presentations per category
|
|
217
|
+
const categoryCounts = new Map();
|
|
218
|
+
for (const file of scannedFiles) {
|
|
219
|
+
if (file.category) {
|
|
220
|
+
const count = categoryCounts.get(file.category) || 0;
|
|
221
|
+
categoryCounts.set(file.category, count + 1);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Update category counts
|
|
225
|
+
for (const [categoryPath, count] of categoryCounts) {
|
|
226
|
+
const category = categoriesMap.get(categoryPath);
|
|
227
|
+
if (category) {
|
|
228
|
+
category.count = count;
|
|
229
|
+
}
|
|
85
230
|
}
|
|
86
|
-
(0, logger_1.logInfo)(`Found ${(0, logger_1.formatNumber)(markdownFiles.length)} Slidev file(s) in: ${(0, logger_1.formatPath)(sourceDir)}`);
|
|
87
231
|
// Extract metadata for each file
|
|
88
|
-
const presentations =
|
|
232
|
+
const presentations = scannedFiles.map(({ relativePath, category }) => {
|
|
89
233
|
const sourceAbsolutePath = path_1.default.join(sourceDir, relativePath);
|
|
90
234
|
const id = generatePresentationId(relativePath);
|
|
91
235
|
const frontmatter = extractMetadata(sourceAbsolutePath);
|
|
92
236
|
// Generate title from frontmatter or filename
|
|
93
237
|
const title = frontmatter.title || path_1.default.basename(relativePath, ".md");
|
|
94
|
-
// Generate URL path
|
|
238
|
+
// Generate URL path - preserves directory structure
|
|
95
239
|
const baseUrl = context.baseUrl.endsWith("/")
|
|
96
240
|
? context.baseUrl.slice(0, -1)
|
|
97
241
|
: context.baseUrl;
|
|
98
|
-
const url = `${baseUrl}/${
|
|
99
|
-
// Generate output path
|
|
100
|
-
|
|
242
|
+
const url = `${baseUrl}/${urlPath}/${id}/`;
|
|
243
|
+
// Generate output path in cache directory (hidden from user's workspace)
|
|
244
|
+
// Presentations are built here, then copied to final output in postBuild
|
|
245
|
+
const outputPath = path_1.default.join((0, fileSystem_1.getSlidevBuildOutputDir)(context.siteDir, options.id), id);
|
|
101
246
|
// Generate preview URL - points to the presentation with slide number parameter
|
|
102
247
|
// Slidev supports ?clicks=0 to show first slide without any build steps
|
|
103
|
-
const previewUrl = `${baseUrl}/${
|
|
248
|
+
const previewUrl = `${baseUrl}/${urlPath}/${id}/?clicks=0`;
|
|
104
249
|
return {
|
|
105
250
|
id,
|
|
106
251
|
title,
|
|
107
252
|
description: frontmatter.description,
|
|
108
253
|
theme: frontmatter.theme,
|
|
109
254
|
author: frontmatter.author,
|
|
255
|
+
position: frontmatter.position,
|
|
110
256
|
sourcePath: relativePath,
|
|
111
257
|
sourceAbsolutePath,
|
|
112
258
|
url,
|
|
113
259
|
outputPath,
|
|
114
260
|
previewUrl,
|
|
261
|
+
category,
|
|
115
262
|
};
|
|
116
263
|
});
|
|
117
|
-
|
|
264
|
+
// Convert categories map to array and sort by position
|
|
265
|
+
const categories = Array.from(categoriesMap.values())
|
|
266
|
+
.filter((cat) => cat.count > 0) // Only include categories with presentations
|
|
267
|
+
.sort((a, b) => a.position - b.position);
|
|
268
|
+
return { presentations, categories };
|
|
118
269
|
}
|
|
119
270
|
//# sourceMappingURL=scanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/plugin/scanner.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/plugin/scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/SlidevCard/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAIxD,UAAU,eAAe;IACvB,YAAY,EAAE,oBAAoB,CAAC;IACnC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/SlidevCard/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAIxD,UAAU,eAAe;IACvB,YAAY,EAAE,oBAAoB,CAAC;IACnC,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAwExF"}
|
|
@@ -61,8 +61,7 @@ function SlidevCard({ presentation, isDev }) {
|
|
|
61
61
|
presentation.description && (react_1.default.createElement("p", { className: styles_module_css_1.default.description }, presentation.description)),
|
|
62
62
|
presentation.author && (react_1.default.createElement("div", { className: styles_module_css_1.default.metadata },
|
|
63
63
|
react_1.default.createElement("div", { className: styles_module_css_1.default.metadataItem },
|
|
64
|
-
react_1.default.createElement(
|
|
65
|
-
react_1.default.createElement("path", { d: "M8 8a3 3 0 100-6 3 3 0 000 6zm0 1a6 6 0 00-6 6h12a6 6 0 00-6-6z" })),
|
|
64
|
+
react_1.default.createElement(icons_1.AuthorIcon, { className: styles_module_css_1.default.icon }),
|
|
66
65
|
react_1.default.createElement("span", null, presentation.author)))))));
|
|
67
66
|
// In dev mode, render as a link to the placeholder page
|
|
68
67
|
if (isDev) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/SlidevCard/index.tsx"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/SlidevCard/index.tsx"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYH,6BAwEC;AAlFD,+CAAwC;AAExC,6CAAiE;AACjE,4EAAyC;AAOzC,SAAwB,UAAU,CAAC,EAAE,YAAY,EAAE,KAAK,EAAmB;IACzE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAEjD,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAClB;QACE,uCAAK,SAAS,EAAE,2BAAM,CAAC,OAAO,IAC3B,CAAC,KAAK,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CACnC;YACG,SAAS,IAAI,CACZ,uCAAK,SAAS,EAAE,2BAAM,CAAC,cAAc;gBACnC,uCAAK,SAAS,EAAE,2BAAM,CAAC,OAAO,GAAQ,CAClC,CACP;YACD,0CACE,GAAG,EAAE,YAAY,CAAC,UAAU,EAC5B,SAAS,EAAE,GAAG,2BAAM,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC,CAAC,2BAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,2BAAM,CAAC,mBAAmB,EAAE,EAC5G,KAAK,EAAE,cAAc,YAAY,CAAC,KAAK,EAAE,EACzC,OAAO,EAAC,MAAM,EACd,MAAM,EAAE,gBAAgB,GACxB,CACD,CACJ,CAAC,CAAC,CAAC,CACF,8BAAC,wBAAgB,IAAC,SAAS,EAAE,2BAAM,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,GAAI,CAC5E,CACG;QAEN,uCAAK,SAAS,EAAE,2BAAM,CAAC,OAAO;YAC5B,uCAAK,SAAS,EAAE,2BAAM,CAAC,MAAM;gBAC3B,sCAAI,SAAS,EAAE,2BAAM,CAAC,KAAK,IAAG,YAAY,CAAC,KAAK,CAAM;gBACrD,KAAK,IAAI,wCAAM,SAAS,EAAE,GAAG,2BAAM,CAAC,KAAK,IAAI,2BAAM,CAAC,gBAAgB,EAAE,qBAAuB,CAC1F;YAEL,YAAY,CAAC,WAAW,IAAI,CAC3B,qCAAG,SAAS,EAAE,2BAAM,CAAC,WAAW,IAAG,YAAY,CAAC,WAAW,CAAK,CACjE;YAEA,YAAY,CAAC,MAAM,IAAI,CACtB,uCAAK,SAAS,EAAE,2BAAM,CAAC,QAAQ;gBAC7B,uCAAK,SAAS,EAAE,2BAAM,CAAC,YAAY;oBACjC,8BAAC,kBAAU,IAAC,SAAS,EAAE,2BAAM,CAAC,IAAI,GAAI;oBACtC,4CAAO,YAAY,CAAC,MAAM,CAAQ,CAC9B,CACF,CACP,CACG,CACL,CACJ,CAAC;IAEF,wDAAwD;IACxD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CACL,qCAAG,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,2BAAM,CAAC,IAAI,IAC9C,WAAW,CACV,CACL,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,OAAO,CACL,qCACE,IAAI,EAAE,YAAY,CAAC,GAAG,EACtB,SAAS,EAAE,2BAAM,CAAC,IAAI,EACtB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,IAExB,WAAW,CACV,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
background: var(--ifm-card-background-color);
|
|
10
10
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
|
11
11
|
border: 1px solid var(--ifm-color-emphasis-200);
|
|
12
|
-
width:
|
|
12
|
+
width: 100%;
|
|
13
|
+
max-width: 560px;
|
|
14
|
+
min-width: 400px;
|
|
13
15
|
height: 150px;
|
|
14
16
|
flex-shrink: 0;
|
|
15
17
|
}
|
|
@@ -28,7 +30,7 @@
|
|
|
28
30
|
display: flex;
|
|
29
31
|
align-items: center;
|
|
30
32
|
justify-content: center;
|
|
31
|
-
background: var(--ifm-color-emphasis-
|
|
33
|
+
background: var(--ifm-color-emphasis-200);
|
|
32
34
|
border-radius: 6px;
|
|
33
35
|
align-self: center;
|
|
34
36
|
overflow: hidden;
|
|
@@ -178,6 +180,8 @@
|
|
|
178
180
|
padding: 1rem;
|
|
179
181
|
flex-direction: column;
|
|
180
182
|
width: 100%;
|
|
183
|
+
max-width: 100%;
|
|
184
|
+
min-width: 0;
|
|
181
185
|
height: auto;
|
|
182
186
|
}
|
|
183
187
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SlidevCategoryCard Component
|
|
3
|
+
* Displays a category/folder card for directory groupings
|
|
4
|
+
*/
|
|
5
|
+
import type { CategoryMetadata } from '../../types';
|
|
6
|
+
interface SlidevCategoryCardProps {
|
|
7
|
+
category: CategoryMetadata;
|
|
8
|
+
}
|
|
9
|
+
export default function SlidevCategoryCard({ category }: SlidevCategoryCardProps): JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/SlidevCategoryCard/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,UAAU,uBAAuB;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAyB7F"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SlidevCategoryCard Component
|
|
4
|
+
* Displays a category/folder card for directory groupings
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.default = SlidevCategoryCard;
|
|
11
|
+
const react_1 = __importDefault(require("react"));
|
|
12
|
+
const Link_1 = __importDefault(require("@docusaurus/Link"));
|
|
13
|
+
const icons_1 = require("../../utils/icons");
|
|
14
|
+
const styles_module_css_1 = __importDefault(require("./styles.module.css"));
|
|
15
|
+
function SlidevCategoryCard({ category }) {
|
|
16
|
+
return (react_1.default.createElement(Link_1.default, { to: category.url, className: styles_module_css_1.default.card },
|
|
17
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.bannerWrapper },
|
|
18
|
+
react_1.default.createElement("span", { className: styles_module_css_1.default.banner }, "Folder")),
|
|
19
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.iconContainer },
|
|
20
|
+
react_1.default.createElement(icons_1.FolderIcon, { className: styles_module_css_1.default.folderIcon, width: 92, height: 92 })),
|
|
21
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.content },
|
|
22
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.header },
|
|
23
|
+
react_1.default.createElement("h3", { className: styles_module_css_1.default.title }, category.label)),
|
|
24
|
+
category.description && (react_1.default.createElement("p", { className: styles_module_css_1.default.description }, category.description)),
|
|
25
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.metadata },
|
|
26
|
+
react_1.default.createElement("span", { className: styles_module_css_1.default.badge },
|
|
27
|
+
category.count,
|
|
28
|
+
" presentation",
|
|
29
|
+
category.count !== 1 ? 's' : '')))));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/SlidevCategoryCard/index.tsx"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAYH,qCAyBC;AAnCD,kDAA0B;AAC1B,4DAAoC;AAEpC,6CAA+C;AAC/C,4EAAyC;AAMzC,SAAwB,kBAAkB,CAAC,EAAE,QAAQ,EAA2B;IAC5E,OAAO,CACH,8BAAC,cAAI,IAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,2BAAM,CAAC,IAAI;QAC1C,uCAAK,SAAS,EAAE,2BAAM,CAAC,aAAa;YAChC,wCAAM,SAAS,EAAE,2BAAM,CAAC,MAAM,aAAe,CAC3C;QACN,uCAAK,SAAS,EAAE,2BAAM,CAAC,aAAa;YAChC,8BAAC,kBAAU,IAAC,SAAS,EAAE,2BAAM,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI,CACjE;QAEN,uCAAK,SAAS,EAAE,2BAAM,CAAC,OAAO;YAC1B,uCAAK,SAAS,EAAE,2BAAM,CAAC,MAAM;gBACzB,sCAAI,SAAS,EAAE,2BAAM,CAAC,KAAK,IAAG,QAAQ,CAAC,KAAK,CAAM,CAChD;YAEL,QAAQ,CAAC,WAAW,IAAI,CACrB,qCAAG,SAAS,EAAE,2BAAM,CAAC,WAAW,IAAG,QAAQ,CAAC,WAAW,CAAK,CAC/D;YAED,uCAAK,SAAS,EAAE,2BAAM,CAAC,QAAQ;gBAC3B,wCAAM,SAAS,EAAE,2BAAM,CAAC,KAAK;oBAAG,QAAQ,CAAC,KAAK;;oBAAe,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAQ,CAClG,CACJ,CACH,CACV,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
.card {
|
|
2
|
+
position: relative;
|
|
3
|
+
overflow: hidden;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: row;
|
|
6
|
+
gap: 1rem;
|
|
7
|
+
padding: 1rem;
|
|
8
|
+
border-radius: 8px;
|
|
9
|
+
transition: all 0.3s ease;
|
|
10
|
+
text-decoration: none !important;
|
|
11
|
+
background: var(--ifm-card-background-color);
|
|
12
|
+
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
|
13
|
+
border: 1px solid var(--ifm-color-primary-darkest);
|
|
14
|
+
width: 100%;
|
|
15
|
+
max-width: 560px;
|
|
16
|
+
min-width: 400px;
|
|
17
|
+
height: 150px;
|
|
18
|
+
flex-shrink: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Diagonal banner in top-left corner */
|
|
22
|
+
.bannerWrapper {
|
|
23
|
+
position: absolute;
|
|
24
|
+
top: 0;
|
|
25
|
+
left: 0;
|
|
26
|
+
width: 100px;
|
|
27
|
+
height: 100px;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
pointer-events: none;
|
|
30
|
+
z-index: 1;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.banner {
|
|
34
|
+
position: absolute;
|
|
35
|
+
top: 15px;
|
|
36
|
+
left: -25px;
|
|
37
|
+
width: 116px;
|
|
38
|
+
padding: 2px 0;
|
|
39
|
+
background: var(--ifm-color-primary-light);
|
|
40
|
+
color: var(--ifm-color-primary-contrast-background);
|
|
41
|
+
font-size: 0.7rem;
|
|
42
|
+
font-weight: 700;
|
|
43
|
+
text-align: center;
|
|
44
|
+
text-transform: uppercase;
|
|
45
|
+
letter-spacing: 0.5px;
|
|
46
|
+
transform: rotate(-37deg);
|
|
47
|
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.card:hover {
|
|
51
|
+
transform: translateY(-4px);
|
|
52
|
+
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
|
|
53
|
+
text-decoration: none;
|
|
54
|
+
border-color: var(--ifm-color-primary);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.iconContainer {
|
|
58
|
+
flex-shrink: 0;
|
|
59
|
+
height: 115px;
|
|
60
|
+
width: 204px;
|
|
61
|
+
display: flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
justify-content: center;
|
|
64
|
+
/* background: var(--ifm-color-emphasis-100); */
|
|
65
|
+
border-radius: 6px;
|
|
66
|
+
align-self: center;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.folderIcon {
|
|
70
|
+
color: var(--ifm-color-primary);
|
|
71
|
+
/* opacity: 0.8; */
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.content {
|
|
75
|
+
flex-grow: 1;
|
|
76
|
+
min-width: 0;
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
overflow: hidden;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.header {
|
|
83
|
+
display: flex;
|
|
84
|
+
align-items: flex-start;
|
|
85
|
+
justify-content: space-between;
|
|
86
|
+
margin-bottom: 0.5rem;
|
|
87
|
+
gap: 0.5rem;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.title {
|
|
91
|
+
margin: 0;
|
|
92
|
+
font-size: 1.1rem;
|
|
93
|
+
font-weight: 600;
|
|
94
|
+
color: var(--ifm-color-primary);
|
|
95
|
+
flex-grow: 1;
|
|
96
|
+
/* Truncate to single line */
|
|
97
|
+
overflow: hidden;
|
|
98
|
+
text-overflow: ellipsis;
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.badge {
|
|
103
|
+
display: inline-flex;
|
|
104
|
+
align-items: center;
|
|
105
|
+
padding: 0.2rem 0.6rem;
|
|
106
|
+
border-radius: 12px;
|
|
107
|
+
font-size: 0.7rem;
|
|
108
|
+
font-weight: 500;
|
|
109
|
+
background: var(--ifm-color-primary-light);
|
|
110
|
+
color: var(--ifm-color-primary-contrast-background);
|
|
111
|
+
white-space: nowrap;
|
|
112
|
+
flex-shrink: 0;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.metadata {
|
|
116
|
+
display: flex;
|
|
117
|
+
align-items: center;
|
|
118
|
+
gap: 0.75rem;
|
|
119
|
+
font-size: 0.85rem;
|
|
120
|
+
color: var(--ifm-color-emphasis-600);
|
|
121
|
+
margin-top: auto;
|
|
122
|
+
min-height: 1.5rem;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.description {
|
|
126
|
+
margin-bottom: 0.5rem;
|
|
127
|
+
color: var(--ifm-color-emphasis-700);
|
|
128
|
+
font-size: 0.9rem;
|
|
129
|
+
line-height: 1.5;
|
|
130
|
+
/* Truncate to max 2 lines */
|
|
131
|
+
display: -webkit-box;
|
|
132
|
+
-webkit-box-orient: vertical;
|
|
133
|
+
-webkit-line-clamp: 2;
|
|
134
|
+
line-clamp: 2;
|
|
135
|
+
overflow: hidden;
|
|
136
|
+
text-overflow: ellipsis;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@media (max-width: 768px) {
|
|
140
|
+
.card {
|
|
141
|
+
padding: 1rem;
|
|
142
|
+
flex-direction: column;
|
|
143
|
+
width: 100%;
|
|
144
|
+
max-width: 100%;
|
|
145
|
+
min-width: 0;
|
|
146
|
+
height: auto;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.iconContainer {
|
|
150
|
+
width: 100%;
|
|
151
|
+
height: 80px;
|
|
152
|
+
align-self: stretch;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.title {
|
|
156
|
+
font-size: 1rem;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SlidevLink Component
|
|
3
|
+
* Embeddable slide preview component for use in MDX documentation
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```mdx
|
|
7
|
+
* import SlidevLink from '@theme/SlidevLink';
|
|
8
|
+
*
|
|
9
|
+
* <SlidevLink link="/slides/module-01-introduction" />
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export interface SlidevLinkProps {
|
|
13
|
+
/**
|
|
14
|
+
* URL path to the presentation (relative or absolute)
|
|
15
|
+
* Must match the generated presentation URL
|
|
16
|
+
* Example: "/slides/module-01-introduction"
|
|
17
|
+
* For multi-instance: "/workshop-slides/intro"
|
|
18
|
+
*/
|
|
19
|
+
link: string;
|
|
20
|
+
/**
|
|
21
|
+
* Card width
|
|
22
|
+
* @default '550px'
|
|
23
|
+
*/
|
|
24
|
+
width?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Plugin ID for multi-instance setups
|
|
27
|
+
* @default 'default'
|
|
28
|
+
*/
|
|
29
|
+
pluginId?: string;
|
|
30
|
+
}
|
|
31
|
+
export default function SlidevLink({ link, width, pluginId }: SlidevLinkProps): JSX.Element;
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/SlidevLink/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,MAAM,WAAW,eAAe;IAC5B;;;;;OAKG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAmED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,IAAI,EACJ,KAAe,EACf,QAAQ,EACX,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CA6E/B"}
|