@xbg.solutions/create-frontend 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/xbg-frontend.cjs +32 -0
- package/package.json +17 -3
- package/src/commands/add.cjs +470 -0
- package/src/commands/generate.cjs +24 -0
- package/src/manifest.json +1578 -0
- package/src/registry/advanced/ChartWrapper.svelte +587 -0
- package/src/registry/advanced/DataTable.svelte +645 -0
- package/src/registry/advanced/FormWizard.svelte +546 -0
- package/src/registry/advanced/ImageUpload.svelte +663 -0
- package/src/registry/advanced/index.ts +33 -0
- package/src/registry/atoms/calendar/Calendar.svelte +181 -0
- package/src/registry/atoms/calendar/index.ts +1 -0
- package/src/registry/atoms/dialog/Dialog.svelte +179 -0
- package/src/registry/atoms/dialog/DialogDescription.svelte +16 -0
- package/src/registry/atoms/dialog/DialogFooter.svelte +16 -0
- package/src/registry/atoms/dialog/DialogHeader.svelte +16 -0
- package/src/registry/atoms/dialog/DialogTitle.svelte +16 -0
- package/src/registry/atoms/dialog/index.ts +10 -0
- package/src/registry/atoms/icon/BrandIcon.svelte +47 -0
- package/src/registry/atoms/icon/DynamicIcon.svelte +49 -0
- package/src/registry/atoms/icon/index.ts +2 -0
- package/src/registry/atoms/legend/Legend.svelte +32 -0
- package/src/registry/atoms/legend/index.ts +1 -0
- package/src/registry/atoms/menu/MenuItem.svelte +85 -0
- package/src/registry/atoms/menu/index.ts +1 -0
- package/src/registry/atoms/message/Message.svelte +62 -0
- package/src/registry/atoms/message/index.ts +1 -0
- package/src/registry/atoms/nav/NavItem.svelte +67 -0
- package/src/registry/atoms/nav/index.ts +1 -0
- package/src/registry/atoms/notification-badge/NotificationBadge.svelte +30 -0
- package/src/registry/atoms/notification-badge/index.ts +1 -0
- package/src/registry/atoms/otp-input/OtpInput.svelte +108 -0
- package/src/registry/atoms/otp-input/index.ts +1 -0
- package/src/registry/atoms/select/Select.svelte +216 -0
- package/src/registry/atoms/select/index.ts +6 -0
- package/src/registry/atoms/settings-card/SettingsCard.svelte +48 -0
- package/src/registry/atoms/settings-card/index.ts +1 -0
- package/src/registry/atoms/sidebar-item/SidebarItem.svelte +90 -0
- package/src/registry/atoms/sidebar-item/index.ts +1 -0
- package/src/registry/atoms/statistic-card/StatisticCard.svelte +53 -0
- package/src/registry/atoms/statistic-card/index.ts +1 -0
- package/src/registry/atoms/text-editor/TextEditor.svelte +77 -0
- package/src/registry/atoms/text-editor/index.ts +1 -0
- package/src/registry/atoms/uploader/Uploader.svelte +102 -0
- package/src/registry/atoms/uploader/index.ts +1 -0
- package/src/registry/atoms/user-item/UserItem.svelte +39 -0
- package/src/registry/atoms/user-item/index.ts +1 -0
- package/src/registry/blocks/account-section/AccountSection01.svelte +112 -0
- package/src/registry/blocks/account-section/AccountSection02.svelte +190 -0
- package/src/registry/blocks/account-section/AccountSection03.svelte +161 -0
- package/src/registry/blocks/account-section/AccountSection04.svelte +164 -0
- package/src/registry/blocks/account-section/AccountSection05.svelte +76 -0
- package/src/registry/blocks/account-section/index.ts +5 -0
- package/src/registry/blocks/app-shell/AppShell01.svelte +74 -0
- package/src/registry/blocks/app-shell/AppShell02.svelte +87 -0
- package/src/registry/blocks/app-shell/AppShell03.svelte +79 -0
- package/src/registry/blocks/app-shell/AppShell04.svelte +177 -0
- package/src/registry/blocks/app-shell/index.ts +4 -0
- package/src/registry/blocks/auth/AuthSplitScreen.svelte +132 -0
- package/src/registry/blocks/auth/LoginBlock01.svelte +94 -0
- package/src/registry/blocks/auth/LoginBlock02.svelte +103 -0
- package/src/registry/blocks/auth/LoginBlock03.svelte +53 -0
- package/src/registry/blocks/auth/LoginBlock04.svelte +99 -0
- package/src/registry/blocks/auth/LoginBlock05.svelte +101 -0
- package/src/registry/blocks/auth/OtpBlock01.svelte +115 -0
- package/src/registry/blocks/auth/OtpBlock02.svelte +113 -0
- package/src/registry/blocks/auth/OtpBlock03.svelte +143 -0
- package/src/registry/blocks/auth/OtpBlock04.svelte +122 -0
- package/src/registry/blocks/auth/OtpBlock05.svelte +81 -0
- package/src/registry/blocks/auth/SignupBlock01.svelte +103 -0
- package/src/registry/blocks/auth/SignupBlock02.svelte +94 -0
- package/src/registry/blocks/auth/SignupBlock03.svelte +120 -0
- package/src/registry/blocks/auth/SignupBlock04.svelte +112 -0
- package/src/registry/blocks/auth/SignupBlock05.svelte +77 -0
- package/src/registry/blocks/auth/index.ts +31 -0
- package/src/registry/blocks/banner/Banner01.svelte +67 -0
- package/src/registry/blocks/banner/Banner02.svelte +61 -0
- package/src/registry/blocks/banner/Banner03.svelte +54 -0
- package/src/registry/blocks/banner/Banner04.svelte +49 -0
- package/src/registry/blocks/banner/Banner05.svelte +47 -0
- package/src/registry/blocks/banner/index.ts +5 -0
- package/src/registry/blocks/bento-grid/BentoGrid01.svelte +92 -0
- package/src/registry/blocks/bento-grid/BentoGrid02.svelte +79 -0
- package/src/registry/blocks/bento-grid/BentoGrid03.svelte +79 -0
- package/src/registry/blocks/bento-grid/BentoGrid04.svelte +58 -0
- package/src/registry/blocks/bento-grid/BentoGrid05.svelte +92 -0
- package/src/registry/blocks/bento-grid/BentoGrid06.svelte +42 -0
- package/src/registry/blocks/bento-grid/index.ts +14 -0
- package/src/registry/blocks/blog-section/BlogSection01.svelte +100 -0
- package/src/registry/blocks/blog-section/BlogSection02.svelte +93 -0
- package/src/registry/blocks/blog-section/BlogSection03.svelte +92 -0
- package/src/registry/blocks/blog-section/BlogSection04.svelte +97 -0
- package/src/registry/blocks/blog-section/BlogSection05.svelte +120 -0
- package/src/registry/blocks/blog-section/index.ts +15 -0
- package/src/registry/blocks/buttons/ButtonBookmark.svelte +37 -0
- package/src/registry/blocks/buttons/ButtonLike.svelte +37 -0
- package/src/registry/blocks/buttons/ButtonMenu.svelte +37 -0
- package/src/registry/blocks/buttons/ButtonSplitDropdown.svelte +46 -0
- package/src/registry/blocks/buttons/ButtonStepper.svelte +55 -0
- package/src/registry/blocks/buttons/ButtonSteps.svelte +73 -0
- package/src/registry/blocks/buttons/ButtonToggleGroup.svelte +35 -0
- package/src/registry/blocks/buttons/ButtonsGroup.svelte +63 -0
- package/src/registry/blocks/buttons/SocialButtonsHorizontal.svelte +41 -0
- package/src/registry/blocks/buttons/SocialButtonsVertical.svelte +53 -0
- package/src/registry/blocks/buttons/index.ts +10 -0
- package/src/registry/blocks/calendar/CalendarBlock01.svelte +169 -0
- package/src/registry/blocks/calendar/CalendarBlock02.svelte +133 -0
- package/src/registry/blocks/calendar/CalendarBlock03.svelte +194 -0
- package/src/registry/blocks/calendar/CalendarBlock04.svelte +96 -0
- package/src/registry/blocks/calendar/CalendarBlock05.svelte +97 -0
- package/src/registry/blocks/calendar/CalendarBlock06.svelte +98 -0
- package/src/registry/blocks/calendar/CalendarBlock07.svelte +109 -0
- package/src/registry/blocks/calendar/CalendarBlock08.svelte +71 -0
- package/src/registry/blocks/calendar/CalendarBlock09.svelte +99 -0
- package/src/registry/blocks/calendar/CalendarBlock10.svelte +88 -0
- package/src/registry/blocks/calendar/CalendarBlock11.svelte +99 -0
- package/src/registry/blocks/calendar/CalendarBlock12.svelte +121 -0
- package/src/registry/blocks/calendar/CalendarBlock13.svelte +92 -0
- package/src/registry/blocks/calendar/CalendarBlock14.svelte +71 -0
- package/src/registry/blocks/calendar/CalendarBlock15.svelte +96 -0
- package/src/registry/blocks/calendar/CalendarBlock16.svelte +98 -0
- package/src/registry/blocks/calendar/CalendarBlock17.svelte +88 -0
- package/src/registry/blocks/calendar/CalendarBlock18.svelte +84 -0
- package/src/registry/blocks/calendar/CalendarBlock19.svelte +105 -0
- package/src/registry/blocks/calendar/CalendarBlock20.svelte +78 -0
- package/src/registry/blocks/calendar/CalendarBlock21.svelte +115 -0
- package/src/registry/blocks/calendar/CalendarBlock22.svelte +136 -0
- package/src/registry/blocks/calendar/CalendarBlock23.svelte +112 -0
- package/src/registry/blocks/calendar/CalendarBlock24.svelte +116 -0
- package/src/registry/blocks/calendar/CalendarBlock25.svelte +144 -0
- package/src/registry/blocks/calendar/CalendarBlock26.svelte +163 -0
- package/src/registry/blocks/calendar/CalendarBlock27.svelte +112 -0
- package/src/registry/blocks/calendar/CalendarBlock28.svelte +109 -0
- package/src/registry/blocks/calendar/CalendarBlock29.svelte +126 -0
- package/src/registry/blocks/calendar/CalendarBlock30.svelte +122 -0
- package/src/registry/blocks/calendar/CalendarBlock31.svelte +161 -0
- package/src/registry/blocks/calendar/CalendarBlock32.svelte +154 -0
- package/src/registry/blocks/calendar/index.ts +32 -0
- package/src/registry/blocks/card/Card01.svelte +69 -0
- package/src/registry/blocks/card/Card02.svelte +50 -0
- package/src/registry/blocks/card/Card03.svelte +60 -0
- package/src/registry/blocks/card/Card04.svelte +89 -0
- package/src/registry/blocks/card/Card05.svelte +51 -0
- package/src/registry/blocks/card/Card06.svelte +77 -0
- package/src/registry/blocks/card/Card07.svelte +35 -0
- package/src/registry/blocks/card/Card08.svelte +36 -0
- package/src/registry/blocks/card/index.ts +8 -0
- package/src/registry/blocks/cart/Cart01.svelte +183 -0
- package/src/registry/blocks/cart/Cart02.svelte +103 -0
- package/src/registry/blocks/cart/Cart03.svelte +38 -0
- package/src/registry/blocks/cart/Cart04.svelte +174 -0
- package/src/registry/blocks/cart/index.ts +4 -0
- package/src/registry/blocks/checkout/Checkout01.svelte +237 -0
- package/src/registry/blocks/checkout/Checkout02.svelte +205 -0
- package/src/registry/blocks/checkout/Checkout03.svelte +189 -0
- package/src/registry/blocks/checkout/Checkout04.svelte +109 -0
- package/src/registry/blocks/checkout/index.ts +4 -0
- package/src/registry/blocks/comparison-section/ComparisonSection01.svelte +116 -0
- package/src/registry/blocks/comparison-section/ComparisonSection02.svelte +98 -0
- package/src/registry/blocks/comparison-section/ComparisonSection03.svelte +93 -0
- package/src/registry/blocks/comparison-section/ComparisonSection04.svelte +98 -0
- package/src/registry/blocks/comparison-section/ComparisonSection05.svelte +119 -0
- package/src/registry/blocks/comparison-section/ComparisonSection06.svelte +154 -0
- package/src/registry/blocks/comparison-section/index.ts +6 -0
- package/src/registry/blocks/contact-section/ContactSection01.svelte +64 -0
- package/src/registry/blocks/contact-section/ContactSection02.svelte +108 -0
- package/src/registry/blocks/contact-section/ContactSection03.svelte +64 -0
- package/src/registry/blocks/contact-section/ContactSection04.svelte +30 -0
- package/src/registry/blocks/contact-section/ContactSection05.svelte +71 -0
- package/src/registry/blocks/contact-section/ContactSection06.svelte +88 -0
- package/src/registry/blocks/contact-section/index.ts +6 -0
- package/src/registry/blocks/cta/CTA01.svelte +44 -0
- package/src/registry/blocks/cta/CTA02.svelte +48 -0
- package/src/registry/blocks/cta/CTA03.svelte +53 -0
- package/src/registry/blocks/cta/CTA04.svelte +60 -0
- package/src/registry/blocks/cta/CTA05.svelte +53 -0
- package/src/registry/blocks/cta/CTA06.svelte +44 -0
- package/src/registry/blocks/cta/CTA07.svelte +39 -0
- package/src/registry/blocks/cta/index.ts +7 -0
- package/src/registry/blocks/dashboard/ChartsBlock01.svelte +275 -0
- package/src/registry/blocks/dashboard/DashboardBlock01.svelte +207 -0
- package/src/registry/blocks/dashboard/DashboardBlock02.svelte +259 -0
- package/src/registry/blocks/dashboard/DashboardBlock03.svelte +315 -0
- package/src/registry/blocks/dashboard/DashboardBlock04.svelte +220 -0
- package/src/registry/blocks/dashboard/DashboardBlock05.svelte +158 -0
- package/src/registry/blocks/dashboard/DashboardBlock06.svelte +173 -0
- package/src/registry/blocks/dashboard/DashboardBlock07.svelte +103 -0
- package/src/registry/blocks/dashboard/index.ts +16 -0
- package/src/registry/blocks/description-list/DescriptionList01.svelte +75 -0
- package/src/registry/blocks/description-list/DescriptionList02.svelte +50 -0
- package/src/registry/blocks/description-list/DescriptionList03.svelte +74 -0
- package/src/registry/blocks/description-list/DescriptionList04.svelte +88 -0
- package/src/registry/blocks/description-list/index.ts +4 -0
- package/src/registry/blocks/empty-lp/EmptyLP01.svelte +46 -0
- package/src/registry/blocks/empty-lp/EmptyLP02.svelte +49 -0
- package/src/registry/blocks/empty-lp/EmptyLP03.svelte +61 -0
- package/src/registry/blocks/empty-lp/EmptyLP04.svelte +37 -0
- package/src/registry/blocks/empty-lp/index.ts +4 -0
- package/src/registry/blocks/empty-section/EmptySection01.svelte +47 -0
- package/src/registry/blocks/empty-section/EmptySection02.svelte +93 -0
- package/src/registry/blocks/empty-section/EmptySection03.svelte +101 -0
- package/src/registry/blocks/empty-section/EmptySection04.svelte +76 -0
- package/src/registry/blocks/empty-section/index.ts +4 -0
- package/src/registry/blocks/faq-section/FaqSection01.svelte +114 -0
- package/src/registry/blocks/faq-section/FaqSection02.svelte +137 -0
- package/src/registry/blocks/faq-section/FaqSection03.svelte +107 -0
- package/src/registry/blocks/faq-section/FaqSection04.svelte +74 -0
- package/src/registry/blocks/faq-section/FaqSection05.svelte +69 -0
- package/src/registry/blocks/faq-section/index.ts +11 -0
- package/src/registry/blocks/feature-section/FeatureSection01.svelte +94 -0
- package/src/registry/blocks/feature-section/FeatureSection02.svelte +61 -0
- package/src/registry/blocks/feature-section/FeatureSection03.svelte +85 -0
- package/src/registry/blocks/feature-section/FeatureSection04.svelte +67 -0
- package/src/registry/blocks/feature-section/FeatureSection05.svelte +61 -0
- package/src/registry/blocks/feature-section/FeatureSection06.svelte +58 -0
- package/src/registry/blocks/feature-section/FeatureSection07.svelte +79 -0
- package/src/registry/blocks/feature-section/FeatureSection08.svelte +92 -0
- package/src/registry/blocks/feature-section/FeatureSection09.svelte +58 -0
- package/src/registry/blocks/feature-section/FeatureSection10.svelte +87 -0
- package/src/registry/blocks/feature-section/FeatureSection11.svelte +118 -0
- package/src/registry/blocks/feature-section/FeatureSection12.svelte +76 -0
- package/src/registry/blocks/feature-section/FeatureSection13.svelte +88 -0
- package/src/registry/blocks/feature-section/FeatureSection14.svelte +119 -0
- package/src/registry/blocks/feature-section/FeatureSection15.svelte +122 -0
- package/src/registry/blocks/feature-section/FeatureSection16.svelte +113 -0
- package/src/registry/blocks/feature-section/FeatureSection17.svelte +93 -0
- package/src/registry/blocks/feature-section/FeatureSection18.svelte +97 -0
- package/src/registry/blocks/feature-section/FeatureSection19.svelte +74 -0
- package/src/registry/blocks/feature-section/FeatureSection20.svelte +69 -0
- package/src/registry/blocks/feature-section/index.ts +20 -0
- package/src/registry/blocks/footer/Footer01.svelte +62 -0
- package/src/registry/blocks/footer/Footer02.svelte +67 -0
- package/src/registry/blocks/footer/Footer03.svelte +87 -0
- package/src/registry/blocks/footer/Footer04.svelte +67 -0
- package/src/registry/blocks/footer/Footer05.svelte +20 -0
- package/src/registry/blocks/footer/Footer06.svelte +107 -0
- package/src/registry/blocks/footer/Footer07.svelte +88 -0
- package/src/registry/blocks/footer/Footer08.svelte +84 -0
- package/src/registry/blocks/footer/Footer09.svelte +65 -0
- package/src/registry/blocks/footer/index.ts +19 -0
- package/src/registry/blocks/forms/SettingsBlock.svelte +329 -0
- package/src/registry/blocks/forms/index.ts +1 -0
- package/src/registry/blocks/gallery-section/GallerySection01.svelte +43 -0
- package/src/registry/blocks/gallery-section/GallerySection02.svelte +45 -0
- package/src/registry/blocks/gallery-section/GallerySection03.svelte +43 -0
- package/src/registry/blocks/gallery-section/GallerySection04.svelte +49 -0
- package/src/registry/blocks/gallery-section/GallerySection05.svelte +45 -0
- package/src/registry/blocks/gallery-section/GallerySection06.svelte +49 -0
- package/src/registry/blocks/gallery-section/GallerySection07.svelte +48 -0
- package/src/registry/blocks/gallery-section/GallerySection08.svelte +43 -0
- package/src/registry/blocks/gallery-section/GallerySection09.svelte +55 -0
- package/src/registry/blocks/gallery-section/GallerySection10.svelte +43 -0
- package/src/registry/blocks/gallery-section/GallerySection11.svelte +75 -0
- package/src/registry/blocks/gallery-section/GallerySection12.svelte +76 -0
- package/src/registry/blocks/gallery-section/index.ts +12 -0
- package/src/registry/blocks/header-section/HeaderSection01.svelte +53 -0
- package/src/registry/blocks/header-section/HeaderSection02.svelte +53 -0
- package/src/registry/blocks/header-section/HeaderSection03.svelte +61 -0
- package/src/registry/blocks/header-section/HeaderSection04.svelte +63 -0
- package/src/registry/blocks/header-section/HeaderSection05.svelte +53 -0
- package/src/registry/blocks/header-section/HeaderSection06.svelte +70 -0
- package/src/registry/blocks/header-section/HeaderSection07.svelte +97 -0
- package/src/registry/blocks/header-section/HeaderSection08.svelte +61 -0
- package/src/registry/blocks/header-section/HeaderSection09.svelte +53 -0
- package/src/registry/blocks/header-section/HeaderSection10.svelte +63 -0
- package/src/registry/blocks/header-section/HeaderSection11.svelte +68 -0
- package/src/registry/blocks/header-section/HeaderSection12.svelte +60 -0
- package/src/registry/blocks/header-section/HeaderSection13.svelte +92 -0
- package/src/registry/blocks/header-section/HeaderSection14.svelte +77 -0
- package/src/registry/blocks/header-section/HeaderSection15.svelte +49 -0
- package/src/registry/blocks/header-section/HeaderSection16.svelte +74 -0
- package/src/registry/blocks/header-section/HeaderSection17.svelte +58 -0
- package/src/registry/blocks/header-section/HeaderSection18.svelte +66 -0
- package/src/registry/blocks/header-section/HeaderSection19.svelte +47 -0
- package/src/registry/blocks/header-section/HeaderSection20.svelte +53 -0
- package/src/registry/blocks/header-section/index.ts +20 -0
- package/src/registry/blocks/hero-section/HeroSection01.svelte +69 -0
- package/src/registry/blocks/hero-section/HeroSection02.svelte +47 -0
- package/src/registry/blocks/hero-section/HeroSection03.svelte +56 -0
- package/src/registry/blocks/hero-section/HeroSection04.svelte +69 -0
- package/src/registry/blocks/hero-section/HeroSection05.svelte +73 -0
- package/src/registry/blocks/hero-section/HeroSection06.svelte +78 -0
- package/src/registry/blocks/hero-section/HeroSection07.svelte +48 -0
- package/src/registry/blocks/hero-section/HeroSection08.svelte +73 -0
- package/src/registry/blocks/hero-section/HeroSection09.svelte +51 -0
- package/src/registry/blocks/hero-section/HeroSection10.svelte +47 -0
- package/src/registry/blocks/hero-section/HeroSection11.svelte +60 -0
- package/src/registry/blocks/hero-section/HeroSection12.svelte +74 -0
- package/src/registry/blocks/hero-section/HeroSection13.svelte +86 -0
- package/src/registry/blocks/hero-section/HeroSection14.svelte +116 -0
- package/src/registry/blocks/hero-section/HeroSection15.svelte +75 -0
- package/src/registry/blocks/hero-section/HeroSection16.svelte +92 -0
- package/src/registry/blocks/hero-section/HeroSection17.svelte +78 -0
- package/src/registry/blocks/hero-section/HeroSection18.svelte +82 -0
- package/src/registry/blocks/hero-section/HeroSection19.svelte +72 -0
- package/src/registry/blocks/hero-section/HeroSection20.svelte +79 -0
- package/src/registry/blocks/hero-section/HeroSection21.svelte +75 -0
- package/src/registry/blocks/hero-section/HeroSection22.svelte +103 -0
- package/src/registry/blocks/hero-section/index.ts +22 -0
- package/src/registry/blocks/logo-section/LogoSection01.svelte +54 -0
- package/src/registry/blocks/logo-section/LogoSection02.svelte +56 -0
- package/src/registry/blocks/logo-section/LogoSection03.svelte +58 -0
- package/src/registry/blocks/logo-section/LogoSection04.svelte +58 -0
- package/src/registry/blocks/logo-section/LogoSection05.svelte +43 -0
- package/src/registry/blocks/logo-section/LogoSection06.svelte +43 -0
- package/src/registry/blocks/logo-section/LogoSection07.svelte +56 -0
- package/src/registry/blocks/logo-section/index.ts +7 -0
- package/src/registry/blocks/lp-navbar/LPNavbar01.svelte +94 -0
- package/src/registry/blocks/lp-navbar/LPNavbar02.svelte +96 -0
- package/src/registry/blocks/lp-navbar/LPNavbar03.svelte +97 -0
- package/src/registry/blocks/lp-navbar/LPNavbar04.svelte +103 -0
- package/src/registry/blocks/lp-navbar/LPNavbar05.svelte +173 -0
- package/src/registry/blocks/lp-navbar/LPNavbar06.svelte +200 -0
- package/src/registry/blocks/lp-navbar/LPNavbar07.svelte +202 -0
- package/src/registry/blocks/lp-navbar/index.ts +7 -0
- package/src/registry/blocks/mail/MailBlock.svelte +321 -0
- package/src/registry/blocks/mail/index.ts +2 -0
- package/src/registry/blocks/music/MusicBlock.svelte +239 -0
- package/src/registry/blocks/music/index.ts +1 -0
- package/src/registry/blocks/navbar/Navbar01.svelte +234 -0
- package/src/registry/blocks/navbar/Navbar02.svelte +111 -0
- package/src/registry/blocks/navbar/Navbar03.svelte +88 -0
- package/src/registry/blocks/navbar/index.ts +3 -0
- package/src/registry/blocks/not-found/NotFound01.svelte +29 -0
- package/src/registry/blocks/not-found/NotFound02.svelte +28 -0
- package/src/registry/blocks/not-found/NotFound03.svelte +25 -0
- package/src/registry/blocks/not-found/index.ts +3 -0
- package/src/registry/blocks/order-history/OrderHistory01.svelte +208 -0
- package/src/registry/blocks/order-history/OrderHistory02.svelte +131 -0
- package/src/registry/blocks/order-history/OrderHistory03.svelte +133 -0
- package/src/registry/blocks/order-history/index.ts +3 -0
- package/src/registry/blocks/page-header/PageHeader01.svelte +39 -0
- package/src/registry/blocks/page-header/PageHeader02.svelte +58 -0
- package/src/registry/blocks/page-header/PageHeader03.svelte +64 -0
- package/src/registry/blocks/page-header/PageHeader04.svelte +49 -0
- package/src/registry/blocks/page-header/PageHeader05.svelte +49 -0
- package/src/registry/blocks/page-header/PageHeader06.svelte +58 -0
- package/src/registry/blocks/page-header/PageHeader07.svelte +64 -0
- package/src/registry/blocks/page-header/PageHeader08.svelte +68 -0
- package/src/registry/blocks/page-header/index.ts +8 -0
- package/src/registry/blocks/playground/PlaygroundBlock01.svelte +162 -0
- package/src/registry/blocks/playground/PlaygroundBlock02.svelte +156 -0
- package/src/registry/blocks/playground/index.ts +2 -0
- package/src/registry/blocks/pricing-section/PricingSection01.svelte +109 -0
- package/src/registry/blocks/pricing-section/PricingSection02.svelte +145 -0
- package/src/registry/blocks/pricing-section/PricingSection03.svelte +94 -0
- package/src/registry/blocks/pricing-section/PricingSection04.svelte +103 -0
- package/src/registry/blocks/pricing-section/PricingSection05.svelte +128 -0
- package/src/registry/blocks/pricing-section/index.ts +20 -0
- package/src/registry/blocks/product-card/ProductCard01.svelte +74 -0
- package/src/registry/blocks/product-card/ProductCard02.svelte +108 -0
- package/src/registry/blocks/product-card/ProductCard03.svelte +80 -0
- package/src/registry/blocks/product-card/ProductCard04.svelte +50 -0
- package/src/registry/blocks/product-card/ProductCard05.svelte +107 -0
- package/src/registry/blocks/product-card/index.ts +5 -0
- package/src/registry/blocks/product-detail/ProductDetail01.svelte +174 -0
- package/src/registry/blocks/product-detail/ProductDetail02.svelte +170 -0
- package/src/registry/blocks/product-detail/ProductDetail03.svelte +159 -0
- package/src/registry/blocks/product-detail/ProductDetail04.svelte +106 -0
- package/src/registry/blocks/product-detail/ProductDetail05.svelte +181 -0
- package/src/registry/blocks/product-detail/index.ts +5 -0
- package/src/registry/blocks/product-listing/ProductListing01.svelte +194 -0
- package/src/registry/blocks/product-listing/ProductListing02.svelte +163 -0
- package/src/registry/blocks/product-listing/ProductListing03.svelte +173 -0
- package/src/registry/blocks/product-listing/ProductListing04.svelte +179 -0
- package/src/registry/blocks/product-listing/ProductListing05.svelte +126 -0
- package/src/registry/blocks/product-listing/index.ts +5 -0
- package/src/registry/blocks/product-reviews/ProductReviews01.svelte +156 -0
- package/src/registry/blocks/product-reviews/ProductReviews02.svelte +139 -0
- package/src/registry/blocks/product-reviews/ProductReviews03.svelte +137 -0
- package/src/registry/blocks/product-reviews/ProductReviews04.svelte +129 -0
- package/src/registry/blocks/product-reviews/index.ts +4 -0
- package/src/registry/blocks/promo-section/PromoSection01.svelte +72 -0
- package/src/registry/blocks/promo-section/PromoSection02.svelte +61 -0
- package/src/registry/blocks/promo-section/PromoSection03.svelte +110 -0
- package/src/registry/blocks/promo-section/PromoSection04.svelte +103 -0
- package/src/registry/blocks/promo-section/index.ts +4 -0
- package/src/registry/blocks/rich-text/RichText01.svelte +30 -0
- package/src/registry/blocks/rich-text/RichText02.svelte +72 -0
- package/src/registry/blocks/rich-text/RichText03.svelte +52 -0
- package/src/registry/blocks/rich-text/RichText04.svelte +44 -0
- package/src/registry/blocks/rich-text/RichText05.svelte +56 -0
- package/src/registry/blocks/rich-text/index.ts +5 -0
- package/src/registry/blocks/section/Section01.svelte +38 -0
- package/src/registry/blocks/section/Section02.svelte +90 -0
- package/src/registry/blocks/section/Section03.svelte +95 -0
- package/src/registry/blocks/section/Section04.svelte +117 -0
- package/src/registry/blocks/section/index.ts +4 -0
- package/src/registry/blocks/section-footer/SectionFooter01.svelte +39 -0
- package/src/registry/blocks/section-footer/SectionFooter02.svelte +33 -0
- package/src/registry/blocks/section-footer/SectionFooter03.svelte +33 -0
- package/src/registry/blocks/section-footer/SectionFooter04.svelte +34 -0
- package/src/registry/blocks/section-footer/SectionFooter05.svelte +69 -0
- package/src/registry/blocks/section-footer/index.ts +5 -0
- package/src/registry/blocks/section-header/SectionHeader01.svelte +39 -0
- package/src/registry/blocks/section-header/SectionHeader02.svelte +58 -0
- package/src/registry/blocks/section-header/SectionHeader03.svelte +88 -0
- package/src/registry/blocks/section-header/SectionHeader04.svelte +45 -0
- package/src/registry/blocks/section-header/SectionHeader05.svelte +64 -0
- package/src/registry/blocks/section-header/index.ts +5 -0
- package/src/registry/blocks/settings/Settings01.svelte +202 -0
- package/src/registry/blocks/settings/Settings02.svelte +201 -0
- package/src/registry/blocks/settings/Settings03.svelte +156 -0
- package/src/registry/blocks/settings/Settings04.svelte +175 -0
- package/src/registry/blocks/settings/Settings05.svelte +248 -0
- package/src/registry/blocks/settings/Settings06.svelte +120 -0
- package/src/registry/blocks/settings/Settings07.svelte +136 -0
- package/src/registry/blocks/settings/index.ts +7 -0
- package/src/registry/blocks/sidebar/SidebarLayout01.svelte +108 -0
- package/src/registry/blocks/sidebar/SidebarLayout02.svelte +75 -0
- package/src/registry/blocks/sidebar/SidebarLayout03.svelte +108 -0
- package/src/registry/blocks/sidebar/SidebarLayout04.svelte +111 -0
- package/src/registry/blocks/sidebar/SidebarLayout05.svelte +103 -0
- package/src/registry/blocks/sidebar/SidebarLayout06.svelte +122 -0
- package/src/registry/blocks/sidebar/SidebarLayout07.svelte +183 -0
- package/src/registry/blocks/sidebar/SidebarLayout08.svelte +162 -0
- package/src/registry/blocks/sidebar/SidebarLayout09.svelte +167 -0
- package/src/registry/blocks/sidebar/SidebarLayout10.svelte +159 -0
- package/src/registry/blocks/sidebar/SidebarLayout11.svelte +135 -0
- package/src/registry/blocks/sidebar/SidebarLayout12.svelte +159 -0
- package/src/registry/blocks/sidebar/SidebarLayout13.svelte +103 -0
- package/src/registry/blocks/sidebar/SidebarLayout14.svelte +87 -0
- package/src/registry/blocks/sidebar/SidebarLayout15.svelte +228 -0
- package/src/registry/blocks/sidebar/index.ts +15 -0
- package/src/registry/blocks/sign-in/SignIn01.svelte +140 -0
- package/src/registry/blocks/sign-in/SignIn02.svelte +155 -0
- package/src/registry/blocks/sign-in/SignIn03.svelte +214 -0
- package/src/registry/blocks/sign-in/SignIn04.svelte +163 -0
- package/src/registry/blocks/sign-in/SignIn05.svelte +209 -0
- package/src/registry/blocks/sign-in/SignIn06.svelte +233 -0
- package/src/registry/blocks/sign-in/SignIn07.svelte +268 -0
- package/src/registry/blocks/sign-in/SignIn08.svelte +125 -0
- package/src/registry/blocks/sign-in/SignIn09.svelte +93 -0
- package/src/registry/blocks/sign-in/SignIn10.svelte +74 -0
- package/src/registry/blocks/sign-in/index.ts +10 -0
- package/src/registry/blocks/sign-up/SignUp01.svelte +124 -0
- package/src/registry/blocks/sign-up/SignUp02.svelte +110 -0
- package/src/registry/blocks/sign-up/SignUp03.svelte +182 -0
- package/src/registry/blocks/sign-up/SignUp04.svelte +126 -0
- package/src/registry/blocks/sign-up/SignUp05.svelte +182 -0
- package/src/registry/blocks/sign-up/SignUp06.svelte +221 -0
- package/src/registry/blocks/sign-up/SignUp07.svelte +98 -0
- package/src/registry/blocks/sign-up/index.ts +7 -0
- package/src/registry/blocks/stats-section/StatsSection01.svelte +66 -0
- package/src/registry/blocks/stats-section/StatsSection02.svelte +60 -0
- package/src/registry/blocks/stats-section/StatsSection03.svelte +66 -0
- package/src/registry/blocks/stats-section/StatsSection04.svelte +66 -0
- package/src/registry/blocks/stats-section/StatsSection05.svelte +60 -0
- package/src/registry/blocks/stats-section/StatsSection06.svelte +48 -0
- package/src/registry/blocks/stats-section/StatsSection07.svelte +66 -0
- package/src/registry/blocks/stats-section/index.ts +7 -0
- package/src/registry/blocks/store-navbar/StoreNavbar01.svelte +101 -0
- package/src/registry/blocks/store-navbar/StoreNavbar02.svelte +65 -0
- package/src/registry/blocks/store-navbar/StoreNavbar03.svelte +83 -0
- package/src/registry/blocks/store-navbar/StoreNavbar04.svelte +110 -0
- package/src/registry/blocks/store-navbar/StoreNavbar05.svelte +80 -0
- package/src/registry/blocks/store-navbar/index.ts +5 -0
- package/src/registry/blocks/table-header/TableHeader01.svelte +96 -0
- package/src/registry/blocks/table-header/TableHeader02.svelte +86 -0
- package/src/registry/blocks/table-header/TableHeader03.svelte +99 -0
- package/src/registry/blocks/table-header/TableHeader04.svelte +107 -0
- package/src/registry/blocks/table-header/index.ts +4 -0
- package/src/registry/blocks/tasks/TasksBlock.svelte +286 -0
- package/src/registry/blocks/tasks/index.ts +1 -0
- package/src/registry/blocks/team-section/TeamSection01.svelte +80 -0
- package/src/registry/blocks/team-section/TeamSection02.svelte +102 -0
- package/src/registry/blocks/team-section/TeamSection03.svelte +76 -0
- package/src/registry/blocks/team-section/TeamSection04.svelte +106 -0
- package/src/registry/blocks/team-section/index.ts +13 -0
- package/src/registry/blocks/testimonials/Testimonial01.svelte +74 -0
- package/src/registry/blocks/testimonials/Testimonial02.svelte +74 -0
- package/src/registry/blocks/testimonials/Testimonial03.svelte +79 -0
- package/src/registry/blocks/testimonials/Testimonial04.svelte +113 -0
- package/src/registry/blocks/testimonials/Testimonial05.svelte +74 -0
- package/src/registry/blocks/testimonials/Testimonial06.svelte +114 -0
- package/src/registry/blocks/testimonials/Testimonial07.svelte +131 -0
- package/src/registry/blocks/testimonials/Testimonials01.svelte +60 -0
- package/src/registry/blocks/testimonials/Testimonials02.svelte +61 -0
- package/src/registry/blocks/testimonials/Testimonials03.svelte +79 -0
- package/src/registry/blocks/testimonials/Testimonials04.svelte +74 -0
- package/src/registry/blocks/testimonials/Testimonials05.svelte +68 -0
- package/src/registry/blocks/testimonials/Testimonials06.svelte +82 -0
- package/src/registry/blocks/testimonials/Testimonials07.svelte +98 -0
- package/src/registry/blocks/testimonials/index.ts +16 -0
- package/src/registry/templates/cn.ts +42 -0
- package/src/index.ts +0 -2
- package/tsconfig.json +0 -20
- /package/src/{generate-component.cjs → commands/generate-component.cjs} +0 -0
- /package/src/{generate-route.cjs → commands/generate-route.cjs} +0 -0
- /package/src/{generate-service.cjs → commands/generate-service.cjs} +0 -0
- /package/src/{manage-auth-users.cjs → commands/manage-auth-users.cjs} +0 -0
- /package/src/{setup.cjs → commands/setup.cjs} +0 -0
- /package/src/{validate-setup.cjs → commands/validate.cjs} +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '$lib/utils/cn';
|
|
3
|
+
|
|
4
|
+
interface Section {
|
|
5
|
+
heading: string;
|
|
6
|
+
content: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface Props {
|
|
10
|
+
class?: string;
|
|
11
|
+
title?: string;
|
|
12
|
+
sections?: Section[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
class: className,
|
|
17
|
+
title = 'Documentation',
|
|
18
|
+
sections = [
|
|
19
|
+
{
|
|
20
|
+
heading: 'Introduction',
|
|
21
|
+
content:
|
|
22
|
+
'Welcome to our comprehensive guide. This document covers everything you need to get started.'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
heading: 'Features',
|
|
26
|
+
content:
|
|
27
|
+
'Discover the powerful features that set our platform apart. Learn what you can achieve with our tools.'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
heading: 'Getting Started',
|
|
31
|
+
content:
|
|
32
|
+
'Follow our step-by-step guide to set up your account and start using our platform immediately.'
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}: Props = $props();
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
<section class={cn('w-full bg-background py-16 px-4 sm:px-6', className)}>
|
|
39
|
+
<div class="mx-auto max-w-6xl">
|
|
40
|
+
<h1 class="text-3xl font-bold">{title}</h1>
|
|
41
|
+
<div class="mt-12 grid grid-cols-1 gap-12 sm:grid-cols-[200px_1fr]">
|
|
42
|
+
<nav class="flex flex-col gap-0">
|
|
43
|
+
<ul class="space-y-2 text-sm">
|
|
44
|
+
{#each sections as section}
|
|
45
|
+
<li>
|
|
46
|
+
<a
|
|
47
|
+
href="#{section.heading.toLowerCase().replace(/\s+/g, '-')}"
|
|
48
|
+
class="text-muted-foreground hover:text-foreground transition-colors"
|
|
49
|
+
>
|
|
50
|
+
{section.heading}
|
|
51
|
+
</a>
|
|
52
|
+
</li>
|
|
53
|
+
{/each}
|
|
54
|
+
</ul>
|
|
55
|
+
</nav>
|
|
56
|
+
|
|
57
|
+
<div class="space-y-8">
|
|
58
|
+
{#each sections as section}
|
|
59
|
+
<div>
|
|
60
|
+
<h2
|
|
61
|
+
id={section.heading.toLowerCase().replace(/\s+/g, '-')}
|
|
62
|
+
class="text-2xl font-bold mb-4"
|
|
63
|
+
>
|
|
64
|
+
{section.heading}
|
|
65
|
+
</h2>
|
|
66
|
+
<p class="text-muted-foreground leading-7">{section.content}</p>
|
|
67
|
+
</div>
|
|
68
|
+
{/each}
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</section>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '$lib/utils/cn';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
class?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
date?: string;
|
|
8
|
+
readTime?: string;
|
|
9
|
+
imageUrl?: string;
|
|
10
|
+
paragraphs?: string[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
class: className,
|
|
15
|
+
title = 'Article Title',
|
|
16
|
+
date = 'Mar 15, 2024',
|
|
17
|
+
readTime = '5 min read',
|
|
18
|
+
imageUrl,
|
|
19
|
+
paragraphs = [
|
|
20
|
+
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
|
21
|
+
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
|
|
22
|
+
'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.'
|
|
23
|
+
]
|
|
24
|
+
}: Props = $props();
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<section class={cn('w-full bg-background py-16 px-4 sm:px-6', className)}>
|
|
28
|
+
<div class="mx-auto max-w-2xl">
|
|
29
|
+
<div class="aspect-[16/6] w-full rounded-xl bg-muted flex items-center justify-center overflow-hidden">
|
|
30
|
+
{#if imageUrl}
|
|
31
|
+
<img src={imageUrl} alt={title} class="w-full h-full object-cover" />
|
|
32
|
+
{:else}
|
|
33
|
+
<div class="text-muted-foreground">Image placeholder</div>
|
|
34
|
+
{/if}
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="mt-8">
|
|
38
|
+
<h1 class="text-3xl font-bold tracking-tight">{title}</h1>
|
|
39
|
+
<div class="mt-4 flex items-center gap-4 text-sm text-muted-foreground">
|
|
40
|
+
<span>{date}</span>
|
|
41
|
+
<span>·</span>
|
|
42
|
+
<span>{readTime}</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<div class="mt-8 space-y-4 text-base leading-7 text-muted-foreground">
|
|
46
|
+
{#each paragraphs as paragraph}
|
|
47
|
+
<p>{paragraph}</p>
|
|
48
|
+
{/each}
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
</section>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '$lib/utils/cn';
|
|
3
|
+
import { Button } from '$lib/components/ui';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
class?: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
body?: string;
|
|
9
|
+
ctaLabel?: string;
|
|
10
|
+
onCta?: () => void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
class: className,
|
|
15
|
+
title = 'Stay Updated',
|
|
16
|
+
body = 'Get the latest insights and updates delivered to your inbox.',
|
|
17
|
+
ctaLabel = 'Learn more',
|
|
18
|
+
onCta
|
|
19
|
+
}: Props = $props();
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<section class={cn('w-full bg-background py-24 px-4', className)}>
|
|
23
|
+
<div class="mx-auto max-w-xl text-center">
|
|
24
|
+
<div class="mb-8 flex justify-center">
|
|
25
|
+
<div class="h-12 w-12 rounded-full bg-muted flex items-center justify-center text-muted-foreground">
|
|
26
|
+
<svg class="h-6 w-6" viewBox="0 0 24 24" fill="none" stroke="currentColor">
|
|
27
|
+
<path d="M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z" />
|
|
28
|
+
<polyline points="13 2 13 9 20 9" />
|
|
29
|
+
</svg>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<h2 class="text-2xl font-bold">{title}</h2>
|
|
34
|
+
<p class="mt-4 text-muted-foreground">{body}</p>
|
|
35
|
+
|
|
36
|
+
<div class="mt-8">
|
|
37
|
+
<Button onclick={onCta}>{ctaLabel}</Button>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<p class="mt-8 text-xs text-muted-foreground">
|
|
41
|
+
We respect your privacy. Unsubscribe at any time.
|
|
42
|
+
</p>
|
|
43
|
+
</div>
|
|
44
|
+
</section>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '$lib/utils/cn';
|
|
3
|
+
import { Button } from '$lib/components/ui';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
class?: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
breadcrumbs?: string[];
|
|
9
|
+
prevLabel?: string;
|
|
10
|
+
nextLabel?: string;
|
|
11
|
+
onPrev?: () => void;
|
|
12
|
+
onNext?: () => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
class: className,
|
|
17
|
+
title = 'Getting Started',
|
|
18
|
+
breadcrumbs = ['Home', 'Docs', 'Getting Started'],
|
|
19
|
+
prevLabel = 'Previous',
|
|
20
|
+
nextLabel = 'Next',
|
|
21
|
+
onPrev,
|
|
22
|
+
onNext
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<section class={cn('w-full bg-background py-16 px-4 sm:px-6', className)}>
|
|
27
|
+
<div class="mx-auto max-w-2xl">
|
|
28
|
+
<nav class="flex text-sm text-muted-foreground gap-2 items-center">
|
|
29
|
+
{#each breadcrumbs as crumb, i}
|
|
30
|
+
<span>{crumb}</span>
|
|
31
|
+
{#if i < breadcrumbs.length - 1}
|
|
32
|
+
<span>/</span>
|
|
33
|
+
{/if}
|
|
34
|
+
{/each}
|
|
35
|
+
</nav>
|
|
36
|
+
|
|
37
|
+
<h1 class="mt-8 text-3xl font-bold tracking-tight">{title}</h1>
|
|
38
|
+
<p class="mt-4 text-muted-foreground">This is the main content area. Add your documentation content here.</p>
|
|
39
|
+
|
|
40
|
+
<div class="mt-8 space-y-4 text-base leading-7 text-muted-foreground">
|
|
41
|
+
<p>
|
|
42
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut
|
|
43
|
+
labore et dolore magna aliqua.
|
|
44
|
+
</p>
|
|
45
|
+
<p>
|
|
46
|
+
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
|
|
47
|
+
commodo consequat.
|
|
48
|
+
</p>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<div class="mt-12 flex justify-between border-t pt-6">
|
|
52
|
+
<Button variant="outline" onclick={onPrev}>← {prevLabel}</Button>
|
|
53
|
+
<Button variant="outline" onclick={onNext}>{nextLabel} →</Button>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
</section>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as RichText01 } from './RichText01.svelte';
|
|
2
|
+
export { default as RichText02 } from './RichText02.svelte';
|
|
3
|
+
export { default as RichText03 } from './RichText03.svelte';
|
|
4
|
+
export { default as RichText04 } from './RichText04.svelte';
|
|
5
|
+
export { default as RichText05 } from './RichText05.svelte';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Section01.svelte
|
|
3
|
+
Layout wrapper: N stacked content slots. Supports flat (no border) and card (white bg + border) variants.
|
|
4
|
+
-->
|
|
5
|
+
<script lang="ts">
|
|
6
|
+
import { cn } from '$lib/utils/cn';
|
|
7
|
+
import type { Snippet } from 'svelte';
|
|
8
|
+
|
|
9
|
+
let {
|
|
10
|
+
class: className = '',
|
|
11
|
+
variant = 'flat' as 'flat' | 'card',
|
|
12
|
+
slots = 3,
|
|
13
|
+
children
|
|
14
|
+
}: {
|
|
15
|
+
class?: string;
|
|
16
|
+
variant?: 'flat' | 'card';
|
|
17
|
+
slots?: number;
|
|
18
|
+
children?: Snippet;
|
|
19
|
+
} = $props();
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<div
|
|
23
|
+
class={cn(
|
|
24
|
+
'flex flex-col gap-4',
|
|
25
|
+
variant === 'card' && 'rounded-lg border bg-background p-4',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
>
|
|
29
|
+
{#if children}
|
|
30
|
+
{@render children()}
|
|
31
|
+
{:else}
|
|
32
|
+
{#each Array(slots) as _}
|
|
33
|
+
<div class="flex min-h-16 items-center justify-center rounded-lg border border-dashed bg-muted/30 text-sm text-muted-foreground">
|
|
34
|
+
Slot (swap it with your content)
|
|
35
|
+
</div>
|
|
36
|
+
{/each}
|
|
37
|
+
{/if}
|
|
38
|
+
</div>
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Section02.svelte
|
|
3
|
+
Full section: SectionHeader02 (title + badge + description + search + actions) +
|
|
4
|
+
one content slot + SectionFooter02 (info text + View/Edit/Save).
|
|
5
|
+
Supports flat and card variants.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
import { cn } from '$lib/utils/cn';
|
|
9
|
+
import { Button } from '$lib/components/ui';
|
|
10
|
+
import type { Snippet } from 'svelte';
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
class: className = '',
|
|
14
|
+
variant = 'flat' as 'flat' | 'card',
|
|
15
|
+
title = 'Storage',
|
|
16
|
+
badge = 'Status',
|
|
17
|
+
description = 'Read and write directly to databases and stores from your projects.',
|
|
18
|
+
searchPlaceholder = 'Search',
|
|
19
|
+
footerText = 'This feature is available in the Pro Plan for additional $10 per month.',
|
|
20
|
+
onview = () => {},
|
|
21
|
+
onedit = () => {},
|
|
22
|
+
oncreate = () => {},
|
|
23
|
+
onsave = () => {},
|
|
24
|
+
children
|
|
25
|
+
}: {
|
|
26
|
+
class?: string;
|
|
27
|
+
variant?: 'flat' | 'card';
|
|
28
|
+
title?: string;
|
|
29
|
+
badge?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
searchPlaceholder?: string;
|
|
32
|
+
footerText?: string;
|
|
33
|
+
onview?: () => void;
|
|
34
|
+
onedit?: () => void;
|
|
35
|
+
oncreate?: () => void;
|
|
36
|
+
onsave?: () => void;
|
|
37
|
+
children?: Snippet;
|
|
38
|
+
} = $props();
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<div class={cn(variant === 'card' && 'rounded-lg border bg-background', className)}>
|
|
42
|
+
<!-- Header -->
|
|
43
|
+
<div class={cn('flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between', variant === 'card' ? 'p-4' : 'py-4')}>
|
|
44
|
+
<div>
|
|
45
|
+
<div class="flex items-center gap-2">
|
|
46
|
+
<h2 class="text-lg font-semibold">{title}</h2>
|
|
47
|
+
{#if badge}
|
|
48
|
+
<span class="inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium">{badge}</span>
|
|
49
|
+
{/if}
|
|
50
|
+
</div>
|
|
51
|
+
{#if description}
|
|
52
|
+
<p class="mt-0.5 text-sm text-muted-foreground">{description}</p>
|
|
53
|
+
{/if}
|
|
54
|
+
</div>
|
|
55
|
+
<div class="flex shrink-0 flex-col gap-2 sm:flex-row sm:items-center">
|
|
56
|
+
<div class="flex items-center gap-2 rounded-md border bg-background px-3 py-1.5">
|
|
57
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-muted-foreground"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
58
|
+
<input type="text" placeholder={searchPlaceholder} class="w-32 bg-transparent text-sm outline-none placeholder:text-muted-foreground" />
|
|
59
|
+
</div>
|
|
60
|
+
<div class="flex items-center gap-2">
|
|
61
|
+
<Button variant="outline" size="sm" onclick={onview}>View</Button>
|
|
62
|
+
<Button variant="outline" size="sm" onclick={onedit}>Edit</Button>
|
|
63
|
+
<Button size="sm" onclick={oncreate}>Create new</Button>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<!-- Content slot -->
|
|
69
|
+
<div class={cn(variant === 'card' ? 'border-t px-4 py-4' : 'py-4')}>
|
|
70
|
+
{#if children}
|
|
71
|
+
{@render children()}
|
|
72
|
+
{:else}
|
|
73
|
+
<div class="flex min-h-20 items-center justify-center rounded-lg border border-dashed bg-muted/30 text-sm text-muted-foreground">
|
|
74
|
+
Slot (swap it with your content)
|
|
75
|
+
</div>
|
|
76
|
+
{/if}
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<!-- Footer -->
|
|
80
|
+
<div class={cn('flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between', variant === 'card' ? 'border-t px-4 py-3' : 'py-3')}>
|
|
81
|
+
{#if footerText}
|
|
82
|
+
<p class="text-sm text-muted-foreground">{footerText}</p>
|
|
83
|
+
{/if}
|
|
84
|
+
<div class="flex shrink-0 items-center gap-2">
|
|
85
|
+
<Button variant="outline" size="sm" onclick={onview}>View</Button>
|
|
86
|
+
<Button variant="outline" size="sm" onclick={onedit}>Edit</Button>
|
|
87
|
+
<Button size="sm" onclick={onsave}>Save</Button>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Section03.svelte
|
|
3
|
+
Full section with empty-state content area: SectionHeader02 + empty state
|
|
4
|
+
(icon + title + description + Create new / Learn more) + SectionFooter02.
|
|
5
|
+
Supports flat and card variants.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
import { cn } from '$lib/utils/cn';
|
|
9
|
+
import { Button } from '$lib/components/ui';
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
class: className = '',
|
|
13
|
+
variant = 'flat' as 'flat' | 'card',
|
|
14
|
+
title = 'Storage',
|
|
15
|
+
badge = 'Status',
|
|
16
|
+
description = 'Read and write directly to databases and stores from your projects.',
|
|
17
|
+
searchPlaceholder = 'Search',
|
|
18
|
+
emptyTitle = 'No databases added',
|
|
19
|
+
emptyDescription = 'Read and write directly to databases and stores from your projects.',
|
|
20
|
+
footerText = 'This feature is available in the Pro Plan for additional $10 per month.',
|
|
21
|
+
onview = () => {},
|
|
22
|
+
onedit = () => {},
|
|
23
|
+
oncreate = () => {},
|
|
24
|
+
onlearnmore = () => {},
|
|
25
|
+
onsave = () => {}
|
|
26
|
+
}: {
|
|
27
|
+
class?: string;
|
|
28
|
+
variant?: 'flat' | 'card';
|
|
29
|
+
title?: string;
|
|
30
|
+
badge?: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
searchPlaceholder?: string;
|
|
33
|
+
emptyTitle?: string;
|
|
34
|
+
emptyDescription?: string;
|
|
35
|
+
footerText?: string;
|
|
36
|
+
onview?: () => void;
|
|
37
|
+
onedit?: () => void;
|
|
38
|
+
oncreate?: () => void;
|
|
39
|
+
onlearnmore?: () => void;
|
|
40
|
+
onsave?: () => void;
|
|
41
|
+
} = $props();
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<div class={cn(variant === 'card' && 'rounded-lg border bg-background', className)}>
|
|
45
|
+
<!-- Header -->
|
|
46
|
+
<div class={cn('flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between', variant === 'card' ? 'p-4' : 'py-4')}>
|
|
47
|
+
<div>
|
|
48
|
+
<div class="flex items-center gap-2">
|
|
49
|
+
<h2 class="text-lg font-semibold">{title}</h2>
|
|
50
|
+
{#if badge}
|
|
51
|
+
<span class="inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium">{badge}</span>
|
|
52
|
+
{/if}
|
|
53
|
+
</div>
|
|
54
|
+
{#if description}
|
|
55
|
+
<p class="mt-0.5 text-sm text-muted-foreground">{description}</p>
|
|
56
|
+
{/if}
|
|
57
|
+
</div>
|
|
58
|
+
<div class="flex shrink-0 flex-col gap-2 sm:flex-row sm:items-center">
|
|
59
|
+
<div class="flex items-center gap-2 rounded-md border bg-background px-3 py-1.5">
|
|
60
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-muted-foreground"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
61
|
+
<input type="text" placeholder={searchPlaceholder} class="w-32 bg-transparent text-sm outline-none placeholder:text-muted-foreground" />
|
|
62
|
+
</div>
|
|
63
|
+
<div class="flex items-center gap-2">
|
|
64
|
+
<Button variant="outline" size="sm" onclick={onview}>View</Button>
|
|
65
|
+
<Button variant="outline" size="sm" onclick={onedit}>Edit</Button>
|
|
66
|
+
<Button size="sm" onclick={oncreate}>Create new</Button>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<!-- Empty state content -->
|
|
72
|
+
<div class={cn('flex flex-col items-center justify-center py-12 text-center', variant === 'card' ? 'border-t px-4' : '')}>
|
|
73
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="mb-3 text-muted-foreground"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg>
|
|
74
|
+
<p class="font-semibold">{emptyTitle}</p>
|
|
75
|
+
{#if emptyDescription}
|
|
76
|
+
<p class="mt-1 max-w-xs text-sm text-muted-foreground">{emptyDescription}</p>
|
|
77
|
+
{/if}
|
|
78
|
+
<div class="mt-4 flex items-center gap-2">
|
|
79
|
+
<Button size="sm" onclick={oncreate}>Create new</Button>
|
|
80
|
+
<Button variant="outline" size="sm" onclick={onlearnmore}>Learn more</Button>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<!-- Footer -->
|
|
85
|
+
<div class={cn('flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between', variant === 'card' ? 'border-t px-4 py-3' : 'py-3')}>
|
|
86
|
+
{#if footerText}
|
|
87
|
+
<p class="text-sm text-muted-foreground">{footerText}</p>
|
|
88
|
+
{/if}
|
|
89
|
+
<div class="flex shrink-0 items-center gap-2">
|
|
90
|
+
<Button variant="outline" size="sm" onclick={onview}>View</Button>
|
|
91
|
+
<Button variant="outline" size="sm" onclick={onedit}>Edit</Button>
|
|
92
|
+
<Button size="sm" onclick={onsave}>Save</Button>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Section04.svelte
|
|
3
|
+
Full section with table: SectionHeader (title + description + search + Filters/New) +
|
|
4
|
+
table with head + rows + SectionFooter (Previous / count / Next pagination).
|
|
5
|
+
Supports flat and card variants.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
import { cn } from '$lib/utils/cn';
|
|
9
|
+
import { Button } from '$lib/components/ui';
|
|
10
|
+
|
|
11
|
+
interface Column { key: string; label: string; }
|
|
12
|
+
interface Row { [key: string]: string; }
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
class: className = '',
|
|
16
|
+
variant = 'flat' as 'flat' | 'card',
|
|
17
|
+
title = 'Table name',
|
|
18
|
+
description = 'Read and write directly to databases and stores from your projects.',
|
|
19
|
+
searchPlaceholder = 'Search',
|
|
20
|
+
columns = [
|
|
21
|
+
{ key: 'col1', label: 'Head Text' },
|
|
22
|
+
{ key: 'col2', label: 'Head Text' },
|
|
23
|
+
{ key: 'col3', label: 'Head Text' },
|
|
24
|
+
{ key: 'col4', label: 'Head Text' },
|
|
25
|
+
{ key: 'col5', label: 'Head Text' }
|
|
26
|
+
] as Column[],
|
|
27
|
+
rows = Array(5).fill(null).map(() =>
|
|
28
|
+
Object.fromEntries([['col1','Table Cell Text'],['col2','Table Cell Text'],['col3','Table Cell Text'],['col4','Table Cell Text'],['col5','Table Cell Text']])
|
|
29
|
+
) as Row[],
|
|
30
|
+
page = 1,
|
|
31
|
+
pageSize = 7,
|
|
32
|
+
total = 120,
|
|
33
|
+
onfilter = () => {},
|
|
34
|
+
onnew = () => {},
|
|
35
|
+
onprev = () => {},
|
|
36
|
+
onnext = () => {}
|
|
37
|
+
}: {
|
|
38
|
+
class?: string;
|
|
39
|
+
variant?: 'flat' | 'card';
|
|
40
|
+
title?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
searchPlaceholder?: string;
|
|
43
|
+
columns?: Column[];
|
|
44
|
+
rows?: Row[];
|
|
45
|
+
page?: number;
|
|
46
|
+
pageSize?: number;
|
|
47
|
+
total?: number;
|
|
48
|
+
onfilter?: () => void;
|
|
49
|
+
onnew?: () => void;
|
|
50
|
+
onprev?: () => void;
|
|
51
|
+
onnext?: () => void;
|
|
52
|
+
} = $props();
|
|
53
|
+
|
|
54
|
+
const start = $derived((page - 1) * pageSize + 1);
|
|
55
|
+
const end = $derived(Math.min(page * pageSize, total));
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<div class={cn(variant === 'card' && 'rounded-lg border bg-background', className)}>
|
|
59
|
+
<!-- Header -->
|
|
60
|
+
<div class={cn('flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between', variant === 'card' ? 'p-4' : 'py-4')}>
|
|
61
|
+
<div>
|
|
62
|
+
<h2 class="text-lg font-semibold">{title}</h2>
|
|
63
|
+
{#if description}
|
|
64
|
+
<p class="mt-0.5 text-sm text-muted-foreground">{description}</p>
|
|
65
|
+
{/if}
|
|
66
|
+
</div>
|
|
67
|
+
<div class="flex shrink-0 items-center gap-2">
|
|
68
|
+
<div class="flex items-center gap-2 rounded-md border bg-background px-3 py-1.5">
|
|
69
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-muted-foreground"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
70
|
+
<input type="text" placeholder={searchPlaceholder} class="w-32 bg-transparent text-sm outline-none placeholder:text-muted-foreground" />
|
|
71
|
+
</div>
|
|
72
|
+
<Button variant="outline" size="sm" onclick={onfilter} class="gap-1.5">
|
|
73
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"/></svg>
|
|
74
|
+
Filters
|
|
75
|
+
</Button>
|
|
76
|
+
<Button size="sm" onclick={onnew} class="gap-1.5">
|
|
77
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>
|
|
78
|
+
New
|
|
79
|
+
</Button>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<!-- Table -->
|
|
84
|
+
<div class={cn('overflow-x-auto', variant === 'card' ? 'border-t' : '')}>
|
|
85
|
+
<table class="w-full text-sm">
|
|
86
|
+
<thead>
|
|
87
|
+
<tr class="border-b bg-muted/30">
|
|
88
|
+
{#each columns as col}
|
|
89
|
+
<th class="px-4 py-2.5 text-left font-medium text-muted-foreground">{col.label}</th>
|
|
90
|
+
{/each}
|
|
91
|
+
</tr>
|
|
92
|
+
</thead>
|
|
93
|
+
<tbody>
|
|
94
|
+
{#each rows as row, i}
|
|
95
|
+
<tr class={cn('border-b last:border-0', i % 2 === 0 ? '' : 'bg-muted/20')}>
|
|
96
|
+
{#each columns as col}
|
|
97
|
+
<td class="px-4 py-2.5">{row[col.key] ?? ''}</td>
|
|
98
|
+
{/each}
|
|
99
|
+
</tr>
|
|
100
|
+
{/each}
|
|
101
|
+
</tbody>
|
|
102
|
+
</table>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<!-- Pagination footer -->
|
|
106
|
+
<div class={cn('flex items-center justify-between gap-4', variant === 'card' ? 'border-t px-4 py-3' : 'py-3')}>
|
|
107
|
+
<Button variant="outline" size="sm" onclick={onprev} class="gap-1">
|
|
108
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m15 18-6-6 6-6"/></svg>
|
|
109
|
+
<span class="hidden sm:inline">Previous</span>
|
|
110
|
+
</Button>
|
|
111
|
+
<span class="text-sm text-muted-foreground">{start}–{end} of {total}</span>
|
|
112
|
+
<Button variant="outline" size="sm" onclick={onnext} class="gap-1">
|
|
113
|
+
<span class="hidden sm:inline">Next</span>
|
|
114
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 18 6-6-6-6"/></svg>
|
|
115
|
+
</Button>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SectionFooter01.svelte
|
|
3
|
+
Minimal two-slot horizontal layout: wide left slot + narrow right slot.
|
|
4
|
+
-->
|
|
5
|
+
<script lang="ts">
|
|
6
|
+
import { cn } from '$lib/utils/cn';
|
|
7
|
+
import type { Snippet } from 'svelte';
|
|
8
|
+
|
|
9
|
+
let {
|
|
10
|
+
class: className = '',
|
|
11
|
+
left,
|
|
12
|
+
right
|
|
13
|
+
}: {
|
|
14
|
+
class?: string;
|
|
15
|
+
left?: Snippet;
|
|
16
|
+
right?: Snippet;
|
|
17
|
+
} = $props();
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<div class={cn('flex items-center gap-4 py-4', className)}>
|
|
21
|
+
<div class="flex-1">
|
|
22
|
+
{#if left}
|
|
23
|
+
{@render left()}
|
|
24
|
+
{:else}
|
|
25
|
+
<div class="flex min-h-10 items-center justify-center rounded-lg border border-dashed bg-background text-sm text-muted-foreground">
|
|
26
|
+
Slot (swap it with your content)
|
|
27
|
+
</div>
|
|
28
|
+
{/if}
|
|
29
|
+
</div>
|
|
30
|
+
<div class="w-44 shrink-0">
|
|
31
|
+
{#if right}
|
|
32
|
+
{@render right()}
|
|
33
|
+
{:else}
|
|
34
|
+
<div class="flex min-h-10 items-center justify-center rounded-lg border border-dashed bg-background text-sm text-muted-foreground">
|
|
35
|
+
Slot (swap it with your content)
|
|
36
|
+
</div>
|
|
37
|
+
{/if}
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SectionFooter02.svelte
|
|
3
|
+
Description/info text left. View/Edit/Save action buttons right.
|
|
4
|
+
-->
|
|
5
|
+
<script lang="ts">
|
|
6
|
+
import { cn } from '$lib/utils/cn';
|
|
7
|
+
import { Button } from '$lib/components/ui';
|
|
8
|
+
|
|
9
|
+
let {
|
|
10
|
+
class: className = '',
|
|
11
|
+
description = 'This feature is available in the Pro Plan for additional $10 per month.',
|
|
12
|
+
onview = () => {},
|
|
13
|
+
onedit = () => {},
|
|
14
|
+
onsave = () => {}
|
|
15
|
+
}: {
|
|
16
|
+
class?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
onview?: () => void;
|
|
19
|
+
onedit?: () => void;
|
|
20
|
+
onsave?: () => void;
|
|
21
|
+
} = $props();
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<div class={cn('flex flex-col gap-3 py-4 sm:flex-row sm:items-center sm:justify-between', className)}>
|
|
25
|
+
{#if description}
|
|
26
|
+
<p class="text-sm text-muted-foreground">{description}</p>
|
|
27
|
+
{/if}
|
|
28
|
+
<div class="flex shrink-0 items-center gap-2">
|
|
29
|
+
<Button variant="outline" size="sm" onclick={onview}>View</Button>
|
|
30
|
+
<Button variant="outline" size="sm" onclick={onedit}>Edit</Button>
|
|
31
|
+
<Button size="sm" onclick={onsave}>Save</Button>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|