@f5xc-salesdemos/docs-theme 2.0.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/config.ts ADDED
@@ -0,0 +1,388 @@
1
+ import { defineConfig } from 'astro/config';
2
+ import type { AstroIntegration } from 'astro';
3
+ import starlight from '@astrojs/starlight';
4
+ import react from '@astrojs/react';
5
+ import f5xcDocsTheme from './index.ts';
6
+ import remarkMermaid from './src/plugins/remark-mermaid.mjs';
7
+ import starlightScrollToTop from 'starlight-scroll-to-top';
8
+ import starlightImageZoom from 'starlight-image-zoom';
9
+ import starlightHeadingBadges from 'starlight-heading-badges';
10
+ import starlightVideosPlugin from 'starlight-videos';
11
+ import starlightPageActions from 'starlight-page-actions';
12
+ import { starlightIconsPlugin } from 'starlight-plugin-icons';
13
+ import starlightLlmsTxt from 'starlight-llms-txt';
14
+ import starlightMegaMenu from 'starlight-mega-menu';
15
+ import type { StarlightPlugin } from '@astrojs/starlight/types';
16
+ import { resolveIcon } from './src/utils/resolve-icon.ts';
17
+
18
+ interface MegaMenuItem {
19
+ label: string;
20
+ href?: string;
21
+ content?: {
22
+ layout?: string;
23
+ columns?: number;
24
+ categories?: Array<{
25
+ title: string;
26
+ items: Array<{
27
+ label: string;
28
+ description?: string;
29
+ href: string;
30
+ icon?: string;
31
+ }>;
32
+ }>;
33
+ footer?: {
34
+ label: string;
35
+ href: string;
36
+ description?: string;
37
+ };
38
+ };
39
+ }
40
+
41
+ interface HeadEntry {
42
+ tag: string;
43
+ attrs?: Record<string, string>;
44
+ content?: string;
45
+ }
46
+
47
+ export interface F5xcDocsConfigOptions {
48
+ site?: string;
49
+ base?: string;
50
+ title?: string;
51
+ description?: string;
52
+ githubRepository?: string;
53
+ llmsOptionalLinks?: Array<{ title: string; url: string }>;
54
+ additionalIntegrations?: AstroIntegration[];
55
+ additionalRemarkPlugins?: Array<unknown>;
56
+ megaMenuItems?: MegaMenuItem[];
57
+ head?: HeadEntry[];
58
+ logo?: { src: string } | { light: string; dark: string };
59
+ }
60
+
61
+ const defaultMegaMenuItems: MegaMenuItem[] = [
62
+ {
63
+ label: 'Security',
64
+ content: {
65
+ layout: 'grid',
66
+ columns: 2,
67
+ categories: [
68
+ {
69
+ title: 'App & API Security',
70
+ items: [
71
+ {
72
+ label: 'Web App Firewall',
73
+ description: 'Firewall policies and configuration',
74
+ href: 'https://f5xc-salesdemos.github.io/waf/',
75
+ icon: resolveIcon('f5xc:web-app-and-api-protection'),
76
+ },
77
+ {
78
+ label: 'API Security',
79
+ description: 'API discovery and protection',
80
+ href: 'https://f5xc-salesdemos.github.io/api-protection/',
81
+ icon: resolveIcon('f5xc:application-traffic-insight'),
82
+ },
83
+ {
84
+ label: 'Client-Side Defense',
85
+ description: 'Browser-based threat protection',
86
+ href: 'https://f5xc-salesdemos.github.io/csd/',
87
+ icon: resolveIcon('f5xc:client-side-defense'),
88
+ },
89
+ {
90
+ label: 'Web App Scanning',
91
+ description: 'Vulnerability assessment and scanning',
92
+ href: 'https://f5xc-salesdemos.github.io/was/',
93
+ icon: resolveIcon('f5xc:web-app-scanning'),
94
+ },
95
+ ],
96
+ },
97
+ {
98
+ title: 'Threat Defense',
99
+ items: [
100
+ {
101
+ label: 'Bot Defense Advanced',
102
+ description: 'Behavioral analysis and AI detection',
103
+ href: 'https://f5xc-salesdemos.github.io/bot-advanced/',
104
+ icon: resolveIcon('f5xc:bot-defense'),
105
+ },
106
+ {
107
+ label: 'Bot Defense Standard',
108
+ description: 'Signature-based bot detection',
109
+ href: 'https://f5xc-salesdemos.github.io/bot-standard/',
110
+ icon: resolveIcon('f5xc:bot-defense'),
111
+ },
112
+ {
113
+ label: 'DDoS Protection',
114
+ description: 'Distributed denial-of-service mitigation',
115
+ href: 'https://f5xc-salesdemos.github.io/ddos/',
116
+ icon: resolveIcon('f5xc:ddos-and-transit-services'),
117
+ },
118
+ ],
119
+ },
120
+ ],
121
+ footer: {
122
+ label: 'F5 Distributed Cloud Console',
123
+ href: 'https://console.ves.volterra.io',
124
+ description: 'Open the XC management portal',
125
+ },
126
+ },
127
+ },
128
+ {
129
+ label: 'Networking',
130
+ content: {
131
+ layout: 'grid',
132
+ columns: 2,
133
+ categories: [
134
+ {
135
+ title: 'Connectivity & Delivery',
136
+ items: [
137
+ {
138
+ label: 'Multi-Cloud Networking',
139
+ description: 'Site connectivity across clouds',
140
+ href: 'https://f5xc-salesdemos.github.io/mcn/',
141
+ icon: resolveIcon('f5xc:multi-cloud-network-connect'),
142
+ },
143
+ {
144
+ label: 'Content Delivery',
145
+ description: 'Edge caching and distribution',
146
+ href: 'https://f5xc-salesdemos.github.io/cdn/',
147
+ icon: resolveIcon('f5xc:content-delivery-network'),
148
+ },
149
+ {
150
+ label: 'DNS Load Balancing',
151
+ description: 'DNS management and zones',
152
+ href: 'https://f5xc-salesdemos.github.io/dns/',
153
+ icon: resolveIcon('f5xc:dns-management'),
154
+ },
155
+ {
156
+ label: 'NGINX Management',
157
+ description: 'NGINX integration and configuration',
158
+ href: 'https://f5xc-salesdemos.github.io/nginx/',
159
+ icon: resolveIcon('f5xc:nginx-one'),
160
+ },
161
+ ],
162
+ },
163
+ {
164
+ title: 'Manage & Monitor',
165
+ items: [
166
+ {
167
+ label: 'Observability',
168
+ description: 'Monitoring, metrics, and insights',
169
+ href: 'https://f5xc-salesdemos.github.io/observability/',
170
+ icon: resolveIcon('f5xc:observability'),
171
+ },
172
+ {
173
+ label: 'Administration',
174
+ description: 'Tenant management and RBAC',
175
+ href: 'https://f5xc-salesdemos.github.io/administration/',
176
+ icon: resolveIcon('f5xc:administration'),
177
+ },
178
+ ],
179
+ },
180
+ ],
181
+ footer: {
182
+ label: 'F5 Cloud Documentation',
183
+ href: 'https://docs.cloud.f5.com',
184
+ description: 'Official product documentation',
185
+ },
186
+ },
187
+ },
188
+ {
189
+ label: 'Platform',
190
+ content: {
191
+ layout: 'list',
192
+ categories: [
193
+ {
194
+ title: 'Documentation Tools',
195
+ items: [
196
+ {
197
+ label: 'Docs Builder',
198
+ description: 'Containerized Astro build system',
199
+ href: 'https://f5xc-salesdemos.github.io/docs-builder/',
200
+ icon: resolveIcon('f5xc:doc'),
201
+ },
202
+ {
203
+ label: 'Docs Theme',
204
+ description: 'Shared branding and styling',
205
+ href: 'https://f5xc-salesdemos.github.io/docs-theme/',
206
+ icon: resolveIcon('f5xc:shared-configuration'),
207
+ },
208
+ {
209
+ label: 'Icon Packages',
210
+ description: 'NPM icon component library',
211
+ href: 'https://f5xc-salesdemos.github.io/docs-icons/',
212
+ icon: resolveIcon('f5xc:distributed-apps'),
213
+ },
214
+ ],
215
+ },
216
+ ],
217
+ footer: {
218
+ label: 'GitHub Organization',
219
+ href: 'https://github.com/f5xc-salesdemos',
220
+ description: 'View all repositories',
221
+ },
222
+ },
223
+ },
224
+ {
225
+ label: 'AI',
226
+ content: {
227
+ layout: 'list',
228
+ categories: [
229
+ {
230
+ title: 'AI Tools',
231
+ items: [
232
+ {
233
+ label: 'API MCP Server',
234
+ description: 'MCP server for F5 XC API',
235
+ href: 'https://f5xc-salesdemos.github.io/api-mcp/',
236
+ icon: resolveIcon('f5xc:ai_assistant_logo'),
237
+ },
238
+ ],
239
+ },
240
+ ],
241
+ },
242
+ },
243
+ {
244
+ label: 'Resources',
245
+ content: {
246
+ layout: 'list',
247
+ categories: [
248
+ {
249
+ title: 'F5 Ecosystem',
250
+ items: [
251
+ {
252
+ label: 'F5 XC Console',
253
+ description: 'Distributed Cloud management portal',
254
+ href: 'https://console.ves.volterra.io',
255
+ icon: resolveIcon('f5xc:platform'),
256
+ },
257
+ {
258
+ label: 'F5 Cloud Docs',
259
+ description: 'Official product documentation',
260
+ href: 'https://docs.cloud.f5.com',
261
+ icon: resolveIcon('f5xc:doc'),
262
+ },
263
+ {
264
+ label: 'MyF5 Support',
265
+ description: 'Technical support portal',
266
+ href: 'https://my.f5.com/manage/s/',
267
+ icon: resolveIcon('f5xc:support'),
268
+ },
269
+ ],
270
+ },
271
+ ],
272
+ },
273
+ },
274
+ ];
275
+
276
+ const defaultHead: HeadEntry[] = [
277
+ {
278
+ tag: 'script',
279
+ attrs: { type: 'module' },
280
+ content: `
281
+ import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
282
+
283
+ mermaid.registerIconPacks([
284
+ { name: 'hashicorp-flight', loader: () => fetch('https://cdn.jsdelivr.net/npm/@f5xc-salesdemos/icons-hashicorp-flight/icons.json').then(r => r.json()) },
285
+ { name: 'f5-brand', loader: () => fetch('https://cdn.jsdelivr.net/npm/@f5xc-salesdemos/icons-f5-brand/icons.json').then(r => r.json()) },
286
+ { name: 'f5xc', loader: () => fetch('https://cdn.jsdelivr.net/npm/@f5xc-salesdemos/icons-f5xc/icons.json').then(r => r.json()) },
287
+ { name: 'carbon', loader: () => fetch('https://cdn.jsdelivr.net/npm/@f5xc-salesdemos/icons-carbon/icons.json').then(r => r.json()) },
288
+ { name: 'lucide', loader: () => fetch('https://cdn.jsdelivr.net/npm/@f5xc-salesdemos/icons-lucide/icons.json').then(r => r.json()) },
289
+ { name: 'mdi', loader: () => fetch('https://cdn.jsdelivr.net/npm/@f5xc-salesdemos/icons-mdi/icons.json').then(r => r.json()) },
290
+ { name: 'phosphor', loader: () => fetch('https://cdn.jsdelivr.net/npm/@f5xc-salesdemos/icons-phosphor/icons.json').then(r => r.json()) },
291
+ { name: 'tabler', loader: () => fetch('https://cdn.jsdelivr.net/npm/@f5xc-salesdemos/icons-tabler/icons.json').then(r => r.json()) },
292
+ ]);
293
+
294
+ mermaid.initialize({
295
+ startOnLoad: true,
296
+ theme: 'base',
297
+ themeVariables: {
298
+ primaryColor: '#e8ecf4',
299
+ primaryTextColor: '#1a1a2e',
300
+ primaryBorderColor: '#0e41aa',
301
+ lineColor: '#0e41aa',
302
+ secondaryColor: '#fff5eb',
303
+ secondaryTextColor: '#1a1a2e',
304
+ secondaryBorderColor: '#f29a36',
305
+ tertiaryColor: '#f0e6f6',
306
+ tertiaryTextColor: '#1a1a2e',
307
+ tertiaryBorderColor: '#62228b',
308
+ noteBkgColor: '#ffe4c4',
309
+ noteTextColor: '#1a1a2e',
310
+ noteBorderColor: '#f29a36',
311
+ fontFamily: 'F5, system-ui, sans-serif',
312
+ },
313
+ });
314
+ `,
315
+ },
316
+ ];
317
+
318
+ export function createF5xcDocsConfig(options: F5xcDocsConfigOptions = {}) {
319
+ const site = options.site || process.env.DOCS_SITE || 'https://f5xc-salesdemos.github.io';
320
+ const base = options.base || process.env.DOCS_BASE || '/';
321
+ const title = options.title || process.env.DOCS_TITLE || 'Documentation';
322
+ const description = options.description || process.env.DOCS_DESCRIPTION || '';
323
+ const githubRepository = options.githubRepository || process.env.GITHUB_REPOSITORY || '';
324
+ const llmsOptionalLinks = options.llmsOptionalLinks
325
+ || (process.env.LLMS_OPTIONAL_LINKS ? JSON.parse(process.env.LLMS_OPTIONAL_LINKS) : []);
326
+ const megaMenuItems = options.megaMenuItems || defaultMegaMenuItems;
327
+ const head = options.head || defaultHead;
328
+ const logo = options.logo || { src: '@f5xc-salesdemos/docs-theme/assets/f5-distributed-cloud.svg' };
329
+ const additionalRemarkPlugins = options.additionalRemarkPlugins || [];
330
+ const additionalIntegrations = options.additionalIntegrations || [];
331
+
332
+ const starlightPlugins: StarlightPlugin[] = [
333
+ starlightMegaMenu({ items: megaMenuItems as Parameters<typeof starlightMegaMenu>[0]['items'] }),
334
+ starlightVideosPlugin(),
335
+ starlightImageZoom(),
336
+ f5xcDocsTheme(),
337
+ starlightScrollToTop({
338
+ showTooltip: true,
339
+ tooltipText: 'Scroll to top',
340
+ smoothScroll: true,
341
+ threshold: 10,
342
+ showProgressRing: true,
343
+ progressRingColor: '#e4002b',
344
+ showOnHomepage: false,
345
+ }),
346
+ starlightHeadingBadges(),
347
+ starlightPageActions(),
348
+ starlightIconsPlugin(),
349
+ starlightLlmsTxt({
350
+ projectName: title,
351
+ description,
352
+ rawContent: true,
353
+ optionalLinks: llmsOptionalLinks,
354
+ }),
355
+ ];
356
+
357
+ return defineConfig({
358
+ site,
359
+ base,
360
+ markdown: {
361
+ remarkPlugins: [remarkMermaid, ...additionalRemarkPlugins],
362
+ },
363
+ integrations: [
364
+ starlight({
365
+ title,
366
+ plugins: starlightPlugins,
367
+ head: head as Parameters<typeof starlight>[0]['head'],
368
+ logo: logo as Parameters<typeof starlight>[0]['logo'],
369
+ ...(githubRepository
370
+ ? {
371
+ editLink: {
372
+ baseUrl: `https://github.com/${githubRepository}/edit/main/`,
373
+ },
374
+ }
375
+ : {}),
376
+ social: [
377
+ {
378
+ label: 'GitHub',
379
+ icon: 'github',
380
+ href: `https://github.com/${githubRepository}`,
381
+ },
382
+ ],
383
+ }),
384
+ react(),
385
+ ...additionalIntegrations,
386
+ ],
387
+ });
388
+ }
@@ -0,0 +1,79 @@
1
+ @font-face {
2
+ font-family: "neusaNextProWide";
3
+ font-weight: 300;
4
+ font-style: normal;
5
+ font-display: swap;
6
+ src: url("./neusaNextProWide-300.woff2") format("woff2");
7
+ }
8
+
9
+ @font-face {
10
+ font-family: "neusaNextProWide";
11
+ font-weight: 400;
12
+ font-style: normal;
13
+ font-display: swap;
14
+ src: url("./neusaNextProWide-400.woff2") format("woff2");
15
+ }
16
+
17
+ @font-face {
18
+ font-family: "neusaNextProWide";
19
+ font-weight: 500;
20
+ font-style: normal;
21
+ font-display: swap;
22
+ src: url("./neusaNextProWide-500.woff2") format("woff2");
23
+ }
24
+
25
+ @font-face {
26
+ font-family: "neusaNextProWide";
27
+ font-weight: 700;
28
+ font-style: normal;
29
+ font-display: swap;
30
+ src: url("./neusaNextProWide-700.woff2") format("woff2");
31
+ }
32
+
33
+ @font-face {
34
+ font-family: "neusaNextProWide";
35
+ font-weight: 400;
36
+ font-style: italic;
37
+ font-display: swap;
38
+ src: url("./neusaNextProWide-400i.woff2") format("woff2");
39
+ }
40
+
41
+ @font-face {
42
+ font-family: "neusaNextProWide";
43
+ font-weight: 700;
44
+ font-style: italic;
45
+ font-display: swap;
46
+ src: url("./neusaNextProWide-700i.woff2") format("woff2");
47
+ }
48
+
49
+ @font-face {
50
+ font-family: "proximaNova";
51
+ font-weight: 400;
52
+ font-style: normal;
53
+ font-display: swap;
54
+ src: url("./proximaNova-400.woff2") format("woff2");
55
+ }
56
+
57
+ @font-face {
58
+ font-family: "proximaNova";
59
+ font-weight: 500;
60
+ font-style: normal;
61
+ font-display: swap;
62
+ src: url("./proximaNova-500.woff2") format("woff2");
63
+ }
64
+
65
+ @font-face {
66
+ font-family: "proximaNova";
67
+ font-weight: 600;
68
+ font-style: normal;
69
+ font-display: swap;
70
+ src: url("./proximaNova-600.woff2") format("woff2");
71
+ }
72
+
73
+ @font-face {
74
+ font-family: "proximaNova";
75
+ font-weight: 700;
76
+ font-style: normal;
77
+ font-display: swap;
78
+ src: url("./proximaNova-700.woff2") format("woff2");
79
+ }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/index.ts ADDED
@@ -0,0 +1,32 @@
1
+ import type { StarlightPlugin } from '@astrojs/starlight/types';
2
+
3
+ export default function f5xcDocsTheme(): StarlightPlugin {
4
+ return {
5
+ name: '@f5xc-salesdemos/docs-theme',
6
+ hooks: {
7
+ 'config:setup'({ config, updateConfig, addRouteMiddleware, logger }) {
8
+ addRouteMiddleware({
9
+ entrypoint: '@f5xc-salesdemos/docs-theme/route-middleware',
10
+ order: 'pre',
11
+ });
12
+ updateConfig({
13
+ customCss: [
14
+ ...(config.customCss ?? []),
15
+ '@f5xc-salesdemos/docs-theme/fonts/font-face.css',
16
+ '@f5xc-salesdemos/docs-theme/styles/custom.css',
17
+ ],
18
+ components: {
19
+ ...config.components,
20
+ Banner: '@f5xc-salesdemos/docs-theme/components/Banner.astro',
21
+ EditLink: '@f5xc-salesdemos/docs-theme/components/EditLink.astro',
22
+ Footer: '@f5xc-salesdemos/docs-theme/components/Footer.astro',
23
+ SiteTitle: '@f5xc-salesdemos/docs-theme/components/SiteTitle.astro',
24
+ MarkdownContent: process.env.DOCS_MARKDOWN_CONTENT
25
+ || '@f5xc-salesdemos/docs-theme/components/MarkdownContent.astro',
26
+ },
27
+ });
28
+ logger.info('F5 XC docs theme loaded');
29
+ },
30
+ },
31
+ };
32
+ }
package/package.json ADDED
@@ -0,0 +1,115 @@
1
+ {
2
+ "name": "@f5xc-salesdemos/docs-theme",
3
+ "version": "2.0.0",
4
+ "description": "F5 Distributed Cloud branded Starlight documentation theme",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "homepage": "https://f5xc-salesdemos.github.io/docs-theme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/f5xc-salesdemos/docs-theme"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/f5xc-salesdemos/docs-theme/issues"
14
+ },
15
+ "exports": {
16
+ ".": "./index.ts",
17
+ "./fonts/font-face.css": "./fonts/font-face.css",
18
+ "./styles/custom.css": "./styles/custom.css",
19
+ "./components/Banner.astro": "./components/Banner.astro",
20
+ "./components/EditLink.astro": "./components/EditLink.astro",
21
+ "./components/Footer.astro": "./components/Footer.astro",
22
+ "./components/SiteTitle.astro": "./components/SiteTitle.astro",
23
+ "./components/MarkdownContent.astro": "./components/MarkdownContent.astro",
24
+ "./assets/f5-logo.svg": "./assets/f5-logo.svg",
25
+ "./assets/github-avatar.png": "./assets/github-avatar.png",
26
+ "./assets/f5-distributed-cloud.svg": "./assets/f5-distributed-cloud.svg",
27
+ "./config": "./config.ts",
28
+ "./route-middleware": "./route-middleware.ts",
29
+ "./src/plugins/remark-mermaid.mjs": "./src/plugins/remark-mermaid.mjs",
30
+ "./components/Icon.astro": "./components/Icon.astro",
31
+ "./components/LinkCard.astro": "./components/LinkCard.astro",
32
+ "./src/utils/resolve-icon.ts": "./src/utils/resolve-icon.ts"
33
+ },
34
+ "files": [
35
+ "index.ts",
36
+ "config.ts",
37
+ "route-middleware.ts",
38
+ "astro.config.mjs",
39
+ "fonts/",
40
+ "styles/",
41
+ "assets/",
42
+ "components/",
43
+ "src/"
44
+ ],
45
+ "keywords": [
46
+ "starlight",
47
+ "theme",
48
+ "astro",
49
+ "withastro",
50
+ "starlight-theme",
51
+ "f5",
52
+ "f5xc",
53
+ "documentation",
54
+ "docs-theme"
55
+ ],
56
+ "publishConfig": {
57
+ "access": "public"
58
+ },
59
+ "devDependencies": {
60
+ "@playwright/test": "^1.50.0"
61
+ },
62
+ "scripts": {
63
+ "test:visual": "playwright test",
64
+ "test:visual:update": "playwright test --update-snapshots"
65
+ },
66
+ "peerDependencies": {
67
+ "@astrojs/starlight": ">=0.34.0",
68
+ "@iconify-json/lucide": "*",
69
+ "@iconify-json/carbon": "*",
70
+ "@iconify-json/mdi": "*",
71
+ "@iconify-json/ph": "*",
72
+ "@iconify-json/tabler": "*",
73
+ "@f5xc-salesdemos/icons-f5-brand": "*",
74
+ "@f5xc-salesdemos/icons-f5xc": "*",
75
+ "@f5xc-salesdemos/icons-hashicorp-flight": "*"
76
+ },
77
+ "peerDependenciesMeta": {
78
+ "@iconify-json/lucide": {
79
+ "optional": true
80
+ },
81
+ "@iconify-json/carbon": {
82
+ "optional": true
83
+ },
84
+ "@iconify-json/mdi": {
85
+ "optional": true
86
+ },
87
+ "@iconify-json/ph": {
88
+ "optional": true
89
+ },
90
+ "@iconify-json/tabler": {
91
+ "optional": true
92
+ },
93
+ "@f5xc-salesdemos/icons-f5-brand": {
94
+ "optional": true
95
+ },
96
+ "@f5xc-salesdemos/icons-f5xc": {
97
+ "optional": true
98
+ },
99
+ "@f5xc-salesdemos/icons-hashicorp-flight": {
100
+ "optional": true
101
+ }
102
+ },
103
+ "dependencies": {
104
+ "@astrojs/react": "^4.0.0",
105
+ "unist-util-visit": "^5.0.0",
106
+ "starlight-heading-badges": "^0.6.1",
107
+ "starlight-image-zoom": "^0.13.2",
108
+ "starlight-llms-txt": "^0.7.0",
109
+ "starlight-mega-menu": "^1.0.1",
110
+ "starlight-page-actions": "^0.5.0",
111
+ "starlight-plugin-icons": "^1.1.3",
112
+ "starlight-scroll-to-top": "^0.4.0",
113
+ "starlight-videos": "^0.3.1"
114
+ }
115
+ }