Nuxt 초기 세팅 추가
This commit is contained in:
5
components/content/ContentRenderer.vue
Normal file
5
components/content/ContentRenderer.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<article class="content-renderer post-prose">
|
||||
<slot />
|
||||
</article>
|
||||
</template>
|
||||
5
components/content/ProseAudio.vue
Normal file
5
components/content/ProseAudio.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="prose-audio my-8 border border-line bg-surface p-5">
|
||||
<slot />
|
||||
</div>
|
||||
</template>
|
||||
5
components/content/ProseBlockquote.vue
Normal file
5
components/content/ProseBlockquote.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<blockquote class="prose-blockquote my-8 border-l-4 border-ink bg-surface px-5 py-4 text-xl font-medium leading-8">
|
||||
<slot />
|
||||
</blockquote>
|
||||
</template>
|
||||
20
components/content/ProseButton.vue
Normal file
20
components/content/ProseButton.vue
Normal file
@@ -0,0 +1,20 @@
|
||||
<script setup>
|
||||
defineProps({
|
||||
href: {
|
||||
type: String,
|
||||
default: '#'
|
||||
},
|
||||
align: {
|
||||
type: String,
|
||||
default: 'left'
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<p class="prose-button my-8" :class="{ 'text-center': align === 'center' }">
|
||||
<NuxtLink class="prose-button__link inline-flex rounded bg-ink px-5 py-3 text-sm font-semibold text-white hover:bg-muted" :to="href">
|
||||
<slot />
|
||||
</NuxtLink>
|
||||
</p>
|
||||
</template>
|
||||
5
components/content/ProseCallout.vue
Normal file
5
components/content/ProseCallout.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<aside class="prose-callout my-8 border border-line bg-surface p-5">
|
||||
<slot />
|
||||
</aside>
|
||||
</template>
|
||||
5
components/content/ProseEmbed.vue
Normal file
5
components/content/ProseEmbed.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="prose-embed my-8 border border-line bg-paper p-5">
|
||||
<slot />
|
||||
</div>
|
||||
</template>
|
||||
5
components/content/ProseFile.vue
Normal file
5
components/content/ProseFile.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="prose-file my-8 border border-line bg-paper p-5">
|
||||
<slot />
|
||||
</div>
|
||||
</template>
|
||||
14
components/content/ProseHeaderCard.vue
Normal file
14
components/content/ProseHeaderCard.vue
Normal file
@@ -0,0 +1,14 @@
|
||||
<script setup>
|
||||
defineProps({
|
||||
variant: {
|
||||
type: String,
|
||||
default: 'simple'
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<header class="prose-header-card my-8 bg-ink p-8 text-white" :class="`prose-header-card--${variant}`">
|
||||
<slot />
|
||||
</header>
|
||||
</template>
|
||||
27
components/content/ProseHeading.vue
Normal file
27
components/content/ProseHeading.vue
Normal file
@@ -0,0 +1,27 @@
|
||||
<script setup>
|
||||
const props = defineProps({
|
||||
level: {
|
||||
type: Number,
|
||||
default: 2
|
||||
}
|
||||
})
|
||||
|
||||
const tagName = computed(() => `h${Math.min(Math.max(props.level, 1), 6)}`)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<component
|
||||
:is="tagName"
|
||||
class="prose-heading mt-10 font-semibold leading-tight tracking-normal first:mt-0"
|
||||
:class="{
|
||||
'text-5xl': level === 1,
|
||||
'text-4xl': level === 2,
|
||||
'text-3xl': level === 3,
|
||||
'text-2xl': level === 4,
|
||||
'text-xl': level === 5,
|
||||
'text-lg': level === 6
|
||||
}"
|
||||
>
|
||||
<slot />
|
||||
</component>
|
||||
</template>
|
||||
31
components/content/ProseImage.vue
Normal file
31
components/content/ProseImage.vue
Normal file
@@ -0,0 +1,31 @@
|
||||
<script setup>
|
||||
defineProps({
|
||||
src: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
alt: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
variant: {
|
||||
type: String,
|
||||
default: 'regular'
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<figure
|
||||
class="prose-image my-8"
|
||||
:class="{
|
||||
'prose-image--wide lg:-mx-10': variant === 'wide',
|
||||
'prose-image--full lg:-mx-20': variant === 'full'
|
||||
}"
|
||||
>
|
||||
<img class="prose-image__media w-full bg-surface object-cover" :src="src" :alt="alt">
|
||||
<figcaption v-if="$slots.default" class="prose-image__caption mt-3 text-center text-sm text-muted">
|
||||
<slot />
|
||||
</figcaption>
|
||||
</figure>
|
||||
</template>
|
||||
18
components/content/ProseList.vue
Normal file
18
components/content/ProseList.vue
Normal file
@@ -0,0 +1,18 @@
|
||||
<script setup>
|
||||
defineProps({
|
||||
ordered: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<component
|
||||
:is="ordered ? 'ol' : 'ul'"
|
||||
class="prose-list my-6 space-y-2 pl-6"
|
||||
:class="ordered ? 'list-decimal' : 'list-disc'"
|
||||
>
|
||||
<slot />
|
||||
</component>
|
||||
</template>
|
||||
5
components/content/ProseProduct.vue
Normal file
5
components/content/ProseProduct.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="prose-product my-8 border border-line bg-surface p-5">
|
||||
<slot />
|
||||
</div>
|
||||
</template>
|
||||
19
components/content/ProseToggle.vue
Normal file
19
components/content/ProseToggle.vue
Normal file
@@ -0,0 +1,19 @@
|
||||
<script setup>
|
||||
defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<details class="prose-toggle my-6 border border-line bg-paper p-5">
|
||||
<summary class="prose-toggle__summary cursor-pointer font-semibold">
|
||||
{{ title }}
|
||||
</summary>
|
||||
<div class="prose-toggle__body mt-4 text-muted">
|
||||
<slot />
|
||||
</div>
|
||||
</details>
|
||||
</template>
|
||||
5
components/content/ProseVideo.vue
Normal file
5
components/content/ProseVideo.vue
Normal file
@@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div class="prose-video my-8 aspect-video bg-ink text-white">
|
||||
<slot />
|
||||
</div>
|
||||
</template>
|
||||
Reference in New Issue
Block a user