@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,137 @@
|
|
|
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
|
+
}
|
|
8
|
+
|
|
9
|
+
let { class: className }: Props = $props();
|
|
10
|
+
|
|
11
|
+
const reviews = [
|
|
12
|
+
{
|
|
13
|
+
id: 1,
|
|
14
|
+
author: 'John Doe',
|
|
15
|
+
date: 'Mar 15, 2024',
|
|
16
|
+
rating: 5,
|
|
17
|
+
title: 'Perfect! Great quality',
|
|
18
|
+
text: 'This product exceeded all my expectations. The build quality is outstanding and it arrived in perfect condition.',
|
|
19
|
+
images: [1, 2, 3],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 2,
|
|
23
|
+
author: 'Sarah Smith',
|
|
24
|
+
date: 'Mar 12, 2024',
|
|
25
|
+
rating: 4,
|
|
26
|
+
title: 'Good value for money',
|
|
27
|
+
text: 'Solid product at a reasonable price. Does exactly what it claims to do.',
|
|
28
|
+
images: [1, 2],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 3,
|
|
32
|
+
author: 'Mike Johnson',
|
|
33
|
+
date: 'Mar 10, 2024',
|
|
34
|
+
rating: 5,
|
|
35
|
+
title: 'Best purchase ever',
|
|
36
|
+
text: 'Absolutely love this! The quality is incredible and customer service was super helpful.',
|
|
37
|
+
images: [1, 2, 3, 4],
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<section class={cn('w-full bg-background px-4 py-12 sm:px-6 lg:px-8', className)}>
|
|
43
|
+
<div class="mx-auto max-w-4xl">
|
|
44
|
+
<!-- Header -->
|
|
45
|
+
<div class="mb-8">
|
|
46
|
+
<h2 class="text-3xl font-bold">Reviews with Photos</h2>
|
|
47
|
+
<p class="text-muted-foreground">{reviews.length} reviews with images</p>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<!-- Reviews List -->
|
|
51
|
+
<div class="space-y-8">
|
|
52
|
+
{#each reviews as review (review.id)}
|
|
53
|
+
<div class="pb-8 border-b last:border-b-0">
|
|
54
|
+
<!-- Review Header -->
|
|
55
|
+
<div class="flex items-start gap-3 mb-4">
|
|
56
|
+
<!-- Avatar -->
|
|
57
|
+
<div class="w-12 h-12 rounded-full bg-gray-300 flex items-center justify-center flex-shrink-0">
|
|
58
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" class="text-gray-600">
|
|
59
|
+
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" />
|
|
60
|
+
<circle cx="12" cy="7" r="4" />
|
|
61
|
+
</svg>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<!-- Review Meta -->
|
|
65
|
+
<div class="flex-1">
|
|
66
|
+
<div class="flex items-center justify-between mb-1">
|
|
67
|
+
<h4 class="font-semibold">{review.author}</h4>
|
|
68
|
+
<span class="text-sm text-muted-foreground">{review.date}</span>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<!-- Rating -->
|
|
72
|
+
<div class="flex gap-0.5 mb-2">
|
|
73
|
+
{#each { length: 5 } as _, i}
|
|
74
|
+
<svg
|
|
75
|
+
width="16"
|
|
76
|
+
height="16"
|
|
77
|
+
viewBox="0 0 24 24"
|
|
78
|
+
fill={i < review.rating ? 'currentColor' : 'none'}
|
|
79
|
+
stroke="currentColor"
|
|
80
|
+
stroke-width="1"
|
|
81
|
+
class={i < review.rating ? 'text-yellow-400' : 'text-gray-300'}
|
|
82
|
+
>
|
|
83
|
+
<polygon points="12 2 15.09 10.26 24 10.35 17.77 16.88 20.16 25.54 12 20.01 3.84 25.54 6.23 16.88 0 10.35 8.91 10.26" />
|
|
84
|
+
</svg>
|
|
85
|
+
{/each}
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
<!-- Review Content -->
|
|
91
|
+
<h5 class="font-semibold mb-2">{review.title}</h5>
|
|
92
|
+
<p class="text-muted-foreground mb-4">{review.text}</p>
|
|
93
|
+
|
|
94
|
+
<!-- Images -->
|
|
95
|
+
{#if review.images && review.images.length > 0}
|
|
96
|
+
<div class="mb-4">
|
|
97
|
+
<p class="text-sm font-semibold mb-2">Photos</p>
|
|
98
|
+
<div class="grid grid-cols-2 gap-3 sm:grid-cols-4">
|
|
99
|
+
{#each review.images as image}
|
|
100
|
+
<div class="aspect-square bg-gray-100 rounded-lg flex items-center justify-center cursor-pointer hover:bg-gray-200 transition-colors">
|
|
101
|
+
<svg
|
|
102
|
+
width="24"
|
|
103
|
+
height="24"
|
|
104
|
+
viewBox="0 0 24 24"
|
|
105
|
+
fill="none"
|
|
106
|
+
stroke="currentColor"
|
|
107
|
+
stroke-width="1"
|
|
108
|
+
class="text-gray-400"
|
|
109
|
+
>
|
|
110
|
+
<rect x="3" y="3" width="18" height="18" rx="2" />
|
|
111
|
+
<circle cx="8.5" cy="8.5" r="1.5" />
|
|
112
|
+
<polyline points="21 15 16 10 5 21" />
|
|
113
|
+
</svg>
|
|
114
|
+
</div>
|
|
115
|
+
{/each}
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
{/if}
|
|
119
|
+
|
|
120
|
+
<!-- Helpful Button -->
|
|
121
|
+
<button class="text-sm text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1">
|
|
122
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
123
|
+
<polyline points="20 12 20 22 4 22 4 12" />
|
|
124
|
+
<polyline points="2 7 12 2 22 7" />
|
|
125
|
+
</svg>
|
|
126
|
+
Helpful
|
|
127
|
+
</button>
|
|
128
|
+
</div>
|
|
129
|
+
{/each}
|
|
130
|
+
</div>
|
|
131
|
+
|
|
132
|
+
<!-- View All -->
|
|
133
|
+
<div class="mt-8 text-center">
|
|
134
|
+
<Button variant="outline">View All Reviews</Button>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
</section>
|
|
@@ -0,0 +1,129 @@
|
|
|
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
|
+
}
|
|
8
|
+
|
|
9
|
+
let { class: className }: Props = $props();
|
|
10
|
+
|
|
11
|
+
const qaItems = [
|
|
12
|
+
{
|
|
13
|
+
id: 1,
|
|
14
|
+
question: 'What is the warranty period for this product?',
|
|
15
|
+
answer: 'This product comes with a 2-year manufacturer warranty covering defects in materials and workmanship.',
|
|
16
|
+
isSellerResponse: true,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 2,
|
|
20
|
+
question: 'Does this product ship internationally?',
|
|
21
|
+
answer: 'Yes, we ship to most countries worldwide. Shipping costs and delivery times vary by location. Please check your cart for specific shipping details.',
|
|
22
|
+
isSellerResponse: true,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 3,
|
|
26
|
+
question: 'Is there a size/color guide available?',
|
|
27
|
+
answer: 'A detailed size and color guide is available in the product specifications tab. You can also contact our customer service team for personalized recommendations.',
|
|
28
|
+
isSellerResponse: true,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
let showAskForm = $state(false);
|
|
33
|
+
let questionTitle = $state('');
|
|
34
|
+
let questionText = $state('');
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<section class={cn('w-full bg-background px-4 py-12 sm:px-6 lg:px-8', className)}>
|
|
38
|
+
<div class="mx-auto max-w-4xl">
|
|
39
|
+
<!-- Header -->
|
|
40
|
+
<div class="mb-8 flex items-center justify-between">
|
|
41
|
+
<div>
|
|
42
|
+
<h2 class="text-3xl font-bold">Questions & Answers</h2>
|
|
43
|
+
<p class="text-muted-foreground">{qaItems.length} questions answered</p>
|
|
44
|
+
</div>
|
|
45
|
+
<Button onclick={() => (showAskForm = !showAskForm)}>
|
|
46
|
+
{showAskForm ? 'Cancel' : 'Ask a Question'}
|
|
47
|
+
</Button>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<!-- Ask Question Form -->
|
|
51
|
+
{#if showAskForm}
|
|
52
|
+
<div class="bg-gray-50 rounded-lg p-6 mb-8">
|
|
53
|
+
<h3 class="font-semibold mb-4">Ask Your Question</h3>
|
|
54
|
+
<div class="space-y-4">
|
|
55
|
+
<div>
|
|
56
|
+
<label for="question-title" class="block text-sm font-semibold mb-2">Question Title</label>
|
|
57
|
+
<input
|
|
58
|
+
id="question-title"
|
|
59
|
+
type="text"
|
|
60
|
+
bind:value={questionTitle}
|
|
61
|
+
placeholder="What would you like to know?"
|
|
62
|
+
class="w-full px-4 py-2 border border-gray-300 rounded-lg bg-white text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary"
|
|
63
|
+
/>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<div>
|
|
67
|
+
<label for="question-text" class="block text-sm font-semibold mb-2">Details</label>
|
|
68
|
+
<textarea
|
|
69
|
+
id="question-text"
|
|
70
|
+
bind:value={questionText}
|
|
71
|
+
placeholder="Provide more context for your question"
|
|
72
|
+
rows="4"
|
|
73
|
+
class="w-full px-4 py-2 border border-gray-300 rounded-lg bg-white text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary"
|
|
74
|
+
/>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div class="flex gap-3">
|
|
78
|
+
<Button size="sm" disabled={!questionTitle.trim()}>Submit Question</Button>
|
|
79
|
+
<Button
|
|
80
|
+
variant="outline"
|
|
81
|
+
size="sm"
|
|
82
|
+
onclick={() => {
|
|
83
|
+
showAskForm = false;
|
|
84
|
+
questionTitle = '';
|
|
85
|
+
questionText = '';
|
|
86
|
+
}}
|
|
87
|
+
>
|
|
88
|
+
Cancel
|
|
89
|
+
</Button>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
{/if}
|
|
94
|
+
|
|
95
|
+
<!-- Q&A List -->
|
|
96
|
+
<div class="space-y-6">
|
|
97
|
+
{#each qaItems as item (item.id)}
|
|
98
|
+
<div class="border-b pb-6 last:border-b-0">
|
|
99
|
+
<!-- Question -->
|
|
100
|
+
<h4 class="font-semibold text-base mb-3">{item.question}</h4>
|
|
101
|
+
|
|
102
|
+
<!-- Answer -->
|
|
103
|
+
<div class="ml-4 pl-4 border-l-2 border-gray-200">
|
|
104
|
+
{#if item.isSellerResponse}
|
|
105
|
+
<p class="text-xs font-semibold text-green-700 bg-green-50 px-2 py-1 rounded w-fit mb-2">
|
|
106
|
+
Seller response
|
|
107
|
+
</p>
|
|
108
|
+
{/if}
|
|
109
|
+
<p class="text-muted-foreground">{item.answer}</p>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<!-- Helpful -->
|
|
113
|
+
<button class="text-sm text-muted-foreground hover:text-foreground transition-colors flex items-center gap-1 mt-3">
|
|
114
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
115
|
+
<polyline points="20 12 20 22 4 22 4 12" />
|
|
116
|
+
<polyline points="2 7 12 2 22 7" />
|
|
117
|
+
</svg>
|
|
118
|
+
Was this helpful?
|
|
119
|
+
</button>
|
|
120
|
+
</div>
|
|
121
|
+
{/each}
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<!-- Load More -->
|
|
125
|
+
<div class="mt-8 text-center">
|
|
126
|
+
<Button variant="outline">View More Questions</Button>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</section>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as ProductReviews01 } from './ProductReviews01.svelte';
|
|
2
|
+
export { default as ProductReviews02 } from './ProductReviews02.svelte';
|
|
3
|
+
export { default as ProductReviews03 } from './ProductReviews03.svelte';
|
|
4
|
+
export { default as ProductReviews04 } from './ProductReviews04.svelte';
|
|
@@ -0,0 +1,72 @@
|
|
|
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
|
+
heading?: string;
|
|
8
|
+
subtitle?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let { class: className, heading = 'Flash Sale', subtitle = 'Limited time offer - Save big today!' }: Props = $props();
|
|
12
|
+
|
|
13
|
+
let timeLeft = $state({
|
|
14
|
+
hours: 2,
|
|
15
|
+
minutes: 34,
|
|
16
|
+
seconds: 56,
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<section
|
|
21
|
+
class={cn(
|
|
22
|
+
'w-full bg-gradient-to-r from-red-600 to-red-700 px-4 py-20 sm:px-6 lg:px-8 text-white',
|
|
23
|
+
className
|
|
24
|
+
)}
|
|
25
|
+
>
|
|
26
|
+
<div class="mx-auto max-w-6xl">
|
|
27
|
+
<div class="text-center">
|
|
28
|
+
<!-- Badge -->
|
|
29
|
+
<div class="inline-block bg-red-500 text-white text-xs font-bold px-3 py-1 rounded-full mb-4">
|
|
30
|
+
Flash Sale
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<!-- Heading -->
|
|
34
|
+
<h2 class="text-5xl sm:text-6xl font-bold mb-4">Up to 50% Off</h2>
|
|
35
|
+
|
|
36
|
+
<!-- Subtitle -->
|
|
37
|
+
<p class="text-lg sm:text-xl text-red-100 mb-8 max-w-2xl mx-auto">
|
|
38
|
+
{subtitle}
|
|
39
|
+
</p>
|
|
40
|
+
|
|
41
|
+
<!-- Countdown Timer -->
|
|
42
|
+
<div class="mb-8 inline-block">
|
|
43
|
+
<p class="text-sm text-red-100 mb-3">Offer ends in:</p>
|
|
44
|
+
<div class="flex gap-4 justify-center">
|
|
45
|
+
<div class="flex flex-col items-center">
|
|
46
|
+
<span class="text-4xl sm:text-5xl font-bold">{String(timeLeft.hours).padStart(2, '0')}</span>
|
|
47
|
+
<span class="text-xs sm:text-sm text-red-100 mt-1">Hours</span>
|
|
48
|
+
</div>
|
|
49
|
+
<div class="flex flex-col items-center">
|
|
50
|
+
<span class="text-4xl sm:text-5xl font-bold">:</span>
|
|
51
|
+
</div>
|
|
52
|
+
<div class="flex flex-col items-center">
|
|
53
|
+
<span class="text-4xl sm:text-5xl font-bold">{String(timeLeft.minutes).padStart(2, '0')}</span>
|
|
54
|
+
<span class="text-xs sm:text-sm text-red-100 mt-1">Minutes</span>
|
|
55
|
+
</div>
|
|
56
|
+
<div class="flex flex-col items-center">
|
|
57
|
+
<span class="text-4xl sm:text-5xl font-bold">:</span>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="flex flex-col items-center">
|
|
60
|
+
<span class="text-4xl sm:text-5xl font-bold">{String(timeLeft.seconds).padStart(2, '0')}</span>
|
|
61
|
+
<span class="text-xs sm:text-sm text-red-100 mt-1">Seconds</span>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<!-- CTA Button -->
|
|
67
|
+
<Button size="lg" class="bg-white text-red-600 hover:bg-gray-100 font-semibold px-8">
|
|
68
|
+
Shop Now
|
|
69
|
+
</Button>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</section>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '$lib/utils/cn';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
class?: string;
|
|
6
|
+
heading?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
let { class: className, heading = 'Shop by Category' }: Props = $props();
|
|
10
|
+
|
|
11
|
+
const categories = [
|
|
12
|
+
{ id: 1, name: 'Electronics' },
|
|
13
|
+
{ id: 2, name: 'Fashion' },
|
|
14
|
+
{ id: 3, name: 'Home & Garden' },
|
|
15
|
+
];
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<section class={cn('w-full bg-background px-4 py-16 sm:px-6 lg:px-8', className)}>
|
|
19
|
+
<div class="mx-auto max-w-7xl">
|
|
20
|
+
<!-- Heading -->
|
|
21
|
+
<h2 class="text-3xl sm:text-4xl font-bold mb-12 text-center">{heading}</h2>
|
|
22
|
+
|
|
23
|
+
<!-- Category Cards Grid -->
|
|
24
|
+
<div class="grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3">
|
|
25
|
+
{#each categories as category (category.id)}
|
|
26
|
+
<div class="relative group overflow-hidden rounded-xl aspect-square">
|
|
27
|
+
<!-- Background Image Placeholder -->
|
|
28
|
+
<div class="absolute inset-0 bg-gradient-to-b from-gray-300 via-gray-200 to-gray-300 flex items-center justify-center">
|
|
29
|
+
<svg
|
|
30
|
+
width="80"
|
|
31
|
+
height="80"
|
|
32
|
+
viewBox="0 0 24 24"
|
|
33
|
+
fill="none"
|
|
34
|
+
stroke="currentColor"
|
|
35
|
+
stroke-width="1"
|
|
36
|
+
class="text-gray-400"
|
|
37
|
+
>
|
|
38
|
+
<rect x="3" y="3" width="18" height="18" rx="2" />
|
|
39
|
+
<circle cx="8.5" cy="8.5" r="1.5" />
|
|
40
|
+
<polyline points="21 15 16 10 5 21" />
|
|
41
|
+
</svg>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<!-- Overlay -->
|
|
45
|
+
<div class="absolute inset-0 bg-black/40 group-hover:bg-black/50 transition-colors flex flex-col items-center justify-center text-white">
|
|
46
|
+
<!-- Category Name -->
|
|
47
|
+
<h3 class="text-3xl sm:text-4xl font-bold mb-4 text-center">{category.name}</h3>
|
|
48
|
+
|
|
49
|
+
<!-- Shop Now Link -->
|
|
50
|
+
<a
|
|
51
|
+
href="#"
|
|
52
|
+
class="inline-block px-6 py-2 bg-white text-black font-semibold rounded-lg hover:bg-gray-100 transition-colors"
|
|
53
|
+
>
|
|
54
|
+
Shop now
|
|
55
|
+
</a>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
{/each}
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</section>
|
|
@@ -0,0 +1,110 @@
|
|
|
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
|
+
heading?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
let { class: className, heading = 'Join Our Loyalty Program' }: Props = $props();
|
|
11
|
+
|
|
12
|
+
let email = $state('');
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<section class={cn('w-full bg-background px-4 py-16 sm:px-6 lg:px-8', className)}>
|
|
16
|
+
<div class="mx-auto max-w-6xl">
|
|
17
|
+
<div class="grid grid-cols-1 gap-8 lg:grid-cols-2 items-center">
|
|
18
|
+
<!-- Left Section -->
|
|
19
|
+
<div class="bg-gray-950 text-white rounded-xl p-8 sm:p-12">
|
|
20
|
+
<h2 class="text-3xl sm:text-4xl font-bold mb-6">{heading}</h2>
|
|
21
|
+
|
|
22
|
+
<!-- Benefits List -->
|
|
23
|
+
<ul class="space-y-4">
|
|
24
|
+
<li class="flex items-start gap-3">
|
|
25
|
+
<svg
|
|
26
|
+
width="20"
|
|
27
|
+
height="20"
|
|
28
|
+
viewBox="0 0 24 24"
|
|
29
|
+
fill="none"
|
|
30
|
+
stroke="currentColor"
|
|
31
|
+
stroke-width="2"
|
|
32
|
+
class="text-green-400 mt-1 flex-shrink-0"
|
|
33
|
+
>
|
|
34
|
+
<polyline points="20 6 9 17 4 12" />
|
|
35
|
+
</svg>
|
|
36
|
+
<span>Free shipping on all orders</span>
|
|
37
|
+
</li>
|
|
38
|
+
<li class="flex items-start gap-3">
|
|
39
|
+
<svg
|
|
40
|
+
width="20"
|
|
41
|
+
height="20"
|
|
42
|
+
viewBox="0 0 24 24"
|
|
43
|
+
fill="none"
|
|
44
|
+
stroke="currentColor"
|
|
45
|
+
stroke-width="2"
|
|
46
|
+
class="text-green-400 mt-1 flex-shrink-0"
|
|
47
|
+
>
|
|
48
|
+
<polyline points="20 6 9 17 4 12" />
|
|
49
|
+
</svg>
|
|
50
|
+
<span>Exclusive members-only deals</span>
|
|
51
|
+
</li>
|
|
52
|
+
<li class="flex items-start gap-3">
|
|
53
|
+
<svg
|
|
54
|
+
width="20"
|
|
55
|
+
height="20"
|
|
56
|
+
viewBox="0 0 24 24"
|
|
57
|
+
fill="none"
|
|
58
|
+
stroke="currentColor"
|
|
59
|
+
stroke-width="2"
|
|
60
|
+
class="text-green-400 mt-1 flex-shrink-0"
|
|
61
|
+
>
|
|
62
|
+
<polyline points="20 6 9 17 4 12" />
|
|
63
|
+
</svg>
|
|
64
|
+
<span>Earn points on every purchase</span>
|
|
65
|
+
</li>
|
|
66
|
+
<li class="flex items-start gap-3">
|
|
67
|
+
<svg
|
|
68
|
+
width="20"
|
|
69
|
+
height="20"
|
|
70
|
+
viewBox="0 0 24 24"
|
|
71
|
+
fill="none"
|
|
72
|
+
stroke="currentColor"
|
|
73
|
+
stroke-width="2"
|
|
74
|
+
class="text-green-400 mt-1 flex-shrink-0"
|
|
75
|
+
>
|
|
76
|
+
<polyline points="20 6 9 17 4 12" />
|
|
77
|
+
</svg>
|
|
78
|
+
<span>Priority customer support</span>
|
|
79
|
+
</li>
|
|
80
|
+
</ul>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<!-- Right Section -->
|
|
84
|
+
<div class="flex flex-col">
|
|
85
|
+
<h3 class="text-2xl font-semibold mb-4">Sign Up Today</h3>
|
|
86
|
+
<p class="text-muted-foreground mb-6">Get exclusive offers and discounts delivered to your inbox</p>
|
|
87
|
+
|
|
88
|
+
<!-- Form -->
|
|
89
|
+
<form class="space-y-4">
|
|
90
|
+
<div>
|
|
91
|
+
<label for="email" class="block text-sm font-semibold mb-2">Email Address</label>
|
|
92
|
+
<input
|
|
93
|
+
id="email"
|
|
94
|
+
type="email"
|
|
95
|
+
bind:value={email}
|
|
96
|
+
placeholder="your@email.com"
|
|
97
|
+
class="w-full px-4 py-3 border border-gray-300 rounded-lg bg-background text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary"
|
|
98
|
+
/>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<Button class="w-full" disabled={!email}>Sign Up</Button>
|
|
102
|
+
|
|
103
|
+
<p class="text-xs text-muted-foreground">
|
|
104
|
+
We respect your privacy. Unsubscribe at any time.
|
|
105
|
+
</p>
|
|
106
|
+
</form>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
</section>
|
|
@@ -0,0 +1,103 @@
|
|
|
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
|
+
productName?: string;
|
|
8
|
+
originalPrice?: number;
|
|
9
|
+
salePrice?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
class: className,
|
|
14
|
+
productName = 'Premium Wireless Headphones',
|
|
15
|
+
originalPrice = 299.99,
|
|
16
|
+
salePrice = 149.99,
|
|
17
|
+
}: Props = $props();
|
|
18
|
+
|
|
19
|
+
const features = [
|
|
20
|
+
'Active Noise Cancellation',
|
|
21
|
+
'40-hour battery life',
|
|
22
|
+
'Premium sound quality',
|
|
23
|
+
'Comfortable fit for all-day wear',
|
|
24
|
+
];
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<section class={cn('w-full bg-gray-950 text-white px-4 py-16 sm:px-6 lg:px-8', className)}>
|
|
28
|
+
<div class="mx-auto max-w-7xl">
|
|
29
|
+
<div class="grid grid-cols-1 gap-12 lg:grid-cols-2 items-center">
|
|
30
|
+
<!-- Left Content -->
|
|
31
|
+
<div>
|
|
32
|
+
<!-- Label -->
|
|
33
|
+
<span class="inline-block bg-red-600 text-white text-xs font-bold px-3 py-1 rounded-full mb-4">
|
|
34
|
+
Deal of the Day
|
|
35
|
+
</span>
|
|
36
|
+
|
|
37
|
+
<!-- Product Name -->
|
|
38
|
+
<h2 class="text-4xl sm:text-5xl font-bold mb-4">{productName}</h2>
|
|
39
|
+
|
|
40
|
+
<!-- Pricing -->
|
|
41
|
+
<div class="mb-6 flex items-center gap-4">
|
|
42
|
+
<span class="text-lg line-through text-gray-400">${originalPrice.toFixed(2)}</span>
|
|
43
|
+
<span class="text-4xl font-bold text-red-500">${salePrice.toFixed(2)}</span>
|
|
44
|
+
<span class="text-lg font-semibold text-green-400">
|
|
45
|
+
Save {Math.round(((originalPrice - salePrice) / originalPrice) * 100)}%
|
|
46
|
+
</span>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<!-- Features List -->
|
|
50
|
+
<ul class="space-y-3 mb-8">
|
|
51
|
+
{#each features as feature}
|
|
52
|
+
<li class="flex items-center gap-3">
|
|
53
|
+
<svg
|
|
54
|
+
width="20"
|
|
55
|
+
height="20"
|
|
56
|
+
viewBox="0 0 24 24"
|
|
57
|
+
fill="none"
|
|
58
|
+
stroke="currentColor"
|
|
59
|
+
stroke-width="2"
|
|
60
|
+
class="text-green-400 flex-shrink-0"
|
|
61
|
+
>
|
|
62
|
+
<polyline points="20 6 9 17 4 12" />
|
|
63
|
+
</svg>
|
|
64
|
+
<span>{feature}</span>
|
|
65
|
+
</li>
|
|
66
|
+
{/each}
|
|
67
|
+
</ul>
|
|
68
|
+
|
|
69
|
+
<!-- CTA -->
|
|
70
|
+
<div class="flex flex-col sm:flex-row gap-3">
|
|
71
|
+
<Button size="lg" class="bg-red-600 hover:bg-red-700">Add to Cart</Button>
|
|
72
|
+
<Button variant="outline" size="lg" class="border-white text-white hover:bg-white/10">
|
|
73
|
+
View Details
|
|
74
|
+
</Button>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<!-- Limited Time Notice -->
|
|
78
|
+
<p class="text-sm text-gray-400 mt-4">
|
|
79
|
+
Limited stock available. Offer ends in 3 days.
|
|
80
|
+
</p>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<!-- Right - Product Image Placeholder -->
|
|
84
|
+
<div class="flex items-center justify-center">
|
|
85
|
+
<div class="w-full aspect-square bg-gradient-to-b from-gray-800 to-gray-900 rounded-xl flex items-center justify-center">
|
|
86
|
+
<svg
|
|
87
|
+
width="120"
|
|
88
|
+
height="120"
|
|
89
|
+
viewBox="0 0 24 24"
|
|
90
|
+
fill="none"
|
|
91
|
+
stroke="currentColor"
|
|
92
|
+
stroke-width="1"
|
|
93
|
+
class="text-gray-600"
|
|
94
|
+
>
|
|
95
|
+
<rect x="3" y="3" width="18" height="18" rx="2" />
|
|
96
|
+
<circle cx="8.5" cy="8.5" r="1.5" />
|
|
97
|
+
<polyline points="21 15 16 10 5 21" />
|
|
98
|
+
</svg>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</section>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { default as PromoSection01 } from './PromoSection01.svelte';
|
|
2
|
+
export { default as PromoSection02 } from './PromoSection02.svelte';
|
|
3
|
+
export { default as PromoSection03 } from './PromoSection03.svelte';
|
|
4
|
+
export { default as PromoSection04 } from './PromoSection04.svelte';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '$lib/utils/cn';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
class?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
subtitle?: string;
|
|
8
|
+
paragraph1?: string;
|
|
9
|
+
paragraph2?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const {
|
|
13
|
+
class: className,
|
|
14
|
+
title = 'Article Title',
|
|
15
|
+
subtitle = 'A compelling subtitle that draws readers in...',
|
|
16
|
+
paragraph1 = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
|
|
17
|
+
paragraph2 = 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
|
|
18
|
+
}: Props = $props();
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<section class={cn('w-full bg-background py-16 px-4 sm:px-6', className)}>
|
|
22
|
+
<div class="mx-auto max-w-2xl">
|
|
23
|
+
<h1 class="text-3xl font-bold tracking-tight">{title}</h1>
|
|
24
|
+
<p class="mt-4 text-xl text-muted-foreground">{subtitle}</p>
|
|
25
|
+
<div class="mt-8 space-y-4 text-base leading-7 text-muted-foreground">
|
|
26
|
+
<p>{paragraph1}</p>
|
|
27
|
+
<p>{paragraph2}</p>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</section>
|