fulldev-ui 0.10.1 → 0.11.0
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 +6 -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 +6 -0
- 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 +5 -0
- 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 +6 -0
- 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 +10 -4
- package/src/components/blocks/blocks-1.astro +1 -1
- package/src/components/blocks/contact-1.astro +72 -39
- package/src/components/blocks/contact-2.astro +69 -35
- package/src/components/blocks/contact-3.astro +61 -34
- 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/ui/accordion/accordion.astro +1 -0
- package/src/components/ui/alert-dialog/alert-dialog.astro +1 -0
- 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/lib/pages.ts +12 -0
package/public/r/content-4.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "content-4",
|
|
4
|
+
"title": "Content 4",
|
|
5
|
+
"description": "Flexible narrative content sections for explainers, comparisons, and supporting context.",
|
|
4
6
|
"dependencies": [
|
|
5
7
|
"@lucide/astro"
|
|
6
8
|
],
|
|
@@ -11,7 +13,7 @@
|
|
|
11
13
|
"files": [
|
|
12
14
|
{
|
|
13
15
|
"path": "src/components/blocks/content-4.astro",
|
|
14
|
-
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\nimport { CheckIcon } from \"@lucide/astro\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Section
|
|
16
|
+
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\nimport type { HTMLAttributes } from \"astro/types\"\nimport { CheckIcon } from \"@lucide/astro\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Section,\n SectionContainer,\n SectionDescription,\n SectionTitle,\n} from \"@/components/ui/section\"\nimport PlaceholderImage from \"@/assets/placeholder.webp\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n features?: string[]\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n image?: {\n src: ImageMetadata\n alt: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n features,\n buttons,\n image = { src: PlaceholderImage, alt: \"Content image\" },\n ...props\n} = Astro.props\n---\n\n<Section class={cn(\"\", className)} {...props}>\n <SectionContainer>\n <div class=\"grid gap-12 lg:grid-cols-[1fr_2fr] lg:items-center\">\n <div class=\"flex flex-col gap-6\">\n <div class=\"flex flex-col gap-4\">\n <SectionTitle>\n {title}\n </SectionTitle>\n <SectionDescription>\n {description}\n </SectionDescription>\n </div>\n {\n features?.length && (\n <ul class=\"flex flex-col gap-3\">\n {features.map((feature) => (\n <li class=\"flex items-center gap-3 text-sm\">\n <CheckIcon class=\"text-primary size-4 shrink-0\" />\n {feature}\n </li>\n ))}\n </ul>\n )\n }\n {\n buttons?.length && (\n <div class=\"flex flex-wrap gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"secondary\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n </div>\n <Image\n src={image.src}\n alt={image.alt}\n class=\"aspect-[4/3] w-full rounded-xl border object-cover\"\n widths={[640, 960, 1280]}\n sizes=\"(min-width: 1024px) 66vw, 100vw\"\n />\n </div>\n </SectionContainer>\n</Section>\n",
|
|
15
17
|
"type": "registry:block"
|
|
16
18
|
},
|
|
17
19
|
{
|
|
@@ -21,5 +23,9 @@
|
|
|
21
23
|
"target": "src/assets/placeholder.webp"
|
|
22
24
|
}
|
|
23
25
|
],
|
|
26
|
+
"docs": "https://ui.full.dev/blocks/content/",
|
|
27
|
+
"categories": [
|
|
28
|
+
"content"
|
|
29
|
+
],
|
|
24
30
|
"type": "registry:block"
|
|
25
31
|
}
|
package/public/r/cta-1.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "cta-1",
|
|
4
|
+
"title": "Cta 1",
|
|
5
|
+
"description": "Call-to-action sections that close pages, bridge sections, or reinforce a launch moment.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/avatar",
|
|
6
8
|
"@fulldev/button",
|
|
@@ -10,9 +12,13 @@
|
|
|
10
12
|
"files": [
|
|
11
13
|
{
|
|
12
14
|
"path": "src/components/blocks/cta-1.astro",
|
|
13
|
-
"content": "---\nimport type { ImageMetadata } from \"astro\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {
|
|
15
|
+
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionContainer,\n SectionDescription,\n SectionTitle,\n} from \"@/components/ui/section\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n socialProof?: {\n avatars: {\n image?: ImageMetadata\n initials: string\n name?: string\n }[]\n rating: number\n text: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n buttons,\n socialProof,\n ...props\n} = Astro.props\n---\n\n<Section variant=\"floating\" class={cn(\"\", className)} {...props}>\n <SectionContainer class=\"items-center text-center\">\n {\n socialProof && (\n <div class=\"flex flex-col items-center gap-3\">\n <AvatarGroup>\n {socialProof.avatars.map((avatar) => (\n <Avatar class=\"ring-background size-11 ring\">\n <AvatarImage\n src={avatar.image}\n alt={avatar.name ?? avatar.initials}\n />\n <AvatarFallback>{avatar.initials}</AvatarFallback>\n </Avatar>\n ))}\n </AvatarGroup>\n <div class=\"flex items-center gap-2\">\n <Rating value={socialProof.rating} />\n <span class=\"text-muted-foreground text-sm\">\n {socialProof.text}\n </span>\n </div>\n </div>\n )\n }\n <div class=\"flex max-w-2xl flex-col items-center gap-5\">\n <SectionTitle class=\"leading-[1.1]\">\n {title}\n </SectionTitle>\n <SectionDescription>\n {description}\n </SectionDescription>\n </div>\n {\n buttons?.length && (\n <div class=\"flex flex-wrap justify-center gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"secondary\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n </SectionContainer>\n</Section>\n",
|
|
14
16
|
"type": "registry:block"
|
|
15
17
|
}
|
|
16
18
|
],
|
|
19
|
+
"docs": "https://ui.full.dev/blocks/cta/",
|
|
20
|
+
"categories": [
|
|
21
|
+
"cta"
|
|
22
|
+
],
|
|
17
23
|
"type": "registry:block"
|
|
18
24
|
}
|
package/public/r/cta-2.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "cta-2",
|
|
4
|
+
"title": "Cta 2",
|
|
5
|
+
"description": "Call-to-action sections that close pages, bridge sections, or reinforce a launch moment.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/avatar",
|
|
6
8
|
"@fulldev/button",
|
|
@@ -10,7 +12,7 @@
|
|
|
10
12
|
"files": [
|
|
11
13
|
{
|
|
12
14
|
"path": "src/components/blocks/cta-2.astro",
|
|
13
|
-
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {
|
|
15
|
+
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionContainer,\n SectionTitle,\n} from \"@/components/ui/section\"\nimport PlaceholderImage from \"@/assets/placeholder.webp\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n socialProof?: {\n avatars: {\n image?: ImageMetadata\n initials: string\n name?: string\n }[]\n rating: number\n text: string\n }\n image?: {\n src: ImageMetadata\n alt: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n buttons,\n socialProof,\n image = { src: PlaceholderImage, alt: \"CTA image\" },\n ...props\n} = Astro.props\n---\n\n<Section variant=\"floating\" class={cn(\"\", className)} {...props}>\n <SectionContainer class=\"grid gap-12 lg:grid-cols-2 lg:items-center\">\n <div class=\"flex flex-col gap-6\">\n <div class=\"flex flex-col gap-4\">\n <SectionTitle class=\"leading-[1.1]\">\n {title}\n </SectionTitle>\n <p class=\"text-muted-foreground text-lg leading-relaxed\">\n {description}\n </p>\n </div>\n {\n buttons?.length && (\n <div class=\"flex flex-wrap gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"outline\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n {\n socialProof && (\n <div class=\"flex items-center gap-3\">\n <AvatarGroup>\n {socialProof.avatars.map((avatar) => (\n <Avatar class=\"ring-background size-10 ring\">\n <AvatarImage\n src={avatar.image}\n alt={avatar.name ?? avatar.initials}\n />\n <AvatarFallback>{avatar.initials}</AvatarFallback>\n </Avatar>\n ))}\n </AvatarGroup>\n <div class=\"flex flex-col gap-0.5\">\n <Rating value={socialProof.rating} />\n <span class=\"text-muted-foreground text-xs\">\n {socialProof.text}\n </span>\n </div>\n </div>\n )\n }\n </div>\n <Image\n src={image.src}\n alt={image.alt}\n class=\"aspect-[4/3] w-full rounded-xl border object-cover\"\n widths={[640, 960, 1280]}\n sizes=\"(min-width: 1024px) 50vw, 100vw\"\n />\n </SectionContainer>\n</Section>\n",
|
|
14
16
|
"type": "registry:block"
|
|
15
17
|
},
|
|
16
18
|
{
|
|
@@ -20,5 +22,9 @@
|
|
|
20
22
|
"target": "src/assets/placeholder.webp"
|
|
21
23
|
}
|
|
22
24
|
],
|
|
25
|
+
"docs": "https://ui.full.dev/blocks/cta/",
|
|
26
|
+
"categories": [
|
|
27
|
+
"cta"
|
|
28
|
+
],
|
|
23
29
|
"type": "registry:block"
|
|
24
30
|
}
|
package/public/r/cta-3.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "cta-3",
|
|
4
|
+
"title": "Cta 3",
|
|
5
|
+
"description": "Call-to-action sections that close pages, bridge sections, or reinforce a launch moment.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/avatar",
|
|
6
8
|
"@fulldev/button",
|
|
@@ -10,9 +12,13 @@
|
|
|
10
12
|
"files": [
|
|
11
13
|
{
|
|
12
14
|
"path": "src/components/blocks/cta-3.astro",
|
|
13
|
-
"content": "---\nimport type { ImageMetadata } from \"astro\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {
|
|
15
|
+
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionContainer,\n SectionTitle,\n} from \"@/components/ui/section\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n socialProof?: {\n avatars: {\n image?: ImageMetadata\n initials: string\n name?: string\n }[]\n rating: number\n text: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n buttons,\n socialProof,\n ...props\n} = Astro.props\n---\n\n<Section\n variant=\"floating\"\n class={cn(\"bg-accent/50 shadow-none\", className)}\n {...props}\n>\n <SectionContainer\n class=\"grid gap-8 lg:grid-cols-[minmax(0,1fr)_auto] lg:items-center\"\n >\n <div class=\"flex flex-col gap-5\">\n <SectionTitle class=\"leading-[1.1]\">\n {title}\n </SectionTitle>\n <p class=\"text-muted-foreground max-w-2xl text-lg leading-relaxed\">\n {description}\n </p>\n </div>\n <div class=\"flex flex-col gap-6 lg:items-end\">\n {\n buttons?.length && (\n <div class=\"flex flex-wrap gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"secondary\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n {\n socialProof && (\n <div class=\"flex items-center gap-3\">\n <AvatarGroup>\n {socialProof.avatars.map((avatar) => (\n <Avatar class=\"ring-background size-11 ring\">\n <AvatarImage\n src={avatar.image}\n alt={avatar.name ?? avatar.initials}\n />\n <AvatarFallback>{avatar.initials}</AvatarFallback>\n </Avatar>\n ))}\n </AvatarGroup>\n <div class=\"flex flex-col gap-0.5\">\n <Rating value={socialProof.rating} />\n <span class=\"text-muted-foreground text-xs\">\n {socialProof.text}\n </span>\n </div>\n </div>\n )\n }\n </div>\n </SectionContainer>\n</Section>\n",
|
|
14
16
|
"type": "registry:block"
|
|
15
17
|
}
|
|
16
18
|
],
|
|
19
|
+
"docs": "https://ui.full.dev/blocks/cta/",
|
|
20
|
+
"categories": [
|
|
21
|
+
"cta"
|
|
22
|
+
],
|
|
17
23
|
"type": "registry:block"
|
|
18
24
|
}
|
package/public/r/cta-4.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "cta-4",
|
|
4
|
+
"title": "Cta 4",
|
|
5
|
+
"description": "Call-to-action sections that close pages, bridge sections, or reinforce a launch moment.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/avatar",
|
|
6
8
|
"@fulldev/button",
|
|
@@ -10,7 +12,7 @@
|
|
|
10
12
|
"files": [
|
|
11
13
|
{
|
|
12
14
|
"path": "src/components/blocks/cta-4.astro",
|
|
13
|
-
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {
|
|
15
|
+
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionContainer,\n SectionDescription,\n SectionTitle,\n} from \"@/components/ui/section\"\nimport PlaceholderImage from \"@/assets/placeholder.webp\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n socialProof?: {\n avatars: {\n image?: ImageMetadata\n initials: string\n name?: string\n }[]\n rating: number\n text: string\n }\n image?: {\n src: ImageMetadata\n alt: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n buttons,\n socialProof,\n image = { src: PlaceholderImage, alt: \"CTA image\" },\n ...props\n} = Astro.props\n---\n\n<Section\n variant=\"floating\"\n class={cn(\"dark bg-background overflow-hidden\", className)}\n {...props}\n>\n <Image\n src={image.src}\n alt={image.alt}\n class=\"absolute inset-0 size-full object-cover opacity-50\"\n widths={[640, 960, 1280, 1536]}\n sizes=\"(min-width: 80rem) 80rem, 100vw\"\n />\n <SectionContainer class=\"items-center text-center\">\n <div class=\"flex max-w-2xl flex-col items-center gap-5\">\n <SectionTitle class=\"leading-[1.1]\">\n {title}\n </SectionTitle>\n <SectionDescription>\n {description}\n </SectionDescription>\n </div>\n {\n buttons?.length && (\n <div class=\"flex flex-wrap justify-center gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={button.variant ?? (index === 0 ? \"default\" : \"outline\")}\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n {\n socialProof && (\n <div class=\"flex items-center gap-3\">\n <AvatarGroup>\n {socialProof.avatars.map((avatar) => (\n <Avatar class=\"ring-background size-11 ring\">\n <AvatarImage\n src={avatar.image}\n alt={avatar.name ?? avatar.initials}\n />\n <AvatarFallback>{avatar.initials}</AvatarFallback>\n </Avatar>\n ))}\n </AvatarGroup>\n <div class=\"flex flex-col gap-0.5\">\n <Rating value={socialProof.rating} />\n <span class=\"text-muted-foreground text-sm\">\n {socialProof.text}\n </span>\n </div>\n </div>\n )\n }\n </SectionContainer>\n</Section>\n",
|
|
14
16
|
"type": "registry:block"
|
|
15
17
|
},
|
|
16
18
|
{
|
|
@@ -20,5 +22,9 @@
|
|
|
20
22
|
"target": "src/assets/placeholder.webp"
|
|
21
23
|
}
|
|
22
24
|
],
|
|
25
|
+
"docs": "https://ui.full.dev/blocks/cta/",
|
|
26
|
+
"categories": [
|
|
27
|
+
"cta"
|
|
28
|
+
],
|
|
23
29
|
"type": "registry:block"
|
|
24
30
|
}
|
package/public/r/cta-5.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "cta-5",
|
|
4
|
+
"title": "Cta 5",
|
|
5
|
+
"description": "Call-to-action sections that close pages, bridge sections, or reinforce a launch moment.",
|
|
4
6
|
"dependencies": [
|
|
5
7
|
"@lucide/astro"
|
|
6
8
|
],
|
|
@@ -11,7 +13,7 @@
|
|
|
11
13
|
"files": [
|
|
12
14
|
{
|
|
13
15
|
"path": "src/components/blocks/cta-5.astro",
|
|
14
|
-
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\nimport { CheckIcon } from \"@lucide/astro\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Section
|
|
16
|
+
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\nimport type { HTMLAttributes } from \"astro/types\"\nimport { CheckIcon } from \"@lucide/astro\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\nimport {\n Section,\n SectionContainer,\n SectionTitle,\n} from \"@/components/ui/section\"\nimport PlaceholderImage from \"@/assets/placeholder.webp\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n features?: string[]\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n image?: {\n src: ImageMetadata\n alt: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n features,\n buttons,\n image = { src: PlaceholderImage, alt: \"CTA image\" },\n ...props\n} = Astro.props\n---\n\n<Section class={cn(\"\", className)} {...props}>\n <SectionContainer class=\"grid gap-12 lg:grid-cols-2 lg:items-center\">\n <div class=\"flex flex-col gap-6\">\n <div class=\"flex flex-col gap-4\">\n <SectionTitle class=\"leading-[1.1]\">\n {title}\n </SectionTitle>\n <p class=\"text-muted-foreground text-lg leading-relaxed\">\n {description}\n </p>\n </div>\n {\n features?.length && (\n <ul class=\"flex flex-col gap-3\">\n {features.map((feature) => (\n <li class=\"flex items-center gap-3 text-sm\">\n <CheckIcon class=\"text-primary size-4 shrink-0\" />\n {feature}\n </li>\n ))}\n </ul>\n )\n }\n {\n buttons?.length && (\n <div class=\"flex flex-wrap gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"outline\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n </div>\n <Image\n src={image.src}\n alt={image.alt}\n class=\"aspect-[4/3] w-full rounded-xl border object-cover\"\n widths={[640, 960, 1280]}\n sizes=\"(min-width: 1024px) 50vw, 100vw\"\n />\n </SectionContainer>\n</Section>\n",
|
|
15
17
|
"type": "registry:block"
|
|
16
18
|
},
|
|
17
19
|
{
|
|
@@ -21,5 +23,9 @@
|
|
|
21
23
|
"target": "src/assets/placeholder.webp"
|
|
22
24
|
}
|
|
23
25
|
],
|
|
26
|
+
"docs": "https://ui.full.dev/blocks/cta/",
|
|
27
|
+
"categories": [
|
|
28
|
+
"cta"
|
|
29
|
+
],
|
|
24
30
|
"type": "registry:block"
|
|
25
31
|
}
|
package/public/r/cta-6.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "cta-6",
|
|
4
|
+
"title": "Cta 6",
|
|
5
|
+
"description": "Call-to-action sections that close pages, bridge sections, or reinforce a launch moment.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/avatar",
|
|
6
8
|
"@fulldev/button",
|
|
@@ -10,7 +12,7 @@
|
|
|
10
12
|
"files": [
|
|
11
13
|
{
|
|
12
14
|
"path": "src/components/blocks/cta-6.astro",
|
|
13
|
-
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {
|
|
15
|
+
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport { Image } from \"astro:assets\"\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport { Rating } from \"@/components/ui/rating\"\nimport {\n Section,\n SectionContainer,\n SectionTitle,\n} from \"@/components/ui/section\"\nimport PlaceholderImage from \"@/assets/placeholder.webp\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n socialProof?: {\n avatars: {\n image?: ImageMetadata\n initials: string\n name?: string\n }[]\n rating: number\n text: string\n }\n image?: {\n src: ImageMetadata\n alt: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n buttons,\n socialProof,\n image = { src: PlaceholderImage, alt: \"CTA image\" },\n ...props\n} = Astro.props\n---\n\n<Section class={cn(\"\", className)} {...props}>\n <SectionContainer class=\"grid gap-12 lg:grid-cols-2 lg:items-center\">\n <Image\n src={image.src}\n alt={image.alt}\n class=\"aspect-[4/3] w-full rounded-xl border object-cover\"\n widths={[640, 960, 1280]}\n sizes=\"(min-width: 1024px) 50vw, 100vw\"\n />\n <div class=\"flex flex-col gap-6\">\n <div class=\"flex flex-col gap-4\">\n <SectionTitle class=\"leading-[1.1]\">\n {title}\n </SectionTitle>\n <p class=\"text-muted-foreground text-lg leading-relaxed\">\n {description}\n </p>\n </div>\n {\n buttons?.length && (\n <div class=\"flex flex-wrap gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"outline\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n {\n socialProof && (\n <div class=\"flex items-center gap-3\">\n <AvatarGroup>\n {socialProof.avatars.map((avatar) => (\n <Avatar class=\"ring-background size-10 ring\">\n <AvatarImage\n src={avatar.image}\n alt={avatar.name ?? avatar.initials}\n />\n <AvatarFallback>{avatar.initials}</AvatarFallback>\n </Avatar>\n ))}\n </AvatarGroup>\n <div class=\"flex flex-col gap-0.5\">\n <Rating value={socialProof.rating} />\n <span class=\"text-muted-foreground text-xs\">\n {socialProof.text}\n </span>\n </div>\n </div>\n )\n }\n </div>\n </SectionContainer>\n</Section>\n",
|
|
14
16
|
"type": "registry:block"
|
|
15
17
|
},
|
|
16
18
|
{
|
|
@@ -20,5 +22,9 @@
|
|
|
20
22
|
"target": "src/assets/placeholder.webp"
|
|
21
23
|
}
|
|
22
24
|
],
|
|
25
|
+
"docs": "https://ui.full.dev/blocks/cta/",
|
|
26
|
+
"categories": [
|
|
27
|
+
"cta"
|
|
28
|
+
],
|
|
23
29
|
"type": "registry:block"
|
|
24
30
|
}
|
package/public/r/cta-7.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "cta-7",
|
|
4
|
+
"title": "Cta 7",
|
|
5
|
+
"description": "Call-to-action sections that close pages, bridge sections, or reinforce a launch moment.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/avatar",
|
|
6
8
|
"@fulldev/button",
|
|
@@ -9,9 +11,13 @@
|
|
|
9
11
|
"files": [
|
|
10
12
|
{
|
|
11
13
|
"path": "src/components/blocks/cta-7.astro",
|
|
12
|
-
"content": "---\nimport type { ImageMetadata } from \"astro\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport {
|
|
14
|
+
"content": "---\nimport type { ImageMetadata } from \"astro\"\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Avatar,\n AvatarFallback,\n AvatarGroup,\n AvatarGroupCount,\n AvatarImage,\n} from \"@/components/ui/avatar\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Section,\n SectionContainer,\n SectionDescription,\n SectionTitle,\n} from \"@/components/ui/section\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n socialProof?: {\n avatars: {\n image?: ImageMetadata\n initials: string\n name?: string\n }[]\n count?: string | number\n rating?: number\n text: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n buttons,\n socialProof,\n ...props\n} = Astro.props\n---\n\n<Section\n class={cn(\"bg-primary/10 border-primary/15 border-y\", className)}\n {...props}\n>\n <SectionContainer class=\"items-center text-center\">\n <div class=\"flex max-w-2xl flex-col items-center gap-5\">\n <SectionTitle class=\"leading-[1.1]\">\n {title}\n </SectionTitle>\n <SectionDescription>\n {description}\n </SectionDescription>\n </div>\n {\n buttons?.length && (\n <div class=\"flex flex-wrap justify-center gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"secondary\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n {\n socialProof && (\n <div class=\"flex flex-col items-center gap-4\">\n <AvatarGroup>\n {socialProof.avatars.map((avatar) => (\n <Avatar class=\"ring-primary/10 bg-background size-11 ring\">\n <AvatarImage\n src={avatar.image}\n alt={avatar.name ?? avatar.initials}\n />\n <AvatarFallback>{avatar.initials}</AvatarFallback>\n </Avatar>\n ))}\n {socialProof.count && (\n <AvatarGroupCount class=\"bg-background text-foreground ring-primary/10 size-11 ring\">\n {socialProof.count}\n </AvatarGroupCount>\n )}\n </AvatarGroup>\n <span class=\"text-muted-foreground text-sm leading-snug\">\n {socialProof.text.replace(/\\s+/g, \" \")}\n </span>\n </div>\n )\n }\n </SectionContainer>\n</Section>\n",
|
|
13
15
|
"type": "registry:block"
|
|
14
16
|
}
|
|
15
17
|
],
|
|
18
|
+
"docs": "https://ui.full.dev/blocks/cta/",
|
|
19
|
+
"categories": [
|
|
20
|
+
"cta"
|
|
21
|
+
],
|
|
16
22
|
"type": "registry:block"
|
|
17
23
|
}
|
package/public/r/cta-8.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "cta-8",
|
|
4
|
+
"title": "Cta 8",
|
|
5
|
+
"description": "Call-to-action sections that close pages, bridge sections, or reinforce a launch moment.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/button",
|
|
6
8
|
"@fulldev/section"
|
|
@@ -8,9 +10,13 @@
|
|
|
8
10
|
"files": [
|
|
9
11
|
{
|
|
10
12
|
"path": "src/components/blocks/cta-8.astro",
|
|
11
|
-
"content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport {
|
|
13
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Section,\n SectionContainer,\n SectionDescription,\n SectionTitle,\n} from \"@/components/ui/section\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n}\n\nconst { class: className, title, description, buttons, ...props } = Astro.props\n---\n\n<Section\n variant=\"floating\"\n class={cn(\"border-primary/20 shadow-none\", className)}\n {...props}\n>\n <SectionContainer\n class=\"before:from-primary/20 relative items-center before:absolute before:top-full before:left-1/2 before:-z-10 before:h-[200%] before:w-full before:-translate-x-1/2 before:rounded-full before:bg-gradient-to-b before:to-transparent before:blur-3xl\"\n >\n <div class=\"flex max-w-2xl flex-col items-center gap-5 text-center\">\n <SectionTitle class=\"leading-[1.1]\">\n {title}\n </SectionTitle>\n <SectionDescription>\n {description}\n </SectionDescription>\n </div>\n {\n buttons?.length && (\n <div class=\"flex flex-wrap justify-center gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={button.variant ?? (index === 0 ? \"default\" : \"outline\")}\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n </SectionContainer>\n</Section>\n",
|
|
12
14
|
"type": "registry:block"
|
|
13
15
|
}
|
|
14
16
|
],
|
|
17
|
+
"docs": "https://ui.full.dev/blocks/cta/",
|
|
18
|
+
"categories": [
|
|
19
|
+
"cta"
|
|
20
|
+
],
|
|
15
21
|
"type": "registry:block"
|
|
16
22
|
}
|
package/public/r/dialog.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "dialog",
|
|
4
|
+
"title": "Dialog",
|
|
5
|
+
"description": "A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.",
|
|
4
6
|
"dependencies": [
|
|
5
7
|
"@data-slot/dialog",
|
|
6
8
|
"@lucide/astro"
|
|
@@ -11,7 +13,7 @@
|
|
|
11
13
|
"files": [
|
|
12
14
|
{
|
|
13
15
|
"path": "src/components/ui/dialog/dialog.astro",
|
|
14
|
-
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n defaultOpen?: boolean\n closeOnClickOutside?: boolean\n closeOnEscape?: boolean\n lockScroll?: boolean\n alertDialog?: boolean\n}\n\nconst {\n class: className,\n defaultOpen,\n closeOnClickOutside,\n closeOnEscape,\n lockScroll,\n alertDialog,\n ...props\n} = Astro.props\n---\n\n<div\n data-slot=\"dialog\"\n data-default-open={defaultOpen}\n data-close-on-click-outside={closeOnClickOutside}\n data-close-on-escape={closeOnEscape}\n data-lock-scroll={lockScroll}\n data-alert-dialog={alertDialog}\n class={className}\n {...props}\n>\n <slot />\n</div>\n\n<script>\n import { create } from \"@data-slot/dialog\"\n\n create()\n</script>\n",
|
|
16
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n defaultOpen?: boolean\n closeOnClickOutside?: boolean\n closeOnEscape?: boolean\n lockScroll?: boolean\n alertDialog?: boolean\n}\n\nconst {\n class: className,\n defaultOpen,\n closeOnClickOutside,\n closeOnEscape,\n lockScroll,\n alertDialog,\n ...props\n} = Astro.props\n---\n\n<div\n data-slot=\"dialog\"\n data-default-open={defaultOpen}\n data-close-on-click-outside={closeOnClickOutside}\n data-close-on-escape={closeOnEscape}\n data-lock-scroll={lockScroll}\n data-alert-dialog={alertDialog}\n class={className}\n {...props}\n>\n <slot />\n</div>\n\n<script>\n import { create } from \"@data-slot/dialog\"\n\n create()\n document.addEventListener(\"astro:page-load\", () => create())\n</script>\n",
|
|
15
17
|
"type": "registry:ui"
|
|
16
18
|
},
|
|
17
19
|
{
|
|
@@ -65,5 +67,9 @@
|
|
|
65
67
|
"type": "registry:ui"
|
|
66
68
|
}
|
|
67
69
|
],
|
|
70
|
+
"docs": "https://ui.full.dev/components/dialog/",
|
|
71
|
+
"categories": [
|
|
72
|
+
"ui"
|
|
73
|
+
],
|
|
68
74
|
"type": "registry:ui"
|
|
69
75
|
}
|
package/public/r/doc-1.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "doc-1",
|
|
4
|
+
"title": "Doc 1",
|
|
5
|
+
"description": "Documentation page shells for component pages with content, table of contents, and contextual links.",
|
|
4
6
|
"dependencies": [
|
|
5
7
|
"@lucide/astro",
|
|
6
8
|
"simple-icons-astro"
|
|
@@ -16,9 +18,13 @@
|
|
|
16
18
|
"files": [
|
|
17
19
|
{
|
|
18
20
|
"path": "src/components/blocks/doc-1.astro",
|
|
19
|
-
"content": "---\nimport ArrowLeft from \"@lucide/astro/icons/arrow-left\"\nimport ArrowRight from \"@lucide/astro/icons/arrow-right\"\nimport Check from \"@lucide/astro/icons/check\"\nimport ChevronDown from \"@lucide/astro/icons/chevron-down\"\nimport Copy from \"@lucide/astro/icons/copy\"\nimport ExternalLink from \"@lucide/astro/icons/external-link\"\nimport Claude from \"simple-icons-astro/Claude\"\nimport Cursor from \"simple-icons-astro/Cursor\"\nimport Markdown from \"simple-icons-astro/Markdown\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { buttonVariants } from \"@/components/ui/button/button-variants\"\nimport {\n Card,\n CardDescription,\n CardFooter,\n CardHeader,\n} from \"@/components/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { SectionContainer } from \"@/components/ui/section\"\nimport {\n Toc,\n TocMenu,\n TocMenuItem,\n TocMenuLink,\n TocTitle,\n} from \"@/components/ui/toc\"\nimport {\n Typography,\n TypographyH1,\n TypographyLead,\n} from \"@/components/ui/typography\"\n\ntype Props = {\n class?: string\n title: string\n description?: string\n copyButton?: {\n id: string\n source: string\n }\n markdownUrl?: string\n tocItems: {\n depth: number\n href: string\n label: string\n }[]\n callout?: {\n description: string\n button: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }\n }\n previousPage?: {\n href: string\n title: string\n }\n nextPage?: {\n href: string\n title: string\n }\n labels: {\n copyMarkdown: string\n openIn: string\n openInMarkdown: string\n openInChatGPT: string\n openInClaude: string\n openInCursor: string\n pagination: {\n previous: string\n next: string\n ariaLabel: string\n }\n toc: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n copyButton,\n markdownUrl,\n tocItems,\n callout,\n previousPage,\n nextPage,\n labels,\n} = Astro.props\nconst showCopyButton = Boolean(copyButton)\nconst showOpenButton = Boolean(markdownUrl)\nconst showPagination = Boolean(previousPage || nextPage)\nconst assistantPrompt = markdownUrl\n ? `Read ${markdownUrl}, I want to ask questions about it.`\n : \"\"\nconst openLinks = markdownUrl\n ? [\n {\n label: labels.openInMarkdown,\n href: markdownUrl,\n icon: \"markdown\",\n },\n {\n label: labels.openInChatGPT,\n href: `https://chatgpt.com/?hints=search&q=${encodeURIComponent(assistantPrompt)}`,\n icon: \"chatgpt\",\n },\n {\n label: labels.openInClaude,\n href: `https://claude.ai/new?q=${encodeURIComponent(assistantPrompt)}`,\n icon: \"claude\",\n },\n {\n label: labels.openInCursor,\n href: `https://cursor.com/link/prompt?text=${encodeURIComponent(assistantPrompt)}`,\n icon: \"cursor\",\n },\n ]\n : []\n---\n\n<SectionContainer\n class={cn(\n \"gap-10 pt-10 pb-8 sm:pt-12 sm:pb-10 xl:grid xl:grid-cols-[minmax(0,1fr)_16rem] xl:items-start xl:gap-x-16\",\n className\n )}\n>\n <div class=\"mx-auto flex w-full max-w-3xl min-w-0 flex-col gap-10\">\n <header\n class=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\"\n >\n <div class=\"flex min-w-0 flex-1 flex-col gap-2\">\n <TypographyH1\n size=\"sm\"\n class=\"text-foreground text-left tracking-tight\"\n >\n {title}\n </TypographyH1>\n {\n description && (\n <TypographyLead size=\"sm\" class=\"max-w-2xl leading-7\">\n {description}\n </TypographyLead>\n )\n }\n </div>\n <div class=\"flex shrink-0 items-center gap-2 self-start\">\n {\n showCopyButton && (\n <Button\n id={copyButton?.id}\n type=\"button\"\n variant=\"outline\"\n size=\"xs\"\n data-source={copyButton?.source}\n aria-label={labels.copyMarkdown}\n >\n <Copy data-copy-icon class=\"docs-copy-icon size-3.5\" />\n <Check data-check-icon class=\"docs-check-icon hidden size-3.5\" />\n <span>{labels.copyMarkdown}</span>\n </Button>\n )\n }\n {\n showOpenButton && (\n <DropdownMenu>\n <DropdownMenuTrigger\n class={buttonVariants({ variant: \"outline\", size: \"xs\" })}\n >\n <span>{labels.openIn}</span>\n <ChevronDown class=\"size-3.5 opacity-70\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" sideOffset={6} class=\"w-56\">\n {openLinks.map((link) => (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n class=\"hover:bg-accent hover:text-accent-foreground flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none\"\n >\n {link.icon === \"markdown\" && <Markdown class=\"size-4\" />}\n {link.icon === \"chatgpt\" && (\n <svg\n role=\"img\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n class=\"size-4\"\n aria-hidden=\"true\"\n >\n <path d=\"M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.182a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .511 4.91 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.989 5.989 0 0 0 3.998-2.9 6.056 6.056 0 0 0-.748-7.073ZM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.142-.081 4.778-2.758a.795.795 0 0 0 .393-.681v-6.737l2.02 1.169a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.495 4.494Zm-9.66-4.125a4.471 4.471 0 0 1-.535-3.014l.142.085 4.783 2.758a.771.771 0 0 0 .781 0l5.843-3.368v2.332a.08.08 0 0 1-.034.062L9.74 19.95a4.499 4.499 0 0 1-6.14-1.646ZM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.677l5.814 3.354-2.02 1.169a.076.076 0 0 1-.071 0l-4.83-2.787A4.504 4.504 0 0 1 2.34 7.872Zm16.596 3.856-5.833-3.388L15.12 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.104v-5.677a.79.79 0 0 0-.407-.667Zm2.011-3.024-.142-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.499 4.499 0 0 1 6.68 4.66ZM8.307 12.863l-2.02-1.164a.08.08 0 0 1-.038-.057V6.074a4.499 4.499 0 0 1 7.376-3.453l-.142.08-4.778 2.758a.795.795 0 0 0-.393.681Zm1.097-2.365 2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5Z\" />\n </svg>\n )}\n {link.icon === \"claude\" && <Claude class=\"size-4\" />}\n {link.icon === \"cursor\" && <Cursor class=\"size-4\" />}\n <span>{link.label}</span>\n <ExternalLink class=\"text-muted-foreground ml-auto size-3.5\" />\n </a>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n }\n </div>\n </header>\n\n <Typography as=\"article\" size=\"sm\">\n <slot />\n </Typography>\n\n {\n showPagination && (\n <nav\n class=\"flex items-center justify-between gap-3\"\n aria-label={labels.pagination.ariaLabel}\n >\n {previousPage ? (\n <Button\n as=\"a\"\n href={previousPage.href}\n variant=\"outline\"\n class=\"h-auto min-w-0 items-center justify-start gap-2 px-3 py-2 whitespace-normal\"\n >\n <ArrowLeft class=\"size-4\" />\n <span class=\"truncate text-sm font-medium\">\n {previousPage.title}\n </span>\n </Button>\n ) : (\n <div aria-hidden=\"true\" />\n )}\n\n {nextPage ? (\n <Button\n as=\"a\"\n href={nextPage.href}\n variant=\"outline\"\n class=\"h-auto min-w-0 items-center justify-end gap-2 px-3 py-2 text-right whitespace-normal\"\n >\n <span class=\"truncate text-sm font-medium\">{nextPage.title}</span>\n <ArrowRight class=\"size-4\" />\n </Button>\n ) : (\n <div aria-hidden=\"true\" />\n )}\n </nav>\n )\n }\n </div>\n\n {\n (tocItems.length > 0 || callout) && (\n <aside class=\"hidden w-64 xl:sticky xl:top-12 xl:mr-0 xl:ml-auto xl:block xl:self-start\">\n <div class=\"flex flex-col gap-6\">\n {tocItems.length > 0 && (\n <Toc aria-label={labels.toc}>\n <TocTitle>{labels.toc}</TocTitle>\n <TocMenu>\n {tocItems.map((item) => (\n <TocMenuItem>\n <TocMenuLink href={item.href} depth={item.depth}>\n {item.label}\n </TocMenuLink>\n </TocMenuItem>\n ))}\n </TocMenu>\n </Toc>\n )}\n\n {callout && (\n <Card size=\"sm\">\n <CardHeader>\n <CardDescription>{callout.description}</CardDescription>\n </CardHeader>\n <CardFooter>\n <Button\n as=\"a\"\n href={callout.button.href}\n variant={callout.button.variant}\n size=\"sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {callout.button.label}\n </Button>\n </CardFooter>\n </Card>\n )}\n </div>\n </aside>\n )\n }\n</SectionContainer>\n\n<script is:inline>\n const copyIcon = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"></rect><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"></path></svg>`\n const checkIcon = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"></path></svg>`\n document.querySelectorAll(\"[data-slot='typography'] > pre\").forEach((pre) => {\n if (pre.closest(\".docs-code-block\")) return\n const wrapper = document.createElement(\"div\")\n const button = document.createElement(\"button\")\n wrapper.className = \"docs-code-block\"\n button.type = \"button\"\n button.className = \"docs-code-copy\"\n button.ariaLabel = \"Copy code\"\n button.innerHTML = `<span data-copy-icon>${copyIcon}</span><span data-check-icon class=\"hidden\">${checkIcon}</span>`\n pre.before(wrapper)\n wrapper.append(pre, button)\n })\n document.addEventListener(\"click\", (event) => {\n const button = event.target?.closest?.(\n \"[id^='docs-copy-page-'], .docs-code-copy\"\n )\n if (!button) return\n const source =\n button.dataset.source ??\n button\n .closest(\".docs-code-block\")\n ?.querySelector(\"pre\")\n ?.textContent?.replace(/\\n$/, \"\")\n button.querySelector(\"[data-copy-icon]\")?.classList.add(\"hidden\")\n button.querySelector(\"[data-check-icon]\")?.classList.remove(\"hidden\")\n navigator.clipboard?.writeText(source ?? \"\")\n setTimeout(() => {\n button.querySelector(\"[data-copy-icon]\")?.classList.remove(\"hidden\")\n button.querySelector(\"[data-check-icon]\")?.classList.add(\"hidden\")\n }, 1200)\n })\n</script>\n",
|
|
21
|
+
"content": "---\nimport ArrowLeft from \"@lucide/astro/icons/arrow-left\"\nimport ArrowRight from \"@lucide/astro/icons/arrow-right\"\nimport Check from \"@lucide/astro/icons/check\"\nimport ChevronDown from \"@lucide/astro/icons/chevron-down\"\nimport Copy from \"@lucide/astro/icons/copy\"\nimport ExternalLink from \"@lucide/astro/icons/external-link\"\nimport Claude from \"simple-icons-astro/Claude\"\nimport Cursor from \"simple-icons-astro/Cursor\"\nimport Markdown from \"simple-icons-astro/Markdown\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { buttonVariants } from \"@/components/ui/button/button-variants\"\nimport {\n Card,\n CardDescription,\n CardFooter,\n CardHeader,\n} from \"@/components/ui/card\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { SectionContainer } from \"@/components/ui/section\"\nimport {\n Toc,\n TocMenu,\n TocMenuItem,\n TocMenuLink,\n TocTitle,\n} from \"@/components/ui/toc\"\nimport {\n Typography,\n TypographyH1,\n TypographyLead,\n} from \"@/components/ui/typography\"\n\ntype Props = {\n class?: string\n title: string\n description?: string\n copyButton?: {\n id: string\n source: string\n }\n markdownUrl?: string\n tocItems: {\n depth: number\n href: string\n label: string\n }[]\n callout?: {\n description: string\n button: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }\n }\n previousPage?: {\n href: string\n title: string\n }\n nextPage?: {\n href: string\n title: string\n }\n labels: {\n copyMarkdown: string\n openIn: string\n openInMarkdown: string\n openInChatGPT: string\n openInClaude: string\n openInCursor: string\n pagination: {\n previous: string\n next: string\n ariaLabel: string\n }\n toc: string\n }\n}\n\nconst {\n class: className,\n title,\n description,\n copyButton,\n markdownUrl,\n tocItems,\n callout,\n previousPage,\n nextPage,\n labels,\n} = Astro.props\nconst showCopyButton = Boolean(copyButton)\nconst showOpenButton = Boolean(markdownUrl)\nconst showPagination = Boolean(previousPage || nextPage)\nconst assistantPrompt = markdownUrl\n ? `Read ${new URL(markdownUrl, Astro.site ?? Astro.url.origin).href}, I want to ask questions about it.`\n : \"\"\nconst openLinks = markdownUrl\n ? [\n {\n label: labels.openInMarkdown,\n href: markdownUrl,\n icon: \"markdown\",\n },\n {\n label: labels.openInChatGPT,\n href: `https://chatgpt.com/?hints=search&q=${encodeURIComponent(assistantPrompt)}`,\n icon: \"chatgpt\",\n },\n {\n label: labels.openInClaude,\n href: `https://claude.ai/new?q=${encodeURIComponent(assistantPrompt)}`,\n icon: \"claude\",\n },\n {\n label: labels.openInCursor,\n href: `https://cursor.com/link/prompt?text=${encodeURIComponent(assistantPrompt)}`,\n icon: \"cursor\",\n },\n ]\n : []\n---\n\n<SectionContainer\n class={cn(\n \"gap-10 pt-10 pb-8 sm:pt-12 sm:pb-10 xl:grid xl:grid-cols-[minmax(0,1fr)_16rem] xl:items-start xl:gap-x-16\",\n className\n )}\n>\n <div class=\"mx-auto flex w-full max-w-3xl min-w-0 flex-col gap-10\">\n <header\n class=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\"\n >\n <div class=\"flex min-w-0 flex-1 flex-col gap-2\">\n <TypographyH1\n size=\"sm\"\n class=\"text-foreground text-left tracking-tight\"\n >\n {title}\n </TypographyH1>\n {\n description && (\n <TypographyLead size=\"sm\" class=\"max-w-2xl leading-7\">\n {description}\n </TypographyLead>\n )\n }\n </div>\n <div class=\"flex shrink-0 items-center gap-2 self-start\">\n {\n showCopyButton && (\n <Button\n id={copyButton?.id}\n type=\"button\"\n variant=\"outline\"\n size=\"xs\"\n data-source={copyButton?.source}\n aria-label={labels.copyMarkdown}\n >\n <Copy data-copy-icon class=\"docs-copy-icon size-3.5\" />\n <Check data-check-icon class=\"docs-check-icon hidden size-3.5\" />\n <span>{labels.copyMarkdown}</span>\n </Button>\n )\n }\n {\n showOpenButton && (\n <DropdownMenu>\n <DropdownMenuTrigger\n class={buttonVariants({ variant: \"outline\", size: \"xs\" })}\n >\n <span>{labels.openIn}</span>\n <ChevronDown class=\"size-3.5 opacity-70\" />\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" sideOffset={6} class=\"w-56\">\n {openLinks.map((link) => (\n <a\n href={link.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n class=\"hover:bg-accent hover:text-accent-foreground flex items-center gap-2 rounded-sm px-2 py-1.5 text-sm transition-colors outline-none\"\n >\n {link.icon === \"markdown\" && <Markdown class=\"size-4\" />}\n {link.icon === \"chatgpt\" && (\n <svg\n role=\"img\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n class=\"size-4\"\n aria-hidden=\"true\"\n >\n <path d=\"M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.182a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .511 4.91 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.989 5.989 0 0 0 3.998-2.9 6.056 6.056 0 0 0-.748-7.073ZM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.142-.081 4.778-2.758a.795.795 0 0 0 .393-.681v-6.737l2.02 1.169a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.495 4.494Zm-9.66-4.125a4.471 4.471 0 0 1-.535-3.014l.142.085 4.783 2.758a.771.771 0 0 0 .781 0l5.843-3.368v2.332a.08.08 0 0 1-.034.062L9.74 19.95a4.499 4.499 0 0 1-6.14-1.646ZM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.677l5.814 3.354-2.02 1.169a.076.076 0 0 1-.071 0l-4.83-2.787A4.504 4.504 0 0 1 2.34 7.872Zm16.596 3.856-5.833-3.388L15.12 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.104v-5.677a.79.79 0 0 0-.407-.667Zm2.011-3.024-.142-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.499 4.499 0 0 1 6.68 4.66ZM8.307 12.863l-2.02-1.164a.08.08 0 0 1-.038-.057V6.074a4.499 4.499 0 0 1 7.376-3.453l-.142.08-4.778 2.758a.795.795 0 0 0-.393.681Zm1.097-2.365 2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5Z\" />\n </svg>\n )}\n {link.icon === \"claude\" && <Claude class=\"size-4\" />}\n {link.icon === \"cursor\" && <Cursor class=\"size-4\" />}\n <span>{link.label}</span>\n <ExternalLink class=\"text-muted-foreground ml-auto size-3.5\" />\n </a>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n }\n </div>\n </header>\n\n <Typography as=\"article\" size=\"sm\">\n <slot />\n </Typography>\n\n {\n showPagination && (\n <nav\n class=\"flex items-center justify-between gap-3\"\n aria-label={labels.pagination.ariaLabel}\n >\n {previousPage ? (\n <Button\n as=\"a\"\n href={previousPage.href}\n variant=\"outline\"\n class=\"h-auto min-w-0 items-center justify-start gap-2 px-3 py-2 whitespace-normal\"\n >\n <ArrowLeft class=\"size-4\" />\n <span class=\"truncate text-sm font-medium\">\n {previousPage.title}\n </span>\n </Button>\n ) : (\n <div aria-hidden=\"true\" />\n )}\n\n {nextPage ? (\n <Button\n as=\"a\"\n href={nextPage.href}\n variant=\"outline\"\n class=\"h-auto min-w-0 items-center justify-end gap-2 px-3 py-2 text-right whitespace-normal\"\n >\n <span class=\"truncate text-sm font-medium\">{nextPage.title}</span>\n <ArrowRight class=\"size-4\" />\n </Button>\n ) : (\n <div aria-hidden=\"true\" />\n )}\n </nav>\n )\n }\n </div>\n\n {\n (tocItems.length > 0 || callout) && (\n <aside class=\"hidden w-64 xl:sticky xl:top-12 xl:mr-0 xl:ml-auto xl:block xl:self-start\">\n <div class=\"flex flex-col gap-6\">\n {tocItems.length > 0 && (\n <Toc aria-label={labels.toc}>\n <TocTitle>{labels.toc}</TocTitle>\n <TocMenu>\n {tocItems.map((item) => (\n <TocMenuItem>\n <TocMenuLink href={item.href} depth={item.depth}>\n {item.label}\n </TocMenuLink>\n </TocMenuItem>\n ))}\n </TocMenu>\n </Toc>\n )}\n\n {callout && (\n <Card size=\"sm\">\n <CardHeader>\n <CardDescription>{callout.description}</CardDescription>\n </CardHeader>\n <CardFooter>\n <Button\n as=\"a\"\n href={callout.button.href}\n variant={callout.button.variant}\n size=\"sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {callout.button.label}\n </Button>\n </CardFooter>\n </Card>\n )}\n </div>\n </aside>\n )\n }\n</SectionContainer>\n\n<script is:inline>\n const copyIcon = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"></rect><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"></path></svg>`\n const checkIcon = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"></path></svg>`\n document.querySelectorAll(\"[data-slot='typography'] > pre\").forEach((pre) => {\n if (pre.closest(\".docs-code-block\")) return\n const wrapper = document.createElement(\"div\")\n const button = document.createElement(\"button\")\n wrapper.className = \"docs-code-block\"\n button.type = \"button\"\n button.className = \"docs-code-copy\"\n button.ariaLabel = \"Copy code\"\n button.innerHTML = `<span data-copy-icon>${copyIcon}</span><span data-check-icon class=\"hidden\">${checkIcon}</span>`\n pre.before(wrapper)\n wrapper.append(pre, button)\n })\n document.addEventListener(\"click\", (event) => {\n const button = event.target?.closest?.(\n \"[id^='docs-copy-page-'], .docs-code-copy\"\n )\n if (!button) return\n const source =\n button.dataset.source ??\n button\n .closest(\".docs-code-block\")\n ?.querySelector(\"pre\")\n ?.textContent?.replace(/\\n$/, \"\")\n button.querySelector(\"[data-copy-icon]\")?.classList.add(\"hidden\")\n button.querySelector(\"[data-check-icon]\")?.classList.remove(\"hidden\")\n navigator.clipboard?.writeText(source ?? \"\")\n setTimeout(() => {\n button.querySelector(\"[data-copy-icon]\")?.classList.remove(\"hidden\")\n button.querySelector(\"[data-check-icon]\")?.classList.add(\"hidden\")\n }, 1200)\n })\n</script>\n",
|
|
20
22
|
"type": "registry:block"
|
|
21
23
|
}
|
|
22
24
|
],
|
|
25
|
+
"docs": "https://ui.full.dev/blocks/doc/",
|
|
26
|
+
"categories": [
|
|
27
|
+
"doc"
|
|
28
|
+
],
|
|
23
29
|
"type": "registry:block"
|
|
24
30
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "dropdown-menu",
|
|
4
|
+
"title": "Dropdown Menu",
|
|
5
|
+
"description": "Displays a menu to the user, such as a set of actions or functions, triggered by a button.",
|
|
4
6
|
"dependencies": [
|
|
5
7
|
"@data-slot/dropdown-menu",
|
|
6
8
|
"@lucide/astro"
|
|
@@ -8,7 +10,7 @@
|
|
|
8
10
|
"files": [
|
|
9
11
|
{
|
|
10
12
|
"path": "src/components/ui/dropdown-menu/dropdown-menu.astro",
|
|
11
|
-
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport type { Align, Side } from \"@data-slot/dropdown-menu\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n defaultOpen?: boolean\n defaultValue?: string | null\n defaultValues?: string[]\n closeOnClickOutside?: boolean\n closeOnEscape?: boolean\n closeOnSelect?: boolean\n highlightItemOnHover?: boolean\n side?: Side\n align?: Align\n sideOffset?: number\n alignOffset?: number\n avoidCollisions?: boolean\n collisionPadding?: number\n lockScroll?: boolean\n}\n\nconst {\n class: className,\n defaultOpen,\n defaultValue,\n defaultValues,\n closeOnClickOutside,\n closeOnEscape,\n closeOnSelect,\n highlightItemOnHover,\n side,\n align,\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionPadding,\n lockScroll,\n ...props\n} = Astro.props\n\nconst defaultValuesAttr =\n defaultValues === undefined ? undefined : JSON.stringify(defaultValues)\n---\n\n<div\n data-slot=\"dropdown-menu\"\n data-default-open={defaultOpen}\n data-default-value={defaultValue}\n data-default-values={defaultValuesAttr}\n data-close-on-click-outside={closeOnClickOutside}\n data-close-on-escape={closeOnEscape}\n data-close-on-select={closeOnSelect}\n data-highlight-item-on-hover={highlightItemOnHover}\n data-side={side}\n data-align={align}\n data-side-offset={sideOffset}\n data-align-offset={alignOffset}\n data-avoid-collisions={avoidCollisions}\n data-collision-padding={collisionPadding}\n data-lock-scroll={lockScroll}\n class={className}\n {...props}\n>\n <slot />\n</div>\n\n<script>\n import { create } from \"@data-slot/dropdown-menu\"\n\n create()\n</script>\n",
|
|
13
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport type { Align, Side } from \"@data-slot/dropdown-menu\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n defaultOpen?: boolean\n defaultValue?: string | null\n defaultValues?: string[]\n closeOnClickOutside?: boolean\n closeOnEscape?: boolean\n closeOnSelect?: boolean\n highlightItemOnHover?: boolean\n side?: Side\n align?: Align\n sideOffset?: number\n alignOffset?: number\n avoidCollisions?: boolean\n collisionPadding?: number\n lockScroll?: boolean\n}\n\nconst {\n class: className,\n defaultOpen,\n defaultValue,\n defaultValues,\n closeOnClickOutside,\n closeOnEscape,\n closeOnSelect,\n highlightItemOnHover,\n side,\n align,\n sideOffset,\n alignOffset,\n avoidCollisions,\n collisionPadding,\n lockScroll,\n ...props\n} = Astro.props\n\nconst defaultValuesAttr =\n defaultValues === undefined ? undefined : JSON.stringify(defaultValues)\n---\n\n<div\n data-slot=\"dropdown-menu\"\n data-default-open={defaultOpen}\n data-default-value={defaultValue}\n data-default-values={defaultValuesAttr}\n data-close-on-click-outside={closeOnClickOutside}\n data-close-on-escape={closeOnEscape}\n data-close-on-select={closeOnSelect}\n data-highlight-item-on-hover={highlightItemOnHover}\n data-side={side}\n data-align={align}\n data-side-offset={sideOffset}\n data-align-offset={alignOffset}\n data-avoid-collisions={avoidCollisions}\n data-collision-padding={collisionPadding}\n data-lock-scroll={lockScroll}\n class={className}\n {...props}\n>\n <slot />\n</div>\n\n<script>\n import { create } from \"@data-slot/dropdown-menu\"\n\n create()\n document.addEventListener(\"astro:page-load\", () => create())\n</script>\n",
|
|
12
14
|
"type": "registry:ui"
|
|
13
15
|
},
|
|
14
16
|
{
|
|
@@ -67,5 +69,9 @@
|
|
|
67
69
|
"type": "registry:ui"
|
|
68
70
|
}
|
|
69
71
|
],
|
|
72
|
+
"docs": "https://ui.full.dev/components/dropdown-menu/",
|
|
73
|
+
"categories": [
|
|
74
|
+
"ui"
|
|
75
|
+
],
|
|
70
76
|
"type": "registry:ui"
|
|
71
77
|
}
|
package/public/r/empty.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "empty",
|
|
4
|
+
"title": "Empty",
|
|
5
|
+
"description": "Displays an empty state placeholder with optional media, title, and description.",
|
|
4
6
|
"files": [
|
|
5
7
|
{
|
|
6
8
|
"path": "src/components/ui/empty/empty.astro",
|
|
@@ -38,5 +40,9 @@
|
|
|
38
40
|
"type": "registry:ui"
|
|
39
41
|
}
|
|
40
42
|
],
|
|
43
|
+
"docs": "https://ui.full.dev/components/empty/",
|
|
44
|
+
"categories": [
|
|
45
|
+
"ui"
|
|
46
|
+
],
|
|
41
47
|
"type": "registry:ui"
|
|
42
48
|
}
|
package/public/r/faqs-1.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "faqs-1",
|
|
4
|
+
"title": "Faqs 1",
|
|
5
|
+
"description": "FAQ sections for product pages, launches, and documentation support content.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/accordion",
|
|
6
8
|
"@fulldev/button",
|
|
@@ -9,9 +11,13 @@
|
|
|
9
11
|
"files": [
|
|
10
12
|
{
|
|
11
13
|
"path": "src/components/blocks/faqs-1.astro",
|
|
12
|
-
"content": "---\nimport { cn } from \"@/lib/utils\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\nimport { Button } from \"@/components/ui/button\"\nimport {
|
|
14
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Section,\n SectionContainer,\n SectionDescription,\n SectionTitle,\n} from \"@/components/ui/section\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n faqs: {\n id: string\n question: string\n answer: string\n }[]\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n}\n\nconst {\n class: className,\n title,\n description,\n faqs,\n buttons,\n ...props\n} = Astro.props\n---\n\n<Section class={cn(\"\", className)} {...props}>\n <SectionContainer class=\"items-center text-center\">\n <div class=\"flex max-w-2xl flex-col items-center gap-5\">\n <SectionTitle>\n {title}\n </SectionTitle>\n <SectionDescription>\n {description}\n </SectionDescription>\n </div>\n {\n buttons?.length && (\n <div class=\"flex flex-wrap justify-center gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"secondary\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n </SectionContainer>\n <SectionContainer>\n <div class=\"mx-auto w-full max-w-3xl\">\n <Accordion collapsible>\n {\n faqs.map((item) => (\n <AccordionItem value={item.id}>\n <AccordionTrigger>{item.question}</AccordionTrigger>\n <AccordionContent>{item.answer}</AccordionContent>\n </AccordionItem>\n ))\n }\n </Accordion>\n </div>\n </SectionContainer>\n</Section>\n",
|
|
13
15
|
"type": "registry:block"
|
|
14
16
|
}
|
|
15
17
|
],
|
|
18
|
+
"docs": "https://ui.full.dev/blocks/faqs/",
|
|
19
|
+
"categories": [
|
|
20
|
+
"faqs"
|
|
21
|
+
],
|
|
16
22
|
"type": "registry:block"
|
|
17
23
|
}
|
package/public/r/faqs-2.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "faqs-2",
|
|
4
|
+
"title": "Faqs 2",
|
|
5
|
+
"description": "FAQ sections for product pages, launches, and documentation support content.",
|
|
4
6
|
"registryDependencies": [
|
|
5
7
|
"@fulldev/accordion",
|
|
6
8
|
"@fulldev/button",
|
|
@@ -9,9 +11,13 @@
|
|
|
9
11
|
"files": [
|
|
10
12
|
{
|
|
11
13
|
"path": "src/components/blocks/faqs-2.astro",
|
|
12
|
-
"content": "---\nimport { cn } from \"@/lib/utils\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\nimport { Button } from \"@/components/ui/button\"\nimport {
|
|
14
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\"\nimport { Button } from \"@/components/ui/button\"\nimport {\n Section,\n SectionContainer,\n SectionTitle,\n} from \"@/components/ui/section\"\n\ntype Props = HTMLAttributes<\"section\"> & {\n title: string\n description: string\n faqs: {\n id: string\n question: string\n answer: string\n }[]\n buttons?: {\n label: string\n href: string\n variant?: \"default\" | \"outline\" | \"secondary\" | \"ghost\"\n }[]\n}\n\nconst {\n class: className,\n title,\n description,\n faqs,\n buttons,\n ...props\n} = Astro.props\n---\n\n<Section class={cn(\"\", className)} {...props}>\n <SectionContainer>\n <div\n class=\"grid gap-12 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.5fr)] lg:gap-16\"\n >\n <div class=\"lg:sticky lg:top-24 lg:self-start\">\n <SectionTitle>\n {title}\n </SectionTitle>\n <p\n class=\"text-muted-foreground mt-4 text-base leading-relaxed text-balance\"\n >\n {description}\n </p>\n {\n buttons?.length && (\n <div class=\"mt-8 flex flex-wrap gap-3\">\n {buttons.map(({ href, label, ...button }, index) => (\n <Button\n as=\"a\"\n href={href}\n size=\"lg\"\n variant={\n button.variant ?? (index === 0 ? \"default\" : \"secondary\")\n }\n {...button}\n >\n {label}\n </Button>\n ))}\n </div>\n )\n }\n </div>\n\n <div>\n <Accordion collapsible>\n {\n faqs.map((item) => (\n <AccordionItem value={item.id}>\n <AccordionTrigger>{item.question}</AccordionTrigger>\n <AccordionContent>{item.answer}</AccordionContent>\n </AccordionItem>\n ))\n }\n </Accordion>\n </div>\n </div>\n </SectionContainer>\n</Section>\n",
|
|
13
15
|
"type": "registry:block"
|
|
14
16
|
}
|
|
15
17
|
],
|
|
18
|
+
"docs": "https://ui.full.dev/blocks/faqs/",
|
|
19
|
+
"categories": [
|
|
20
|
+
"faqs"
|
|
21
|
+
],
|
|
16
22
|
"type": "registry:block"
|
|
17
23
|
}
|