fulldev-ui 0.7.0 → 0.9.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 +147 -2
- package/README.md +16 -86
- package/package.json +86 -40
- package/public/r/accordion.json +12 -6
- package/public/r/alert-dialog.json +78 -0
- package/public/r/alert.json +11 -6
- package/public/r/article-1.json +5 -6
- package/public/r/article-2.json +5 -6
- package/public/r/articles-1.json +6 -10
- package/public/r/articles-2.json +6 -10
- package/public/r/articles-3.json +6 -10
- package/public/r/articles-4.json +6 -10
- package/public/r/avatar.json +22 -8
- package/public/r/badge.json +9 -4
- package/public/r/banner-1.json +8 -5
- package/public/r/banner-2.json +8 -5
- package/public/r/banner.json +12 -23
- package/public/r/beta-repo-setup.json +131 -0
- package/public/r/blocks-1.json +19 -0
- package/public/r/blocks.json +18 -18
- package/public/r/breadcrumb.json +50 -0
- package/public/r/button.json +9 -4
- package/public/r/card.json +47 -0
- package/public/r/carousel.json +44 -0
- package/public/r/checkbox.json +3 -3
- package/public/r/collapsible.json +8 -5
- package/public/r/combobox.json +74 -0
- package/public/r/command.json +64 -0
- package/public/r/components.json +22 -10
- package/public/r/contact-1.json +10 -8
- package/public/r/contact-2.json +10 -8
- package/public/r/contact-3.json +10 -9
- package/public/r/content-1.json +6 -8
- package/public/r/content-2.json +6 -8
- package/public/r/content-3.json +4 -7
- package/public/r/content-4.json +6 -8
- package/public/r/content-5.json +17 -0
- package/public/r/content-6.json +17 -0
- package/public/r/cta-1.json +4 -6
- package/public/r/cta-2.json +4 -7
- package/public/r/cta-3.json +4 -6
- package/public/r/cta-4.json +4 -7
- package/public/r/cta-5.json +6 -10
- package/public/r/cta-6.json +4 -6
- package/public/r/cta-7.json +4 -8
- package/public/r/cta-8.json +4 -8
- package/public/r/dialog.json +69 -0
- package/public/r/doc-1.json +21 -0
- package/public/r/dropdown-menu.json +73 -0
- package/public/r/empty.json +8 -8
- package/public/r/faqs-1.json +4 -5
- package/public/r/faqs-2.json +4 -5
- package/public/r/faqs-3.json +5 -6
- package/public/r/faqs-4.json +4 -6
- package/public/r/features-1.json +5 -6
- package/public/r/features-2.json +5 -6
- package/public/r/features-3.json +5 -7
- package/public/r/features-4.json +5 -6
- package/public/r/features-5.json +5 -6
- package/public/r/features-6.json +5 -6
- package/public/r/field.json +18 -15
- package/public/r/footer-1.json +10 -5
- package/public/r/footer-2.json +10 -5
- package/public/r/footer-3.json +18 -0
- package/public/r/form.json +17 -0
- package/public/r/header-1.json +5 -8
- package/public/r/header-2.json +5 -8
- package/public/r/header-3.json +6 -8
- package/public/r/header-4.json +20 -0
- package/public/r/header-5.json +21 -0
- package/public/r/header.json +12 -8
- package/public/r/hero-1.json +4 -6
- package/public/r/hero-10.json +4 -7
- package/public/r/hero-11.json +4 -7
- package/public/r/hero-12.json +4 -6
- package/public/r/hero-13.json +4 -6
- package/public/r/hero-2.json +4 -7
- package/public/r/hero-3.json +4 -6
- package/public/r/hero-4.json +6 -7
- package/public/r/hero-5.json +6 -9
- package/public/r/hero-6.json +6 -9
- package/public/r/hero-7.json +6 -9
- package/public/r/hero-8.json +4 -6
- package/public/r/hero-9.json +6 -9
- package/public/r/hover-card.json +30 -0
- package/public/r/icon.json +3 -3
- package/public/r/init.json +23 -0
- package/public/r/input-group.json +48 -0
- package/public/r/input.json +3 -3
- package/public/r/item.json +28 -10
- package/public/r/kbd.json +22 -0
- package/public/r/label.json +3 -3
- package/public/r/layout.json +29 -7
- package/public/r/links-2.json +21 -0
- package/public/r/logo.json +6 -7
- package/public/r/logos-1.json +8 -5
- package/public/r/logos-2.json +4 -4
- package/public/r/logos-3.json +8 -5
- package/public/r/marquee.json +4 -9
- package/public/r/native-select.json +8 -5
- package/public/r/navigation-menu.json +22 -16
- package/public/r/popover.json +45 -0
- package/public/r/price.json +10 -5
- package/public/r/pricing-1.json +21 -0
- package/public/r/pricing-2.json +20 -0
- package/public/r/pricing-3.json +21 -0
- package/public/r/product-1.json +6 -8
- package/public/r/products-1.json +7 -9
- package/public/r/products-2.json +6 -7
- package/public/r/products-3.json +8 -8
- package/public/r/products-4.json +7 -7
- package/public/r/products-5.json +7 -8
- package/public/r/radio-group.json +7 -4
- package/public/r/rating.json +6 -3
- package/public/r/registry.json +1881 -1064
- package/public/r/reviews-1.json +6 -8
- package/public/r/reviews-2.json +6 -8
- package/public/r/reviews-3.json +7 -9
- package/public/r/reviews-4.json +6 -9
- package/public/r/reviews-5.json +5 -8
- package/public/r/section.json +6 -46
- package/public/r/select.json +58 -0
- package/public/r/separator.json +3 -3
- package/public/r/services-1.json +6 -7
- package/public/r/services-2.json +6 -8
- package/public/r/services-3.json +6 -7
- package/public/r/services-4.json +5 -7
- package/public/r/services-5.json +6 -7
- package/public/r/services-6.json +6 -6
- package/public/r/services-7.json +6 -7
- package/public/r/sheet.json +16 -12
- package/public/r/sidebar-1.json +28 -0
- package/public/r/sidebar.json +104 -9
- package/public/r/skeleton.json +3 -3
- package/public/r/slider.json +20 -0
- package/public/r/spinner.json +6 -3
- package/public/r/switch.json +20 -0
- package/public/r/table.json +11 -11
- package/public/r/tabs.json +15 -7
- package/public/r/textarea.json +3 -3
- package/public/r/theme-toggle.json +13 -5
- package/public/r/tile.json +7 -32
- package/public/r/toc.json +37 -0
- package/public/r/toggle.json +25 -0
- package/public/r/tooltip.json +30 -0
- package/public/r/typography.json +92 -0
- package/public/r/video.json +3 -3
- package/registry.json +1881 -1064
- package/src/components/blocks/article-1.astro +71 -52
- package/src/components/blocks/article-2.astro +71 -52
- package/src/components/blocks/articles-1.astro +87 -89
- package/src/components/blocks/articles-2.astro +142 -88
- package/src/components/blocks/articles-3.astro +85 -87
- package/src/components/blocks/articles-4.astro +72 -89
- package/src/components/blocks/banner-1.astro +36 -17
- package/src/components/blocks/banner-2.astro +39 -18
- package/src/components/blocks/blocks-1.astro +246 -50
- package/src/components/blocks/contact-1.astro +115 -44
- package/src/components/blocks/contact-2.astro +118 -48
- package/src/components/blocks/contact-3.astro +128 -53
- package/src/components/blocks/content-1.astro +76 -49
- package/src/components/blocks/content-2.astro +76 -55
- package/src/components/blocks/content-3.astro +62 -55
- package/src/components/blocks/content-4.astro +72 -49
- package/src/components/blocks/content-5.astro +98 -59
- package/src/components/blocks/content-6.astro +73 -58
- package/src/components/blocks/cta-1.astro +86 -65
- package/src/components/blocks/cta-2.astro +101 -75
- package/src/components/blocks/cta-3.astro +89 -68
- package/src/components/blocks/cta-4.astro +98 -68
- package/src/components/blocks/cta-5.astro +76 -75
- package/src/components/blocks/cta-6.astro +100 -64
- package/src/components/blocks/cta-7.astro +85 -73
- package/src/components/blocks/cta-8.astro +40 -76
- package/src/components/blocks/doc-1.astro +364 -0
- package/src/components/blocks/faqs-1.astro +58 -42
- package/src/components/blocks/faqs-2.astro +63 -45
- package/src/components/blocks/faqs-3.astro +40 -46
- package/src/components/blocks/faqs-4.astro +31 -46
- package/src/components/blocks/features-1.astro +73 -74
- package/src/components/blocks/features-2.astro +61 -75
- package/src/components/blocks/features-3.astro +54 -47
- package/src/components/blocks/features-4.astro +72 -76
- package/src/components/blocks/features-5.astro +60 -84
- package/src/components/blocks/features-6.astro +61 -58
- package/src/components/blocks/footer-1.astro +85 -83
- package/src/components/blocks/footer-2.astro +67 -48
- package/src/components/blocks/footer-3.astro +106 -91
- package/src/components/blocks/header-1.astro +102 -175
- package/src/components/blocks/header-2.astro +103 -169
- package/src/components/blocks/header-3.astro +108 -188
- package/src/components/blocks/header-4.astro +219 -0
- package/src/components/blocks/header-5.astro +223 -0
- package/src/components/blocks/hero-1.astro +63 -44
- package/src/components/blocks/hero-10.astro +87 -69
- package/src/components/blocks/hero-11.astro +89 -76
- package/src/components/blocks/hero-12.astro +53 -49
- package/src/components/blocks/hero-13.astro +49 -46
- package/src/components/blocks/hero-2.astro +81 -61
- package/src/components/blocks/hero-3.astro +46 -38
- package/src/components/blocks/hero-4.astro +61 -39
- package/src/components/blocks/hero-5.astro +103 -80
- package/src/components/blocks/hero-6.astro +91 -75
- package/src/components/blocks/hero-7.astro +93 -77
- package/src/components/blocks/hero-8.astro +50 -53
- package/src/components/blocks/hero-9.astro +94 -79
- package/src/components/blocks/links-2.astro +41 -34
- package/src/components/blocks/logos-1.astro +39 -23
- package/src/components/blocks/logos-2.astro +43 -29
- package/src/components/blocks/logos-3.astro +24 -23
- package/src/components/blocks/pricing-1.astro +106 -0
- package/src/components/blocks/pricing-2.astro +100 -0
- package/src/components/blocks/pricing-3.astro +92 -0
- package/src/components/blocks/product-1.astro +55 -82
- package/src/components/blocks/products-1.astro +61 -66
- package/src/components/blocks/products-2.astro +48 -63
- package/src/components/blocks/products-3.astro +49 -67
- package/src/components/blocks/products-4.astro +80 -65
- package/src/components/blocks/products-5.astro +76 -72
- package/src/components/blocks/reviews-1.astro +60 -84
- package/src/components/blocks/reviews-2.astro +66 -86
- package/src/components/blocks/reviews-3.astro +72 -90
- package/src/components/blocks/reviews-4.astro +97 -89
- package/src/components/blocks/reviews-5.astro +156 -87
- package/src/components/blocks/services-1.astro +87 -76
- package/src/components/blocks/services-2.astro +93 -83
- package/src/components/blocks/services-3.astro +89 -82
- package/src/components/blocks/services-4.astro +81 -77
- package/src/components/blocks/services-5.astro +77 -77
- package/src/components/blocks/services-6.astro +84 -68
- package/src/components/blocks/services-7.astro +114 -76
- package/src/components/blocks/sidebar-1.astro +429 -0
- package/src/components/ui/accordion/accordion-content.astro +16 -14
- package/src/components/ui/accordion/accordion-item.astro +13 -18
- package/src/components/ui/accordion/accordion-trigger.astro +26 -25
- package/src/components/ui/accordion/accordion.astro +43 -10
- package/src/components/ui/{native-carousel/native-carousel-item.astro → alert/alert-action.astro} +3 -3
- package/src/components/ui/alert/alert-description.astro +11 -17
- package/src/components/ui/alert/alert-title.astro +11 -17
- package/src/components/ui/alert/alert.astro +10 -16
- package/src/components/ui/alert/index.ts +1 -0
- package/src/components/ui/alert-dialog/alert-dialog-action.astro +13 -0
- package/src/components/ui/alert-dialog/alert-dialog-cancel.astro +13 -0
- package/src/components/ui/alert-dialog/alert-dialog-content.astro +30 -0
- package/src/components/ui/alert-dialog/alert-dialog-description.astro +20 -0
- package/src/components/ui/alert-dialog/alert-dialog-footer.astro +20 -0
- package/src/components/ui/alert-dialog/alert-dialog-header.astro +20 -0
- package/src/components/ui/alert-dialog/alert-dialog-media.astro +20 -0
- package/src/components/ui/alert-dialog/alert-dialog-overlay.astro +21 -0
- package/src/components/ui/alert-dialog/alert-dialog-portal.astro +13 -0
- package/src/components/ui/alert-dialog/alert-dialog-title.astro +20 -0
- package/src/components/ui/alert-dialog/alert-dialog-trigger.astro +13 -0
- package/src/components/ui/alert-dialog/alert-dialog.astro +17 -0
- package/src/components/ui/alert-dialog/index.ts +12 -0
- package/src/components/ui/avatar/avatar-badge.astro +23 -0
- package/src/components/ui/avatar/avatar-fallback.astro +11 -17
- package/src/components/ui/avatar/avatar-group-count.astro +20 -0
- package/src/components/ui/avatar/avatar-group.astro +20 -0
- package/src/components/ui/avatar/avatar-image.astro +5 -2
- package/src/components/ui/avatar/avatar.astro +15 -18
- package/src/components/ui/avatar/index.ts +3 -0
- package/src/components/ui/badge/badge-variants.ts +26 -0
- package/src/components/ui/badge/badge.astro +16 -46
- package/src/components/ui/badge/index.ts +2 -0
- package/src/components/ui/banner/banner-container.astro +36 -0
- package/src/components/ui/banner/banner.astro +66 -69
- package/src/components/ui/banner/index.ts +1 -4
- package/src/components/ui/breadcrumb/breadcrumb-ellipsis.astro +24 -0
- package/src/components/ui/breadcrumb/breadcrumb-item.astro +17 -0
- package/src/components/ui/breadcrumb/breadcrumb-link.astro +17 -0
- package/src/components/ui/breadcrumb/breadcrumb-list.astro +20 -0
- package/src/components/ui/breadcrumb/breadcrumb-page.astro +20 -0
- package/src/components/ui/breadcrumb/breadcrumb-separator.astro +20 -0
- package/src/components/ui/breadcrumb/breadcrumb.astro +18 -0
- package/src/components/ui/breadcrumb/index.ts +7 -0
- package/src/components/ui/button/button-variants.ts +39 -0
- package/src/components/ui/button/button.astro +12 -60
- package/src/components/ui/button/index.ts +2 -0
- package/src/components/ui/card/card-action.astro +20 -0
- package/src/components/ui/card/card-content.astro +17 -0
- package/src/components/ui/card/card-description.astro +17 -0
- package/src/components/ui/card/card-footer.astro +20 -0
- package/src/components/ui/card/card-header.astro +20 -0
- package/src/components/ui/card/card-title.astro +20 -0
- package/src/components/ui/card/card.astro +23 -0
- package/src/components/ui/card/index.ts +7 -0
- package/src/components/ui/carousel/carousel-content.astro +24 -0
- package/src/components/ui/carousel/carousel-item.astro +24 -0
- package/src/components/ui/carousel/carousel-next.astro +36 -0
- package/src/components/ui/carousel/carousel-previous.astro +36 -0
- package/src/components/ui/carousel/carousel.astro +246 -0
- package/src/components/ui/carousel/index.ts +11 -0
- package/src/components/ui/checkbox/checkbox.astro +46 -3
- package/src/components/ui/collapsible/collapsible-content.astro +5 -11
- package/src/components/ui/collapsible/collapsible-trigger.astro +10 -25
- package/src/components/ui/collapsible/collapsible.astro +24 -18
- package/src/components/ui/combobox/combobox-content.astro +61 -0
- package/src/components/ui/combobox/combobox-empty.astro +21 -0
- package/src/components/ui/combobox/combobox-group.astro +13 -0
- package/src/components/ui/combobox/combobox-input.astro +57 -0
- package/src/components/ui/combobox/combobox-item.astro +44 -0
- package/src/components/ui/combobox/combobox-label.astro +17 -0
- package/src/components/ui/combobox/combobox-list.astro +20 -0
- package/src/components/ui/combobox/combobox-separator.astro +16 -0
- package/src/components/ui/combobox/combobox-trigger.astro +37 -0
- package/src/components/ui/combobox/combobox-value.astro +20 -0
- package/src/components/ui/combobox/combobox.astro +85 -0
- package/src/components/ui/combobox/index.ts +11 -0
- package/src/components/ui/command/command-dialog.astro +23 -21
- package/src/components/ui/command/command-empty.astro +4 -6
- package/src/components/ui/command/command-group.astro +17 -24
- package/src/components/ui/command/command-input.astro +19 -17
- package/src/components/ui/command/command-item.astro +38 -21
- package/src/components/ui/command/command-list.astro +11 -18
- package/src/components/ui/command/command-separator.astro +3 -4
- package/src/components/ui/command/command-shortcut.astro +11 -18
- package/src/components/ui/command/command.astro +53 -143
- package/src/components/ui/command/index.ts +0 -1
- package/src/components/ui/dialog/dialog-close.astro +6 -10
- package/src/components/ui/dialog/dialog-content.astro +27 -19
- package/src/components/ui/dialog/dialog-description.astro +11 -14
- package/src/components/ui/dialog/dialog-footer.astro +16 -18
- package/src/components/ui/dialog/dialog-header.astro +8 -14
- package/src/components/ui/dialog/dialog-overlay.astro +22 -0
- package/src/components/ui/dialog/dialog-portal.astro +13 -0
- package/src/components/ui/dialog/dialog-title.astro +8 -14
- package/src/components/ui/dialog/dialog-trigger.astro +4 -10
- package/src/components/ui/dialog/dialog.astro +6 -35
- package/src/components/ui/dialog/index.ts +2 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-checkbox-item.astro +52 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-content.astro +58 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-group.astro +13 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-item.astro +36 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-label.astro +23 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-portal.astro +11 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-radio-item.astro +52 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-separator.astro +16 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-shortcut.astro +20 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-trigger.astro +16 -0
- package/src/components/ui/dropdown-menu/dropdown-menu.astro +68 -0
- package/src/components/ui/dropdown-menu/index.ts +11 -0
- package/src/components/ui/empty/empty-content.astro +11 -17
- package/src/components/ui/empty/empty-description.astro +11 -17
- package/src/components/ui/empty/empty-header.astro +8 -17
- package/src/components/ui/empty/empty-media.astro +8 -14
- package/src/components/ui/empty/empty-title.astro +8 -14
- package/src/components/ui/empty/empty.astro +11 -17
- package/src/components/ui/field/field-content.astro +11 -17
- package/src/components/ui/field/field-description.astro +13 -19
- package/src/components/ui/field/field-error.astro +44 -0
- package/src/components/ui/field/field-group.astro +11 -17
- package/src/components/ui/field/field-label.astro +14 -21
- package/src/components/ui/field/field-legend.astro +12 -20
- package/src/components/ui/field/field-separator.astro +6 -7
- package/src/components/ui/field/field-set.astro +11 -18
- package/src/components/ui/field/field-title.astro +11 -17
- package/src/components/ui/field/field.astro +17 -28
- package/src/components/ui/field/index.ts +1 -0
- package/src/components/ui/form/form.astro +13 -0
- package/src/components/ui/form/index.ts +1 -0
- package/src/components/ui/header/header-container.astro +17 -0
- package/src/components/ui/header/header-group.astro +17 -0
- package/src/components/ui/header/header.astro +21 -59
- package/src/components/ui/header/index.ts +2 -2
- package/src/components/ui/hover-card/hover-card-content.astro +51 -0
- package/src/components/ui/hover-card/hover-card-trigger.astro +26 -0
- package/src/components/ui/hover-card/hover-card.astro +69 -0
- package/src/components/ui/hover-card/index.ts +3 -0
- package/src/components/ui/icon/icon.astro +21 -19
- package/src/components/ui/input/input.astro +8 -8
- package/src/components/ui/input-group/index.ts +6 -0
- package/src/components/ui/input-group/input-group-addon.astro +41 -0
- package/src/components/ui/input-group/input-group-button.astro +49 -0
- package/src/components/ui/input-group/input-group-input.astro +23 -0
- package/src/components/ui/input-group/input-group-text.astro +20 -0
- package/src/components/ui/input-group/input-group-textarea.astro +19 -0
- package/src/components/ui/input-group/input-group.astro +51 -0
- package/src/components/ui/item/index.ts +4 -1
- package/src/components/ui/item/item-actions.astro +8 -14
- package/src/components/ui/item/item-content.astro +12 -18
- package/src/components/ui/item/item-description.astro +11 -18
- package/src/components/ui/item/item-footer.astro +17 -0
- package/src/components/ui/item/item-group.astro +12 -15
- package/src/components/ui/item/item-header.astro +17 -0
- package/src/components/ui/item/item-media.astro +12 -17
- package/src/components/ui/item/item-separator.astro +17 -0
- package/src/components/ui/item/item-title.astro +11 -17
- package/src/components/ui/item/item.astro +44 -24
- package/src/components/ui/kbd/index.ts +2 -0
- package/src/components/ui/kbd/kbd-group.astro +17 -0
- package/src/components/ui/kbd/kbd.astro +20 -0
- package/src/components/ui/label/label.astro +11 -17
- package/src/components/ui/layout/index.ts +4 -0
- package/src/components/ui/layout/layout-body.astro +26 -0
- package/src/components/ui/layout/layout-head.astro +100 -0
- package/src/components/ui/layout/layout-main.astro +20 -0
- package/src/components/ui/layout/layout.astro +34 -0
- package/src/components/ui/logo/logo-image.astro +33 -9
- package/src/components/ui/logo/logo-text.astro +4 -10
- package/src/components/ui/logo/logo.astro +10 -16
- package/src/components/ui/marquee/index.ts +0 -1
- package/src/components/ui/marquee/marquee.astro +92 -5
- package/src/components/ui/native-select/native-select-optgroup.astro +6 -2
- package/src/components/ui/native-select/native-select-option.astro +9 -4
- package/src/components/ui/native-select/native-select.astro +15 -13
- package/src/components/ui/navigation-menu/index.ts +3 -3
- package/src/components/ui/navigation-menu/navigation-menu-content.astro +29 -20
- package/src/components/ui/navigation-menu/navigation-menu-indicator.astro +23 -0
- package/src/components/ui/navigation-menu/navigation-menu-item.astro +28 -15
- package/src/components/ui/navigation-menu/navigation-menu-link.astro +13 -39
- package/src/components/ui/navigation-menu/navigation-menu-list.astro +11 -17
- package/src/components/ui/navigation-menu/navigation-menu-positioner.astro +47 -0
- package/src/components/ui/navigation-menu/navigation-menu-trigger-style.ts +7 -0
- package/src/components/ui/navigation-menu/navigation-menu-trigger.astro +18 -23
- package/src/components/ui/navigation-menu/navigation-menu.astro +54 -17
- package/src/components/ui/popover/index.ts +6 -0
- package/src/components/ui/popover/popover-content.astro +62 -0
- package/src/components/ui/popover/popover-description.astro +17 -0
- package/src/components/ui/popover/popover-header.astro +17 -0
- package/src/components/ui/popover/popover-title.astro +13 -0
- package/src/components/ui/popover/popover-trigger.astro +11 -0
- package/src/components/ui/popover/popover.astro +59 -0
- package/src/components/ui/price/format-price-value.ts +91 -0
- package/src/components/ui/price/price-unit.astro +7 -13
- package/src/components/ui/price/price-value.astro +50 -17
- package/src/components/ui/price/price.astro +4 -13
- package/src/components/ui/radio-group/radio-group-item.astro +30 -7
- package/src/components/ui/radio-group/radio-group.astro +28 -4
- package/src/components/ui/rating/rating.astro +30 -27
- package/src/components/ui/section/index.ts +1 -9
- package/src/components/ui/section/section-container.astro +19 -0
- package/src/components/ui/section/section.astro +22 -80
- package/src/components/ui/select/index.ts +8 -0
- package/src/components/ui/select/select-content.astro +69 -0
- package/src/components/ui/select/select-group.astro +17 -0
- package/src/components/ui/select/select-item.astro +39 -0
- package/src/components/ui/select/select-label.astro +17 -0
- package/src/components/ui/select/select-separator.astro +16 -0
- package/src/components/ui/select/select-trigger.astro +40 -0
- package/src/components/ui/select/select-value.astro +17 -0
- package/src/components/ui/select/select.astro +76 -0
- package/src/components/ui/separator/separator.astro +17 -16
- package/src/components/ui/sheet/sheet-close.astro +4 -12
- package/src/components/ui/sheet/sheet-content.astro +41 -64
- package/src/components/ui/sheet/sheet-description.astro +8 -14
- package/src/components/ui/sheet/sheet-footer.astro +8 -14
- package/src/components/ui/sheet/sheet-header.astro +8 -14
- package/src/components/ui/sheet/sheet-title.astro +8 -14
- package/src/components/ui/sheet/sheet-trigger.astro +4 -10
- package/src/components/ui/sheet/sheet.astro +110 -36
- package/src/components/ui/sidebar/index.ts +17 -0
- package/src/components/ui/sidebar/sidebar-content.astro +21 -0
- package/src/components/ui/sidebar/sidebar-footer.astro +18 -0
- package/src/components/ui/sidebar/sidebar-group-action.astro +31 -0
- package/src/components/ui/sidebar/sidebar-group-content.astro +18 -0
- package/src/components/ui/sidebar/sidebar-group-label.astro +26 -0
- package/src/components/ui/sidebar/sidebar-group.astro +18 -0
- package/src/components/ui/sidebar/sidebar-header.astro +18 -0
- package/src/components/ui/sidebar/sidebar-input.astro +19 -0
- package/src/components/ui/sidebar/sidebar-inset.astro +20 -0
- package/src/components/ui/sidebar/sidebar-menu-action.astro +40 -0
- package/src/components/ui/sidebar/sidebar-menu-badge.astro +21 -0
- package/src/components/ui/sidebar/sidebar-menu-button.astro +92 -23
- package/src/components/ui/sidebar/sidebar-menu-item.astro +9 -14
- package/src/components/ui/sidebar/sidebar-menu-skeleton.astro +31 -0
- package/src/components/ui/sidebar/sidebar-menu-sub-button.astro +31 -26
- package/src/components/ui/sidebar/sidebar-menu-sub-item.astro +9 -14
- package/src/components/ui/sidebar/sidebar-menu-sub.astro +12 -17
- package/src/components/ui/sidebar/sidebar-menu.astro +9 -17
- package/src/components/ui/sidebar/sidebar-provider.astro +192 -0
- package/src/components/ui/sidebar/sidebar-rail.astro +27 -0
- package/src/components/ui/sidebar/sidebar-separator.astro +17 -0
- package/src/components/ui/sidebar/sidebar-trigger.astro +26 -0
- package/src/components/ui/sidebar/sidebar.astro +118 -0
- package/src/components/ui/skeleton/skeleton.astro +8 -3
- package/src/components/ui/slider/index.ts +1 -0
- package/src/components/ui/slider/slider.astro +84 -0
- package/src/components/ui/spinner/spinner.astro +12 -6
- package/src/components/ui/switch/index.ts +1 -0
- package/src/components/ui/switch/switch.astro +71 -0
- package/src/components/ui/table/index.ts +0 -1
- package/src/components/ui/table/table-body.astro +1 -2
- package/src/components/ui/table/table-caption.astro +1 -2
- package/src/components/ui/table/table-cell.astro +2 -3
- package/src/components/ui/table/table-footer.astro +1 -2
- package/src/components/ui/table/table-head.astro +2 -3
- package/src/components/ui/table/table-header.astro +1 -1
- package/src/components/ui/table/table-row.astro +2 -3
- package/src/components/ui/table/table.astro +1 -1
- package/src/components/ui/tabs/index.ts +4 -1
- package/src/components/ui/tabs/tabs-content.astro +10 -20
- package/src/components/ui/tabs/tabs-list-variants.ts +18 -0
- package/src/components/ui/tabs/tabs-list.astro +21 -18
- package/src/components/ui/tabs/tabs-trigger.astro +17 -28
- package/src/components/ui/tabs/tabs.astro +24 -91
- package/src/components/ui/textarea/textarea.astro +11 -5
- package/src/components/ui/theme-toggle/theme-provider.astro +57 -22
- package/src/components/ui/theme-toggle/theme-toggle.astro +66 -37
- package/src/components/ui/tile/index.ts +1 -6
- package/src/components/ui/tile/tile-content.astro +8 -10
- package/src/components/ui/tile/tile-group.astro +76 -0
- package/src/components/ui/tile/tile.astro +19 -30
- package/src/components/ui/toc/index.ts +5 -0
- package/src/components/ui/toc/toc-menu-item.astro +13 -0
- package/src/components/ui/toc/toc-menu-link.astro +37 -0
- package/src/components/ui/toc/toc-menu.astro +17 -0
- package/src/components/ui/toc/toc-title.astro +21 -0
- package/src/components/ui/toc/toc.astro +13 -0
- package/src/components/ui/toggle/index.ts +3 -0
- package/src/components/ui/toggle/toggle-variants.ts +25 -0
- package/src/components/ui/toggle/toggle.astro +40 -0
- package/src/components/ui/tooltip/index.ts +3 -0
- package/src/components/ui/tooltip/tooltip-content.astro +64 -0
- package/src/components/ui/tooltip/tooltip-trigger.astro +26 -0
- package/src/components/ui/tooltip/tooltip.astro +55 -0
- package/src/components/ui/typography/index.ts +16 -0
- package/src/components/ui/typography/typography-a.astro +22 -0
- package/src/components/ui/typography/typography-blockquote.astro +23 -0
- package/src/components/ui/typography/typography-h1.astro +43 -0
- package/src/components/ui/typography/typography-h2.astro +43 -0
- package/src/components/ui/typography/typography-h3.astro +43 -0
- package/src/components/ui/typography/typography-h4.astro +43 -0
- package/src/components/ui/typography/typography-inline-code.astro +31 -0
- package/src/components/ui/typography/typography-lead.astro +21 -0
- package/src/components/ui/typography/typography-list-item.astro +28 -0
- package/src/components/ui/typography/typography-list.astro +45 -0
- package/src/components/ui/typography/typography-p.astro +23 -0
- package/src/components/ui/typography/typography-table-cell.astro +41 -0
- package/src/components/ui/typography/typography-table-head.astro +41 -0
- package/src/components/ui/typography/typography-table-row.astro +33 -0
- package/src/components/ui/typography/typography-table.astro +50 -0
- package/src/components/ui/typography/typography.astro +180 -0
- package/src/components/ui/video/video.astro +54 -20
- package/src/lib/integration.ts +66 -0
- package/src/lib/pages.ts +85 -0
- package/src/styles/global.css +119 -161
- package/.editorconfig +0 -10
- package/.github/CODEOWNERS +0 -2
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -12
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/documentation.yml +0 -12
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -12
- package/.github/ISSUE_TEMPLATE/support.yml +0 -12
- package/.nvmrc +0 -1
- package/.prettierignore +0 -21
- package/CODE_OF_CONDUCT.md +0 -7
- package/CONTRIBUTING.md +0 -142
- package/ai/website-quality-checklist.md +0 -33
- package/astro.config.example.ts +0 -90
- package/astro.config.ts +0 -183
- package/components.json +0 -24
- package/package.example.json +0 -41
- package/prettier.config.cjs +0 -44
- package/public/r/all.json +0 -41
- package/public/r/auto-form.json +0 -26
- package/public/r/block.json +0 -89
- package/public/r/footer.json +0 -77
- package/public/r/image.json +0 -17
- package/public/r/list.json +0 -22
- package/public/r/native-carousel.json +0 -37
- package/public/r/page.json +0 -18
- package/public/r/pricings-1.json +0 -20
- package/public/r/pricings-2.json +0 -20
- package/public/r/pricings-3.json +0 -20
- package/site.json +0 -12
- package/src/assets/avatar-sil-veltman.webp +0 -0
- package/src/assets/image-placeholder.webp +0 -0
- package/src/assets/logo-fulldev.svg +0 -4
- package/src/assets/my-accordion-code-example-homepage.astro.webp +0 -0
- package/src/assets/my-cta-code-example-homepage.astro.webp +0 -0
- package/src/assets/og-image-homepage-screenshot.png +0 -0
- package/src/components/_skeletons/split-grid.astro +0 -47
- package/src/components/_skeletons/split-masonry.astro +0 -57
- package/src/components/_skeletons/split-media.astro +0 -31
- package/src/components/_skeletons/spread-grid.astro +0 -49
- package/src/components/_skeletons/spread-masonry.astro +0 -59
- package/src/components/_skeletons/spread-media.astro +0 -33
- package/src/components/_skeletons/stack-grid.astro +0 -44
- package/src/components/_skeletons/stack-masonry.astro +0 -54
- package/src/components/_skeletons/stack-media.astro +0 -28
- package/src/components/block.astro +0 -125
- package/src/components/blocks/blocks-2.astro +0 -95
- package/src/components/blocks/blocks-3.astro +0 -93
- package/src/components/blocks/blocks-4.astro +0 -110
- package/src/components/blocks/hero-14.astro +0 -70
- package/src/components/blocks/images-1.astro +0 -70
- package/src/components/blocks/images-2.astro +0 -62
- package/src/components/blocks/links-1.astro +0 -46
- package/src/components/blocks/pricings-1.astro +0 -80
- package/src/components/blocks/pricings-2.astro +0 -83
- package/src/components/blocks/pricings-3.astro +0 -80
- package/src/components/blocks/skeletons-1.astro +0 -61
- package/src/components/blocks/stats-1.astro +0 -64
- package/src/components/blocks/stats-2.astro +0 -69
- package/src/components/blocks/stats-3.astro +0 -66
- package/src/components/blocks/steps-1.astro +0 -82
- package/src/components/blocks/steps-2.astro +0 -76
- package/src/components/blocks/steps-3.astro +0 -73
- package/src/components/blocks/table-1.astro +0 -89
- package/src/components/blocks/video-1.astro +0 -93
- package/src/components/blocks/video-2.astro +0 -96
- package/src/components/blocks/video-3.astro +0 -73
- package/src/components/blocks/videos-1.astro +0 -63
- package/src/components/blocks/videos-2.astro +0 -66
- package/src/components/blocks/videos-3.astro +0 -68
- package/src/components/blocks/videos-4.astro +0 -64
- package/src/components/layout.astro +0 -195
- package/src/components/live-code-layout.astro +0 -14
- package/src/components/starlight-head.astro +0 -65
- package/src/components/starlight-icons.astro +0 -36
- package/src/components/starlight-markdown-content.astro +0 -68
- package/src/components/starlight-title.astro +0 -37
- package/src/components/ui/auto-form/auto-form.astro +0 -135
- package/src/components/ui/auto-form/index.ts +0 -1
- package/src/components/ui/banner/banner-close.astro +0 -21
- package/src/components/ui/banner/banner-content.astro +0 -41
- package/src/components/ui/banner/banner-description.astro +0 -19
- package/src/components/ui/banner/banner-title.astro +0 -19
- package/src/components/ui/footer/footer-actions.astro +0 -19
- package/src/components/ui/footer/footer-content.astro +0 -19
- package/src/components/ui/footer/footer-copyright.astro +0 -24
- package/src/components/ui/footer/footer-description.astro +0 -37
- package/src/components/ui/footer/footer-grid.astro +0 -25
- package/src/components/ui/footer/footer-group-label.astro +0 -19
- package/src/components/ui/footer/footer-group.astro +0 -19
- package/src/components/ui/footer/footer-menu-item.astro +0 -19
- package/src/components/ui/footer/footer-menu-link.astro +0 -25
- package/src/components/ui/footer/footer-menu.astro +0 -32
- package/src/components/ui/footer/footer-split.astro +0 -26
- package/src/components/ui/footer/footer-spread.astro +0 -25
- package/src/components/ui/footer/footer.astro +0 -71
- package/src/components/ui/footer/index.ts +0 -12
- package/src/components/ui/header/header-actions.astro +0 -19
- package/src/components/ui/header/header-content.astro +0 -22
- package/src/components/ui/image/image.astro +0 -22
- package/src/components/ui/image/index.ts +0 -1
- package/src/components/ui/list/index.ts +0 -2
- package/src/components/ui/list/list-item.astro +0 -26
- package/src/components/ui/list/list.astro +0 -19
- package/src/components/ui/marquee/marquee-content.astro +0 -60
- package/src/components/ui/native-carousel/index.ts +0 -5
- package/src/components/ui/native-carousel/native-carousel-content.astro +0 -92
- package/src/components/ui/native-carousel/native-carousel-next.astro +0 -24
- package/src/components/ui/native-carousel/native-carousel-previous.astro +0 -24
- package/src/components/ui/native-carousel/native-carousel.astro +0 -20
- package/src/components/ui/navigation-menu/navigation-menu-sub-item.astro +0 -23
- package/src/components/ui/navigation-menu/navigation-menu-sub-link.astro +0 -27
- package/src/components/ui/navigation-menu/navigation-menu-sub.astro +0 -23
- package/src/components/ui/section/section-actions.astro +0 -19
- package/src/components/ui/section/section-content.astro +0 -22
- package/src/components/ui/section/section-grid.astro +0 -37
- package/src/components/ui/section/section-masonry.astro +0 -33
- package/src/components/ui/section/section-media.astro +0 -26
- package/src/components/ui/section/section-prose.astro +0 -49
- package/src/components/ui/section/section-provider.astro +0 -27
- package/src/components/ui/section/section-split.astro +0 -26
- package/src/components/ui/section/section-spread.astro +0 -25
- package/src/components/ui/tile/tile-actions.astro +0 -19
- package/src/components/ui/tile/tile-description.astro +0 -19
- package/src/components/ui/tile/tile-media.astro +0 -44
- package/src/components/ui/tile/tile-split.astro +0 -23
- package/src/components/ui/tile/tile-spread.astro +0 -25
- package/src/components/ui/tile/tile-title.astro +0 -19
- package/src/content/docs/docs/components/_command.mdx +0 -110
- package/src/content/docs/docs/components/_dialog.mdx +0 -84
- package/src/content/docs/docs/components/accordion.mdx +0 -90
- package/src/content/docs/docs/components/alert.mdx +0 -63
- package/src/content/docs/docs/components/auto-form.mdx +0 -42
- package/src/content/docs/docs/components/avatar.mdx +0 -60
- package/src/content/docs/docs/components/badge.mdx +0 -71
- package/src/content/docs/docs/components/banner.mdx +0 -42
- package/src/content/docs/docs/components/button.mdx +0 -188
- package/src/content/docs/docs/components/checkbox.mdx +0 -60
- package/src/content/docs/docs/components/collapsible.mdx +0 -67
- package/src/content/docs/docs/components/empty.mdx +0 -64
- package/src/content/docs/docs/components/field.mdx +0 -347
- package/src/content/docs/docs/components/footer.mdx +0 -27
- package/src/content/docs/docs/components/header.mdx +0 -77
- package/src/content/docs/docs/components/icon.mdx +0 -43
- package/src/content/docs/docs/components/image.mdx +0 -38
- package/src/content/docs/docs/components/input.mdx +0 -35
- package/src/content/docs/docs/components/item.mdx +0 -75
- package/src/content/docs/docs/components/label.mdx +0 -34
- package/src/content/docs/docs/components/list.mdx +0 -52
- package/src/content/docs/docs/components/logo.mdx +0 -44
- package/src/content/docs/docs/components/marquee.mdx +0 -110
- package/src/content/docs/docs/components/native-carousel.mdx +0 -83
- package/src/content/docs/docs/components/native-select.mdx +0 -141
- package/src/content/docs/docs/components/navigation-menu.mdx +0 -91
- package/src/content/docs/docs/components/price.mdx +0 -42
- package/src/content/docs/docs/components/radio-group.mdx +0 -47
- package/src/content/docs/docs/components/rating.mdx +0 -81
- package/src/content/docs/docs/components/section.mdx +0 -87
- package/src/content/docs/docs/components/separator.mdx +0 -39
- package/src/content/docs/docs/components/sheet.mdx +0 -73
- package/src/content/docs/docs/components/sidebar.mdx +0 -208
- package/src/content/docs/docs/components/skeleton.mdx +0 -24
- package/src/content/docs/docs/components/spinner.mdx +0 -37
- package/src/content/docs/docs/components/table.mdx +0 -100
- package/src/content/docs/docs/components/tabs.mdx +0 -59
- package/src/content/docs/docs/components/textarea.mdx +0 -35
- package/src/content/docs/docs/components/theme-toggle.mdx +0 -56
- package/src/content/docs/docs/components/tile.mdx +0 -198
- package/src/content/docs/docs/components/video.mdx +0 -36
- package/src/content/docs/docs/components.md +0 -4
- package/src/content/docs/docs/index.md +0 -9
- package/src/content/docs/docs/installation.md +0 -93
- package/src/content/docs/docs/theming.md +0 -6
- package/src/content/layouts/block.yaml +0 -276
- package/src/content/layouts/docs.yaml +0 -25
- package/src/content/layouts/hero.yaml +0 -256
- package/src/content/layouts/index.yaml +0 -23
- package/src/content/pages/blocks/article-1.md +0 -9
- package/src/content/pages/blocks/article-2.md +0 -9
- package/src/content/pages/blocks/article.md +0 -11
- package/src/content/pages/blocks/articles-1.md +0 -9
- package/src/content/pages/blocks/articles-2.md +0 -9
- package/src/content/pages/blocks/articles-3.md +0 -9
- package/src/content/pages/blocks/articles-4.md +0 -9
- package/src/content/pages/blocks/articles.md +0 -13
- package/src/content/pages/blocks/banner-1.md +0 -9
- package/src/content/pages/blocks/banner-2.md +0 -9
- package/src/content/pages/blocks/banner.md +0 -11
- package/src/content/pages/blocks/contact-1.md +0 -9
- package/src/content/pages/blocks/contact-2.md +0 -9
- package/src/content/pages/blocks/contact-3.md +0 -9
- package/src/content/pages/blocks/contact.md +0 -11
- package/src/content/pages/blocks/content-1.md +0 -9
- package/src/content/pages/blocks/content-2.md +0 -9
- package/src/content/pages/blocks/content-3.md +0 -9
- package/src/content/pages/blocks/content-4.md +0 -9
- package/src/content/pages/blocks/content.md +0 -13
- package/src/content/pages/blocks/cta-1.md +0 -9
- package/src/content/pages/blocks/cta-2.md +0 -9
- package/src/content/pages/blocks/cta-3.md +0 -9
- package/src/content/pages/blocks/cta-4.md +0 -9
- package/src/content/pages/blocks/cta-5.md +0 -9
- package/src/content/pages/blocks/cta-6.md +0 -9
- package/src/content/pages/blocks/cta-7.md +0 -9
- package/src/content/pages/blocks/cta-8.md +0 -9
- package/src/content/pages/blocks/cta.md +0 -17
- package/src/content/pages/blocks/faqs-1.md +0 -9
- package/src/content/pages/blocks/faqs-2.md +0 -9
- package/src/content/pages/blocks/faqs-3.md +0 -9
- package/src/content/pages/blocks/faqs-4.md +0 -9
- package/src/content/pages/blocks/faqs.md +0 -13
- package/src/content/pages/blocks/features-1.md +0 -9
- package/src/content/pages/blocks/features-2.md +0 -9
- package/src/content/pages/blocks/features-3.md +0 -9
- package/src/content/pages/blocks/features-4.md +0 -9
- package/src/content/pages/blocks/features-5.md +0 -9
- package/src/content/pages/blocks/features-6.md +0 -9
- package/src/content/pages/blocks/features.md +0 -15
- package/src/content/pages/blocks/footer-1.md +0 -9
- package/src/content/pages/blocks/footer-2.md +0 -9
- package/src/content/pages/blocks/footer.md +0 -11
- package/src/content/pages/blocks/header-1.md +0 -9
- package/src/content/pages/blocks/header-2.md +0 -9
- package/src/content/pages/blocks/header-3.md +0 -9
- package/src/content/pages/blocks/header.md +0 -12
- package/src/content/pages/blocks/hero-1.md +0 -9
- package/src/content/pages/blocks/hero-10.md +0 -9
- package/src/content/pages/blocks/hero-11.md +0 -9
- package/src/content/pages/blocks/hero-12.md +0 -9
- package/src/content/pages/blocks/hero-13.md +0 -9
- package/src/content/pages/blocks/hero-2.md +0 -9
- package/src/content/pages/blocks/hero-3.md +0 -9
- package/src/content/pages/blocks/hero-4.md +0 -9
- package/src/content/pages/blocks/hero-5.md +0 -9
- package/src/content/pages/blocks/hero-6.md +0 -9
- package/src/content/pages/blocks/hero-7.md +0 -9
- package/src/content/pages/blocks/hero-8.md +0 -9
- package/src/content/pages/blocks/hero-9.md +0 -9
- package/src/content/pages/blocks/hero.md +0 -22
- package/src/content/pages/blocks/logos-1.md +0 -9
- package/src/content/pages/blocks/logos-2.md +0 -9
- package/src/content/pages/blocks/logos-3.md +0 -9
- package/src/content/pages/blocks/logos.md +0 -12
- package/src/content/pages/blocks/pricings-1.md +0 -9
- package/src/content/pages/blocks/pricings-2.md +0 -9
- package/src/content/pages/blocks/pricings-3.md +0 -9
- package/src/content/pages/blocks/pricings.md +0 -12
- package/src/content/pages/blocks/product-1.md +0 -9
- package/src/content/pages/blocks/product.md +0 -10
- package/src/content/pages/blocks/products-1.md +0 -9
- package/src/content/pages/blocks/products-2.md +0 -9
- package/src/content/pages/blocks/products-3.md +0 -9
- package/src/content/pages/blocks/products-4.md +0 -9
- package/src/content/pages/blocks/products-5.md +0 -9
- package/src/content/pages/blocks/products.md +0 -14
- package/src/content/pages/blocks/reviews-1.md +0 -9
- package/src/content/pages/blocks/reviews-2.md +0 -9
- package/src/content/pages/blocks/reviews-3.md +0 -9
- package/src/content/pages/blocks/reviews-4.md +0 -9
- package/src/content/pages/blocks/reviews-5.md +0 -9
- package/src/content/pages/blocks/reviews.md +0 -14
- package/src/content/pages/blocks/services-1.md +0 -9
- package/src/content/pages/blocks/services-2.md +0 -9
- package/src/content/pages/blocks/services-3.md +0 -9
- package/src/content/pages/blocks/services-4.md +0 -9
- package/src/content/pages/blocks/services-5.md +0 -9
- package/src/content/pages/blocks/services-6.md +0 -9
- package/src/content/pages/blocks/services-7.md +0 -9
- package/src/content/pages/blocks/services.md +0 -16
- package/src/content/pages/blocks.md +0 -45
- package/src/content/pages/index.md +0 -73
- package/src/content.config.example.ts +0 -21
- package/src/content.config.ts +0 -28
- package/src/env.d.ts +0 -2
- package/src/lib/schemas.ts +0 -169
- package/src/pages/[...page].astro +0 -37
- package/src/styles/global.example.css +0 -144
- package/tsconfig.json +0 -26
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "beta-repo-setup",
|
|
4
|
+
"registryDependencies": [
|
|
5
|
+
"@fulldev/blocks",
|
|
6
|
+
"@fulldev/components"
|
|
7
|
+
],
|
|
8
|
+
"files": [
|
|
9
|
+
{
|
|
10
|
+
"path": "src/content.config.ts",
|
|
11
|
+
"content": "import { defineCollection } from \"astro:content\"\nimport { glob } from \"astro/loaders\"\n\nimport { globalSchema } from \"@/schemas/global\"\nimport { pageSchema } from \"@/schemas/page\"\n\nexport const collections = {\n pages: defineCollection({\n loader: glob({\n pattern: \"**/[^_]*.{md,mdx}\",\n base: \"src/content/pages\",\n }),\n schema: pageSchema,\n }),\n globals: defineCollection({\n loader: glob({\n pattern: \"**/[^_]*.{yaml,yml,json}\",\n base: \"src/content/globals\",\n }),\n schema: globalSchema,\n }),\n}\n",
|
|
12
|
+
"type": "registry:file",
|
|
13
|
+
"target": "src/content.config.ts"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"path": "src/components/layout-renderer.astro",
|
|
17
|
+
"content": "---\n// Keep this renderer generic and stable. New page types should be wired by\n// adding a matching schema and src/layouts/<type>.astro file, not by adding\n// layout-specific branches here.\nimport { getEntry, render, type CollectionEntry } from \"astro:content\"\n\ntype Props = CollectionEntry<\"pages\">\n\nconst page = Astro.props\nconst pageData = page.data\nconst { Content, headings } = await render(page)\nconst global = await getEntry(\"globals\", Astro.currentLocale || \"en\")\nif (!global) throw new Error(\"Add a global to content/globals\")\nconst globalData = global.data\n\nconst layoutImports = import.meta.glob(\"../layouts/*.astro\", { eager: true })\nconst layoutPath = `../layouts/${pageData.type}.astro`\nconst layoutImport = layoutImports[layoutPath] as { default?: any } | undefined\nconst Layout = layoutImport?.default\n\nif (!Layout) throw new Error(`Add a layout for page type \"${pageData.type}\"`)\n---\n\n<Layout global={globalData} page={pageData} headings={headings}>\n <Content />\n</Layout>\n",
|
|
18
|
+
"type": "registry:file",
|
|
19
|
+
"target": "src/components/layout-renderer.astro"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"path": "src/lib/pages.ts",
|
|
23
|
+
"content": "import { getCollection, type CollectionEntry } from \"astro:content\"\n\ntype Page = CollectionEntry<\"pages\">\n\nexport type PageSearchItem = {\n label: string\n href: string\n title: string\n path: string\n description: string\n group: string\n}\n\nexport type PageBreadcrumbItem = {\n label: string\n href: string\n}\n\nexport const normalizePath = (path: string) => {\n if (path === \"/\") return path\n\n return path.replace(/\\/$/, \"\")\n}\n\nexport const getPageHref = (page: Page) =>\n page.id === \"index\" ? \"/\" : `/${page.id}/`\n\nexport const formatSlug = (slug: string) =>\n slug\n .split(\"-\")\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \")\n\nconst getPageSearchGroup = (href: string) => {\n const [slug] = href.split(\"/\").filter(Boolean)\n\n return slug ? formatSlug(slug) : \"Overview\"\n}\n\nexport const getPageSearchItems = async (): Promise<PageSearchItem[]> => {\n const pages = await getCollection(\"pages\")\n\n return pages\n .map((page) => ({\n label: page.data.title,\n href: getPageHref(page),\n title: page.data.title,\n path: getPageHref(page),\n description: page.data.description,\n group: getPageSearchGroup(getPageHref(page)),\n }))\n .sort((a, b) => a.label.localeCompare(b.label))\n}\n\nexport const getPageBreadcrumbItems = async (\n pathname: string\n): Promise<PageBreadcrumbItem[]> => {\n const currentPath = normalizePath(pathname)\n const pages = await getCollection(\"pages\")\n const pageTitlesByHref = new Map(\n pages.map((page) => [getPageHref(page), page.data.title])\n )\n const homeLink = {\n label: pageTitlesByHref.get(\"/\") ?? \"Home\",\n href: \"/\",\n }\n\n if (currentPath === \"/\") return [homeLink]\n\n return [\n homeLink,\n ...currentPath\n .split(\"/\")\n .filter(Boolean)\n .map((slug, index, slugs) => {\n const href = `/${slugs.slice(0, index + 1).join(\"/\")}/`\n\n return {\n label: pageTitlesByHref.get(href) ?? formatSlug(slug),\n href,\n }\n }),\n ]\n}\n",
|
|
24
|
+
"type": "registry:file",
|
|
25
|
+
"target": "src/lib/pages.ts"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"path": "src/pages/[...page].astro",
|
|
29
|
+
"content": "---\nimport { getCollection } from \"astro:content\"\n\nimport LayoutRenderer from \"@/components/layout-renderer.astro\"\n\nexport async function getStaticPaths() {\n const pages = await getCollection(\"pages\")\n return pages.map((page) => {\n return {\n params: {\n page: page.id === \"index\" ? undefined : page.id,\n },\n props: page,\n }\n })\n}\n---\n\n<LayoutRenderer {...Astro.props} />\n",
|
|
30
|
+
"type": "registry:file",
|
|
31
|
+
"target": "src/pages/[...page].astro"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": "src/pages/[...page].md.ts",
|
|
35
|
+
"content": "import { readFile } from \"node:fs/promises\"\nimport type { APIRoute } from \"astro\"\nimport { getCollection } from \"astro:content\"\n\nexport const prerender = true\n\nconst navigationPreamble = \"Navigation: [/sitemap.md](/sitemap.md)\\n\\n\"\n\nexport async function getStaticPaths() {\n const pages = await getCollection(\"pages\")\n return Promise.all(\n pages\n .filter((page) => page.id !== \"index\")\n .map(async (page) => ({\n params: {\n page: page.id,\n },\n props: {\n source: await readPageSource(page.filePath),\n },\n }))\n )\n}\n\nasync function readPageSource(filePath: string | undefined) {\n if (!filePath) {\n throw new Error(\"Expected content page entry to include a file path.\")\n }\n\n return readFile(filePath, \"utf-8\")\n}\n\nexport const GET: APIRoute = ({ props }) => {\n return new Response(`${navigationPreamble}${props.source}`, {\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n },\n })\n}\n",
|
|
36
|
+
"type": "registry:file",
|
|
37
|
+
"target": "src/pages/[...page].md.ts"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "src/pages/index.md.ts",
|
|
41
|
+
"content": "import { readFile } from \"node:fs/promises\"\nimport type { APIRoute } from \"astro\"\nimport { getEntry } from \"astro:content\"\n\nexport const prerender = true\n\nconst agentPreamble = `# Fulldev UI Agent Entry Point\n\nNavigation: [/sitemap.md](/sitemap.md)\n\nIf you are an AI agent, treat this page as the entry point for Fulldev UI. Install the Fulldev skill first if your environment supports skills, then read the relevant Markdown pages before editing a project.\n\n\\`\\`\\`bash\nnpx -y skills add fulldotdev/ui --skill fulldev -y\n\\`\\`\\`\n\nStart here:\n\n- Install Fulldev UI: [/docs/installation.md](/docs/installation.md)\n- Understand the project model: [/docs/introduction.md](/docs/introduction.md)\n- Customize theme tokens: [/docs/theming.md](/docs/theming.md)\n- Browse documentation sections: [/docs.md](/docs.md)\n- Browse installable components: [/components.md](/components.md)\n- Browse installable blocks: [/blocks.md](/blocks.md)\n- Discover all pages: [/sitemap.md](/sitemap.md)\n- Read registry metadata: [/r/registry.json](/r/registry.json)\n\nEvery documentation page has a Markdown version. Add \\`.md\\` to a page URL, for example \\`/components/button.md\\` or \\`/blocks/hero.md\\`.\n\nRecommended agent flow:\n\n1. Read \\`/docs/installation.md\\`.\n2. Install the Fulldev skill if your agent supports skills.\n3. Read the component or block page that matches the user's request.\n4. Install registry items with \\`npx shadcn@latest add @fulldev/<name>\\`.\n5. Use block and component examples as source references, not as hidden sidebar context.\n\n---\n\n## Homepage source\n\n`\n\nexport const GET: APIRoute = async () => {\n const page = await getEntry(\"pages\", \"index\")\n\n if (!page?.filePath) {\n return new Response(\n `${agentPreamble}No homepage content entry exists yet. Add \\`src/content/pages/index.mdx\\` to use this Markdown entry point.`,\n {\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n },\n }\n )\n }\n\n return new Response(\n `${agentPreamble}${await readFile(page.filePath, \"utf-8\")}`,\n {\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n },\n }\n )\n}\n",
|
|
42
|
+
"type": "registry:file",
|
|
43
|
+
"target": "src/pages/index.md.ts"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"path": "src/pages/sitemap.md.ts",
|
|
47
|
+
"content": "import type { APIRoute } from \"astro\"\nimport { getCollection } from \"astro:content\"\n\nimport { getPageHref } from \"@/lib/pages\"\n\nexport const prerender = true\n\nconst getMarkdownHref = (href: string) =>\n href === \"/\" ? \"/index.md\" : `${href.replace(/\\/$/, \"\")}.md`\n\nexport const GET: APIRoute = async () => {\n const pages = await getCollection(\"pages\")\n const pageLinks = pages\n .map((page) => ({\n title: page.data.title,\n href: getPageHref(page),\n markdownHref: getMarkdownHref(getPageHref(page)),\n description: page.data.description,\n }))\n .sort((a, b) => a.href.localeCompare(b.href))\n\n const body = `# Fulldev UI Sitemap\n\nUse the Markdown URLs when reading pages as an AI agent.\n\n## Core\n\n- [Agent entry point](/index.md)\n- [Registry metadata](/r/registry.json)\n\n## Pages\n\n${pageLinks\n .map(\n (page) =>\n `- [${page.title}](${page.href}) | [Markdown](${page.markdownHref})${\n page.description ? ` - ${page.description}` : \"\"\n }`\n )\n .join(\"\\n\")}\n`\n\n return new Response(body, {\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n },\n })\n}\n",
|
|
48
|
+
"type": "registry:file",
|
|
49
|
+
"target": "src/pages/sitemap.md.ts"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"path": "src/schemas/shared.ts",
|
|
53
|
+
"content": "import { type SchemaContext } from \"astro:content\"\nimport { z } from \"astro/zod\"\n\nexport const linkSchema = z.object({\n label: z.string(),\n href: z.string(),\n})\n\nexport const buttonSchema = z.object({\n label: z.string(),\n href: z.string(),\n icon: z.string().optional(),\n variant: z.enum([\"default\", \"outline\", \"secondary\", \"ghost\"]).optional(),\n})\n\nexport const imageSchema = ({ image }: SchemaContext) =>\n z.object({\n src: image(),\n alt: z.string(),\n })\n\nexport const seoSchema = (ctx: SchemaContext) =>\n z.object({\n title: z.string(),\n description: z.string(),\n image: imageSchema(ctx).optional(),\n canonical: z.string().optional(),\n noindex: z.boolean().optional(),\n nofollow: z.boolean().optional(),\n })\n",
|
|
54
|
+
"type": "registry:file",
|
|
55
|
+
"target": "src/schemas/shared.ts"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"path": "src/schemas/global.ts",
|
|
59
|
+
"content": "import { type SchemaContext } from \"astro:content\"\nimport { z } from \"astro/zod\"\n\nimport { buttonSchema, linkSchema } from \"@/schemas/shared\"\n\nconst nestedLinkSchema = linkSchema.extend({\n links: linkSchema.array().optional(),\n})\n\nexport const globalSchema = ({ image }: SchemaContext) =>\n z.object({\n name: z.string(),\n logo: z\n .object({\n label: z.string(),\n href: z.string(),\n src: image().optional(),\n srcLight: image().optional(),\n srcDark: image().optional(),\n alt: z.string().optional(),\n })\n .refine((logo) => logo.src || (logo.srcLight && logo.srcDark), {\n message: \"Logo must define src or both srcLight and srcDark.\",\n }),\n header: z.object({\n navigation: nestedLinkSchema.array(),\n githubRepo: z.string(),\n }),\n sidebar: z.object({\n search: z.object({\n label: z.string(),\n empty: z.string(),\n }),\n navigation: nestedLinkSchema.array(),\n }),\n docs: z\n .object({\n callout: z.object({\n description: z.string(),\n button: buttonSchema,\n }),\n })\n .optional(),\n })\n\nexport type GlobalSchema = z.infer<ReturnType<typeof globalSchema>>\n",
|
|
60
|
+
"type": "registry:file",
|
|
61
|
+
"target": "src/schemas/global.ts"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"path": "src/schemas/page.ts",
|
|
65
|
+
"content": "import { type SchemaContext } from \"astro:content\"\nimport { z } from \"astro/zod\"\n\nimport { blockSchema } from \"@/schemas/layouts/block\"\nimport { docSchema } from \"@/schemas/layouts/doc\"\nimport { homeSchema } from \"@/schemas/layouts/home\"\nimport { overviewSchema } from \"@/schemas/layouts/overview\"\n\nexport const pageSchema = (ctx: SchemaContext) =>\n z.discriminatedUnion(\"type\", [\n blockSchema(ctx).extend({ type: z.literal(\"block\") }),\n docSchema(ctx).extend({ type: z.literal(\"doc\") }),\n homeSchema(ctx).extend({ type: z.literal(\"home\") }),\n overviewSchema(ctx).extend({ type: z.literal(\"overview\") }),\n ])\n",
|
|
66
|
+
"type": "registry:file",
|
|
67
|
+
"target": "src/schemas/page.ts"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"path": "src/schemas/layouts/base.ts",
|
|
71
|
+
"content": "import { type SchemaContext } from \"astro:content\"\nimport { z } from \"astro/zod\"\n\nimport { imageSchema, seoSchema } from \"@/schemas/shared\"\n\nexport const baseSchema = (ctx: SchemaContext) =>\n z.object({\n title: z.string(),\n description: z.string(),\n image: imageSchema(ctx).optional(),\n seo: seoSchema(ctx).optional(),\n })\n\nexport type BaseSchema = z.infer<ReturnType<typeof baseSchema>>\n",
|
|
72
|
+
"type": "registry:file",
|
|
73
|
+
"target": "src/schemas/layouts/base.ts"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"path": "src/schemas/layouts/block.ts",
|
|
77
|
+
"content": "import { type SchemaContext } from \"astro:content\"\nimport { z } from \"astro/zod\"\n\nimport { baseSchema } from \"@/schemas/layouts/base\"\n\nexport const blockSchema = (ctx: SchemaContext) =>\n baseSchema(ctx)\n .extend({\n category: z.string().optional(),\n })\n .strict()\n\nexport type BlockSchema = z.infer<ReturnType<typeof blockSchema>>\n",
|
|
78
|
+
"type": "registry:file",
|
|
79
|
+
"target": "src/schemas/layouts/block.ts"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"path": "src/schemas/layouts/doc.ts",
|
|
83
|
+
"content": "import { type SchemaContext } from \"astro:content\"\nimport { z } from \"astro/zod\"\n\nimport { baseSchema } from \"@/schemas/layouts/base\"\n\nexport const docSchema = (ctx: SchemaContext) => baseSchema(ctx).loose()\n\nexport type DocSchema = z.infer<ReturnType<typeof docSchema>>\n",
|
|
84
|
+
"type": "registry:file",
|
|
85
|
+
"target": "src/schemas/layouts/doc.ts"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"path": "src/schemas/layouts/home.ts",
|
|
89
|
+
"content": "import { type SchemaContext } from \"astro:content\"\nimport { z } from \"astro/zod\"\n\nimport { baseSchema } from \"@/schemas/layouts/base\"\n\nexport const homeSchema = (ctx: SchemaContext) =>\n baseSchema(ctx).extend({}).strict()\n\nexport type HomeSchema = z.infer<ReturnType<typeof homeSchema>>\n",
|
|
90
|
+
"type": "registry:file",
|
|
91
|
+
"target": "src/schemas/layouts/home.ts"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"path": "src/schemas/layouts/overview.ts",
|
|
95
|
+
"content": "import { type SchemaContext } from \"astro:content\"\nimport { z } from \"astro/zod\"\n\nimport { baseSchema } from \"@/schemas/layouts/base\"\n\nexport const overviewSchema = (ctx: SchemaContext) => baseSchema(ctx).strict()\n\nexport type OverviewSchema = z.infer<ReturnType<typeof overviewSchema>>\n",
|
|
96
|
+
"type": "registry:file",
|
|
97
|
+
"target": "src/schemas/layouts/overview.ts"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"path": "src/layouts/base.astro",
|
|
101
|
+
"content": "---\nimport { Font } from \"astro:assets\"\n\nimport type { GlobalSchema } from \"@/schemas/global\"\nimport type { BaseSchema } from \"@/schemas/layouts/base\"\nimport { getPageBreadcrumbItems, getPageSearchItems } from \"@/lib/pages\"\nimport Sidebar1 from \"@/components/blocks/sidebar-1.astro\"\nimport {\n Layout,\n LayoutBody,\n LayoutHead,\n LayoutMain,\n} from \"@/components/ui/layout\"\nimport { ThemeProvider } from \"@/components/ui/theme-toggle\"\n\ntype Props = {\n global: GlobalSchema\n page: BaseSchema\n}\n\nconst { global, page }: Props = Astro.props\n\nconst [searchItems, breadcrumbItems] = await Promise.all([\n getPageSearchItems(),\n getPageBreadcrumbItems(Astro.url.pathname),\n])\n---\n\n<Layout>\n <LayoutHead {...global} {...page} {...page.seo}>\n <Fragment slot=\"head\">\n <Font\n cssVariable=\"--font-geist-sans\"\n preload={[{ subset: \"latin\", weight: \"100 900\", style: \"normal\" }]}\n />\n <Font cssVariable=\"--font-geist-mono\" />\n </Fragment>\n <ThemeProvider />\n </LayoutHead>\n <LayoutBody>\n <Sidebar1\n logo={global.logo}\n search={{\n items: searchItems,\n ...global.sidebar.search,\n }}\n breadcrumb={{\n items: breadcrumbItems,\n menu: global.header.navigation,\n }}\n navigation={global.sidebar.navigation}\n githubRepo={global.header.githubRepo}\n >\n <LayoutMain>\n <slot />\n </LayoutMain>\n </Sidebar1>\n </LayoutBody>\n</Layout>\n",
|
|
102
|
+
"type": "registry:file",
|
|
103
|
+
"target": "src/layouts/base.astro"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"path": "src/layouts/block.astro",
|
|
107
|
+
"content": "---\nimport type { MarkdownHeading } from \"astro\"\nimport { getCollection } from \"astro:content\"\n\nimport type { GlobalSchema } from \"@/schemas/global\"\nimport type { BlockSchema } from \"@/schemas/layouts/block\"\nimport Base from \"@/layouts/base.astro\"\nimport BlocksBlock from \"@/components/blocks/blocks-1.astro\"\n\ntype Props = {\n global: GlobalSchema\n page: BlockSchema\n headings: MarkdownHeading[]\n}\n\nconst props: Props = Astro.props\nconst currentPath = Astro.url.pathname\nconst markdownPath =\n currentPath === \"/\" ? \"/index.md\" : `${currentPath.replace(/\\/$/, \"\")}.md`\n\nconst blocks = await getCollection(\"pages\", ({ data }) => {\n return data.type === \"block\"\n})\nconst currentBlock = blocks.find((entry) => `/${entry.id}/` === currentPath)\nconst isBlockCategory = !props.page.category\nconst orderedBlockCategoryLinks = blocks\n .filter((entry) => !(\"category\" in entry.data) || !entry.data.category)\n .map((entry) => ({\n href: `/${entry.id}/`,\n title: entry.data.title,\n }))\n .sort((a, b) => a.href.localeCompare(b.href))\nconst currentPageIndex = orderedBlockCategoryLinks.findIndex(\n (item) => item.href === currentPath\n)\nconst previousPage =\n isBlockCategory && currentPageIndex > 0\n ? orderedBlockCategoryLinks[currentPageIndex - 1]\n : undefined\nconst nextPage =\n isBlockCategory && currentPageIndex >= 0\n ? orderedBlockCategoryLinks[currentPageIndex + 1]\n : undefined\nconst copySource = blocks.find((entry) => `/${entry.id}/` === currentPath)?.body\nconst copyButton = copySource\n ? {\n id: `blocks-copy-page-${crypto.randomUUID()}`,\n source: currentBlock?.body ?? copySource,\n }\n : undefined\n---\n\n<Base global={props.global} page={props.page}>\n <BlocksBlock\n title={props.page.title}\n description={props.page.description}\n copyButton={copyButton}\n markdownUrl={markdownPath}\n previousPage={previousPage}\n nextPage={nextPage}\n labels={{\n copyMarkdown: \"Copy Markdown\",\n openIn: \"Open in\",\n openInMarkdown: \"Open in Markdown\",\n openInChatGPT: \"Open in ChatGPT\",\n openInClaude: \"Open in Claude\",\n openInCursor: \"Open in Cursor\",\n pagination: {\n previous: \"Previous\",\n next: \"Next\",\n ariaLabel: \"Blocks pagination\",\n },\n }}\n >\n <slot />\n </BlocksBlock>\n</Base>\n",
|
|
108
|
+
"type": "registry:file",
|
|
109
|
+
"target": "src/layouts/block.astro"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"path": "src/layouts/doc.astro",
|
|
113
|
+
"content": "---\nimport type { MarkdownHeading } from \"astro\"\nimport { getCollection } from \"astro:content\"\n\nimport type { GlobalSchema } from \"@/schemas/global\"\nimport type { DocSchema } from \"@/schemas/layouts/doc\"\nimport Base from \"@/layouts/base.astro\"\nimport DocBlock from \"@/components/blocks/doc-1.astro\"\n\ntype Props = {\n global: GlobalSchema\n page: DocSchema\n headings: MarkdownHeading[]\n}\n\nconst props: Props = Astro.props\nconst currentPath = Astro.url.pathname\nconst globalCallout = props.global.docs?.callout\nconst markdownPath =\n currentPath === \"/\" ? \"/index.md\" : `${currentPath.replace(/\\/$/, \"\")}.md`\n\nconst docsPages = await getCollection(\"pages\")\nconst orderedDocLinks = [\n \"docs/introduction\",\n \"docs/installation\",\n \"docs/theming\",\n \"docs/dark-mode\",\n \"docs/cli\",\n \"docs/mcp\",\n \"docs/skills\",\n \"components\",\n \"blocks\",\n \"docs/layouts\",\n]\n .map((id) => docsPages.find((entry) => entry.id === id))\n .filter((entry): entry is (typeof docsPages)[number] => Boolean(entry))\n .map((entry) => ({\n href: `/${entry.id}/`,\n title: entry.data.title,\n }))\nconst componentLinks = docsPages\n .filter(\n (entry) => entry.data.type === \"doc\" && entry.id.startsWith(\"components/\")\n )\n .map((entry) => ({\n href: `/${entry.id}/`,\n title: entry.data.title,\n description: entry.data.description,\n }))\n .sort((a, b) => a.title.localeCompare(b.title))\nconst paginationLinks = [...orderedDocLinks, ...componentLinks]\nconst currentPageIndex = paginationLinks.findIndex(\n (item) => item.href === currentPath\n)\nconst previousPage =\n currentPageIndex > 0 ? paginationLinks[currentPageIndex - 1] : undefined\nconst nextPage =\n currentPageIndex >= 0 ? paginationLinks[currentPageIndex + 1] : undefined\nconst currentDoc = await getCollection(\"pages\", ({ data, id }) => {\n return data.type === \"doc\" && `/${id}/` === currentPath\n})\nconst copySource = currentDoc[0]?.body\nconst copyButton = copySource\n ? {\n id: `docs-copy-page-${crypto.randomUUID()}`,\n source: copySource,\n }\n : undefined\n\nconst tocItems = props.headings\n .filter((heading) => heading.depth === 2 || heading.depth === 3)\n .map((heading) => ({\n depth: heading.depth,\n href: `#${heading.slug}`,\n label: heading.text,\n }))\n---\n\n<Base global={props.global} page={props.page}>\n <DocBlock\n title={props.page.title}\n description={props.page.description}\n copyButton={copyButton}\n markdownUrl={markdownPath}\n tocItems={tocItems}\n callout={globalCallout}\n previousPage={previousPage}\n nextPage={nextPage}\n labels={{\n copyMarkdown: \"Copy Markdown\",\n openIn: \"Open in\",\n openInMarkdown: \"Open in Markdown\",\n openInChatGPT: \"Open in ChatGPT\",\n openInClaude: \"Open in Claude\",\n openInCursor: \"Open in Cursor\",\n pagination: {\n previous: \"Previous\",\n next: \"Next\",\n ariaLabel: \"Document pagination\",\n },\n toc: \"On This Page\",\n }}\n >\n <slot />\n </DocBlock>\n</Base>\n",
|
|
114
|
+
"type": "registry:file",
|
|
115
|
+
"target": "src/layouts/doc.astro"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"path": "src/layouts/home.astro",
|
|
119
|
+
"content": "---\nimport type { GlobalSchema } from \"@/schemas/global\"\nimport type { HomeSchema } from \"@/schemas/layouts/home\"\nimport Base from \"@/layouts/base.astro\"\nimport { Typography } from \"@/components/ui/typography\"\n\ntype Props = {\n global: GlobalSchema\n page: HomeSchema\n}\n\nconst { global, page } = Astro.props\n---\n\n<Base global={global} page={page}>\n <Typography\n as=\"article\"\n size=\"lg\"\n class=\"mx-auto w-full max-w-7xl px-4 py-16 lg:px-6 [&>:is(p,ul,ol,blockquote,h1,h2)]:max-w-4xl [&>:is(p,ul,ol,blockquote,h3,h4)]:max-w-3xl [&>[data-slot='tabs']:not(:first-child)]:mt-10\"\n >\n <slot />\n </Typography>\n</Base>\n",
|
|
120
|
+
"type": "registry:file",
|
|
121
|
+
"target": "src/layouts/home.astro"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"path": "src/layouts/overview.astro",
|
|
125
|
+
"content": "---\nimport { getCollection } from \"astro:content\"\n\nimport type { GlobalSchema } from \"@/schemas/global\"\nimport type { OverviewSchema } from \"@/schemas/layouts/overview\"\nimport Base from \"@/layouts/base.astro\"\nimport { SectionContainer } from \"@/components/ui/section\"\nimport { TypographyH1, TypographyLead } from \"@/components/ui/typography\"\n\ntype Props = {\n global: GlobalSchema\n page: OverviewSchema\n}\n\nconst { global, page }: Props = Astro.props\nconst currentPath = Astro.url.pathname\nconst pages = await getCollection(\"pages\")\n\nconst docsIndexOrder = [\n \"docs/introduction\",\n \"docs/installation\",\n \"docs/theming\",\n \"docs/dark-mode\",\n \"docs/cli\",\n \"docs/mcp\",\n \"docs/skills\",\n \"components\",\n \"blocks\",\n \"docs/layouts\",\n]\n\nconst entries =\n currentPath === \"/docs/\"\n ? docsIndexOrder\n .map((id) => pages.find((entry) => entry.id === id))\n .filter((entry): entry is (typeof pages)[number] => Boolean(entry))\n : pages\n .filter(({ data, id }) => {\n if (currentPath === \"/blocks/\") {\n return (\n data.type === \"block\" &&\n (!(\"category\" in data) || !data.category) &&\n id.startsWith(\"blocks/\")\n )\n }\n\n if (currentPath === \"/components/\") {\n return data.type === \"doc\" && id.startsWith(\"components/\")\n }\n\n return false\n })\n .sort((a, b) => a.data.title.localeCompare(b.data.title))\n\nconst overviewLinks = entries.map((entry) => ({\n href: `/${entry.id}/`,\n title: entry.data.title,\n description: entry.data.description,\n}))\n---\n\n<Base global={global} page={page}>\n <SectionContainer class=\"gap-10 pt-10 pb-10 sm:pt-12 sm:pb-12\">\n <div class=\"mx-auto flex w-full max-w-336 flex-col gap-10\">\n <header class=\"flex min-w-0 flex-col gap-4 border-b pb-8\">\n <TypographyH1\n class=\"text-foreground text-left text-3xl tracking-tight sm:text-4xl\"\n >\n {page.title}\n </TypographyH1>\n {\n page.description && (\n <TypographyLead class=\"max-w-2xl text-base leading-7\">\n {page.description}\n </TypographyLead>\n )\n }\n </header>\n\n <section class=\"grid gap-2 md:grid-cols-2 xl:grid-cols-3\">\n {\n overviewLinks.map((item) => (\n <a\n href={item.href}\n class=\"bg-muted/40 hover:bg-muted/60 focus-visible:ring-ring/50 rounded-lg px-4 py-4 transition-colors focus-visible:ring-2 focus-visible:outline-none\"\n >\n <span class=\"text-sm font-medium\">{item.title}</span>\n {item.description && (\n <span class=\"text-muted-foreground mt-1 block text-sm leading-5\">\n {item.description}\n </span>\n )}\n </a>\n ))\n }\n </section>\n </div>\n </SectionContainer>\n</Base>\n",
|
|
126
|
+
"type": "registry:file",
|
|
127
|
+
"target": "src/layouts/overview.astro"
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"type": "registry:file"
|
|
131
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "blocks-1",
|
|
4
|
+
"registryDependencies": [
|
|
5
|
+
"@fulldev/button",
|
|
6
|
+
"@fulldev/dropdown-menu",
|
|
7
|
+
"@fulldev/section",
|
|
8
|
+
"@fulldev/typography",
|
|
9
|
+
"@fulldev/icon"
|
|
10
|
+
],
|
|
11
|
+
"files": [
|
|
12
|
+
{
|
|
13
|
+
"path": "src/components/blocks/blocks-1.astro",
|
|
14
|
+
"content": "---\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\nimport { buttonVariants } from \"@/components/ui/button/button-variants\"\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"@/components/ui/dropdown-menu\"\nimport { Icon } from \"@/components/ui/icon\"\nimport { SectionContainer } from \"@/components/ui/section\"\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 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 }\n}\n\nconst {\n class: className,\n title,\n description,\n copyButton,\n markdownUrl,\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 data-slot=\"blocks-page\"\n class={cn(\"gap-10 pt-10 pb-10 sm:pt-12 sm:pb-12\", className)}\n>\n <div class=\"mx-auto flex w-full max-w-336 flex-col gap-10\">\n <header\n class=\"flex flex-col gap-4 border-b pb-8 sm:flex-row sm:items-start sm:justify-between\"\n >\n <div class=\"flex max-w-3xl min-w-0 flex-1 flex-col gap-2\">\n <TypographyH1\n class=\"text-foreground text-left text-3xl tracking-tight sm:text-4xl\"\n >\n {title}\n </TypographyH1>\n {\n description && (\n <TypographyLead class=\"max-w-2xl text-base 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 <Icon name=\"copy\" class=\"blocks-copy-icon size-3.5\" />\n <Icon name=\"check\" class=\"blocks-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 <Icon name=\"chevron-down\" 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\" && (\n <Icon name=\"markdown\" class=\"size-4 fill-current\" />\n )}\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\" && (\n <Icon name=\"claude\" class=\"size-4 fill-current\" />\n )}\n {link.icon === \"cursor\" && (\n <Icon name=\"cursor\" class=\"size-4 fill-current\" />\n )}\n <span>{link.label}</span>\n <Icon\n name=\"external-link\"\n class=\"text-muted-foreground ml-auto size-3.5\"\n />\n </a>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n }\n </div>\n </header>\n\n <Typography as=\"article\" class=\"w-full max-w-none\" 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 <Icon name=\"arrow-left\" 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 <Icon name=\"arrow-right\" class=\"size-4\" />\n </Button>\n ) : (\n <div aria-hidden=\"true\" />\n )}\n </nav>\n )\n }\n </div>\n</SectionContainer>\n\n<script is:inline define:vars={{ copyButtonId: copyButton?.id }}>\n const button = copyButtonId ? document.getElementById(copyButtonId) : null\n\n if (button instanceof HTMLButtonElement) {\n const writeToClipboard = async (text) => {\n if (navigator.clipboard && window.isSecureContext) {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n }\n\n return false\n }\n\n button.addEventListener(\"click\", async () => {\n const source = button.dataset.source\n\n if (!source) return\n\n const copied = await writeToClipboard(source)\n\n if (copied) {\n button.querySelector(\".blocks-copy-icon\")?.classList.add(\"hidden\")\n button.querySelector(\".blocks-check-icon\")?.classList.remove(\"hidden\")\n\n window.setTimeout(() => {\n button.querySelector(\".blocks-copy-icon\")?.classList.remove(\"hidden\")\n button.querySelector(\".blocks-check-icon\")?.classList.add(\"hidden\")\n }, 1200)\n }\n })\n }\n</script>\n",
|
|
15
|
+
"type": "registry:block"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"type": "registry:block"
|
|
19
|
+
}
|
package/public/r/blocks.json
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "blocks",
|
|
4
|
-
"type": "registry:component",
|
|
5
4
|
"registryDependencies": [
|
|
6
5
|
"@fulldev/article-1",
|
|
7
6
|
"@fulldev/article-2",
|
|
@@ -11,6 +10,7 @@
|
|
|
11
10
|
"@fulldev/articles-4",
|
|
12
11
|
"@fulldev/banner-1",
|
|
13
12
|
"@fulldev/banner-2",
|
|
13
|
+
"@fulldev/blocks-1",
|
|
14
14
|
"@fulldev/contact-1",
|
|
15
15
|
"@fulldev/contact-2",
|
|
16
16
|
"@fulldev/contact-3",
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
"@fulldev/content-2",
|
|
19
19
|
"@fulldev/content-3",
|
|
20
20
|
"@fulldev/content-4",
|
|
21
|
+
"@fulldev/content-5",
|
|
22
|
+
"@fulldev/content-6",
|
|
21
23
|
"@fulldev/cta-1",
|
|
22
24
|
"@fulldev/cta-2",
|
|
23
25
|
"@fulldev/cta-3",
|
|
@@ -26,6 +28,7 @@
|
|
|
26
28
|
"@fulldev/cta-6",
|
|
27
29
|
"@fulldev/cta-7",
|
|
28
30
|
"@fulldev/cta-8",
|
|
31
|
+
"@fulldev/doc-1",
|
|
29
32
|
"@fulldev/faqs-1",
|
|
30
33
|
"@fulldev/faqs-2",
|
|
31
34
|
"@fulldev/faqs-3",
|
|
@@ -38,10 +41,17 @@
|
|
|
38
41
|
"@fulldev/features-6",
|
|
39
42
|
"@fulldev/footer-1",
|
|
40
43
|
"@fulldev/footer-2",
|
|
44
|
+
"@fulldev/footer-3",
|
|
41
45
|
"@fulldev/header-1",
|
|
42
46
|
"@fulldev/header-2",
|
|
43
47
|
"@fulldev/header-3",
|
|
48
|
+
"@fulldev/header-4",
|
|
49
|
+
"@fulldev/header-5",
|
|
44
50
|
"@fulldev/hero-1",
|
|
51
|
+
"@fulldev/hero-10",
|
|
52
|
+
"@fulldev/hero-11",
|
|
53
|
+
"@fulldev/hero-12",
|
|
54
|
+
"@fulldev/hero-13",
|
|
45
55
|
"@fulldev/hero-2",
|
|
46
56
|
"@fulldev/hero-3",
|
|
47
57
|
"@fulldev/hero-4",
|
|
@@ -50,16 +60,13 @@
|
|
|
50
60
|
"@fulldev/hero-7",
|
|
51
61
|
"@fulldev/hero-8",
|
|
52
62
|
"@fulldev/hero-9",
|
|
53
|
-
"@fulldev/
|
|
54
|
-
"@fulldev/hero-11",
|
|
55
|
-
"@fulldev/hero-12",
|
|
56
|
-
"@fulldev/hero-13",
|
|
63
|
+
"@fulldev/links-2",
|
|
57
64
|
"@fulldev/logos-1",
|
|
58
65
|
"@fulldev/logos-2",
|
|
59
66
|
"@fulldev/logos-3",
|
|
60
|
-
"@fulldev/
|
|
61
|
-
"@fulldev/
|
|
62
|
-
"@fulldev/
|
|
67
|
+
"@fulldev/pricing-1",
|
|
68
|
+
"@fulldev/pricing-2",
|
|
69
|
+
"@fulldev/pricing-3",
|
|
63
70
|
"@fulldev/product-1",
|
|
64
71
|
"@fulldev/products-1",
|
|
65
72
|
"@fulldev/products-2",
|
|
@@ -78,14 +85,7 @@
|
|
|
78
85
|
"@fulldev/services-5",
|
|
79
86
|
"@fulldev/services-6",
|
|
80
87
|
"@fulldev/services-7",
|
|
81
|
-
"@fulldev/
|
|
82
|
-
"@fulldev/content-6"
|
|
88
|
+
"@fulldev/sidebar-1"
|
|
83
89
|
],
|
|
84
|
-
"
|
|
85
|
-
|
|
86
|
-
"path": "src/components/block.astro",
|
|
87
|
-
"content": "---\nimport { getCollection, getEntry, type CollectionEntry } from \"astro:content\"\n\nimport type { BlockSchema, PageSchema } from \"@/lib/schemas\"\n\ntype Props = BlockSchema & PageSchema\n\n// Helper functions\nfunction getHref(entry: CollectionEntry<\"pages\">) {\n // If there is no content, return undefined\n if (!entry.data.sections?.length && !entry.body?.length && !entry.data.block)\n return undefined\n // If the page is the index, return the root\n if (entry.id === \"index\") return \"/\"\n // else return href b yid\n return `/${entry.id}/`\n}\n\nconst pages = await getCollection(\"pages\")\n\n// Get a single reference by file path\nasync function getRef(value: string) {\n const entry = pages.find((page) => `/${page.filePath}` === value)\n const layout = entry?.data?.layout\n ? await getEntry(\"layouts\", entry?.data?.layout)\n : undefined\n if (!entry) return\n return {\n ...layout?.data,\n href: getHref(entry),\n ...entry.data,\n }\n}\n\n// Get multiple references by file paths\nasync function getRefs(values: string[]) {\n return (await Promise.all(values.map(getRef))).filter(\n (item) => item !== undefined\n )\n}\n\n// Get a glob of pages by folder path\nasync function getGlob(value: string) {\n return pages\n .filter((page) => page.filePath?.startsWith(`src/content/pages/${value}`))\n .map((page) => ({\n href: getHref(page),\n ...page.data,\n }))\n}\n\n// Recursively resolve references in items\nasync function resolveItem(item: any): Promise<any> {\n if (!item) return item\n\n const resolved = { ...item }\n\n // Resolve single reference\n if (resolved.ref) {\n const referencedItem = await getRef(resolved.ref)\n resolved.item = referencedItem\n delete resolved.ref\n }\n\n // Resolve multiple references\n if (resolved.refs) {\n resolved.items = await getRefs(resolved.refs)\n delete resolved.refs\n }\n\n // Resolve glob pattern\n if (resolved.glob) {\n resolved.items = await getGlob(resolved.glob)\n delete resolved.glob\n }\n\n // Recursively resolve nested items\n if (resolved.items) {\n resolved.items = await Promise.all(\n resolved.items.map((nestedItem: any) => resolveItem(nestedItem))\n )\n }\n\n // Recursively resolve single nested item\n if (resolved.item) {\n resolved.item = await resolveItem(resolved.item)\n }\n\n return resolved\n}\n\nconst { block, ref, refs, glob, ...props } = Astro.props\n\n// Populate references at top level\nif (ref) {\n props.item = await getRef(ref)\n}\nif (refs) {\n props.items = await getRefs(refs)\n}\nif (glob) {\n props.items = await getGlob(glob)\n}\n\n// Recursively resolve nested items\nif (props.items) {\n props.items = await Promise.all(\n props.items.map((item: any) => resolveItem(item))\n )\n}\n\nconst blockImports = import.meta.glob(\"./blocks/**/*.astro\")\nconst blockPath = `./blocks/${block}.astro`\nconst blockImport = (await blockImports[blockPath]?.()) as any\nconst BlockComponent = blockImport?.default as any\n---\n\n{\n BlockComponent && (\n <BlockComponent {...props}>\n <slot />\n {\"html\" in props && <Fragment set:html={props.html} />}\n </BlockComponent>\n )\n}\n",
|
|
88
|
-
"type": "registry:component"
|
|
89
|
-
}
|
|
90
|
-
]
|
|
91
|
-
}
|
|
90
|
+
"type": "registry:item"
|
|
91
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "breadcrumb",
|
|
4
|
+
"registryDependencies": [
|
|
5
|
+
"@fulldev/icon"
|
|
6
|
+
],
|
|
7
|
+
"files": [
|
|
8
|
+
{
|
|
9
|
+
"path": "src/components/ui/breadcrumb/breadcrumb.astro",
|
|
10
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"nav\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<nav\n aria-label=\"breadcrumb\"\n data-slot=\"breadcrumb\"\n class={cn(className)}\n {...props}\n>\n <slot />\n</nav>\n",
|
|
11
|
+
"type": "registry:ui"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"path": "src/components/ui/breadcrumb/breadcrumb-list.astro",
|
|
15
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"ol\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<ol\n data-slot=\"breadcrumb-list\"\n class={cn(\n \"text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5\",\n className\n )}\n {...props}\n>\n <slot />\n</ol>\n",
|
|
16
|
+
"type": "registry:ui"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"path": "src/components/ui/breadcrumb/breadcrumb-item.astro",
|
|
20
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"li\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<li\n data-slot=\"breadcrumb-item\"\n class={cn(\"inline-flex items-center gap-1.5\", className)}\n {...props}\n>\n <slot />\n</li>\n",
|
|
21
|
+
"type": "registry:ui"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"path": "src/components/ui/breadcrumb/breadcrumb-link.astro",
|
|
25
|
+
"content": "---\nimport type { HTMLTag, Polymorphic } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props<Tag extends HTMLTag = \"a\"> = Polymorphic<{ as: Tag }>\n\nconst { as: Tag = \"a\", class: className, ...props } = Astro.props\n---\n\n<Tag\n data-slot=\"breadcrumb-link\"\n class={cn(\"hover:text-foreground transition-colors\", className)}\n {...props}\n>\n <slot />\n</Tag>\n",
|
|
26
|
+
"type": "registry:ui"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"path": "src/components/ui/breadcrumb/breadcrumb-page.astro",
|
|
30
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"span\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n class={cn(\"text-foreground font-normal\", className)}\n {...props}\n>\n <slot />\n</span>\n",
|
|
31
|
+
"type": "registry:ui"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": "src/components/ui/breadcrumb/breadcrumb-separator.astro",
|
|
35
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Icon } from \"@/components/ui/icon\"\n\ntype Props = HTMLAttributes<\"li\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n class={cn(\"[&>svg]:size-3.5\", className)}\n {...props}\n>\n {Astro.slots.has(\"default\") ? <slot /> : <Icon name=\"chevron-right\" />}\n</li>\n",
|
|
36
|
+
"type": "registry:ui"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"path": "src/components/ui/breadcrumb/breadcrumb-ellipsis.astro",
|
|
40
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Icon } from \"@/components/ui/icon\"\n\ntype Props = HTMLAttributes<\"span\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n class={cn(\n \"flex size-5 items-center justify-center [&>svg]:size-4\",\n className\n )}\n {...props}\n>\n <Icon name=\"ellipsis\" />\n <span class=\"sr-only\">More</span>\n</span>\n",
|
|
41
|
+
"type": "registry:ui"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"path": "src/components/ui/breadcrumb/index.ts",
|
|
45
|
+
"content": "export { default as Breadcrumb } from \"./breadcrumb.astro\"\nexport { default as BreadcrumbEllipsis } from \"./breadcrumb-ellipsis.astro\"\nexport { default as BreadcrumbItem } from \"./breadcrumb-item.astro\"\nexport { default as BreadcrumbLink } from \"./breadcrumb-link.astro\"\nexport { default as BreadcrumbList } from \"./breadcrumb-list.astro\"\nexport { default as BreadcrumbPage } from \"./breadcrumb-page.astro\"\nexport { default as BreadcrumbSeparator } from \"./breadcrumb-separator.astro\"\n",
|
|
46
|
+
"type": "registry:ui"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"type": "registry:ui"
|
|
50
|
+
}
|
package/public/r/button.json
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "button",
|
|
4
|
-
"type": "registry:ui",
|
|
5
4
|
"files": [
|
|
5
|
+
{
|
|
6
|
+
"path": "src/components/ui/button/button-variants.ts",
|
|
7
|
+
"content": "import { cva, type VariantProps } from \"class-variance-authority\"\n\nexport const buttonVariants = cva(\n \"group/button focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:ring-3 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:ring-3 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline:\n \"!border-border bg-background hover:bg-muted hover:text-foreground dark:!border-input dark:bg-input/30 dark:hover:bg-input/50 shadow-xs\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-muted hover:text-foreground dark:hover:bg-muted/50\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-[>svg:first-child]:pl-2 has-[>svg:last-child]:pr-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-[>svg:first-child]:pl-1.5 has-[>svg:last-child]:pr-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-[>svg:first-child]:pl-1.5 has-[>svg:last-child]:pr-1.5\",\n lg: \"h-10 gap-1.5 px-2.5 has-[>svg:first-child]:pl-2 has-[>svg:last-child]:pr-2\",\n icon: \"size-9\",\n \"icon-xs\":\n \"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md\",\n \"icon-lg\": \"size-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>\n",
|
|
8
|
+
"type": "registry:ui"
|
|
9
|
+
},
|
|
6
10
|
{
|
|
7
11
|
"path": "src/components/ui/button/button.astro",
|
|
8
|
-
"content": "---\nimport type {
|
|
12
|
+
"content": "---\nimport type { HTMLTag, Polymorphic } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\nimport { buttonVariants, type ButtonVariantProps } from \"./button-variants\"\n\ntype Props<Tag extends HTMLTag = \"button\"> = Polymorphic<{ as: Tag }> &\n ButtonVariantProps\n\nconst {\n as: Tag = \"href\" in Astro.props ? \"a\" : \"button\",\n class: className,\n variant,\n size,\n ...props\n} = Astro.props\n---\n\n<Tag\n data-slot=\"button\"\n class={cn(buttonVariants({ variant, size }), className)}\n {...props}\n>\n <slot />\n</Tag>\n",
|
|
9
13
|
"type": "registry:ui"
|
|
10
14
|
},
|
|
11
15
|
{
|
|
12
16
|
"path": "src/components/ui/button/index.ts",
|
|
13
|
-
"content": "export { default as Button } from \"./button.astro\"\n",
|
|
17
|
+
"content": "export { buttonVariants, type ButtonVariantProps } from \"./button-variants\"\n\nexport { default as Button } from \"./button.astro\"\n",
|
|
14
18
|
"type": "registry:ui"
|
|
15
19
|
}
|
|
16
|
-
]
|
|
20
|
+
],
|
|
21
|
+
"type": "registry:ui"
|
|
17
22
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "card",
|
|
4
|
+
"files": [
|
|
5
|
+
{
|
|
6
|
+
"path": "src/components/ui/card/card.astro",
|
|
7
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n size?: \"default\" | \"sm\"\n}\n\nconst { class: className, size = \"default\", ...props } = Astro.props\n---\n\n<div\n data-slot=\"card\"\n data-size={size}\n class={cn(\n \"ring-foreground/10 bg-card text-card-foreground group/card flex flex-col gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl\",\n className\n )}\n {...props}\n>\n <slot />\n</div>\n",
|
|
8
|
+
"type": "registry:ui"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"path": "src/components/ui/card/card-header.astro",
|
|
12
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"card-header\"\n class={cn(\n \"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4\",\n className\n )}\n {...props}\n>\n <slot />\n</div>\n",
|
|
13
|
+
"type": "registry:ui"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"path": "src/components/ui/card/card-action.astro",
|
|
17
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"card-action\"\n class={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n>\n <slot />\n</div>\n",
|
|
18
|
+
"type": "registry:ui"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"path": "src/components/ui/card/card-title.astro",
|
|
22
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"card-title\"\n class={cn(\n \"text-base leading-normal font-medium group-data-[size=sm]/card:text-sm\",\n className\n )}\n {...props}\n>\n <slot />\n</div>\n",
|
|
23
|
+
"type": "registry:ui"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": "src/components/ui/card/card-description.astro",
|
|
27
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"card-description\"\n class={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n>\n <slot />\n</div>\n",
|
|
28
|
+
"type": "registry:ui"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"path": "src/components/ui/card/card-content.astro",
|
|
32
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"card-content\"\n class={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n {...props}\n>\n <slot />\n</div>\n",
|
|
33
|
+
"type": "registry:ui"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"path": "src/components/ui/card/card-footer.astro",
|
|
37
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"card-footer\"\n class={cn(\n \"flex items-center rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4\",\n className\n )}\n {...props}\n>\n <slot />\n</div>\n",
|
|
38
|
+
"type": "registry:ui"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"path": "src/components/ui/card/index.ts",
|
|
42
|
+
"content": "export { default as Card } from \"./card.astro\"\nexport { default as CardAction } from \"./card-action.astro\"\nexport { default as CardContent } from \"./card-content.astro\"\nexport { default as CardDescription } from \"./card-description.astro\"\nexport { default as CardFooter } from \"./card-footer.astro\"\nexport { default as CardHeader } from \"./card-header.astro\"\nexport { default as CardTitle } from \"./card-title.astro\"\n",
|
|
43
|
+
"type": "registry:ui"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"type": "registry:ui"
|
|
47
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "carousel",
|
|
4
|
+
"dependencies": [
|
|
5
|
+
"embla-carousel"
|
|
6
|
+
],
|
|
7
|
+
"registryDependencies": [
|
|
8
|
+
"@fulldev/button",
|
|
9
|
+
"@fulldev/icon"
|
|
10
|
+
],
|
|
11
|
+
"files": [
|
|
12
|
+
{
|
|
13
|
+
"path": "src/components/ui/carousel/carousel.astro",
|
|
14
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport type { EmblaOptionsType } from \"embla-carousel\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n opts?: EmblaOptionsType\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nconst {\n class: className,\n opts,\n orientation = \"horizontal\",\n ...props\n} = Astro.props\n\nconst resolvedOpts: EmblaOptionsType = {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n}\n---\n\n<div\n data-slot=\"carousel\"\n data-orientation={orientation}\n data-carousel-options={JSON.stringify(resolvedOpts)}\n class={cn(\"group/carousel relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n>\n <slot />\n</div>\n\n<script>\n import EmblaCarousel, {\n type EmblaCarouselType,\n type EmblaOptionsType,\n } from \"embla-carousel\"\n\n type CarouselRoot = HTMLElement & {\n __fulldevCarouselApi?: EmblaCarouselType\n }\n\n type CarouselInstance = {\n cleanup: () => void\n }\n\n type CarouselStore = Map<CarouselRoot, CarouselInstance>\n\n declare global {\n interface Window {\n __fulldevCarouselInitialized?: boolean\n __fulldevCarouselStore?: CarouselStore\n }\n }\n\n if (!window.__fulldevCarouselInitialized) {\n window.__fulldevCarouselInitialized = true\n window.__fulldevCarouselStore ??= new Map<CarouselRoot, CarouselInstance>()\n\n const store = window.__fulldevCarouselStore\n\n const getDetails = (api: EmblaCarouselType) => ({\n api,\n canScrollPrev: api.canScrollPrev(),\n canScrollNext: api.canScrollNext(),\n selectedScrollSnap: api.selectedScrollSnap(),\n scrollSnapList: api.scrollSnapList(),\n })\n\n const emit = (\n root: CarouselRoot,\n type: \"carousel:init\" | \"carousel:select\",\n api: EmblaCarouselType\n ) => {\n root.dispatchEvent(\n new CustomEvent(type, {\n detail: getDetails(api),\n })\n )\n }\n\n const parseOptions = (root: CarouselRoot): EmblaOptionsType => {\n const rawOptions = root.getAttribute(\"data-carousel-options\")\n\n if (!rawOptions) {\n return {}\n }\n\n try {\n return JSON.parse(rawOptions) as EmblaOptionsType\n } catch {\n return {}\n }\n }\n\n const syncButton = (button: Element | null, enabled: boolean) => {\n if (!(button instanceof HTMLButtonElement)) {\n return\n }\n\n if (button.dataset.manualDisabled === \"true\") {\n button.disabled = true\n return\n }\n\n button.disabled = !enabled\n }\n\n const cleanupDisconnectedCarousels = () => {\n for (const [root, instance] of store.entries()) {\n if (document.contains(root)) {\n continue\n }\n\n instance.cleanup()\n store.delete(root)\n }\n }\n\n const initCarousel = (root: Element) => {\n if (!(root instanceof HTMLElement) || store.has(root)) {\n return\n }\n\n const carouselRoot = root as CarouselRoot\n const viewport = carouselRoot.querySelector(\n '[data-slot=\"carousel-content\"]'\n )\n const prevButton = carouselRoot.querySelector(\n '[data-slot=\"carousel-previous\"]'\n )\n const nextButton = carouselRoot.querySelector(\n '[data-slot=\"carousel-next\"]'\n )\n\n if (!(viewport instanceof HTMLElement)) {\n return\n }\n\n const api = EmblaCarousel(viewport, parseOptions(carouselRoot))\n\n const sync = () => {\n const details = getDetails(api)\n\n carouselRoot.dataset.canScrollPrev = details.canScrollPrev\n ? \"true\"\n : \"false\"\n carouselRoot.dataset.canScrollNext = details.canScrollNext\n ? \"true\"\n : \"false\"\n carouselRoot.dataset.selectedScrollSnap = String(\n details.selectedScrollSnap\n )\n\n syncButton(prevButton, details.canScrollPrev)\n syncButton(nextButton, details.canScrollNext)\n\n emit(carouselRoot, \"carousel:select\", api)\n }\n\n const onPrevClick = () => {\n api.scrollPrev()\n }\n\n const onNextClick = () => {\n api.scrollNext()\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n const isVertical = carouselRoot.dataset.orientation === \"vertical\"\n\n if (!isVertical && event.key === \"ArrowLeft\") {\n event.preventDefault()\n api.scrollPrev()\n }\n\n if (!isVertical && event.key === \"ArrowRight\") {\n event.preventDefault()\n api.scrollNext()\n }\n\n if (isVertical && event.key === \"ArrowUp\") {\n event.preventDefault()\n api.scrollPrev()\n }\n\n if (isVertical && event.key === \"ArrowDown\") {\n event.preventDefault()\n api.scrollNext()\n }\n }\n\n if (prevButton instanceof HTMLElement) {\n prevButton.addEventListener(\"click\", onPrevClick)\n }\n\n if (nextButton instanceof HTMLElement) {\n nextButton.addEventListener(\"click\", onNextClick)\n }\n\n carouselRoot.addEventListener(\"keydown\", onKeyDown, true)\n\n api.on(\"reInit\", sync)\n api.on(\"select\", sync)\n\n carouselRoot.__fulldevCarouselApi = api\n\n sync()\n requestAnimationFrame(() => emit(carouselRoot, \"carousel:init\", api))\n\n store.set(carouselRoot, {\n cleanup: () => {\n api.off(\"reInit\", sync)\n api.off(\"select\", sync)\n\n if (prevButton instanceof HTMLElement) {\n prevButton.removeEventListener(\"click\", onPrevClick)\n }\n\n if (nextButton instanceof HTMLElement) {\n nextButton.removeEventListener(\"click\", onNextClick)\n }\n\n carouselRoot.removeEventListener(\"keydown\", onKeyDown, true)\n delete carouselRoot.__fulldevCarouselApi\n api.destroy()\n },\n })\n }\n\n const initCarousels = () => {\n cleanupDisconnectedCarousels()\n\n document\n .querySelectorAll('[data-slot=\"carousel\"]')\n .forEach((root) => initCarousel(root))\n }\n\n initCarousels()\n document.addEventListener(\"astro:page-load\", initCarousels)\n }\n</script>\n",
|
|
15
|
+
"type": "registry:ui"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"path": "src/components/ui/carousel/carousel-content.astro",
|
|
19
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div class=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div\n data-slot=\"carousel-container\"\n class={cn(\n \"flex [touch-action:pan-y_pinch-zoom]\",\n \"group-data-[orientation=vertical]/carousel:-mt-4 group-data-[orientation=vertical]/carousel:[touch-action:pan-x_pinch-zoom] group-data-[orientation=vertical]/carousel:flex-col\",\n \"group-data-[orientation=horizontal]/carousel:-ml-4\",\n className\n )}\n {...props}\n >\n <slot />\n </div>\n</div>\n",
|
|
20
|
+
"type": "registry:ui"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"path": "src/components/ui/carousel/carousel-item.astro",
|
|
24
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n data-slot=\"carousel-item\"\n role=\"group\"\n aria-roledescription=\"slide\"\n class={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n \"group-data-[orientation=horizontal]/carousel:pl-4\",\n \"group-data-[orientation=vertical]/carousel:pt-4\",\n className\n )}\n {...props}\n>\n <slot />\n</div>\n",
|
|
25
|
+
"type": "registry:ui"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"path": "src/components/ui/carousel/carousel-next.astro",
|
|
29
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants, type ButtonVariantProps } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\n\ntype Props = Omit<HTMLAttributes<\"button\">, \"type\"> & ButtonVariantProps\n\nconst {\n class: className,\n variant = \"outline\",\n size = \"icon-sm\",\n disabled,\n ...props\n} = Astro.props\n---\n\n<button\n type=\"button\"\n data-slot=\"carousel-next\"\n data-manual-disabled={disabled ? \"true\" : undefined}\n disabled={disabled}\n class={cn(\n buttonVariants({ variant, size }),\n \"absolute top-1/2 -right-12 z-10 -translate-y-1/2 touch-manipulation rounded-full\",\n \"group-data-[orientation=vertical]/carousel:right-auto group-data-[orientation=vertical]/carousel:-bottom-12 group-data-[orientation=vertical]/carousel:left-1/2 group-data-[orientation=vertical]/carousel:-translate-x-1/2 group-data-[orientation=vertical]/carousel:translate-y-0 group-data-[orientation=vertical]/carousel:rotate-90\",\n className\n )}\n {...props}\n>\n <slot>\n <Icon name=\"chevron-right\" class=\"size-4\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Next slide</span>\n </slot>\n</button>\n",
|
|
30
|
+
"type": "registry:ui"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"path": "src/components/ui/carousel/carousel-previous.astro",
|
|
34
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants, type ButtonVariantProps } from \"@/components/ui/button\"\nimport { Icon } from \"@/components/ui/icon\"\n\ntype Props = Omit<HTMLAttributes<\"button\">, \"type\"> & ButtonVariantProps\n\nconst {\n class: className,\n variant = \"outline\",\n size = \"icon-sm\",\n disabled,\n ...props\n} = Astro.props\n---\n\n<button\n type=\"button\"\n data-slot=\"carousel-previous\"\n data-manual-disabled={disabled ? \"true\" : undefined}\n disabled={disabled}\n class={cn(\n buttonVariants({ variant, size }),\n \"absolute top-1/2 -left-12 z-10 -translate-y-1/2 touch-manipulation rounded-full\",\n \"group-data-[orientation=vertical]/carousel:-top-12 group-data-[orientation=vertical]/carousel:left-1/2 group-data-[orientation=vertical]/carousel:-translate-x-1/2 group-data-[orientation=vertical]/carousel:translate-y-0 group-data-[orientation=vertical]/carousel:rotate-90\",\n className\n )}\n {...props}\n>\n <slot>\n <Icon name=\"chevron-left\" class=\"size-4\" aria-hidden=\"true\" />\n <span class=\"sr-only\">Previous slide</span>\n </slot>\n</button>\n",
|
|
35
|
+
"type": "registry:ui"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"path": "src/components/ui/carousel/index.ts",
|
|
39
|
+
"content": "export type {\n EmblaCarouselType as CarouselApi,\n EmblaOptionsType as CarouselOptions,\n EmblaPluginType as CarouselPlugin,\n} from \"embla-carousel\"\n\nexport { default as Carousel } from \"./carousel.astro\"\nexport { default as CarouselContent } from \"./carousel-content.astro\"\nexport { default as CarouselItem } from \"./carousel-item.astro\"\nexport { default as CarouselPrevious } from \"./carousel-previous.astro\"\nexport { default as CarouselNext } from \"./carousel-next.astro\"\n",
|
|
40
|
+
"type": "registry:ui"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"type": "registry:ui"
|
|
44
|
+
}
|
package/public/r/checkbox.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "checkbox",
|
|
4
|
-
"type": "registry:ui",
|
|
5
4
|
"files": [
|
|
6
5
|
{
|
|
7
6
|
"path": "src/components/ui/checkbox/checkbox.astro",
|
|
8
|
-
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\
|
|
7
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = Omit<HTMLAttributes<\"input\">, \"type\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<input\n type=\"checkbox\"\n role=\"checkbox\"\n data-slot=\"checkbox\"\n class={cn(\n \"border-input dark:bg-input/30 checked:bg-primary dark:checked:bg-primary checked:border-primary indeterminate:bg-primary indeterminate:border-primary aria-invalid:checked:border-primary aria-invalid:indeterminate:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 peer relative flex size-4 shrink-0 appearance-none items-center justify-center rounded-[4px] border shadow-xs transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 checked:[color:var(--color-primary-foreground)] indeterminate:[color:var(--color-primary-foreground)] focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3\",\n className\n )}\n {...props}\n/>\n\n<style>\n [data-slot=\"checkbox\"] {\n color: inherit;\n }\n\n [data-slot=\"checkbox\"]::before {\n content: \"\";\n position: absolute;\n inset: 0;\n margin: auto;\n width: 14px;\n height: 14px;\n opacity: 0;\n background-color: currentColor;\n background-repeat: no-repeat;\n background-position: center;\n background-size: 14px 14px;\n -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8.5l3 3 6-6'/%3E%3C/svg%3E\");\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: center;\n -webkit-mask-size: 14px 14px;\n mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3.5 8.5l3 3 6-6'/%3E%3C/svg%3E\");\n mask-repeat: no-repeat;\n mask-position: center;\n mask-size: 14px 14px;\n }\n\n [data-slot=\"checkbox\"]:checked,\n [data-slot=\"checkbox\"]:indeterminate {\n color: var(--color-primary-foreground);\n }\n\n [data-slot=\"checkbox\"]:checked::before {\n opacity: 1;\n }\n\n [data-slot=\"checkbox\"]:indeterminate::before {\n opacity: 1;\n -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3.5 8h9' stroke='black' stroke-width='2.5' stroke-linecap='round'/%3E%3C/svg%3E\");\n mask-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M3.5 8h9' stroke='black' stroke-width='2.5' stroke-linecap='round'/%3E%3C/svg%3E\");\n }\n</style>\n",
|
|
9
8
|
"type": "registry:ui"
|
|
10
9
|
},
|
|
11
10
|
{
|
|
@@ -13,5 +12,6 @@
|
|
|
13
12
|
"content": "export { default as Checkbox } from \"./checkbox.astro\"\n",
|
|
14
13
|
"type": "registry:ui"
|
|
15
14
|
}
|
|
16
|
-
]
|
|
15
|
+
],
|
|
16
|
+
"type": "registry:ui"
|
|
17
17
|
}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
3
|
"name": "collapsible",
|
|
4
|
-
"
|
|
4
|
+
"dependencies": [
|
|
5
|
+
"@data-slot/collapsible"
|
|
6
|
+
],
|
|
5
7
|
"files": [
|
|
6
8
|
{
|
|
7
9
|
"path": "src/components/ui/collapsible/collapsible.astro",
|
|
8
|
-
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\
|
|
10
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\"> & {\n defaultOpen?: boolean\n hiddenUntilFound?: boolean\n}\n\nconst {\n class: className,\n defaultOpen,\n hiddenUntilFound,\n ...props\n} = Astro.props\n---\n\n<div\n data-slot=\"collapsible\"\n data-default-open={defaultOpen}\n data-hidden-until-found={hiddenUntilFound}\n class={cn(className)}\n {...props}\n>\n <slot />\n</div>\n\n<script>\n import { create } from \"@data-slot/collapsible\"\n\n create()\n</script>\n",
|
|
9
11
|
"type": "registry:ui"
|
|
10
12
|
},
|
|
11
13
|
{
|
|
12
14
|
"path": "src/components/ui/collapsible/collapsible-content.astro",
|
|
13
|
-
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\
|
|
15
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, hidden: _hidden, ...props } = Astro.props\n---\n\n<div data-slot=\"collapsible-content\" hidden class={cn(className)} {...props}>\n <slot />\n</div>\n",
|
|
14
16
|
"type": "registry:ui"
|
|
15
17
|
},
|
|
16
18
|
{
|
|
17
19
|
"path": "src/components/ui/collapsible/collapsible-trigger.astro",
|
|
18
|
-
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\
|
|
20
|
+
"content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"button\">\n\nconst { class: className, type = \"button\", ...props } = Astro.props\n---\n\n<button\n data-slot=\"collapsible-trigger\"\n type={type}\n class={cn(className)}\n {...props}\n>\n <slot />\n</button>\n",
|
|
19
21
|
"type": "registry:ui"
|
|
20
22
|
},
|
|
21
23
|
{
|
|
@@ -23,5 +25,6 @@
|
|
|
23
25
|
"content": "export { default as Collapsible } from \"./collapsible.astro\"\nexport { default as CollapsibleContent } from \"./collapsible-content.astro\"\nexport { default as CollapsibleTrigger } from \"./collapsible-trigger.astro\"\n",
|
|
24
26
|
"type": "registry:ui"
|
|
25
27
|
}
|
|
26
|
-
]
|
|
28
|
+
],
|
|
29
|
+
"type": "registry:ui"
|
|
27
30
|
}
|