daisy-ui-kit 2.1.0 → 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/nuxt.js +22 -0
- package/package.json +3 -3
- 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
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useRuntimeConfig } from '#imports'
|
|
3
|
-
defineProps<{ id?: string }>()
|
|
4
|
-
const heading = 1
|
|
5
|
-
const { anchorLinks } = useRuntimeConfig().public.content
|
|
6
|
-
const generate = anchorLinks?.depth >= heading && !anchorLinks?.exclude.includes(heading)
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
<template>
|
|
10
|
-
<h1 :id="id">
|
|
11
|
-
<a v-if="id && generate" :href="`#${id}`">
|
|
12
|
-
<slot />
|
|
13
|
-
</a>
|
|
14
|
-
<slot v-else />
|
|
15
|
-
</h1>
|
|
16
|
-
</template>
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useRuntimeConfig } from '#imports'
|
|
3
|
-
defineProps<{ id?: string }>()
|
|
4
|
-
const heading = 2
|
|
5
|
-
const { anchorLinks } = useRuntimeConfig().public.content
|
|
6
|
-
const generate = anchorLinks?.depth >= heading && !anchorLinks?.exclude.includes(heading)
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
<template>
|
|
10
|
-
<h2 :id="id">
|
|
11
|
-
<a v-if="id && generate" :href="`#${id}`">
|
|
12
|
-
<slot />
|
|
13
|
-
</a>
|
|
14
|
-
<slot v-else />
|
|
15
|
-
</h2>
|
|
16
|
-
</template>
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useRuntimeConfig } from '#imports'
|
|
3
|
-
defineProps<{ id?: string }>()
|
|
4
|
-
const heading = 3
|
|
5
|
-
const { anchorLinks } = useRuntimeConfig().public.content
|
|
6
|
-
const generate = anchorLinks?.depth >= heading && !anchorLinks?.exclude.includes(heading)
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
<template>
|
|
10
|
-
<h3 :id="id">
|
|
11
|
-
<a v-if="id && generate" :href="`#${id}`">
|
|
12
|
-
<slot />
|
|
13
|
-
</a>
|
|
14
|
-
<slot v-else />
|
|
15
|
-
</h3>
|
|
16
|
-
</template>
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useRuntimeConfig } from '#imports'
|
|
3
|
-
defineProps<{ id?: string }>()
|
|
4
|
-
const heading = 4
|
|
5
|
-
const { anchorLinks } = useRuntimeConfig().public.content
|
|
6
|
-
const generate = anchorLinks?.depth >= heading && !anchorLinks?.exclude.includes(heading)
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
<template>
|
|
10
|
-
<h4 :id="id">
|
|
11
|
-
<a v-if="id && generate" :href="`#${id}`">
|
|
12
|
-
<slot />
|
|
13
|
-
</a>
|
|
14
|
-
<slot v-else />
|
|
15
|
-
</h4>
|
|
16
|
-
</template>
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useRuntimeConfig } from '#imports'
|
|
3
|
-
defineProps<{ id?: string }>()
|
|
4
|
-
const heading = 5
|
|
5
|
-
const { anchorLinks } = useRuntimeConfig().public.content
|
|
6
|
-
const generate = anchorLinks?.depth >= heading && !anchorLinks?.exclude.includes(heading)
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
<template>
|
|
10
|
-
<h5 :id="id">
|
|
11
|
-
<a v-if="id && generate" :href="`#${id}`">
|
|
12
|
-
<slot />
|
|
13
|
-
</a>
|
|
14
|
-
<slot v-else />
|
|
15
|
-
</h5>
|
|
16
|
-
</template>
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useRuntimeConfig } from '#imports'
|
|
3
|
-
defineProps<{ id?: string }>()
|
|
4
|
-
const heading = 6
|
|
5
|
-
const { anchorLinks } = useRuntimeConfig().public.content
|
|
6
|
-
const generate = anchorLinks?.depth >= heading && !anchorLinks?.exclude.includes(heading)
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
<template>
|
|
10
|
-
<h6 :id="id">
|
|
11
|
-
<a v-if="id && generate" :href="`#${id}`">
|
|
12
|
-
<slot />
|
|
13
|
-
</a>
|
|
14
|
-
<slot v-else />
|
|
15
|
-
</h6>
|
|
16
|
-
</template>
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { withBase } from 'ufo'
|
|
3
|
-
import { computed, useRuntimeConfig } from '#imports'
|
|
4
|
-
|
|
5
|
-
const props = defineProps({
|
|
6
|
-
src: {
|
|
7
|
-
type: String,
|
|
8
|
-
default: '',
|
|
9
|
-
},
|
|
10
|
-
alt: {
|
|
11
|
-
type: String,
|
|
12
|
-
default: '',
|
|
13
|
-
},
|
|
14
|
-
width: {
|
|
15
|
-
type: [String, Number],
|
|
16
|
-
default: undefined,
|
|
17
|
-
},
|
|
18
|
-
height: {
|
|
19
|
-
type: [String, Number],
|
|
20
|
-
default: undefined,
|
|
21
|
-
},
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
const refinedSrc = computed(() => {
|
|
25
|
-
if (props.src?.startsWith('/') && !props.src.startsWith('//'))
|
|
26
|
-
return withBase(props.src, useRuntimeConfig().app.baseURL)
|
|
27
|
-
|
|
28
|
-
return props.src
|
|
29
|
-
})
|
|
30
|
-
</script>
|
|
31
|
-
|
|
32
|
-
<template>
|
|
33
|
-
<img :src="refinedSrc" :alt="alt" :width="width" :height="height">
|
|
34
|
-
</template>
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { onKeyStroke, useFocus, useMagicKeys } from '@vueuse/core'
|
|
3
|
-
import { useFuse } from '@vueuse/integrations/useFuse'
|
|
4
|
-
|
|
5
|
-
const search = ref('')
|
|
6
|
-
const { allLinks } = useNav()
|
|
7
|
-
const tags = allLinks.flatMap(item => item.tags)
|
|
8
|
-
const matchingTag = computed(() => {
|
|
9
|
-
if (search.value.length < 2)
|
|
10
|
-
return null
|
|
11
|
-
return tags.find(tag => tag.toLowerCase().startsWith(search.value.toLowerCase()))
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
// search results and popular results
|
|
15
|
-
const { results } = useFuse(search, allLinks, {
|
|
16
|
-
fuseOptions: { keys: ['label', 'tags'], includeScore: true, distance: 3 },
|
|
17
|
-
resultLimit: 12,
|
|
18
|
-
})
|
|
19
|
-
const defaultResults = [
|
|
20
|
-
'Button',
|
|
21
|
-
'Menu',
|
|
22
|
-
'Drawer',
|
|
23
|
-
'Tabs',
|
|
24
|
-
'Dropdown',
|
|
25
|
-
].map(label => allLinks.find(item => item.label === label)!).map(item => ({ item }))
|
|
26
|
-
const eitherResults = computed(() => {
|
|
27
|
-
if (results.value.length === 0)
|
|
28
|
-
return defaultResults
|
|
29
|
-
return results.value
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
// Open menu when searchbox is focused
|
|
33
|
-
const isMenuOpen = ref(false)
|
|
34
|
-
const searchbox = ref()
|
|
35
|
-
const { focused } = useFocus(searchbox)
|
|
36
|
-
watch(focused, (val) => {
|
|
37
|
-
if (val) {
|
|
38
|
-
isMenuOpen.value = val
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
setTimeout(() => {
|
|
42
|
-
isMenuOpen.value = val
|
|
43
|
-
}, 100)
|
|
44
|
-
}
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
// track the highlighted index in the list
|
|
48
|
-
const highlightedIndex = ref(0)
|
|
49
|
-
const highlightedItem = computed(() => {
|
|
50
|
-
return eitherResults.value[highlightedIndex.value].item
|
|
51
|
-
})
|
|
52
|
-
// when results change, reset the highlighted index
|
|
53
|
-
watch(eitherResults, () => {
|
|
54
|
-
highlightedIndex.value = 0
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
// meta|ctrl+k --> focus the searchbox
|
|
58
|
-
const { meta, control } = useMagicKeys()
|
|
59
|
-
onKeyStroke('k', () => {
|
|
60
|
-
if (meta.value || control.value)
|
|
61
|
-
focused.value = !focused.value
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
// escape --> close the list
|
|
65
|
-
onKeyStroke('Escape', () => {
|
|
66
|
-
if (focused.value) {
|
|
67
|
-
if (search.value === '') {
|
|
68
|
-
focused.value = false
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
search.value = ''
|
|
72
|
-
highlightedIndex.value = 0
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
// menu click --> close the list
|
|
78
|
-
function handleMenuClick() {
|
|
79
|
-
focused.value = false
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// enter --> navigate to highlighted item
|
|
83
|
-
function handleEnter() {
|
|
84
|
-
navigateTo(highlightedItem.value.to)
|
|
85
|
-
focused.value = false
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// arrow up --> highlighted previous item
|
|
89
|
-
function handleArrowUp() {
|
|
90
|
-
highlightedIndex.value = Math.max(highlightedIndex.value - 1, 0)
|
|
91
|
-
}
|
|
92
|
-
// arrow down --> highlight next item
|
|
93
|
-
function handleArrowDown() {
|
|
94
|
-
highlightedIndex.value = Math.min(highlightedIndex.value + 1, eitherResults.value.length - 1)
|
|
95
|
-
}
|
|
96
|
-
</script>
|
|
97
|
-
|
|
98
|
-
<template>
|
|
99
|
-
<Dropdown v-model:open="isMenuOpen" close-on-click-outside end>
|
|
100
|
-
<DropdownTarget class="block relative">
|
|
101
|
-
<Flex class="absolute z-10 top-0 bottom-0 pointer-events-none items-center pl-2">
|
|
102
|
-
<Icon name="heroicons-solid:search" class="w-5 h-5 opacity-60" aria-hidden="true" />
|
|
103
|
-
</Flex>
|
|
104
|
-
<TextInput
|
|
105
|
-
id="searchbox"
|
|
106
|
-
ref="searchbox"
|
|
107
|
-
v-model="search"
|
|
108
|
-
placeholder="Search"
|
|
109
|
-
name="search"
|
|
110
|
-
bordered
|
|
111
|
-
class="join-item max-w-[150px] md:max-w-none rounded-xl pl-8"
|
|
112
|
-
onfocus="this.select()"
|
|
113
|
-
@keypress.enter="handleEnter"
|
|
114
|
-
@keydown.arrow-up="handleArrowUp"
|
|
115
|
-
@keydown.arrow-down="handleArrowDown"
|
|
116
|
-
/>
|
|
117
|
-
<Flex
|
|
118
|
-
v-if="!focused" row
|
|
119
|
-
class="hidden lg:flex items-center flex-nowrap absolute top-0 bottom-0 right-0 pr-2 pointer-events-none opacity-60"
|
|
120
|
-
>
|
|
121
|
-
<Kbd xs>cmd</Kbd>
|
|
122
|
-
<Text xs class="relative bottom-px">
|
|
123
|
-
+
|
|
124
|
-
</Text>
|
|
125
|
-
<Kbd xs>k</Kbd>
|
|
126
|
-
</Flex>
|
|
127
|
-
</DropdownTarget>
|
|
128
|
-
<DropdownContent class="bg-base-100 shadow-xl rounded-xl border border-base-300 mt-2 w-full overflow-y-auto max-h-[75vh]" @click="handleMenuClick">
|
|
129
|
-
<Menu>
|
|
130
|
-
<MenuTitle v-if="!search.length">
|
|
131
|
-
Popular Components
|
|
132
|
-
</MenuTitle>
|
|
133
|
-
<MenuTitle v-if="search.length && results.length">
|
|
134
|
-
Search Results
|
|
135
|
-
</MenuTitle>
|
|
136
|
-
|
|
137
|
-
<MenuItem v-if="search.length && !results.length">
|
|
138
|
-
<span>No Results Found</span>
|
|
139
|
-
</MenuItem>
|
|
140
|
-
<template v-else-if="search.length">
|
|
141
|
-
<MenuItem v-for="(result, index) in results" :key="result.item.label" :active="index === highlightedIndex">
|
|
142
|
-
<NuxtLink :to="result.item.to">
|
|
143
|
-
{{ result.item.label }}
|
|
144
|
-
<Badge v-if="matchingTag && result.item.tags.includes(matchingTag)" warning sm>
|
|
145
|
-
{{ matchingTag }}
|
|
146
|
-
</Badge>
|
|
147
|
-
</NuxtLink>
|
|
148
|
-
</MenuItem>
|
|
149
|
-
</template>
|
|
150
|
-
<template v-else>
|
|
151
|
-
<MenuItem v-for="(result, index) in defaultResults" :key="result.item.label" :active="index === highlightedIndex">
|
|
152
|
-
<NuxtLink :to="result.item.to">
|
|
153
|
-
{{ result.item.label }}
|
|
154
|
-
</NuxtLink>
|
|
155
|
-
</MenuItem>
|
|
156
|
-
</template>
|
|
157
|
-
</Menu>
|
|
158
|
-
</DropdownContent>
|
|
159
|
-
</Dropdown>
|
|
160
|
-
</template>
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
<script setup>
|
|
2
|
-
const route = useRoute()
|
|
3
|
-
const { docsLinks, actions, dataDisplay, dataInput, layout, navigation, mockup } = useNav()
|
|
4
|
-
|
|
5
|
-
const drawerState = createDrawerState('docs')
|
|
6
|
-
|
|
7
|
-
watch(() => route.path, () => {
|
|
8
|
-
drawerState.isDrawerOpen = false
|
|
9
|
-
})
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<template>
|
|
13
|
-
<DrawerSide name="docs" class="border-r border-r-base-300/30 z-50">
|
|
14
|
-
<!-- Sidebar component, swap this element with another sidebar if you like -->
|
|
15
|
-
<div class="relative pt-4 menu w-80 bg-base-100 text-base-content">
|
|
16
|
-
<NuxtLink to="/" class="fixed">
|
|
17
|
-
<Logo class="ml-8 text-4xl text-base-content" />
|
|
18
|
-
</NuxtLink>
|
|
19
|
-
|
|
20
|
-
<div class="pb-12 pl-2 mt-12 overflow-y-auto">
|
|
21
|
-
<SidebarMenuSection
|
|
22
|
-
:links="docsLinks"
|
|
23
|
-
no-divider
|
|
24
|
-
class="pt-4"
|
|
25
|
-
/>
|
|
26
|
-
<SidebarMenuSection
|
|
27
|
-
title="Actions"
|
|
28
|
-
title-icon="mdi:cursor-default-click"
|
|
29
|
-
title-icon-classes="text-fuchsia-600 w-5 h-5"
|
|
30
|
-
:links="actions"
|
|
31
|
-
/>
|
|
32
|
-
<SidebarMenuSection
|
|
33
|
-
title="Data Display"
|
|
34
|
-
title-icon="ph:app-window-bold"
|
|
35
|
-
title-icon-classes="text-teal-600 w-5 h-5"
|
|
36
|
-
:links="dataDisplay"
|
|
37
|
-
/>
|
|
38
|
-
<SidebarMenuSection
|
|
39
|
-
title="Data Input"
|
|
40
|
-
title-icon="material-symbols:edit-square-outline"
|
|
41
|
-
title-icon-classes="text-red-600 w-5 h-5"
|
|
42
|
-
:links="dataInput"
|
|
43
|
-
/>
|
|
44
|
-
<SidebarMenuSection
|
|
45
|
-
title="Layout"
|
|
46
|
-
title-icon="ic:round-grid-view"
|
|
47
|
-
title-icon-classes="text-blue-600 w-5 h-5"
|
|
48
|
-
:links="layout"
|
|
49
|
-
/>
|
|
50
|
-
<SidebarMenuSection
|
|
51
|
-
title="Navigation"
|
|
52
|
-
title-icon="mdi:link-variant"
|
|
53
|
-
title-icon-classes="text-cyan-600 w-5 h-5"
|
|
54
|
-
:links="navigation"
|
|
55
|
-
/>
|
|
56
|
-
<SidebarMenuSection
|
|
57
|
-
title="Mockup"
|
|
58
|
-
title-icon="icon-park-outline:iphone"
|
|
59
|
-
title-icon-classes="text-lime-600 w-5 h-5"
|
|
60
|
-
:links="mockup"
|
|
61
|
-
/>
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
</DrawerSide>
|
|
65
|
-
</template>
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
interface Link {
|
|
3
|
-
label: string
|
|
4
|
-
to: string
|
|
5
|
-
pending: boolean
|
|
6
|
-
pendingDocs: boolean
|
|
7
|
-
icon?: string
|
|
8
|
-
}
|
|
9
|
-
defineProps<{
|
|
10
|
-
title?: string
|
|
11
|
-
titleIcon?: string
|
|
12
|
-
titleIconClasses?: string
|
|
13
|
-
links: Link[]
|
|
14
|
-
noDivider?: boolean
|
|
15
|
-
}>()
|
|
16
|
-
</script>
|
|
17
|
-
|
|
18
|
-
<template>
|
|
19
|
-
<Menu>
|
|
20
|
-
<li v-if="!noDivider" />
|
|
21
|
-
<MenuTitle v-if="titleIcon || title" class="flex flex-row items-center gap-3">
|
|
22
|
-
<Icon v-if="titleIcon" :name="titleIcon as string" :class="titleIconClasses as string" />
|
|
23
|
-
{{ title }}
|
|
24
|
-
</MenuTitle>
|
|
25
|
-
|
|
26
|
-
<MenuItem
|
|
27
|
-
v-for="link in links"
|
|
28
|
-
:key="link.label"
|
|
29
|
-
:class="{ 'opacity-30': link.pending }"
|
|
30
|
-
>
|
|
31
|
-
<NuxtLink :to="link.to" exact-active-class="active">
|
|
32
|
-
<Icon v-if="link.icon" :name="link.icon" class="w-5 h-5 mr-1" />
|
|
33
|
-
{{ link.label }}
|
|
34
|
-
<Icon v-if="link.pendingDocs" name="feather:file-text" class="ml-2" />
|
|
35
|
-
</NuxtLink>
|
|
36
|
-
</MenuItem>
|
|
37
|
-
</Menu>
|
|
38
|
-
</template>
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { LockClosedIcon } from '@heroicons/vue/solid'
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
components: {
|
|
6
|
-
LockClosedIcon,
|
|
7
|
-
},
|
|
8
|
-
}
|
|
9
|
-
</script>
|
|
10
|
-
|
|
11
|
-
<template>
|
|
12
|
-
<div class="flex items-center justify-center min-h-full px-4 py-12 sm:px-6 lg:px-8">
|
|
13
|
-
<div class="w-full max-w-md space-y-8">
|
|
14
|
-
<div>
|
|
15
|
-
<img
|
|
16
|
-
class="w-auto h-24 mx-auto invert"
|
|
17
|
-
src="https://avatars.githubusercontent.com/u/85031756"
|
|
18
|
-
alt="Feathers Cloud"
|
|
19
|
-
>
|
|
20
|
-
<h2 class="mt-6 text-3xl font-extrabold text-center text-gray-900">
|
|
21
|
-
Sign in to your account
|
|
22
|
-
</h2>
|
|
23
|
-
</div>
|
|
24
|
-
<div class="mt-8 space-y-6">
|
|
25
|
-
<a
|
|
26
|
-
type="button"
|
|
27
|
-
class="relative flex justify-center w-full px-4 py-2 text-sm font-medium text-white bg-indigo-600 border border-transparent rounded-md group hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
|
|
28
|
-
href="/api/auth/login"
|
|
29
|
-
>
|
|
30
|
-
<span class="absolute inset-y-0 left-0 flex items-center pl-3">
|
|
31
|
-
<LockClosedIcon
|
|
32
|
-
class="w-5 h-5 text-indigo-500 group-hover:text-indigo-400"
|
|
33
|
-
aria-hidden="true"
|
|
34
|
-
/>
|
|
35
|
-
</span>
|
|
36
|
-
Sign in
|
|
37
|
-
</a>
|
|
38
|
-
<div class="text-center">
|
|
39
|
-
or
|
|
40
|
-
<RouterLink to="/" class="text-blue-500">
|
|
41
|
-
Return to Home
|
|
42
|
-
</RouterLink>
|
|
43
|
-
</div>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
</div>
|
|
47
|
-
</template>
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
const { toc, page } = useContent()
|
|
3
|
-
const pageRoute = useRoute()
|
|
4
|
-
|
|
5
|
-
function checkActive(hash: string) {
|
|
6
|
-
return pageRoute.hash === hash ? 'active' : null
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
function toTop() {
|
|
10
|
-
window.scrollTo({
|
|
11
|
-
top: 0,
|
|
12
|
-
behavior: 'smooth',
|
|
13
|
-
})
|
|
14
|
-
setTimeout(() => {
|
|
15
|
-
window.location.hash = ''
|
|
16
|
-
}, 600)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function toBottom() {
|
|
20
|
-
window.scrollTo({
|
|
21
|
-
top: document.body.scrollHeight,
|
|
22
|
-
behavior: 'smooth',
|
|
23
|
-
})
|
|
24
|
-
}
|
|
25
|
-
</script>
|
|
26
|
-
|
|
27
|
-
<template>
|
|
28
|
-
<Flex col>
|
|
29
|
-
<Menu v-if="toc?.links?.length" class="menu-sm md:menu-xs xl:menu-sm">
|
|
30
|
-
<MenuTitle>Table of Contents</MenuTitle>
|
|
31
|
-
<MenuItem>
|
|
32
|
-
<NuxtLink href="#" custom>
|
|
33
|
-
<template #default="{ route }">
|
|
34
|
-
<a
|
|
35
|
-
class="flex flex-row items-center justify-between font-semibold bg-neutral/30"
|
|
36
|
-
:class="checkActive(route.hash)"
|
|
37
|
-
@click="toTop"
|
|
38
|
-
>
|
|
39
|
-
{{ page.title }}
|
|
40
|
-
<Icon name="feather:arrow-up" class="text-base" />
|
|
41
|
-
</a>
|
|
42
|
-
</template>
|
|
43
|
-
</NuxtLink>
|
|
44
|
-
</MenuItem>
|
|
45
|
-
<Menu>
|
|
46
|
-
<MenuItem v-for="item in toc.links" :key="item.id">
|
|
47
|
-
<NuxtLink :href="`#${item.id}`" custom>
|
|
48
|
-
<template #default="{ route, navigate }">
|
|
49
|
-
<a :class="checkActive(route.hash)" @click="navigate">
|
|
50
|
-
{{ item.text }}
|
|
51
|
-
</a>
|
|
52
|
-
</template>
|
|
53
|
-
</NuxtLink>
|
|
54
|
-
<Menu v-if="item.children?.length">
|
|
55
|
-
<MenuItem v-for="child in item.children" :key="child.id">
|
|
56
|
-
<NuxtLink :href="`#${child.id}`" custom>
|
|
57
|
-
<template #default="{ route, navigate }">
|
|
58
|
-
<a :class="checkActive(route.hash)" @click="navigate">
|
|
59
|
-
{{ child.text }}
|
|
60
|
-
</a>
|
|
61
|
-
</template>
|
|
62
|
-
</NuxtLink>
|
|
63
|
-
</MenuItem>
|
|
64
|
-
</Menu>
|
|
65
|
-
</MenuItem>
|
|
66
|
-
<MenuItem>
|
|
67
|
-
<a
|
|
68
|
-
class="flex flex-row items-center justify-between hover:bg-accent/25 mt-6"
|
|
69
|
-
@click="toBottom"
|
|
70
|
-
>
|
|
71
|
-
scroll to bottom
|
|
72
|
-
<Icon name="feather:arrow-down" class="text-base" />
|
|
73
|
-
|
|
74
|
-
</a>
|
|
75
|
-
</MenuItem>
|
|
76
|
-
</Menu>
|
|
77
|
-
</Menu>
|
|
78
|
-
<!-- <pre class="text-xs">{{ page }}</pre> -->
|
|
79
|
-
</Flex>
|
|
80
|
-
</template>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
const props = defineProps<{
|
|
3
|
-
text: string
|
|
4
|
-
}>()
|
|
5
|
-
|
|
6
|
-
const color = computed(() => {
|
|
7
|
-
if (props.text === 'boolean')
|
|
8
|
-
return 'info'
|
|
9
|
-
return 'warning'
|
|
10
|
-
})
|
|
11
|
-
</script>
|
|
12
|
-
|
|
13
|
-
<template>
|
|
14
|
-
<Badge :color="color">
|
|
15
|
-
{{ text }}
|
|
16
|
-
</Badge>
|
|
17
|
-
</template>
|