@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,110 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
StoreNavbar04.svelte
|
|
3
|
+
Navbar with mega menu: standard nav with hover states. Women category shows
|
|
4
|
+
mega menu dropdown panel below nav with 3 cols (New Arrivals / Clothing / Accessories)
|
|
5
|
+
and featured image placeholder on right.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
import { cn } from '$lib/utils/cn';
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
class?: string;
|
|
12
|
+
cartCount?: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let { class: className = '', cartCount = 4 }: Props = $props();
|
|
16
|
+
|
|
17
|
+
let activeMegaMenu = $state<string | null>(null);
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<nav class={cn('w-full border-b bg-white', className)}>
|
|
21
|
+
<!-- Main navbar -->
|
|
22
|
+
<div class="flex h-14 items-center gap-8 px-6">
|
|
23
|
+
<!-- Logo -->
|
|
24
|
+
<div class="flex items-center">
|
|
25
|
+
<div class="text-lg font-bold">Store</div>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<!-- Nav links -->
|
|
29
|
+
<div class="flex items-center gap-6">
|
|
30
|
+
<a href="#" class="text-sm font-medium text-gray-700 hover:text-gray-900">Men</a>
|
|
31
|
+
|
|
32
|
+
<div class="relative">
|
|
33
|
+
<button
|
|
34
|
+
type="button"
|
|
35
|
+
onmouseenter={() => (activeMegaMenu = 'women')}
|
|
36
|
+
onmouseleave={() => (activeMegaMenu = null)}
|
|
37
|
+
class="text-sm font-medium text-gray-700 hover:text-gray-900"
|
|
38
|
+
>
|
|
39
|
+
Women
|
|
40
|
+
</button>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<a href="#" class="text-sm font-medium text-gray-700 hover:text-gray-900">Kids</a>
|
|
44
|
+
<a href="#" class="text-sm font-medium text-gray-700 hover:text-gray-900">New</a>
|
|
45
|
+
<a href="#" class="text-sm font-medium text-gray-700 hover:text-gray-900">Sale</a>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<!-- Icons right -->
|
|
49
|
+
<div class="ml-auto flex items-center gap-4">
|
|
50
|
+
<button type="button" class="flex h-8 w-8 items-center justify-center rounded-full hover:bg-gray-100">
|
|
51
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
52
|
+
</button>
|
|
53
|
+
|
|
54
|
+
<button type="button" class="relative flex h-8 w-8 items-center justify-center rounded-full hover:bg-gray-100">
|
|
55
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
|
|
56
|
+
{#if cartCount > 0}
|
|
57
|
+
<span class="absolute right-0 top-0 flex h-4 min-w-4 items-center justify-center rounded-full bg-blue-600 px-0.5 text-[10px] font-bold text-white">{cartCount}</span>
|
|
58
|
+
{/if}
|
|
59
|
+
</button>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<!-- Mega menu panel -->
|
|
64
|
+
{#if activeMegaMenu === 'women'}
|
|
65
|
+
<div
|
|
66
|
+
onmouseenter={() => (activeMegaMenu = 'women')}
|
|
67
|
+
onmouseleave={() => (activeMegaMenu = null)}
|
|
68
|
+
class="border-t bg-white px-6 py-8"
|
|
69
|
+
>
|
|
70
|
+
<div class="grid grid-cols-4 gap-8">
|
|
71
|
+
<!-- Column 1: New Arrivals -->
|
|
72
|
+
<div>
|
|
73
|
+
<h3 class="mb-4 text-sm font-semibold text-gray-900">New Arrivals</h3>
|
|
74
|
+
<div class="space-y-2">
|
|
75
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Latest Styles</a>
|
|
76
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Trending Now</a>
|
|
77
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Just In</a>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
<!-- Column 2: Clothing -->
|
|
82
|
+
<div>
|
|
83
|
+
<h3 class="mb-4 text-sm font-semibold text-gray-900">Clothing</h3>
|
|
84
|
+
<div class="space-y-2">
|
|
85
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Dresses</a>
|
|
86
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Tops</a>
|
|
87
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Bottoms</a>
|
|
88
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Outerwear</a>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<!-- Column 3: Accessories -->
|
|
93
|
+
<div>
|
|
94
|
+
<h3 class="mb-4 text-sm font-semibold text-gray-900">Accessories</h3>
|
|
95
|
+
<div class="space-y-2">
|
|
96
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Bags</a>
|
|
97
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Shoes</a>
|
|
98
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Jewelry</a>
|
|
99
|
+
<a href="#" class="block text-sm text-gray-700 hover:text-gray-900">Scarves</a>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
<!-- Column 4: Featured image -->
|
|
104
|
+
<div class="flex items-center justify-center bg-gray-100 rounded-lg h-48">
|
|
105
|
+
<div class="text-center text-gray-500 text-sm">Featured Image</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
{/if}
|
|
110
|
+
</nav>
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
StoreNavbar05.svelte
|
|
3
|
+
Mobile-first collapsible store navbar: compact nav with logo + hamburger.
|
|
4
|
+
When open: full-width mobile menu with search, nav links, user/cart links.
|
|
5
|
+
Smooth transform animation.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
import { cn } from '$lib/utils/cn';
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
class?: string;
|
|
12
|
+
cartCount?: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
let { class: className = '', cartCount = 2 }: Props = $props();
|
|
16
|
+
|
|
17
|
+
let isOpen = $state(false);
|
|
18
|
+
let searchQuery = $state('');
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<nav class={cn('w-full border-b bg-white', className)}>
|
|
22
|
+
<!-- Header -->
|
|
23
|
+
<div class="flex h-14 items-center justify-between px-4">
|
|
24
|
+
<button type="button" onclick={() => (isOpen = !isOpen)} class="flex h-8 w-8 items-center justify-center rounded-md hover:bg-gray-100">
|
|
25
|
+
{#if isOpen}
|
|
26
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>
|
|
27
|
+
{:else}
|
|
28
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" x2="20" y1="12" y2="12"/><line x1="4" x2="20" y1="6" y2="6"/><line x1="4" x2="20" y1="18" y2="18"/></svg>
|
|
29
|
+
{/if}
|
|
30
|
+
</button>
|
|
31
|
+
|
|
32
|
+
<div class="text-base font-bold">Store</div>
|
|
33
|
+
|
|
34
|
+
<div class="relative flex h-8 w-8 items-center justify-center rounded-full hover:bg-gray-100">
|
|
35
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
|
|
36
|
+
{#if cartCount > 0}
|
|
37
|
+
<span class="absolute right-0 top-0 flex h-4 min-w-4 items-center justify-center rounded-full bg-blue-600 px-0.5 text-[10px] font-bold text-white">{cartCount}</span>
|
|
38
|
+
{/if}
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<!-- Collapsible menu -->
|
|
43
|
+
{#if isOpen}
|
|
44
|
+
<div class="origin-top animate-in fade-in slide-in-from-top-2 border-t bg-white px-4 py-4 duration-300">
|
|
45
|
+
<!-- Search -->
|
|
46
|
+
<div class="mb-4 flex items-center rounded-lg border border-gray-300 bg-gray-50 px-3 py-2">
|
|
47
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="text-gray-400"><circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/></svg>
|
|
48
|
+
<input
|
|
49
|
+
type="text"
|
|
50
|
+
bind:value={searchQuery}
|
|
51
|
+
placeholder="Search..."
|
|
52
|
+
class="ml-2 flex-1 border-none bg-transparent text-sm outline-none placeholder:text-gray-500"
|
|
53
|
+
/>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<!-- Nav links -->
|
|
57
|
+
<div class="space-y-1 mb-4">
|
|
58
|
+
<a href="#" class="block rounded-md px-2 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100">Men</a>
|
|
59
|
+
<a href="#" class="block rounded-md px-2 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100">Women</a>
|
|
60
|
+
<a href="#" class="block rounded-md px-2 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100">Kids</a>
|
|
61
|
+
<a href="#" class="block rounded-md px-2 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100">New Arrivals</a>
|
|
62
|
+
<a href="#" class="block rounded-md px-2 py-2 text-sm font-medium text-gray-700 hover:bg-gray-100">Sale</a>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<hr class="my-3" />
|
|
66
|
+
|
|
67
|
+
<!-- User and cart links -->
|
|
68
|
+
<div class="space-y-1">
|
|
69
|
+
<button type="button" class="flex w-full items-center gap-2 rounded-md px-2 py-2 text-sm text-gray-700 hover:bg-gray-100">
|
|
70
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
|
|
71
|
+
Account
|
|
72
|
+
</button>
|
|
73
|
+
<button type="button" class="flex w-full items-center gap-2 rounded-md px-2 py-2 text-sm text-gray-700 hover:bg-gray-100">
|
|
74
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
|
|
75
|
+
Wishlist
|
|
76
|
+
</button>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
{/if}
|
|
80
|
+
</nav>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as StoreNavbar01 } from './StoreNavbar01.svelte';
|
|
2
|
+
export { default as StoreNavbar02 } from './StoreNavbar02.svelte';
|
|
3
|
+
export { default as StoreNavbar03 } from './StoreNavbar03.svelte';
|
|
4
|
+
export { default as StoreNavbar04 } from './StoreNavbar04.svelte';
|
|
5
|
+
export { default as StoreNavbar05 } from './StoreNavbar05.svelte';
|
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
description?: string;
|
|
9
|
+
searchPlaceholder?: string;
|
|
10
|
+
newLabel?: string;
|
|
11
|
+
onNew?: () => void;
|
|
12
|
+
onFilter?: () => void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
class: className,
|
|
17
|
+
title = 'Table name',
|
|
18
|
+
description = 'Read and write directly to databases and stores from your projects.',
|
|
19
|
+
searchPlaceholder = 'Search...',
|
|
20
|
+
newLabel = 'New',
|
|
21
|
+
onNew,
|
|
22
|
+
onFilter
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
|
|
25
|
+
let searchQuery = $state('');
|
|
26
|
+
|
|
27
|
+
// SVG Icons
|
|
28
|
+
const SearchIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.35-4.35"></path></svg>`;
|
|
29
|
+
|
|
30
|
+
const FilterIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18M7 12h10M11 18h2"></path></svg>`;
|
|
31
|
+
|
|
32
|
+
const PlusIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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><line x1="5" y1="12" x2="19" y2="12"></line></svg>`;
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<div class={cn('flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between', className)}>
|
|
36
|
+
<!-- Left: Title and Description -->
|
|
37
|
+
<div class="flex-1">
|
|
38
|
+
<h2 class="font-semibold">{title}</h2>
|
|
39
|
+
<p class="text-sm text-muted-foreground">{description}</p>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<!-- Right: Search, Filter, New (Desktop) -->
|
|
43
|
+
<div class="hidden sm:flex items-center gap-2">
|
|
44
|
+
<!-- Search Input -->
|
|
45
|
+
<div class="relative">
|
|
46
|
+
<div class="absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground">
|
|
47
|
+
{@html SearchIcon}
|
|
48
|
+
</div>
|
|
49
|
+
<input
|
|
50
|
+
type="text"
|
|
51
|
+
placeholder={searchPlaceholder}
|
|
52
|
+
bind:value={searchQuery}
|
|
53
|
+
class="pl-8 pr-3 py-2 border rounded-md bg-background text-sm w-64"
|
|
54
|
+
/>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<!-- Filter Button -->
|
|
58
|
+
<Button variant="outline" size="sm" onclick={onFilter}>
|
|
59
|
+
<span class="mr-1">{@html FilterIcon}</span>
|
|
60
|
+
Filters
|
|
61
|
+
</Button>
|
|
62
|
+
|
|
63
|
+
<!-- New Button -->
|
|
64
|
+
<Button onclick={onNew}>
|
|
65
|
+
<span class="mr-1">{@html PlusIcon}</span>
|
|
66
|
+
{newLabel}
|
|
67
|
+
</Button>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<!-- Mobile Layout -->
|
|
71
|
+
<div class="sm:hidden space-y-2 w-full">
|
|
72
|
+
<!-- New and Filter buttons row -->
|
|
73
|
+
<div class="flex gap-2">
|
|
74
|
+
<Button onclick={onNew} class="flex-1">
|
|
75
|
+
<span class="mr-1">{@html PlusIcon}</span>
|
|
76
|
+
{newLabel}
|
|
77
|
+
</Button>
|
|
78
|
+
<Button variant="outline" onclick={onFilter}>
|
|
79
|
+
<span>{@html FilterIcon}</span>
|
|
80
|
+
</Button>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<!-- Search Input -->
|
|
84
|
+
<div class="relative w-full">
|
|
85
|
+
<div class="absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground">
|
|
86
|
+
{@html SearchIcon}
|
|
87
|
+
</div>
|
|
88
|
+
<input
|
|
89
|
+
type="text"
|
|
90
|
+
placeholder={searchPlaceholder}
|
|
91
|
+
bind:value={searchQuery}
|
|
92
|
+
class="w-full pl-8 pr-3 py-2 border rounded-md bg-background text-sm"
|
|
93
|
+
/>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
@@ -0,0 +1,86 @@
|
|
|
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
|
+
description?: string;
|
|
9
|
+
dateRange?: string;
|
|
10
|
+
newLabel?: string;
|
|
11
|
+
onNew?: () => void;
|
|
12
|
+
onFilter?: () => void;
|
|
13
|
+
onDateRangeClick?: () => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
class: className,
|
|
18
|
+
title = 'Table name',
|
|
19
|
+
description = 'Read and write directly to databases and stores from your projects.',
|
|
20
|
+
dateRange = 'Jan 20, 2022 – Feb 09, 2022',
|
|
21
|
+
newLabel = 'New',
|
|
22
|
+
onNew,
|
|
23
|
+
onFilter,
|
|
24
|
+
onDateRangeClick
|
|
25
|
+
}: Props = $props();
|
|
26
|
+
|
|
27
|
+
// SVG Icons
|
|
28
|
+
const CalendarIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>`;
|
|
29
|
+
|
|
30
|
+
const FilterIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18M7 12h10M11 18h2"></path></svg>`;
|
|
31
|
+
|
|
32
|
+
const PlusIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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><line x1="5" y1="12" x2="19" y2="12"></line></svg>`;
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<div class={cn('flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between', className)}>
|
|
36
|
+
<!-- Left: Title and Description -->
|
|
37
|
+
<div class="flex-1">
|
|
38
|
+
<h2 class="font-semibold">{title}</h2>
|
|
39
|
+
<p class="text-sm text-muted-foreground">{description}</p>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<!-- Right: Date Range, Filter, New (Desktop) -->
|
|
43
|
+
<div class="hidden sm:flex items-center gap-2">
|
|
44
|
+
<!-- Date Range Button -->
|
|
45
|
+
<Button variant="outline" size="sm" onclick={onDateRangeClick} class="flex items-center gap-2">
|
|
46
|
+
<span>{@html CalendarIcon}</span>
|
|
47
|
+
{dateRange}
|
|
48
|
+
</Button>
|
|
49
|
+
|
|
50
|
+
<!-- Filter Button -->
|
|
51
|
+
<Button variant="outline" size="sm" onclick={onFilter}>
|
|
52
|
+
<span class="mr-1">{@html FilterIcon}</span>
|
|
53
|
+
Filters
|
|
54
|
+
</Button>
|
|
55
|
+
|
|
56
|
+
<!-- New Button -->
|
|
57
|
+
<Button onclick={onNew}>
|
|
58
|
+
<span class="mr-1">{@html PlusIcon}</span>
|
|
59
|
+
{newLabel}
|
|
60
|
+
</Button>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<!-- Mobile Layout -->
|
|
64
|
+
<div class="sm:hidden space-y-2 w-full">
|
|
65
|
+
<!-- New and Filters buttons row -->
|
|
66
|
+
<div class="flex gap-2">
|
|
67
|
+
<Button onclick={onNew} class="flex-1">
|
|
68
|
+
<span class="mr-1">{@html PlusIcon}</span>
|
|
69
|
+
{newLabel}
|
|
70
|
+
</Button>
|
|
71
|
+
<Button variant="outline" onclick={onFilter}>
|
|
72
|
+
<span>{@html FilterIcon}</span>
|
|
73
|
+
</Button>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<!-- Date Range Button -->
|
|
77
|
+
<Button
|
|
78
|
+
variant="outline"
|
|
79
|
+
onclick={onDateRangeClick}
|
|
80
|
+
class="w-full flex items-center justify-center gap-2"
|
|
81
|
+
>
|
|
82
|
+
<span>{@html CalendarIcon}</span>
|
|
83
|
+
{dateRange}
|
|
84
|
+
</Button>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
description?: string;
|
|
9
|
+
searchPlaceholder?: string;
|
|
10
|
+
newLabel?: string;
|
|
11
|
+
exportLabel?: string;
|
|
12
|
+
onNew?: () => void;
|
|
13
|
+
onExport?: () => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
class: className,
|
|
18
|
+
title = 'Table name',
|
|
19
|
+
description = 'Read and write directly to databases and stores from your projects.',
|
|
20
|
+
searchPlaceholder = 'Search...',
|
|
21
|
+
newLabel = 'New',
|
|
22
|
+
exportLabel = 'Export',
|
|
23
|
+
onNew,
|
|
24
|
+
onExport
|
|
25
|
+
}: Props = $props();
|
|
26
|
+
|
|
27
|
+
let searchQuery = $state('');
|
|
28
|
+
|
|
29
|
+
// SVG Icons
|
|
30
|
+
const SearchIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.35-4.35"></path></svg>`;
|
|
31
|
+
|
|
32
|
+
const ExportIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>`;
|
|
33
|
+
|
|
34
|
+
const PlusIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" 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><line x1="5" y1="12" x2="19" y2="12"></line></svg>`;
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<div class={cn('flex flex-col gap-4', className)}>
|
|
38
|
+
<!-- Row 1: Title + Description LEFT, Export + New RIGHT -->
|
|
39
|
+
<div class="flex items-start justify-between">
|
|
40
|
+
<div class="flex-1">
|
|
41
|
+
<h2 class="font-semibold">{title}</h2>
|
|
42
|
+
<p class="text-sm text-muted-foreground">{description}</p>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<!-- Desktop: Right side buttons -->
|
|
46
|
+
<div class="hidden sm:flex items-center gap-2">
|
|
47
|
+
<Button variant="outline" size="sm" onclick={onExport}>
|
|
48
|
+
<span class="mr-1">{@html ExportIcon}</span>
|
|
49
|
+
{exportLabel}
|
|
50
|
+
</Button>
|
|
51
|
+
<Button onclick={onNew}>
|
|
52
|
+
<span class="mr-1">{@html PlusIcon}</span>
|
|
53
|
+
{newLabel}
|
|
54
|
+
</Button>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<!-- Row 2: Search LEFT (Desktop) -->
|
|
59
|
+
<div class="hidden sm:flex items-center gap-2">
|
|
60
|
+
<div class="relative w-64">
|
|
61
|
+
<div class="absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground">
|
|
62
|
+
{@html SearchIcon}
|
|
63
|
+
</div>
|
|
64
|
+
<input
|
|
65
|
+
type="text"
|
|
66
|
+
placeholder={searchPlaceholder}
|
|
67
|
+
bind:value={searchQuery}
|
|
68
|
+
class="w-full pl-8 pr-3 py-2 border rounded-md bg-background text-sm"
|
|
69
|
+
/>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
<!-- Mobile Layout -->
|
|
74
|
+
<div class="sm:hidden space-y-2 w-full">
|
|
75
|
+
<!-- New + Export buttons -->
|
|
76
|
+
<div class="flex gap-2">
|
|
77
|
+
<Button onclick={onNew} class="flex-1">
|
|
78
|
+
<span class="mr-1">{@html PlusIcon}</span>
|
|
79
|
+
{newLabel}
|
|
80
|
+
</Button>
|
|
81
|
+
<Button variant="outline" onclick={onExport}>
|
|
82
|
+
<span>{@html ExportIcon}</span>
|
|
83
|
+
</Button>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<!-- Search Input -->
|
|
87
|
+
<div class="relative w-full">
|
|
88
|
+
<div class="absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground">
|
|
89
|
+
{@html SearchIcon}
|
|
90
|
+
</div>
|
|
91
|
+
<input
|
|
92
|
+
type="text"
|
|
93
|
+
placeholder={searchPlaceholder}
|
|
94
|
+
bind:value={searchQuery}
|
|
95
|
+
class="w-full pl-8 pr-3 py-2 border rounded-md bg-background text-sm"
|
|
96
|
+
/>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
@@ -0,0 +1,107 @@
|
|
|
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
|
+
description?: string;
|
|
9
|
+
tabs?: string[];
|
|
10
|
+
onTabChange?: (tab: string) => void;
|
|
11
|
+
onExport?: () => void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const {
|
|
15
|
+
class: className,
|
|
16
|
+
title = 'Table name',
|
|
17
|
+
description = 'Read and write directly to databases and stores from your projects.',
|
|
18
|
+
tabs = ['All', 'Sent', 'Paid', 'Unpaid'],
|
|
19
|
+
onTabChange,
|
|
20
|
+
onExport
|
|
21
|
+
}: Props = $props();
|
|
22
|
+
|
|
23
|
+
let activeTab = $state(tabs[0]);
|
|
24
|
+
let searchQuery = $state('');
|
|
25
|
+
|
|
26
|
+
function handleTabChange(tab: string) {
|
|
27
|
+
activeTab = tab;
|
|
28
|
+
onTabChange?.(tab);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// SVG Icons
|
|
32
|
+
const SearchIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><path d="m21 21-4.35-4.35"></path></svg>`;
|
|
33
|
+
|
|
34
|
+
const ExportIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>`;
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<div class={cn('flex flex-col gap-4', className)}>
|
|
38
|
+
<!-- Row 1: Title + Description -->
|
|
39
|
+
<div>
|
|
40
|
+
<h2 class="font-semibold">{title}</h2>
|
|
41
|
+
<p class="text-sm text-muted-foreground">{description}</p>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<!-- Row 2: Tab filters LEFT, Search + Export RIGHT (Desktop) -->
|
|
45
|
+
<div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
|
46
|
+
<!-- Tabs -->
|
|
47
|
+
<div class="flex gap-1 overflow-x-auto pb-2 sm:pb-0">
|
|
48
|
+
{#each tabs as tab}
|
|
49
|
+
<button
|
|
50
|
+
class={cn(
|
|
51
|
+
'px-3 py-1 rounded-full text-sm whitespace-nowrap transition-colors',
|
|
52
|
+
activeTab === tab
|
|
53
|
+
? 'bg-foreground text-background'
|
|
54
|
+
: 'text-muted-foreground hover:text-foreground'
|
|
55
|
+
)}
|
|
56
|
+
onclick={() => handleTabChange(tab)}
|
|
57
|
+
>
|
|
58
|
+
{tab}
|
|
59
|
+
</button>
|
|
60
|
+
{/each}
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<!-- Desktop: Search + Export -->
|
|
64
|
+
<div class="hidden sm:flex items-center gap-2">
|
|
65
|
+
<!-- Search Input -->
|
|
66
|
+
<div class="relative w-56">
|
|
67
|
+
<div class="absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground">
|
|
68
|
+
{@html SearchIcon}
|
|
69
|
+
</div>
|
|
70
|
+
<input
|
|
71
|
+
type="text"
|
|
72
|
+
placeholder="Search..."
|
|
73
|
+
bind:value={searchQuery}
|
|
74
|
+
class="w-full pl-8 pr-3 py-2 border rounded-md bg-background text-sm"
|
|
75
|
+
/>
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<!-- Export Button -->
|
|
79
|
+
<Button variant="outline" size="sm" onclick={onExport}>
|
|
80
|
+
<span class="mr-1">{@html ExportIcon}</span>
|
|
81
|
+
Export
|
|
82
|
+
</Button>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<!-- Mobile: Search + Export below tabs -->
|
|
87
|
+
<div class="sm:hidden flex flex-col gap-2">
|
|
88
|
+
<!-- Search Input -->
|
|
89
|
+
<div class="relative w-full">
|
|
90
|
+
<div class="absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground">
|
|
91
|
+
{@html SearchIcon}
|
|
92
|
+
</div>
|
|
93
|
+
<input
|
|
94
|
+
type="text"
|
|
95
|
+
placeholder="Search..."
|
|
96
|
+
bind:value={searchQuery}
|
|
97
|
+
class="w-full pl-8 pr-3 py-2 border rounded-md bg-background text-sm"
|
|
98
|
+
/>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<!-- Export Button -->
|
|
102
|
+
<Button variant="outline" size="sm" onclick={onExport} class="w-full justify-center">
|
|
103
|
+
<span class="mr-1">{@html ExportIcon}</span>
|
|
104
|
+
Export
|
|
105
|
+
</Button>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|