docs-please 0.2.0-beta.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/README.md +63 -0
- package/app/app.config.ts +13 -0
- package/app/app.vue +17 -0
- package/app/assets/css/main.css +367 -0
- package/app/components/Icons.ts +163 -0
- package/app/components/app/AppFooter.vue +24 -0
- package/app/components/app/AppHeader.vue +58 -0
- package/app/components/content/BrowserFrame.vue +21 -0
- package/app/components/content/Callout.vue +80 -0
- package/app/components/content/Caution.vue +25 -0
- package/app/components/content/CodeBlockCommand.vue +92 -0
- package/app/components/content/CodeCollapsibleWrapper.vue +50 -0
- package/app/components/content/CodeTabs.vue +14 -0
- package/app/components/content/ComponentPreview.vue +71 -0
- package/app/components/content/ComponentsList.vue +24 -0
- package/app/components/content/CopyButton.vue +39 -0
- package/app/components/content/FeatureCard.vue +25 -0
- package/app/components/content/LinkedCard.vue +19 -0
- package/app/components/content/Note.vue +25 -0
- package/app/components/content/ProseA.vue +18 -0
- package/app/components/content/ProseBlockQuote.vue +8 -0
- package/app/components/content/ProseCode.vue +8 -0
- package/app/components/content/ProseH1.vue +7 -0
- package/app/components/content/ProseH2.vue +8 -0
- package/app/components/content/ProseH3.vue +9 -0
- package/app/components/content/ProseH4.vue +9 -0
- package/app/components/content/ProseH5.vue +7 -0
- package/app/components/content/ProseH6.vue +7 -0
- package/app/components/content/ProseHr.vue +6 -0
- package/app/components/content/ProseIcon.vue +32 -0
- package/app/components/content/ProseImg.vue +6 -0
- package/app/components/content/ProseLi.vue +8 -0
- package/app/components/content/ProseOl.vue +8 -0
- package/app/components/content/ProseP.vue +14 -0
- package/app/components/content/ProsePre.vue +80 -0
- package/app/components/content/ProseStrong.vue +8 -0
- package/app/components/content/ProseTable.vue +26 -0
- package/app/components/content/ProseTd.vue +8 -0
- package/app/components/content/ProseTh.vue +8 -0
- package/app/components/content/ProseTr.vue +8 -0
- package/app/components/content/ProseUl.vue +8 -0
- package/app/components/content/Step.vue +18 -0
- package/app/components/content/Steps.vue +18 -0
- package/app/components/content/Tabs.vue +129 -0
- package/app/components/content/TabsItem.vue +26 -0
- package/app/components/content/Tip.vue +25 -0
- package/app/components/content/UButton.vue +34 -0
- package/app/components/content/UColorModeImage.vue +48 -0
- package/app/components/content/UPageCard.vue +83 -0
- package/app/components/content/UPageGrid.vue +18 -0
- package/app/components/content/UPageHero.vue +92 -0
- package/app/components/content/UPageSection.vue +90 -0
- package/app/components/content/Warning.vue +25 -0
- package/app/components/docs/DocsPageHeader.vue +20 -0
- package/app/components/docs/DocsPageNav.vue +31 -0
- package/app/components/docs/DocsSidebar.vue +97 -0
- package/app/components/docs/DocsTableOfContents.vue +64 -0
- package/app/components/ui/accordion/Accordion.vue +22 -0
- package/app/components/ui/accordion/AccordionContent.vue +23 -0
- package/app/components/ui/accordion/AccordionItem.vue +24 -0
- package/app/components/ui/accordion/AccordionTrigger.vue +37 -0
- package/app/components/ui/accordion/index.ts +4 -0
- package/app/components/ui/alert/Alert.vue +21 -0
- package/app/components/ui/alert/AlertDescription.vue +17 -0
- package/app/components/ui/alert/AlertTitle.vue +17 -0
- package/app/components/ui/alert/index.ts +28 -0
- package/app/components/ui/button/Button.vue +29 -0
- package/app/components/ui/button/index.ts +38 -0
- package/app/components/ui/card/Card.vue +22 -0
- package/app/components/ui/card/CardAction.vue +17 -0
- package/app/components/ui/card/CardContent.vue +17 -0
- package/app/components/ui/card/CardDescription.vue +17 -0
- package/app/components/ui/card/CardFooter.vue +17 -0
- package/app/components/ui/card/CardHeader.vue +17 -0
- package/app/components/ui/card/CardTitle.vue +17 -0
- package/app/components/ui/card/index.ts +7 -0
- package/app/components/ui/collapsible/Collapsible.vue +19 -0
- package/app/components/ui/collapsible/CollapsibleContent.vue +15 -0
- package/app/components/ui/collapsible/CollapsibleTrigger.vue +15 -0
- package/app/components/ui/collapsible/index.ts +3 -0
- package/app/components/ui/separator/Separator.vue +29 -0
- package/app/components/ui/separator/index.ts +1 -0
- package/app/components/ui/switch/Switch.vue +35 -0
- package/app/components/ui/switch/index.ts +1 -0
- package/app/components/ui/table/Table.vue +16 -0
- package/app/components/ui/table/TableBody.vue +14 -0
- package/app/components/ui/table/TableCaption.vue +14 -0
- package/app/components/ui/table/TableCell.vue +21 -0
- package/app/components/ui/table/TableEmpty.vue +34 -0
- package/app/components/ui/table/TableFooter.vue +14 -0
- package/app/components/ui/table/TableHead.vue +14 -0
- package/app/components/ui/table/TableHeader.vue +14 -0
- package/app/components/ui/table/TableRow.vue +14 -0
- package/app/components/ui/table/index.ts +9 -0
- package/app/components/ui/tabs/Tabs.vue +15 -0
- package/app/components/ui/tabs/TabsContent.vue +20 -0
- package/app/components/ui/tabs/TabsList.vue +23 -0
- package/app/components/ui/tabs/TabsTrigger.vue +27 -0
- package/app/components/ui/tabs/index.ts +4 -0
- package/app/components/ui/tooltip/Tooltip.vue +19 -0
- package/app/components/ui/tooltip/TooltipContent.vue +34 -0
- package/app/components/ui/tooltip/TooltipProvider.vue +14 -0
- package/app/components/ui/tooltip/TooltipTrigger.vue +15 -0
- package/app/components/ui/tooltip/index.ts +4 -0
- package/app/composables/useConfig.ts +24 -0
- package/app/composables/useNavigation.ts +43 -0
- package/app/layouts/default.vue +12 -0
- package/app/layouts/docs.vue +27 -0
- package/app/lib/utils.ts +7 -0
- package/app/pages/[...slug].vue +97 -0
- package/app/pages/index.vue +29 -0
- package/app/plugins/ssr-width.ts +5 -0
- package/content.config.ts +36 -0
- package/i18n/locales/en.json +14 -0
- package/modules/config.ts +38 -0
- package/modules/css.ts +38 -0
- package/modules/shadcn.ts +116 -0
- package/nuxt.config.ts +125 -0
- package/nuxt.schema.ts +68 -0
- package/package.json +81 -0
package/README.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# docs-please
|
|
2
|
+
|
|
3
|
+
A Nuxt layer for documentation sites using **shadcn-vue** instead of nuxt-ui.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This layer provides a complete documentation theme built with:
|
|
8
|
+
|
|
9
|
+
- **shadcn-vue** - Beautiful, accessible UI components
|
|
10
|
+
- **Nuxt Content** - Markdown-based content management
|
|
11
|
+
- **Tailwind CSS v4** - Modern CSS with CSS variables
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Install the layer
|
|
17
|
+
pnpm add docs-please
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// nuxt.config.ts
|
|
22
|
+
export default defineNuxtConfig({
|
|
23
|
+
extends: ['docs-please']
|
|
24
|
+
})
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Features
|
|
28
|
+
|
|
29
|
+
- Documentation layout with sidebar navigation
|
|
30
|
+
- Command palette search
|
|
31
|
+
- Table of contents
|
|
32
|
+
- Dark/Light mode
|
|
33
|
+
- Mobile responsive
|
|
34
|
+
- MDC components (Callout, CodeBlock, etc.)
|
|
35
|
+
|
|
36
|
+
## Configuration
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
// app.config.ts
|
|
40
|
+
export default defineAppConfig({
|
|
41
|
+
docs: {
|
|
42
|
+
title: 'My Docs',
|
|
43
|
+
description: 'Documentation site',
|
|
44
|
+
github: {
|
|
45
|
+
url: 'https://github.com/owner/repo'
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Development
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Install dependencies
|
|
55
|
+
pnpm install
|
|
56
|
+
|
|
57
|
+
# Start development
|
|
58
|
+
pnpm dev
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## License
|
|
62
|
+
|
|
63
|
+
MIT
|
package/app/app.vue
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
const appConfig = useAppConfig()
|
|
3
|
+
|
|
4
|
+
useSeoMeta({
|
|
5
|
+
title: appConfig.docs?.title,
|
|
6
|
+
description: appConfig.docs?.description,
|
|
7
|
+
})
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<div>
|
|
12
|
+
<NuxtLoadingIndicator color="hsl(var(--primary))" />
|
|
13
|
+
<NuxtLayout>
|
|
14
|
+
<NuxtPage />
|
|
15
|
+
</NuxtLayout>
|
|
16
|
+
</div>
|
|
17
|
+
</template>
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
@import 'tw-animate-css';
|
|
3
|
+
|
|
4
|
+
/* Tailwind CSS v4: Source detection for layer components */
|
|
5
|
+
@source "../../components/**/*.vue";
|
|
6
|
+
@source "../../components/**/*.ts";
|
|
7
|
+
@source "../../layouts/**/*.vue";
|
|
8
|
+
@source "../../pages/**/*.vue";
|
|
9
|
+
|
|
10
|
+
@custom-variant dark (&:is(.dark *));
|
|
11
|
+
|
|
12
|
+
@theme inline {
|
|
13
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
14
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
15
|
+
--radius-lg: var(--radius);
|
|
16
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
17
|
+
--color-background: var(--background);
|
|
18
|
+
--color-foreground: var(--foreground);
|
|
19
|
+
--color-card: var(--card);
|
|
20
|
+
--color-card-foreground: var(--card-foreground);
|
|
21
|
+
--color-popover: var(--popover);
|
|
22
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
23
|
+
--color-primary: var(--primary);
|
|
24
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
25
|
+
--color-secondary: var(--secondary);
|
|
26
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
27
|
+
--color-muted: var(--muted);
|
|
28
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
29
|
+
--color-accent: var(--accent);
|
|
30
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
31
|
+
--color-destructive: var(--destructive);
|
|
32
|
+
--color-border: var(--border);
|
|
33
|
+
--color-input: var(--input);
|
|
34
|
+
--color-ring: var(--ring);
|
|
35
|
+
--color-sidebar: var(--sidebar);
|
|
36
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
37
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
38
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
39
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
40
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
41
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
42
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
43
|
+
--color-chart-5: var(--chart-5);
|
|
44
|
+
--color-chart-4: var(--chart-4);
|
|
45
|
+
--color-chart-3: var(--chart-3);
|
|
46
|
+
--color-chart-2: var(--chart-2);
|
|
47
|
+
--color-chart-1: var(--chart-1);
|
|
48
|
+
--color-code: var(--code);
|
|
49
|
+
--color-code-foreground: var(--code-foreground);
|
|
50
|
+
--color-code-highlight: var(--code-highlight);
|
|
51
|
+
--color-code-number: var(--code-number);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:root {
|
|
55
|
+
--radius: 0.625rem;
|
|
56
|
+
--card: oklch(1 0 0);
|
|
57
|
+
--card-foreground: oklch(0.145 0 0);
|
|
58
|
+
--popover: oklch(1 0 0);
|
|
59
|
+
--popover-foreground: oklch(0.145 0 0);
|
|
60
|
+
--primary: oklch(0.205 0 0);
|
|
61
|
+
--primary-foreground: oklch(0.985 0 0);
|
|
62
|
+
--secondary: oklch(0.97 0 0);
|
|
63
|
+
--secondary-foreground: oklch(0.205 0 0);
|
|
64
|
+
--muted: oklch(0.97 0 0);
|
|
65
|
+
--muted-foreground: oklch(0.556 0 0);
|
|
66
|
+
--accent: oklch(0.97 0 0);
|
|
67
|
+
--accent-foreground: oklch(0.205 0 0);
|
|
68
|
+
--destructive: oklch(0.577 0.245 27.325);
|
|
69
|
+
--border: oklch(0.922 0 0);
|
|
70
|
+
--input: oklch(0.922 0 0);
|
|
71
|
+
--ring: oklch(0.708 0 0);
|
|
72
|
+
--sidebar: oklch(0.985 0 0);
|
|
73
|
+
--sidebar-foreground: oklch(0.145 0 0);
|
|
74
|
+
--sidebar-primary: oklch(0.205 0 0);
|
|
75
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
76
|
+
--sidebar-accent: oklch(0.97 0 0);
|
|
77
|
+
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
78
|
+
--sidebar-border: oklch(0.922 0 0);
|
|
79
|
+
--sidebar-ring: oklch(0.708 0 0);
|
|
80
|
+
--chart-1: oklch(0.646 0.222 41.116);
|
|
81
|
+
--chart-2: oklch(0.6 0.118 184.704);
|
|
82
|
+
--chart-3: oklch(0.398 0.07 227.392);
|
|
83
|
+
--chart-4: oklch(0.828 0.189 84.429);
|
|
84
|
+
--chart-5: oklch(0.769 0.188 70.08);
|
|
85
|
+
--background: oklch(1 0 0);
|
|
86
|
+
--foreground: oklch(0.145 0 0);
|
|
87
|
+
--code: oklch(0.98 0 0);
|
|
88
|
+
--code-foreground: oklch(0.145 0 0);
|
|
89
|
+
--code-highlight: oklch(0.96 0 0);
|
|
90
|
+
--code-number: oklch(0.56 0 0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.dark {
|
|
94
|
+
--background: oklch(0.145 0 0);
|
|
95
|
+
--foreground: oklch(0.985 0 0);
|
|
96
|
+
--card: oklch(0.205 0 0);
|
|
97
|
+
--card-foreground: oklch(0.985 0 0);
|
|
98
|
+
--popover: oklch(0.205 0 0);
|
|
99
|
+
--popover-foreground: oklch(0.985 0 0);
|
|
100
|
+
--primary: oklch(0.922 0 0);
|
|
101
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
102
|
+
--secondary: oklch(0.269 0 0);
|
|
103
|
+
--secondary-foreground: oklch(0.985 0 0);
|
|
104
|
+
--muted: oklch(0.269 0 0);
|
|
105
|
+
--muted-foreground: oklch(0.708 0 0);
|
|
106
|
+
--accent: oklch(0.269 0 0);
|
|
107
|
+
--accent-foreground: oklch(0.985 0 0);
|
|
108
|
+
--destructive: oklch(0.704 0.191 22.216);
|
|
109
|
+
--border: oklch(1 0 0 / 10%);
|
|
110
|
+
--input: oklch(1 0 0 / 15%);
|
|
111
|
+
--ring: oklch(0.556 0 0);
|
|
112
|
+
--sidebar: oklch(0.205 0 0);
|
|
113
|
+
--sidebar-foreground: oklch(0.985 0 0);
|
|
114
|
+
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
115
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
116
|
+
--sidebar-accent: oklch(0.269 0 0);
|
|
117
|
+
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
118
|
+
--sidebar-border: oklch(1 0 0 / 10%);
|
|
119
|
+
--sidebar-ring: oklch(0.556 0 0);
|
|
120
|
+
--chart-1: oklch(0.488 0.243 264.376);
|
|
121
|
+
--chart-2: oklch(0.696 0.17 162.48);
|
|
122
|
+
--chart-3: oklch(0.769 0.188 70.08);
|
|
123
|
+
--chart-4: oklch(0.627 0.265 303.9);
|
|
124
|
+
--chart-5: oklch(0.645 0.246 16.439);
|
|
125
|
+
--code: oklch(0.2 0 0);
|
|
126
|
+
--code-foreground: oklch(0.708 0 0);
|
|
127
|
+
--code-highlight: oklch(0.27 0 0);
|
|
128
|
+
--code-number: oklch(0.72 0 0);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@layer base {
|
|
132
|
+
* {
|
|
133
|
+
@apply border-border outline-ring/50;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
html {
|
|
137
|
+
@apply scroll-smooth;
|
|
138
|
+
color-scheme: light dark;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
html.dark {
|
|
142
|
+
color-scheme: dark;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
html.light {
|
|
146
|
+
color-scheme: light;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
body {
|
|
150
|
+
@apply bg-background text-foreground;
|
|
151
|
+
font-synthesis-weight: none;
|
|
152
|
+
text-rendering: optimizeLegibility;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* Utility classes */
|
|
157
|
+
@utility container {
|
|
158
|
+
@apply mx-auto w-full max-w-[1400px] px-4 lg:px-8;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
@utility no-scrollbar {
|
|
162
|
+
-ms-overflow-style: none;
|
|
163
|
+
scrollbar-width: none;
|
|
164
|
+
|
|
165
|
+
&::-webkit-scrollbar {
|
|
166
|
+
display: none;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/* Code block styling */
|
|
171
|
+
@layer components {
|
|
172
|
+
[data-pretty-code-figure] {
|
|
173
|
+
background-color: var(--color-code);
|
|
174
|
+
color: var(--color-code-foreground);
|
|
175
|
+
border-radius: var(--radius-lg, 0.625rem);
|
|
176
|
+
margin-top: calc(var(--spacing, 0.25rem) * 6);
|
|
177
|
+
overflow: hidden;
|
|
178
|
+
font-size: var(--text-sm, 0.875rem);
|
|
179
|
+
outline: none;
|
|
180
|
+
position: relative;
|
|
181
|
+
@apply -mx-1 md:-mx-1;
|
|
182
|
+
|
|
183
|
+
&:has([data-pretty-code-title]) [data-slot="copy-button"] {
|
|
184
|
+
top: calc(var(--spacing) * 1.5) !important;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
pre {
|
|
188
|
+
-ms-overflow-style: none;
|
|
189
|
+
scrollbar-width: none;
|
|
190
|
+
background: transparent !important;
|
|
191
|
+
border: none !important;
|
|
192
|
+
border-radius: 0 !important;
|
|
193
|
+
margin-top: 0 !important;
|
|
194
|
+
|
|
195
|
+
&::-webkit-scrollbar {
|
|
196
|
+
display: none;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
[data-pretty-code-title] {
|
|
202
|
+
border-bottom: 1px solid color-mix(in oklab, var(--border) 30%, transparent);
|
|
203
|
+
padding-block: calc(var(--spacing) * 2.5);
|
|
204
|
+
padding-inline: calc(var(--spacing) * 4);
|
|
205
|
+
font-size: var(--text-sm);
|
|
206
|
+
font-family: var(--font-mono);
|
|
207
|
+
color: var(--color-code-foreground);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
[data-line-numbers] {
|
|
211
|
+
display: grid;
|
|
212
|
+
min-width: 100%;
|
|
213
|
+
white-space: pre;
|
|
214
|
+
border: 0;
|
|
215
|
+
background: transparent;
|
|
216
|
+
padding: 0;
|
|
217
|
+
counter-reset: line;
|
|
218
|
+
box-decoration-break: clone;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
[data-line-numbers] [data-line]::before {
|
|
222
|
+
font-size: var(--text-sm);
|
|
223
|
+
counter-increment: line;
|
|
224
|
+
content: counter(line);
|
|
225
|
+
display: inline-block;
|
|
226
|
+
width: calc(var(--spacing) * 16);
|
|
227
|
+
padding-right: calc(var(--spacing) * 6);
|
|
228
|
+
text-align: right;
|
|
229
|
+
color: var(--color-code-number);
|
|
230
|
+
background-color: var(--color-code);
|
|
231
|
+
position: sticky;
|
|
232
|
+
left: 0;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
[data-line-numbers] [data-highlighted-line][data-line]::before {
|
|
236
|
+
background-color: var(--color-code-highlight);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
[data-line],
|
|
240
|
+
.line {
|
|
241
|
+
padding-top: calc(var(--spacing, 0.25rem) * 0.5);
|
|
242
|
+
padding-bottom: calc(var(--spacing, 0.25rem) * 0.5);
|
|
243
|
+
min-height: calc(var(--spacing, 0.25rem) * 1);
|
|
244
|
+
width: 100%;
|
|
245
|
+
display: block;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/* Override Shiki inline styles - !important required for both modes
|
|
249
|
+
to ensure our theme colors take precedence over Shiki's inline styles */
|
|
250
|
+
[data-line] span,
|
|
251
|
+
.line span {
|
|
252
|
+
color: var(--shiki-light) !important;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.dark [data-line] span,
|
|
256
|
+
.dark .line span {
|
|
257
|
+
color: var(--shiki-dark) !important;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/* Shiki code block styling */
|
|
261
|
+
pre code .line {
|
|
262
|
+
display: block;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.shiki {
|
|
266
|
+
background-color: var(--color-code) !important;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
[data-highlighted-line],
|
|
270
|
+
[data-highlighted-chars] {
|
|
271
|
+
position: relative;
|
|
272
|
+
background-color: var(--color-code-highlight);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
[data-highlighted-line] {
|
|
276
|
+
&:after {
|
|
277
|
+
position: absolute;
|
|
278
|
+
top: 0;
|
|
279
|
+
left: 0;
|
|
280
|
+
width: 2px;
|
|
281
|
+
height: 100%;
|
|
282
|
+
content: "";
|
|
283
|
+
background-color: color-mix(
|
|
284
|
+
in oklab,
|
|
285
|
+
var(--muted-foreground) 50%,
|
|
286
|
+
transparent
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
[data-highlighted-chars] {
|
|
292
|
+
border-radius: var(--radius-sm);
|
|
293
|
+
padding-inline: 0.3rem;
|
|
294
|
+
padding-block: 0.1rem;
|
|
295
|
+
font-family: var(--font-mono);
|
|
296
|
+
font-size: 0.8rem;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* Prose styles for documentation */
|
|
300
|
+
.prose {
|
|
301
|
+
@apply max-w-none;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.prose h1 {
|
|
305
|
+
@apply scroll-m-20 text-4xl font-bold tracking-tight;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
.prose h2 {
|
|
309
|
+
@apply mt-10 scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight first:mt-0;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.prose h3 {
|
|
313
|
+
@apply mt-8 scroll-m-20 text-2xl font-semibold tracking-tight;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.prose h4 {
|
|
317
|
+
@apply mt-6 scroll-m-20 text-xl font-semibold tracking-tight;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.prose p {
|
|
321
|
+
@apply leading-7 [&:not(:first-child)]:mt-6;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
.prose a {
|
|
325
|
+
@apply font-medium text-primary underline underline-offset-4;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
.prose blockquote {
|
|
329
|
+
@apply mt-6 border-l-2 pl-6 italic;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.prose ul {
|
|
333
|
+
@apply my-6 ml-6 list-disc [&>li]:mt-2;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.prose ol {
|
|
337
|
+
@apply my-6 ml-6 list-decimal [&>li]:mt-2;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.prose code {
|
|
341
|
+
@apply relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
.prose pre {
|
|
345
|
+
@apply mt-6 overflow-x-auto rounded-lg border bg-muted p-4;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
.prose pre code {
|
|
349
|
+
@apply bg-transparent p-0;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.prose table {
|
|
353
|
+
@apply my-6 w-full;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.prose th {
|
|
357
|
+
@apply border px-4 py-2 text-left font-bold [&[align=center]]:text-center [&[align=right]]:text-right;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.prose td {
|
|
361
|
+
@apply border px-4 py-2 text-left [&[align=center]]:text-center [&[align=right]]:text-right;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.prose hr {
|
|
365
|
+
@apply my-8 border-border;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { VNode } from 'vue'
|
|
2
|
+
import { FileIcon } from 'lucide-vue-next'
|
|
3
|
+
import { defineComponent, h } from 'vue'
|
|
4
|
+
|
|
5
|
+
interface IconProps {
|
|
6
|
+
class?: string
|
|
7
|
+
style?: Record<string, unknown>
|
|
8
|
+
[key: string]: unknown
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function createIcon(svgContent: (props: IconProps) => VNode) {
|
|
12
|
+
return defineComponent({
|
|
13
|
+
name: 'Icon',
|
|
14
|
+
props: {
|
|
15
|
+
class: {
|
|
16
|
+
type: String,
|
|
17
|
+
default: '',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
setup(props, { attrs }) {
|
|
21
|
+
return () => svgContent({ ...props, ...attrs })
|
|
22
|
+
},
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const Icons = {
|
|
27
|
+
logo: createIcon((props: IconProps) =>
|
|
28
|
+
h('svg', {
|
|
29
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
30
|
+
viewBox: '0 0 256 256',
|
|
31
|
+
style: {
|
|
32
|
+
color: '#41B883',
|
|
33
|
+
},
|
|
34
|
+
...props,
|
|
35
|
+
}, [
|
|
36
|
+
h('rect', { width: '256', height: '256', fill: 'none' }),
|
|
37
|
+
h('line', {
|
|
38
|
+
'x1': '208',
|
|
39
|
+
'y1': '128',
|
|
40
|
+
'x2': '128',
|
|
41
|
+
'y2': '208',
|
|
42
|
+
'fill': 'none',
|
|
43
|
+
'stroke': 'currentColor',
|
|
44
|
+
'stroke-linecap': 'round',
|
|
45
|
+
'stroke-linejoin': 'round',
|
|
46
|
+
'stroke-width': '32',
|
|
47
|
+
}),
|
|
48
|
+
h('line', {
|
|
49
|
+
'x1': '192',
|
|
50
|
+
'y1': '40',
|
|
51
|
+
'x2': '40',
|
|
52
|
+
'y2': '192',
|
|
53
|
+
'fill': 'none',
|
|
54
|
+
'stroke': 'currentColor',
|
|
55
|
+
'stroke-linecap': 'round',
|
|
56
|
+
'stroke-linejoin': 'round',
|
|
57
|
+
'stroke-width': '32',
|
|
58
|
+
}),
|
|
59
|
+
]),
|
|
60
|
+
),
|
|
61
|
+
|
|
62
|
+
gitHub: createIcon((props: IconProps) =>
|
|
63
|
+
h('svg', {
|
|
64
|
+
viewBox: '0 0 438.549 438.549',
|
|
65
|
+
...props,
|
|
66
|
+
}, [
|
|
67
|
+
h('path', {
|
|
68
|
+
fill: 'currentColor',
|
|
69
|
+
d: 'M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z',
|
|
70
|
+
}),
|
|
71
|
+
]),
|
|
72
|
+
),
|
|
73
|
+
|
|
74
|
+
json: createIcon((props: IconProps) =>
|
|
75
|
+
h('svg', {
|
|
76
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
77
|
+
viewBox: '0 0 24 24',
|
|
78
|
+
...props,
|
|
79
|
+
}, [
|
|
80
|
+
h('path', {
|
|
81
|
+
fill: 'currentColor',
|
|
82
|
+
d: 'M12.043 23.968c.479-.004.953-.029 1.426-.094a11.805 11.805 0 0 0 3.146-.863 12.404 12.404 0 0 0 3.793-2.542 11.977 11.977 0 0 0 2.44-3.427 11.794 11.794 0 0 0 1.02-3.476c.149-1.16.135-2.346-.045-3.499a11.96 11.96 0 0 0-.793-2.788 11.197 11.197 0 0 0-.854-1.617c-1.168-1.837-2.861-3.314-4.81-4.3a12.835 12.835 0 0 0-2.172-.87h-.005c.119.063.24.132.345.201.12.074.239.146.351.225a8.93 8.93 0 0 1 1.559 1.33c1.063 1.145 1.797 2.548 2.218 4.041.284.982.434 1.998.495 3.017.044.743.044 1.491-.047 2.229-.149 1.27-.554 2.51-1.228 3.596a7.475 7.475 0 0 1-1.903 2.084c-1.244.928-2.877 1.482-4.436 1.114a3.916 3.916 0 0 1-.748-.258 4.692 4.692 0 0 1-.779-.45 6.08 6.08 0 0 1-1.244-1.105 6.507 6.507 0 0 1-1.049-1.747 7.366 7.366 0 0 1-.494-2.54c-.03-1.273.225-2.553.854-3.67a6.43 6.43 0 0 1 1.663-1.918c.225-.178.464-.333.704-.479l.016-.007a5.121 5.121 0 0 0-1.441-.12 4.963 4.963 0 0 0-1.228.24c-.359.12-.704.27-1.019.45a6.146 6.146 0 0 0-.733.494c-.211.18-.42.36-.615.555-1.123 1.153-1.768 2.682-2.022 4.256-.15.973-.15 1.96-.091 2.95.105 1.395.391 2.787.945 4.062a8.518 8.518 0 0 0 1.348 2.173 8.14 8.14 0 0 0 3.132 2.23 7.934 7.934 0 0 0 2.113.54c.074.015.149.015.209.015zm-2.934-.398a4.102 4.102 0 0 1-.45-.228 8.5 8.5 0 0 1-2.038-1.534c-1.094-1.137-1.827-2.566-2.247-4.08a15.184 15.184 0 0 1-.495-3.172 12.14 12.14 0 0 1 .046-2.082c.135-1.257.495-2.501 1.124-3.58a6.889 6.889 0 0 1 1.783-2.053 6.23 6.23 0 0 1 1.633-.9 5.363 5.363 0 0 1 3.522-.045c.029 0 .029 0 .045.03.015.015.045.015.06.03.045.016.104.045.165.074.239.12.479.271.704.42a6.294 6.294 0 0 1 2.097 2.502c.42.914.615 1.934.631 2.938.014 1.079-.18 2.157-.645 3.146a6.42 6.42 0 0 1-2.638 2.832c.09.03.18.045.271.075.225.044.449.074.688.074 1.468.045 2.892-.66 3.94-1.647.195-.18.375-.375.54-.585.225-.27.435-.54.614-.823.239-.375.435-.75.614-1.154a8.112 8.112 0 0 0 .509-1.664c.196-1.004.211-2.022.149-3.026-.135-2.022-.673-4.045-1.842-5.724a9.054 9.054 0 0 0-.555-.719 9.868 9.868 0 0 0-1.063-1.034 8.477 8.477 0 0 0-1.363-.915 9.927 9.927 0 0 0-1.692-.598l-.3-.06c-.209-.03-.42-.044-.634-.06a8.453 8.453 0 0 0-1.015.016c-.704.045-1.412.16-2.112.337C5.799 1.227 2.863 3.566 1.3 6.67A11.834 11.834 0 0 0 .238 9.801a11.81 11.81 0 0 0-.104 3.775c.12 1.02.374 2.023.778 2.977.227.57.511 1.124.825 1.648 1.094 1.783 2.683 3.236 4.51 4.24.688.39 1.408.69 2.157.944.226.074.45.15.689.21z',
|
|
83
|
+
}),
|
|
84
|
+
])),
|
|
85
|
+
|
|
86
|
+
ts: createIcon((props: IconProps) =>
|
|
87
|
+
h('svg', {
|
|
88
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
89
|
+
viewBox: '0 0 24 24',
|
|
90
|
+
...props,
|
|
91
|
+
}, [
|
|
92
|
+
h('path', {
|
|
93
|
+
fill: 'currentColor',
|
|
94
|
+
d: 'M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z',
|
|
95
|
+
}),
|
|
96
|
+
])),
|
|
97
|
+
|
|
98
|
+
css: createIcon((props: IconProps) =>
|
|
99
|
+
h('svg', {
|
|
100
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
101
|
+
viewBox: '0 0 24 24',
|
|
102
|
+
...props,
|
|
103
|
+
}, [
|
|
104
|
+
h('path', {
|
|
105
|
+
fill: 'currentColor',
|
|
106
|
+
d: 'M0 0v20.16A3.84 3.84 0 0 0 3.84 24h16.32A3.84 3.84 0 0 0 24 20.16V3.84A3.84 3.84 0 0 0 20.16 0Zm14.256 13.08c1.56 0 2.28 1.08 2.304 2.64h-1.608c.024-.288-.048-.6-.144-.84-.096-.192-.288-.264-.552-.264-.456 0-.696.264-.696.84-.024.576.288.888.768 1.08.72.288 1.608.744 1.92 1.296q.432.648.432 1.656c0 1.608-.912 2.592-2.496 2.592-1.656 0-2.4-1.032-2.424-2.688h1.68c0 .792.264 1.176.792 1.176.264 0 .456-.072.552-.24.192-.312.24-1.176-.048-1.512-.312-.408-.912-.6-1.32-.816q-.828-.396-1.224-.936c-.24-.36-.36-.888-.36-1.536 0-1.44.936-2.472 2.424-2.448m5.4 0c1.584 0 2.304 1.08 2.328 2.64h-1.608c0-.288-.048-.6-.168-.84-.096-.192-.264-.264-.528-.264-.48 0-.72.264-.72.84s.288.888.792 1.08c.696.288 1.608.744 1.92 1.296.264.432.408.984.408 1.656.024 1.608-.888 2.592-2.472 2.592-1.68 0-2.424-1.056-2.448-2.688h1.68c0 .744.264 1.176.792 1.176.264 0 .456-.072.552-.24.216-.312.264-1.176-.048-1.512-.288-.408-.888-.6-1.32-.816-.552-.264-.96-.576-1.2-.936s-.36-.888-.36-1.536c-.024-1.44.912-2.472 2.4-2.448m-11.031.018c.711-.006 1.419.198 1.839.63.432.432.672 1.128.648 1.992H9.336c.024-.456-.096-.792-.432-.96-.312-.144-.768-.048-.888.24-.12.264-.192.576-.168.864v3.504c0 .744.264 1.128.768 1.128a.65.65 0 0 0 .552-.264c.168-.24.192-.552.168-.84h1.776c.096 1.632-.984 2.712-2.568 2.688-1.536 0-2.496-.864-2.472-2.472v-4.032c0-.816.24-1.44.696-1.848.432-.408 1.146-.624 1.857-.63',
|
|
107
|
+
}),
|
|
108
|
+
])),
|
|
109
|
+
|
|
110
|
+
bash: createIcon((props: IconProps) =>
|
|
111
|
+
h('svg', {
|
|
112
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
113
|
+
viewBox: '0 0 24 24',
|
|
114
|
+
...props,
|
|
115
|
+
}, [
|
|
116
|
+
h('path', {
|
|
117
|
+
fill: 'currentColor',
|
|
118
|
+
d: 'M21.038 4.9 13.461.402a2.86 2.86 0 0 0-2.923.001L2.961 4.9A3.023 3.023 0 0 0 1.5 7.503v8.995c0 1.073.557 2.066 1.462 2.603l7.577 4.497a2.86 2.86 0 0 0 2.922 0l7.577-4.497a3.023 3.023 0 0 0 1.462-2.603V7.503A3.021 3.021 0 0 0 21.038 4.9zM15.17 18.946l.013.646c.001.078-.05.167-.111.198l-.383.22c-.061.031-.111-.007-.112-.085l-.007-.635c-.328.136-.66.169-.872.084-.04-.016-.057-.075-.041-.142l.139-.584a.24.24 0 0 1 .069-.121.163.163 0 0 1 .036-.026c.022-.011.043-.014.062-.006.229.077.521.041.802-.101.357-.181.596-.545.592-.907-.003-.328-.181-.465-.613-.468-.55.001-1.064-.107-1.072-.917-.007-.667.34-1.361.889-1.8l-.007-.652c-.001-.08.048-.168.111-.2l.37-.236c.061-.031.111.007.112.087l.006.653c.273-.109.511-.138.726-.088.047.012.067.076.048.151l-.144.578a.255.255 0 0 1-.065.116.161.161 0 0 1-.038.028.083.083 0 0 1-.057.009c-.098-.022-.332-.073-.699.113-.385.195-.52.53-.517.778.003.297.155.387.681.396.7.012 1.003.318 1.01 1.023.007.689-.362 1.433-.928 1.888zm3.973-1.087c0 .06-.008.116-.058.145l-1.916 1.164c-.05.029-.09.004-.09-.056v-.494c0-.06.037-.093.087-.122l1.887-1.129c.05-.029.09-.004.09.056v.436zm1.316-11.062-7.168 4.427c-.894.523-1.553 1.109-1.553 2.187v8.833c0 .645.26 1.063.66 1.184a2.304 2.304 0 0 1-.398.039c-.42 0-.833-.114-1.197-.33L3.226 18.64a2.494 2.494 0 0 1-1.201-2.142V7.503c0-.881.46-1.702 1.201-2.142L10.803.863a2.342 2.342 0 0 1 2.394 0l7.577 4.498a2.479 2.479 0 0 1 1.164 1.732c-.252-.536-.818-.682-1.479-.296z',
|
|
119
|
+
}),
|
|
120
|
+
])),
|
|
121
|
+
|
|
122
|
+
vue: createIcon((props: IconProps) =>
|
|
123
|
+
h(
|
|
124
|
+
'svg',
|
|
125
|
+
{
|
|
126
|
+
viewBox: '0 0 261.76 226.69',
|
|
127
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
128
|
+
class: props.class,
|
|
129
|
+
style: props.style,
|
|
130
|
+
...props,
|
|
131
|
+
},
|
|
132
|
+
[
|
|
133
|
+
h('path', {
|
|
134
|
+
d: 'M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z',
|
|
135
|
+
fill: 'currentColor',
|
|
136
|
+
}),
|
|
137
|
+
h('path', {
|
|
138
|
+
d: 'M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z',
|
|
139
|
+
fill: 'currentColor',
|
|
140
|
+
}),
|
|
141
|
+
],
|
|
142
|
+
),
|
|
143
|
+
),
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export function getIconForLanguageExtension(language: string) {
|
|
147
|
+
switch (language) {
|
|
148
|
+
case 'json':
|
|
149
|
+
return Icons.json
|
|
150
|
+
case 'css':
|
|
151
|
+
return Icons.css
|
|
152
|
+
case 'js':
|
|
153
|
+
case 'jsx':
|
|
154
|
+
case 'ts':
|
|
155
|
+
case 'tsx':
|
|
156
|
+
case 'typescript':
|
|
157
|
+
return Icons.ts
|
|
158
|
+
case 'vue':
|
|
159
|
+
return Icons.vue
|
|
160
|
+
default:
|
|
161
|
+
return FileIcon
|
|
162
|
+
}
|
|
163
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
const appConfig = useAppConfig()
|
|
3
|
+
const title = computed(() => appConfig.docs?.title || 'Docs')
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
<footer class="border-t py-6 md:py-0">
|
|
8
|
+
<div class="container flex flex-col items-center justify-between gap-4 md:h-14 md:flex-row">
|
|
9
|
+
<p class="text-center text-sm leading-loose text-muted-foreground md:text-left">
|
|
10
|
+
Built with
|
|
11
|
+
<NuxtLink
|
|
12
|
+
to="https://github.com/pleaseai/docs"
|
|
13
|
+
target="_blank"
|
|
14
|
+
class="font-medium underline underline-offset-4"
|
|
15
|
+
>
|
|
16
|
+
docs please
|
|
17
|
+
</NuxtLink>
|
|
18
|
+
</p>
|
|
19
|
+
<p class="text-center text-sm text-muted-foreground md:text-right">
|
|
20
|
+
{{ title }}
|
|
21
|
+
</p>
|
|
22
|
+
</div>
|
|
23
|
+
</footer>
|
|
24
|
+
</template>
|