boltdocs 1.0.4 → 1.3.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.
Files changed (121) hide show
  1. package/dist/{SearchDialog-R36WKAQ7.mjs → SearchDialog-5EDRACEG.mjs} +1 -1
  2. package/dist/{SearchDialog-PYF3QMYG.css → SearchDialog-X57WPTNN.css} +54 -126
  3. package/dist/cache-EHR7SXRU.mjs +12 -0
  4. package/dist/chunk-GSYECEZY.mjs +381 -0
  5. package/dist/{chunk-TWSRXUFF.mjs → chunk-NS7WHDYA.mjs} +229 -418
  6. package/dist/client/index.css +54 -126
  7. package/dist/client/index.d.mts +5 -4
  8. package/dist/client/index.d.ts +5 -4
  9. package/dist/client/index.js +555 -580
  10. package/dist/client/index.mjs +304 -16
  11. package/dist/client/ssr.css +54 -126
  12. package/dist/client/ssr.js +257 -580
  13. package/dist/client/ssr.mjs +1 -1
  14. package/dist/{config-D2XmHJYe.d.mts → config-BD5ZHz15.d.mts} +7 -0
  15. package/dist/{config-D2XmHJYe.d.ts → config-BD5ZHz15.d.ts} +7 -0
  16. package/dist/node/index.d.mts +2 -2
  17. package/dist/node/index.d.ts +2 -2
  18. package/dist/node/index.js +477 -123
  19. package/dist/node/index.mjs +114 -142
  20. package/package.json +2 -2
  21. package/src/client/app/index.tsx +344 -373
  22. package/src/client/app/preload.tsx +56 -56
  23. package/src/client/index.ts +40 -40
  24. package/src/client/ssr.tsx +51 -51
  25. package/src/client/theme/components/CodeBlock/CodeBlock.tsx +76 -76
  26. package/src/client/theme/components/CodeBlock/index.ts +1 -1
  27. package/src/client/theme/components/PackageManagerTabs/PackageManagerTabs.tsx +154 -154
  28. package/src/client/theme/components/PackageManagerTabs/index.ts +1 -1
  29. package/src/client/theme/components/PackageManagerTabs/pkg-tabs.css +64 -64
  30. package/src/client/theme/components/Playground/Playground.tsx +124 -124
  31. package/src/client/theme/components/Playground/index.ts +1 -1
  32. package/src/client/theme/components/Playground/playground.css +168 -168
  33. package/src/client/theme/components/Video/Video.tsx +84 -84
  34. package/src/client/theme/components/Video/index.ts +1 -1
  35. package/src/client/theme/components/Video/video.css +41 -41
  36. package/src/client/theme/components/mdx/Admonition.tsx +80 -80
  37. package/src/client/theme/components/mdx/Badge.tsx +31 -31
  38. package/src/client/theme/components/mdx/Button.tsx +50 -50
  39. package/src/client/theme/components/mdx/Card.tsx +80 -80
  40. package/src/client/theme/components/mdx/List.tsx +57 -57
  41. package/src/client/theme/components/mdx/Tabs.tsx +94 -94
  42. package/src/client/theme/components/mdx/index.ts +18 -18
  43. package/src/client/theme/components/mdx/mdx-components.css +424 -405
  44. package/src/client/theme/icons/bun.tsx +62 -62
  45. package/src/client/theme/icons/deno.tsx +20 -20
  46. package/src/client/theme/icons/discord.tsx +12 -12
  47. package/src/client/theme/icons/github.tsx +15 -15
  48. package/src/client/theme/icons/npm.tsx +13 -13
  49. package/src/client/theme/icons/pnpm.tsx +72 -72
  50. package/src/client/theme/icons/twitter.tsx +12 -12
  51. package/src/client/theme/styles/markdown.css +343 -343
  52. package/src/client/theme/styles/variables.css +162 -162
  53. package/src/client/theme/styles.css +37 -38
  54. package/src/client/theme/ui/BackgroundGradient/BackgroundGradient.tsx +10 -10
  55. package/src/client/theme/ui/BackgroundGradient/index.ts +1 -1
  56. package/src/client/theme/ui/Breadcrumbs/Breadcrumbs.tsx +68 -68
  57. package/src/client/theme/ui/Breadcrumbs/index.ts +1 -1
  58. package/src/client/theme/ui/Footer/footer.css +32 -32
  59. package/src/client/theme/ui/Head/Head.tsx +69 -69
  60. package/src/client/theme/ui/Head/index.ts +1 -1
  61. package/src/client/theme/ui/LanguageSwitcher/LanguageSwitcher.tsx +125 -125
  62. package/src/client/theme/ui/LanguageSwitcher/index.ts +1 -1
  63. package/src/client/theme/ui/LanguageSwitcher/language-switcher.css +98 -98
  64. package/src/client/theme/ui/Layout/Layout.tsx +202 -213
  65. package/src/client/theme/ui/Layout/base.css +76 -76
  66. package/src/client/theme/ui/Layout/index.ts +2 -2
  67. package/src/client/theme/ui/Layout/pagination.css +72 -72
  68. package/src/client/theme/ui/Layout/responsive.css +36 -40
  69. package/src/client/theme/ui/Link/Link.tsx +254 -202
  70. package/src/client/theme/ui/Link/index.ts +2 -2
  71. package/src/client/theme/ui/Loading/Loading.tsx +10 -10
  72. package/src/client/theme/ui/Loading/index.ts +1 -1
  73. package/src/client/theme/ui/Loading/loading.css +30 -30
  74. package/src/client/theme/ui/Navbar/GithubStars.tsx +27 -27
  75. package/src/client/theme/ui/Navbar/Navbar.tsx +145 -145
  76. package/src/client/theme/ui/Navbar/index.ts +2 -2
  77. package/src/client/theme/ui/Navbar/navbar.css +233 -233
  78. package/src/client/theme/ui/NotFound/NotFound.tsx +19 -20
  79. package/src/client/theme/ui/NotFound/index.ts +1 -1
  80. package/src/client/theme/ui/NotFound/not-found.css +64 -64
  81. package/src/client/theme/ui/OnThisPage/OnThisPage.tsx +235 -192
  82. package/src/client/theme/ui/OnThisPage/index.ts +1 -1
  83. package/src/client/theme/ui/OnThisPage/toc.css +132 -132
  84. package/src/client/theme/ui/PoweredBy/PoweredBy.tsx +18 -18
  85. package/src/client/theme/ui/PoweredBy/index.ts +1 -1
  86. package/src/client/theme/ui/PoweredBy/powered-by.css +76 -76
  87. package/src/client/theme/ui/SearchDialog/SearchDialog.tsx +199 -199
  88. package/src/client/theme/ui/SearchDialog/index.ts +1 -1
  89. package/src/client/theme/ui/SearchDialog/search.css +152 -152
  90. package/src/client/theme/ui/Sidebar/Sidebar.tsx +204 -200
  91. package/src/client/theme/ui/Sidebar/index.ts +1 -1
  92. package/src/client/theme/ui/Sidebar/sidebar.css +236 -269
  93. package/src/client/theme/ui/ThemeToggle/ThemeToggle.tsx +69 -69
  94. package/src/client/theme/ui/ThemeToggle/index.ts +1 -1
  95. package/src/client/theme/ui/VersionSwitcher/VersionSwitcher.tsx +136 -136
  96. package/src/client/theme/ui/VersionSwitcher/index.ts +1 -1
  97. package/src/client/types.ts +50 -50
  98. package/src/client/utils.ts +26 -26
  99. package/src/node/cache.ts +408 -94
  100. package/src/node/config.ts +192 -185
  101. package/src/node/index.ts +21 -21
  102. package/src/node/mdx.ts +120 -41
  103. package/src/node/plugin/entry.ts +58 -58
  104. package/src/node/plugin/html.ts +55 -55
  105. package/src/node/plugin/index.ts +193 -190
  106. package/src/node/plugin/types.ts +11 -11
  107. package/src/node/routes/cache.ts +28 -24
  108. package/src/node/routes/index.ts +167 -152
  109. package/src/node/routes/parser.ts +153 -127
  110. package/src/node/routes/sorter.ts +42 -42
  111. package/src/node/routes/types.ts +49 -49
  112. package/src/node/ssg/index.ts +114 -110
  113. package/src/node/ssg/meta.ts +34 -34
  114. package/src/node/ssg/options.ts +13 -13
  115. package/src/node/ssg/sitemap.ts +54 -54
  116. package/src/node/utils.ts +134 -134
  117. package/tsconfig.json +20 -20
  118. package/tsup.config.ts +22 -22
  119. package/dist/Playground-B2FA34BC.mjs +0 -6
  120. package/dist/chunk-WPT4MWTQ.mjs +0 -89
  121. package/src/client/theme/styles/home.css +0 -60
package/src/node/utils.ts CHANGED
@@ -1,134 +1,134 @@
1
- import fs from "fs";
2
- import matter from "gray-matter";
3
-
4
- /**
5
- * Normalizes a file path by replacing Windows backslashes with forward slashes.
6
- * Ensures consistent path handling across different operating systems.
7
- *
8
- * @param p - The file path to normalize
9
- * @returns The normalized path using forward slashes
10
- */
11
- export function normalizePath(p: string): string {
12
- return p.replace(/\\/g, "/");
13
- }
14
-
15
- /**
16
- * Strips a numeric prefix from a file or directory name (e.g., '1.guide' -> 'guide').
17
- *
18
- * @param name - The name to strip
19
- * @returns The name without the numeric prefix
20
- */
21
- export function stripNumberPrefix(name: string): string {
22
- return name.replace(/^\d+\./, "");
23
- }
24
-
25
- /**
26
- * Extracts the numeric prefix from a file or directory name if it exists.
27
- *
28
- * @param name - The name to parse
29
- * @returns The extracted number, or undefined if none exists
30
- */
31
- export function extractNumberPrefix(name: string): number | undefined {
32
- const match = name.match(/^(\d+)\./);
33
- return match ? parseInt(match[1], 10) : undefined;
34
- }
35
-
36
- /**
37
- * Checks if a given file path points to a Markdown or MDX file.
38
- *
39
- * @param filePath - The path to check
40
- * @returns True if the file ends with .md or .mdx, false otherwise
41
- */
42
- export function isDocFile(filePath: string): boolean {
43
- return /\.mdx?$/.test(filePath);
44
- }
45
-
46
- /**
47
- * Retrieves the modification time (mtime) of a file in milliseconds.
48
- * Useful for caching strategies to detect if a file has changed.
49
- * Returns 0 if the file doesn't exist or cannot be accessed.
50
- *
51
- * @param filePath - The absolute path to the file
52
- * @returns The modification time in milliseconds, or 0 on error
53
- */
54
- export function getFileMtime(filePath: string): number {
55
- try {
56
- return fs.statSync(filePath).mtimeMs;
57
- } catch {
58
- return 0;
59
- }
60
- }
61
-
62
- /**
63
- * Parses frontmatter and markdown content from a file synchronously.
64
- * Uses `gray-matter` for parsing. Returns the parsed data and the remaining markdown content.
65
- *
66
- * @param filePath - The absolute path to the markdown/mdx file
67
- * @returns An object containing the parsed metadata (`data`) and the raw markdown (`content`)
68
- */
69
- export function parseFrontmatter(filePath: string): {
70
- data: Record<string, any>;
71
- content: string;
72
- } {
73
- const raw = fs.readFileSync(filePath, "utf-8");
74
- const { data, content } = matter(raw);
75
- return { data, content };
76
- }
77
-
78
- /**
79
- * Escapes special HTML characters in a string to prevent XSS and ensure
80
- * safe injection into HTML attributes or text content.
81
- *
82
- * @param str - The raw string to escape
83
- * @returns The escaped string
84
- */
85
- export function escapeHtml(str: string): string {
86
- return str
87
- .replace(/&/g, "&amp;")
88
- .replace(/"/g, "&quot;")
89
- .replace(/</g, "&lt;")
90
- .replace(/>/g, "&gt;");
91
- }
92
-
93
- /**
94
- * Converts a file path relative to the `docsDir` into a URL route path.
95
- * Handles removing extensions, converting `index` files to directory roots,
96
- * and ensuring proper slash formatting.
97
- *
98
- * @param relativePath - The file path relative to the documentation source directory (e.g., 'guide/index.md')
99
- * @returns The corresponding route path (e.g., '/guide')
100
- */
101
- export function fileToRoutePath(relativePath: string): string {
102
- // Strip number prefixes from every segment
103
- let cleanedPath = relativePath.split("/").map(stripNumberPrefix).join("/");
104
-
105
- let routePath = cleanedPath.replace(/\.mdx?$/, "");
106
-
107
- // Handle index files → directory root
108
- if (routePath === "index" || routePath.endsWith("/index")) {
109
- routePath = routePath.replace(/index$/, "");
110
- }
111
-
112
- // Ensure leading slash
113
- if (!routePath.startsWith("/")) {
114
- routePath = "/" + routePath;
115
- }
116
-
117
- // Remove trailing slash (except for root '/')
118
- if (routePath.length > 1 && routePath.endsWith("/")) {
119
- routePath = routePath.slice(0, -1);
120
- }
121
-
122
- return routePath;
123
- }
124
-
125
- /**
126
- * Capitalizes the first letter of a given string.
127
- * Used primarily for generating default group titles.
128
- *
129
- * @param str - The string to capitalize
130
- * @returns The capitalized string
131
- */
132
- export function capitalize(str: string): string {
133
- return str.charAt(0).toUpperCase() + str.slice(1);
134
- }
1
+ import fs from "fs";
2
+ import matter from "gray-matter";
3
+
4
+ /**
5
+ * Normalizes a file path by replacing Windows backslashes with forward slashes.
6
+ * Ensures consistent path handling across different operating systems.
7
+ *
8
+ * @param p - The file path to normalize
9
+ * @returns The normalized path using forward slashes
10
+ */
11
+ export function normalizePath(p: string): string {
12
+ return p.replace(/\\/g, "/");
13
+ }
14
+
15
+ /**
16
+ * Strips a numeric prefix from a file or directory name (e.g., '1.guide' -> 'guide').
17
+ *
18
+ * @param name - The name to strip
19
+ * @returns The name without the numeric prefix
20
+ */
21
+ export function stripNumberPrefix(name: string): string {
22
+ return name.replace(/^\d+\./, "");
23
+ }
24
+
25
+ /**
26
+ * Extracts the numeric prefix from a file or directory name if it exists.
27
+ *
28
+ * @param name - The name to parse
29
+ * @returns The extracted number, or undefined if none exists
30
+ */
31
+ export function extractNumberPrefix(name: string): number | undefined {
32
+ const match = name.match(/^(\d+)\./);
33
+ return match ? parseInt(match[1], 10) : undefined;
34
+ }
35
+
36
+ /**
37
+ * Checks if a given file path points to a Markdown or MDX file.
38
+ *
39
+ * @param filePath - The path to check
40
+ * @returns True if the file ends with .md or .mdx, false otherwise
41
+ */
42
+ export function isDocFile(filePath: string): boolean {
43
+ return /\.mdx?$/.test(filePath);
44
+ }
45
+
46
+ /**
47
+ * Retrieves the modification time (mtime) of a file in milliseconds.
48
+ * Useful for caching strategies to detect if a file has changed.
49
+ * Returns 0 if the file doesn't exist or cannot be accessed.
50
+ *
51
+ * @param filePath - The absolute path to the file
52
+ * @returns The modification time in milliseconds, or 0 on error
53
+ */
54
+ export function getFileMtime(filePath: string): number {
55
+ try {
56
+ return fs.statSync(filePath).mtimeMs;
57
+ } catch {
58
+ return 0;
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Parses frontmatter and markdown content from a file synchronously.
64
+ * Uses `gray-matter` for parsing. Returns the parsed data and the remaining markdown content.
65
+ *
66
+ * @param filePath - The absolute path to the markdown/mdx file
67
+ * @returns An object containing the parsed metadata (`data`) and the raw markdown (`content`)
68
+ */
69
+ export function parseFrontmatter(filePath: string): {
70
+ data: Record<string, any>;
71
+ content: string;
72
+ } {
73
+ const raw = fs.readFileSync(filePath, "utf-8");
74
+ const { data, content } = matter(raw);
75
+ return { data, content };
76
+ }
77
+
78
+ /**
79
+ * Escapes special HTML characters in a string to prevent XSS and ensure
80
+ * safe injection into HTML attributes or text content.
81
+ *
82
+ * @param str - The raw string to escape
83
+ * @returns The escaped string
84
+ */
85
+ export function escapeHtml(str: string): string {
86
+ return str
87
+ .replace(/&/g, "&amp;")
88
+ .replace(/"/g, "&quot;")
89
+ .replace(/</g, "&lt;")
90
+ .replace(/>/g, "&gt;");
91
+ }
92
+
93
+ /**
94
+ * Converts a file path relative to the `docsDir` into a URL route path.
95
+ * Handles removing extensions, converting `index` files to directory roots,
96
+ * and ensuring proper slash formatting.
97
+ *
98
+ * @param relativePath - The file path relative to the documentation source directory (e.g., 'guide/index.md')
99
+ * @returns The corresponding route path (e.g., '/guide')
100
+ */
101
+ export function fileToRoutePath(relativePath: string): string {
102
+ // Strip number prefixes from every segment
103
+ let cleanedPath = relativePath.split("/").map(stripNumberPrefix).join("/");
104
+
105
+ let routePath = cleanedPath.replace(/\.mdx?$/, "");
106
+
107
+ // Handle index files → directory root
108
+ if (routePath === "index" || routePath.endsWith("/index")) {
109
+ routePath = routePath.replace(/index$/, "");
110
+ }
111
+
112
+ // Ensure leading slash
113
+ if (!routePath.startsWith("/")) {
114
+ routePath = "/" + routePath;
115
+ }
116
+
117
+ // Remove trailing slash (except for root '/')
118
+ if (routePath.length > 1 && routePath.endsWith("/")) {
119
+ routePath = routePath.slice(0, -1);
120
+ }
121
+
122
+ return routePath;
123
+ }
124
+
125
+ /**
126
+ * Capitalizes the first letter of a given string.
127
+ * Used primarily for generating default group titles.
128
+ *
129
+ * @param str - The string to capitalize
130
+ * @returns The capitalized string
131
+ */
132
+ export function capitalize(str: string): string {
133
+ return str.charAt(0).toUpperCase() + str.slice(1);
134
+ }
package/tsconfig.json CHANGED
@@ -1,21 +1,21 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "Node",
6
- "esModuleInterop": true,
7
- "strict": true,
8
- "skipLibCheck": true,
9
- "jsx": "react-jsx",
10
- "declaration": true,
11
- "outDir": "dist"
12
- },
13
- "include": [
14
- "src"
15
- ],
16
- "exclude": [
17
- "node_modules",
18
- "dist",
19
- "src/node/cli"
20
- ]
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Node",
6
+ "esModuleInterop": true,
7
+ "strict": true,
8
+ "skipLibCheck": true,
9
+ "jsx": "react-jsx",
10
+ "declaration": true,
11
+ "outDir": "dist"
12
+ },
13
+ "include": [
14
+ "src"
15
+ ],
16
+ "exclude": [
17
+ "node_modules",
18
+ "dist",
19
+ "src/node/cli"
20
+ ]
21
21
  }
package/tsup.config.ts CHANGED
@@ -1,22 +1,22 @@
1
- import { defineConfig } from "tsup";
2
-
3
- export default defineConfig({
4
- entry: [
5
- "src/node/index.ts",
6
- "src/node/cli/index.ts",
7
- "src/client/index.ts",
8
- "src/client/ssr.tsx",
9
- ],
10
- format: ["cjs", "esm"],
11
- dts: true,
12
- tsconfig: "./tsconfig.json",
13
- clean: true,
14
- external: [
15
- "vite",
16
- "react",
17
- "react-dom",
18
- "react-router-dom",
19
- "virtual:boltdocs-routes",
20
- "virtual:boltdocs-config",
21
- ],
22
- });
1
+ import { defineConfig } from "tsup";
2
+
3
+ export default defineConfig({
4
+ entry: [
5
+ "src/node/index.ts",
6
+ "src/node/cli/index.ts",
7
+ "src/client/index.ts",
8
+ "src/client/ssr.tsx",
9
+ ],
10
+ format: ["cjs", "esm"],
11
+ dts: true,
12
+ tsconfig: "./tsconfig.json",
13
+ clean: true,
14
+ external: [
15
+ "vite",
16
+ "react",
17
+ "react-dom",
18
+ "react-router-dom",
19
+ "virtual:boltdocs-routes",
20
+ "virtual:boltdocs-config",
21
+ ],
22
+ });
@@ -1,6 +0,0 @@
1
- import {
2
- Playground
3
- } from "./chunk-WPT4MWTQ.mjs";
4
- export {
5
- Playground
6
- };
@@ -1,89 +0,0 @@
1
- // src/client/theme/components/Playground/Playground.tsx
2
- import React, { useState } from "react";
3
- import { LiveProvider, LiveEditor, LiveError, LivePreview } from "react-live";
4
- import { Copy, Check, Terminal, Play } from "lucide-react";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
- function prepareCode(raw) {
7
- const trimmed = raw.trim();
8
- const fnMatch = trimmed.match(/export\s+default\s+function\s+(\w+)/);
9
- if (fnMatch) {
10
- const name = fnMatch[1];
11
- const code = trimmed.replace(/export\s+default\s+/, "") + `
12
-
13
- render(<${name} />);`;
14
- return { code, noInline: true };
15
- }
16
- const varMatch = trimmed.match(/export\s+default\s+(\w+)\s*;?\s*$/);
17
- if (varMatch) {
18
- const name = varMatch[1];
19
- const code = trimmed.replace(/export\s+default\s+\w+\s*;?\s*$/, "") + `
20
- render(<${name} />);`;
21
- return { code, noInline: true };
22
- }
23
- return { code: trimmed, noInline: false };
24
- }
25
- function Playground({
26
- code,
27
- children,
28
- scope = {},
29
- readonly = false,
30
- noInline: forceNoInline
31
- }) {
32
- let initialCode = code || "";
33
- if (!initialCode && typeof children === "string") {
34
- initialCode = children;
35
- }
36
- const prepared = prepareCode(initialCode);
37
- const useNoInline = forceNoInline ?? prepared.noInline;
38
- const [copied, setCopied] = useState(false);
39
- const [activeCode, setActiveCode] = useState(prepared.code);
40
- const handleCopy = () => {
41
- navigator.clipboard.writeText(activeCode);
42
- setCopied(true);
43
- setTimeout(() => setCopied(false), 2e3);
44
- };
45
- const extendedScope = { React, ...scope };
46
- return /* @__PURE__ */ jsx("div", { className: "boltdocs-playground", "data-readonly": readonly, children: /* @__PURE__ */ jsx(
47
- LiveProvider,
48
- {
49
- code: activeCode,
50
- scope: extendedScope,
51
- theme: void 0,
52
- noInline: useNoInline,
53
- children: /* @__PURE__ */ jsxs("div", { className: "playground-split-container", children: [
54
- /* @__PURE__ */ jsxs("div", { className: "playground-panel playground-editor-panel", children: [
55
- /* @__PURE__ */ jsxs("div", { className: "playground-panel-header", children: [
56
- /* @__PURE__ */ jsxs("div", { className: "playground-panel-title", children: [
57
- /* @__PURE__ */ jsx(Terminal, { size: 14 }),
58
- /* @__PURE__ */ jsx("span", { children: readonly ? "Code Example" : "Live Editor" })
59
- ] }),
60
- /* @__PURE__ */ jsx(
61
- "button",
62
- {
63
- className: "playground-copy-btn",
64
- onClick: handleCopy,
65
- title: "Copy code",
66
- children: copied ? /* @__PURE__ */ jsx(Check, { size: 14 }) : /* @__PURE__ */ jsx(Copy, { size: 14 })
67
- }
68
- )
69
- ] }),
70
- /* @__PURE__ */ jsx("div", { className: "playground-panel-content playground-editor", children: /* @__PURE__ */ jsx(LiveEditor, { disabled: readonly, onChange: setActiveCode }) })
71
- ] }),
72
- /* @__PURE__ */ jsxs("div", { className: "playground-panel playground-preview-panel", children: [
73
- /* @__PURE__ */ jsx("div", { className: "playground-panel-header", children: /* @__PURE__ */ jsxs("div", { className: "playground-panel-title", children: [
74
- /* @__PURE__ */ jsx(Play, { size: 14 }),
75
- /* @__PURE__ */ jsx("span", { children: "Preview" })
76
- ] }) }),
77
- /* @__PURE__ */ jsxs("div", { className: "playground-panel-content playground-preview", children: [
78
- /* @__PURE__ */ jsx(LivePreview, {}),
79
- /* @__PURE__ */ jsx(LiveError, { className: "playground-error" })
80
- ] })
81
- ] })
82
- ] })
83
- }
84
- ) });
85
- }
86
-
87
- export {
88
- Playground
89
- };
@@ -1,60 +0,0 @@
1
- /* ═══════════════════════════════════════════════════════════
2
- HOME / LANDING PAGE — Layout only
3
- Component styles (badge, buttons, cards) now live in
4
- mdx-components.css and use the shared UI components.
5
- ═══════════════════════════════════════════════════════════ */
6
- .boltdocs-home {
7
- min-height: calc(100vh - var(--ld-navbar-height));
8
- }
9
-
10
- .home-hero {
11
- display: flex;
12
- align-items: center;
13
- justify-content: center;
14
- padding: 6rem 2rem 4rem;
15
- text-align: center;
16
- }
17
-
18
- .hero-content {
19
- max-width: 680px;
20
- }
21
-
22
- .hero-title {
23
- font-size: 3.5rem;
24
- font-weight: 900;
25
- line-height: 1.1;
26
- margin: 0 0 1.25rem;
27
- letter-spacing: -0.03em;
28
- color: var(--ld-text-main);
29
- }
30
-
31
- .hero-highlight {
32
- background: linear-gradient(
33
- 135deg,
34
- var(--ld-gradient-from),
35
- var(--ld-gradient-to)
36
- );
37
- -webkit-background-clip: text;
38
- -webkit-text-fill-color: transparent;
39
- background-clip: text;
40
- }
41
-
42
- .hero-description {
43
- font-size: 1.125rem;
44
- color: var(--ld-text-muted);
45
- line-height: 1.7;
46
- margin-bottom: 2rem;
47
- }
48
-
49
- .hero-actions {
50
- display: flex;
51
- gap: 0.75rem;
52
- justify-content: center;
53
- flex-wrap: wrap;
54
- }
55
-
56
- .home-features {
57
- padding: 2rem 2rem 6rem;
58
- max-width: 1000px;
59
- margin: 0 auto;
60
- }