fulldev-ui 0.6.0 → 0.6.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.
Files changed (40) hide show
  1. package/cloudcannon.config.yml +3 -0
  2. package/package.json +1 -1
  3. package/src/blocks/Compare1.astro +64 -0
  4. package/src/blocks/{_Contact1.astro → Contact1.astro} +41 -39
  5. package/src/blocks/Contact2.astro +98 -0
  6. package/src/blocks/Content1.astro +1 -0
  7. package/src/blocks/Content2.astro +1 -0
  8. package/src/blocks/Content3.astro +1 -0
  9. package/src/blocks/Content4.astro +9 -2
  10. package/src/blocks/Content5.astro +1 -0
  11. package/src/blocks/Content6.astro +2 -1
  12. package/src/blocks/Content7.astro +1 -0
  13. package/src/blocks/Content8.astro +1 -0
  14. package/src/blocks/Cta1.astro +3 -3
  15. package/src/blocks/Cta2.astro +1 -1
  16. package/src/blocks/Features1.astro +3 -2
  17. package/src/blocks/Features2.astro +3 -2
  18. package/src/blocks/Header.astro +1 -0
  19. package/src/blocks/Hero1.astro +2 -2
  20. package/src/blocks/Intro1.astro +3 -3
  21. package/src/blocks/JobCategory1.astro +5 -3
  22. package/src/blocks/Projects1.astro +10 -10
  23. package/src/components/Block.astro +2 -1
  24. package/src/components/Channel.astro +4 -0
  25. package/src/components/Field.astro +33 -0
  26. package/src/components/Fields.astro +20 -0
  27. package/src/components/Heading.astro +0 -1
  28. package/src/components/List.astro +37 -9
  29. package/src/components/Select.astro +1 -1
  30. package/src/components/Tagline.astro +6 -6
  31. package/src/components/Toc.astro +10 -6
  32. package/src/content/layouts/base.yml +3 -0
  33. package/src/content/pages/docs/components/list.mdx +11 -0
  34. package/src/content/pages/index.mdx +2 -2
  35. package/src/css/custom.css +4 -0
  36. package/src/integration/index.ts +1 -0
  37. package/src/layouts/Page.astro +1 -0
  38. package/src/schemas/block.ts +9 -0
  39. package/src/schemas/channel.ts +1 -0
  40. package/src/structures/Prose.astro +17 -9
@@ -80,6 +80,9 @@ _inputs:
80
80
  step: 0.1
81
81
  head:
82
82
  label: SEO / Settings
83
+ type: object
84
+ options:
85
+ empty_type: object
83
86
  head.title:
84
87
  label: SEO title
85
88
  comment: 50-60 characters
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fulldev-ui",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "A component library built for Astro",
5
5
  "homepage": "https://ui.full.dev",
6
6
  "bugs": "https://github.com/fulldotdev/ui/issues",
@@ -0,0 +1,64 @@
1
+ ---
2
+ import Button from 'fulldev-ui/components/Button.astro'
3
+ import Heading from 'fulldev-ui/components/Heading.astro'
4
+ import List from 'fulldev-ui/components/List.astro'
5
+ import Paragraph from 'fulldev-ui/components/Paragraph.astro'
6
+ import Tagline from 'fulldev-ui/components/Tagline.astro'
7
+ import type { BlockSchema } from 'fulldev-ui/schemas/block'
8
+ import Card from 'fulldev-ui/structures/Card.astro'
9
+ import Container from 'fulldev-ui/structures/Container.astro'
10
+ import Prose from 'fulldev-ui/structures/Prose.astro'
11
+ import Section from 'fulldev-ui/structures/Section.astro'
12
+ import Stack from 'fulldev-ui/structures/Stack.astro'
13
+
14
+ interface Props extends BlockSchema {}
15
+
16
+ const { depth = 2, heading, paragraph, button, pros, cons } = Astro.props
17
+ ---
18
+
19
+ <Section class="pricings-1">
20
+ <Container class="flex flex-col items-center gap-16">
21
+ <Prose class="text-center">
22
+ <Heading
23
+ size="5xl"
24
+ text={heading}
25
+ {depth}
26
+ />
27
+ <Paragraph
28
+ size="xl"
29
+ text={paragraph}
30
+ />
31
+ </Prose>
32
+ <Stack class="mx-auto flex flex-wrap items-stretch justify-center">
33
+ {
34
+ [cons || {}, pros || {}].map(
35
+ ({ tagline, heading, paragraph, list }, i) => (
36
+ <Card
37
+ class:list={`min-w-sm flex max-w-md flex-col justify-between gap-8 p-8 ${i === 0 ? 'bg-transparent' : ''}`}
38
+ >
39
+ <Prose>
40
+ <Tagline text={tagline} />
41
+ <Heading
42
+ depth={(depth + 1) as 3}
43
+ size="3xl"
44
+ text={heading}
45
+ />
46
+ <Paragraph
47
+ muted={i === 0}
48
+ text={paragraph}
49
+ />
50
+ <List
51
+ icon={i === 0 ? 'x' : 'check'}
52
+ muted={i === 0}
53
+ size="sm"
54
+ items={list}
55
+ />
56
+ </Prose>
57
+ </Card>
58
+ )
59
+ )
60
+ }
61
+ </Stack>
62
+ <Button {...button} />
63
+ </Container>
64
+ </Section>
@@ -1,31 +1,31 @@
1
1
  ---
2
- // @ts-nocheck
3
- import Badges from 'fulldev-ui/components/Badges.astro'
4
- import Channel from 'fulldev-ui/components/Channel.astro'
5
- import Element from 'fulldev-ui/components/Element.astro'
2
+ import Button from 'fulldev-ui/components/Button.astro'
3
+ import Channels from 'fulldev-ui/components/Channels.astro'
4
+ import Fields from 'fulldev-ui/components/Fields.astro'
6
5
  import Form from 'fulldev-ui/components/Form.astro'
7
6
  import Heading from 'fulldev-ui/components/Heading.astro'
8
7
  import Image from 'fulldev-ui/components/Image.astro'
9
8
  import Paragraph from 'fulldev-ui/components/Paragraph.astro'
10
- import Social from 'fulldev-ui/components/Social.astro'
9
+ import Socials from 'fulldev-ui/components/Socials.astro'
11
10
  import Tagline from 'fulldev-ui/components/Tagline.astro'
12
11
  import type { BlockSchema } from 'fulldev-ui/schemas/block'
12
+ import Container from 'fulldev-ui/structures/Container.astro'
13
+ import Group from 'fulldev-ui/structures/Group.astro'
14
+ import Prose from 'fulldev-ui/structures/Prose.astro'
13
15
  import Section from 'fulldev-ui/structures/Section.astro'
14
16
 
15
17
  interface Props extends BlockSchema {}
16
18
 
17
19
  const {
18
- badge,
19
- badges,
20
+ depth = 2,
20
21
  tagline,
21
22
  heading,
22
- text,
23
23
  paragraph,
24
- buttons,
24
+ content,
25
+ channels,
25
26
  socials,
26
27
  form,
27
28
  image,
28
- channels,
29
29
  ...rest
30
30
  } = Astro.props
31
31
  ---
@@ -34,38 +34,40 @@ const {
34
34
  class:list="contact-1"
35
35
  {...rest}
36
36
  >
37
- <Element>
38
- <Element class:list="contact-1-segment">
39
- <Element class:list="contact-1-content">
40
- <Badges
41
- size="sm"
42
- {badges}
43
- />
44
- <Tagline
45
- size="sm"
46
- text={tagline}
47
- />
48
- <Heading
49
- as="h1"
50
- size="2xl"
51
- text={heading}
52
- />
53
- <Paragraph text={paragraph} />
54
- </Element>
55
- <Element class:list="contact-1-channels">
56
- {channels?.map((channel) => <Channel {...channel} />)}
57
- </Element>
58
- <Element class:list="contact-1-socials">
59
- {socials?.map((social) => <Social href={social} />)}
60
- </Element>
37
+ <Container>
38
+ <Prose
39
+ align="middle"
40
+ class="max-w-xl"
41
+ >
42
+ <Tagline text={tagline} />
43
+ <Heading
44
+ size="4xl"
45
+ text={heading}
46
+ {depth}
47
+ />
48
+ <Paragraph
49
+ muted
50
+ size="lg"
51
+ text={paragraph}
52
+ />
53
+ <Fragment set:html={content} />
54
+ <Channels {channels} />
55
+ <Group>
56
+ <Socials {socials} />
57
+ </Group>
61
58
  <Form
62
59
  action="/thank-you"
63
60
  method="POST"
64
- {...form}
65
- />
66
- </Element>
67
- <Image {...image} />
68
- </Element>
61
+ >
62
+ <Fields fields={form?.fields} />
63
+ <Button
64
+ type="submit"
65
+ text={form?.submit}
66
+ />
67
+ </Form>
68
+ <Image {...image} />
69
+ </Prose>
70
+ </Container>
69
71
  </Section>
70
72
 
71
73
  <style is:global>
@@ -0,0 +1,98 @@
1
+ ---
2
+ import Button from 'fulldev-ui/components/Button.astro'
3
+ import Channels from 'fulldev-ui/components/Channels.astro'
4
+ import Fields from 'fulldev-ui/components/Fields.astro'
5
+ import Form from 'fulldev-ui/components/Form.astro'
6
+ import Heading from 'fulldev-ui/components/Heading.astro'
7
+ import Image from 'fulldev-ui/components/Image.astro'
8
+ import Paragraph from 'fulldev-ui/components/Paragraph.astro'
9
+ import Socials from 'fulldev-ui/components/Socials.astro'
10
+ import Tagline from 'fulldev-ui/components/Tagline.astro'
11
+ import type { BlockSchema } from 'fulldev-ui/schemas/block'
12
+ import Container from 'fulldev-ui/structures/Container.astro'
13
+ import Group from 'fulldev-ui/structures/Group.astro'
14
+ import Prose from 'fulldev-ui/structures/Prose.astro'
15
+ import Section from 'fulldev-ui/structures/Section.astro'
16
+ import Split from 'fulldev-ui/structures/Split.astro'
17
+
18
+ interface Props extends BlockSchema {}
19
+
20
+ const {
21
+ depth = 2,
22
+ tagline,
23
+ heading,
24
+ paragraph,
25
+ content,
26
+ channels,
27
+ socials,
28
+ form,
29
+ image,
30
+ ...rest
31
+ } = Astro.props
32
+ ---
33
+
34
+ <Section
35
+ class:list="contact-2"
36
+ {...rest}
37
+ >
38
+ <Container>
39
+ <Split>
40
+ <Prose
41
+ align="middle"
42
+ class="max-w-xl"
43
+ >
44
+ <Tagline text={tagline} />
45
+ <Heading
46
+ size="4xl"
47
+ text={heading}
48
+ {depth}
49
+ />
50
+ <Paragraph
51
+ muted
52
+ size="lg"
53
+ text={paragraph}
54
+ />
55
+ <Fragment set:html={content} />
56
+ <Channels {channels} />
57
+ <Group>
58
+ <Socials {socials} />
59
+ </Group>
60
+ <Form
61
+ action="/thank-you"
62
+ method="POST"
63
+ >
64
+ <Fields fields={form?.fields} />
65
+ <Button
66
+ type="submit"
67
+ text={form?.submit}
68
+ />
69
+ </Form>
70
+ </Prose>
71
+ <Image {...image} />
72
+ </Split>
73
+ </Container>
74
+ </Section>
75
+
76
+ <style is:global>
77
+ @layer fulldev {
78
+ .contact-2 {
79
+ @apply relative w-full;
80
+
81
+ .container {
82
+ @apply flex flex-col gap-16;
83
+ }
84
+
85
+ .contact-2-segment {
86
+ @apply flex flex-col items-start gap-8;
87
+ }
88
+
89
+ .contact-2-content {
90
+ @apply flex max-w-screen-md flex-col gap-4;
91
+ }
92
+
93
+ .image {
94
+ @apply rounded-md;
95
+ }
96
+ }
97
+ }
98
+ </style>
@@ -21,6 +21,7 @@ const { depth, tagline, heading, paragraph, buttons, image, content } =
21
21
  <Prose align="middle">
22
22
  <Tagline text={tagline} />
23
23
  <Heading
24
+ size="5xl"
24
25
  text={heading}
25
26
  {depth}
26
27
  />
@@ -26,6 +26,7 @@ const { depth, tagline, heading, paragraph, buttons, image, content, ...rest } =
26
26
  <Prose>
27
27
  <Tagline text={tagline} />
28
28
  <Heading
29
+ size="4xl"
29
30
  text={heading}
30
31
  {depth}
31
32
  />
@@ -26,6 +26,7 @@ const { depth, tagline, heading, paragraph, buttons, image, content, ...rest } =
26
26
  <Prose>
27
27
  <Tagline text={tagline} />
28
28
  <Heading
29
+ size="4xl"
29
30
  text={heading}
30
31
  {depth}
31
32
  />
@@ -2,6 +2,7 @@
2
2
  import Buttons from 'fulldev-ui/components/Buttons.astro'
3
3
  import Heading from 'fulldev-ui/components/Heading.astro'
4
4
  import Image from 'fulldev-ui/components/Image.astro'
5
+ import List from 'fulldev-ui/components/List.astro'
5
6
  import Paragraph from 'fulldev-ui/components/Paragraph.astro'
6
7
  import Tagline from 'fulldev-ui/components/Tagline.astro'
7
8
  import type { BlockSchema } from 'fulldev-ui/schemas/block'
@@ -13,16 +14,17 @@ import Split from 'fulldev-ui/structures/Split.astro'
13
14
 
14
15
  interface Props extends BlockSchema {}
15
16
 
16
- const { depth, tagline, heading, paragraph, buttons, image, content } =
17
+ const { depth, tagline, heading, paragraph, buttons, image, content, list } =
17
18
  Astro.props
18
19
  ---
19
20
 
20
21
  <Section class="content-4">
21
22
  <Container>
22
23
  <Split align="sticky">
23
- <Prose>
24
+ <Prose class="lg:max-w-xl">
24
25
  <Tagline text={tagline} />
25
26
  <Heading
27
+ size="4xl"
26
28
  text={heading}
27
29
  {depth}
28
30
  />
@@ -31,6 +33,7 @@ const { depth, tagline, heading, paragraph, buttons, image, content } =
31
33
  size="lg"
32
34
  text={paragraph}
33
35
  />
36
+ <List items={list} />
34
37
  <Group>
35
38
  <Buttons {buttons} />
36
39
  </Group>
@@ -39,6 +42,10 @@ const { depth, tagline, heading, paragraph, buttons, image, content } =
39
42
  <Image {...image} />
40
43
  <Fragment set:html={content} />
41
44
  <slot />
45
+ <Buttons
46
+ class="lg:hidden"
47
+ {buttons}
48
+ />
42
49
  </Prose>
43
50
  </Split>
44
51
  </Container>
@@ -21,6 +21,7 @@ const { depth, tagline, heading, paragraph, buttons, image, content } =
21
21
  <Prose>
22
22
  <Tagline text={tagline} />
23
23
  <Heading
24
+ size="5xl"
24
25
  text={heading}
25
26
  {depth}
26
27
  />
@@ -30,13 +30,14 @@ const {
30
30
  <Prose class="mx-auto py-8">
31
31
  <Tagline text={tagline} />
32
32
  <Heading
33
+ size="5xl"
33
34
  text={heading}
34
35
  {depth}
35
36
  />
36
37
  <Paragraph
37
- muted
38
38
  size="lg"
39
39
  text={paragraph}
40
+ muted
40
41
  />
41
42
  <Image {...image} />
42
43
  <Fragment set:html={content} />
@@ -38,6 +38,7 @@ const {
38
38
  <Prose class="mx-auto py-8">
39
39
  <Tagline text={tagline} />
40
40
  <Heading
41
+ size="4xl"
41
42
  text={heading}
42
43
  {depth}
43
44
  />
@@ -28,6 +28,7 @@ const { depth, tagline, heading, paragraph, buttons, image, content, menus } =
28
28
  <Prose class="max-w-none py-8">
29
29
  <Tagline text={tagline} />
30
30
  <Heading
31
+ size="4xl"
31
32
  text={heading}
32
33
  {depth}
33
34
  />
@@ -8,8 +8,8 @@ import type { BlockSchema } from 'fulldev-ui/schemas/block'
8
8
  import Container from 'fulldev-ui/structures/Container.astro'
9
9
  import Group from 'fulldev-ui/structures/Group.astro'
10
10
  import Panel from 'fulldev-ui/structures/Panel.astro'
11
+ import Prose from 'fulldev-ui/structures/Prose.astro'
11
12
  import Section from 'fulldev-ui/structures/Section.astro'
12
- import Writeup from 'fulldev-ui/structures/Writeup.astro'
13
13
 
14
14
  interface Props extends BlockSchema {}
15
15
 
@@ -28,7 +28,7 @@ const {
28
28
  <Section class:list="cta-1">
29
29
  <Container>
30
30
  <Panel>
31
- <Writeup align="center">
31
+ <Prose align="center">
32
32
  <Tagline text={tagline} />
33
33
  <Heading
34
34
  size="5xl"
@@ -49,7 +49,7 @@ const {
49
49
  {buttons}
50
50
  />
51
51
  </Group>
52
- </Writeup>
52
+ </Prose>
53
53
  <Image {...image} />
54
54
  </Panel>
55
55
  </Container>
@@ -24,7 +24,7 @@ const { depth, tagline, heading, paragraph, buttons, image, content, ...rest } =
24
24
  >
25
25
  <Container>
26
26
  <Panel class="p-0">
27
- <Split class="items-center">
27
+ <Split align="center">
28
28
  <Prose class="px-4 sm:px-8 lg:px-16">
29
29
  <Tagline text={tagline} />
30
30
  <Heading
@@ -5,6 +5,7 @@ import Paragraph from 'fulldev-ui/components/Paragraph.astro'
5
5
  import Tagline from 'fulldev-ui/components/Tagline.astro'
6
6
  import type { BlockSchema } from 'fulldev-ui/schemas/block'
7
7
  import Container from 'fulldev-ui/structures/Container.astro'
8
+ import Prose from 'fulldev-ui/structures/Prose.astro'
8
9
  import Section from 'fulldev-ui/structures/Section.astro'
9
10
  import Stack from 'fulldev-ui/structures/Stack.astro'
10
11
  import Writeup from 'fulldev-ui/structures/Writeup.astro'
@@ -19,7 +20,7 @@ const { depth = 2, tagline, heading, paragraph, cards, ...rest } = Astro.props
19
20
  {...rest}
20
21
  >
21
22
  <Container>
22
- <Writeup>
23
+ <Prose>
23
24
  <Tagline
24
25
  size="sm"
25
26
  text={tagline}
@@ -33,7 +34,7 @@ const { depth = 2, tagline, heading, paragraph, cards, ...rest } = Astro.props
33
34
  size="lg"
34
35
  text={paragraph}
35
36
  />
36
- </Writeup>
37
+ </Prose>
37
38
  <Stack>
38
39
  {
39
40
  cards?.map(({ icon, heading, paragraph }) => (
@@ -6,6 +6,7 @@ import Tagline from 'fulldev-ui/components/Tagline.astro'
6
6
  import type { BlockSchema } from 'fulldev-ui/schemas/block'
7
7
  import Container from 'fulldev-ui/structures/Container.astro'
8
8
  import Matrix from 'fulldev-ui/structures/Matrix.astro'
9
+ import Prose from 'fulldev-ui/structures/Prose.astro'
9
10
  import Section from 'fulldev-ui/structures/Section.astro'
10
11
  import Writeup from 'fulldev-ui/structures/Writeup.astro'
11
12
 
@@ -19,7 +20,7 @@ const { depth = 2, tagline, heading, paragraph, cards, ...rest } = Astro.props
19
20
  {...rest}
20
21
  >
21
22
  <Container>
22
- <Writeup>
23
+ <Prose>
23
24
  <Tagline
24
25
  size="sm"
25
26
  text={tagline}
@@ -33,7 +34,7 @@ const { depth = 2, tagline, heading, paragraph, cards, ...rest } = Astro.props
33
34
  size="lg"
34
35
  text={paragraph}
35
36
  />
36
- </Writeup>
37
+ </Prose>
37
38
  <Matrix size="sm">
38
39
  {
39
40
  cards?.map(({ icon, heading, paragraph }) => (
@@ -65,6 +65,7 @@ const { logo, links, menus, socials, search, themer, button } = Astro.props
65
65
 
66
66
  <Button
67
67
  size="sm"
68
+ variant="outline"
68
69
  {...button}
69
70
  />
70
71
  <!-- <Button
@@ -33,7 +33,7 @@ const {
33
33
  {...rest}
34
34
  >
35
35
  <Container class="flex flex-col items-center gap-16">
36
- <Prose class="flex flex-col items-center text-center">
36
+ <Prose align="center">
37
37
  <Proof {...proof} />
38
38
  <Chip
39
39
  size="lg"
@@ -62,7 +62,7 @@ const {
62
62
  </Group>
63
63
  </Prose>
64
64
  <Image
65
- class="max-h-[700px] w-auto rounded-lg"
65
+ class="mx-auto max-h-[700px] w-auto rounded-lg"
66
66
  {...image}
67
67
  />
68
68
  </Container>
@@ -7,8 +7,8 @@ import Tagline from 'fulldev-ui/components/Tagline.astro'
7
7
  import type { BlockSchema } from 'fulldev-ui/schemas/block'
8
8
  import Container from 'fulldev-ui/structures/Container.astro'
9
9
  import Group from 'fulldev-ui/structures/Group.astro'
10
+ import Prose from 'fulldev-ui/structures/Prose.astro'
10
11
  import Section from 'fulldev-ui/structures/Section.astro'
11
- import Writeup from 'fulldev-ui/structures/Writeup.astro'
12
12
 
13
13
  interface Props extends BlockSchema {}
14
14
 
@@ -30,7 +30,7 @@ const {
30
30
  {...rest}
31
31
  >
32
32
  <Container>
33
- <Writeup>
33
+ <Prose>
34
34
  <Tagline
35
35
  size="sm"
36
36
  text={tagline}
@@ -49,7 +49,7 @@ const {
49
49
  {buttons}
50
50
  />
51
51
  </Group>
52
- </Writeup>
52
+ </Prose>
53
53
  <Image {...image} />
54
54
  </Container>
55
55
  </Section>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  import type { CollectionEntry } from 'astro:content'
3
- import { getCollection } from 'astro:content'
3
+ import { getCollection, getEntries } from 'astro:content'
4
4
  import Heading from 'fulldev-ui/components/Heading.astro'
5
5
  import Image from 'fulldev-ui/components/Image.astro'
6
6
  import List from 'fulldev-ui/components/List.astro'
@@ -28,6 +28,8 @@ const jobs = await getCollection('pages', (page) =>
28
28
  category.slug == slug || pages?.some((p) => p.slug == category.slug)
29
29
  )
30
30
  )
31
+
32
+ const pageEntries = pages && (await getEntries(pages))
31
33
  ---
32
34
 
33
35
  <Section
@@ -47,13 +49,13 @@ const jobs = await getCollection('pages', (page) =>
47
49
  <Container class="flex flex-col gap-12">
48
50
  <Matrix class="gap-2">
49
51
  {
50
- pages?.map(({ slug, data: { title, image } }) => (
52
+ pageEntries?.map(({ slug, data: { title, image } }) => (
51
53
  <Card
52
54
  class="grid grid-cols-3 items-center bg-transparent p-0"
53
55
  href={getHref(slug)}
54
56
  >
55
57
  <Image
56
- class="h-full w-auto rounded-sm object-cover"
58
+ class="h-auto w-full rounded-sm object-cover"
57
59
  {...image}
58
60
  />
59
61
  <Heading
@@ -28,19 +28,15 @@ const {
28
28
 
29
29
  <Section class="projects-1">
30
30
  <Container>
31
- <Split class="items-start">
32
- <Prose class="lg:sticky lg:top-sticky-16 lg:max-w-xl">
31
+ <Split align="sticky">
32
+ <Prose class="max-w-xl">
33
33
  <Tagline text={tagline} />
34
34
  <Heading
35
- size="4xl"
35
+ size="3xl"
36
36
  text={heading}
37
37
  {depth}
38
38
  />
39
- <Paragraph
40
- muted
41
- size="lg"
42
- text={paragraph}
43
- />
39
+ <Paragraph text={paragraph} />
44
40
  <Fragment set:html={content} />
45
41
  <Group>
46
42
  <Buttons
@@ -51,8 +47,12 @@ const {
51
47
  </Prose>
52
48
  <Element class="flex flex-col gap-8">
53
49
  {
54
- cards?.map(({ image, badges, heading, paragraph }) => (
55
- <Element class="flex flex-col gap-2">
50
+ cards?.map(({ href, image, badges, heading, paragraph }) => (
51
+ <Element
52
+ class="flex flex-col gap-2"
53
+ as="a"
54
+ {href}
55
+ >
56
56
  <Image
57
57
  class="mb-4"
58
58
  {...image}
@@ -25,8 +25,9 @@ cards = [
25
25
  })),
26
26
  ...(await getEntries(pages || [])).map(({ slug, data }) => ({
27
27
  href: getHref(slug),
28
- ...data,
29
28
  heading: data.title,
29
+ paragraph: data.description,
30
+ ...data,
30
31
  })),
31
32
  ]
32
33
  ---
@@ -3,6 +3,7 @@ import type { HTMLAttributes } from 'astro/types'
3
3
  import Button from 'fulldev-ui/components/Button.astro'
4
4
  import Element from 'fulldev-ui/components/Element.astro'
5
5
  import Heading from 'fulldev-ui/components/Heading.astro'
6
+ import type { ComponentProps } from 'svelte'
6
7
 
7
8
  interface Props extends HTMLAttributes<'div'> {
8
9
  variant?: 'secondary' | 'outline' | undefined
@@ -11,6 +12,7 @@ interface Props extends HTMLAttributes<'div'> {
11
12
  text?: string | undefined
12
13
  href?: string | undefined
13
14
  icon?: string | undefined
15
+ target?: ComponentProps<typeof Button>['target']
14
16
  }
15
17
 
16
18
  const {
@@ -20,6 +22,7 @@ const {
20
22
  icon,
21
23
  heading,
22
24
  text,
25
+ target,
23
26
  ...rest
24
27
  } = Astro.props
25
28
  ---
@@ -34,6 +37,7 @@ const {
34
37
  {size}
35
38
  {href}
36
39
  {icon}
40
+ {target}
37
41
  />
38
42
  <Element class:list="channel-content">
39
43
  <Heading
@@ -0,0 +1,33 @@
1
+ ---
2
+ import Input from 'fulldev-ui/components/Input.astro'
3
+ import Select from 'fulldev-ui/components/Select.astro'
4
+ import Textarea from 'fulldev-ui/components/Textarea.astro'
5
+
6
+ interface Props {
7
+ label?: string | undefined
8
+ placeholder?: string | undefined
9
+ value?: string | undefined
10
+ required?: boolean | undefined
11
+ disabled?: boolean | undefined
12
+ type?: keyof typeof components | undefined
13
+ }
14
+
15
+ const { type = 'text', ...rest } = Astro.props
16
+
17
+ const components = {
18
+ select: Select,
19
+ textarea: Textarea,
20
+ text: Input,
21
+ number: Input,
22
+ tel: Input,
23
+ email: Input,
24
+ password: Input,
25
+ }
26
+
27
+ const Component = components[type]
28
+ ---
29
+
30
+ <Component
31
+ class:list="field"
32
+ {...rest}
33
+ />
@@ -0,0 +1,20 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import Field from 'fulldev-ui/components/Field.astro'
4
+
5
+ interface Props extends ComponentProps<typeof Field> {
6
+ field?: ComponentProps<typeof Field> | undefined
7
+ fields?: ComponentProps<typeof Field>[] | undefined
8
+ }
9
+
10
+ const { field, fields, ...rest } = Astro.props
11
+ ---
12
+
13
+ {
14
+ [field, ...(fields || [])].filter(Boolean).map((field) => (
15
+ <Field
16
+ {...rest}
17
+ {...field}
18
+ />
19
+ ))
20
+ }
@@ -75,7 +75,6 @@ const { depth = 2, as = `h${depth}`, text, ...rest } = Astro.props
75
75
  @apply text-3xl;
76
76
  }
77
77
 
78
- &:where(.prose > h2:not(:is(h1 ~ h2))),
79
78
  &.size-4xl {
80
79
  @apply text-4xl;
81
80
  }
@@ -1,28 +1,32 @@
1
1
  ---
2
2
  import type { HTMLAttributes } from 'astro/types'
3
3
  import Element from 'fulldev-ui/components/Element.astro'
4
+ import Icon from 'fulldev-ui/components/Icon.astro'
4
5
 
5
6
  interface Props extends HTMLAttributes<'ul' | 'ol'> {
6
7
  as?: 'ul' | 'ol' | undefined
7
8
  size?: 'sm' | 'md' | 'lg' | undefined
8
9
  items?: string[] | undefined
9
10
  muted?: boolean | undefined
11
+ icon?: string | undefined
10
12
  }
11
13
 
12
- const { as = 'ul', items, ...rest } = Astro.props
14
+ const { as = 'ul', items, icon, ...rest } = Astro.props
13
15
  ---
14
16
 
15
17
  <Element
16
- class:list="list"
18
+ class:list={['list', icon ? 'has-icon' : undefined]}
17
19
  {as}
18
20
  {...rest}
19
21
  >
20
22
  {
21
23
  items?.map((item) => (
22
- <Element
23
- as="li"
24
- set:html={item}
25
- />
24
+ <Element as="li">
25
+ <Icon name={icon} />
26
+ <span>
27
+ <Fragment set:html={item} />
28
+ </span>
29
+ </Element>
26
30
  ))
27
31
  }
28
32
  <slot />
@@ -32,14 +36,14 @@ const { as = 'ul', items, ...rest } = Astro.props
32
36
  @layer fulldev {
33
37
  .list,
34
38
  .prose :is(ul, ol) {
35
- @apply ml-6;
39
+ @apply pl-4;
36
40
 
37
41
  &:is(ul) {
38
42
  @apply list-disc;
39
43
  }
40
44
 
41
45
  ul {
42
- @apply ml-6 mt-2 list-disc;
46
+ @apply ml-5 mt-2 list-disc;
43
47
  }
44
48
 
45
49
  &:is(ol) {
@@ -47,7 +51,7 @@ const { as = 'ul', items, ...rest } = Astro.props
47
51
  }
48
52
 
49
53
  ol {
50
- @apply ml-6 mt-2 list-decimal;
54
+ @apply ml-5 mt-2 list-decimal;
51
55
  }
52
56
 
53
57
  li {
@@ -57,11 +61,35 @@ const { as = 'ul', items, ...rest } = Astro.props
57
61
  &.size-sm,
58
62
  &:where(.size-sm &) {
59
63
  @apply text-sm;
64
+
65
+ .icon {
66
+ @apply mt-0;
67
+ }
60
68
  }
61
69
 
62
70
  &.size-lg,
63
71
  &:where(.size-lg &) {
64
72
  @apply text-lg;
73
+
74
+ .icon {
75
+ @apply mt-1;
76
+ }
77
+ }
78
+
79
+ &.muted {
80
+ @apply text-muted-foreground;
81
+ }
82
+
83
+ .icon {
84
+ @apply -ml-5 mt-0.5 shrink-0 text-inherit;
85
+ }
86
+
87
+ &.has-icon {
88
+ @apply ml-0 list-none;
89
+
90
+ li {
91
+ @apply flex gap-2;
92
+ }
65
93
  }
66
94
  }
67
95
  }
@@ -5,7 +5,7 @@ import Icon from 'fulldev-ui/components/Icon.astro'
5
5
  import Label from 'fulldev-ui/components/Label.astro'
6
6
 
7
7
  interface Props extends HTMLAttributes<'select'> {
8
- show?: any
8
+ size?: 'sm' | 'md' | 'lg' | undefined
9
9
  label?: string | undefined
10
10
  placeholder?: string | undefined
11
11
  options?: string[] | undefined
@@ -23,26 +23,26 @@ const { text, ...rest } = Astro.props
23
23
  <style is:global>
24
24
  @layer fulldev {
25
25
  .tagline {
26
- @apply font-semibold leading-tight text-primary;
26
+ @apply font-medium text-primary;
27
27
 
28
28
  &.size-xs {
29
- @apply text-xs;
29
+ @apply text-xs leading-tight;
30
30
  }
31
31
 
32
32
  &.size-sm {
33
- @apply text-sm;
33
+ @apply text-sm leading-tight;
34
34
  }
35
35
 
36
36
  &.size-md {
37
- @apply text-base;
37
+ @apply text-base leading-tight;
38
38
  }
39
39
 
40
40
  &.size-lg {
41
- @apply text-lg;
41
+ @apply text-lg leading-tight;
42
42
  }
43
43
 
44
44
  &.size-xl {
45
- @apply text-xl;
45
+ @apply text-xl leading-tight;
46
46
  }
47
47
  }
48
48
  }
@@ -2,7 +2,7 @@
2
2
  import type { MarkdownHeading } from 'astro'
3
3
  import type { HTMLAttributes } from 'astro/types'
4
4
  import Element from 'fulldev-ui/components/Element.astro'
5
- import Link from 'fulldev-ui/components/Link.astro'
5
+ import Heading from 'fulldev-ui/components/Heading.astro'
6
6
  import Links from './Links.astro'
7
7
 
8
8
  interface Props extends HTMLAttributes<'div'> {
@@ -26,11 +26,15 @@ const links = filteredHeadings?.map((button: any) => ({
26
26
  class:list="toc"
27
27
  {...rest}
28
28
  >
29
- <Link
30
- text={heading}
31
- href="#"
32
- size="sm"
33
- />
29
+ {
30
+ (links?.length || 0) > 0 && (
31
+ <Heading
32
+ as="h6"
33
+ text={heading}
34
+ size="sm"
35
+ />
36
+ )
37
+ }
34
38
  <Links
35
39
  {size}
36
40
  {links}
@@ -163,3 +163,6 @@ menus:
163
163
  href: /docs/blocks/reviews/
164
164
  - text: Projects
165
165
  href: /docs/blocks/projects/
166
+
167
+ footer:
168
+ menus: []
@@ -40,3 +40,14 @@ import List from 'fulldev-ui/components/List.astro'
40
40
  <List size="md" items={['First', 'Second', 'Third']} />
41
41
  <List size="lg" items={['First', 'Second', 'Third']} />
42
42
  ```
43
+
44
+ ### `icon`
45
+
46
+ ```astro live
47
+ ---
48
+ import List from 'fulldev-ui/components/List.astro'
49
+ ---
50
+
51
+ <List icon="check" items={['First', 'Second', 'Third']} />
52
+ <List icon="x" items={['First', 'Second', 'Third']} />
53
+ ```
@@ -4,8 +4,8 @@ _block: Hero1
4
4
 
5
5
  title: Fulldev UI - Astro component and block library, open-source
6
6
  description: Make websites rapidly with pre-built components and blocks.
7
- heading: Build complete websites with this Astro UI library
8
- paragraph: Everything you need to rapidly build content-driven websites. Components, blocks, layouts and complete page generation.
7
+ heading: The Astro UI library for building content sites
8
+ paragraph: Components and blocks to build content-driven websites.
9
9
  buttons:
10
10
  - text: Get Started
11
11
  href: /docs/
@@ -1,5 +1,9 @@
1
1
  @import url(https://fonts.bunny.net/css?family=inter:100,200,300,400,500,600,700,800,900);
2
2
 
3
+ * {
4
+ font-family: 'Inter', sans-serif;
5
+ }
6
+
3
7
  mark {
4
8
  background-color: var(--brand-12) !important;
5
9
  color: var(--brand-1) !important;
@@ -50,6 +50,7 @@ export default function fulldevIntegration(
50
50
  URL: envField.string({
51
51
  context: 'client',
52
52
  access: 'public',
53
+ optional: true,
53
54
  }),
54
55
  STRIPE_RESTRICTED_KEY: envField.string({
55
56
  context: 'client',
@@ -58,6 +58,7 @@ const { Content, headings } = await render()
58
58
  </Element>
59
59
  <Block
60
60
  _block="Footer"
61
+ {...rest}
61
62
  {...footer}
62
63
  />
63
64
  </Layout>
@@ -11,12 +11,21 @@ export const blockSchema = cardSchema
11
11
  search: z.boolean().optional(),
12
12
  cart: z.boolean().optional(),
13
13
  cards: cardSchema.array().optional(),
14
+ pros: cardSchema.optional(),
15
+ cons: cardSchema.optional(),
14
16
  pages: pathSchema('pages').array().optional(),
15
17
  records: pathSchema('records').array().optional(),
16
18
  soldout: z.boolean().optional(),
17
19
  variants: z.record(z.string(), z.string().array()).optional(),
18
20
  categories: pathSchema('pages').array().optional(),
19
21
  menus: menuSchema.array().optional(),
22
+ form: z
23
+ .object({
24
+ fields: z.array(z.any()).optional(),
25
+ submit: z.string().optional(),
26
+ })
27
+ .strict()
28
+ .optional(),
20
29
  headings: z
21
30
  .array(
22
31
  z.object({
@@ -10,5 +10,6 @@ export const channelSchema = z
10
10
  href: z.string().optional(),
11
11
  size: z.enum(['sm', 'md', 'lg']).optional(),
12
12
  variant: z.enum(['secondary', 'outline']).optional(),
13
+ target: z.enum(['_blank', '_self', '_parent', '_top']).optional(),
13
14
  })
14
15
  .strict() satisfies z.ZodType<ComponentProps<typeof Channel>>
@@ -27,10 +27,14 @@ const { ...rest } = Astro.props
27
27
  }
28
28
 
29
29
  &.align-center {
30
- @apply mx-auto flex max-w-screen-md;
30
+ @apply mx-auto flex max-w-screen-md flex-col items-center;
31
31
 
32
- > *:not(* > *) {
32
+ > * {
33
33
  @apply text-center;
34
+
35
+ > * {
36
+ @apply text-left;
37
+ }
34
38
  }
35
39
  }
36
40
 
@@ -39,16 +43,25 @@ const { ...rest } = Astro.props
39
43
  }
40
44
 
41
45
  > *,
42
- .tagline + * {
46
+ .tagline + *,
47
+ .proof + *,
48
+ .channel + .channel {
43
49
  @apply mt-4;
44
50
  }
45
51
 
46
52
  > .group,
47
53
  > .button,
48
- > .buttons {
54
+ > .buttons,
55
+ > .channel {
49
56
  @apply mt-8;
50
57
  }
51
58
 
59
+ > .form,
60
+ > img,
61
+ > p > img {
62
+ @apply my-12;
63
+ }
64
+
52
65
  > h2 {
53
66
  @apply mt-10;
54
67
  }
@@ -71,11 +84,6 @@ const { ...rest } = Astro.props
71
84
  @apply rounded-md border border-destructive p-4 text-destructive;
72
85
  }
73
86
 
74
- > img,
75
- > p > img {
76
- @apply my-12 rounded-md;
77
- }
78
-
79
87
  blockquote > p + p {
80
88
  @apply !mt-1;
81
89
  }