sourcey 2.0.2 → 3.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.
Files changed (134) hide show
  1. package/LICENSE +661 -23
  2. package/README.md +129 -209
  3. package/dist/cli.js +18 -57
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client/scroll-tracker.js +125 -40
  6. package/dist/client/search.js +27 -3
  7. package/dist/client/tabs.js +164 -24
  8. package/dist/components/App.d.ts +3 -2
  9. package/dist/components/App.d.ts.map +1 -1
  10. package/dist/components/App.js +3 -3
  11. package/dist/components/App.js.map +1 -1
  12. package/dist/components/layout/Head.d.ts.map +1 -1
  13. package/dist/components/layout/Head.js +30 -9
  14. package/dist/components/layout/Head.js.map +1 -1
  15. package/dist/components/layout/Header.d.ts +2 -7
  16. package/dist/components/layout/Header.d.ts.map +1 -1
  17. package/dist/components/layout/Header.js +12 -15
  18. package/dist/components/layout/Header.js.map +1 -1
  19. package/dist/components/layout/Page.d.ts.map +1 -1
  20. package/dist/components/layout/Page.js +54 -10
  21. package/dist/components/layout/Page.js.map +1 -1
  22. package/dist/components/layout/Sidebar.js +1 -1
  23. package/dist/components/layout/Sidebar.js.map +1 -1
  24. package/dist/components/layout/TableOfContents.d.ts.map +1 -1
  25. package/dist/components/layout/TableOfContents.js +1 -1
  26. package/dist/components/layout/TableOfContents.js.map +1 -1
  27. package/dist/components/openapi/CodeSamples.d.ts +4 -2
  28. package/dist/components/openapi/CodeSamples.d.ts.map +1 -1
  29. package/dist/components/openapi/CodeSamples.js +9 -5
  30. package/dist/components/openapi/CodeSamples.js.map +1 -1
  31. package/dist/components/openapi/Definition.js +1 -1
  32. package/dist/components/openapi/Definition.js.map +1 -1
  33. package/dist/components/openapi/EndpointBar.d.ts.map +1 -1
  34. package/dist/components/openapi/EndpointBar.js +3 -3
  35. package/dist/components/openapi/EndpointBar.js.map +1 -1
  36. package/dist/components/openapi/Introduction.d.ts.map +1 -1
  37. package/dist/components/openapi/Introduction.js +1 -1
  38. package/dist/components/openapi/Introduction.js.map +1 -1
  39. package/dist/components/openapi/Operation.d.ts.map +1 -1
  40. package/dist/components/openapi/Operation.js +5 -1
  41. package/dist/components/openapi/Operation.js.map +1 -1
  42. package/dist/components/openapi/Responses.d.ts +2 -1
  43. package/dist/components/openapi/Responses.d.ts.map +1 -1
  44. package/dist/components/openapi/Responses.js +17 -6
  45. package/dist/components/openapi/Responses.js.map +1 -1
  46. package/dist/components/openapi/Security.d.ts.map +1 -1
  47. package/dist/components/openapi/Security.js +3 -2
  48. package/dist/components/openapi/Security.js.map +1 -1
  49. package/dist/components/openapi/Tags.d.ts.map +1 -1
  50. package/dist/components/openapi/Tags.js +1 -1
  51. package/dist/components/openapi/Tags.js.map +1 -1
  52. package/dist/components/schema/ExampleView.d.ts +1 -1
  53. package/dist/components/schema/ExampleView.d.ts.map +1 -1
  54. package/dist/components/schema/ExampleView.js +3 -2
  55. package/dist/components/schema/ExampleView.js.map +1 -1
  56. package/dist/components/ui/CopyButton.d.ts +6 -0
  57. package/dist/components/ui/CopyButton.d.ts.map +1 -0
  58. package/dist/components/ui/CopyButton.js +10 -0
  59. package/dist/components/ui/CopyButton.js.map +1 -0
  60. package/dist/components/ui/Markdown.js +1 -1
  61. package/dist/components/ui/Markdown.js.map +1 -1
  62. package/dist/components/ui/SocialIcon.d.ts +5 -0
  63. package/dist/components/ui/SocialIcon.d.ts.map +1 -0
  64. package/dist/components/ui/SocialIcon.js +19 -0
  65. package/dist/components/ui/SocialIcon.js.map +1 -0
  66. package/dist/config.d.ts +133 -37
  67. package/dist/config.d.ts.map +1 -1
  68. package/dist/config.js +227 -73
  69. package/dist/config.js.map +1 -1
  70. package/dist/core/doxygen-loader.d.ts +9 -0
  71. package/dist/core/doxygen-loader.d.ts.map +1 -0
  72. package/dist/core/doxygen-loader.js +68 -0
  73. package/dist/core/doxygen-loader.js.map +1 -0
  74. package/dist/core/markdown-loader.d.ts +2 -5
  75. package/dist/core/markdown-loader.d.ts.map +1 -1
  76. package/dist/core/markdown-loader.js +218 -27
  77. package/dist/core/markdown-loader.js.map +1 -1
  78. package/dist/core/navigation.d.ts +2 -2
  79. package/dist/core/navigation.d.ts.map +1 -1
  80. package/dist/core/navigation.js +9 -10
  81. package/dist/core/navigation.js.map +1 -1
  82. package/dist/core/search-indexer.d.ts +1 -1
  83. package/dist/core/search-indexer.d.ts.map +1 -1
  84. package/dist/core/search-indexer.js +6 -5
  85. package/dist/core/search-indexer.js.map +1 -1
  86. package/dist/dev-server.d.ts +0 -12
  87. package/dist/dev-server.d.ts.map +1 -1
  88. package/dist/dev-server.js +101 -79
  89. package/dist/dev-server.js.map +1 -1
  90. package/dist/index.d.ts +2 -30
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +82 -70
  93. package/dist/index.js.map +1 -1
  94. package/dist/renderer/context.d.ts +29 -2
  95. package/dist/renderer/context.d.ts.map +1 -1
  96. package/dist/renderer/context.js +1 -1
  97. package/dist/renderer/context.js.map +1 -1
  98. package/dist/renderer/html-builder.d.ts +3 -16
  99. package/dist/renderer/html-builder.d.ts.map +1 -1
  100. package/dist/renderer/html-builder.js +6 -20
  101. package/dist/renderer/html-builder.js.map +1 -1
  102. package/dist/renderer/static-renderer.d.ts +2 -2
  103. package/dist/renderer/static-renderer.d.ts.map +1 -1
  104. package/dist/renderer/static-renderer.js +2 -2
  105. package/dist/renderer/static-renderer.js.map +1 -1
  106. package/dist/themes/default/main.css +13 -1
  107. package/dist/themes/default/sourcey.css +629 -41
  108. package/dist/utils/code-samples.d.ts +8 -3
  109. package/dist/utils/code-samples.d.ts.map +1 -1
  110. package/dist/utils/code-samples.js +188 -51
  111. package/dist/utils/code-samples.js.map +1 -1
  112. package/dist/utils/copy-svg.d.ts +9 -0
  113. package/dist/utils/copy-svg.d.ts.map +1 -0
  114. package/dist/utils/copy-svg.js +9 -0
  115. package/dist/utils/copy-svg.js.map +1 -0
  116. package/dist/utils/highlighter.d.ts.map +1 -1
  117. package/dist/utils/highlighter.js +18 -7
  118. package/dist/utils/highlighter.js.map +1 -1
  119. package/dist/utils/icons.d.ts +14 -0
  120. package/dist/utils/icons.d.ts.map +1 -0
  121. package/dist/utils/icons.js +59 -0
  122. package/dist/utils/icons.js.map +1 -0
  123. package/dist/utils/lang-icons.d.ts +17 -0
  124. package/dist/utils/lang-icons.d.ts.map +1 -0
  125. package/dist/utils/lang-icons.js +87 -0
  126. package/dist/utils/lang-icons.js.map +1 -0
  127. package/dist/utils/markdown.d.ts +17 -1
  128. package/dist/utils/markdown.d.ts.map +1 -1
  129. package/dist/utils/markdown.js +59 -2
  130. package/dist/utils/markdown.js.map +1 -1
  131. package/dist/vite-plugin.d.ts.map +1 -1
  132. package/dist/vite-plugin.js +4 -7
  133. package/dist/vite-plugin.js.map +1 -1
  134. package/package.json +6 -5
@@ -1,8 +1,13 @@
1
1
  import type { NormalizedOperation } from "../core/types.js";
2
2
  import type { CodeSample } from "../core/types.js";
3
+ /** Default languages when none configured. */
4
+ export declare const DEFAULT_CODE_SAMPLE_LANGS: string[];
3
5
  /**
4
- * Auto-generate code samples (curl, JavaScript fetch, Python requests)
5
- * from an operation's spec when no custom x-code-samples are provided.
6
+ * Generate code samples for an operation.
7
+ *
8
+ * @param langs - Which languages to generate. Defaults to curl, JS, Python.
9
+ * Use keys from the generator registry: curl, javascript,
10
+ * python, go, ruby, java, php, rust, csharp.
6
11
  */
7
- export declare function generateCodeSamples(op: NormalizedOperation, serverUrl: string): CodeSample[];
12
+ export declare function generateCodeSamples(op: NormalizedOperation, serverUrl: string, langs?: string[]): CodeSample[];
8
13
  //# sourceMappingURL=code-samples.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"code-samples.d.ts","sourceRoot":"","sources":["../../src/utils/code-samples.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,mBAAmB,EACvB,SAAS,EAAE,MAAM,GAChB,UAAU,EAAE,CAkBd"}
1
+ {"version":3,"file":"code-samples.d.ts","sourceRoot":"","sources":["../../src/utils/code-samples.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAuLnD,8CAA8C;AAC9C,eAAO,MAAM,yBAAyB,UAAmC,CAAC;AAM1E;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,mBAAmB,EACvB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAM,EAA8B,GAC1C,UAAU,EAAE,CAmBd"}
@@ -1,9 +1,186 @@
1
1
  import { generateExample } from "./example-generator.js";
2
+ // ---------------------------------------------------------------------------
3
+ // Generator registry
4
+ // ---------------------------------------------------------------------------
5
+ const generators = {
6
+ curl({ url, method, contentType, body }) {
7
+ const parts = [`curl -X ${method} '${url}'`];
8
+ if (contentType)
9
+ parts.push(` -H 'Content-Type: ${contentType}'`);
10
+ if (body)
11
+ parts.push(` -d '${body}'`);
12
+ return { lang: "bash", label: "cURL", source: parts.join(" \\\n") };
13
+ },
14
+ javascript({ url, method, contentType, body }) {
15
+ const lines = [`const response = await fetch('${url}', {`];
16
+ lines.push(` method: '${method}',`);
17
+ if (contentType) {
18
+ lines.push(` headers: {`, ` 'Content-Type': '${contentType}',`, ` },`);
19
+ }
20
+ if (body)
21
+ lines.push(` body: JSON.stringify(${body}),`);
22
+ lines.push(`});`, ``, `const data = await response.json();`);
23
+ return { lang: "javascript", label: "JavaScript", source: lines.join("\n") };
24
+ },
25
+ typescript({ url, method, contentType, body }) {
26
+ const lines = [`const response = await fetch('${url}', {`];
27
+ lines.push(` method: '${method}',`);
28
+ if (contentType) {
29
+ lines.push(` headers: {`, ` 'Content-Type': '${contentType}',`, ` },`);
30
+ }
31
+ if (body)
32
+ lines.push(` body: JSON.stringify(${body}),`);
33
+ lines.push(`});`, ``, `const data: Record<string, unknown> = await response.json();`);
34
+ return { lang: "typescript", label: "TypeScript", source: lines.join("\n") };
35
+ },
36
+ python({ url, method, contentType, body }) {
37
+ const lines = ["import requests", ""];
38
+ const args = [`'${url}'`];
39
+ if (body) {
40
+ lines.push(`payload = ${pythonDict(body)}`, "");
41
+ args.push("json=payload");
42
+ }
43
+ else if (contentType) {
44
+ args.push(`headers={'Content-Type': '${contentType}'}`);
45
+ }
46
+ lines.push(`response = requests.${method.toLowerCase()}(${args.join(", ")})`);
47
+ lines.push(`data = response.json()`);
48
+ return { lang: "python", label: "Python", source: lines.join("\n") };
49
+ },
50
+ go({ url, method, body }) {
51
+ const lines = ["package main", "", "import (", ` "fmt"`, ` "io"`, ` "net/http"`,];
52
+ if (body)
53
+ lines.push(` "strings"`);
54
+ lines.push(")", "");
55
+ lines.push("func main() {");
56
+ if (body) {
57
+ lines.push(` body := strings.NewReader(\`${body}\`)`);
58
+ lines.push(` req, _ := http.NewRequest("${method}", "${url}", body)`);
59
+ }
60
+ else {
61
+ lines.push(` req, _ := http.NewRequest("${method}", "${url}", nil)`);
62
+ }
63
+ lines.push(` req.Header.Set("Content-Type", "application/json")`);
64
+ lines.push(` resp, _ := http.DefaultClient.Do(req)`);
65
+ lines.push(` defer resp.Body.Close()`);
66
+ lines.push(` data, _ := io.ReadAll(resp.Body)`);
67
+ lines.push(` fmt.Println(string(data))`);
68
+ lines.push("}");
69
+ return { lang: "go", label: "Go", source: lines.join("\n") };
70
+ },
71
+ ruby({ url, method, contentType, body }) {
72
+ const lines = [
73
+ `require 'net/http'`,
74
+ `require 'json'`,
75
+ ``,
76
+ `uri = URI('${url}')`,
77
+ ];
78
+ const methodClass = method === "GET" ? "Get" : method === "POST" ? "Post" : method === "PUT" ? "Put" : method === "DELETE" ? "Delete" : method === "PATCH" ? "Patch" : "Post";
79
+ lines.push(`request = Net::HTTP::${methodClass}.new(uri)`);
80
+ if (contentType)
81
+ lines.push(`request['Content-Type'] = '${contentType}'`);
82
+ if (body)
83
+ lines.push(`request.body = '${body}'`);
84
+ lines.push(``, `response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(request) }`);
85
+ lines.push(`data = JSON.parse(response.body)`);
86
+ return { lang: "ruby", label: "Ruby", source: lines.join("\n") };
87
+ },
88
+ java({ url, method, body }) {
89
+ const lines = [
90
+ `import java.net.http.*;`,
91
+ `import java.net.URI;`,
92
+ ``,
93
+ `HttpClient client = HttpClient.newHttpClient();`,
94
+ ];
95
+ if (body) {
96
+ lines.push(`String body = """`, `${body}""";`, ``);
97
+ lines.push(`HttpRequest request = HttpRequest.newBuilder()`);
98
+ lines.push(` .uri(URI.create("${url}"))`);
99
+ lines.push(` .header("Content-Type", "application/json")`);
100
+ lines.push(` .method("${method}", HttpRequest.BodyPublishers.ofString(body))`);
101
+ }
102
+ else {
103
+ lines.push(`HttpRequest request = HttpRequest.newBuilder()`);
104
+ lines.push(` .uri(URI.create("${url}"))`);
105
+ lines.push(` .method("${method}", HttpRequest.BodyPublishers.noBody())`);
106
+ }
107
+ lines.push(` .build();`, ``);
108
+ lines.push(`HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());`);
109
+ lines.push(`System.out.println(response.body());`);
110
+ return { lang: "java", label: "Java", source: lines.join("\n") };
111
+ },
112
+ php({ url, method, contentType, body }) {
113
+ const lines = [`<?php`, `$ch = curl_init('${url}');`];
114
+ lines.push(`curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);`);
115
+ if (method !== "GET") {
116
+ lines.push(`curl_setopt($ch, CURLOPT_CUSTOMREQUEST, '${method}');`);
117
+ }
118
+ if (contentType) {
119
+ lines.push(`curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: ${contentType}']);`);
120
+ }
121
+ if (body) {
122
+ lines.push(`curl_setopt($ch, CURLOPT_POSTFIELDS, '${body}');`);
123
+ }
124
+ lines.push(``, `$response = curl_exec($ch);`, `curl_close($ch);`);
125
+ lines.push(`$data = json_decode($response, true);`);
126
+ return { lang: "php", label: "PHP", source: lines.join("\n") };
127
+ },
128
+ rust({ url, method, body }) {
129
+ const lines = [
130
+ `use reqwest;`,
131
+ ``,
132
+ `#[tokio::main]`,
133
+ `async fn main() -> Result<(), reqwest::Error> {`,
134
+ ` let client = reqwest::Client::new();`,
135
+ ];
136
+ const m = method.toLowerCase();
137
+ if (body) {
138
+ lines.push(` let body = serde_json::json!(${body});`);
139
+ lines.push(` let response = client.${m}("${url}")`);
140
+ lines.push(` .json(&body)`);
141
+ }
142
+ else {
143
+ lines.push(` let response = client.${m}("${url}")`);
144
+ }
145
+ lines.push(` .send()`);
146
+ lines.push(` .await?`);
147
+ lines.push(` .text()`);
148
+ lines.push(` .await?;`);
149
+ lines.push(` println!("{}", response);`);
150
+ lines.push(` Ok(())`);
151
+ lines.push(`}`);
152
+ return { lang: "rust", label: "Rust", source: lines.join("\n") };
153
+ },
154
+ csharp({ url, method, body }) {
155
+ const lines = [
156
+ `using var client = new HttpClient();`,
157
+ ``,
158
+ ];
159
+ if (body) {
160
+ lines.push(`var content = new StringContent("""`, `${body}""", System.Text.Encoding.UTF8, "application/json");`);
161
+ lines.push(`var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.${method[0] + method.slice(1).toLowerCase()}, "${url}") { Content = content });`);
162
+ }
163
+ else {
164
+ lines.push(`var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.${method[0] + method.slice(1).toLowerCase()}, "${url}"));`);
165
+ }
166
+ lines.push(`var data = await response.Content.ReadAsStringAsync();`);
167
+ return { lang: "csharp", label: "C#", source: lines.join("\n") };
168
+ },
169
+ };
170
+ /** Default languages when none configured. */
171
+ export const DEFAULT_CODE_SAMPLE_LANGS = ["curl", "javascript", "python"];
172
+ // ---------------------------------------------------------------------------
173
+ // Public API
174
+ // ---------------------------------------------------------------------------
2
175
  /**
3
- * Auto-generate code samples (curl, JavaScript fetch, Python requests)
4
- * from an operation's spec when no custom x-code-samples are provided.
176
+ * Generate code samples for an operation.
177
+ *
178
+ * @param langs - Which languages to generate. Defaults to curl, JS, Python.
179
+ * Use keys from the generator registry: curl, javascript,
180
+ * python, go, ruby, java, php, rust, csharp.
5
181
  */
6
- export function generateCodeSamples(op, serverUrl) {
182
+ export function generateCodeSamples(op, serverUrl, langs = DEFAULT_CODE_SAMPLE_LANGS) {
183
+ // Spec-defined samples always win
7
184
  if (op.codeSamples?.length)
8
185
  return op.codeSamples;
9
186
  const url = `${serverUrl.replace(/\/$/, "")}${op.path}`;
@@ -13,13 +190,15 @@ export function generateCodeSamples(op, serverUrl) {
13
190
  ? Object.keys(op.requestBody.content)[0] ?? "application/json"
14
191
  : undefined;
15
192
  const bodyExample = hasBody ? getRequestBodyExample(op) : undefined;
16
- const bodyJson = bodyExample ? JSON.stringify(bodyExample, null, 2) : undefined;
17
- return [
18
- generateCurl(url, method, contentType, bodyJson),
19
- generateJavaScript(url, method, contentType, bodyJson),
20
- generatePython(url, method, contentType, bodyJson),
21
- ];
193
+ const body = bodyExample ? JSON.stringify(bodyExample, null, 2) : undefined;
194
+ const req = { url, method, contentType, body };
195
+ return langs
196
+ .map((lang) => generators[lang]?.(req))
197
+ .filter((s) => !!s);
22
198
  }
199
+ // ---------------------------------------------------------------------------
200
+ // Helpers
201
+ // ---------------------------------------------------------------------------
23
202
  function getRequestBodyExample(op) {
24
203
  const content = op.requestBody?.content;
25
204
  if (!content)
@@ -33,49 +212,7 @@ function getRequestBodyExample(op) {
33
212
  return generateExample(mediaType.schema);
34
213
  return undefined;
35
214
  }
36
- function generateCurl(url, method, contentType, body) {
37
- const parts = [`curl -X ${method} '${url}'`];
38
- if (contentType) {
39
- parts.push(` -H 'Content-Type: ${contentType}'`);
40
- }
41
- if (body) {
42
- parts.push(` -d '${body}'`);
43
- }
44
- return { lang: "bash", label: "cURL", source: parts.join(" \\\n") };
45
- }
46
- function generateJavaScript(url, method, contentType, body) {
47
- const lines = [`const response = await fetch('${url}', {`];
48
- lines.push(` method: '${method}',`);
49
- if (contentType) {
50
- lines.push(` headers: {`);
51
- lines.push(` 'Content-Type': '${contentType}',`);
52
- lines.push(` },`);
53
- }
54
- if (body) {
55
- lines.push(` body: JSON.stringify(${body}),`);
56
- }
57
- lines.push(`});`);
58
- lines.push(``);
59
- lines.push(`const data = await response.json();`);
60
- return { lang: "javascript", label: "JavaScript", source: lines.join("\n") };
61
- }
62
- function generatePython(url, method, contentType, body) {
63
- const lines = ["import requests", ""];
64
- const args = [`'${url}'`];
65
- if (body) {
66
- lines.push(`payload = ${pythonDict(body)}`);
67
- lines.push("");
68
- args.push("json=payload");
69
- }
70
- if (contentType && !body) {
71
- args.push(`headers={'Content-Type': '${contentType}'}`);
72
- }
73
- lines.push(`response = requests.${method.toLowerCase()}(${args.join(", ")})`);
74
- lines.push(`data = response.json()`);
75
- return { lang: "python", label: "Python", source: lines.join("\n") };
76
- }
77
215
  function pythonDict(jsonStr) {
78
- // Simple conversion of JSON to Python dict syntax
79
216
  return jsonStr
80
217
  .replace(/: true/g, ": True")
81
218
  .replace(/: false/g, ": False")
@@ -1 +1 @@
1
- {"version":3,"file":"code-samples.js","sourceRoot":"","sources":["../../src/utils/code-samples.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-samples.js","sourceRoot":"","sources":["../../src/utils/code-samples.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copy icon SVG paths — single source of truth.
3
+ * Used by CopyButton.tsx (Preact component) and markdown.ts (raw HTML string).
4
+ */
5
+ export declare const COPY_ICON_PATH_1 = "M14.25 5.25H7.25C6.14543 5.25 5.25 6.14543 5.25 7.25V14.25C5.25 15.3546 6.14543 16.25 7.25 16.25H14.25C15.3546 16.25 16.25 15.3546 16.25 14.25V7.25C16.25 6.14543 15.3546 5.25 14.25 5.25Z";
6
+ export declare const COPY_ICON_PATH_2 = "M2.80103 11.998L1.77203 5.07397C1.61003 3.98097 2.36403 2.96397 3.45603 2.80197L10.38 1.77297C11.313 1.63397 12.19 2.16297 12.528 3.00097";
7
+ /** Raw HTML string for server-rendered contexts (markdown code blocks). */
8
+ export declare const COPY_ICON_SVG = "<svg fill=\"none\" height=\"18\" viewBox=\"0 0 18 18\" width=\"18\" xmlns=\"http://www.w3.org/2000/svg\"><title>Copy</title><path d=\"M14.25 5.25H7.25C6.14543 5.25 5.25 6.14543 5.25 7.25V14.25C5.25 15.3546 6.14543 16.25 7.25 16.25H14.25C15.3546 16.25 16.25 15.3546 16.25 14.25V7.25C16.25 6.14543 15.3546 5.25 14.25 5.25Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.80103 11.998L1.77203 5.07397C1.61003 3.98097 2.36403 2.96397 3.45603 2.80197L10.38 1.77297C11.313 1.63397 12.19 2.16297 12.528 3.00097\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>";
9
+ //# sourceMappingURL=copy-svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-svg.d.ts","sourceRoot":"","sources":["../../src/utils/copy-svg.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,gBAAgB,+LACiK,CAAC;AAE/L,eAAO,MAAM,gBAAgB,8IACgH,CAAC;AAE9I,2EAA2E;AAC3E,eAAO,MAAM,aAAa,sqBAA2W,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copy icon SVG paths — single source of truth.
3
+ * Used by CopyButton.tsx (Preact component) and markdown.ts (raw HTML string).
4
+ */
5
+ export const COPY_ICON_PATH_1 = "M14.25 5.25H7.25C6.14543 5.25 5.25 6.14543 5.25 7.25V14.25C5.25 15.3546 6.14543 16.25 7.25 16.25H14.25C15.3546 16.25 16.25 15.3546 16.25 14.25V7.25C16.25 6.14543 15.3546 5.25 14.25 5.25Z";
6
+ export const COPY_ICON_PATH_2 = "M2.80103 11.998L1.77203 5.07397C1.61003 3.98097 2.36403 2.96397 3.45603 2.80197L10.38 1.77297C11.313 1.63397 12.19 2.16297 12.528 3.00097";
7
+ /** Raw HTML string for server-rendered contexts (markdown code blocks). */
8
+ export const COPY_ICON_SVG = `<svg fill="none" height="18" viewBox="0 0 18 18" width="18" xmlns="http://www.w3.org/2000/svg"><title>Copy</title><path d="${COPY_ICON_PATH_1}" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="${COPY_ICON_PATH_2}" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
9
+ //# sourceMappingURL=copy-svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-svg.js","sourceRoot":"","sources":["../../src/utils/copy-svg.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,4LAA4L,CAAC;AAE/L,MAAM,CAAC,MAAM,gBAAgB,GAC3B,2IAA2I,CAAC;AAE9I,2EAA2E;AAC3E,MAAM,CAAC,MAAM,aAAa,GAAG,8HAA8H,gBAAgB,uGAAuG,gBAAgB,mGAAmG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"highlighter.d.ts","sourceRoot":"","sources":["../../src/utils/highlighter.ts"],"names":[],"mappings":"AA6BA;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBjE"}
1
+ {"version":3,"file":"highlighter.d.ts","sourceRoot":"","sources":["../../src/utils/highlighter.ts"],"names":[],"mappings":"AAuCA;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBjE"}
@@ -11,17 +11,27 @@ import html from "shiki/langs/html.mjs";
11
11
  import css from "shiki/langs/css.mjs";
12
12
  import go from "shiki/langs/go.mjs";
13
13
  import rust from "shiki/langs/rust.mjs";
14
+ import ruby from "shiki/langs/ruby.mjs";
15
+ import java from "shiki/langs/java.mjs";
16
+ import php from "shiki/langs/php.mjs";
17
+ import csharp from "shiki/langs/csharp.mjs";
18
+ import swift from "shiki/langs/swift.mjs";
19
+ import kotlin from "shiki/langs/kotlin.mjs";
20
+ import dart from "shiki/langs/dart.mjs";
14
21
  import cmake from "shiki/langs/cmake.mjs";
15
22
  import sql from "shiki/langs/sql.mjs";
16
23
  import xml from "shiki/langs/xml.mjs";
17
24
  import docker from "shiki/langs/docker.mjs";
18
25
  import githubLight from "shiki/themes/github-light-default.mjs";
19
26
  import darkPlus from "shiki/themes/dark-plus.mjs";
20
- const highlighter = createHighlighterCoreSync({
21
- themes: [githubLight, darkPlus],
22
- langs: [js, ts, bash, python, json, cpp, c, yaml, html, css, go, rust, cmake, sql, xml, docker],
23
- engine: createJavaScriptRegexEngine(),
24
- });
27
+ // Cache on globalThis so Vite SSR re-evaluation doesn't create new instances.
28
+ const CACHE_KEY = "__sourcey_shiki__";
29
+ const highlighter = globalThis[CACHE_KEY]
30
+ ?? (globalThis[CACHE_KEY] = createHighlighterCoreSync({
31
+ themes: [githubLight, darkPlus],
32
+ langs: [js, ts, bash, python, json, cpp, c, yaml, html, css, go, rust, ruby, java, php, csharp, swift, kotlin, dart, cmake, sql, xml, docker],
33
+ engine: createJavaScriptRegexEngine(),
34
+ }));
25
35
  /**
26
36
  * Highlight code with Shiki (synchronous, build-time).
27
37
  * Uses dual-theme output: light theme inline + dark theme via CSS vars.
@@ -33,12 +43,12 @@ const highlighter = createHighlighterCoreSync({
33
43
  export function highlightCode(code, lang) {
34
44
  const resolved = lang && highlighter.getLoadedLanguages().includes(lang) ? lang : "text";
35
45
  if (resolved === "text") {
36
- // No highlighting — return escaped HTML in our standard structure
37
46
  const escaped = code
38
47
  .replace(/&/g, "&amp;")
39
48
  .replace(/</g, "&lt;")
40
49
  .replace(/>/g, "&gt;");
41
- return `<pre class="shiki"><code>${escaped}</code></pre>`;
50
+ const lines = escaped.split("\n").map(l => `<span class="line"><span>${l}</span></span>`).join("\n");
51
+ return `<pre class="shiki" tabindex="0"><code>${lines}</code></pre>`;
42
52
  }
43
53
  return highlighter.codeToHtml(code, {
44
54
  lang: resolved,
@@ -46,6 +56,7 @@ export function highlightCode(code, lang) {
46
56
  light: "github-light-default",
47
57
  dark: "dark-plus",
48
58
  },
59
+ defaultColor: false,
49
60
  });
50
61
  }
51
62
  //# sourceMappingURL=highlighter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"highlighter.js","sourceRoot":"","sources":["../../src/utils/highlighter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC5C,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC5C,OAAO,IAAI,MAAM,sBAAsB,CAAC;AACxC,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,IAAI,MAAM,sBAAsB,CAAC;AACxC,OAAO,GAAG,MAAM,qBAAqB,CAAC;AACtC,OAAO,CAAC,MAAM,mBAAmB,CAAC;AAClC,OAAO,IAAI,MAAM,sBAAsB,CAAC;AACxC,OAAO,IAAI,MAAM,sBAAsB,CAAC;AACxC,OAAO,GAAG,MAAM,qBAAqB,CAAC;AACtC,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACpC,OAAO,IAAI,MAAM,sBAAsB,CAAC;AACxC,OAAO,KAAK,MAAM,uBAAuB,CAAC;AAC1C,OAAO,GAAG,MAAM,qBAAqB,CAAC;AACtC,OAAO,GAAG,MAAM,qBAAqB,CAAC;AACtC,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,WAAW,MAAM,uCAAuC,CAAC;AAChE,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AAElD,MAAM,WAAW,GAAG,yBAAyB,CAAC;IAC5C,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;IAC/B,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC;IAC/F,MAAM,EAAE,2BAA2B,EAAE;CACtC,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAAa;IACvD,MAAM,QAAQ,GAAG,IAAI,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzF,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,kEAAkE;QAClE,MAAM,OAAO,GAAG,IAAI;aACjB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzB,OAAO,4BAA4B,OAAO,eAAe,CAAC;IAC5D,CAAC;IAED,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE;QAClC,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE;YACN,KAAK,EAAE,sBAAsB;YAC7B,IAAI,EAAE,WAAW;SAClB;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"highlighter.js","sourceRoot":"","sources":["../../src/utils/highlighter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Heroicons (outline, 24x24) — MIT License
3
+ * https://heroicons.com
4
+ *
5
+ * Inline SVG map for card icons and other markdown components.
6
+ * Each value is the inner path content (no wrapping <svg>).
7
+ * Render with: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">${path}</svg>`
8
+ */
9
+ /**
10
+ * Render a Heroicon as an inline SVG string.
11
+ * Returns empty string if the icon name is not found.
12
+ */
13
+ export declare function renderIcon(name: string): string;
14
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/utils/icons.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgFH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Heroicons (outline, 24x24) — MIT License
3
+ * https://heroicons.com
4
+ *
5
+ * Inline SVG map for card icons and other markdown components.
6
+ * Each value is the inner path content (no wrapping <svg>).
7
+ * Render with: `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">${path}</svg>`
8
+ */
9
+ const icons = {
10
+ // Search / discovery
11
+ search: '<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"/>',
12
+ // Commerce
13
+ cart: '<path stroke-linecap="round" stroke-linejoin="round" d="M2.25 3h1.386c.51 0 .955.343 1.087.835l.383 1.437M7.5 14.25a3 3 0 0 0-3 3h15.75m-12.75-3h11.218c1.121-2.3 2.1-4.684 2.924-7.138a60.114 60.114 0 0 0-16.536-1.84M7.5 14.25 5.106 5.272M6 20.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Zm12.75 0a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z"/>',
14
+ // People / users
15
+ users: '<path stroke-linecap="round" stroke-linejoin="round" d="M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z"/>',
16
+ // Notifications
17
+ bell: '<path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0"/>',
18
+ // Code / terminal
19
+ code: '<path stroke-linecap="round" stroke-linejoin="round" d="M17.25 6.75 22.5 12l-5.25 5.25m-10.5 0L1.5 12l5.25-5.25m7.5-3-4.5 16.5"/>',
20
+ terminal: '<path stroke-linecap="round" stroke-linejoin="round" d="m6.75 7.5 3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0 0 21 18V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v12a2.25 2.25 0 0 0 2.25 2.25Z"/>',
21
+ // Documents / books
22
+ book: '<path stroke-linecap="round" stroke-linejoin="round" d="M12 6.042A8.967 8.967 0 0 0 6 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 0 1 6 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 0 1 6-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0 0 18 18a8.967 8.967 0 0 0-6 2.292m0-14.25v14.25"/>',
23
+ document: '<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"/>',
24
+ // Security
25
+ key: '<path stroke-linecap="round" stroke-linejoin="round" d="M15.75 5.25a3 3 0 0 1 3 3m3 0a6 6 0 0 1-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1 1 21.75 8.25Z"/>',
26
+ shield: '<path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z"/>',
27
+ lock: '<path stroke-linecap="round" stroke-linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z"/>',
28
+ // Connectivity
29
+ plug: '<path stroke-linecap="round" stroke-linejoin="round" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"/>',
30
+ globe: '<path stroke-linecap="round" stroke-linejoin="round" d="M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 0 1 7.843 4.582M12 3a8.997 8.997 0 0 0-7.843 4.582m15.686 0A11.953 11.953 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0 1 12 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 0 1 3 12c0-1.605.42-3.113 1.157-4.418"/>',
31
+ // Data
32
+ database: '<path stroke-linecap="round" stroke-linejoin="round" d="M20.25 6.375c0 2.278-3.694 4.125-8.25 4.125S3.75 8.653 3.75 6.375m16.5 0c0-2.278-3.694-4.125-8.25-4.125S3.75 4.097 3.75 6.375m16.5 0v11.25c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125V6.375m16.5 0v3.75m-16.5-3.75v3.75m16.5 0v3.75C20.25 16.153 16.556 18 12 18s-8.25-1.847-8.25-4.125v-3.75m16.5 0c0 2.278-3.694 4.125-8.25 4.125s-8.25-1.847-8.25-4.125"/>',
33
+ // Communication
34
+ envelope: '<path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25m19.5 0v.243a2.25 2.25 0 0 1-1.07 1.916l-7.5 4.615a2.25 2.25 0 0 1-2.36 0L3.32 8.91a2.25 2.25 0 0 1-1.07-1.916V6.75"/>',
35
+ // Navigation / flow
36
+ arrow: '<path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"/>',
37
+ bolt: '<path stroke-linecap="round" stroke-linejoin="round" d="m3.75 13.5 10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75Z"/>',
38
+ // Settings / config
39
+ cog: '<path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z"/><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"/>',
40
+ // Misc
41
+ star: '<path stroke-linecap="round" stroke-linejoin="round" d="M11.48 3.499a.562.562 0 0 1 1.04 0l2.125 5.111a.563.563 0 0 0 .475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 0 0-.182.557l1.285 5.385a.562.562 0 0 1-.84.61l-4.725-2.885a.562.562 0 0 0-.586 0L6.982 20.54a.562.562 0 0 1-.84-.61l1.285-5.386a.562.562 0 0 0-.182-.557l-4.204-3.602a.562.562 0 0 1 .321-.988l5.518-.442a.563.563 0 0 0 .475-.345L11.48 3.5Z"/>',
42
+ rocket: '<path stroke-linecap="round" stroke-linejoin="round" d="M15.59 14.37a48.414 48.414 0 0 1-6.01-1.7c-.837-.25-1.538-.707-2.088-1.257m8.098 2.957a48.108 48.108 0 0 0 3.478-.852c.227-.07.457-.14.689-.213a1.5 1.5 0 0 0 .955-1.04l.44-2.201a1.5 1.5 0 0 0-.725-1.594l-1.898-1.1a1.5 1.5 0 0 0-1.501 0l-1.898 1.1a1.5 1.5 0 0 0-.725 1.594l.44 2.2c.065.324-.057.662-.283.906M15.59 14.37l-3.79 3.79a1.5 1.5 0 0 1-2.122 0l-.379-.379M15.59 14.37l3.79-3.79a1.5 1.5 0 0 0 0-2.122l-.379-.379m-7.422 6.29-2.29 2.29M9.5 11.413l-2.29-2.29M6.912 15.4l-1.342 1.342a1.5 1.5 0 0 0 0 2.121l.707.707a1.5 1.5 0 0 0 2.121 0l1.342-1.342"/>',
43
+ cube: '<path stroke-linecap="round" stroke-linejoin="round" d="m21 7.5-9-5.25L3 7.5m18 0-9 5.25m9-5.25v9l-9 5.25M3 7.5l9 5.25M3 7.5v9l9 5.25m0-9v9"/>',
44
+ heart: '<path stroke-linecap="round" stroke-linejoin="round" d="M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12Z"/>',
45
+ check: '<path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 6 6 9-13.5"/>',
46
+ info: '<path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z"/>',
47
+ warning: '<path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z"/>',
48
+ };
49
+ /**
50
+ * Render a Heroicon as an inline SVG string.
51
+ * Returns empty string if the icon name is not found.
52
+ */
53
+ export function renderIcon(name) {
54
+ const path = icons[name];
55
+ if (!path)
56
+ return "";
57
+ return `<svg class="card-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">${path}</svg>`;
58
+ }
59
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/utils/icons.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,KAAK,GAA2B;IACpC,qBAAqB;IACrB,MAAM,EACJ,0IAA0I;IAE5I,WAAW;IACX,IAAI,EACF,gVAAgV;IAElV,iBAAiB;IACjB,KAAK,EACH,sbAAsb;IAExb,gBAAgB;IAChB,IAAI,EACF,mRAAmR;IAErR,kBAAkB;IAClB,IAAI,EACF,mIAAmI;IACrI,QAAQ,EACN,kNAAkN;IAEpN,oBAAoB;IACpB,IAAI,EACF,+SAA+S;IACjT,QAAQ,EACN,8TAA8T;IAEhU,WAAW;IACX,GAAG,EACD,4QAA4Q;IAC9Q,MAAM,EACJ,+QAA+Q;IACjR,IAAI,EACF,4OAA4O;IAE9O,eAAe;IACf,IAAI,EACF,sOAAsO;IACxO,KAAK,EACH,whBAAwhB;IAE1hB,OAAO;IACP,QAAQ,EACN,kaAAka;IAEpa,gBAAgB;IAChB,QAAQ,EACN,2TAA2T;IAE7T,oBAAoB;IACpB,KAAK,EACH,gGAAgG;IAClG,IAAI,EACF,wHAAwH;IAE1H,oBAAoB;IACpB,GAAG,EACD,koCAAkoC;IAEpoC,OAAO;IACP,IAAI,EACF,4aAA4a;IAC9a,MAAM,EACJ,mmBAAmmB;IACrmB,IAAI,EACF,gJAAgJ;IAClJ,KAAK,EACH,0NAA0N;IAC5N,KAAK,EACH,kFAAkF;IACpF,IAAI,EACF,qNAAqN;IACvN,OAAO,EACL,6OAA6O;CAChP,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,sIAAsI,IAAI,QAAQ,CAAC;AAC5J,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Language icons for the code sample switcher.
3
+ *
4
+ * DevIcon plain variants (MIT). Designed for monochrome rendering at small sizes.
5
+ * https://devicon.dev/
6
+ */
7
+ /**
8
+ * Render a language icon as HTML.
9
+ * curl uses a stroked Heroicon. All others use DevIcon via data-lang + CSS mask.
10
+ */
11
+ export declare function langIcon(lang: string): string;
12
+ /**
13
+ * Generate CSS rules for all language icon masks.
14
+ * Call once at render time and inject into a <style> tag.
15
+ */
16
+ export declare function langIconCSS(): string;
17
+ //# sourceMappingURL=lang-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lang-icons.d.ts","sourceRoot":"","sources":["../../src/utils/lang-icons.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyDH;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa7C;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAUpC"}