@stacksjs/bunpress 0.0.5 → 0.1.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 (53) hide show
  1. package/CHANGELOG.md +296 -0
  2. package/README.md +113 -26
  3. package/dist/bin/cli.js +2 -85
  4. package/dist/chunk-16hpnayn.js +505 -0
  5. package/dist/chunk-njjmvdjd.js +8 -0
  6. package/dist/chunk-nt1zw6bf.js +9632 -0
  7. package/dist/chunk-zabbw4a8.js +2 -0
  8. package/dist/config.d.ts +3 -5
  9. package/dist/highlighter.d.ts +37 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/robots.d.ts +5 -0
  12. package/dist/rss.d.ts +16 -0
  13. package/dist/serve.d.ts +28 -0
  14. package/dist/sitemap.d.ts +5 -0
  15. package/dist/src/index.js +1 -242
  16. package/dist/template-loader.d.ts +16 -0
  17. package/dist/templates/blocks/alerts/caution.stx +9 -0
  18. package/dist/templates/blocks/alerts/important.stx +9 -0
  19. package/dist/templates/blocks/alerts/note.stx +9 -0
  20. package/dist/templates/blocks/alerts/tip.stx +9 -0
  21. package/dist/templates/blocks/alerts/warning.stx +9 -0
  22. package/dist/templates/blocks/containers/danger.stx +6 -0
  23. package/dist/templates/blocks/containers/details.stx +6 -0
  24. package/dist/templates/blocks/containers/info.stx +6 -0
  25. package/dist/templates/blocks/containers/raw.stx +3 -0
  26. package/dist/templates/blocks/containers/tip.stx +6 -0
  27. package/dist/templates/blocks/containers/warning.stx +6 -0
  28. package/dist/templates/blocks/inline/code.stx +1 -0
  29. package/dist/templates/blocks/inline/del.stx +1 -0
  30. package/dist/templates/blocks/inline/em.stx +1 -0
  31. package/dist/templates/blocks/inline/mark.stx +1 -0
  32. package/dist/templates/blocks/inline/strong.stx +1 -0
  33. package/dist/templates/blocks/inline/sub.stx +1 -0
  34. package/dist/templates/blocks/inline/sup.stx +1 -0
  35. package/dist/templates/features.stx +20 -0
  36. package/dist/templates/hero.stx +10 -0
  37. package/dist/templates/layout-doc.stx +157 -0
  38. package/dist/templates/layout-home.stx +23 -0
  39. package/dist/templates/page-toc.stx +267 -0
  40. package/dist/templates/sidebar-section.stx +42 -0
  41. package/dist/templates/sidebar.stx +54 -0
  42. package/dist/themes/bun/index.d.ts +34 -0
  43. package/dist/themes/index.d.ts +24 -0
  44. package/dist/themes/vitepress/base.css +549 -0
  45. package/dist/themes/vitepress/code-group.css +121 -0
  46. package/dist/themes/vitepress/custom-block.css +330 -0
  47. package/dist/themes/vitepress/index.d.ts +29 -0
  48. package/dist/themes/vitepress/index.ts +1963 -0
  49. package/dist/themes/vitepress/vars.css +436 -0
  50. package/dist/types.d.ts +154 -3
  51. package/package.json +32 -14
  52. package/dist/chunk-z2xpw4s7.js +0 -322
  53. package/dist/plugin.d.ts +0 -0
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{I as a,J as b,K as c,L as d}from"./chunk-nt1zw6bf.js";export{a as wrapInLayout,c as startServer,d as serveCLI,b as markdownToHtml};
package/dist/config.d.ts CHANGED
@@ -1,9 +1,7 @@
1
- import type { BunPressOptions } from './types';
2
- // Note: defaultConfig is already exported above on line 7
1
+ import type { BunPressConfig } from './types';
3
2
  // Backward compatibility - simple config getter
4
- export declare function getConfig(): Promise<BunPressOptions>;
3
+ export declare function getConfig(): Promise<BunPressConfig>;
5
4
  // Default configuration
6
5
  export declare const defaultConfig: BunPressConfig;
7
6
  // Load and export the resolved configuration
8
- // eslint-disable-next-line antfu/no-top-level-await
9
- export declare const config: BunPressOptions;
7
+ export declare const config: BunPressConfig;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Reset the global highlighter instance (useful when changing themes)
3
+ */
4
+ export declare function resetHighlighter(): void;
5
+ /**
6
+ * Normalizes a language identifier
7
+ */
8
+ export declare function normalizeLanguage(lang: string): string;
9
+ /**
10
+ * Checks if a language is supported by ts-syntax-highlighter
11
+ */
12
+ export declare function isLanguageSupported(lang: string): boolean;
13
+ /**
14
+ * Highlights code using ts-syntax-highlighter (async)
15
+ * IMPORTANT: Preserves original code structure and whitespace
16
+ */
17
+ export declare function highlightCode(code: string, language: string, theme?: string): Promise<string>;
18
+ /**
19
+ * Synchronous version of highlightCode
20
+ * Note: ts-syntax-highlighter doesn't have a sync API, so this uses a different approach
21
+ * For better performance, use the async version
22
+ */
23
+ export declare function highlightCodeSync(code: string, language: string): string;
24
+ /**
25
+ * Gets the CSS styles for syntax highlighting
26
+ * Note: ts-syntax-highlighter includes its own theme CSS
27
+ */
28
+ export declare function getSyntaxHighlightingStyles(): string;
29
+ /**
30
+ * Pre-warms the highlighter by creating the instance early
31
+ * Call this during application initialization for better performance
32
+ */
33
+ export declare function prewarmHighlighter(): Promise<void>;
34
+ /**
35
+ * Gets the highlighter instance for advanced usage
36
+ */
37
+ export declare function getHighlighterInstance(): Promise<TSHighlighter>;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export * from './config';
2
+ export * from './highlighter';
3
+ export * from './serve';
2
4
  export * from './toc';
3
5
  export * from './types';
@@ -0,0 +1,5 @@
1
+ import type { BunPressConfig } from './types';
2
+ /**
3
+ * Generate robots.txt file
4
+ */
5
+ export declare function generateRobotsTxt(outputDir: string, config: BunPressConfig): Promise<void>;
package/dist/rss.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { BunPressConfig } from './types';
2
+ /**
3
+ * Generate RSS feed from markdown files
4
+ */
5
+ export declare function generateRssFeed(docsDir: string, outputDir: string, config: BunPressConfig, rssConfig?: RssFeedConfig): Promise<void>;
6
+ export declare interface RssFeedConfig {
7
+ enabled?: boolean
8
+ title?: string
9
+ description?: string
10
+ author?: string
11
+ email?: string
12
+ language?: string
13
+ filename?: string
14
+ maxItems?: number
15
+ fullContent?: boolean
16
+ }
@@ -0,0 +1,28 @@
1
+ import { config } from './config';
2
+ import type { BunPressConfig } from './types';
3
+ /**
4
+ * Wrap content in BunPress documentation layout
5
+ */
6
+ export declare function wrapInLayout(content: string, config: BunPressConfig, currentPath: string, isHome?: boolean): Promise<string>;
7
+ /**
8
+ * Simple markdown to HTML converter (placeholder until full markdown plugin is enabled)
9
+ */
10
+ export declare function markdownToHtml(markdown: string, rootDir?: string): Promise<{ html: string, frontmatter: any }>;
11
+ /**
12
+ * Start the BunPress documentation server
13
+ */
14
+ export declare function startServer(options?: {
15
+ port?: number
16
+ root?: string
17
+ watch?: boolean
18
+ config?: BunPressConfig
19
+ }): Promise<{ server: any, url: string, stop: () => void }>;
20
+ /**
21
+ * CLI-friendly server start function with graceful shutdown
22
+ */
23
+ export declare function serveCLI(options?: {
24
+ port?: number
25
+ root?: string
26
+ watch?: boolean
27
+ config?: BunPressConfig
28
+ }): Promise<void>;
@@ -0,0 +1,5 @@
1
+ import type { BunPressConfig } from './types';
2
+ /**
3
+ * Generate XML sitemap from markdown files
4
+ */
5
+ export declare function generateSitemap(docsDir: string, outputDir: string, config: BunPressConfig): Promise<void>;
package/dist/src/index.js CHANGED
@@ -1,243 +1,2 @@
1
1
  // @bun
2
- import{a as f,b as r,c as h}from"../chunk-z2xpw4s7.js";var O={enabled:!0,position:["sidebar"],title:"Table of Contents",maxDepth:6,minDepth:2,className:"table-of-contents",smoothScroll:!0,activeHighlight:!0,collapsible:!0,exclude:[]};function q(A){return A.toLowerCase().trim().replace(/<[^>]*>/g,"").replace(/what's new\?\s*\(v2\.0\)/g,"whats-new-v2-0").replace(/features\s*&\s*benefits/g,"features-benefits").replace(/vue\.js\s*\+\s*typescript\s*=\s*\u2764\uFE0F/g,"vue-js-typescript").replace(/\./g,"-").replace(/[^\w\s-]/g,"").replace(/[\s_]+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")}function _(A,z){let j=q(A),B=j,E=1;while(z.has(j))j=`${B}-${E}`,E++;return z.add(j),j}function I(A){let z=[],j=new Set,B=/^(#{1,6})\s+(.+)$/gm,E;while((E=B.exec(A))!==null){let K=E[1].length,Q=E[2].trim();if(!Q)continue;if(Q.includes("toc-ignore"))continue;let P=Q.replace(/\s*<!-- toc-ignore -->\s*/g,"").trim();P=P.replace(/`([^`]+)`/g,"<code>$1</code>");let M=P.includes("<code>"),W=_(P.replace(/<[^>]*>/g,""),j);z.push({level:K,text:P,id:W,children:[],hasCode:M})}return z}function L(A){let z=[],j=[];for(let B of A){while(j.length>0&&j[j.length-1].level>=B.level)j.pop();if(j.length===0)z.push(B);else j[j.length-1].children.push(B);j.push(B)}return z}function U(A,z){let{minDepth:j=2,maxDepth:B=6,exclude:E=[]}=z,K=(Q)=>{let P=[];for(let M of Q){if(E.some((X)=>{if(X.startsWith("/")&&X.endsWith("/"))return new RegExp(X.slice(1,-1)).test(M.text);else return M.text===X}))continue;if(M.level>B)continue;let W=K(M.children);if(M.level>=j&&M.level<=B)P.push({...M,children:W});else P.push(...W)}return P};return K(A)}function Y(A){let{items:z,title:j,config:B}=A,{className:E,collapsible:K}=B,Q=(P,M=0)=>{if(P.length===0)return"";let W=M===0?"toc-list":"toc-sublist",X=M===0?"toc-item":"toc-subitem";return`<ul class="${W}">
3
- ${P.map((V)=>{let Z=V.children.length>0,w=Z&&K?"toc-expand":"",F=Z?Q(V.children,M+1):"",k=50,G=V.text.length>50?`${V.text.substring(0,50)}...`:V.text,J=V.text.length>50?"toc-truncate":"",N=V.hasCode?"toc-code":"";return`<li class="${X} ${w} ${J} ${N}">
4
- <a href="#${V.id}" class="toc-link" title="${V.text.replace(/<[^>]*>/g,"")}">${G}</a>
5
- ${F}
6
- </li>`}).join(`
7
- `)}
8
- </ul>`};return`<nav class="${E}" role="navigation" aria-label="${j}">
9
- <div class="toc-container">
10
- <h2 class="toc-title">${j}</h2>
11
- ${Q(z)}
12
- </div>
13
- </nav>`}function $(A){return Y(A).replace("table-of-contents","table-of-contents toc-inline inline-toc")}function b(A){return Y(A).replace("table-of-contents","table-of-contents toc-sidebar sidebar-toc")}function R(A){return Y(A).replace("table-of-contents","table-of-contents toc-floating floating-toc")}function y(A,z={}){let j={...z};if(typeof j.position==="string")j.position=[j.position];let B={...O,...j},E=I(A),K=L(E),Q=U(K,B);return{title:B.title,items:Q,config:B}}function D(A,z={}){let j=y(A,z);return(Array.isArray(z.position)?z.position:[z.position||"sidebar"]).map((E)=>{let K;switch(E){case"inline":K=$(j);break;case"sidebar":K=b(j);break;case"floating":K=R(j);break;default:K=Y(j)}return{position:E,data:j,html:K}})}function S(A,z){let j=$(z);return A.replace(/\[\[toc\]\]/gi,j)}function H(A){let z=new Set;return A.replace(/<h([1-6])>(.*?)<\/h[1-6]>/gi,(j,B,E)=>{let K=_(E.replace(/<[^>]*>/g,""),z);return`<h${B} id="${K}"><a href="#${K}" class="heading-anchor">#</a>${E}</h${B}>`})}function v(){return`
14
- .table-of-contents {
15
- position: sticky;
16
- top: 60px; /* Match navbar height */
17
- height: calc(100vh - 60px);
18
- width: 200px;
19
- overflow-y: auto;
20
- padding: 1rem;
21
- }
22
-
23
- .toc-container {
24
- padding: 0;
25
- }
26
-
27
- .toc-title {
28
- margin: 0 0 1rem 0;
29
- font-size: 1.2rem;
30
- font-weight: 600;
31
- }
32
-
33
- .toc-list,
34
- .toc-sublist {
35
- list-style: none;
36
- padding: 0;
37
- margin: 0;
38
- }
39
-
40
- .toc-list {
41
- padding-left: 0;
42
- }
43
-
44
- .toc-sublist {
45
- padding-left: 1rem;
46
- margin-top: 0.5rem;
47
- }
48
-
49
- .toc-item,
50
- .toc-subitem {
51
- margin-bottom: 0.5rem;
52
- }
53
-
54
- .toc-link {
55
- color: inherit;
56
- text-decoration: none;
57
- display: block;
58
- padding: 0.25rem 0;
59
- border-radius: 0.25rem;
60
- transition: background-color 0.2s;
61
- }
62
-
63
- .toc-link:hover {
64
- background-color: rgba(0, 0, 0, 0.05);
65
- }
66
-
67
- .toc-active .toc-link,
68
- .active-toc-item .toc-link {
69
- background-color: rgba(0, 123, 255, 0.1);
70
- font-weight: 500;
71
- }
72
-
73
- .toc-truncate {
74
- /* Styles for truncated TOC items */
75
- }
76
-
77
- .toc-truncate .toc-link {
78
- white-space: nowrap;
79
- overflow: hidden;
80
- text-overflow: ellipsis;
81
- }
82
-
83
- .toc-collapse .toc-link::before {
84
- content: '\u25B6';
85
- margin-right: 0.5rem;
86
- transition: transform 0.2s;
87
- }
88
-
89
- .toc-collapse.collapsed .toc-link::before {
90
- transform: rotate(90deg);
91
- }
92
-
93
- .toc-expand .toc-link::before {
94
- content: '\u25BC';
95
- margin-right: 0.5rem;
96
- }
97
-
98
- .heading-anchor {
99
- color: inherit;
100
- text-decoration: none;
101
- opacity: 0;
102
- margin-left: -1rem;
103
- padding-right: 0.5rem;
104
- transition: opacity 0.2s;
105
- }
106
-
107
- h1:hover .heading-anchor,
108
- h2:hover .heading-anchor,
109
- h3:hover .heading-anchor,
110
- h4:hover .heading-anchor,
111
- h5:hover .heading-anchor,
112
- h6:hover .heading-anchor {
113
- opacity: 0.7;
114
- }
115
-
116
- .heading-anchor:hover {
117
- opacity: 1;
118
- }
119
-
120
- /* Smooth scrolling */
121
- html {
122
- scroll-behavior: smooth;
123
- }
124
-
125
- /* Responsive adjustments */
126
- @media (max-width: 768px) {
127
- .toc-sidebar {
128
- display: none;
129
- }
130
-
131
- .toc-floating {
132
- position: fixed;
133
- bottom: 1rem;
134
- right: 1rem;
135
- background: white;
136
- border: 1px solid #ddd;
137
- border-radius: 0.5rem;
138
- padding: 1rem;
139
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
140
- max-width: 250px;
141
- }
142
- }
143
- `}function T(){return`
144
- function initToc() {
145
- const tocLinks = document.querySelectorAll('.toc-link')
146
-
147
- // Smooth scrolling for TOC links
148
- tocLinks.forEach(link => {
149
- link.addEventListener('click', function(e) {
150
- e.preventDefault()
151
- const targetId = this.getAttribute('href')?.substring(1)
152
- const targetElement = document.getElementById(targetId)
153
-
154
- if (targetElement) {
155
- targetElement.scrollIntoView({
156
- behavior: 'smooth',
157
- block: 'start'
158
- })
159
-
160
- // Update URL without page reload
161
- history.pushState(null, '', '#' + targetId)
162
- }
163
- })
164
- })
165
-
166
- // Active TOC item highlighting on scroll
167
- function updateActiveTocItem() {
168
- const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6')
169
- const tocLinks = document.querySelectorAll('.toc-link')
170
-
171
- let currentActive = null
172
- let currentDistance = Infinity
173
-
174
- headings.forEach((heading, index) => {
175
- const rect = heading.getBoundingClientRect()
176
- const distance = Math.abs(rect.top)
177
-
178
- if (distance < currentDistance && rect.top <= 100) {
179
- currentActive = heading.id
180
- currentDistance = distance
181
- }
182
- })
183
-
184
- tocLinks.forEach(link => {
185
- const parent = link.parentElement
186
- if (parent) {
187
- parent.classList.remove('toc-active', 'active-toc-item')
188
- const href = link.getAttribute('href')?.substring(1)
189
- if (href === currentActive) {
190
- parent.classList.add('toc-active', 'active-toc-item')
191
- }
192
- }
193
- })
194
- }
195
-
196
- // Throttle scroll events
197
- let scrollTimeout
198
- function throttledUpdate() {
199
- if (!scrollTimeout) {
200
- scrollTimeout = setTimeout(() => {
201
- updateActiveTocItem()
202
- scrollTimeout = null
203
- }, 100)
204
- }
205
- }
206
-
207
- window.addEventListener('scroll', throttledUpdate)
208
- updateActiveTocItem()
209
-
210
- // TOC collapse/expand functionality
211
- const expandableItems = document.querySelectorAll('.toc-expand')
212
-
213
- expandableItems.forEach(item => {
214
- item.addEventListener('click', function(e) {
215
- if (e.target === this || e.target.closest('.toc-link')) {
216
- this.classList.toggle('collapsed')
217
- }
218
- })
219
- })
220
-
221
- // Handle URL hash on page load
222
- if (window.location.hash) {
223
- const targetId = window.location.hash.substring(1)
224
- const targetElement = document.getElementById(targetId)
225
-
226
- if (targetElement) {
227
- setTimeout(() => {
228
- targetElement.scrollIntoView({
229
- behavior: 'smooth',
230
- block: 'start'
231
- })
232
- }, 100)
233
- }
234
- }
235
- }
236
-
237
- // Initialize TOC when DOM is ready
238
- if (document.readyState === 'loading') {
239
- document.addEventListener('DOMContentLoaded', initToc)
240
- } else {
241
- initToc()
242
- }
243
- `}export{S as processInlineTocSyntax,h as getConfig,_ as generateUniqueSlug,v as generateTocStyles,T as generateTocScripts,D as generateTocPositions,Y as generateTocHtml,y as generateTocData,q as generateSlug,b as generateSidebarTocHtml,$ as generateInlineTocHtml,R as generateFloatingTocHtml,U as filterHeadings,I as extractHeadings,H as enhanceHeadingsWithAnchors,O as defaultTocConfig,f as defaultConfig,r as config,L as buildTocHierarchy};
2
+ import{A as K,B as L,C as M,D as N,E as O,F as P,G as Q,H as R,I as S,J as T,K as V,L as W,h as t,i as b,j as e,k as h,l as j,m as k,n as q,o as u,p as v,q as w,r as z,s as B,t as D,u as E,v as F,w as G,x as H,y as I,z as J}from"../chunk-nt1zw6bf.js";export{S as wrapInLayout,V as startServer,W as serveCLI,h as resetHighlighter,O as processInlineTocSyntax,w as prewarmHighlighter,j as normalizeLanguage,T as markdownToHtml,k as isLanguageSupported,u as highlightCodeSync,q as highlightCode,v as getSyntaxHighlightingStyles,z as getHighlighterInstance,e as getConfig,E as generateUniqueSlug,Q as generateTocStyles,R as generateTocScripts,N as generateTocPositions,I as generateTocHtml,M as generateTocData,D as generateSlug,K as generateSidebarTocHtml,J as generateInlineTocHtml,L as generateFloatingTocHtml,H as filterHeadings,F as extractHeadings,P as enhanceHeadingsWithAnchors,B as defaultTocConfig,t as defaultConfig,b as config,G as buildTocHierarchy};
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Load a template file from the templates directory
3
+ */
4
+ export declare function loadTemplate(name: string): Promise<string>;
5
+ /**
6
+ * Render a template with data
7
+ */
8
+ export declare function renderTemplate(template: string, data: Record<string, any>): string;
9
+ /**
10
+ * Load and render a template in one step
11
+ */
12
+ export declare function render(templateName: string, data: Record<string, any>): Promise<string>;
13
+ /**
14
+ * Clear the template cache (useful for development/hot reloading)
15
+ */
16
+ export declare function clearTemplateCache(): void;
@@ -0,0 +1,9 @@
1
+ <div class="github-alert github-alert-caution">
2
+ <p class="github-alert-title">
3
+ <svg class="github-alert-icon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>
4
+ Caution
5
+ </p>
6
+ <div class="github-alert-content">
7
+ {{content}}
8
+ </div>
9
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="github-alert github-alert-important">
2
+ <p class="github-alert-title">
3
+ <svg class="github-alert-icon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>
4
+ Important
5
+ </p>
6
+ <div class="github-alert-content">
7
+ {{content}}
8
+ </div>
9
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="github-alert github-alert-note">
2
+ <p class="github-alert-title">
3
+ <svg class="github-alert-icon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>
4
+ Note
5
+ </p>
6
+ <div class="github-alert-content">
7
+ {{content}}
8
+ </div>
9
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="github-alert github-alert-tip">
2
+ <p class="github-alert-title">
3
+ <svg class="github-alert-icon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z"></path></svg>
4
+ Tip
5
+ </p>
6
+ <div class="github-alert-content">
7
+ {{content}}
8
+ </div>
9
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="github-alert github-alert-warning">
2
+ <p class="github-alert-title">
3
+ <svg class="github-alert-icon" viewBox="0 0 16 16" width="16" height="16" aria-hidden="true"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>
4
+ Warning
5
+ </p>
6
+ <div class="github-alert-content">
7
+ {{content}}
8
+ </div>
9
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="custom-block danger">
2
+ <p class="custom-block-title">{{title}}</p>
3
+ <div class="custom-block-content">
4
+ {{content}}
5
+ </div>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ <details class="custom-block details">
2
+ <summary>{{title}}</summary>
3
+ <div class="custom-block-content">
4
+ {{content}}
5
+ </div>
6
+ </details>
@@ -0,0 +1,6 @@
1
+ <div class="custom-block info">
2
+ <p class="custom-block-title">{{title}}</p>
3
+ <div class="custom-block-content">
4
+ {{content}}
5
+ </div>
6
+ </div>
@@ -0,0 +1,3 @@
1
+ <div class="bp-raw">
2
+ {{content}}
3
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="custom-block tip">
2
+ <p class="custom-block-title">{{title}}</p>
3
+ <div class="custom-block-content">
4
+ {{content}}
5
+ </div>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="custom-block warning">
2
+ <p class="custom-block-title">{{title}}</p>
3
+ <div class="custom-block-content">
4
+ {{content}}
5
+ </div>
6
+ </div>
@@ -0,0 +1 @@
1
+ <code>{{content}}</code>
@@ -0,0 +1 @@
1
+ <del>{{content}}</del>
@@ -0,0 +1 @@
1
+ <em>{{content}}</em>
@@ -0,0 +1 @@
1
+ <mark>{{content}}</mark>
@@ -0,0 +1 @@
1
+ <strong>{{content}}</strong>
@@ -0,0 +1 @@
1
+ <sub>{{content}}</sub>
@@ -0,0 +1 @@
1
+ <sup>{{content}}</sup>
@@ -0,0 +1,20 @@
1
+ <div class="VPHomeFeatures" style="padding: 64px 24px; border-top: 1px solid var(--bp-c-divider);">
2
+ <div style="max-width: 1152px; margin: 0 auto;">
3
+ <div class="VPFeatures" style="display: grid; grid-template-columns: repeat(1, 1fr); gap: 24px;">
4
+ {{ items }}
5
+ </div>
6
+ </div>
7
+ </div>
8
+
9
+ <style>
10
+ @media (min-width: 640px) {
11
+ .VPFeatures {
12
+ grid-template-columns: repeat(2, 1fr) !important;
13
+ }
14
+ }
15
+ @media (min-width: 960px) {
16
+ .VPFeatures {
17
+ grid-template-columns: repeat(3, 1fr) !important;
18
+ }
19
+ }
20
+ </style>
@@ -0,0 +1,10 @@
1
+ <div class="VPHomeHero" style="position: relative; padding: 32px 24px 0;">
2
+ <div style="max-width: 1152px; margin: 0 auto; padding: 48px 0 64px;">
3
+ <div class="VPHomeHeroInfo" style="max-width: 592px;">
4
+ {{ name }}
5
+ {{ text }}
6
+ {{ tagline }}
7
+ {{ actions }}
8
+ </div>
9
+ </div>
10
+ </div>