@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.
Files changed (268) hide show
  1. package/app/app.config.ts +239 -0
  2. package/app/app.vue +19 -0
  3. package/app/assets/css/tailwind.css +335 -0
  4. package/app/assets/css/theme.css +1171 -0
  5. package/app/components/OgImage/Docs.takumi.vue +69 -0
  6. package/app/components/OgImage/Landing.takumi.vue +64 -0
  7. package/app/components/OgImage/Site.takumi.vue +32 -0
  8. package/app/components/Ui/Avatar/Avatar.vue +75 -0
  9. package/app/components/Ui/Avatar/Badge.vue +34 -0
  10. package/app/components/Ui/Avatar/Fallback.vue +30 -0
  11. package/app/components/Ui/Avatar/Group.vue +29 -0
  12. package/app/components/Ui/Avatar/GroupCount.vue +29 -0
  13. package/app/components/Ui/Avatar/Image.vue +29 -0
  14. package/app/components/Ui/Badge.vue +86 -0
  15. package/app/components/Ui/BadgeGroup.vue +314 -0
  16. package/app/components/Ui/BgPattern/Grid.vue +137 -0
  17. package/app/components/Ui/BorderBeam.vue +97 -0
  18. package/app/components/Ui/Breadcrumbs.vue +103 -0
  19. package/app/components/Ui/Button.vue +169 -0
  20. package/app/components/Ui/ButtonGroup/ButtonGroup.vue +54 -0
  21. package/app/components/Ui/ButtonGroup/Separator.vue +38 -0
  22. package/app/components/Ui/ButtonGroup/Text.vue +33 -0
  23. package/app/components/Ui/Card/Action.vue +31 -0
  24. package/app/components/Ui/Card/Card.vue +58 -0
  25. package/app/components/Ui/Card/Content.vue +34 -0
  26. package/app/components/Ui/Card/Description.vue +36 -0
  27. package/app/components/Ui/Card/Footer.vue +31 -0
  28. package/app/components/Ui/Card/Header.vue +31 -0
  29. package/app/components/Ui/Card/Title.vue +37 -0
  30. package/app/components/Ui/Collapsible/Collapsible.vue +16 -0
  31. package/app/components/Ui/Collapsible/Content.vue +27 -0
  32. package/app/components/Ui/Collapsible/Trigger.vue +13 -0
  33. package/app/components/Ui/Command/Command.vue +115 -0
  34. package/app/components/Ui/Command/Dialog.vue +65 -0
  35. package/app/components/Ui/Command/Empty.vue +32 -0
  36. package/app/components/Ui/Command/Footer.vue +40 -0
  37. package/app/components/Ui/Command/Group.vue +58 -0
  38. package/app/components/Ui/Command/Input.vue +57 -0
  39. package/app/components/Ui/Command/Item.vue +102 -0
  40. package/app/components/Ui/Command/List.vue +33 -0
  41. package/app/components/Ui/Command/Separator.vue +30 -0
  42. package/app/components/Ui/Command/Shortcut.vue +28 -0
  43. package/app/components/Ui/Container.vue +46 -0
  44. package/app/components/Ui/ContextMenu/Arrow.vue +43 -0
  45. package/app/components/Ui/ContextMenu/CheckboxItem.vue +42 -0
  46. package/app/components/Ui/ContextMenu/Content.vue +53 -0
  47. package/app/components/Ui/ContextMenu/ContextMenu.vue +14 -0
  48. package/app/components/Ui/ContextMenu/Group.vue +12 -0
  49. package/app/components/Ui/ContextMenu/Item.vue +65 -0
  50. package/app/components/Ui/ContextMenu/ItemIndicator.vue +30 -0
  51. package/app/components/Ui/ContextMenu/Label.vue +35 -0
  52. package/app/components/Ui/ContextMenu/Portal.vue +12 -0
  53. package/app/components/Ui/ContextMenu/RadioGroup.vue +16 -0
  54. package/app/components/Ui/ContextMenu/RadioItem.vue +40 -0
  55. package/app/components/Ui/ContextMenu/Separator.vue +25 -0
  56. package/app/components/Ui/ContextMenu/Shortcut.vue +30 -0
  57. package/app/components/Ui/ContextMenu/Sub.vue +15 -0
  58. package/app/components/Ui/ContextMenu/SubContent.vue +55 -0
  59. package/app/components/Ui/ContextMenu/SubTrigger.vue +42 -0
  60. package/app/components/Ui/ContextMenu/Trigger.vue +12 -0
  61. package/app/components/Ui/Dialog/Close.vue +12 -0
  62. package/app/components/Ui/Dialog/Content.vue +79 -0
  63. package/app/components/Ui/Dialog/Description.vue +29 -0
  64. package/app/components/Ui/Dialog/Dialog.vue +14 -0
  65. package/app/components/Ui/Dialog/Footer.vue +32 -0
  66. package/app/components/Ui/Dialog/Header.vue +32 -0
  67. package/app/components/Ui/Dialog/Overlay.vue +25 -0
  68. package/app/components/Ui/Dialog/Portal.vue +12 -0
  69. package/app/components/Ui/Dialog/Title.vue +29 -0
  70. package/app/components/Ui/Dialog/Trigger.vue +12 -0
  71. package/app/components/Ui/Divider.vue +102 -0
  72. package/app/components/Ui/Drawer/Close.vue +12 -0
  73. package/app/components/Ui/Drawer/Content.vue +67 -0
  74. package/app/components/Ui/Drawer/Description.vue +33 -0
  75. package/app/components/Ui/Drawer/Drawer.vue +17 -0
  76. package/app/components/Ui/Drawer/Footer.vue +35 -0
  77. package/app/components/Ui/Drawer/Header.vue +34 -0
  78. package/app/components/Ui/Drawer/Overlay.vue +20 -0
  79. package/app/components/Ui/Drawer/Portal.vue +12 -0
  80. package/app/components/Ui/Drawer/Title.vue +35 -0
  81. package/app/components/Ui/Drawer/Trigger.vue +12 -0
  82. package/app/components/Ui/DropdownMenu/Arrow.vue +43 -0
  83. package/app/components/Ui/DropdownMenu/CheckboxItem.vue +41 -0
  84. package/app/components/Ui/DropdownMenu/Content.vue +56 -0
  85. package/app/components/Ui/DropdownMenu/DropdownMenu.vue +15 -0
  86. package/app/components/Ui/DropdownMenu/Group.vue +12 -0
  87. package/app/components/Ui/DropdownMenu/Item.vue +64 -0
  88. package/app/components/Ui/DropdownMenu/ItemIndicator.vue +32 -0
  89. package/app/components/Ui/DropdownMenu/Label.vue +34 -0
  90. package/app/components/Ui/DropdownMenu/Portal.vue +12 -0
  91. package/app/components/Ui/DropdownMenu/RadioGroup.vue +16 -0
  92. package/app/components/Ui/DropdownMenu/RadioItem.vue +40 -0
  93. package/app/components/Ui/DropdownMenu/Separator.vue +25 -0
  94. package/app/components/Ui/DropdownMenu/Shortcut.vue +44 -0
  95. package/app/components/Ui/DropdownMenu/Sub.vue +14 -0
  96. package/app/components/Ui/DropdownMenu/SubContent.vue +56 -0
  97. package/app/components/Ui/DropdownMenu/SubTrigger.vue +47 -0
  98. package/app/components/Ui/DropdownMenu/Trigger.vue +12 -0
  99. package/app/components/Ui/FancyIcon.vue +243 -0
  100. package/app/components/Ui/GradientDivider.vue +26 -0
  101. package/app/components/Ui/IframeLazy.vue +97 -0
  102. package/app/components/Ui/Input.vue +97 -0
  103. package/app/components/Ui/InputGroup/Addon.vue +66 -0
  104. package/app/components/Ui/InputGroup/Button.vue +50 -0
  105. package/app/components/Ui/InputGroup/Input.vue +25 -0
  106. package/app/components/Ui/InputGroup/InputGroup.vue +44 -0
  107. package/app/components/Ui/InputGroup/Text.vue +33 -0
  108. package/app/components/Ui/InputGroup/Textarea.vue +25 -0
  109. package/app/components/Ui/Kbd/Group.vue +32 -0
  110. package/app/components/Ui/Kbd/Kbd.vue +62 -0
  111. package/app/components/Ui/Label.vue +40 -0
  112. package/app/components/Ui/Popover/Anchor.vue +13 -0
  113. package/app/components/Ui/Popover/Arrow.vue +42 -0
  114. package/app/components/Ui/Popover/Close.vue +13 -0
  115. package/app/components/Ui/Popover/Content.vue +55 -0
  116. package/app/components/Ui/Popover/Popover.vue +15 -0
  117. package/app/components/Ui/Popover/Portal.vue +13 -0
  118. package/app/components/Ui/Popover/Trigger.vue +12 -0
  119. package/app/components/Ui/Popover/X.vue +38 -0
  120. package/app/components/Ui/ScrollArea/Corner.vue +12 -0
  121. package/app/components/Ui/ScrollArea/ScrollArea.vue +38 -0
  122. package/app/components/Ui/ScrollArea/Scrollbar.vue +39 -0
  123. package/app/components/Ui/ScrollArea/Thumb.vue +39 -0
  124. package/app/components/Ui/ScrollArea/Viewport.vue +27 -0
  125. package/app/components/Ui/Scrollspy.vue +61 -0
  126. package/app/components/Ui/Separator.vue +40 -0
  127. package/app/components/Ui/Skeleton.vue +39 -0
  128. package/app/components/Ui/Sonner.vue +25 -0
  129. package/app/components/Ui/Tabs/Content.vue +27 -0
  130. package/app/components/Ui/Tabs/Indicator.vue +37 -0
  131. package/app/components/Ui/Tabs/List.vue +37 -0
  132. package/app/components/Ui/Tabs/Tabs.vue +25 -0
  133. package/app/components/Ui/Tabs/Trigger.vue +41 -0
  134. package/app/components/Ui/Textarea.vue +81 -0
  135. package/app/components/Ui/Tooltip/Arrow.vue +30 -0
  136. package/app/components/Ui/Tooltip/Content.vue +50 -0
  137. package/app/components/Ui/Tooltip/Portal.vue +12 -0
  138. package/app/components/Ui/Tooltip/Provider.vue +14 -0
  139. package/app/components/Ui/Tooltip/Tooltip.vue +25 -0
  140. package/app/components/Ui/Tooltip/Trigger.vue +12 -0
  141. package/app/components/Ui/Tree/Item.vue +15 -0
  142. package/app/components/Ui/Tree/Tree.vue +15 -0
  143. package/app/components/Ui/Tree/Virtualizer.vue +13 -0
  144. package/app/components/component-api/ComponentApiSection.vue +135 -0
  145. package/app/components/content/docs/Callout/DocsCallout.vue +99 -0
  146. package/app/components/content/prose/ProseA.global.vue +31 -0
  147. package/app/components/content/prose/ProseBlockquote.global.vue +28 -0
  148. package/app/components/content/prose/ProseCallout.global.vue +306 -0
  149. package/app/components/content/prose/ProseCard.global.vue +100 -0
  150. package/app/components/content/prose/ProseCodeCollapse.global.vue +125 -0
  151. package/app/components/content/prose/ProseCodeCopy.global.vue +67 -0
  152. package/app/components/content/prose/ProseCodeGroup.global.vue +104 -0
  153. package/app/components/content/prose/ProseCodeTree.global.vue +277 -0
  154. package/app/components/content/prose/ProseCollapsible.global.vue +64 -0
  155. package/app/components/content/prose/ProseColorModeImage.global.vue +58 -0
  156. package/app/components/content/prose/ProseComponentApi.global.vue +104 -0
  157. package/app/components/content/prose/ProseComponentEvents.global.vue +27 -0
  158. package/app/components/content/prose/ProseComponentExposed.global.vue +27 -0
  159. package/app/components/content/prose/ProseComponentProps.global.vue +27 -0
  160. package/app/components/content/prose/ProseComponentSlots.global.vue +27 -0
  161. package/app/components/content/prose/ProseEm.global.vue +5 -0
  162. package/app/components/content/prose/ProseField.global.vue +118 -0
  163. package/app/components/content/prose/ProseFieldGroup.global.vue +62 -0
  164. package/app/components/content/prose/ProseH1.global.vue +58 -0
  165. package/app/components/content/prose/ProseH2.global.vue +58 -0
  166. package/app/components/content/prose/ProseH3.global.vue +58 -0
  167. package/app/components/content/prose/ProseH4.global.vue +58 -0
  168. package/app/components/content/prose/ProseH5.global.vue +47 -0
  169. package/app/components/content/prose/ProseH6.global.vue +47 -0
  170. package/app/components/content/prose/ProseHr.global.vue +33 -0
  171. package/app/components/content/prose/ProseIconList.global.vue +113 -0
  172. package/app/components/content/prose/ProseImg.global.vue +119 -0
  173. package/app/components/content/prose/ProseLead.global.vue +28 -0
  174. package/app/components/content/prose/ProseLi.global.vue +25 -0
  175. package/app/components/content/prose/ProseMermaid.global.vue +127 -0
  176. package/app/components/content/prose/ProseOl.global.vue +25 -0
  177. package/app/components/content/prose/ProseP.global.vue +25 -0
  178. package/app/components/content/prose/ProsePmInstall.global.vue +60 -0
  179. package/app/components/content/prose/ProsePmRun.global.vue +51 -0
  180. package/app/components/content/prose/ProsePmX.global.vue +56 -0
  181. package/app/components/content/prose/ProsePre.global.vue +181 -0
  182. package/app/components/content/prose/ProseShowCase.global.vue +56 -0
  183. package/app/components/content/prose/ProseSmartIcon.global.vue +54 -0
  184. package/app/components/content/prose/ProseStep.global.vue +22 -0
  185. package/app/components/content/prose/ProseSteps.global.vue +22 -0
  186. package/app/components/content/prose/ProseStrong.global.vue +34 -0
  187. package/app/components/content/prose/ProseTable.global.vue +34 -0
  188. package/app/components/content/prose/ProseTabs.global.vue +104 -0
  189. package/app/components/content/prose/ProseTabsInner.global.vue +274 -0
  190. package/app/components/content/prose/ProseTbody.global.vue +5 -0
  191. package/app/components/content/prose/ProseTd.global.vue +25 -0
  192. package/app/components/content/prose/ProseTh.global.vue +25 -0
  193. package/app/components/content/prose/ProseThead.global.vue +9 -0
  194. package/app/components/content/prose/ProseTr.global.vue +35 -0
  195. package/app/components/content/prose/ProseUl.global.vue +25 -0
  196. package/app/components/docs/DocsExtraStuff.vue +39 -0
  197. package/app/components/docs/DocsGithubLink.vue +11 -0
  198. package/app/components/docs/DocsHeader.vue +3 -0
  199. package/app/components/docs/DocsLogo.vue +74 -0
  200. package/app/components/docs/DocsMobileBar.vue +26 -0
  201. package/app/components/docs/DocsMobileNav.vue +49 -0
  202. package/app/components/docs/DocsNav.vue +161 -0
  203. package/app/components/docs/DocsPageTransition.vue +32 -0
  204. package/app/components/docs/DocsSearch.vue +220 -0
  205. package/app/components/docs/DocsSearchButton.vue +20 -0
  206. package/app/components/docs/DocsThemeCustomizer.vue +229 -0
  207. package/app/components/docs/DocsThemeToggler.vue +98 -0
  208. package/app/components/docs/DocsTocRail.vue +162 -0
  209. package/app/components/docs/DocsToclink.vue +52 -0
  210. package/app/components/docs/DocsZigZagRail.vue +70 -0
  211. package/app/components/landing/Hero.vue +222 -0
  212. package/app/components/page/PageFooter.vue +49 -0
  213. package/app/components/page/PageHeader.vue +68 -0
  214. package/app/components/page/PageHeaderLinks.vue +138 -0
  215. package/app/components/page/PageMobileToc.vue +162 -0
  216. package/app/components/page/PageToc.vue +33 -0
  217. package/app/composables/useDefaultSlotItems.ts +90 -0
  218. package/app/composables/useDocPage.ts +66 -0
  219. package/app/composables/useDocSearch.ts +23 -0
  220. package/app/composables/useDocd.ts +107 -0
  221. package/app/composables/useLogoAssets.ts +319 -0
  222. package/app/composables/usePm.ts +73 -0
  223. package/app/composables/useProseComponentMeta.ts +30 -0
  224. package/app/composables/useScrollspy.ts +327 -0
  225. package/app/composables/useSeo.ts +240 -0
  226. package/app/composables/useUIConfig.ts +36 -0
  227. package/app/layouts/default.vue +5 -0
  228. package/app/layouts/docs.vue +64 -0
  229. package/app/middleware/colorMode.global.ts +8 -0
  230. package/app/middleware/doc-page-layout.ts +11 -0
  231. package/app/middleware/landing-page-layout.ts +11 -0
  232. package/app/pages/[...slug].vue +63 -0
  233. package/app/plugins/mermaid.client.ts +35 -0
  234. package/app/plugins/navigation-direction.client.ts +15 -0
  235. package/app/plugins/theme-restore.client.ts +7 -0
  236. package/app/templates/landing.vue +40 -0
  237. package/app/transitions/presets.ts +71 -0
  238. package/app/types/prose-component-meta.d.ts +4 -0
  239. package/app/utils/og.ts +26 -0
  240. package/app/utils/prerender.ts +9 -0
  241. package/app/utils/translucent.ts +56 -0
  242. package/app/utils/tw-helper.ts +4 -0
  243. package/content.config.ts +81 -0
  244. package/index.d.ts +25 -0
  245. package/modules/config.ts +89 -0
  246. package/modules/custom-icons.ts +17 -0
  247. package/modules/markdown-rewrite.ts +96 -0
  248. package/modules/prose-component-meta.ts +150 -0
  249. package/modules/routing.ts +22 -0
  250. package/modules/skills/index.ts +167 -0
  251. package/modules/skills/runtime/server/routes/skills-files.ts +49 -0
  252. package/modules/skills/runtime/server/routes/skills-index.ts +8 -0
  253. package/nuxt.config.ts +96 -0
  254. package/nuxt.schema.ts +288 -0
  255. package/package.json +95 -0
  256. package/server/mcp/tools/get-page.ts +66 -0
  257. package/server/mcp/tools/list-pages.ts +61 -0
  258. package/server/routes/sitemap.xml.ts +73 -0
  259. package/server/utils/content.ts +3 -0
  260. package/tailwind.config.cjs +55 -0
  261. package/utils/component-api-content.ts +467 -0
  262. package/utils/component-api-discovery.ts +165 -0
  263. package/utils/component-api-schema.ts +28 -0
  264. package/utils/component-api.ts +243 -0
  265. package/utils/generate-prose-component-meta.ts +303 -0
  266. package/utils/git.ts +123 -0
  267. package/utils/meta.ts +40 -0
  268. package/utils/pages.ts +21 -0
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <ComponentApiSection kind="exposed" :items="resolvedItems" :layout="layout" />
3
+ </template>
4
+
5
+ <script lang="ts">
6
+ import type {
7
+ ProseComponentApiLayout,
8
+ ProseComponentMetaEntry,
9
+ ProseComponentMetaExposed,
10
+ } from "../../../../utils/generate-prose-component-meta";
11
+
12
+ export type ProseComponentExposedProps = {
13
+ path?: string;
14
+ meta?: ProseComponentMetaEntry | null;
15
+ items?: ProseComponentMetaExposed[];
16
+ layout?: ProseComponentApiLayout;
17
+ };
18
+ </script>
19
+
20
+ <script lang="ts" setup>
21
+ const props = withDefaults(defineProps<ProseComponentExposedProps>(), {
22
+ layout: "field",
23
+ });
24
+
25
+ const resolvedMeta = computed(() => props.meta ?? resolveProseComponentMeta(props.path));
26
+ const resolvedItems = computed(() => props.items ?? resolvedMeta.value?.exposed ?? []);
27
+ </script>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <ComponentApiSection kind="props" :items="resolvedItems" :layout="layout" />
3
+ </template>
4
+
5
+ <script lang="ts">
6
+ import type {
7
+ ProseComponentApiLayout,
8
+ ProseComponentMetaEntry,
9
+ ProseComponentMetaProp,
10
+ } from "../../../../utils/generate-prose-component-meta";
11
+
12
+ export type ProseComponentPropsProps = {
13
+ path?: string;
14
+ meta?: ProseComponentMetaEntry | null;
15
+ items?: ProseComponentMetaProp[];
16
+ layout?: ProseComponentApiLayout;
17
+ };
18
+ </script>
19
+
20
+ <script lang="ts" setup>
21
+ const props = withDefaults(defineProps<ProseComponentPropsProps>(), {
22
+ layout: "field",
23
+ });
24
+
25
+ const resolvedMeta = computed(() => props.meta ?? resolveProseComponentMeta(props.path));
26
+ const resolvedItems = computed(() => props.items ?? resolvedMeta.value?.props ?? []);
27
+ </script>
@@ -0,0 +1,27 @@
1
+ <template>
2
+ <ComponentApiSection kind="slots" :items="resolvedItems" :layout="layout" />
3
+ </template>
4
+
5
+ <script lang="ts">
6
+ import type {
7
+ ProseComponentApiLayout,
8
+ ProseComponentMetaEntry,
9
+ ProseComponentMetaSlot,
10
+ } from "../../../../utils/generate-prose-component-meta";
11
+
12
+ export type ProseComponentSlotsProps = {
13
+ path?: string;
14
+ meta?: ProseComponentMetaEntry | null;
15
+ items?: ProseComponentMetaSlot[];
16
+ layout?: ProseComponentApiLayout;
17
+ };
18
+ </script>
19
+
20
+ <script lang="ts" setup>
21
+ const props = withDefaults(defineProps<ProseComponentSlotsProps>(), {
22
+ layout: "field",
23
+ });
24
+
25
+ const resolvedMeta = computed(() => props.meta ?? resolveProseComponentMeta(props.path));
26
+ const resolvedItems = computed(() => props.items ?? resolvedMeta.value?.slots ?? []);
27
+ </script>
@@ -0,0 +1,5 @@
1
+ <template>
2
+ <em data-slot="prose-em">
3
+ <slot />
4
+ </em>
5
+ </template>
@@ -0,0 +1,118 @@
1
+ <template>
2
+ <div :class="styles.base()">
3
+ <!-- Name Section -->
4
+ <div v-if="$slots.name || name" :class="styles.name()">
5
+ <slot mdc-unwrap="p" name="name">
6
+ <span v-if="name" :class="styles.nameText()">{{ name }}</span>
7
+ </slot>
8
+ <!-- Tooltip Section -->
9
+ <slot mdc-unwrap="p" name="tip">
10
+ <UiTooltip v-if="tip">
11
+ <UiTooltipTrigger>
12
+ <prose-smart-icon v-if="tipIcon" class="text-muted-foreground" :name="tipIcon" />
13
+ </UiTooltipTrigger>
14
+ <UiTooltipContent>
15
+ <span>{{ tip }}</span>
16
+ <UiTooltipArrow />
17
+ </UiTooltipContent>
18
+ </UiTooltip>
19
+ </slot>
20
+ <code v-if="type" :class="styles.typeBadge()">{{ type }}</code>
21
+ <code v-if="required" :class="styles.requiredBadge()">required</code>
22
+ </div>
23
+
24
+ <!-- Default Value Section -->
25
+ <div v-if="$slots['default-value'] || defaultValue" :class="styles.defaultValue()">
26
+ <span :class="styles.defaultLabel()">Default</span>
27
+ <slot mdc-unwrap="p" name="default-value">
28
+ <code :class="styles.defaultCode()">{{ defaultValue }}</code>
29
+ </slot>
30
+ </div>
31
+ <!-- Description Section -->
32
+ <div v-if="$slots.default || description" :class="styles.description()">
33
+ <slot mdc-unwrap="p">
34
+ {{ description }}
35
+ </slot>
36
+ </div>
37
+ </div>
38
+ </template>
39
+
40
+ <script lang="ts">
41
+ import { tv } from "tailwind-variants";
42
+
43
+ /**
44
+ * Field styles configuration using tailwind-variants
45
+ */
46
+ export const fieldStyles = tv({
47
+ slots: {
48
+ base: "flex flex-col gap-2 py-4",
49
+ name: "flex flex-wrap items-center gap-2",
50
+ nameText: "font-semibold text-foreground",
51
+ typeBadge: "rounded-md px-1.5 py-0.5 text-[11px]",
52
+ requiredBadge:
53
+ "rounded-md border-red-500/50 bg-red-500/10! px-1.5 py-0.5 text-[11px] text-red-500",
54
+ description: "max-w-none text-[15px] text-muted-foreground",
55
+ defaultValue: "flex items-center gap-2 text-sm",
56
+ defaultLabel: "font-medium text-muted-foreground",
57
+ defaultCode:
58
+ "rounded-md bg-muted px-1.5 py-0.5 font-mono text-xs text-[11px] text-foreground",
59
+ },
60
+ });
61
+
62
+ /**
63
+ * Field component props type
64
+ */
65
+ export type ProseFieldProps = {
66
+ /**
67
+ * The name/title of the field
68
+ * @example "variant"
69
+ */
70
+ name?: string;
71
+
72
+ /**
73
+ * Description of what this field does
74
+ * @example "The variant style of the button"
75
+ */
76
+ description?: string;
77
+
78
+ /**
79
+ * The default value for this field
80
+ * @example "default"
81
+ */
82
+ defaultValue?: string | number | boolean | Record<string, any>;
83
+
84
+ /**
85
+ * The type of value this field accepts
86
+ * @example "string | number"
87
+ */
88
+ type?: string;
89
+
90
+ /**
91
+ * A brief tip or note about this field
92
+ *
93
+ * Will be displayed in a tooltip
94
+ */
95
+ tip?: string;
96
+
97
+ /**
98
+ * Icon that will be displayed in the tip tooltip
99
+ * @default 'lucide:circle-question-mark'
100
+ */
101
+ tipIcon?: string;
102
+
103
+ /**
104
+ * Whether this field is required
105
+ * @default false
106
+ */
107
+ required?: boolean;
108
+ };
109
+ </script>
110
+
111
+ <script lang="ts" setup>
112
+ withDefaults(defineProps<ProseFieldProps>(), {
113
+ required: false,
114
+ tipIcon: "lucide:circle-question-mark",
115
+ });
116
+
117
+ const styles = fieldStyles();
118
+ </script>
@@ -0,0 +1,62 @@
1
+ <template>
2
+ <div :class="styles.base({ variant })">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script lang="ts">
8
+ import { tv } from "tailwind-variants";
9
+
10
+ /**
11
+ * Field group styles configuration using tailwind-variants
12
+ */
13
+ export const fieldGroupStyles = tv({
14
+ slots: {
15
+ base: "flex flex-col",
16
+ },
17
+ variants: {
18
+ variant: {
19
+ /**
20
+ * Add dividers between fields
21
+ */
22
+ divided: "[&>*:not(:last-child)]:border-b [&>*:not(:last-child)]:border-border",
23
+ /**
24
+ * Add striped background to alternate fields
25
+ */
26
+ striped: "*:pl-4 [&>*:nth-child(even)]:bg-muted dark:[&>*:nth-child(even)]:bg-muted/50",
27
+ /**
28
+ * Add border around the group
29
+ */
30
+ bordered:
31
+ "overflow-hidden rounded-lg border border-border *:pl-4 [&>*:not(:last-child)]:border-b [&>*:not(:last-child)]:border-border",
32
+ /**
33
+ * A combination of all variants
34
+ */
35
+ all: "overflow-hidden rounded-lg border border-border *:pl-4 [&>*:not(:last-child)]:border-b [&>*:not(:last-child)]:border-border [&>*:nth-child(even)]:bg-muted dark:[&>*:nth-child(even)]:bg-muted/50",
36
+ },
37
+ },
38
+ defaultVariants: {
39
+ variant: "divided",
40
+ },
41
+ });
42
+
43
+ /**
44
+ * Field group component props type
45
+ */
46
+ export type ProseFieldGroupProps = {
47
+ /**
48
+ * The variant style of the field group
49
+ *
50
+ * @default "divided"
51
+ */
52
+ variant?: "divided" | "striped" | "bordered" | "all";
53
+ };
54
+ </script>
55
+
56
+ <script lang="ts" setup>
57
+ withDefaults(defineProps<ProseFieldGroupProps>(), {
58
+ variant: "divided",
59
+ });
60
+
61
+ const styles = fieldGroupStyles();
62
+ </script>
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <h1 :id="id" :class="proseH1Styles({ class: normalizeClass(_class) || undefined })">
3
+ <NuxtLink
4
+ v-if="generate"
5
+ data-slot="h1-link"
6
+ v-bind="linkProps"
7
+ class="relative inline-block"
8
+ :to="`#${id}`"
9
+ >
10
+ <Icon
11
+ name="lucide:link"
12
+ aria-hidden="true"
13
+ class="absolute top-2 -left-6 h-4 w-4 text-muted-foreground opacity-0 transition-opacity duration-150 group-focus-within:opacity-100 group-hover:opacity-100"
14
+ />
15
+ <slot />
16
+ </NuxtLink>
17
+ <slot v-else />
18
+ </h1>
19
+ </template>
20
+
21
+ <script lang="ts">
22
+ import { normalizeClass } from "vue";
23
+ import type { HTMLAttributes } from "vue";
24
+
25
+ import type { NuxtLinkProps } from "#app";
26
+
27
+ export type ProseH1Props = {
28
+ /**
29
+ * Optional ID for anchor links
30
+ */
31
+ id?: string;
32
+ /**
33
+ * Props to pass to NuxtLink when anchor links are enabled
34
+ */
35
+ linkProps?: NuxtLinkProps;
36
+ /**
37
+ * Additional classes for the parent element
38
+ */
39
+ class?: HTMLAttributes["class"];
40
+ };
41
+
42
+ export const proseH1Styles = tv({
43
+ base: "group scroll-m-20 text-4xl font-extrabold tracking-tight text-balance",
44
+ });
45
+ </script>
46
+
47
+ <script setup lang="ts">
48
+ const { id, linkProps, class: _class } = defineProps<ProseH1Props>();
49
+
50
+ // Determine if we should generate anchor links
51
+ const { headings } = useRuntimeConfig().public.mdc;
52
+ const generate = computed(
53
+ () =>
54
+ id &&
55
+ ((typeof headings?.anchorLinks === "boolean" && headings?.anchorLinks === true) ||
56
+ (typeof headings?.anchorLinks === "object" && headings?.anchorLinks?.h1))
57
+ );
58
+ </script>
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <h2 :id="id" :class="proseH2Styles({ class: normalizeClass(_class) || undefined })">
3
+ <NuxtLink
4
+ v-if="generate"
5
+ data-slot="h2-link"
6
+ v-bind="linkProps"
7
+ class="group relative inline-block"
8
+ :to="`#${id}`"
9
+ >
10
+ <Icon
11
+ name="lucide:link"
12
+ aria-hidden="true"
13
+ class="absolute top-2 -left-8 hidden size-5 text-primary opacity-0 transition-opacity duration-150 group-focus-within:opacity-70 group-hover:opacity-70 lg:block"
14
+ />
15
+ <slot />
16
+ </NuxtLink>
17
+ <slot v-else />
18
+ </h2>
19
+ </template>
20
+
21
+ <script lang="ts">
22
+ import { normalizeClass } from "vue";
23
+ import type { HTMLAttributes } from "vue";
24
+
25
+ import type { NuxtLinkProps } from "#app";
26
+
27
+ export type ProseH2Props = {
28
+ /**
29
+ * Optional ID for anchor links
30
+ */
31
+ id?: string;
32
+ /**
33
+ * Props to pass to NuxtLink when anchor links are enabled
34
+ */
35
+ linkProps?: NuxtLinkProps;
36
+ /**
37
+ * Additional classes for the parent element
38
+ */
39
+ class?: HTMLAttributes["class"];
40
+ };
41
+
42
+ export const proseH2Styles = tv({
43
+ base: "mt-10 scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight text-balance transition-colors first:mt-0",
44
+ });
45
+ </script>
46
+
47
+ <script setup lang="ts">
48
+ const { id, linkProps, class: _class } = defineProps<ProseH2Props>();
49
+
50
+ // Determine if we should generate anchor links
51
+ const { headings } = useRuntimeConfig().public.mdc;
52
+ const generate = computed(
53
+ () =>
54
+ id &&
55
+ ((typeof headings?.anchorLinks === "boolean" && headings?.anchorLinks === true) ||
56
+ (typeof headings?.anchorLinks === "object" && headings?.anchorLinks?.h2))
57
+ );
58
+ </script>
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <h3 :id="id" :class="proseH3Styles({ class: normalizeClass(_class) || undefined })">
3
+ <NuxtLink
4
+ v-if="generate"
5
+ data-slot="h3-link"
6
+ v-bind="linkProps"
7
+ class="group relative inline-block"
8
+ :to="`#${id}`"
9
+ >
10
+ <Icon
11
+ name="lucide:link"
12
+ aria-hidden="true"
13
+ class="absolute top-1.5 -left-8 hidden size-5 text-primary opacity-0 transition-opacity duration-150 group-focus-within:opacity-70 group-hover:opacity-70 lg:block"
14
+ />
15
+ <slot />
16
+ </NuxtLink>
17
+ <slot v-else />
18
+ </h3>
19
+ </template>
20
+
21
+ <script lang="ts">
22
+ import { normalizeClass } from "vue";
23
+ import type { HTMLAttributes } from "vue";
24
+
25
+ import type { NuxtLinkProps } from "#app";
26
+
27
+ export type ProseH3Props = {
28
+ /**
29
+ * Optional ID for anchor links
30
+ */
31
+ id?: string;
32
+ /**
33
+ * Props to pass to NuxtLink when anchor links are enabled
34
+ */
35
+ linkProps?: NuxtLinkProps;
36
+ /**
37
+ * Additional classes for the parent element
38
+ */
39
+ class?: HTMLAttributes["class"];
40
+ };
41
+
42
+ export const proseH3Styles = tv({
43
+ base: "mt-8 scroll-m-20 text-2xl font-semibold tracking-tight text-balance not-first:mt-8",
44
+ });
45
+ </script>
46
+
47
+ <script setup lang="ts">
48
+ const { id, linkProps, class: _class } = defineProps<ProseH3Props>();
49
+
50
+ // Determine if we should generate anchor links
51
+ const { headings } = useRuntimeConfig().public.mdc;
52
+ const generate = computed(
53
+ () =>
54
+ id &&
55
+ ((typeof headings?.anchorLinks === "boolean" && headings?.anchorLinks === true) ||
56
+ (typeof headings?.anchorLinks === "object" && headings?.anchorLinks?.h3))
57
+ );
58
+ </script>
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <h4 :id="id" :class="proseH4Styles({ class: normalizeClass(_class) || undefined })">
3
+ <NuxtLink
4
+ v-if="generate"
5
+ data-slot="h4-link"
6
+ v-bind="linkProps"
7
+ class="group relative inline-block"
8
+ :to="`#${id}`"
9
+ >
10
+ <Icon
11
+ name="lucide:link"
12
+ aria-hidden="true"
13
+ class="absolute top-1.5 -left-6 hidden size-3.5 text-primary opacity-0 transition-opacity duration-150 group-focus-within:opacity-70 group-hover:opacity-70 lg:block"
14
+ />
15
+ <slot />
16
+ </NuxtLink>
17
+ <slot v-else />
18
+ </h4>
19
+ </template>
20
+
21
+ <script lang="ts">
22
+ import { normalizeClass } from "vue";
23
+ import type { HTMLAttributes } from "vue";
24
+
25
+ import type { NuxtLinkProps } from "#app";
26
+
27
+ export type ProseH4Props = {
28
+ /**
29
+ * Optional ID for anchor links
30
+ */
31
+ id?: string;
32
+ /**
33
+ * Props to pass to NuxtLink when anchor links are enabled
34
+ */
35
+ linkProps?: NuxtLinkProps;
36
+ /**
37
+ * Additional classes for the parent element
38
+ */
39
+ class?: HTMLAttributes["class"];
40
+ };
41
+
42
+ export const proseH4Styles = tv({
43
+ base: "scroll-m-20 text-xl font-semibold tracking-tight text-balance not-first:mt-6",
44
+ });
45
+ </script>
46
+
47
+ <script setup lang="ts">
48
+ const { id, linkProps, class: _class } = defineProps<ProseH4Props>();
49
+
50
+ // Determine if we should generate anchor links
51
+ const { headings } = useRuntimeConfig().public.mdc;
52
+ const generate = computed(
53
+ () =>
54
+ id &&
55
+ ((typeof headings?.anchorLinks === "boolean" && headings?.anchorLinks === true) ||
56
+ (typeof headings?.anchorLinks === "object" && headings?.anchorLinks?.h4))
57
+ );
58
+ </script>
@@ -0,0 +1,47 @@
1
+ <template>
2
+ <h5 :id="id" :class="proseH5Styles({ class: normalizeClass(_class) || undefined })">
3
+ <NuxtLink v-if="generate" data-slot="h5-link" v-bind="linkProps" :to="`#${id}`">
4
+ <slot />
5
+ </NuxtLink>
6
+ <slot v-else />
7
+ </h5>
8
+ </template>
9
+
10
+ <script lang="ts">
11
+ import { normalizeClass } from "vue";
12
+ import type { HTMLAttributes } from "vue";
13
+
14
+ import type { NuxtLinkProps } from "#app";
15
+
16
+ export type ProseH5Props = {
17
+ /**
18
+ * Optional ID for anchor links
19
+ */
20
+ id?: string;
21
+ /**
22
+ * Props to pass to NuxtLink when anchor links are enabled
23
+ */
24
+ linkProps?: NuxtLinkProps;
25
+ /**
26
+ * Additional classes for the parent element
27
+ */
28
+ class?: HTMLAttributes["class"];
29
+ };
30
+
31
+ export const proseH5Styles = tv({
32
+ base: "scroll-m-20 text-lg font-semibold tracking-tight text-balance not-first:mt-6",
33
+ });
34
+ </script>
35
+
36
+ <script setup lang="ts">
37
+ const { id, linkProps, class: _class } = defineProps<ProseH5Props>();
38
+
39
+ // Determine if we should generate anchor links
40
+ const { headings } = useRuntimeConfig().public.mdc;
41
+ const generate = computed(
42
+ () =>
43
+ id &&
44
+ ((typeof headings?.anchorLinks === "boolean" && headings?.anchorLinks === true) ||
45
+ (typeof headings?.anchorLinks === "object" && headings?.anchorLinks?.h5))
46
+ );
47
+ </script>
@@ -0,0 +1,47 @@
1
+ <template>
2
+ <h6 :id="id" :class="proseH6Styles({ class: normalizeClass(_class) || undefined })">
3
+ <NuxtLink v-if="generate" data-slot="h6-link" v-bind="linkProps" :to="`#${id}`">
4
+ <slot />
5
+ </NuxtLink>
6
+ <slot v-else />
7
+ </h6>
8
+ </template>
9
+
10
+ <script lang="ts">
11
+ import { normalizeClass } from "vue";
12
+ import type { HTMLAttributes } from "vue";
13
+
14
+ import type { NuxtLinkProps } from "#app";
15
+
16
+ export type ProseH6Props = {
17
+ /**
18
+ * Optional ID for anchor links
19
+ */
20
+ id?: string;
21
+ /**
22
+ * Props to pass to NuxtLink when anchor links are enabled
23
+ */
24
+ linkProps?: NuxtLinkProps;
25
+ /**
26
+ * Additional classes for the parent element
27
+ */
28
+ class?: HTMLAttributes["class"];
29
+ };
30
+
31
+ export const proseH6Styles = tv({
32
+ base: "scroll-m-20 text-lg font-semibold tracking-tight text-balance not-first:mt-6",
33
+ });
34
+ </script>
35
+
36
+ <script setup lang="ts">
37
+ const { id, linkProps, class: _class } = defineProps<ProseH6Props>();
38
+
39
+ // Determine if we should generate anchor links
40
+ const { headings } = useRuntimeConfig().public.mdc;
41
+ const generate = computed(
42
+ () =>
43
+ id &&
44
+ ((typeof headings?.anchorLinks === "boolean" && headings?.anchorLinks === true) ||
45
+ (typeof headings?.anchorLinks === "object" && headings?.anchorLinks?.h6))
46
+ );
47
+ </script>
@@ -0,0 +1,33 @@
1
+ <template>
2
+ <hr
3
+ data-slot="prose-hr"
4
+ :class="proseHrStyles({ class: normalizeClass(_class) || undefined, isDashed })"
5
+ />
6
+ </template>
7
+
8
+ <script lang="ts">
9
+ import { normalizeClass } from "vue";
10
+ import type { HTMLAttributes } from "vue";
11
+
12
+ export type ProseHrProps = {
13
+ /**
14
+ * Additional classes for the parent element
15
+ */
16
+ class?: HTMLAttributes["class"];
17
+ };
18
+
19
+ export const proseHrStyles = tv({
20
+ base: "mb-6 not-first:mt-6",
21
+ variants: {
22
+ isDashed: {
23
+ true: "border-dashed",
24
+ false: "border-solid",
25
+ },
26
+ },
27
+ });
28
+ </script>
29
+
30
+ <script setup lang="ts">
31
+ const { class: _class } = defineProps<ProseHrProps>();
32
+ const { isDashed } = useDocd();
33
+ </script>