daisy-ui-kit 2.1.1 → 2.1.2
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/package.json +2 -2
- package/components/.DS_Store +0 -0
- package/components/Home/AlternatingFeatureSections.vue +0 -219
- package/components/Home/BitoviConsulting.vue +0 -53
- package/components/Home/BitoviOpenSource.vue +0 -51
- package/components/Home/Footer.vue +0 -127
- package/components/Home/GradientFeatureSections.vue +0 -87
- package/components/Home/Header.vue +0 -95
- package/components/Home/Hero.vue +0 -53
- package/components/Home/PremiumCTA.vue +0 -28
- package/components/Home/Testimonial.vue +0 -23
- package/components/Mask.config.ts +0 -77
- package/components/content/Badge.ts +0 -3
- package/components/content/CodePreview.vue +0 -28
- package/components/content/ColorBadge.vue +0 -24
- package/components/content/DemoExample.vue +0 -23
- package/components/content/DemoExampleResponsive.vue +0 -59
- package/components/content/IframeRenderer.ts +0 -53
- package/components/content/Indent.vue +0 -3
- package/components/content/LocalLinks.vue +0 -31
- package/components/content/NotFound.vue +0 -42
- package/components/content/PageNext.vue +0 -24
- package/components/content/PagePrevious.vue +0 -24
- package/components/content/PrevNext.vue +0 -40
- package/components/content/ProseA.vue +0 -19
- package/components/content/ProseAlert.vue +0 -11
- package/components/content/ProseBlockquote.vue +0 -5
- package/components/content/ProseCode.vue +0 -62
- package/components/content/ProseCodeInline.vue +0 -3
- package/components/content/ProseEm.vue +0 -5
- package/components/content/ProseH1.vue +0 -16
- package/components/content/ProseH2.vue +0 -16
- package/components/content/ProseH3.vue +0 -16
- package/components/content/ProseH4.vue +0 -16
- package/components/content/ProseH5.vue +0 -16
- package/components/content/ProseH6.vue +0 -16
- package/components/content/ProseHr.vue +0 -3
- package/components/content/ProseImg.vue +0 -34
- package/components/content/ProseLi.vue +0 -3
- package/components/content/ProseOl.vue +0 -5
- package/components/content/ProseP.vue +0 -3
- package/components/content/ProseStrong.vue +0 -5
- package/components/content/ProseTable.vue +0 -7
- package/components/content/ProseTbody.vue +0 -5
- package/components/content/ProseTd.vue +0 -5
- package/components/content/ProseTh.vue +0 -5
- package/components/content/ProseThead.vue +0 -5
- package/components/content/ProseTr.vue +0 -5
- package/components/content/ProseUl.vue +0 -5
- package/components/content/Search.vue +0 -160
- package/components/content/Sidebar.vue +0 -65
- package/components/content/SidebarMenuSection.vue +0 -38
- package/components/content/SigninForm.vue +0 -47
- package/components/content/TableOfContents.vue +0 -80
- package/components/content/TypeBadge.vue +0 -17
- package/components/content/UserMenu.vue +0 -62
- package/components/theme/Builder.vue +0 -284
- package/components/theme/Output.vue +0 -70
- package/components/theme/Picker.vue +0 -47
- package/components/theme/Preview.vue +0 -1684
- package/components/theme/Provider.vue +0 -43
- package/components/theme/Snooper.vue +0 -41
- package/components/theme/Swatch.vue +0 -47
- package/components/theme/custom-themes.ts +0 -34
- package/components/theme/theme-utils.ts +0 -175
package/components/Home/Hero.vue
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<!-- Hero section -->
|
|
3
|
-
<div class="relative">
|
|
4
|
-
<div class="absolute inset-x-0 bottom-0 bg-base-200 h-1/2" />
|
|
5
|
-
<div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
|
6
|
-
<div class="relative shadow-xl sm:rounded-2xl sm:overflow-hidden">
|
|
7
|
-
<div class="absolute inset-0">
|
|
8
|
-
<img
|
|
9
|
-
class="object-cover w-full h-full"
|
|
10
|
-
src="/img/unsplash-devs-sm.jpg"
|
|
11
|
-
alt="People working on laptops"
|
|
12
|
-
>
|
|
13
|
-
<div
|
|
14
|
-
class="absolute inset-0 bg-gradient-to-r from-primary to-secondary mix-blend-multiply"
|
|
15
|
-
/>
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
<div class="relative px-4 py-16 sm:px-6 sm:py-24 lg:py-32 lg:px-8">
|
|
19
|
-
<Text is="h1" extrabold center class="text-4xl tracking-tight sm:text-5xl lg:text-6xl">
|
|
20
|
-
<Text class="text-white" block>
|
|
21
|
-
DaisyUI Kit
|
|
22
|
-
</Text>
|
|
23
|
-
<Text secondary block class="text-3xl sm:text-4xl lg:text-5xl">
|
|
24
|
-
Build Beautiful Apps
|
|
25
|
-
</Text>
|
|
26
|
-
</Text>
|
|
27
|
-
<Text center class="block max-w-lg mx-auto mt-6 text-xl text-indigo-200 sm:max-w-3xl">
|
|
28
|
-
Bring the masterfully-crafted DaisyUI into your Vue app. <br>Built for you with ❤️ by
|
|
29
|
-
<NuxtLink to="https://www.bitovi.com">
|
|
30
|
-
Bitovi
|
|
31
|
-
</NuxtLink>.
|
|
32
|
-
</Text>
|
|
33
|
-
|
|
34
|
-
<div class="max-w-sm mx-auto mt-10 sm:max-w-none sm:flex sm:justify-center">
|
|
35
|
-
<Flex class="gap-2 sm:space-y-0 sm:mx-auto sm:inline-grid sm:grid-cols-2 items-center justify-center">
|
|
36
|
-
<NuxtLink to="/docs/button" class="block">
|
|
37
|
-
<Button class="w-full border-0 bg-base-100 text-base-content hover:bg-base-200">
|
|
38
|
-
Learn more
|
|
39
|
-
</Button>
|
|
40
|
-
</NuxtLink>
|
|
41
|
-
|
|
42
|
-
<NuxtLink to="/docs/install" class="block">
|
|
43
|
-
<Button primary class="w-full">
|
|
44
|
-
Start Building
|
|
45
|
-
</Button>
|
|
46
|
-
</NuxtLink>
|
|
47
|
-
</Flex>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
</template>
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<!-- CTA Section -->
|
|
3
|
-
<div class="bg-neutral">
|
|
4
|
-
<div
|
|
5
|
-
class="max-w-4xl px-4 py-16 mx-auto sm:px-6 sm:py-24 lg:max-w-7xl lg:px-8 lg:flex lg:items-center lg:justify-between"
|
|
6
|
-
>
|
|
7
|
-
<Text is="h2" size="4xl" extrabold class="tracking-tight">
|
|
8
|
-
<Text block class="text-neutral-content">
|
|
9
|
-
Build faster with
|
|
10
|
-
<Text secondary>
|
|
11
|
-
DaisyUI Kit Premium
|
|
12
|
-
</Text>
|
|
13
|
-
</Text>
|
|
14
|
-
<Text block class="mt-4 text-2xl text-transparent lg:mt-0 xl:text-3xl bg-gradient-secondary-r bg-clip-text">
|
|
15
|
-
Templates for App Layout, Marketing and E-Commerce
|
|
16
|
-
</Text>
|
|
17
|
-
</Text>
|
|
18
|
-
|
|
19
|
-
<div class="mt-6 space-y-4 sm:space-y-0 sm:flex sm:space-x-4">
|
|
20
|
-
<Tooltip primary tip="Coming Soon">
|
|
21
|
-
<Button primary lg>
|
|
22
|
-
Learn more
|
|
23
|
-
</Button>
|
|
24
|
-
</Tooltip>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
</template>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<blockquote>
|
|
3
|
-
<div>
|
|
4
|
-
<Text block base class="text-base-content/80">
|
|
5
|
-
“Cras velit quis eros eget rhoncus lacus ultrices
|
|
6
|
-
sed diam. Sit orci risus aenean curabitur donec aliquet.
|
|
7
|
-
Mi venenatis in euismod ut.”
|
|
8
|
-
</Text>
|
|
9
|
-
</div>
|
|
10
|
-
<footer class="mt-3">
|
|
11
|
-
<Flex class="space-x-3 items-center">
|
|
12
|
-
<Avatar circle class="flex-shrink-0 w-8 h-8">
|
|
13
|
-
<img
|
|
14
|
-
src="https://images.unsplash.com/photo-1509783236416-c9ad59bae472?ixlib=rb-=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=8&w=1024&h=1024&q=80"
|
|
15
|
-
>
|
|
16
|
-
</Avatar>
|
|
17
|
-
<Text base medium block class="text-base-content/80">
|
|
18
|
-
Marcia Hill, Digital Marketing Manager
|
|
19
|
-
</Text>
|
|
20
|
-
</Flex>
|
|
21
|
-
</footer>
|
|
22
|
-
</blockquote>
|
|
23
|
-
</template>
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { computed } from 'vue'
|
|
2
|
-
|
|
3
|
-
export const maskProps = {
|
|
4
|
-
shape: { type: String },
|
|
5
|
-
squircle: Boolean,
|
|
6
|
-
heart: Boolean,
|
|
7
|
-
hexagon: Boolean,
|
|
8
|
-
hexagon2: Boolean,
|
|
9
|
-
decagon: Boolean,
|
|
10
|
-
pentagon: Boolean,
|
|
11
|
-
diamond: Boolean,
|
|
12
|
-
square: Boolean,
|
|
13
|
-
circle: Boolean,
|
|
14
|
-
parallelogram: Boolean,
|
|
15
|
-
parallelogram2: Boolean,
|
|
16
|
-
parallelogram3: Boolean,
|
|
17
|
-
parallelogram4: Boolean,
|
|
18
|
-
star: Boolean,
|
|
19
|
-
star2: Boolean,
|
|
20
|
-
triangle: Boolean,
|
|
21
|
-
triangle2: Boolean,
|
|
22
|
-
triangle3: Boolean,
|
|
23
|
-
triangle4: Boolean,
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function makeMaskClasses(props: any) {
|
|
27
|
-
const classes = computed(() => {
|
|
28
|
-
return {
|
|
29
|
-
'mask-squircle': props.squircle || props.shape === 'squircle',
|
|
30
|
-
'mask-heart': props.heart || props.shape === 'heart',
|
|
31
|
-
'mask-hexagon': props.hexagon || props.shape === 'hexagon',
|
|
32
|
-
'mask-hexagon-2': props.hexagon2 || props.shape === 'hexagon-2',
|
|
33
|
-
'mask-decagon': props.decagon || props.shape === 'decagon',
|
|
34
|
-
'mask-pentagon': props.pentagon || props.shape === 'pentagon',
|
|
35
|
-
'mask-diamond': props.diamond || props.shape === 'diamond',
|
|
36
|
-
'mask-square': props.square || props.shape === 'square',
|
|
37
|
-
'mask-circle': props.circle || props.shape === 'circle',
|
|
38
|
-
'mask-parallelogram':
|
|
39
|
-
props.parallelogram || props.shape === 'parallelogram',
|
|
40
|
-
'mask-parallelogram-2':
|
|
41
|
-
props.parallelogram2 || props.shape === 'parallelogram-2',
|
|
42
|
-
'mask-parallelogram-3':
|
|
43
|
-
props.parallelogram3 || props.shape === 'parallelogram-3',
|
|
44
|
-
'mask-parallelogram-4':
|
|
45
|
-
props.parallelogram4 || props.shape === 'parallelogram-4',
|
|
46
|
-
'mask-star': props.star || props.shape === 'star',
|
|
47
|
-
'mask-star-2': props.star2 || props.shape === 'star-2',
|
|
48
|
-
'mask-triangle': props.triangle || props.shape === 'triangle',
|
|
49
|
-
'mask-triangle-2': props.triangle2 || props.shape === 'triangle-2',
|
|
50
|
-
'mask-triangle-3': props.triangle3 || props.shape === 'triangle-3',
|
|
51
|
-
'mask-triangle-4': props.triangle4 || props.shape === 'triangle-4',
|
|
52
|
-
}
|
|
53
|
-
})
|
|
54
|
-
return classes
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export const shapes = [
|
|
58
|
-
'squircle',
|
|
59
|
-
'heart',
|
|
60
|
-
'hexagon',
|
|
61
|
-
'hexagon-2',
|
|
62
|
-
'decagon',
|
|
63
|
-
'pentagon',
|
|
64
|
-
'diamond',
|
|
65
|
-
'square',
|
|
66
|
-
'circle',
|
|
67
|
-
'parallelogram',
|
|
68
|
-
'parallelogram-2',
|
|
69
|
-
'parallelogram-3',
|
|
70
|
-
'parallelogram-4',
|
|
71
|
-
'star',
|
|
72
|
-
'star-2',
|
|
73
|
-
'triangle',
|
|
74
|
-
'triangle-2',
|
|
75
|
-
'triangle-3',
|
|
76
|
-
'triangle-4',
|
|
77
|
-
]
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed } from 'vue'
|
|
3
|
-
|
|
4
|
-
const slotWrapper = ref(null)
|
|
5
|
-
const innerHtml = computed(() => {
|
|
6
|
-
if (slotWrapper.value)
|
|
7
|
-
return slotWrapper.value.innerHtml
|
|
8
|
-
else
|
|
9
|
-
return ''
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
onMounted(() => {
|
|
13
|
-
if (!import.meta.env.SSR)
|
|
14
|
-
(window as any).innerHtml = innerHtml
|
|
15
|
-
})
|
|
16
|
-
</script>
|
|
17
|
-
|
|
18
|
-
<template>
|
|
19
|
-
<div>
|
|
20
|
-
<div v-html="innerHtml" />
|
|
21
|
-
|
|
22
|
-
<div class="hidden">
|
|
23
|
-
<div ref="slotWrapper">
|
|
24
|
-
<slot />
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
</template>
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
const props = defineProps<{
|
|
3
|
-
color: string
|
|
4
|
-
}>()
|
|
5
|
-
|
|
6
|
-
const classes = computed(() => {
|
|
7
|
-
return {
|
|
8
|
-
'bg-primary-content text-primary': props.color === 'primary-content',
|
|
9
|
-
'bg-secondary-content text-secondary': props.color === 'secondary-content',
|
|
10
|
-
'bg-neutral-content text-neutral': props.color === 'neutral-content',
|
|
11
|
-
'bg-accent-content text-accent': props.color === 'accent-content',
|
|
12
|
-
'bg-info-content text-info': props.color === 'info-content',
|
|
13
|
-
'bg-success-content text-success': props.color === 'success-content',
|
|
14
|
-
'bg-warning-content text-warning': props.color === 'warning-content',
|
|
15
|
-
'bg-error-content text-error': props.color === 'error-content',
|
|
16
|
-
}
|
|
17
|
-
})
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
<template>
|
|
21
|
-
<Badge :color="color" class="whitespace-nowrap rounded-[0.375rem] px-1 h-[1.5rem] font-mono" :class="classes">
|
|
22
|
-
{{ color }}
|
|
23
|
-
</Badge>
|
|
24
|
-
</template>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed } from 'vue'
|
|
3
|
-
|
|
4
|
-
const props = defineProps({
|
|
5
|
-
noPadding: Boolean,
|
|
6
|
-
allowProse: Boolean,
|
|
7
|
-
})
|
|
8
|
-
const classes = computed(() => {
|
|
9
|
-
return {
|
|
10
|
-
'p-6 lg:p-12': !props.noPadding,
|
|
11
|
-
'not-prose': !props.allowProse,
|
|
12
|
-
}
|
|
13
|
-
})
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<template>
|
|
17
|
-
<div
|
|
18
|
-
class="demo-example flex flex-row items-start mt-4 border-4 rounded-t-xl border-base-200 lg:max-w-[calc(100vw-390px)]"
|
|
19
|
-
:class="classes"
|
|
20
|
-
>
|
|
21
|
-
<slot />
|
|
22
|
-
</div>
|
|
23
|
-
</template>
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed } from 'vue'
|
|
3
|
-
|
|
4
|
-
const props = defineProps({
|
|
5
|
-
iframeClasses: {
|
|
6
|
-
type: String,
|
|
7
|
-
default: '',
|
|
8
|
-
},
|
|
9
|
-
allowProse: Boolean,
|
|
10
|
-
})
|
|
11
|
-
const { theme } = useTheme()
|
|
12
|
-
|
|
13
|
-
const iframe = ref()
|
|
14
|
-
const { pressed } = useMousePressed()
|
|
15
|
-
const { x: mouseX } = useMouse()
|
|
16
|
-
const { width } = useElementBounding(iframe)
|
|
17
|
-
|
|
18
|
-
const referenceX = ref(0)
|
|
19
|
-
const _width = ref('100%')
|
|
20
|
-
|
|
21
|
-
watch(pressed, (val) => {
|
|
22
|
-
if (val)
|
|
23
|
-
referenceX.value = mouseX.value
|
|
24
|
-
})
|
|
25
|
-
watch(mouseX, (val) => {
|
|
26
|
-
if (pressed.value) {
|
|
27
|
-
const delta = val - referenceX.value
|
|
28
|
-
referenceX.value = mouseX.value
|
|
29
|
-
_width.value = `${width.value + (delta * 1.2)}px`
|
|
30
|
-
}
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
const classes = computed(() => {
|
|
34
|
-
return `${props.iframeClasses} not-prose ${pressed ? 'pointer-events-none' : ''}`
|
|
35
|
-
})
|
|
36
|
-
</script>
|
|
37
|
-
|
|
38
|
-
<template>
|
|
39
|
-
<div
|
|
40
|
-
class="flex flex-row flex-wrap items-center mt-4 border-4 rounded-t-xl border-base-200 overflow-hidden"
|
|
41
|
-
:class="classes"
|
|
42
|
-
>
|
|
43
|
-
<div class="flex flex-row w-full bg-black/50">
|
|
44
|
-
<IframeRenderer
|
|
45
|
-
ref="iframe"
|
|
46
|
-
:style="{ width: _width }"
|
|
47
|
-
class="w-full min-h-full"
|
|
48
|
-
:classes="classes"
|
|
49
|
-
:iframe-classes="iframeClasses"
|
|
50
|
-
:theme="theme"
|
|
51
|
-
>
|
|
52
|
-
<slot />
|
|
53
|
-
</IframeRenderer>
|
|
54
|
-
<Tooltip draggable primary tip="Drag to Resize" left class="flex items-center justify-center bg-primary cursor-move">
|
|
55
|
-
<Icon name="radix-icons:drag-handle-vertical" class="text-primary-content" />
|
|
56
|
-
</Tooltip>
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
59
|
-
</template>
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { createApp, h, onMounted, ref } from 'vue'
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
name: 'RenderToIFrame',
|
|
5
|
-
props: {
|
|
6
|
-
classes: { type: String },
|
|
7
|
-
iframeClasses: { type: String },
|
|
8
|
-
theme: { type: String },
|
|
9
|
-
},
|
|
10
|
-
setup(props: any, { slots }: any) {
|
|
11
|
-
const iframeRef = ref()
|
|
12
|
-
const iframeBody = ref()
|
|
13
|
-
const iframeHead = ref()
|
|
14
|
-
const iframeStyle = ref()
|
|
15
|
-
|
|
16
|
-
onMounted(() => {
|
|
17
|
-
iframeBody.value = iframeRef.value.contentDocument.body
|
|
18
|
-
iframeHead.value = iframeRef.value.contentDocument.head
|
|
19
|
-
const el = document.createElement('div')
|
|
20
|
-
iframeBody.value.appendChild(el)
|
|
21
|
-
iframeStyle.value = document.createElement('style')
|
|
22
|
-
iframeStyle.value.innerHTML = props.css
|
|
23
|
-
iframeHead.value.appendChild(iframeStyle.value)
|
|
24
|
-
|
|
25
|
-
createApp({
|
|
26
|
-
name: 'IframeRender',
|
|
27
|
-
setup() {
|
|
28
|
-
const script = iframeRef.value.contentDocument.createElement('script')
|
|
29
|
-
script.type = 'text/javascript'
|
|
30
|
-
// create dynamic script
|
|
31
|
-
script.text = `const oHead = document.getElementsByTagName('head')[0]
|
|
32
|
-
const arrStyleSheets = parent.document.getElementsByTagName('style')
|
|
33
|
-
for (let i = 0; i < arrStyleSheets.length; i++)
|
|
34
|
-
oHead.appendChild(arrStyleSheets[i].cloneNode(true))
|
|
35
|
-
`
|
|
36
|
-
|
|
37
|
-
if (props.iframeClasses.length)
|
|
38
|
-
iframeRef.value.classList.add(props.iframeClasses)
|
|
39
|
-
iframeBody.value.classList.add('p-6')
|
|
40
|
-
iframeHead.value.appendChild(script)
|
|
41
|
-
|
|
42
|
-
watch(() => props.theme, (theme) => {
|
|
43
|
-
iframeBody.value.setAttribute('data-theme', theme)
|
|
44
|
-
}, { immediate: true })
|
|
45
|
-
return () => slots.default()
|
|
46
|
-
},
|
|
47
|
-
}).mount(el)
|
|
48
|
-
})
|
|
49
|
-
return () => h('iframe', {
|
|
50
|
-
ref: iframeRef,
|
|
51
|
-
})
|
|
52
|
-
},
|
|
53
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
const props = defineProps<{
|
|
3
|
-
values: string
|
|
4
|
-
}>()
|
|
5
|
-
const links = computed(() => {
|
|
6
|
-
const values = props.values.split(',').map(name => name.trim())
|
|
7
|
-
return values.map((value) => {
|
|
8
|
-
if (value.includes('#')) {
|
|
9
|
-
const [name, url] = value.split('#')
|
|
10
|
-
return {
|
|
11
|
-
name,
|
|
12
|
-
url: `#${url}`,
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
return {
|
|
17
|
-
name: value,
|
|
18
|
-
url: `#${value.toLowerCase()}`,
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
})
|
|
22
|
-
})
|
|
23
|
-
</script>
|
|
24
|
-
|
|
25
|
-
<template>
|
|
26
|
-
<ul>
|
|
27
|
-
<li v-for="link in links" :key="link.name">
|
|
28
|
-
<a :href="link.url" class="link link-primary">{{ link.name }}</a>
|
|
29
|
-
</li>
|
|
30
|
-
</ul>
|
|
31
|
-
</template>
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useFuse } from '@vueuse/integrations/useFuse'
|
|
3
|
-
|
|
4
|
-
const props = defineProps({
|
|
5
|
-
error: Object,
|
|
6
|
-
})
|
|
7
|
-
|
|
8
|
-
const route = useRoute()
|
|
9
|
-
const { allLinks } = useNav()
|
|
10
|
-
|
|
11
|
-
const lastPathSegment = computed(() => {
|
|
12
|
-
const segments = route.path.split('/')
|
|
13
|
-
return segments[segments.length - 1]
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
const { results } = useFuse(lastPathSegment, allLinks, {
|
|
17
|
-
fuseOptions: { keys: ['label', 'tags'], includeScore: true, distance: 3 },
|
|
18
|
-
resultLimit: 5,
|
|
19
|
-
})
|
|
20
|
-
</script>
|
|
21
|
-
|
|
22
|
-
<template>
|
|
23
|
-
<Hero class="not-prose h-[32rem]">
|
|
24
|
-
<HeroContent center>
|
|
25
|
-
<div class="max-w-md">
|
|
26
|
-
<Text is="h1" size="5xl" bold class="mb-5">
|
|
27
|
-
404
|
|
28
|
-
</Text>
|
|
29
|
-
<Text is="p" class="mb-5">
|
|
30
|
-
We couldn't find that page. Did you mean one of these pages?
|
|
31
|
-
</Text>
|
|
32
|
-
<Menu class="border border-base-300 rounded-xl">
|
|
33
|
-
<MenuItem v-for="result in results" :key="result.item.label">
|
|
34
|
-
<NuxtLink :to="result.item.to">
|
|
35
|
-
{{ result.item.label }}
|
|
36
|
-
</NuxtLink>
|
|
37
|
-
</MenuItem>
|
|
38
|
-
</Menu>
|
|
39
|
-
</div>
|
|
40
|
-
</HeroContent>
|
|
41
|
-
</Hero>
|
|
42
|
-
</template>
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
defineProps<{
|
|
3
|
-
url: string
|
|
4
|
-
title: string
|
|
5
|
-
}>()
|
|
6
|
-
</script>
|
|
7
|
-
|
|
8
|
-
<template>
|
|
9
|
-
<NuxtLink
|
|
10
|
-
:to="url"
|
|
11
|
-
class="btn md:btn-lg gap-2 normal-case lg:gap-3"
|
|
12
|
-
>
|
|
13
|
-
<Flex col items-start>
|
|
14
|
-
<Text class="text-base-content/50 hidden text-xs font-normal md:block">
|
|
15
|
-
Next
|
|
16
|
-
</Text>
|
|
17
|
-
<Text>{{ title }}</Text>
|
|
18
|
-
</Flex>
|
|
19
|
-
|
|
20
|
-
<svg class="h-6 w-6 fill-current md:h-8 md:w-8" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
21
|
-
<path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" />
|
|
22
|
-
</svg>
|
|
23
|
-
</NuxtLink>
|
|
24
|
-
</template>
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
defineProps<{
|
|
3
|
-
url: string
|
|
4
|
-
title: string
|
|
5
|
-
}>()
|
|
6
|
-
</script>
|
|
7
|
-
|
|
8
|
-
<template>
|
|
9
|
-
<NuxtLink
|
|
10
|
-
:to="url"
|
|
11
|
-
class="btn md:btn-lg gap-2 normal-case lg:gap-3"
|
|
12
|
-
>
|
|
13
|
-
<svg class="h-6 w-6 fill-current md:h-8 md:w-8" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
14
|
-
<path d="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z" />
|
|
15
|
-
</svg>
|
|
16
|
-
|
|
17
|
-
<Flex col items-start>
|
|
18
|
-
<Text class="text-base-content/50 hidden text-xs font-normal md:block">
|
|
19
|
-
Prev
|
|
20
|
-
</Text>
|
|
21
|
-
<Text>{{ title }}</Text>
|
|
22
|
-
</Flex>
|
|
23
|
-
</NuxtLink>
|
|
24
|
-
</template>
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useNav } from '~/composables/use-nav'
|
|
3
|
-
|
|
4
|
-
const props = defineProps<{
|
|
5
|
-
currentPageLabel: string
|
|
6
|
-
}>()
|
|
7
|
-
|
|
8
|
-
const { allLinks: links } = useNav()
|
|
9
|
-
|
|
10
|
-
const current = computed(() => links.find(link => link.label === props.currentPageLabel))
|
|
11
|
-
const prev = computed(() => links[links.indexOf(current.value as any) - 1])
|
|
12
|
-
const next = computed(() => links[links.indexOf(current.value as any) + 1])
|
|
13
|
-
|
|
14
|
-
function toTop() {
|
|
15
|
-
window.scrollTo({
|
|
16
|
-
top: 0,
|
|
17
|
-
behavior: 'smooth',
|
|
18
|
-
})
|
|
19
|
-
setTimeout(() => {
|
|
20
|
-
window.location.hash = ''
|
|
21
|
-
}, 600)
|
|
22
|
-
}
|
|
23
|
-
</script>
|
|
24
|
-
|
|
25
|
-
<template>
|
|
26
|
-
<div>
|
|
27
|
-
<div class="flex flex-row justify-between mt-16">
|
|
28
|
-
<PagePrevious v-if="prev" :url="prev.to" :title="prev.label" />
|
|
29
|
-
<span v-else />
|
|
30
|
-
|
|
31
|
-
<PageNext v-if="next" :url="next.to" :title="next.label" />
|
|
32
|
-
<span v-else />
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<Button ghost class="mt-6" @click="toTop">
|
|
36
|
-
to top
|
|
37
|
-
<Icon name="feather:arrow-up" class="ml-2" />
|
|
38
|
-
</Button>
|
|
39
|
-
</div>
|
|
40
|
-
</template>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
defineProps({
|
|
3
|
-
href: {
|
|
4
|
-
type: String,
|
|
5
|
-
default: '',
|
|
6
|
-
},
|
|
7
|
-
target: {
|
|
8
|
-
type: String,
|
|
9
|
-
default: undefined,
|
|
10
|
-
required: false,
|
|
11
|
-
},
|
|
12
|
-
})
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
<template>
|
|
16
|
-
<NuxtLink :href="href" :target="target" class="daisy-link link-primary">
|
|
17
|
-
<slot />
|
|
18
|
-
</NuxtLink>
|
|
19
|
-
</template>
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
const props = defineProps({
|
|
3
|
-
code: {
|
|
4
|
-
type: String,
|
|
5
|
-
default: '',
|
|
6
|
-
},
|
|
7
|
-
language: {
|
|
8
|
-
type: String,
|
|
9
|
-
default: null,
|
|
10
|
-
},
|
|
11
|
-
filename: {
|
|
12
|
-
type: String,
|
|
13
|
-
default: null,
|
|
14
|
-
},
|
|
15
|
-
highlights: {
|
|
16
|
-
type: Array as () => number[],
|
|
17
|
-
default: () => [],
|
|
18
|
-
},
|
|
19
|
-
meta: {
|
|
20
|
-
type: String,
|
|
21
|
-
default: null,
|
|
22
|
-
},
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
const { copy, copied } = useClipboard({ source: computed(() => props.code) })
|
|
26
|
-
</script>
|
|
27
|
-
|
|
28
|
-
<template>
|
|
29
|
-
<div>
|
|
30
|
-
<CodeWrapper v-if="meta?.includes('collapse=true')" class="code-wrapper">
|
|
31
|
-
<div class="relative -my-6">
|
|
32
|
-
<div class="absolute flex flex-row items-center top-0 right-0">
|
|
33
|
-
<div v-if="copied" class="pr-2 text-sm text-neutral-content">
|
|
34
|
-
copied
|
|
35
|
-
</div>
|
|
36
|
-
<Button
|
|
37
|
-
ghost sm
|
|
38
|
-
class="text-neutral-content hover:bg-secondary hover:text-secondary-content rounded-tl-none rounded-br-none rounded-tr-md rounded-bl-md"
|
|
39
|
-
@click="() => copy(code)"
|
|
40
|
-
>
|
|
41
|
-
copy
|
|
42
|
-
</Button>
|
|
43
|
-
</div>
|
|
44
|
-
<div class="lg:max-w-[calc(100vw-380px)]">
|
|
45
|
-
<slot />
|
|
46
|
-
</div>
|
|
47
|
-
</div>
|
|
48
|
-
</CodeWrapper>
|
|
49
|
-
<slot v-else />
|
|
50
|
-
</div>
|
|
51
|
-
</template>
|
|
52
|
-
|
|
53
|
-
<style>
|
|
54
|
-
.code-wrapper pre code .line {
|
|
55
|
-
display: block;
|
|
56
|
-
min-height: 1rem;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.code-wrapper pre {
|
|
60
|
-
max-width: calc(100vw - 3.5rem);
|
|
61
|
-
}
|
|
62
|
-
</style>
|