fulldev-ui 0.5.0-beta.0 → 0.5.0-beta.10
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/CONTRIBUTING.md +10 -4
- package/astro.config.ts +4 -11
- package/package.json +5 -3
- package/pnpm-lock.yaml +6400 -0
- package/src/blocks/Article.astro +31 -12
- package/src/blocks/Banner.astro +2 -1
- package/src/blocks/Contact.astro +7 -30
- package/src/blocks/Excerpt.astro +14 -0
- package/src/blocks/Intro.astro +3 -1
- package/src/blocks/Product.astro +55 -22
- package/src/components/Card.astro +11 -5
- package/src/components/Cart.astro +38 -0
- package/src/components/CartForm.astro +121 -0
- package/src/components/CartList.astro +134 -0
- package/src/components/CartSummary.astro +147 -0
- package/src/components/Drawer.astro +128 -52
- package/src/components/Footer.astro +6 -3
- package/src/components/Form.astro +49 -0
- package/src/components/Header.astro +19 -14
- package/src/components/Image.astro +0 -1
- package/src/components/Input.astro +6 -0
- package/src/components/Menu.astro +56 -0
- package/src/components/Price.astro +7 -11
- package/src/components/Search.astro +1 -4
- package/src/components/Section.astro +2 -1
- package/src/components/Sidebar.astro +66 -105
- package/src/components/Social.astro +7 -0
- package/src/components/ThemeSelect.astro +3 -0
- package/src/components/Toc.astro +33 -94
- package/src/components/docs/PropsTable.astro +2 -2
- package/src/components/experimental/Form.astro +31 -5
- package/src/components/experimental/Gallery.astro +50 -126
- package/src/components/experimental/Prose.astro +32 -0
- package/src/content/pages/base/select.mdx +0 -8
- package/src/content/pages/base/textarea.mdx +0 -5
- package/src/content/pages/blocks/_product.mdx +73 -2
- package/src/content/pages/index.mdx +0 -3
- package/src/content/pages/layouts/_layout.mdx +14 -0
- package/src/content/pages/layouts/docslayout.mdx +10 -1
- package/src/content/pages/overview/components.mdx +5 -0
- package/src/content/pages/overview/content-collections.mdx +139 -0
- package/src/content/pages/overview/installation.mdx +25 -26
- package/src/content/pages/overview/introduction.mdx +16 -10
- package/src/content/pages/overview/theming.mdx +69 -0
- package/src/content/pages/schemas/page.mdx +6 -0
- package/src/content/presets/base.yml +57 -44
- package/src/content/presets/blocks.yml +0 -3
- package/src/content/presets/docs.yml +3 -62
- package/src/env.d.ts +1 -1
- package/src/integration/index.ts +49 -33
- package/src/layouts/DocsLayout.astro +23 -35
- package/src/layouts/Layout.astro +37 -21
- package/src/layouts/OverviewLayout.astro +17 -10
- package/src/layouts/PostLayout.astro +7 -7
- package/src/layouts/ProductLayout.astro +5 -2
- package/src/schemas/components/footer.ts +1 -0
- package/src/schemas/components/header.ts +1 -0
- package/src/schemas/components/menu.ts +13 -0
- package/src/schemas/components/sidebar.ts +15 -0
- package/src/schemas/components/toc.ts +3 -0
- package/src/schemas/pageSchema.ts +72 -34
- package/src/schemas/presetSchema.ts +2 -28
- package/src/schemas/utils/navigation.ts +6 -51
- package/src/stores/cart.ts +23 -0
- package/src/utils/cart.ts +36 -0
- package/src/utils/{getChildPages.ts → getFolderChildren.ts} +3 -1
- package/src/utils/{getCategoryPages.ts → getReferenceChildren.ts} +6 -3
- package/tsconfig.json +1 -3
- package/.astro/assets.mjs +0 -1
- package/.astro/astro/content.d.ts +0 -547
- package/.astro/collections/blocks.schema.json +0 -851
- package/.astro/collections/collections.json +0 -63
- package/.astro/collections/images.schema.json +0 -22
- package/.astro/collections/layouts.schema.json +0 -826
- package/.astro/collections/pages.schema.json +0 -568
- package/.astro/collections/presets.schema.json +0 -489
- package/.astro/collections/records.schema.json +0 -822
- package/.astro/collections/settings.schema.json +0 -822
- package/.astro/data-store.json +0 -1
- package/.astro/modules.mjs +0 -1
- package/.astro/settings.json +0 -5
- package/.astro/types.d.ts +0 -2
- package/src/components/experimental/GalleryVertical.astro +0 -161
- package/src/content/pages/layouts/layout.mdx +0 -21
- package/src/content/pages/layouts/pagelayout.mdx +0 -21
- package/src/content/pages/overview/content-layer.mdx +0 -128
- package/src/content/pages/overview/customization.mdx +0 -83
- package/src/layouts/ContentLayout.astro +0 -16
- package/src/layouts/PageLayout.astro +0 -15
- /package/src/schemas/utils/{categories.ts → parents.ts} +0 -0
- /package/src/types/{global-props.d.ts → global-props.ts} +0 -0
|
@@ -1,180 +1,104 @@
|
|
|
1
1
|
---
|
|
2
|
-
import
|
|
2
|
+
import Element from 'fulldev-ui/components/Element.astro'
|
|
3
3
|
import Image from 'fulldev-ui/components/Image.astro'
|
|
4
4
|
|
|
5
|
-
const { images
|
|
5
|
+
const { images } = Astro.props
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<script>
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
carousel &&
|
|
31
|
-
smallImages?.forEach((image, i) => {
|
|
32
|
-
image.addEventListener('click', () => {
|
|
33
|
-
const imageWidth = (carousel as HTMLElement).offsetWidth
|
|
34
|
-
carousel.scrollTo({
|
|
35
|
-
left: i * imageWidth,
|
|
36
|
-
behavior: 'smooth',
|
|
9
|
+
const setupGallery = (document: Document) => {
|
|
10
|
+
const galleries = document.querySelectorAll('.gallery')
|
|
11
|
+
|
|
12
|
+
galleries.forEach((gallery) => {
|
|
13
|
+
const carousel = gallery.querySelector('.large-carousel')
|
|
14
|
+
const smallImages = gallery.querySelectorAll('.small-image')
|
|
15
|
+
|
|
16
|
+
carousel &&
|
|
17
|
+
smallImages?.forEach((image, i) => {
|
|
18
|
+
image.addEventListener('click', () => {
|
|
19
|
+
const largeImages = carousel.querySelectorAll('.large-image')
|
|
20
|
+
if (largeImages[i]) {
|
|
21
|
+
largeImages[i].scrollIntoView({
|
|
22
|
+
behavior: 'smooth',
|
|
23
|
+
block: 'nearest',
|
|
24
|
+
inline: 'start',
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
})
|
|
37
28
|
})
|
|
38
|
-
})
|
|
39
29
|
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
setupGallery(document)
|
|
33
|
+
|
|
34
|
+
document.addEventListener('astro:before-swap', (event) => {
|
|
35
|
+
setupGallery(event.newDocument)
|
|
36
|
+
})
|
|
40
37
|
</script>
|
|
41
38
|
|
|
42
|
-
<
|
|
43
|
-
class
|
|
44
|
-
'full',
|
|
45
|
-
'gallery',
|
|
46
|
-
{
|
|
47
|
-
[`direction-${direction}`]: direction,
|
|
48
|
-
},
|
|
49
|
-
]}
|
|
50
|
-
>
|
|
51
|
-
<div class="large-container">
|
|
52
|
-
<div class="large-carousel">
|
|
53
|
-
{
|
|
54
|
-
images?.map((image: any) => (
|
|
55
|
-
<Image
|
|
56
|
-
class="large-image"
|
|
57
|
-
src={image}
|
|
58
|
-
/>
|
|
59
|
-
))
|
|
60
|
-
}
|
|
61
|
-
</div>
|
|
39
|
+
<Element class:list={['gallery']}>
|
|
40
|
+
<Element class="large-carousel">
|
|
62
41
|
{
|
|
63
|
-
images?.
|
|
64
|
-
<
|
|
65
|
-
class="
|
|
66
|
-
|
|
42
|
+
images?.map((image: any) => (
|
|
43
|
+
<Image
|
|
44
|
+
class="large-image"
|
|
45
|
+
{...(typeof image === 'string' ? { src: image } : image)}
|
|
67
46
|
/>
|
|
68
|
-
)
|
|
47
|
+
))
|
|
69
48
|
}
|
|
70
|
-
</
|
|
71
|
-
<
|
|
49
|
+
</Element>
|
|
50
|
+
<Element class="small-carousel">
|
|
72
51
|
{
|
|
73
52
|
images?.length > 1 &&
|
|
74
53
|
images.map((image: any) => (
|
|
75
54
|
<Image
|
|
76
55
|
class="small-image"
|
|
77
|
-
|
|
56
|
+
{...(typeof image === 'string' ? { src: image } : image)}
|
|
78
57
|
/>
|
|
79
58
|
))
|
|
80
59
|
}
|
|
81
|
-
</
|
|
82
|
-
</
|
|
60
|
+
</Element>
|
|
61
|
+
</Element>
|
|
83
62
|
|
|
84
63
|
<style is:global lang="scss">
|
|
85
64
|
.gallery {
|
|
86
65
|
display: flex;
|
|
87
66
|
position: relative;
|
|
88
|
-
column-gap: var(--space-4);
|
|
89
|
-
row-gap: var(--space-1);
|
|
90
67
|
flex-direction: column;
|
|
91
|
-
|
|
92
|
-
@media (min-width: 1024px) {
|
|
93
|
-
flex-direction: row-reverse;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.large-container {
|
|
97
|
-
display: flex;
|
|
98
|
-
justify-content: space-between;
|
|
99
|
-
align-items: center;
|
|
100
|
-
|
|
101
|
-
&:hover .icon {
|
|
102
|
-
opacity: 1;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.icon {
|
|
106
|
-
position: absolute;
|
|
107
|
-
right: var(--space-3);
|
|
108
|
-
opacity: 0.5;
|
|
109
|
-
animation: swipe-icon 1.6s ease-in-out infinite;
|
|
110
|
-
transition: opacity 0.2s ease-in-out;
|
|
111
|
-
font-size: calc(var(--text-2) * 1.7);
|
|
112
|
-
|
|
113
|
-
@media (min-width: 1024px) {
|
|
114
|
-
display: none;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
@keyframes swipe-icon {
|
|
119
|
-
0%,
|
|
120
|
-
100% {
|
|
121
|
-
right: var(--space-3);
|
|
122
|
-
}
|
|
123
|
-
50% {
|
|
124
|
-
right: calc(var(--space-3) * 2);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
68
|
+
gap: var(--space-1) var(--space-4);
|
|
128
69
|
|
|
129
70
|
.small-carousel,
|
|
130
71
|
.large-carousel {
|
|
131
|
-
--column-width: 100%;
|
|
132
72
|
display: flex;
|
|
133
73
|
position: relative;
|
|
134
|
-
align-items:
|
|
74
|
+
align-items: center;
|
|
135
75
|
gap: var(--space-4);
|
|
136
|
-
|
|
137
76
|
box-sizing: border-box;
|
|
138
77
|
padding-bottom: var(--space-4);
|
|
139
78
|
width: 100%;
|
|
140
|
-
overflow
|
|
79
|
+
overflow: auto;
|
|
141
80
|
scroll-behavior: smooth;
|
|
142
81
|
scroll-snap-type: x mandatory;
|
|
143
82
|
|
|
144
|
-
> .
|
|
83
|
+
> .image {
|
|
145
84
|
flex-grow: 0;
|
|
146
85
|
flex-shrink: 0;
|
|
147
86
|
width: var(--column-width);
|
|
148
87
|
scroll-snap-align: center;
|
|
149
88
|
}
|
|
89
|
+
}
|
|
150
90
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
margin-left: calc(var(--inner-x) * -1);
|
|
154
|
-
padding-right: var(--inner-x);
|
|
155
|
-
padding-left: var(--inner-x);
|
|
156
|
-
width: calc(100% + var(--inner-x) * 2);
|
|
157
|
-
}
|
|
91
|
+
.large-carousel {
|
|
92
|
+
--column-width: 100%;
|
|
158
93
|
}
|
|
159
94
|
|
|
160
95
|
.small-carousel {
|
|
161
96
|
--column-width: var(--space-7);
|
|
162
97
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
flex-direction: column;
|
|
167
|
-
width: 40%;
|
|
98
|
+
.image:hover {
|
|
99
|
+
opacity: 0.8;
|
|
100
|
+
cursor: pointer;
|
|
168
101
|
}
|
|
169
102
|
}
|
|
170
|
-
|
|
171
|
-
.small-image,
|
|
172
|
-
.large-image {
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.small-image:hover {
|
|
176
|
-
opacity: 0.8;
|
|
177
|
-
cursor: pointer;
|
|
178
|
-
}
|
|
179
103
|
}
|
|
180
104
|
</style>
|
|
@@ -151,6 +151,38 @@ const { as = 'div', ...rest } = Astro.props
|
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
+
ul,
|
|
155
|
+
ol {
|
|
156
|
+
display: flex;
|
|
157
|
+
flex-direction: column;
|
|
158
|
+
margin: var(--space-4) 0;
|
|
159
|
+
padding-left: var(--space-5);
|
|
160
|
+
color: var(--color-11);
|
|
161
|
+
font-size: var(--text-2);
|
|
162
|
+
line-height: 1.625;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
ul {
|
|
166
|
+
list-style-type: disc;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
ol {
|
|
170
|
+
list-style-type: decimal;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
li {
|
|
174
|
+
align-items: center;
|
|
175
|
+
margin-bottom: var(--space-2);
|
|
176
|
+
max-width: calc(var(--space-4) * 44);
|
|
177
|
+
color: var(--color-11);
|
|
178
|
+
font-size: var(--text-2);
|
|
179
|
+
line-height: 1.625;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
li:last-child {
|
|
183
|
+
margin-bottom: 0;
|
|
184
|
+
}
|
|
185
|
+
|
|
154
186
|
p code {
|
|
155
187
|
background-color: var(--base-12);
|
|
156
188
|
padding: 0 var(--space-1);
|
|
@@ -13,8 +13,79 @@ import Product from 'fulldev-ui/blocks/Product.astro'
|
|
|
13
13
|
heading="Basic Tee"
|
|
14
14
|
price={48}
|
|
15
15
|
rating={5}
|
|
16
|
-
image="
|
|
17
|
-
|
|
16
|
+
image="placeholder-landscape.webp"
|
|
17
|
+
form={{ submit: 'Add to cart' }}
|
|
18
|
+
description="Oversized white tee made of 100% cotton."
|
|
19
|
+
list={[
|
|
20
|
+
'Shortsleeve',
|
|
21
|
+
'Ribbed collar',
|
|
22
|
+
'Runs large',
|
|
23
|
+
'Unisex',
|
|
24
|
+
'Material: 100% cotton',
|
|
25
|
+
'Imported',
|
|
26
|
+
]}
|
|
27
|
+
/>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```astro live
|
|
31
|
+
---
|
|
32
|
+
import Product from 'fulldev-ui/blocks/Product.astro'
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
<Product
|
|
36
|
+
heading="Basic Tee"
|
|
37
|
+
price={48}
|
|
38
|
+
rating={5}
|
|
39
|
+
images={[
|
|
40
|
+
'/images/blocks/colleagues.png',
|
|
41
|
+
'/images/blocks/content.png',
|
|
42
|
+
'/images/blocks/cta.png',
|
|
43
|
+
'/images/blocks/features.png',
|
|
44
|
+
'/images/blocks/footer.png',
|
|
45
|
+
'/images/blocks/header.png',
|
|
46
|
+
'/images/blocks/hero.png',
|
|
47
|
+
'/images/blocks/intro.png',
|
|
48
|
+
'/images/blocks/posts.png',
|
|
49
|
+
'/images/blocks/prices.png',
|
|
50
|
+
'/images/blocks/reviews.png',
|
|
51
|
+
]}
|
|
52
|
+
form={{ submit: 'Add to cart' }}
|
|
53
|
+
description="Oversized white tee made of 100% cotton."
|
|
54
|
+
list={[
|
|
55
|
+
'Shortsleeve',
|
|
56
|
+
'Ribbed collar',
|
|
57
|
+
'Runs large',
|
|
58
|
+
'Unisex',
|
|
59
|
+
'Material: 100% cotton',
|
|
60
|
+
'Imported',
|
|
61
|
+
]}
|
|
62
|
+
/>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```astro live
|
|
66
|
+
---
|
|
67
|
+
import Product from 'fulldev-ui/blocks/Product.astro'
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
<Product
|
|
71
|
+
heading="Basic Tee"
|
|
72
|
+
price={48}
|
|
73
|
+
rating={5}
|
|
74
|
+
images={[
|
|
75
|
+
'/images/blocks/colleagues.png',
|
|
76
|
+
'/images/blocks/content.png',
|
|
77
|
+
'/images/blocks/cta.png',
|
|
78
|
+
'/images/blocks/features.png',
|
|
79
|
+
'/images/blocks/footer.png',
|
|
80
|
+
'/images/blocks/header.png',
|
|
81
|
+
'/images/blocks/hero.png',
|
|
82
|
+
'/images/blocks/intro.png',
|
|
83
|
+
'/images/blocks/posts.png',
|
|
84
|
+
'/images/blocks/prices.png',
|
|
85
|
+
'/images/blocks/reviews.png',
|
|
86
|
+
]}
|
|
87
|
+
gallery="vertical"
|
|
88
|
+
form={{ submit: 'Add to cart' }}
|
|
18
89
|
description="Oversized white tee made of 100% cotton."
|
|
19
90
|
list={[
|
|
20
91
|
'Shortsleeve',
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
presets: [docs]
|
|
3
|
+
|
|
4
|
+
title: Layout
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
import Layout from 'fulldev-ui/layouts/Layout.astro?raw'
|
|
8
|
+
import { Code } from 'astro:components'
|
|
9
|
+
|
|
10
|
+
# Layout
|
|
11
|
+
|
|
12
|
+
The Layout component is used to wrap the content of a page. It provides a structured template for your website.
|
|
13
|
+
|
|
14
|
+
<Code code={Layout} lang="astro" />
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
presets: [docs
|
|
2
|
+
presets: [docs]
|
|
3
3
|
|
|
4
4
|
title: DocsLayout
|
|
5
5
|
---
|
|
6
|
+
|
|
7
|
+
import Layout from 'fulldev-ui/layouts/DocsLayout.astro?raw'
|
|
8
|
+
import { Code } from 'astro:components'
|
|
9
|
+
|
|
10
|
+
# DocsLayout
|
|
11
|
+
|
|
12
|
+
The DocsLayout component is used to wrap the content of a page in a sidebar and a main content area and table of contents.
|
|
13
|
+
|
|
14
|
+
<Code code={Layout} lang="astro" />
|
|
@@ -68,3 +68,8 @@ import Button from 'fulldev-ui/components/Button.astro'
|
|
|
68
68
|
|
|
69
69
|
{/* This will render a button */}
|
|
70
70
|
<Button if={true} />
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Overriding Components
|
|
74
|
+
|
|
75
|
+
You can override components by creating a new component with the same name as one from the library in the **src/components** directory and adding your custom code. This also works for blocks and layouts.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
presets: [docs]
|
|
3
|
+
title: Content Collections
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
import Link from 'fulldev-ui/components/Link.astro'
|
|
7
|
+
|
|
8
|
+
# Content Collections
|
|
9
|
+
|
|
10
|
+
We utilize <Link href="https://docs.astro.build/docs/guides/content-collections/">Astro's Content Layer</Link> to create entire websites using just content files and our components.
|
|
11
|
+
|
|
12
|
+
## Starter Template
|
|
13
|
+
|
|
14
|
+
This is the recommended way to get started with our content layer integration. We've created a <Link href="https://github.com/fulldotdev/starter/tree/main">starter template</Link> with examples of everything you need to get started.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pnpm create astro@latest -- --template fulldotdev/starter
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Manual Setup
|
|
21
|
+
|
|
22
|
+
To get started with the manual setup, you need to install the <Link href="/overview/installation/">integration</Link> and add `injectRoutes: true` to your `astro.config.ts` file, see <Link href="#type-safe-frontmatter">frontmatter</Link> below for more information on how this generates a site using content files.
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { defineConfig } from 'astro/config'
|
|
26
|
+
import fulldev from 'fulldev-ui/integration'
|
|
27
|
+
|
|
28
|
+
// https://astro.build/config
|
|
29
|
+
export default defineConfig({
|
|
30
|
+
integrations: [
|
|
31
|
+
fulldev({
|
|
32
|
+
// other options
|
|
33
|
+
injectRoutes: true,
|
|
34
|
+
}),
|
|
35
|
+
],
|
|
36
|
+
})
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Type-safe frontmatter
|
|
40
|
+
|
|
41
|
+
Each file has a few frontmatter objects that are important to know about. Seo has priority over title and description, however title and description is used in multiple places like a card.
|
|
42
|
+
|
|
43
|
+
```yml
|
|
44
|
+
---
|
|
45
|
+
preset: [docs] # Applies the configuration from src/content/presets/docs.yml
|
|
46
|
+
component: DocsLayout
|
|
47
|
+
|
|
48
|
+
seo:
|
|
49
|
+
title: Page Title
|
|
50
|
+
description: This is my page description
|
|
51
|
+
image: /image.jpg # Open Graph Image
|
|
52
|
+
|
|
53
|
+
# Information on the page, this is used in places like card, sidebar, etc.
|
|
54
|
+
title: Page Title
|
|
55
|
+
description: This is my page description
|
|
56
|
+
|
|
57
|
+
sections: # Here you generate the page by adding a component and passing props
|
|
58
|
+
- component: Hero
|
|
59
|
+
heading: Page Title
|
|
60
|
+
text: This is my page description
|
|
61
|
+
buttons:
|
|
62
|
+
- text: Button
|
|
63
|
+
color: brand
|
|
64
|
+
href: /
|
|
65
|
+
- text: Button
|
|
66
|
+
href: /
|
|
67
|
+
---
|
|
68
|
+
# This is the prose, you can use markdown here
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
For all objects avaliable in the Content Layer, see the <Link href="https://ui.full.dev/schemas/page/">schemas</Link>.
|
|
72
|
+
|
|
73
|
+
### Presets
|
|
74
|
+
|
|
75
|
+
Presets are configuration files that can be used to set the default values for a page. They are located in the **src/content/presets** directory and you can use them by adding the `preset` property to the frontmatter of a page or add a `basePreset` to the integration setup in the `astro.config.ts` file.
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
import { defineConfig } from 'astro/config'
|
|
79
|
+
import fulldev from 'fulldev-ui/integration'
|
|
80
|
+
|
|
81
|
+
// https://astro.build/config
|
|
82
|
+
export default defineConfig({
|
|
83
|
+
integrations: [
|
|
84
|
+
fulldev({
|
|
85
|
+
// other options
|
|
86
|
+
basePreset: 'base', // Applies the configuration from src/content/presets/base.yml to every page
|
|
87
|
+
}),
|
|
88
|
+
],
|
|
89
|
+
})
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## i18n
|
|
93
|
+
|
|
94
|
+
Getting started with i18n is easy, you can easily add additional languages by creating a new folder named after a language code in the **content/pages** directory and adding your content files in the new language.
|
|
95
|
+
|
|
96
|
+
These pages are just as static as the others however you can merge them with the default language by adding the `i18n` key to the frontmatter.
|
|
97
|
+
|
|
98
|
+
By merging pages you only need to specify the content that is different for the new language. Things like images do not need to be repeated in these new files. See example:
|
|
99
|
+
|
|
100
|
+
content/pages/index.md:
|
|
101
|
+
|
|
102
|
+
```md
|
|
103
|
+
---
|
|
104
|
+
sections:
|
|
105
|
+
- component: Hero
|
|
106
|
+
image: /image.webp
|
|
107
|
+
heading: Page Title
|
|
108
|
+
text: This is my page description
|
|
109
|
+
---
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
content/pages/nl/index.md:
|
|
113
|
+
|
|
114
|
+
```md
|
|
115
|
+
---
|
|
116
|
+
i18n: index
|
|
117
|
+
|
|
118
|
+
sections:
|
|
119
|
+
- component: Hero
|
|
120
|
+
heading: Page Title
|
|
121
|
+
text: This is my page description
|
|
122
|
+
---
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
These return the same results
|
|
126
|
+
|
|
127
|
+
### Example structure
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
.
|
|
131
|
+
├── src/
|
|
132
|
+
│ ├── content/
|
|
133
|
+
│ │ ├── pages/
|
|
134
|
+
│ │ │ ├── index.md
|
|
135
|
+
│ │ │ ├── nl/
|
|
136
|
+
│ │ │ │ └── index.md
|
|
137
|
+
│ │ │ └── de/
|
|
138
|
+
│ │ │ │ └── index.md
|
|
139
|
+
```
|
|
@@ -7,7 +7,21 @@ import Link from 'fulldev-ui/components/Link.astro'
|
|
|
7
7
|
|
|
8
8
|
# Installation
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
You can add fulldev-ui to your project, or use the starter template.
|
|
11
|
+
|
|
12
|
+
## Add to existing project
|
|
13
|
+
|
|
14
|
+
### Automatic setup
|
|
15
|
+
|
|
16
|
+
Use the astro add command to automatically install the dependencies and add the integration.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx astro add fulldev-ui
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Manual installation
|
|
23
|
+
|
|
24
|
+
Install fulldev-ui with your favorite package manager.
|
|
11
25
|
|
|
12
26
|
```bash
|
|
13
27
|
pnpm i fulldev-ui
|
|
@@ -19,36 +33,21 @@ yarn add fulldev-ui
|
|
|
19
33
|
npm i fulldev-ui
|
|
20
34
|
```
|
|
21
35
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
To install the integration, import it in your `astro.config.ts` file.
|
|
25
|
-
You can optionally add a custom css file and define custom colors and other theming options, see the <Link href="/overview/customization/">customization documentation</Link> for more information.
|
|
26
|
-
|
|
27
|
-
To get started with the content layer, see the <Link href="/overview/content-layer/#manual-setup">content layer documentation</Link>.
|
|
36
|
+
Then setup the integration in your `astro.config.ts` file.
|
|
28
37
|
|
|
29
38
|
```ts
|
|
30
39
|
import { defineConfig } from 'astro/config'
|
|
31
40
|
import fulldev from 'fulldev-ui/integration'
|
|
32
41
|
|
|
33
|
-
// https://astro.build/config
|
|
34
42
|
export default defineConfig({
|
|
35
|
-
integrations: [
|
|
36
|
-
fulldev({
|
|
37
|
-
css: '/src/css/custom.css',
|
|
38
|
-
colors: {
|
|
39
|
-
theme: 'dark',
|
|
40
|
-
dark: {
|
|
41
|
-
background: '#111110',
|
|
42
|
-
base: '#6F6D66',
|
|
43
|
-
brand: '#F50',
|
|
44
|
-
},
|
|
45
|
-
light: {
|
|
46
|
-
background: '#EEEEEC',
|
|
47
|
-
base: '#6F6D66',
|
|
48
|
-
brand: '#F50',
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
}),
|
|
52
|
-
],
|
|
43
|
+
integrations: [fulldev()],
|
|
53
44
|
})
|
|
54
45
|
```
|
|
46
|
+
|
|
47
|
+
## Using the starter template
|
|
48
|
+
|
|
49
|
+
The easiest way to get started is to use the [starter template](https://github.com/fulldotdev/starter).
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
pnpm create astro@latest -- --template fulldotdev/starter
|
|
53
|
+
```
|
|
@@ -5,20 +5,26 @@ title: Introduction
|
|
|
5
5
|
|
|
6
6
|
# Introduction
|
|
7
7
|
|
|
8
|
-
Fulldev UI
|
|
8
|
+
**Fulldev UI** is a full-featured UI library and website theme built on the [Astro](https://astro.build/) framework. Whether starting a new project or enhancing an existing one, this guide will help you get set up. For installation details, see the [installation guide](/getting-started/installation).
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## Why we built it
|
|
11
11
|
|
|
12
|
-
Fulldev UI
|
|
12
|
+
We built **Fulldev UI** after repeatedly encountering the same challenges in client projects, covering the core needs of content-focused websites. Initially created for [our own company](https://full.dev), we decided to open-source it for others to use.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
## Some features
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
- Vanilla HTML and CSS.
|
|
17
|
+
- Seamless integration with TailwindCSS and UnoCSS.
|
|
18
|
+
- Minimal JavaScript.
|
|
19
|
+
- Supports Astro's [Content Collections](https://docs.astro.build/en/guides/content-collections/).
|
|
20
|
+
- Customizable via CSS variables.
|
|
21
|
+
- Reusable components for pages and sections.
|
|
22
|
+
- Includes blocks like Hero, CTA, Features, etc.
|
|
23
|
+
- Page-building tools.
|
|
24
|
+
- And more...
|
|
17
25
|
|
|
18
|
-
|
|
26
|
+
## A word of caution
|
|
19
27
|
|
|
20
|
-
|
|
28
|
+
**Fulldev UI** includes a wide range of features, some still experimental. While a narrower focus would improve stability, we built it for flexibility in our projects.
|
|
21
29
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
Build entire websites using just content files like Markdown using our components, blocks and layouts.
|
|
30
|
+
This isn't just a single-purpose library; it's a framework for building blog, marketing, and portfolio websites—similar to how [Starlight](https://starlight.astro.build/) serves documentation. As it evolves, its focus will sharpen. In the meantime, feel free to use it and share feedback on [Discord](https://discord.gg/fulldev)!
|