@baybreezy/docd 0.0.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.
- package/app/app.config.ts +239 -0
- package/app/app.vue +19 -0
- package/app/assets/css/tailwind.css +335 -0
- package/app/assets/css/theme.css +1171 -0
- package/app/components/OgImage/Docs.takumi.vue +69 -0
- package/app/components/OgImage/Landing.takumi.vue +64 -0
- package/app/components/OgImage/Site.takumi.vue +32 -0
- package/app/components/Ui/Avatar/Avatar.vue +75 -0
- package/app/components/Ui/Avatar/Badge.vue +34 -0
- package/app/components/Ui/Avatar/Fallback.vue +30 -0
- package/app/components/Ui/Avatar/Group.vue +29 -0
- package/app/components/Ui/Avatar/GroupCount.vue +29 -0
- package/app/components/Ui/Avatar/Image.vue +29 -0
- package/app/components/Ui/Badge.vue +86 -0
- package/app/components/Ui/BadgeGroup.vue +314 -0
- package/app/components/Ui/BgPattern/Grid.vue +137 -0
- package/app/components/Ui/BorderBeam.vue +97 -0
- package/app/components/Ui/Breadcrumbs.vue +103 -0
- package/app/components/Ui/Button.vue +169 -0
- package/app/components/Ui/ButtonGroup/ButtonGroup.vue +54 -0
- package/app/components/Ui/ButtonGroup/Separator.vue +38 -0
- package/app/components/Ui/ButtonGroup/Text.vue +33 -0
- package/app/components/Ui/Card/Action.vue +31 -0
- package/app/components/Ui/Card/Card.vue +58 -0
- package/app/components/Ui/Card/Content.vue +34 -0
- package/app/components/Ui/Card/Description.vue +36 -0
- package/app/components/Ui/Card/Footer.vue +31 -0
- package/app/components/Ui/Card/Header.vue +31 -0
- package/app/components/Ui/Card/Title.vue +37 -0
- package/app/components/Ui/Collapsible/Collapsible.vue +16 -0
- package/app/components/Ui/Collapsible/Content.vue +27 -0
- package/app/components/Ui/Collapsible/Trigger.vue +13 -0
- package/app/components/Ui/Command/Command.vue +115 -0
- package/app/components/Ui/Command/Dialog.vue +65 -0
- package/app/components/Ui/Command/Empty.vue +32 -0
- package/app/components/Ui/Command/Footer.vue +40 -0
- package/app/components/Ui/Command/Group.vue +58 -0
- package/app/components/Ui/Command/Input.vue +57 -0
- package/app/components/Ui/Command/Item.vue +102 -0
- package/app/components/Ui/Command/List.vue +33 -0
- package/app/components/Ui/Command/Separator.vue +30 -0
- package/app/components/Ui/Command/Shortcut.vue +28 -0
- package/app/components/Ui/Container.vue +46 -0
- package/app/components/Ui/ContextMenu/Arrow.vue +43 -0
- package/app/components/Ui/ContextMenu/CheckboxItem.vue +42 -0
- package/app/components/Ui/ContextMenu/Content.vue +53 -0
- package/app/components/Ui/ContextMenu/ContextMenu.vue +14 -0
- package/app/components/Ui/ContextMenu/Group.vue +12 -0
- package/app/components/Ui/ContextMenu/Item.vue +65 -0
- package/app/components/Ui/ContextMenu/ItemIndicator.vue +30 -0
- package/app/components/Ui/ContextMenu/Label.vue +35 -0
- package/app/components/Ui/ContextMenu/Portal.vue +12 -0
- package/app/components/Ui/ContextMenu/RadioGroup.vue +16 -0
- package/app/components/Ui/ContextMenu/RadioItem.vue +40 -0
- package/app/components/Ui/ContextMenu/Separator.vue +25 -0
- package/app/components/Ui/ContextMenu/Shortcut.vue +30 -0
- package/app/components/Ui/ContextMenu/Sub.vue +15 -0
- package/app/components/Ui/ContextMenu/SubContent.vue +55 -0
- package/app/components/Ui/ContextMenu/SubTrigger.vue +42 -0
- package/app/components/Ui/ContextMenu/Trigger.vue +12 -0
- package/app/components/Ui/Dialog/Close.vue +12 -0
- package/app/components/Ui/Dialog/Content.vue +79 -0
- package/app/components/Ui/Dialog/Description.vue +29 -0
- package/app/components/Ui/Dialog/Dialog.vue +14 -0
- package/app/components/Ui/Dialog/Footer.vue +32 -0
- package/app/components/Ui/Dialog/Header.vue +32 -0
- package/app/components/Ui/Dialog/Overlay.vue +25 -0
- package/app/components/Ui/Dialog/Portal.vue +12 -0
- package/app/components/Ui/Dialog/Title.vue +29 -0
- package/app/components/Ui/Dialog/Trigger.vue +12 -0
- package/app/components/Ui/Divider.vue +102 -0
- package/app/components/Ui/Drawer/Close.vue +12 -0
- package/app/components/Ui/Drawer/Content.vue +67 -0
- package/app/components/Ui/Drawer/Description.vue +33 -0
- package/app/components/Ui/Drawer/Drawer.vue +17 -0
- package/app/components/Ui/Drawer/Footer.vue +35 -0
- package/app/components/Ui/Drawer/Header.vue +34 -0
- package/app/components/Ui/Drawer/Overlay.vue +20 -0
- package/app/components/Ui/Drawer/Portal.vue +12 -0
- package/app/components/Ui/Drawer/Title.vue +35 -0
- package/app/components/Ui/Drawer/Trigger.vue +12 -0
- package/app/components/Ui/DropdownMenu/Arrow.vue +43 -0
- package/app/components/Ui/DropdownMenu/CheckboxItem.vue +41 -0
- package/app/components/Ui/DropdownMenu/Content.vue +56 -0
- package/app/components/Ui/DropdownMenu/DropdownMenu.vue +15 -0
- package/app/components/Ui/DropdownMenu/Group.vue +12 -0
- package/app/components/Ui/DropdownMenu/Item.vue +64 -0
- package/app/components/Ui/DropdownMenu/ItemIndicator.vue +32 -0
- package/app/components/Ui/DropdownMenu/Label.vue +34 -0
- package/app/components/Ui/DropdownMenu/Portal.vue +12 -0
- package/app/components/Ui/DropdownMenu/RadioGroup.vue +16 -0
- package/app/components/Ui/DropdownMenu/RadioItem.vue +40 -0
- package/app/components/Ui/DropdownMenu/Separator.vue +25 -0
- package/app/components/Ui/DropdownMenu/Shortcut.vue +44 -0
- package/app/components/Ui/DropdownMenu/Sub.vue +14 -0
- package/app/components/Ui/DropdownMenu/SubContent.vue +56 -0
- package/app/components/Ui/DropdownMenu/SubTrigger.vue +47 -0
- package/app/components/Ui/DropdownMenu/Trigger.vue +12 -0
- package/app/components/Ui/FancyIcon.vue +243 -0
- package/app/components/Ui/GradientDivider.vue +26 -0
- package/app/components/Ui/IframeLazy.vue +97 -0
- package/app/components/Ui/Input.vue +97 -0
- package/app/components/Ui/InputGroup/Addon.vue +66 -0
- package/app/components/Ui/InputGroup/Button.vue +50 -0
- package/app/components/Ui/InputGroup/Input.vue +25 -0
- package/app/components/Ui/InputGroup/InputGroup.vue +44 -0
- package/app/components/Ui/InputGroup/Text.vue +33 -0
- package/app/components/Ui/InputGroup/Textarea.vue +25 -0
- package/app/components/Ui/Kbd/Group.vue +32 -0
- package/app/components/Ui/Kbd/Kbd.vue +62 -0
- package/app/components/Ui/Label.vue +40 -0
- package/app/components/Ui/Popover/Anchor.vue +13 -0
- package/app/components/Ui/Popover/Arrow.vue +42 -0
- package/app/components/Ui/Popover/Close.vue +13 -0
- package/app/components/Ui/Popover/Content.vue +55 -0
- package/app/components/Ui/Popover/Popover.vue +15 -0
- package/app/components/Ui/Popover/Portal.vue +13 -0
- package/app/components/Ui/Popover/Trigger.vue +12 -0
- package/app/components/Ui/Popover/X.vue +38 -0
- package/app/components/Ui/ScrollArea/Corner.vue +12 -0
- package/app/components/Ui/ScrollArea/ScrollArea.vue +38 -0
- package/app/components/Ui/ScrollArea/Scrollbar.vue +39 -0
- package/app/components/Ui/ScrollArea/Thumb.vue +39 -0
- package/app/components/Ui/ScrollArea/Viewport.vue +27 -0
- package/app/components/Ui/Scrollspy.vue +61 -0
- package/app/components/Ui/Separator.vue +40 -0
- package/app/components/Ui/Skeleton.vue +39 -0
- package/app/components/Ui/Sonner.vue +25 -0
- package/app/components/Ui/Tabs/Content.vue +27 -0
- package/app/components/Ui/Tabs/Indicator.vue +37 -0
- package/app/components/Ui/Tabs/List.vue +37 -0
- package/app/components/Ui/Tabs/Tabs.vue +25 -0
- package/app/components/Ui/Tabs/Trigger.vue +41 -0
- package/app/components/Ui/Textarea.vue +81 -0
- package/app/components/Ui/Tooltip/Arrow.vue +30 -0
- package/app/components/Ui/Tooltip/Content.vue +50 -0
- package/app/components/Ui/Tooltip/Portal.vue +12 -0
- package/app/components/Ui/Tooltip/Provider.vue +14 -0
- package/app/components/Ui/Tooltip/Tooltip.vue +25 -0
- package/app/components/Ui/Tooltip/Trigger.vue +12 -0
- package/app/components/Ui/Tree/Item.vue +15 -0
- package/app/components/Ui/Tree/Tree.vue +15 -0
- package/app/components/Ui/Tree/Virtualizer.vue +13 -0
- package/app/components/component-api/ComponentApiSection.vue +135 -0
- package/app/components/content/docs/Callout/DocsCallout.vue +99 -0
- package/app/components/content/prose/ProseA.global.vue +31 -0
- package/app/components/content/prose/ProseBlockquote.global.vue +28 -0
- package/app/components/content/prose/ProseCallout.global.vue +306 -0
- package/app/components/content/prose/ProseCard.global.vue +100 -0
- package/app/components/content/prose/ProseCodeCollapse.global.vue +125 -0
- package/app/components/content/prose/ProseCodeCopy.global.vue +67 -0
- package/app/components/content/prose/ProseCodeGroup.global.vue +104 -0
- package/app/components/content/prose/ProseCodeTree.global.vue +277 -0
- package/app/components/content/prose/ProseCollapsible.global.vue +64 -0
- package/app/components/content/prose/ProseColorModeImage.global.vue +58 -0
- package/app/components/content/prose/ProseComponentApi.global.vue +104 -0
- package/app/components/content/prose/ProseComponentEvents.global.vue +27 -0
- package/app/components/content/prose/ProseComponentExposed.global.vue +27 -0
- package/app/components/content/prose/ProseComponentProps.global.vue +27 -0
- package/app/components/content/prose/ProseComponentSlots.global.vue +27 -0
- package/app/components/content/prose/ProseEm.global.vue +5 -0
- package/app/components/content/prose/ProseField.global.vue +118 -0
- package/app/components/content/prose/ProseFieldGroup.global.vue +62 -0
- package/app/components/content/prose/ProseH1.global.vue +58 -0
- package/app/components/content/prose/ProseH2.global.vue +58 -0
- package/app/components/content/prose/ProseH3.global.vue +58 -0
- package/app/components/content/prose/ProseH4.global.vue +58 -0
- package/app/components/content/prose/ProseH5.global.vue +47 -0
- package/app/components/content/prose/ProseH6.global.vue +47 -0
- package/app/components/content/prose/ProseHr.global.vue +33 -0
- package/app/components/content/prose/ProseIconList.global.vue +113 -0
- package/app/components/content/prose/ProseImg.global.vue +119 -0
- package/app/components/content/prose/ProseLead.global.vue +28 -0
- package/app/components/content/prose/ProseLi.global.vue +25 -0
- package/app/components/content/prose/ProseMermaid.global.vue +127 -0
- package/app/components/content/prose/ProseOl.global.vue +25 -0
- package/app/components/content/prose/ProseP.global.vue +25 -0
- package/app/components/content/prose/ProsePmInstall.global.vue +60 -0
- package/app/components/content/prose/ProsePmRun.global.vue +51 -0
- package/app/components/content/prose/ProsePmX.global.vue +56 -0
- package/app/components/content/prose/ProsePre.global.vue +181 -0
- package/app/components/content/prose/ProseShowCase.global.vue +56 -0
- package/app/components/content/prose/ProseSmartIcon.global.vue +54 -0
- package/app/components/content/prose/ProseStep.global.vue +22 -0
- package/app/components/content/prose/ProseSteps.global.vue +22 -0
- package/app/components/content/prose/ProseStrong.global.vue +34 -0
- package/app/components/content/prose/ProseTable.global.vue +34 -0
- package/app/components/content/prose/ProseTabs.global.vue +104 -0
- package/app/components/content/prose/ProseTabsInner.global.vue +274 -0
- package/app/components/content/prose/ProseTbody.global.vue +5 -0
- package/app/components/content/prose/ProseTd.global.vue +25 -0
- package/app/components/content/prose/ProseTh.global.vue +25 -0
- package/app/components/content/prose/ProseThead.global.vue +9 -0
- package/app/components/content/prose/ProseTr.global.vue +35 -0
- package/app/components/content/prose/ProseUl.global.vue +25 -0
- package/app/components/docs/DocsExtraStuff.vue +39 -0
- package/app/components/docs/DocsGithubLink.vue +11 -0
- package/app/components/docs/DocsHeader.vue +3 -0
- package/app/components/docs/DocsLogo.vue +74 -0
- package/app/components/docs/DocsMobileBar.vue +26 -0
- package/app/components/docs/DocsMobileNav.vue +49 -0
- package/app/components/docs/DocsNav.vue +161 -0
- package/app/components/docs/DocsPageTransition.vue +32 -0
- package/app/components/docs/DocsSearch.vue +220 -0
- package/app/components/docs/DocsSearchButton.vue +20 -0
- package/app/components/docs/DocsThemeCustomizer.vue +229 -0
- package/app/components/docs/DocsThemeToggler.vue +98 -0
- package/app/components/docs/DocsTocRail.vue +162 -0
- package/app/components/docs/DocsToclink.vue +52 -0
- package/app/components/docs/DocsZigZagRail.vue +70 -0
- package/app/components/landing/Hero.vue +222 -0
- package/app/components/page/PageFooter.vue +49 -0
- package/app/components/page/PageHeader.vue +68 -0
- package/app/components/page/PageHeaderLinks.vue +138 -0
- package/app/components/page/PageMobileToc.vue +162 -0
- package/app/components/page/PageToc.vue +33 -0
- package/app/composables/useDefaultSlotItems.ts +90 -0
- package/app/composables/useDocPage.ts +66 -0
- package/app/composables/useDocSearch.ts +23 -0
- package/app/composables/useDocd.ts +107 -0
- package/app/composables/useLogoAssets.ts +319 -0
- package/app/composables/usePm.ts +73 -0
- package/app/composables/useProseComponentMeta.ts +30 -0
- package/app/composables/useScrollspy.ts +327 -0
- package/app/composables/useSeo.ts +240 -0
- package/app/composables/useUIConfig.ts +36 -0
- package/app/layouts/default.vue +5 -0
- package/app/layouts/docs.vue +64 -0
- package/app/middleware/colorMode.global.ts +8 -0
- package/app/middleware/doc-page-layout.ts +11 -0
- package/app/middleware/landing-page-layout.ts +11 -0
- package/app/pages/[...slug].vue +63 -0
- package/app/plugins/mermaid.client.ts +35 -0
- package/app/plugins/navigation-direction.client.ts +15 -0
- package/app/plugins/theme-restore.client.ts +7 -0
- package/app/templates/landing.vue +40 -0
- package/app/transitions/presets.ts +71 -0
- package/app/types/prose-component-meta.d.ts +4 -0
- package/app/utils/og.ts +26 -0
- package/app/utils/prerender.ts +9 -0
- package/app/utils/translucent.ts +56 -0
- package/app/utils/tw-helper.ts +4 -0
- package/content.config.ts +81 -0
- package/index.d.ts +25 -0
- package/modules/config.ts +89 -0
- package/modules/custom-icons.ts +17 -0
- package/modules/markdown-rewrite.ts +96 -0
- package/modules/prose-component-meta.ts +150 -0
- package/modules/routing.ts +22 -0
- package/modules/skills/index.ts +167 -0
- package/modules/skills/runtime/server/routes/skills-files.ts +49 -0
- package/modules/skills/runtime/server/routes/skills-index.ts +8 -0
- package/nuxt.config.ts +96 -0
- package/nuxt.schema.ts +288 -0
- package/package.json +95 -0
- package/server/mcp/tools/get-page.ts +66 -0
- package/server/mcp/tools/list-pages.ts +61 -0
- package/server/routes/sitemap.xml.ts +73 -0
- package/server/utils/content.ts +3 -0
- package/tailwind.config.cjs +55 -0
- package/utils/component-api-content.ts +467 -0
- package/utils/component-api-discovery.ts +165 -0
- package/utils/component-api-schema.ts +28 -0
- package/utils/component-api.ts +243 -0
- package/utils/generate-prose-component-meta.ts +303 -0
- package/utils/git.ts +123 -0
- package/utils/meta.ts +40 -0
- package/utils/pages.ts +21 -0
package/nuxt.schema.ts
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { field, group } from "@nuxt/content/preview";
|
|
2
|
+
|
|
3
|
+
export default defineNuxtSchema({
|
|
4
|
+
appConfig: {
|
|
5
|
+
docd: group({
|
|
6
|
+
title: "Docd",
|
|
7
|
+
description: "Docd documentation layer configuration.",
|
|
8
|
+
icon: "i-lucide-settings",
|
|
9
|
+
fields: {
|
|
10
|
+
github: group({
|
|
11
|
+
title: "GitHub",
|
|
12
|
+
description: "GitHub repository configuration for edit links.",
|
|
13
|
+
icon: "i-simple-icons-github",
|
|
14
|
+
fields: {
|
|
15
|
+
repo: field({
|
|
16
|
+
type: "string",
|
|
17
|
+
title: "Repository URL",
|
|
18
|
+
description: "Full GitHub repository URL, e.g. https://github.com/user/repo",
|
|
19
|
+
icon: "i-simple-icons-github",
|
|
20
|
+
default: "",
|
|
21
|
+
}),
|
|
22
|
+
branch: field({
|
|
23
|
+
type: "string",
|
|
24
|
+
title: "Branch",
|
|
25
|
+
description: "Branch to link to for editing.",
|
|
26
|
+
icon: "i-lucide-git-branch",
|
|
27
|
+
default: "main",
|
|
28
|
+
}),
|
|
29
|
+
contentDir: field({
|
|
30
|
+
type: "string",
|
|
31
|
+
title: "Content Directory",
|
|
32
|
+
description: "Path inside the repo where content lives.",
|
|
33
|
+
icon: "i-lucide-folder",
|
|
34
|
+
default: "content",
|
|
35
|
+
}),
|
|
36
|
+
},
|
|
37
|
+
}),
|
|
38
|
+
ui: group({
|
|
39
|
+
title: "UI",
|
|
40
|
+
description: "UI customization options.",
|
|
41
|
+
icon: "i-lucide-palette",
|
|
42
|
+
fields: {
|
|
43
|
+
colorMode: field({
|
|
44
|
+
type: "string",
|
|
45
|
+
title: "Color Mode",
|
|
46
|
+
description:
|
|
47
|
+
"Force a specific color mode. Leave empty for system preference with toggle.",
|
|
48
|
+
icon: "i-lucide-monitor",
|
|
49
|
+
default: "",
|
|
50
|
+
required: ["", "light", "dark"],
|
|
51
|
+
}),
|
|
52
|
+
borderType: field({
|
|
53
|
+
type: "string",
|
|
54
|
+
title: "Border Type",
|
|
55
|
+
description:
|
|
56
|
+
"Controls whether decorative borders and rails render as dashed or solid.",
|
|
57
|
+
icon: "i-lucide-separator-horizontal",
|
|
58
|
+
default: "dashed",
|
|
59
|
+
required: ["dashed", "solid"],
|
|
60
|
+
}),
|
|
61
|
+
header: group({
|
|
62
|
+
title: "Header",
|
|
63
|
+
description: "Header configuration.",
|
|
64
|
+
icon: "i-lucide-layout",
|
|
65
|
+
fields: {
|
|
66
|
+
title: field({
|
|
67
|
+
type: "string",
|
|
68
|
+
title: "Title",
|
|
69
|
+
description: "Title displayed in the header. Defaults to the site name.",
|
|
70
|
+
icon: "i-lucide-type",
|
|
71
|
+
default: "",
|
|
72
|
+
}),
|
|
73
|
+
hideSearch: field({
|
|
74
|
+
type: "boolean",
|
|
75
|
+
title: "Hide Search",
|
|
76
|
+
description: "Whether to hide the search button in the header.",
|
|
77
|
+
icon: "i-lucide-search",
|
|
78
|
+
default: false,
|
|
79
|
+
}),
|
|
80
|
+
logo: group({
|
|
81
|
+
title: "Logo",
|
|
82
|
+
description: "Logo configuration for the header.",
|
|
83
|
+
icon: "i-lucide-image",
|
|
84
|
+
fields: {
|
|
85
|
+
light: field({
|
|
86
|
+
type: "media",
|
|
87
|
+
title: "Light Mode Logo",
|
|
88
|
+
description: "Logo image for light mode.",
|
|
89
|
+
icon: "i-lucide-sun",
|
|
90
|
+
default: "",
|
|
91
|
+
}),
|
|
92
|
+
dark: field({
|
|
93
|
+
type: "media",
|
|
94
|
+
title: "Dark Mode Logo",
|
|
95
|
+
description: "Logo image for dark mode.",
|
|
96
|
+
icon: "i-lucide-moon",
|
|
97
|
+
default: "",
|
|
98
|
+
}),
|
|
99
|
+
alt: field({
|
|
100
|
+
type: "string",
|
|
101
|
+
title: "Alt Text",
|
|
102
|
+
description: "Alt text for the logo image.",
|
|
103
|
+
icon: "i-lucide-text",
|
|
104
|
+
default: "",
|
|
105
|
+
}),
|
|
106
|
+
classes: field({
|
|
107
|
+
type: "string",
|
|
108
|
+
title: "CSS Classes",
|
|
109
|
+
description: "Additional CSS classes to apply to the logo image.",
|
|
110
|
+
icon: "i-lucide-paintbrush",
|
|
111
|
+
default: "",
|
|
112
|
+
}),
|
|
113
|
+
display: field({
|
|
114
|
+
type: "string",
|
|
115
|
+
title: "Display",
|
|
116
|
+
description:
|
|
117
|
+
'Which logo variant to show in the header: "logo" or "wordmark".',
|
|
118
|
+
icon: "i-lucide-layout",
|
|
119
|
+
default: "logo",
|
|
120
|
+
required: ["logo", "wordmark"],
|
|
121
|
+
}),
|
|
122
|
+
wordmark: group({
|
|
123
|
+
title: "Wordmark",
|
|
124
|
+
description: "Wordmark image configuration for header branding.",
|
|
125
|
+
icon: "i-lucide-type",
|
|
126
|
+
fields: {
|
|
127
|
+
light: field({
|
|
128
|
+
type: "media",
|
|
129
|
+
title: "Light Mode Wordmark",
|
|
130
|
+
description: "Wordmark image for light mode.",
|
|
131
|
+
icon: "i-lucide-sun",
|
|
132
|
+
default: "",
|
|
133
|
+
}),
|
|
134
|
+
dark: field({
|
|
135
|
+
type: "media",
|
|
136
|
+
title: "Dark Mode Wordmark",
|
|
137
|
+
description: "Wordmark image for dark mode.",
|
|
138
|
+
icon: "i-lucide-moon",
|
|
139
|
+
default: "",
|
|
140
|
+
}),
|
|
141
|
+
},
|
|
142
|
+
}),
|
|
143
|
+
favicon: field({
|
|
144
|
+
type: "media",
|
|
145
|
+
title: "Favicon",
|
|
146
|
+
description: "Path to the favicon file for brand asset references.",
|
|
147
|
+
icon: "i-lucide-app-window",
|
|
148
|
+
default: "/favicon.ico",
|
|
149
|
+
}),
|
|
150
|
+
brandAssetsUrl: field({
|
|
151
|
+
type: "string",
|
|
152
|
+
title: "Brand Assets URL",
|
|
153
|
+
description: "Link to a page or folder containing brand assets.",
|
|
154
|
+
icon: "i-lucide-palette",
|
|
155
|
+
default: "",
|
|
156
|
+
}),
|
|
157
|
+
url: field({
|
|
158
|
+
type: "string",
|
|
159
|
+
title: "Click URL",
|
|
160
|
+
description: "URL to navigate to when the logo is clicked.",
|
|
161
|
+
icon: "i-lucide-link",
|
|
162
|
+
default: "/",
|
|
163
|
+
}),
|
|
164
|
+
},
|
|
165
|
+
}),
|
|
166
|
+
},
|
|
167
|
+
}),
|
|
168
|
+
toc: group({
|
|
169
|
+
title: "Table of Contents",
|
|
170
|
+
description: "Table of contents sidebar configuration.",
|
|
171
|
+
icon: "i-lucide-list",
|
|
172
|
+
fields: {
|
|
173
|
+
title: field({
|
|
174
|
+
type: "string",
|
|
175
|
+
title: "Title",
|
|
176
|
+
description: "Title displayed at the top of the ToC.",
|
|
177
|
+
icon: "i-lucide-heading",
|
|
178
|
+
default: "On this page",
|
|
179
|
+
}),
|
|
180
|
+
icon: field({
|
|
181
|
+
type: "icon",
|
|
182
|
+
title: "Icon",
|
|
183
|
+
description: "Icon displayed next to the ToC title.",
|
|
184
|
+
icon: "i-lucide-list",
|
|
185
|
+
default: "lucide:list",
|
|
186
|
+
}),
|
|
187
|
+
},
|
|
188
|
+
}),
|
|
189
|
+
transition: group({
|
|
190
|
+
title: "Page Transition",
|
|
191
|
+
description: "Page transition animation configuration.",
|
|
192
|
+
icon: "i-lucide-sparkles",
|
|
193
|
+
fields: {
|
|
194
|
+
name: field({
|
|
195
|
+
type: "string",
|
|
196
|
+
title: "Transition Name",
|
|
197
|
+
description: 'Transition preset to use. Set to "none" to disable.',
|
|
198
|
+
icon: "i-lucide-play",
|
|
199
|
+
default: "fade",
|
|
200
|
+
required: [
|
|
201
|
+
"none",
|
|
202
|
+
"fade",
|
|
203
|
+
"rightToLeft",
|
|
204
|
+
"leftToRight",
|
|
205
|
+
"upToDown",
|
|
206
|
+
"downToUp",
|
|
207
|
+
"zoom",
|
|
208
|
+
"cupertino",
|
|
209
|
+
],
|
|
210
|
+
}),
|
|
211
|
+
duration: field({
|
|
212
|
+
type: "number",
|
|
213
|
+
title: "Duration",
|
|
214
|
+
description: "Transition duration in seconds.",
|
|
215
|
+
icon: "i-lucide-timer",
|
|
216
|
+
default: 0.35,
|
|
217
|
+
}),
|
|
218
|
+
easing: field({
|
|
219
|
+
type: "string",
|
|
220
|
+
title: "Easing",
|
|
221
|
+
description: "Easing function for the transition.",
|
|
222
|
+
icon: "i-lucide-activity",
|
|
223
|
+
default: "easeOut",
|
|
224
|
+
}),
|
|
225
|
+
},
|
|
226
|
+
}),
|
|
227
|
+
footer: group({
|
|
228
|
+
title: "Footer",
|
|
229
|
+
description: "Sidebar footer configuration.",
|
|
230
|
+
icon: "i-lucide-layout",
|
|
231
|
+
fields: {
|
|
232
|
+
hideThemeCustomizer: field({
|
|
233
|
+
type: "boolean",
|
|
234
|
+
title: "Hide Theme Customizer",
|
|
235
|
+
description: "Whether to hide the theme customizer in the sidebar footer.",
|
|
236
|
+
icon: "i-lucide-palette",
|
|
237
|
+
default: false,
|
|
238
|
+
}),
|
|
239
|
+
hideLightDarkToggle: field({
|
|
240
|
+
type: "boolean",
|
|
241
|
+
title: "Hide Light/Dark Toggle",
|
|
242
|
+
description: "Whether to hide the light/dark mode toggle in the sidebar footer.",
|
|
243
|
+
icon: "i-lucide-moon",
|
|
244
|
+
default: false,
|
|
245
|
+
}),
|
|
246
|
+
},
|
|
247
|
+
}),
|
|
248
|
+
extraLinks: field({
|
|
249
|
+
type: "array",
|
|
250
|
+
title: "Extra Links",
|
|
251
|
+
description: "Additional links rendered in the sidebar's extra section.",
|
|
252
|
+
icon: "i-lucide-link",
|
|
253
|
+
default: [],
|
|
254
|
+
}),
|
|
255
|
+
},
|
|
256
|
+
}),
|
|
257
|
+
},
|
|
258
|
+
}),
|
|
259
|
+
seo: group({
|
|
260
|
+
title: "SEO",
|
|
261
|
+
description: "SEO configuration.",
|
|
262
|
+
icon: "i-lucide-search",
|
|
263
|
+
fields: {
|
|
264
|
+
titleTemplate: field({
|
|
265
|
+
type: "string",
|
|
266
|
+
title: "Title Template",
|
|
267
|
+
description: "Template for page titles. Use %s as the page title placeholder.",
|
|
268
|
+
icon: "i-lucide-type",
|
|
269
|
+
default: "%s",
|
|
270
|
+
}),
|
|
271
|
+
title: field({
|
|
272
|
+
type: "string",
|
|
273
|
+
title: "Site Title",
|
|
274
|
+
description: "Default site title.",
|
|
275
|
+
icon: "i-lucide-type",
|
|
276
|
+
default: "",
|
|
277
|
+
}),
|
|
278
|
+
description: field({
|
|
279
|
+
type: "string",
|
|
280
|
+
title: "Description",
|
|
281
|
+
description: "Default site description.",
|
|
282
|
+
icon: "i-lucide-text",
|
|
283
|
+
default: "",
|
|
284
|
+
}),
|
|
285
|
+
},
|
|
286
|
+
}),
|
|
287
|
+
},
|
|
288
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@baybreezy/docd",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "A Nuxt layer for building documentation sites with UI Thing.",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/BayBreezy/docd"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"app",
|
|
11
|
+
"modules",
|
|
12
|
+
"server",
|
|
13
|
+
"utils",
|
|
14
|
+
"content.config.ts",
|
|
15
|
+
"index.d.ts",
|
|
16
|
+
"nuxt.config.ts",
|
|
17
|
+
"nuxt.schema.ts",
|
|
18
|
+
"tailwind.config.cjs"
|
|
19
|
+
],
|
|
20
|
+
"type": "module",
|
|
21
|
+
"main": "./nuxt.config.ts",
|
|
22
|
+
"types": "./index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./index.d.ts",
|
|
26
|
+
"default": "./nuxt.config.ts"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@baybreezy/file-extension-icon": "^0.0.4",
|
|
34
|
+
"@iconify-json/lucide": "^1.2.102",
|
|
35
|
+
"@iconify-json/simple-icons": "^1.2.79",
|
|
36
|
+
"@iconify/utils": "^3.1.0",
|
|
37
|
+
"@morev/vue-transitions": "^3.0.5",
|
|
38
|
+
"@nuxt/content": "3.13.0",
|
|
39
|
+
"@nuxt/fonts": "^0.14.0",
|
|
40
|
+
"@nuxt/icon": "^2.2.1",
|
|
41
|
+
"@nuxt/image": "2.0.0",
|
|
42
|
+
"@nuxt/kit": "^4.4.2",
|
|
43
|
+
"@nuxtjs/color-mode": "^4.0.0",
|
|
44
|
+
"@nuxtjs/mcp-toolkit": "^0.14.0",
|
|
45
|
+
"@nuxtjs/mdc": "^0.21.1",
|
|
46
|
+
"@nuxtjs/robots": "^6.0.7",
|
|
47
|
+
"@tailwindcss/forms": "^0.5.11",
|
|
48
|
+
"@tailwindcss/typography": "^0.5.19",
|
|
49
|
+
"@tailwindcss/vite": "^4.2.4",
|
|
50
|
+
"@takumi-rs/core": "^1.0.16",
|
|
51
|
+
"@vueuse/core": "^14.2.1",
|
|
52
|
+
"@vueuse/nuxt": "^14.2.1",
|
|
53
|
+
"better-sqlite3": "^12.9.0",
|
|
54
|
+
"defu": "^6.1.7",
|
|
55
|
+
"git-url-parse": "^16.1.0",
|
|
56
|
+
"lodash-es": "^4.18.1",
|
|
57
|
+
"mermaid": "^11.14.0",
|
|
58
|
+
"motion-v": "^2.2.1",
|
|
59
|
+
"nuxt-component-meta": "^0.17.2",
|
|
60
|
+
"nuxt-gtag": "4.1.0",
|
|
61
|
+
"nuxt-llms": "^0.2.0",
|
|
62
|
+
"nuxt-og-image": "^6.4.6",
|
|
63
|
+
"pkg-types": "^2.3.0",
|
|
64
|
+
"reka-ui": "^2.9.6",
|
|
65
|
+
"shiki": "^4.0.2",
|
|
66
|
+
"tailwind-merge": "^3.5.0",
|
|
67
|
+
"tailwind-variants": "^3.2.2",
|
|
68
|
+
"tailwindcss": "^4.2.4",
|
|
69
|
+
"tw-animate-css": "^1.4.0",
|
|
70
|
+
"ufo": "^1.6.3",
|
|
71
|
+
"vaul-vue": "^0.4.1",
|
|
72
|
+
"vue-sonner": "^2.0.9",
|
|
73
|
+
"yaml": "^2.8.3",
|
|
74
|
+
"zod": "^4.3.6"
|
|
75
|
+
},
|
|
76
|
+
"devDependencies": {
|
|
77
|
+
"@types/lodash-es": "^4.17.12",
|
|
78
|
+
"nuxt": "^4.4.2",
|
|
79
|
+
"typescript": "^6.0.3",
|
|
80
|
+
"vue": "latest",
|
|
81
|
+
"vue-router": "^5.0.6"
|
|
82
|
+
},
|
|
83
|
+
"overrides": {
|
|
84
|
+
"@takumi-rs/core": "^1.0.16"
|
|
85
|
+
},
|
|
86
|
+
"packageManager": "bun@1.3.13",
|
|
87
|
+
"trustedDependencies": [
|
|
88
|
+
"@morev/vue-transitions",
|
|
89
|
+
"@parcel/watcher",
|
|
90
|
+
"esbuild",
|
|
91
|
+
"sharp",
|
|
92
|
+
"unrs-resolver",
|
|
93
|
+
"vue-demi"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { Collections } from "@nuxt/content";
|
|
2
|
+
import { queryCollection } from "@nuxt/content/server";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
import { inferSiteURL } from "../../../utils/meta";
|
|
6
|
+
|
|
7
|
+
export default defineMcpTool({
|
|
8
|
+
description: `Retrieves the full content and details of a specific documentation page.
|
|
9
|
+
|
|
10
|
+
WHEN TO USE: Use this tool when you know the EXACT path to a documentation page. Common use cases:
|
|
11
|
+
- User asks for a specific page: "Show me the getting started guide" → /getting-started/installation
|
|
12
|
+
- User asks about a known topic with a dedicated page
|
|
13
|
+
- You found a relevant path from list-pages and want the full content
|
|
14
|
+
- User references a specific section or guide they want to read
|
|
15
|
+
|
|
16
|
+
WHEN NOT TO USE: If you don't know the exact path and need to search/explore, use list-pages first.
|
|
17
|
+
|
|
18
|
+
WORKFLOW: This tool returns the complete page content including title, description, and full markdown. Use this when you need to provide detailed answers or code examples from specific documentation pages.
|
|
19
|
+
`,
|
|
20
|
+
annotations: {
|
|
21
|
+
readOnlyHint: true,
|
|
22
|
+
destructiveHint: false,
|
|
23
|
+
idempotentHint: true,
|
|
24
|
+
openWorldHint: false,
|
|
25
|
+
},
|
|
26
|
+
inputSchema: {
|
|
27
|
+
path: z
|
|
28
|
+
.string()
|
|
29
|
+
.describe(
|
|
30
|
+
"The page path from list-pages or provided by the user (e.g., /getting-started/installation)"
|
|
31
|
+
),
|
|
32
|
+
},
|
|
33
|
+
inputExamples: [
|
|
34
|
+
{ path: "/getting-started/installation" },
|
|
35
|
+
{ path: "/getting-started/introduction" },
|
|
36
|
+
],
|
|
37
|
+
cache: "1h",
|
|
38
|
+
handler: async ({ path }) => {
|
|
39
|
+
const event = useEvent();
|
|
40
|
+
const siteUrl = getRequestURL(event).origin || inferSiteURL();
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const page = await queryCollection(event, "docs" as keyof Collections)
|
|
44
|
+
.where("path", "=", path)
|
|
45
|
+
.select("title", "path", "description")
|
|
46
|
+
.first();
|
|
47
|
+
|
|
48
|
+
if (!page) {
|
|
49
|
+
throw createError({ statusCode: 404, message: "Page not found" });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const content = await event.$fetch<string>(`/raw${path}.md`);
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
title: page.title,
|
|
56
|
+
path: page.path,
|
|
57
|
+
description: page.description,
|
|
58
|
+
content,
|
|
59
|
+
url: `${siteUrl}${page.path}`,
|
|
60
|
+
};
|
|
61
|
+
} catch (error) {
|
|
62
|
+
if ((error as { statusCode?: number }).statusCode === 404) throw error;
|
|
63
|
+
throw createError({ statusCode: 500, message: "Failed to get page" });
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Collections } from "@nuxt/content";
|
|
2
|
+
import { queryCollection } from "@nuxt/content/server";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
import { inferSiteURL } from "../../../utils/meta";
|
|
6
|
+
|
|
7
|
+
export default defineMcpTool({
|
|
8
|
+
description: `Lists all available documentation pages with their categories and basic information.
|
|
9
|
+
|
|
10
|
+
WHEN TO USE: Use this tool when you need to EXPLORE or SEARCH for documentation about a topic but don't know the exact page path. Common scenarios:
|
|
11
|
+
- "Find documentation about markdown features" - explore available guides
|
|
12
|
+
- "Show me all getting started guides" - browse introductory content
|
|
13
|
+
- "Search for advanced configuration options" - find specific topics
|
|
14
|
+
- User asks general questions without specifying exact pages
|
|
15
|
+
- You need to understand the overall documentation structure
|
|
16
|
+
|
|
17
|
+
WHEN NOT TO USE: If you already know the specific page path (e.g., "/getting-started/installation"), use get-page directly instead.
|
|
18
|
+
|
|
19
|
+
WORKFLOW: This tool returns page titles, descriptions, and paths. After finding relevant pages, use get-page to retrieve the full content of specific pages that match the user's needs.
|
|
20
|
+
|
|
21
|
+
OUTPUT: Returns a structured list with:
|
|
22
|
+
- title: Human-readable page name
|
|
23
|
+
- path: Exact path for use with get-page
|
|
24
|
+
- description: Brief summary of page content
|
|
25
|
+
- url: Full URL for reference`,
|
|
26
|
+
annotations: {
|
|
27
|
+
readOnlyHint: true,
|
|
28
|
+
destructiveHint: false,
|
|
29
|
+
idempotentHint: true,
|
|
30
|
+
openWorldHint: false,
|
|
31
|
+
},
|
|
32
|
+
inputSchema: {
|
|
33
|
+
section: z
|
|
34
|
+
.string()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Optional path prefix to filter pages by section, such as '/getting-started'"),
|
|
37
|
+
},
|
|
38
|
+
inputExamples: [{ section: "/getting-started" }, {}],
|
|
39
|
+
cache: "1h",
|
|
40
|
+
handler: async ({ section }) => {
|
|
41
|
+
const event = useEvent();
|
|
42
|
+
const siteUrl = getRequestURL(event).origin || inferSiteURL();
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const pages = await queryCollection(event, "docs" as keyof Collections)
|
|
46
|
+
.select("title", "path", "description")
|
|
47
|
+
.all();
|
|
48
|
+
|
|
49
|
+
return pages
|
|
50
|
+
.filter((page) => !section || page.path.startsWith(section))
|
|
51
|
+
.map((page) => ({
|
|
52
|
+
title: page.title,
|
|
53
|
+
path: page.path,
|
|
54
|
+
description: page.description,
|
|
55
|
+
url: `${siteUrl}${page.path}`,
|
|
56
|
+
}));
|
|
57
|
+
} catch {
|
|
58
|
+
throw createError({ statusCode: 500, message: "Failed to list pages" });
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
});
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { queryCollection } from "@nuxt/content/server";
|
|
2
|
+
|
|
3
|
+
import { getCollectionsToQuery } from "../utils/content";
|
|
4
|
+
|
|
5
|
+
interface SitemapUrl {
|
|
6
|
+
loc: string;
|
|
7
|
+
lastmod?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default defineEventHandler(async (event) => {
|
|
11
|
+
const config = useRuntimeConfig(event);
|
|
12
|
+
const siteUrl = (config.public.siteUrl as string | undefined) || "";
|
|
13
|
+
|
|
14
|
+
const collections = getCollectionsToQuery();
|
|
15
|
+
const urls: SitemapUrl[] = [];
|
|
16
|
+
|
|
17
|
+
for (const collection of collections) {
|
|
18
|
+
try {
|
|
19
|
+
const pages = await (
|
|
20
|
+
queryCollection as unknown as (
|
|
21
|
+
event: unknown,
|
|
22
|
+
collection: string
|
|
23
|
+
) => { all: () => Promise<Array<Record<string, unknown> & { path?: string }>> }
|
|
24
|
+
)(event, collection).all();
|
|
25
|
+
|
|
26
|
+
for (const page of pages) {
|
|
27
|
+
const pagePath = page.path || "/";
|
|
28
|
+
|
|
29
|
+
if (page.sitemap === false) continue;
|
|
30
|
+
if (pagePath.endsWith(".navigation") || pagePath.includes("/.navigation")) continue;
|
|
31
|
+
|
|
32
|
+
const entry: SitemapUrl = { loc: pagePath };
|
|
33
|
+
|
|
34
|
+
if (page.modifiedAt && typeof page.modifiedAt === "string") {
|
|
35
|
+
entry.lastmod = (page.modifiedAt as string).split("T")[0];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
urls.push(entry);
|
|
39
|
+
}
|
|
40
|
+
} catch {
|
|
41
|
+
// Collection may not exist in this app — skip
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
setResponseHeader(event, "content-type", "application/xml");
|
|
46
|
+
return generateSitemap(urls, siteUrl);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
function generateSitemap(urls: SitemapUrl[], siteUrl: string): string {
|
|
50
|
+
const urlEntries = urls
|
|
51
|
+
.map((url) => {
|
|
52
|
+
const loc = siteUrl ? `${siteUrl}${url.loc}` : url.loc;
|
|
53
|
+
let entry = ` <url>\n <loc>${escapeXml(loc)}</loc>`;
|
|
54
|
+
if (url.lastmod) entry += `\n <lastmod>${escapeXml(url.lastmod)}</lastmod>`;
|
|
55
|
+
entry += `\n </url>`;
|
|
56
|
+
return entry;
|
|
57
|
+
})
|
|
58
|
+
.join("\n");
|
|
59
|
+
|
|
60
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
61
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
62
|
+
${urlEntries}
|
|
63
|
+
</urlset>`;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function escapeXml(str: string): string {
|
|
67
|
+
return str
|
|
68
|
+
.replace(/&/g, "&")
|
|
69
|
+
.replace(/</g, "<")
|
|
70
|
+
.replace(/>/g, ">")
|
|
71
|
+
.replace(/"/g, """)
|
|
72
|
+
.replace(/'/g, "'");
|
|
73
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**@type {import('tailwindcss').Config} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
theme: {
|
|
4
|
+
extend: {
|
|
5
|
+
typography: () => ({
|
|
6
|
+
DEFAULT: {
|
|
7
|
+
css: {
|
|
8
|
+
"--tw-prose-body": "var(--color-foreground)",
|
|
9
|
+
"--tw-prose-headings": "var(--color-foreground)",
|
|
10
|
+
"--tw-prose-lead": "var(--color-muted-foreground)",
|
|
11
|
+
"--tw-prose-links": "var(--color-foreground)",
|
|
12
|
+
"--tw-prose-bold": "var(--color-foreground)",
|
|
13
|
+
"--tw-prose-counters": "var(--color-muted-foreground)",
|
|
14
|
+
"--tw-prose-bullets": "--alpha(var(--color-primary) / 50%)",
|
|
15
|
+
"--tw-prose-hr": "var(--color-border)",
|
|
16
|
+
"--tw-prose-quotes": "var(--color-foreground)",
|
|
17
|
+
"--tw-prose-quote-borders": "var(--color-border)",
|
|
18
|
+
"--tw-prose-captions": "var(--color-muted-foreground)",
|
|
19
|
+
"--tw-prose-kbd": "var(--color-foreground)",
|
|
20
|
+
"--tw-prose-kbd-shadows": "var(--color-foreground)",
|
|
21
|
+
"--tw-prose-code": "var(--color-foreground)",
|
|
22
|
+
"--tw-prose-pre-code": "var(--color-background)",
|
|
23
|
+
"--tw-prose-pre-bg": "--alpha(var(--color-background) / 60%)",
|
|
24
|
+
"--tw-prose-th-borders": "var(--color-border)",
|
|
25
|
+
"--tw-prose-td-borders": "var(--color-border)",
|
|
26
|
+
"--tw-prose-invert-body": "var(--color-foreground)",
|
|
27
|
+
"--tw-prose-invert-headings": "var(--color-foreground)",
|
|
28
|
+
"--tw-prose-invert-lead": "var(--color-muted-foreground)",
|
|
29
|
+
"--tw-prose-invert-links": "var(--color-foreground)",
|
|
30
|
+
"--tw-prose-invert-bold": "var(--color-foreground)",
|
|
31
|
+
"--tw-prose-invert-counters": "var(--color-muted-foreground)",
|
|
32
|
+
"--tw-prose-invert-bullets": "--alpha(var(--color-primary) / 50%)",
|
|
33
|
+
"--tw-prose-invert-hr": "var(--color-border)",
|
|
34
|
+
"--tw-prose-invert-quotes": "var(--color-foreground)",
|
|
35
|
+
"--tw-prose-invert-quote-borders": "var(--color-border)",
|
|
36
|
+
"--tw-prose-invert-captions": "var(--color-muted-foreground)",
|
|
37
|
+
"--tw-prose-invert-kbd": "var(--color-foreground)",
|
|
38
|
+
"--tw-prose-invert-kbd-shadows": "var(--color-foreground)",
|
|
39
|
+
"--tw-prose-invert-code": "var(--color-foreground)",
|
|
40
|
+
"--tw-prose-invert-pre-code": "var(--color-foreground)",
|
|
41
|
+
"--tw-prose-invert-pre-bg": "--alpha(var(--color-background) / 50%)",
|
|
42
|
+
"--tw-prose-invert-th-borders": "var(--color-border)",
|
|
43
|
+
"--tw-prose-invert-td-borders": "var(--color-border)",
|
|
44
|
+
"code::before": {
|
|
45
|
+
content: "",
|
|
46
|
+
},
|
|
47
|
+
"code::after": {
|
|
48
|
+
content: "",
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
}),
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
};
|