@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
|
@@ -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,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>
|