fulldev-ui 0.10.1 → 0.11.1
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/CHANGELOG.md +12 -0
- package/README.md +7 -1
- package/package.json +6 -4
- package/public/r/accordion.json +7 -1
- package/public/r/alert-dialog.json +7 -1
- package/public/r/alert.json +6 -0
- package/public/r/article-1.json +7 -1
- package/public/r/article-2.json +7 -1
- package/public/r/articles-1.json +7 -1
- package/public/r/articles-2.json +7 -1
- package/public/r/articles-3.json +7 -1
- package/public/r/articles-4.json +7 -1
- package/public/r/avatar.json +6 -0
- package/public/r/badge.json +6 -0
- package/public/r/banner-1.json +7 -1
- package/public/r/banner-2.json +7 -1
- package/public/r/banner.json +7 -1
- package/public/r/blocks-1.json +6 -1
- package/public/r/blocks.json +92 -0
- package/public/r/breadcrumb.json +6 -0
- package/public/r/button.json +6 -0
- package/public/r/card.json +6 -0
- package/public/r/carousel.json +6 -0
- package/public/r/checkbox.json +6 -0
- package/public/r/collapsible.json +7 -1
- package/public/r/combobox.json +6 -0
- package/public/r/command.json +6 -0
- package/public/r/components.json +14 -3
- package/public/r/contact-1.json +10 -2
- package/public/r/contact-2.json +10 -2
- package/public/r/contact-3.json +10 -2
- package/public/r/content-1.json +7 -1
- package/public/r/content-2.json +7 -1
- package/public/r/content-3.json +7 -1
- package/public/r/content-4.json +7 -1
- package/public/r/cta-1.json +7 -1
- package/public/r/cta-2.json +7 -1
- package/public/r/cta-3.json +7 -1
- package/public/r/cta-4.json +7 -1
- package/public/r/cta-5.json +7 -1
- package/public/r/cta-6.json +7 -1
- package/public/r/cta-7.json +7 -1
- package/public/r/cta-8.json +7 -1
- package/public/r/dialog.json +7 -1
- package/public/r/doc-1.json +7 -1
- package/public/r/dropdown-menu.json +7 -1
- package/public/r/empty.json +6 -0
- package/public/r/faqs-1.json +7 -1
- package/public/r/faqs-2.json +7 -1
- package/public/r/faqs-3.json +7 -1
- package/public/r/faqs-4.json +7 -1
- package/public/r/features-1.json +7 -1
- package/public/r/features-2.json +7 -1
- package/public/r/features-3.json +7 -1
- package/public/r/features-4.json +7 -1
- package/public/r/features-5.json +7 -1
- package/public/r/features-6.json +7 -1
- package/public/r/field.json +6 -0
- package/public/r/footer-1.json +7 -1
- package/public/r/footer-2.json +7 -1
- package/public/r/footer-3.json +7 -1
- package/public/r/form.json +6 -0
- package/public/r/header-1.json +7 -1
- package/public/r/header-2.json +7 -1
- package/public/r/header-3.json +7 -1
- package/public/r/header-4.json +7 -1
- package/public/r/header-5.json +7 -1
- package/public/r/header.json +6 -0
- package/public/r/hero-1.json +7 -1
- package/public/r/hero-10.json +7 -1
- package/public/r/hero-11.json +7 -1
- package/public/r/hero-12.json +7 -1
- package/public/r/hero-13.json +7 -1
- package/public/r/hero-2.json +7 -1
- package/public/r/hero-3.json +7 -1
- package/public/r/hero-4.json +7 -1
- package/public/r/hero-5.json +7 -1
- package/public/r/hero-6.json +7 -1
- package/public/r/hero-7.json +7 -1
- package/public/r/hero-8.json +7 -1
- package/public/r/hero-9.json +7 -1
- package/public/r/hover-card.json +7 -1
- package/public/r/icon.json +7 -1
- package/public/r/init.json +28 -0
- package/public/r/input-group.json +6 -0
- package/public/r/input.json +6 -0
- package/public/r/item.json +6 -0
- package/public/r/kbd.json +6 -0
- package/public/r/label.json +6 -0
- package/public/r/layout.json +6 -0
- package/public/r/links-2.json +7 -1
- package/public/r/logo.json +6 -0
- package/public/r/logos-1.json +7 -1
- package/public/r/logos-2.json +7 -1
- package/public/r/logos-3.json +7 -1
- package/public/r/marquee.json +6 -0
- package/public/r/native-select.json +6 -0
- package/public/r/navigation-menu.json +7 -1
- package/public/r/popover.json +7 -1
- package/public/r/price.json +6 -0
- package/public/r/pricing-1.json +7 -1
- package/public/r/pricing-2.json +7 -1
- package/public/r/pricing-3.json +7 -1
- package/public/r/product-1.json +7 -1
- package/public/r/products-1.json +7 -1
- package/public/r/products-2.json +7 -1
- package/public/r/products-3.json +7 -1
- package/public/r/products-4.json +7 -1
- package/public/r/products-5.json +7 -1
- package/public/r/radio-group.json +7 -1
- package/public/r/rating.json +6 -0
- package/public/r/registry.json +1645 -457
- package/public/r/reviews-1.json +7 -1
- package/public/r/reviews-2.json +7 -1
- package/public/r/reviews-3.json +7 -1
- package/public/r/reviews-4.json +7 -1
- package/public/r/reviews-5.json +7 -1
- package/public/r/section.json +18 -2
- package/public/r/select.json +6 -0
- package/public/r/separator.json +6 -0
- package/public/r/services-1.json +7 -1
- package/public/r/services-2.json +7 -1
- package/public/r/services-3.json +7 -1
- package/public/r/services-4.json +7 -1
- package/public/r/services-5.json +7 -1
- package/public/r/services-6.json +7 -1
- package/public/r/services-7.json +7 -1
- package/public/r/sheet.json +8 -2
- package/public/r/sidebar-1.json +6 -1
- package/public/r/sidebar.json +6 -0
- package/public/r/skeleton.json +6 -0
- package/public/r/slider.json +7 -1
- package/public/r/spinner.json +6 -0
- package/public/r/switch.json +7 -1
- package/public/r/table.json +6 -0
- package/public/r/tabs.json +7 -1
- package/public/r/textarea.json +6 -0
- package/public/r/theme-toggle.json +6 -0
- package/public/r/toc.json +6 -0
- package/public/r/toggle.json +7 -1
- package/public/r/tooltip.json +7 -1
- package/public/r/typography.json +7 -1
- package/public/r/video.json +6 -0
- package/registry/init/global.css +187 -0
- package/registry.json +1137 -454
- package/src/components/blocks/article-1.astro +4 -3
- package/src/components/blocks/article-2.astro +4 -3
- package/src/components/blocks/articles-1.astro +18 -9
- package/src/components/blocks/articles-2.astro +4 -3
- package/src/components/blocks/articles-3.astro +11 -9
- package/src/components/blocks/articles-4.astro +11 -4
- package/src/components/blocks/banner-1.astro +4 -3
- package/src/components/blocks/banner-2.astro +16 -7
- package/src/components/blocks/blocks-1.astro +1 -1
- package/src/components/blocks/contact-1.astro +74 -40
- package/src/components/blocks/contact-2.astro +71 -36
- package/src/components/blocks/contact-3.astro +63 -35
- package/src/components/blocks/content-1.astro +15 -10
- package/src/components/blocks/content-2.astro +15 -10
- package/src/components/blocks/content-3.astro +14 -12
- package/src/components/blocks/content-4.astro +15 -10
- package/src/components/blocks/cta-1.astro +14 -10
- package/src/components/blocks/cta-2.astro +11 -8
- package/src/components/blocks/cta-3.astro +15 -8
- package/src/components/blocks/cta-4.astro +14 -9
- package/src/components/blocks/cta-5.astro +12 -8
- package/src/components/blocks/cta-6.astro +11 -8
- package/src/components/blocks/cta-7.astro +17 -10
- package/src/components/blocks/cta-8.astro +15 -10
- package/src/components/blocks/doc-1.astro +1 -1
- package/src/components/blocks/faqs-1.astro +22 -11
- package/src/components/blocks/faqs-2.astro +19 -9
- package/src/components/blocks/faqs-3.astro +19 -9
- package/src/components/blocks/faqs-4.astro +12 -9
- package/src/components/blocks/features-1.astro +21 -13
- package/src/components/blocks/features-2.astro +22 -13
- package/src/components/blocks/features-3.astro +14 -13
- package/src/components/blocks/features-4.astro +18 -9
- package/src/components/blocks/features-5.astro +22 -13
- package/src/components/blocks/features-6.astro +19 -9
- package/src/components/blocks/footer-1.astro +4 -3
- package/src/components/blocks/footer-2.astro +4 -3
- package/src/components/blocks/footer-3.astro +4 -3
- package/src/components/blocks/header-1.astro +13 -7
- package/src/components/blocks/header-2.astro +12 -6
- package/src/components/blocks/header-3.astro +12 -6
- package/src/components/blocks/header-4.astro +13 -6
- package/src/components/blocks/header-5.astro +16 -6
- package/src/components/blocks/hero-1.astro +11 -8
- package/src/components/blocks/hero-10.astro +7 -3
- package/src/components/blocks/hero-11.astro +4 -2
- package/src/components/blocks/hero-12.astro +11 -4
- package/src/components/blocks/hero-13.astro +11 -4
- package/src/components/blocks/hero-2.astro +11 -8
- package/src/components/blocks/hero-3.astro +11 -3
- package/src/components/blocks/hero-4.astro +4 -2
- package/src/components/blocks/hero-5.astro +4 -3
- package/src/components/blocks/hero-6.astro +4 -3
- package/src/components/blocks/hero-7.astro +4 -3
- package/src/components/blocks/hero-8.astro +11 -4
- package/src/components/blocks/hero-9.astro +4 -3
- package/src/components/blocks/links-2.astro +4 -4
- package/src/components/blocks/logos-1.astro +14 -16
- package/src/components/blocks/logos-2.astro +14 -12
- package/src/components/blocks/logos-3.astro +5 -4
- package/src/components/blocks/pricing-1.astro +13 -16
- package/src/components/blocks/pricing-2.astro +14 -13
- package/src/components/blocks/pricing-3.astro +20 -16
- package/src/components/blocks/product-1.astro +4 -3
- package/src/components/blocks/products-1.astro +11 -9
- package/src/components/blocks/products-2.astro +12 -9
- package/src/components/blocks/products-3.astro +12 -9
- package/src/components/blocks/products-4.astro +18 -9
- package/src/components/blocks/products-5.astro +18 -9
- package/src/components/blocks/reviews-1.astro +13 -12
- package/src/components/blocks/reviews-2.astro +4 -4
- package/src/components/blocks/reviews-3.astro +13 -12
- package/src/components/blocks/reviews-4.astro +13 -12
- package/src/components/blocks/reviews-5.astro +13 -12
- package/src/components/blocks/services-1.astro +19 -9
- package/src/components/blocks/services-2.astro +11 -8
- package/src/components/blocks/services-3.astro +11 -8
- package/src/components/blocks/services-4.astro +19 -9
- package/src/components/blocks/services-5.astro +11 -8
- package/src/components/blocks/services-6.astro +4 -3
- package/src/components/blocks/services-7.astro +12 -8
- package/src/components/blocks/sidebar-1.astro +2 -2
- package/src/components/ui/accordion/accordion.astro +1 -0
- package/src/components/ui/alert-dialog/alert-dialog.astro +1 -0
- package/src/components/ui/banner/banner.astro +23 -41
- package/src/components/ui/collapsible/collapsible.astro +1 -0
- package/src/components/ui/dialog/dialog.astro +1 -0
- package/src/components/ui/dropdown-menu/dropdown-menu.astro +1 -0
- package/src/components/ui/hover-card/hover-card.astro +7 -3
- package/src/components/ui/icon/icon.astro +46 -29
- package/src/components/ui/navigation-menu/navigation-menu.astro +1 -0
- package/src/components/ui/popover/popover.astro +1 -0
- package/src/components/ui/radio-group/radio-group.astro +1 -0
- package/src/components/ui/section/index.ts +2 -0
- package/src/components/ui/section/section-container.astro +1 -0
- package/src/components/ui/section/section-description.astro +20 -0
- package/src/components/ui/section/section-title.astro +20 -0
- package/src/components/ui/sheet/sheet-close.astro +4 -2
- package/src/components/ui/sheet/sheet.astro +1 -0
- package/src/components/ui/slider/slider.astro +1 -0
- package/src/components/ui/switch/switch.astro +1 -0
- package/src/components/ui/tabs/tabs.astro +1 -0
- package/src/components/ui/toggle/toggle.astro +1 -0
- package/src/components/ui/tooltip/tooltip.astro +1 -0
- package/src/components/ui/typography/typography.astro +1 -1
- package/src/lib/pages.ts +12 -0
- package/src/styles/global.css +2 -2
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
|
+
|
|
2
4
|
import { cn } from "@/lib/utils"
|
|
3
5
|
import { Badge } from "@/components/ui/badge"
|
|
4
6
|
import {
|
|
@@ -9,10 +11,13 @@ import {
|
|
|
9
11
|
CardTitle,
|
|
10
12
|
} from "@/components/ui/card"
|
|
11
13
|
import { Price, PriceValue } from "@/components/ui/price"
|
|
12
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
Section,
|
|
16
|
+
SectionContainer,
|
|
17
|
+
SectionTitle,
|
|
18
|
+
} from "@/components/ui/section"
|
|
13
19
|
|
|
14
|
-
type Props = {
|
|
15
|
-
class?: string
|
|
20
|
+
type Props = HTMLAttributes<"section"> & {
|
|
16
21
|
badge: string
|
|
17
22
|
title: string
|
|
18
23
|
products: {
|
|
@@ -25,18 +30,16 @@ type Props = {
|
|
|
25
30
|
}[]
|
|
26
31
|
}
|
|
27
32
|
|
|
28
|
-
const { class: className, badge, title, products } = Astro.props
|
|
33
|
+
const { class: className, badge, title, products, ...props } = Astro.props
|
|
29
34
|
---
|
|
30
35
|
|
|
31
|
-
<Section class={cn("", className)}>
|
|
36
|
+
<Section class={cn("", className)} {...props}>
|
|
32
37
|
<SectionContainer class="gap-8">
|
|
33
38
|
<div class="mx-auto max-w-2xl text-center">
|
|
34
39
|
<Badge variant="secondary">{badge}</Badge>
|
|
35
|
-
<
|
|
36
|
-
class="mt-4 text-3xl font-semibold tracking-tight text-balance sm:text-4xl"
|
|
37
|
-
>
|
|
40
|
+
<SectionTitle class="mt-4">
|
|
38
41
|
{title}
|
|
39
|
-
</
|
|
42
|
+
</SectionTitle>
|
|
40
43
|
</div>
|
|
41
44
|
<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
|
|
42
45
|
{
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
3
|
import { Image } from "astro:assets"
|
|
4
|
+
import type { HTMLAttributes } from "astro/types"
|
|
4
5
|
|
|
5
6
|
import { cn } from "@/lib/utils"
|
|
6
7
|
import { Button } from "@/components/ui/button"
|
|
@@ -12,10 +13,13 @@ import {
|
|
|
12
13
|
CardTitle,
|
|
13
14
|
} from "@/components/ui/card"
|
|
14
15
|
import { Price, PriceUnit, PriceValue } from "@/components/ui/price"
|
|
15
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
Section,
|
|
18
|
+
SectionContainer,
|
|
19
|
+
SectionTitle,
|
|
20
|
+
} from "@/components/ui/section"
|
|
16
21
|
|
|
17
|
-
type Props = {
|
|
18
|
-
class?: string
|
|
22
|
+
type Props = HTMLAttributes<"section"> & {
|
|
19
23
|
title: string
|
|
20
24
|
description: string
|
|
21
25
|
buttons: {
|
|
@@ -38,20 +42,25 @@ type Props = {
|
|
|
38
42
|
}[]
|
|
39
43
|
}
|
|
40
44
|
|
|
41
|
-
const {
|
|
45
|
+
const {
|
|
46
|
+
class: className,
|
|
47
|
+
title,
|
|
48
|
+
description,
|
|
49
|
+
buttons,
|
|
50
|
+
products,
|
|
51
|
+
...props
|
|
52
|
+
} = Astro.props
|
|
42
53
|
---
|
|
43
54
|
|
|
44
|
-
<Section class={cn("", className)}>
|
|
55
|
+
<Section class={cn("", className)} {...props}>
|
|
45
56
|
<SectionContainer class="gap-8">
|
|
46
57
|
<div
|
|
47
58
|
class="flex flex-col gap-4 md:flex-row md:items-end md:justify-between"
|
|
48
59
|
>
|
|
49
60
|
<div class="max-w-2xl">
|
|
50
|
-
<
|
|
51
|
-
class="text-3xl font-semibold tracking-tight text-balance sm:text-4xl"
|
|
52
|
-
>
|
|
61
|
+
<SectionTitle>
|
|
53
62
|
{title}
|
|
54
|
-
</
|
|
63
|
+
</SectionTitle>
|
|
55
64
|
<p class="text-muted-foreground mt-3 text-lg leading-8">
|
|
56
65
|
{description}
|
|
57
66
|
</p>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
3
|
import { Image } from "astro:assets"
|
|
4
|
+
import type { HTMLAttributes } from "astro/types"
|
|
4
5
|
|
|
5
6
|
import { cn } from "@/lib/utils"
|
|
6
7
|
import { Badge } from "@/components/ui/badge"
|
|
@@ -13,10 +14,13 @@ import {
|
|
|
13
14
|
CardTitle,
|
|
14
15
|
} from "@/components/ui/card"
|
|
15
16
|
import { Price, PriceUnit, PriceValue } from "@/components/ui/price"
|
|
16
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
Section,
|
|
19
|
+
SectionContainer,
|
|
20
|
+
SectionTitle,
|
|
21
|
+
} from "@/components/ui/section"
|
|
17
22
|
|
|
18
|
-
type Props = {
|
|
19
|
-
class?: string
|
|
23
|
+
type Props = HTMLAttributes<"section"> & {
|
|
20
24
|
badge: string
|
|
21
25
|
title: string
|
|
22
26
|
buttons: {
|
|
@@ -39,18 +43,23 @@ type Props = {
|
|
|
39
43
|
}[]
|
|
40
44
|
}
|
|
41
45
|
|
|
42
|
-
const {
|
|
46
|
+
const {
|
|
47
|
+
class: className,
|
|
48
|
+
badge,
|
|
49
|
+
title,
|
|
50
|
+
buttons,
|
|
51
|
+
products,
|
|
52
|
+
...props
|
|
53
|
+
} = Astro.props
|
|
43
54
|
---
|
|
44
55
|
|
|
45
|
-
<Section class={cn("", className)}>
|
|
56
|
+
<Section class={cn("", className)} {...props}>
|
|
46
57
|
<SectionContainer class="gap-8">
|
|
47
58
|
<div class="mx-auto max-w-2xl text-center">
|
|
48
59
|
<Badge variant="secondary">{badge}</Badge>
|
|
49
|
-
<
|
|
50
|
-
class="mt-4 text-3xl font-semibold tracking-tight text-balance sm:text-4xl"
|
|
51
|
-
>
|
|
60
|
+
<SectionTitle class="mt-4">
|
|
52
61
|
{title}
|
|
53
|
-
</
|
|
62
|
+
</SectionTitle>
|
|
54
63
|
<div class="mt-4 flex flex-wrap justify-center gap-3">
|
|
55
64
|
{
|
|
56
65
|
buttons.map(({ href, label, ...button }) => (
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
4
|
import QuoteIcon from "@lucide/astro/icons/quote"
|
|
4
5
|
|
|
5
6
|
import { cn } from "@/lib/utils"
|
|
6
7
|
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
|
|
7
8
|
import { Card, CardContent } from "@/components/ui/card"
|
|
8
9
|
import { Rating } from "@/components/ui/rating"
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
Section,
|
|
12
|
+
SectionContainer,
|
|
13
|
+
SectionDescription,
|
|
14
|
+
SectionTitle,
|
|
15
|
+
} from "@/components/ui/section"
|
|
10
16
|
|
|
11
|
-
type Props = {
|
|
12
|
-
class?: string
|
|
17
|
+
type Props = HTMLAttributes<"section"> & {
|
|
13
18
|
title?: string
|
|
14
19
|
description?: string
|
|
15
20
|
reviews: {
|
|
@@ -22,22 +27,18 @@ type Props = {
|
|
|
22
27
|
}[]
|
|
23
28
|
}
|
|
24
29
|
|
|
25
|
-
const { class: className, title, description, reviews } = Astro.props
|
|
30
|
+
const { class: className, title, description, reviews, ...props } = Astro.props
|
|
26
31
|
---
|
|
27
32
|
|
|
28
|
-
<Section class={cn("", className)}>
|
|
33
|
+
<Section class={cn("", className)} {...props}>
|
|
29
34
|
{
|
|
30
35
|
(title || description) && (
|
|
31
36
|
<SectionContainer class="items-center gap-4 text-center">
|
|
32
|
-
{title &&
|
|
33
|
-
<h2 class="text-foreground text-3xl font-semibold tracking-tight text-balance sm:text-4xl">
|
|
34
|
-
{title}
|
|
35
|
-
</h2>
|
|
36
|
-
)}
|
|
37
|
+
{title && <SectionTitle>{title}</SectionTitle>}
|
|
37
38
|
{description && (
|
|
38
|
-
<
|
|
39
|
+
<SectionDescription class="max-w-2xl">
|
|
39
40
|
{description}
|
|
40
|
-
</
|
|
41
|
+
</SectionDescription>
|
|
41
42
|
)}
|
|
42
43
|
</SectionContainer>
|
|
43
44
|
)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
4
|
import QuoteIcon from "@lucide/astro/icons/quote"
|
|
4
5
|
|
|
5
6
|
import { cn } from "@/lib/utils"
|
|
@@ -8,8 +9,7 @@ import { Rating } from "@/components/ui/rating"
|
|
|
8
9
|
import { Section, SectionContainer } from "@/components/ui/section"
|
|
9
10
|
import { Separator } from "@/components/ui/separator"
|
|
10
11
|
|
|
11
|
-
type Props = {
|
|
12
|
-
class?: string
|
|
12
|
+
type Props = HTMLAttributes<"section"> & {
|
|
13
13
|
featured: {
|
|
14
14
|
quote: string
|
|
15
15
|
image?: ImageMetadata
|
|
@@ -27,10 +27,10 @@ type Props = {
|
|
|
27
27
|
}[]
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
const { class: className, featured, reviews } = Astro.props
|
|
30
|
+
const { class: className, featured, reviews, ...props } = Astro.props
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
-
<Section class={cn("", className)}>
|
|
33
|
+
<Section class={cn("", className)} {...props}>
|
|
34
34
|
<SectionContainer
|
|
35
35
|
class="grid gap-10 lg:grid-cols-[minmax(0,1.3fr)_minmax(0,1fr)] lg:items-start"
|
|
36
36
|
>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
4
|
import QuoteIcon from "@lucide/astro/icons/quote"
|
|
4
5
|
|
|
5
6
|
import { cn } from "@/lib/utils"
|
|
@@ -12,10 +13,14 @@ import {
|
|
|
12
13
|
CarouselPrevious,
|
|
13
14
|
} from "@/components/ui/carousel"
|
|
14
15
|
import { Rating } from "@/components/ui/rating"
|
|
15
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
Section,
|
|
18
|
+
SectionContainer,
|
|
19
|
+
SectionDescription,
|
|
20
|
+
SectionTitle,
|
|
21
|
+
} from "@/components/ui/section"
|
|
16
22
|
|
|
17
|
-
type Props = {
|
|
18
|
-
class?: string
|
|
23
|
+
type Props = HTMLAttributes<"section"> & {
|
|
19
24
|
title?: string
|
|
20
25
|
description?: string
|
|
21
26
|
reviews: {
|
|
@@ -28,22 +33,18 @@ type Props = {
|
|
|
28
33
|
}[]
|
|
29
34
|
}
|
|
30
35
|
|
|
31
|
-
const { class: className, title, description, reviews } = Astro.props
|
|
36
|
+
const { class: className, title, description, reviews, ...props } = Astro.props
|
|
32
37
|
---
|
|
33
38
|
|
|
34
|
-
<Section class={cn("", className)}>
|
|
39
|
+
<Section class={cn("", className)} {...props}>
|
|
35
40
|
{
|
|
36
41
|
(title || description) && (
|
|
37
42
|
<SectionContainer class="items-center gap-4 text-center">
|
|
38
|
-
{title &&
|
|
39
|
-
<h2 class="text-foreground text-3xl font-semibold tracking-tight text-balance sm:text-4xl">
|
|
40
|
-
{title}
|
|
41
|
-
</h2>
|
|
42
|
-
)}
|
|
43
|
+
{title && <SectionTitle>{title}</SectionTitle>}
|
|
43
44
|
{description && (
|
|
44
|
-
<
|
|
45
|
+
<SectionDescription class="max-w-2xl">
|
|
45
46
|
{description}
|
|
46
|
-
</
|
|
47
|
+
</SectionDescription>
|
|
47
48
|
)}
|
|
48
49
|
</SectionContainer>
|
|
49
50
|
)
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
4
|
|
|
4
5
|
import { cn } from "@/lib/utils"
|
|
5
6
|
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
|
|
6
7
|
import { Card, CardContent } from "@/components/ui/card"
|
|
7
8
|
import { Marquee } from "@/components/ui/marquee"
|
|
8
9
|
import { Rating } from "@/components/ui/rating"
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
Section,
|
|
12
|
+
SectionContainer,
|
|
13
|
+
SectionDescription,
|
|
14
|
+
SectionTitle,
|
|
15
|
+
} from "@/components/ui/section"
|
|
10
16
|
|
|
11
|
-
type Props = {
|
|
12
|
-
class?: string
|
|
17
|
+
type Props = HTMLAttributes<"section"> & {
|
|
13
18
|
title?: string
|
|
14
19
|
description?: string
|
|
15
20
|
reviews: {
|
|
@@ -22,26 +27,22 @@ type Props = {
|
|
|
22
27
|
}[]
|
|
23
28
|
}
|
|
24
29
|
|
|
25
|
-
const { class: className, title, description, reviews } = Astro.props
|
|
30
|
+
const { class: className, title, description, reviews, ...props } = Astro.props
|
|
26
31
|
|
|
27
32
|
const half = Math.ceil(reviews.length / 2)
|
|
28
33
|
const topRow = reviews.slice(0, half)
|
|
29
34
|
const bottomRow = reviews.slice(half)
|
|
30
35
|
---
|
|
31
36
|
|
|
32
|
-
<Section class={cn("", className)}>
|
|
37
|
+
<Section class={cn("", className)} {...props}>
|
|
33
38
|
{
|
|
34
39
|
(title || description) && (
|
|
35
40
|
<SectionContainer class="items-center gap-4 text-center">
|
|
36
|
-
{title &&
|
|
37
|
-
<h2 class="text-foreground text-3xl font-semibold tracking-tight text-balance sm:text-4xl">
|
|
38
|
-
{title}
|
|
39
|
-
</h2>
|
|
40
|
-
)}
|
|
41
|
+
{title && <SectionTitle>{title}</SectionTitle>}
|
|
41
42
|
{description && (
|
|
42
|
-
<
|
|
43
|
+
<SectionDescription class="max-w-2xl">
|
|
43
44
|
{description}
|
|
44
|
-
</
|
|
45
|
+
</SectionDescription>
|
|
45
46
|
)}
|
|
46
47
|
</SectionContainer>
|
|
47
48
|
)
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
|
+
import type { HTMLAttributes } from "astro/types"
|
|
3
4
|
import QuoteIcon from "@lucide/astro/icons/quote"
|
|
4
5
|
|
|
5
6
|
import { cn } from "@/lib/utils"
|
|
6
7
|
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
|
|
7
8
|
import { Marquee } from "@/components/ui/marquee"
|
|
8
9
|
import { Rating } from "@/components/ui/rating"
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
Section,
|
|
12
|
+
SectionContainer,
|
|
13
|
+
SectionDescription,
|
|
14
|
+
SectionTitle,
|
|
15
|
+
} from "@/components/ui/section"
|
|
10
16
|
|
|
11
|
-
type Props = {
|
|
12
|
-
class?: string
|
|
17
|
+
type Props = HTMLAttributes<"section"> & {
|
|
13
18
|
title?: string
|
|
14
19
|
description?: string
|
|
15
20
|
reviews: {
|
|
@@ -22,7 +27,7 @@ type Props = {
|
|
|
22
27
|
}[]
|
|
23
28
|
}
|
|
24
29
|
|
|
25
|
-
const { class: className, title, description, reviews } = Astro.props
|
|
30
|
+
const { class: className, title, description, reviews, ...props } = Astro.props
|
|
26
31
|
|
|
27
32
|
const third = Math.ceil(reviews.length / 3)
|
|
28
33
|
const row1 = reviews.slice(0, third)
|
|
@@ -30,19 +35,15 @@ const row2 = reviews.slice(third, third * 2)
|
|
|
30
35
|
const row3 = reviews.slice(third * 2)
|
|
31
36
|
---
|
|
32
37
|
|
|
33
|
-
<Section class={cn("", className)}>
|
|
38
|
+
<Section class={cn("", className)} {...props}>
|
|
34
39
|
{
|
|
35
40
|
(title || description) && (
|
|
36
41
|
<SectionContainer class="items-center gap-4 text-center">
|
|
37
|
-
{title &&
|
|
38
|
-
<h2 class="text-foreground text-3xl font-semibold tracking-tight text-balance sm:text-4xl">
|
|
39
|
-
{title}
|
|
40
|
-
</h2>
|
|
41
|
-
)}
|
|
42
|
+
{title && <SectionTitle>{title}</SectionTitle>}
|
|
42
43
|
{description && (
|
|
43
|
-
<
|
|
44
|
+
<SectionDescription class="max-w-2xl">
|
|
44
45
|
{description}
|
|
45
|
-
</
|
|
46
|
+
</SectionDescription>
|
|
46
47
|
)}
|
|
47
48
|
</SectionContainer>
|
|
48
49
|
)
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
3
|
import { Image } from "astro:assets"
|
|
4
|
+
import type { HTMLAttributes } from "astro/types"
|
|
4
5
|
import ArrowRightIcon from "@lucide/astro/icons/arrow-right"
|
|
5
6
|
|
|
6
7
|
import { cn } from "@/lib/utils"
|
|
7
8
|
import { Badge } from "@/components/ui/badge"
|
|
8
9
|
import { Button } from "@/components/ui/button"
|
|
9
|
-
import {
|
|
10
|
+
import { Icon } from "@/components/ui/icon"
|
|
11
|
+
import {
|
|
12
|
+
Section,
|
|
13
|
+
SectionContainer,
|
|
14
|
+
SectionTitle,
|
|
15
|
+
} from "@/components/ui/section"
|
|
10
16
|
import PlaceholderImage from "@/assets/placeholder.webp"
|
|
11
17
|
|
|
12
|
-
type Props = {
|
|
13
|
-
class?: string
|
|
18
|
+
type Props = HTMLAttributes<"section"> & {
|
|
14
19
|
badge?: string
|
|
15
20
|
title: string
|
|
16
21
|
buttons?: {
|
|
@@ -30,21 +35,26 @@ type Props = {
|
|
|
30
35
|
}[]
|
|
31
36
|
}
|
|
32
37
|
|
|
33
|
-
const {
|
|
38
|
+
const {
|
|
39
|
+
class: className,
|
|
40
|
+
badge,
|
|
41
|
+
title,
|
|
42
|
+
buttons,
|
|
43
|
+
services,
|
|
44
|
+
...props
|
|
45
|
+
} = Astro.props
|
|
34
46
|
---
|
|
35
47
|
|
|
36
|
-
<Section class={cn("", className)}>
|
|
48
|
+
<Section class={cn("", className)} {...props}>
|
|
37
49
|
<SectionContainer class="gap-8">
|
|
38
50
|
<div
|
|
39
51
|
class="flex flex-col gap-4 md:flex-row md:items-end md:justify-between"
|
|
40
52
|
>
|
|
41
53
|
<div class="max-w-2xl">
|
|
42
54
|
{badge && <Badge variant="secondary">{badge}</Badge>}
|
|
43
|
-
<
|
|
44
|
-
class="mt-4 text-3xl font-semibold tracking-tight text-balance sm:text-4xl"
|
|
45
|
-
>
|
|
55
|
+
<SectionTitle class="mt-4">
|
|
46
56
|
{title}
|
|
47
|
-
</
|
|
57
|
+
</SectionTitle>
|
|
48
58
|
</div>
|
|
49
59
|
{
|
|
50
60
|
buttons?.length && (
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
3
|
import { Image } from "astro:assets"
|
|
4
|
+
import type { HTMLAttributes } from "astro/types"
|
|
4
5
|
|
|
5
6
|
import { cn } from "@/lib/utils"
|
|
6
7
|
import { Badge } from "@/components/ui/badge"
|
|
7
8
|
import { Button } from "@/components/ui/button"
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
Section,
|
|
11
|
+
SectionContainer,
|
|
12
|
+
SectionTitle,
|
|
13
|
+
} from "@/components/ui/section"
|
|
9
14
|
import PlaceholderImage from "@/assets/placeholder.webp"
|
|
10
15
|
|
|
11
|
-
type Props = {
|
|
12
|
-
class?: string
|
|
16
|
+
type Props = HTMLAttributes<"section"> & {
|
|
13
17
|
badge?: string
|
|
14
18
|
title: string
|
|
15
19
|
description?: string
|
|
@@ -40,18 +44,17 @@ const {
|
|
|
40
44
|
description,
|
|
41
45
|
buttons,
|
|
42
46
|
services,
|
|
47
|
+
...props
|
|
43
48
|
} = Astro.props
|
|
44
49
|
---
|
|
45
50
|
|
|
46
|
-
<Section class={cn("", className)}>
|
|
51
|
+
<Section class={cn("", className)} {...props}>
|
|
47
52
|
<SectionContainer class="gap-12">
|
|
48
53
|
<div class="mx-auto max-w-2xl text-center">
|
|
49
54
|
{badge && <Badge variant="secondary">{badge}</Badge>}
|
|
50
|
-
<
|
|
51
|
-
class="mt-4 text-3xl font-semibold tracking-tight text-balance sm:text-4xl"
|
|
52
|
-
>
|
|
55
|
+
<SectionTitle class="mt-4">
|
|
53
56
|
{title}
|
|
54
|
-
</
|
|
57
|
+
</SectionTitle>
|
|
55
58
|
{
|
|
56
59
|
description && (
|
|
57
60
|
<p class="text-muted-foreground mt-4 text-base leading-relaxed text-balance">
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
3
|
import { Image } from "astro:assets"
|
|
4
|
+
import type { HTMLAttributes } from "astro/types"
|
|
4
5
|
|
|
5
6
|
import { cn } from "@/lib/utils"
|
|
6
7
|
import { Badge } from "@/components/ui/badge"
|
|
7
8
|
import { Button } from "@/components/ui/button"
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
Section,
|
|
11
|
+
SectionContainer,
|
|
12
|
+
SectionTitle,
|
|
13
|
+
} from "@/components/ui/section"
|
|
9
14
|
import PlaceholderImage from "@/assets/placeholder.webp"
|
|
10
15
|
|
|
11
|
-
type Props = {
|
|
12
|
-
class?: string
|
|
16
|
+
type Props = HTMLAttributes<"section"> & {
|
|
13
17
|
badge?: string
|
|
14
18
|
title: string
|
|
15
19
|
description?: string
|
|
@@ -39,18 +43,17 @@ const {
|
|
|
39
43
|
description,
|
|
40
44
|
buttons,
|
|
41
45
|
services,
|
|
46
|
+
...props
|
|
42
47
|
} = Astro.props
|
|
43
48
|
---
|
|
44
49
|
|
|
45
|
-
<Section class={cn("", className)}>
|
|
50
|
+
<Section class={cn("", className)} {...props}>
|
|
46
51
|
<SectionContainer class="gap-8">
|
|
47
52
|
<div class="mx-auto max-w-2xl text-center">
|
|
48
53
|
{badge && <Badge variant="secondary">{badge}</Badge>}
|
|
49
|
-
<
|
|
50
|
-
class="mt-4 text-3xl font-semibold tracking-tight text-balance sm:text-4xl"
|
|
51
|
-
>
|
|
54
|
+
<SectionTitle class="mt-4">
|
|
52
55
|
{title}
|
|
53
|
-
</
|
|
56
|
+
</SectionTitle>
|
|
54
57
|
{
|
|
55
58
|
description && (
|
|
56
59
|
<p class="text-muted-foreground mt-4 text-base leading-relaxed text-balance">
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ImageMetadata } from "astro"
|
|
3
3
|
import { Image } from "astro:assets"
|
|
4
|
+
import type { HTMLAttributes } from "astro/types"
|
|
4
5
|
import ArrowRightIcon from "@lucide/astro/icons/arrow-right"
|
|
5
6
|
|
|
6
7
|
import { cn } from "@/lib/utils"
|
|
7
8
|
import { Button } from "@/components/ui/button"
|
|
8
|
-
import {
|
|
9
|
+
import { Icon } from "@/components/ui/icon"
|
|
10
|
+
import {
|
|
11
|
+
Section,
|
|
12
|
+
SectionContainer,
|
|
13
|
+
SectionTitle,
|
|
14
|
+
} from "@/components/ui/section"
|
|
9
15
|
import PlaceholderImage from "@/assets/placeholder.webp"
|
|
10
16
|
|
|
11
|
-
type Props = {
|
|
12
|
-
class?: string
|
|
17
|
+
type Props = HTMLAttributes<"section"> & {
|
|
13
18
|
title: string
|
|
14
19
|
description?: string
|
|
15
20
|
buttons?: {
|
|
@@ -28,20 +33,25 @@ type Props = {
|
|
|
28
33
|
}[]
|
|
29
34
|
}
|
|
30
35
|
|
|
31
|
-
const {
|
|
36
|
+
const {
|
|
37
|
+
class: className,
|
|
38
|
+
title,
|
|
39
|
+
description,
|
|
40
|
+
buttons,
|
|
41
|
+
services,
|
|
42
|
+
...props
|
|
43
|
+
} = Astro.props
|
|
32
44
|
---
|
|
33
45
|
|
|
34
|
-
<Section class={cn("", className)}>
|
|
46
|
+
<Section class={cn("", className)} {...props}>
|
|
35
47
|
<SectionContainer class="gap-8">
|
|
36
48
|
<div
|
|
37
49
|
class="flex flex-col gap-4 md:flex-row md:items-end md:justify-between"
|
|
38
50
|
>
|
|
39
51
|
<div class="max-w-2xl">
|
|
40
|
-
<
|
|
41
|
-
class="text-3xl font-semibold tracking-tight text-balance sm:text-4xl"
|
|
42
|
-
>
|
|
52
|
+
<SectionTitle>
|
|
43
53
|
{title}
|
|
44
|
-
</
|
|
54
|
+
</SectionTitle>
|
|
45
55
|
{
|
|
46
56
|
description && (
|
|
47
57
|
<p class="text-muted-foreground mt-4 text-base leading-relaxed text-balance">
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types"
|
|
2
3
|
import ArrowRightIcon from "@lucide/astro/icons/arrow-right"
|
|
3
4
|
|
|
4
5
|
import { cn } from "@/lib/utils"
|
|
5
6
|
import { Badge } from "@/components/ui/badge"
|
|
6
7
|
import { Button } from "@/components/ui/button"
|
|
7
8
|
import { Icon } from "@/components/ui/icon"
|
|
8
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
Section,
|
|
11
|
+
SectionContainer,
|
|
12
|
+
SectionTitle,
|
|
13
|
+
} from "@/components/ui/section"
|
|
9
14
|
|
|
10
|
-
type Props = {
|
|
11
|
-
class?: string
|
|
15
|
+
type Props = HTMLAttributes<"section"> & {
|
|
12
16
|
badge?: string
|
|
13
17
|
title: string
|
|
14
18
|
description?: string
|
|
@@ -32,18 +36,17 @@ const {
|
|
|
32
36
|
description,
|
|
33
37
|
buttons,
|
|
34
38
|
services,
|
|
39
|
+
...props
|
|
35
40
|
} = Astro.props
|
|
36
41
|
---
|
|
37
42
|
|
|
38
|
-
<Section class={cn("", className)}>
|
|
43
|
+
<Section class={cn("", className)} {...props}>
|
|
39
44
|
<SectionContainer class="gap-12">
|
|
40
45
|
<div class="mx-auto max-w-2xl text-center">
|
|
41
46
|
{badge && <Badge variant="secondary">{badge}</Badge>}
|
|
42
|
-
<
|
|
43
|
-
class="mt-4 text-3xl font-semibold tracking-tight text-balance sm:text-4xl"
|
|
44
|
-
>
|
|
47
|
+
<SectionTitle class="mt-4">
|
|
45
48
|
{title}
|
|
46
|
-
</
|
|
49
|
+
</SectionTitle>
|
|
47
50
|
{
|
|
48
51
|
description && (
|
|
49
52
|
<p class="text-muted-foreground mt-4 text-base leading-relaxed text-balance">
|