@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
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SlidevLink Component
|
|
4
|
+
* Embeddable slide preview component for use in MDX documentation
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* ```mdx
|
|
8
|
+
* import SlidevLink from '@theme/SlidevLink';
|
|
9
|
+
*
|
|
10
|
+
* <SlidevLink link="/slides/module-01-introduction" />
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.default = SlidevLink;
|
|
51
|
+
const react_1 = __importStar(require("react"));
|
|
52
|
+
const useGlobalData_1 = require("@docusaurus/useGlobalData");
|
|
53
|
+
const icons_1 = require("../../utils/icons");
|
|
54
|
+
const styles_module_css_1 = __importDefault(require("./styles.module.css"));
|
|
55
|
+
/**
|
|
56
|
+
* Normalize URL path for comparison
|
|
57
|
+
* Handles trailing slashes and leading slashes consistently
|
|
58
|
+
*/
|
|
59
|
+
function normalizePath(url) {
|
|
60
|
+
// Remove trailing slash if present
|
|
61
|
+
let normalized = url.endsWith('/') ? url.slice(0, -1) : url;
|
|
62
|
+
// Ensure leading slash
|
|
63
|
+
if (!normalized.startsWith('/')) {
|
|
64
|
+
normalized = '/' + normalized;
|
|
65
|
+
}
|
|
66
|
+
return normalized.toLowerCase();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Find a presentation by URL across all plugin instances
|
|
70
|
+
*/
|
|
71
|
+
function findPresentationByUrl(link, pluginId) {
|
|
72
|
+
const normalizedLink = normalizePath(link);
|
|
73
|
+
try {
|
|
74
|
+
// Try specific plugin ID first
|
|
75
|
+
const dataKey = pluginId
|
|
76
|
+
? `docusaurus-plugin-slidev-${pluginId}`
|
|
77
|
+
: 'docusaurus-plugin-slidev';
|
|
78
|
+
// Try to get plugin data - this may throw if not found
|
|
79
|
+
const data = (0, useGlobalData_1.usePluginData)(dataKey);
|
|
80
|
+
if (data?.presentations) {
|
|
81
|
+
const found = data.presentations.find(p => normalizePath(p.url) === normalizedLink);
|
|
82
|
+
if (found) {
|
|
83
|
+
return { presentation: found, isDev: data.isDev };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Plugin data not found for specified ID
|
|
89
|
+
}
|
|
90
|
+
// Try default plugin ID if a specific one was requested but not found
|
|
91
|
+
if (pluginId && pluginId !== 'default') {
|
|
92
|
+
try {
|
|
93
|
+
const data = (0, useGlobalData_1.usePluginData)('docusaurus-plugin-slidev');
|
|
94
|
+
if (data?.presentations) {
|
|
95
|
+
const found = data.presentations.find(p => normalizePath(p.url) === normalizedLink);
|
|
96
|
+
if (found) {
|
|
97
|
+
return { presentation: found, isDev: data.isDev };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Default plugin also not found
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return { presentation: null, isDev: false };
|
|
106
|
+
}
|
|
107
|
+
function SlidevLink({ link, width = '550px', pluginId }) {
|
|
108
|
+
const [isLoading, setIsLoading] = (0, react_1.useState)(true);
|
|
109
|
+
const { presentation, isDev } = findPresentationByUrl(link, pluginId);
|
|
110
|
+
const handleIframeLoad = () => {
|
|
111
|
+
setIsLoading(false);
|
|
112
|
+
};
|
|
113
|
+
// Error state - presentation not found
|
|
114
|
+
if (!presentation) {
|
|
115
|
+
return (react_1.default.createElement("div", { className: styles_module_css_1.default.errorCard, style: { width } },
|
|
116
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.errorPreview },
|
|
117
|
+
react_1.default.createElement("svg", { className: styles_module_css_1.default.errorIcon, viewBox: "0 0 24 24", fill: "currentColor" },
|
|
118
|
+
react_1.default.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" }))),
|
|
119
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.errorContent },
|
|
120
|
+
react_1.default.createElement("h4", { className: styles_module_css_1.default.errorTitle }, "Presentation Not Found"),
|
|
121
|
+
react_1.default.createElement("p", { className: styles_module_css_1.default.errorMessage },
|
|
122
|
+
react_1.default.createElement("code", { className: styles_module_css_1.default.errorPath }, link),
|
|
123
|
+
react_1.default.createElement("br", null),
|
|
124
|
+
"is not available"))));
|
|
125
|
+
}
|
|
126
|
+
const cardContent = (react_1.default.createElement(react_1.default.Fragment, null,
|
|
127
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.preview }, !isDev && presentation.previewUrl ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
128
|
+
isLoading && (react_1.default.createElement("div", { className: styles_module_css_1.default.previewLoading },
|
|
129
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.spinner }))),
|
|
130
|
+
react_1.default.createElement("iframe", { src: presentation.previewUrl, className: `${styles_module_css_1.default.previewIframe} ${isLoading ? styles_module_css_1.default.previewIframeLoading : styles_module_css_1.default.previewIframeLoaded}`, title: `Preview of ${presentation.title}`, loading: "lazy", onLoad: handleIframeLoad }))) : (react_1.default.createElement(icons_1.PresentationIcon, { className: styles_module_css_1.default.previewIcon, width: 120, height: 67 }))),
|
|
131
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.content },
|
|
132
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.header },
|
|
133
|
+
react_1.default.createElement("h4", { className: styles_module_css_1.default.title }, presentation.title),
|
|
134
|
+
isDev && react_1.default.createElement("span", { className: styles_module_css_1.default.badge }, "Build Required")),
|
|
135
|
+
presentation.description && (react_1.default.createElement("p", { className: styles_module_css_1.default.description }, presentation.description)))));
|
|
136
|
+
// Render as clickable card
|
|
137
|
+
return (react_1.default.createElement("a", { href: presentation.url, className: styles_module_css_1.default.card, style: { width }, target: "_blank", rel: "noopener noreferrer" }, cardContent));
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/SlidevLink/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SlidevLink Component Styles
|
|
3
|
+
* Reuses design patterns from SlidevCard with some adjustments for inline use
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
.card {
|
|
7
|
+
display: inline-flex;
|
|
8
|
+
flex-direction: row;
|
|
9
|
+
gap: 0.75rem;
|
|
10
|
+
padding: 0.75rem;
|
|
11
|
+
border-radius: 8px;
|
|
12
|
+
transition: all 0.2s ease;
|
|
13
|
+
text-decoration: none !important;
|
|
14
|
+
background: var(--ifm-card-background-color);
|
|
15
|
+
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.08);
|
|
16
|
+
border: 1px solid var(--ifm-color-emphasis-200);
|
|
17
|
+
max-width: 100%;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.card:hover {
|
|
21
|
+
transform: translateY(-2px);
|
|
22
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
|
|
23
|
+
text-decoration: none;
|
|
24
|
+
border-color: var(--ifm-color-primary);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.preview {
|
|
28
|
+
flex-shrink: 0;
|
|
29
|
+
height: 80px;
|
|
30
|
+
width: 142px;
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
background: var(--ifm-color-emphasis-100);
|
|
35
|
+
border-radius: 4px;
|
|
36
|
+
align-self: center;
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
position: relative;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.previewLoading {
|
|
42
|
+
position: absolute;
|
|
43
|
+
top: 0;
|
|
44
|
+
left: 0;
|
|
45
|
+
right: 0;
|
|
46
|
+
bottom: 0;
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
background: var(--ifm-color-emphasis-100);
|
|
51
|
+
z-index: 1;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.spinner {
|
|
55
|
+
width: 20px;
|
|
56
|
+
height: 20px;
|
|
57
|
+
border: 2px solid var(--ifm-color-emphasis-300);
|
|
58
|
+
border-top-color: var(--ifm-color-primary);
|
|
59
|
+
border-radius: 50%;
|
|
60
|
+
animation: spin 0.8s linear infinite;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@keyframes spin {
|
|
64
|
+
to {
|
|
65
|
+
transform: rotate(360deg);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.previewIframe {
|
|
70
|
+
width: 960px;
|
|
71
|
+
height: 540px;
|
|
72
|
+
border: none;
|
|
73
|
+
position: absolute;
|
|
74
|
+
top: 50%;
|
|
75
|
+
left: 50%;
|
|
76
|
+
transform: translate(-50%, -50%) scale(0.15);
|
|
77
|
+
transform-origin: center center;
|
|
78
|
+
pointer-events: none;
|
|
79
|
+
background: white;
|
|
80
|
+
border-radius: 4px;
|
|
81
|
+
transition: opacity 0.3s ease;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.previewIframeLoading {
|
|
85
|
+
opacity: 0;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.previewIframeLoaded {
|
|
89
|
+
opacity: 1;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.previewIcon {
|
|
93
|
+
color: var(--ifm-color-primary);
|
|
94
|
+
opacity: 0.6;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.content {
|
|
98
|
+
flex-grow: 1;
|
|
99
|
+
min-width: 0;
|
|
100
|
+
display: flex;
|
|
101
|
+
flex-direction: column;
|
|
102
|
+
justify-content: center;
|
|
103
|
+
overflow: hidden;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.header {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
gap: 0.5rem;
|
|
110
|
+
margin-bottom: 0.25rem;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.title {
|
|
114
|
+
margin: 0;
|
|
115
|
+
font-size: 0.95rem;
|
|
116
|
+
font-weight: 600;
|
|
117
|
+
color: var(--ifm-color-primary);
|
|
118
|
+
flex-grow: 1;
|
|
119
|
+
overflow: hidden;
|
|
120
|
+
text-overflow: ellipsis;
|
|
121
|
+
white-space: nowrap;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.badge {
|
|
125
|
+
display: inline-flex;
|
|
126
|
+
align-items: center;
|
|
127
|
+
padding: 0.15rem 0.5rem;
|
|
128
|
+
border-radius: 10px;
|
|
129
|
+
font-size: 0.65rem;
|
|
130
|
+
font-weight: 500;
|
|
131
|
+
background: var(--ifm-color-warning-contrast-background);
|
|
132
|
+
color: var(--ifm-color-warning-contrast-foreground);
|
|
133
|
+
white-space: nowrap;
|
|
134
|
+
flex-shrink: 0;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.description {
|
|
138
|
+
margin: 0;
|
|
139
|
+
color: var(--ifm-color-emphasis-700);
|
|
140
|
+
font-size: 0.8rem;
|
|
141
|
+
line-height: 1.4;
|
|
142
|
+
display: -webkit-box;
|
|
143
|
+
-webkit-box-orient: vertical;
|
|
144
|
+
-webkit-line-clamp: 2;
|
|
145
|
+
line-clamp: 2;
|
|
146
|
+
overflow: hidden;
|
|
147
|
+
text-overflow: ellipsis;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* Error State Styles */
|
|
151
|
+
.errorCard {
|
|
152
|
+
display: inline-flex;
|
|
153
|
+
flex-direction: row;
|
|
154
|
+
gap: 0.75rem;
|
|
155
|
+
padding: 0.75rem;
|
|
156
|
+
border-radius: 8px;
|
|
157
|
+
background: var(--ifm-color-danger-contrast-background);
|
|
158
|
+
border: 1px solid var(--ifm-color-danger-dark);
|
|
159
|
+
max-width: 100%;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.errorPreview {
|
|
163
|
+
flex-shrink: 0;
|
|
164
|
+
height: 80px;
|
|
165
|
+
width: 142px;
|
|
166
|
+
display: flex;
|
|
167
|
+
align-items: center;
|
|
168
|
+
justify-content: center;
|
|
169
|
+
background: rgba(var(--ifm-color-danger-rgb), 0.1);
|
|
170
|
+
border-radius: 4px;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.errorIcon {
|
|
174
|
+
width: 40px;
|
|
175
|
+
height: 40px;
|
|
176
|
+
color: var(--ifm-color-danger-dark);
|
|
177
|
+
opacity: 0.8;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.errorContent {
|
|
181
|
+
flex-grow: 1;
|
|
182
|
+
min-width: 0;
|
|
183
|
+
display: flex;
|
|
184
|
+
flex-direction: column;
|
|
185
|
+
justify-content: center;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.errorTitle {
|
|
189
|
+
margin: 0 0 0.25rem 0;
|
|
190
|
+
font-size: 0.95rem;
|
|
191
|
+
font-weight: 600;
|
|
192
|
+
color: var(--ifm-color-danger-darkest);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.errorMessage {
|
|
196
|
+
margin: 0;
|
|
197
|
+
font-size: 0.8rem;
|
|
198
|
+
color: var(--ifm-color-danger-dark);
|
|
199
|
+
line-height: 1.4;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.errorPath {
|
|
203
|
+
font-size: 0.75rem;
|
|
204
|
+
background: rgba(var(--ifm-color-danger-rgb), 0.1);
|
|
205
|
+
padding: 0.1rem 0.3rem;
|
|
206
|
+
border-radius: 3px;
|
|
207
|
+
word-break: break-all;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/* Responsive adjustments */
|
|
211
|
+
@media (max-width: 480px) {
|
|
212
|
+
.card,
|
|
213
|
+
.errorCard {
|
|
214
|
+
flex-direction: column;
|
|
215
|
+
width: 100% !important;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.preview,
|
|
219
|
+
.errorPreview {
|
|
220
|
+
width: 100%;
|
|
221
|
+
height: auto;
|
|
222
|
+
aspect-ratio: 16 / 9;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.previewIframe {
|
|
226
|
+
transform: translate(-50%, -50%) scale(calc(100% / 960 * 0.95));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SlidevListItem Component
|
|
3
|
+
* Displays a single item (presentation or category) in list/details view
|
|
4
|
+
*/
|
|
5
|
+
import type { PresentationMetadata, CategoryMetadata } from '../../types';
|
|
6
|
+
interface PresentationListItemProps {
|
|
7
|
+
type: 'presentation';
|
|
8
|
+
presentation: PresentationMetadata;
|
|
9
|
+
isDev: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface CategoryListItemProps {
|
|
12
|
+
type: 'category';
|
|
13
|
+
category: CategoryMetadata;
|
|
14
|
+
}
|
|
15
|
+
type SlidevListItemProps = PresentationListItemProps | CategoryListItemProps;
|
|
16
|
+
export default function SlidevListItem(props: SlidevListItemProps): JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/SlidevListItem/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI1E,UAAU,yBAAyB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,EAAE,oBAAoB,CAAC;IACnC,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,qBAAqB;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;CAC9B;AAED,KAAK,mBAAmB,GAAG,yBAAyB,GAAG,qBAAqB,CAAC;AAE7E,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CA8D9E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SlidevListItem Component
|
|
4
|
+
* Displays a single item (presentation or category) in list/details view
|
|
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 = SlidevListItem;
|
|
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 SlidevListItem(props) {
|
|
16
|
+
if (props.type === 'category') {
|
|
17
|
+
const { category } = props;
|
|
18
|
+
return (react_1.default.createElement(Link_1.default, { to: category.url, className: `${styles_module_css_1.default.listItem} ${styles_module_css_1.default.categoryItem}` },
|
|
19
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.titleSection },
|
|
20
|
+
react_1.default.createElement(icons_1.FolderIcon, { className: styles_module_css_1.default.icon, width: 18, height: 18 }),
|
|
21
|
+
react_1.default.createElement("span", { className: styles_module_css_1.default.title }, category.label)),
|
|
22
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.descriptionSection }, category.description || '—'),
|
|
23
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.metaSection },
|
|
24
|
+
react_1.default.createElement("span", { className: styles_module_css_1.default.badge },
|
|
25
|
+
category.count,
|
|
26
|
+
" presentation",
|
|
27
|
+
category.count !== 1 ? 's' : ''))));
|
|
28
|
+
}
|
|
29
|
+
const { presentation, isDev } = props;
|
|
30
|
+
const content = (react_1.default.createElement(react_1.default.Fragment, null,
|
|
31
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.titleSection },
|
|
32
|
+
react_1.default.createElement(icons_1.PresentationIcon, { className: styles_module_css_1.default.icon, width: 18, height: 18 }),
|
|
33
|
+
react_1.default.createElement("span", { className: styles_module_css_1.default.title }, presentation.title),
|
|
34
|
+
isDev && react_1.default.createElement("span", { className: styles_module_css_1.default.devBadge }, "Build Required")),
|
|
35
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.descriptionSection }, presentation.description || '—'),
|
|
36
|
+
react_1.default.createElement("div", { className: styles_module_css_1.default.metaSection }, presentation.author && (react_1.default.createElement("div", { className: styles_module_css_1.default.author },
|
|
37
|
+
react_1.default.createElement(icons_1.AuthorIcon, { className: styles_module_css_1.default.authorIcon, width: 14, height: 14 }),
|
|
38
|
+
react_1.default.createElement("span", null, presentation.author))))));
|
|
39
|
+
if (isDev) {
|
|
40
|
+
return (react_1.default.createElement("a", { href: presentation.url, className: styles_module_css_1.default.listItem }, content));
|
|
41
|
+
}
|
|
42
|
+
return (react_1.default.createElement("a", { href: presentation.url, className: styles_module_css_1.default.listItem, target: "_blank", rel: "noopener noreferrer" }, content));
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/SlidevListItem/index.tsx"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAqBH,iCA8DC;AAjFD,kDAA0B;AAC1B,4DAAoC;AAEpC,6CAA6E;AAC7E,4EAAyC;AAezC,SAAwB,cAAc,CAAC,KAA0B;IAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QAC3B,OAAO,CACH,8BAAC,cAAI,IAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,2BAAM,CAAC,QAAQ,IAAI,2BAAM,CAAC,YAAY,EAAE;YAC1E,uCAAK,SAAS,EAAE,2BAAM,CAAC,YAAY;gBAC/B,8BAAC,kBAAU,IAAC,SAAS,EAAE,2BAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI;gBAC7D,wCAAM,SAAS,EAAE,2BAAM,CAAC,KAAK,IAAG,QAAQ,CAAC,KAAK,CAAQ,CACpD;YACN,uCAAK,SAAS,EAAE,2BAAM,CAAC,kBAAkB,IACpC,QAAQ,CAAC,WAAW,IAAI,GAAG,CAC1B;YACN,uCAAK,SAAS,EAAE,2BAAM,CAAC,WAAW;gBAC9B,wCAAM,SAAS,EAAE,2BAAM,CAAC,KAAK;oBACxB,QAAQ,CAAC,KAAK;;oBAAe,QAAQ,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC1D,CACL,CACH,CACV,CAAC;IACN,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEtC,MAAM,OAAO,GAAG,CACZ;QACI,uCAAK,SAAS,EAAE,2BAAM,CAAC,YAAY;YAC/B,8BAAC,wBAAgB,IAAC,SAAS,EAAE,2BAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI;YACnE,wCAAM,SAAS,EAAE,2BAAM,CAAC,KAAK,IAAG,YAAY,CAAC,KAAK,CAAQ;YACzD,KAAK,IAAI,wCAAM,SAAS,EAAE,2BAAM,CAAC,QAAQ,qBAAuB,CAC/D;QACN,uCAAK,SAAS,EAAE,2BAAM,CAAC,kBAAkB,IACpC,YAAY,CAAC,WAAW,IAAI,GAAG,CAC9B;QACN,uCAAK,SAAS,EAAE,2BAAM,CAAC,WAAW,IAC7B,YAAY,CAAC,MAAM,IAAI,CACpB,uCAAK,SAAS,EAAE,2BAAM,CAAC,MAAM;YACzB,8BAAC,kBAAU,IAAC,SAAS,EAAE,2BAAM,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI;YACnE,4CAAO,YAAY,CAAC,MAAM,CAAQ,CAChC,CACT,CACC,CACP,CACN,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,CACH,qCAAG,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,2BAAM,CAAC,QAAQ,IAChD,OAAO,CACR,CACP,CAAC;IACN,CAAC;IAED,OAAO,CACH,qCACI,IAAI,EAAE,YAAY,CAAC,GAAG,EACtB,SAAS,EAAE,2BAAM,CAAC,QAAQ,EAC1B,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,IAExB,OAAO,CACR,CACP,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
.listItem {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: row;
|
|
4
|
+
align-items: center;
|
|
5
|
+
gap: 1rem;
|
|
6
|
+
padding: 0.875rem 1rem;
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
transition: all 0.2s ease;
|
|
9
|
+
text-decoration: none !important;
|
|
10
|
+
background: var(--ifm-card-background-color);
|
|
11
|
+
border: 1px solid var(--ifm-color-emphasis-200);
|
|
12
|
+
width: 100%;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.listItem:hover {
|
|
16
|
+
background: var(--ifm-color-emphasis-100);
|
|
17
|
+
border-color: var(--ifm-color-primary);
|
|
18
|
+
text-decoration: none;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.categoryItem {
|
|
22
|
+
border-color: var(--ifm-color-primary-darkest);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.titleSection {
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
gap: 0.5rem;
|
|
29
|
+
width: 30%;
|
|
30
|
+
min-width: 200px;
|
|
31
|
+
flex-shrink: 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.icon {
|
|
35
|
+
color: var(--ifm-color-primary);
|
|
36
|
+
flex-shrink: 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.title {
|
|
40
|
+
font-weight: 600;
|
|
41
|
+
color: var(--ifm-color-primary);
|
|
42
|
+
overflow: hidden;
|
|
43
|
+
text-overflow: ellipsis;
|
|
44
|
+
white-space: nowrap;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.devBadge {
|
|
48
|
+
display: inline-flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
padding: 0.15rem 0.5rem;
|
|
51
|
+
border-radius: 10px;
|
|
52
|
+
font-size: 0.65rem;
|
|
53
|
+
font-weight: 500;
|
|
54
|
+
background: var(--ifm-color-warning-lightest);
|
|
55
|
+
color: black;
|
|
56
|
+
white-space: nowrap;
|
|
57
|
+
flex-shrink: 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.descriptionSection {
|
|
61
|
+
flex-grow: 1;
|
|
62
|
+
color: var(--ifm-color-emphasis-700);
|
|
63
|
+
font-size: 0.9rem;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
text-overflow: ellipsis;
|
|
66
|
+
white-space: nowrap;
|
|
67
|
+
text-align: left;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.metaSection {
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
justify-content: flex-end;
|
|
74
|
+
min-width: 150px;
|
|
75
|
+
flex-shrink: 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.author {
|
|
79
|
+
display: flex;
|
|
80
|
+
align-items: center;
|
|
81
|
+
gap: 0.25rem;
|
|
82
|
+
color: var(--ifm-color-emphasis-600);
|
|
83
|
+
font-size: 0.85rem;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.authorIcon {
|
|
87
|
+
opacity: 0.7;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.badge {
|
|
91
|
+
display: inline-flex;
|
|
92
|
+
align-items: center;
|
|
93
|
+
padding: 0.2rem 0.6rem;
|
|
94
|
+
border-radius: 12px;
|
|
95
|
+
font-size: 0.7rem;
|
|
96
|
+
font-weight: 500;
|
|
97
|
+
background: var(--ifm-color-primary-lightest);
|
|
98
|
+
color: var(--ifm-color-primary-contrast-background);
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@media (max-width: 768px) {
|
|
103
|
+
.listItem {
|
|
104
|
+
flex-direction: column;
|
|
105
|
+
align-items: flex-start;
|
|
106
|
+
gap: 0.5rem;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.titleSection {
|
|
110
|
+
width: 100%;
|
|
111
|
+
min-width: 0;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.descriptionSection {
|
|
115
|
+
width: 100%;
|
|
116
|
+
white-space: normal;
|
|
117
|
+
display: -webkit-box;
|
|
118
|
+
-webkit-box-orient: vertical;
|
|
119
|
+
-webkit-line-clamp: 2;
|
|
120
|
+
line-clamp: 2;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.metaSection {
|
|
124
|
+
width: 100%;
|
|
125
|
+
justify-content: flex-start;
|
|
126
|
+
min-width: 0;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/SlidevOverview/index.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/SlidevOverview/index.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AA+BH,MAAM,CAAC,OAAO,UAAU,cAAc,IAAI,GAAG,CAAC,OAAO,CAoRpD"}
|