├── .gitignore ├── .vscode └── settings.json ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── app ├── api │ └── subscribe │ │ └── route.ts ├── blog │ ├── [slug] │ │ └── page.tsx │ └── page.tsx ├── components │ ├── [slug] │ │ └── page.tsx │ ├── layout.tsx │ └── page.tsx ├── customize.css ├── demo │ └── page.tsx ├── favicon.ico ├── layout.tsx ├── license │ └── page.tsx ├── page.tsx ├── prismjs-theme.css ├── privacy-policy │ └── page.tsx ├── robots.txt ├── sitemap.xml │ └── route.tsx ├── tailwind.css └── templates │ ├── [slug] │ └── page.tsx │ └── page.tsx ├── components ├── BlurBackground.tsx ├── HeroBgGradient.tsx ├── HighlightCodeSeobot.tsx ├── LazyMotionWrapper.tsx ├── MDXRemoteClient.tsx ├── SyntaxHeighlight.tsx ├── UsermavenSetup.tsx ├── icons │ ├── IconAlpinejs.tsx │ ├── IconArrowsexpandLeft.tsx │ ├── IconBxCustomize.tsx │ ├── IconGithub.tsx │ ├── IconHTML.tsx │ ├── IconLoading.tsx │ ├── IconPennibLine.tsx │ ├── IconRadix.tsx │ ├── IconRadixVue.tsx │ ├── IconReact.tsx │ ├── IconSvelte.tsx │ ├── IconVue.tsx │ └── index.ts ├── ui │ ├── Banner │ │ └── Banner.tsx │ ├── BgGradient │ │ └── index.tsx │ ├── BlogCard │ │ └── index.tsx │ ├── Brand │ │ └── index.tsx │ ├── Button.tsx │ ├── Button │ │ └── index.tsx │ ├── CTA │ │ └── index.tsx │ ├── CodeBlockContainer │ │ └── index.tsx │ ├── CodeSwitchBar │ │ └── index.tsx │ ├── DemoHeader │ │ ├── DemoHeader.tsx │ │ └── index.ts │ ├── Features │ │ ├── Card.tsx │ │ └── Features.tsx │ ├── Footer │ │ ├── BgGradient.tsx │ │ ├── BorderGradient.tsx │ │ ├── Footer.tsx │ │ └── index.tsx │ ├── Hero │ │ ├── HeroBgGradient.Client.tsx │ │ └── index.tsx │ ├── Input.tsx │ ├── LinkItem │ │ └── index.tsx │ ├── Modal.tsx │ ├── Navbar │ │ ├── Navbar.tsx │ │ └── index.tsx │ ├── NewsletterModal.tsx │ ├── Pagination.tsx │ ├── Preview │ │ ├── PreviewApp.tsx │ │ └── index.tsx │ ├── PreviewSwitch │ │ └── index.tsx │ ├── Sidebar │ │ ├── NavLink.tsx │ │ └── index.tsx │ ├── SupportedFrameworks │ │ ├── FrameworksTabs.tsx │ │ ├── PreviewCard.tsx │ │ └── index.tsx │ ├── SupportedLibraries │ │ └── index.tsx │ ├── Tabs │ │ └── TabsTrigger.tsx │ ├── TechStackSwitch │ │ └── index.tsx │ ├── TemplateCTA │ │ ├── BgGradient.tsx │ │ ├── TemplateScoresCard.tsx │ │ ├── TemplatesOverview.tsx │ │ └── index.tsx │ ├── TemplateCard │ │ └── index.tsx │ └── TemplateTechStackGroup │ │ └── index.tsx └── variants.ts ├── componentsDB ├── 404-pages │ ├── 404-pages-1d62afb9a2ef.mdx │ ├── 404-pages-708eee4dee17.mdx │ ├── 404-pages-7b5bede66a5a.mdx │ ├── 404-pages-c9848c731519.mdx │ └── 404-pages-f1893ab05a18.mdx ├── alerts │ ├── alerts-33daaccc81a4.mdx │ ├── alerts-36e2604247e4.mdx │ ├── alerts-390c5560fd91.mdx │ ├── alerts-3d27dee362d8.mdx │ ├── alerts-55b9ab92ee04.mdx │ ├── alerts-65b5b4c38bb2.mdx │ ├── alerts-8d1a64022159.mdx │ ├── alerts-a978a607c455.mdx │ ├── alerts-e6aaeb7bc81e.mdx │ └── alerts-f055417b0bad.mdx ├── authentication │ ├── authentication-0279bd4dcc2e.mdx │ ├── authentication-2bb4e0e2d823.mdx │ ├── authentication-855af584e04d.mdx │ ├── authentication-ccedb97166eb.mdx │ ├── authentication-e7cb4f182d2b.mdx │ ├── authentication-fa7eb93bd2dc.mdx │ └── authentication-fff7c32ba871.mdx ├── avatars │ ├── avatars-4dd84fe1128c.mdx │ ├── avatars-5049f63b8118.mdx │ ├── avatars-607a4a2b5277.mdx │ ├── avatars-b8e20075f87f.mdx │ ├── avatars-ca5a7f080a8c.mdx │ ├── avatars-ef97d419a9e5.mdx │ └── avatars-fc855c570b20.mdx ├── banners │ ├── banners-11f7f6dccd6e.mdx │ ├── banners-2e2d3671c0e4.mdx │ ├── banners-46041cc55332.mdx │ ├── banners-53081c4f88bd.mdx │ └── banners-8d9e23203788.mdx ├── buttons │ ├── buttons-5fbbbed09f14.mdx │ ├── buttons-60c1afc75839.mdx │ ├── buttons-69b2beb4ac19.mdx │ ├── buttons-a983b34d398a.mdx │ ├── buttons-aa6606ba23eb.mdx │ ├── buttons-b066c674da1a.mdx │ ├── buttons-b77496133191.mdx │ ├── buttons-e68a4d95ea0b.mdx │ └── buttons-f6e5363f7c55.mdx ├── cards │ ├── cards-061d2f1b44aa.mdx │ ├── cards-3d8d50b659a2.mdx │ ├── cards-547248cd873c.mdx │ ├── cards-7c3fba8fdac8.mdx │ ├── cards-87c624cfe2b7.mdx │ ├── cards-8ea106d2c788.mdx │ ├── cards-903c1360e7a1.mdx │ └── cards-c787d27b744d.mdx ├── contact-sections │ ├── contact-sections-003dafb73af4.mdx │ ├── contact-sections-43d51106e45f.mdx │ ├── contact-sections-76753a93c670.mdx │ ├── contact-sections-b12dd074a93c.mdx │ ├── contact-sections-ba7f2ec93e91.mdx │ └── contact-sections-cdaf2076140b.mdx ├── context-menus │ ├── context-menus-423e9edb1d58.mdx │ └── context-menus-a6712d74dd3d.mdx ├── cta-sections │ ├── cta-sections-1342b0427082.mdx │ ├── cta-sections-2e249de5a055.mdx │ ├── cta-sections-409aef4b3a69.mdx │ ├── cta-sections-41e14d6153a5.mdx │ ├── cta-sections-636e1d3a29de.mdx │ ├── cta-sections-86d95ad05b9c.mdx │ ├── cta-sections-89d412ecb171.mdx │ ├── cta-sections-92e2a79c2046.mdx │ └── cta-sections-c7b9c2dbbf6a.mdx ├── faqs │ ├── faqs-356f7ea0f73c.mdx │ ├── faqs-79884cc45412.mdx │ ├── faqs-7c1180404b4e.mdx │ ├── faqs-86cc9726a658.mdx │ ├── faqs-889e74f80cc3.mdx │ ├── faqs-9a15d33ef2b1.mdx │ └── faqs-b513b3100d76.mdx ├── feature-sections │ ├── feature-sections-213e46f0ea1d.mdx │ ├── feature-sections-2f2324b0f00e.mdx │ ├── feature-sections-7cd43fad37ba.mdx │ ├── feature-sections-833f29c8bf32.mdx │ ├── feature-sections-94f8250449f9.mdx │ ├── feature-sections-afa753ebec53.mdx │ ├── feature-sections-cc6a507c2c59.mdx │ └── feature-sections-f80a7ff2efcf.mdx ├── footers │ ├── footers-0da45f93945f.mdx │ ├── footers-181aeccbae3c.mdx │ ├── footers-3477ba81914f.mdx │ ├── footers-4f697cf07807.mdx │ ├── footers-7adb1d10aa04.mdx │ └── footers-c68b86ce5cab.mdx ├── heroes │ ├── heroes-40b102808fb4.mdx │ ├── heroes-6424ed2d84bc.mdx │ ├── heroes-799910ad7f15.mdx │ ├── heroes-88a21442bae9.mdx │ ├── heroes-8cbb7080120b.mdx │ ├── heroes-acaa71156254.mdx │ ├── heroes-ce11e6ea7764.mdx │ └── heroes-e5fdc83c631d.mdx ├── inputs │ ├── inputs-076325d8e787.mdx │ ├── inputs-0abece2c72f5.mdx │ ├── inputs-65adedb2e30a.mdx │ ├── inputs-7b42ef3d3325.mdx │ ├── inputs-97bcab681cbc.mdx │ ├── inputs-9c0928e9bc52.mdx │ ├── inputs-a3ba8df65622.mdx │ ├── inputs-bf0855c269f3.mdx │ ├── inputs-e9e3f04488a4.mdx │ ├── inputs-f28b45e133a6.mdx │ └── inputs-ff2bb089cf05.mdx ├── logo-grid │ ├── logo-grid-2edeee98b168.mdx │ ├── logo-grid-332c0905193d.mdx │ ├── logo-grid-3f0796669114.mdx │ ├── logo-grid-b149d44095d0.mdx │ └── logo-grid-b8ad04c3687b.mdx ├── modals │ ├── modals-20821fae4e94.mdx │ ├── modals-309ee3e4092f.mdx │ ├── modals-7137f8a56e6f.mdx │ ├── modals-f0ec64cd480f.mdx │ └── modals-f34e78b6c647.mdx ├── navbars │ ├── navbars-36483e9519a4.mdx │ ├── navbars-38e9a45102dd.mdx │ ├── navbars-5ec32b832d4e.mdx │ ├── navbars-9a1c9a6ece9c.mdx │ ├── navbars-b54a69f7bab4.mdx │ ├── navbars-d6a3586b937a.mdx │ └── navbars-fb7b2b1ac194.mdx ├── newsletters │ ├── newsletters-0f3f45dbf6bd.mdx │ ├── newsletters-17b9b4f5c0d1.mdx │ ├── newsletters-27789200531b.mdx │ ├── newsletters-82b1fb03588f.mdx │ ├── newsletters-c6c50b23117d.mdx │ └── newsletters-ea1c994cea5c.mdx ├── paginations │ ├── paginations-1311e1782604.mdx │ ├── paginations-1e4d4591c1cb.mdx │ ├── paginations-7ba0a8fc0441.mdx │ └── paginations-dd626f42a498.mdx ├── pricing-sections │ ├── pricing-sections-12db7f5f43a1.mdx │ ├── pricing-sections-4ebb20d66a92.mdx │ ├── pricing-sections-57658d06d0ae.mdx │ ├── pricing-sections-5a219949cdf6.mdx │ ├── pricing-sections-97d1254e5c48.mdx │ └── pricing-sections-ef544e8e316c.mdx ├── radio-groups │ ├── radio-groups-10e410e23333.mdx │ ├── radio-groups-2a2ede791219.mdx │ ├── radio-groups-6f7c3873442d.mdx │ └── radio-groups-da29db262e3a.mdx ├── section-headers │ ├── section-headers-0e48b8f61cbf.mdx │ ├── section-headers-1bb6aac58666.mdx │ ├── section-headers-a50f5cf7b48d.mdx │ ├── section-headers-bc6f81d07d99.mdx │ └── section-headers-cad019ac8b7d.mdx ├── select-menus │ ├── select-menus-3b23bd8a97e1.mdx │ ├── select-menus-6346a9db37da.mdx │ ├── select-menus-757dbb5bff06.mdx │ ├── select-menus-8f8830d17b53.mdx │ ├── select-menus-97760aa45255.mdx │ ├── select-menus-ad8f8006c239.mdx │ └── select-menus-c864235a7a0a.mdx ├── sidebars │ ├── sidebars-1f142eb36aba.mdx │ ├── sidebars-8d301e81fb4d.mdx │ ├── sidebars-ad4b5210ef57.mdx │ └── sidebars-f462b4d034da.mdx ├── stats │ ├── stats-107fcab08c89.mdx │ ├── stats-146359b8ee6f.mdx │ ├── stats-37f2976dd0e8.mdx │ ├── stats-5081ec2639f3.mdx │ ├── stats-7f0b9d26569a.mdx │ └── stats-aa9fbac873a9.mdx ├── steps │ ├── steps-12ae72a1a7d4.mdx │ ├── steps-79a787b6535e.mdx │ ├── steps-7b010f6574f6.mdx │ ├── steps-a9dfb5212762.mdx │ └── steps-dd28d0306f17.mdx ├── tables │ ├── tables-263cf08c1c36.mdx │ ├── tables-26d85d4a0cc6.mdx │ ├── tables-4fc343d81b73.mdx │ ├── tables-5304dcf25d65.mdx │ ├── tables-7ac34fe1bc83.mdx │ ├── tables-7f4565159e80.mdx │ ├── tables-9513f502a160.mdx │ └── tables-ee6597e4652c.mdx ├── tabs │ ├── tabs-47e5f52687cd.mdx │ ├── tabs-519ce1885d98.mdx │ ├── tabs-a5e1caa4ba5a.mdx │ ├── tabs-bb5a5023cf65.mdx │ ├── tabs-edec7e621082.mdx │ └── tabs-ef72b74a807f.mdx ├── team-sections │ ├── team-sections-5097f1bf7638.mdx │ ├── team-sections-55ff68e2a191.mdx │ ├── team-sections-569a052486c0.mdx │ ├── team-sections-5918c241d485.mdx │ ├── team-sections-59fca7b97734.mdx │ └── team-sections-eb43deb82099.mdx └── testimonials │ ├── testimonials-534b038c5538.mdx │ ├── testimonials-720e7cffa4c1.mdx │ ├── testimonials-9bfcf6d81808.mdx │ ├── testimonials-a39a1e4c35c3.mdx │ ├── testimonials-dd1b11b8b66b.mdx │ └── testimonials-f74dfcd40d23.mdx ├── componentsNames.ts ├── content ├── intro.mdx └── license.mdx ├── demo ├── alerts-33daaccc81a4.mdx ├── alerts-36e2604247e4.mdx ├── alerts-3d27dee362d8.mdx ├── alerts-8d1a64022159.mdx ├── authentication-0279bd4dcc2e.mdx ├── authentication-2bb4e0e2d823.mdx ├── authentication-855af584e04d.mdx ├── banners-2e2d3671c0e4.mdx ├── banners-46041cc55332.mdx ├── banners-53081c4f88bd.mdx ├── cards-547248cd873c.mdx ├── cards-7c3fba8fdac8.mdx ├── cards-8ea106d2c788.mdx ├── cards-903c1360e7a1.mdx ├── contact-sections-003dafb73af4.mdx ├── contact-sections-b12dd074a93c.mdx ├── contact-sections-cdaf2076140b.mdx ├── footers-0da45f93945f.mdx ├── footers-181aeccbae3c.mdx ├── heroes-40b102808fb4.mdx ├── heroes-8cbb7080120b.mdx ├── heroes-acaa71156254.mdx ├── heroes-ce11e6ea7764.mdx ├── inputs-0abece2c72f5.mdx ├── inputs-97bcab681cbc.mdx ├── inputs-e9e3f04488a4.mdx ├── inputs-f28b45e133a6.mdx ├── modals-20821fae4e94.mdx ├── modals-309ee3e4092f.mdx ├── modals-f34e78b6c647.mdx ├── navbars-36483e9519a4.mdx ├── navbars-5ec32b832d4e.mdx ├── navbars-fb7b2b1ac194.mdx ├── newsletters-17b9b4f5c0d1.mdx ├── newsletters-27789200531b.mdx ├── newsletters-ea1c994cea5c.mdx ├── pricing-sections-4ebb20d66a92.mdx ├── pricing-sections-57658d06d0ae.mdx ├── pricing-sections-5a219949cdf6.mdx ├── pricing-sections-ef544e8e316c.mdx ├── steps-12ae72a1a7d4.mdx ├── steps-7b010f6574f6.mdx ├── steps-dd28d0306f17.mdx ├── tables-263cf08c1c36.mdx ├── tables-4fc343d81b73.mdx ├── tables-7ac34fe1bc83.mdx ├── tables-ee6597e4652c.mdx ├── tabs-47e5f52687cd.mdx ├── tabs-a5e1caa4ba5a.mdx ├── tabs-edec7e621082.mdx ├── team-sections-55ff68e2a191.mdx ├── team-sections-569a052486c0.mdx └── team-sections-eb43deb82099.mdx ├── firebase └── config.ts ├── metatag.ts ├── next-env.d.ts ├── next.config.js ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── posts └── getting-started.mdx ├── previewsComponents ├── FUI404PageWithImage.jsx ├── FUI404PageWithListOfItems.jsx ├── FUI404PageWithLogo.jsx ├── FUIAlertDanger.jsx ├── FUIAlertDangerWithDescription.jsx ├── FUIAlertDangerWithLink.jsx ├── FUIAlertInfo.jsx ├── FUIAlertInfoLinear.jsx ├── FUIAlertInfoWithLink.jsx ├── FUIAlertSuccess.jsx ├── FUIAlertSuccessWithLink.jsx ├── FUIAlertWarning.jsx ├── FUIAlertWarningWithBorder.jsx ├── FUIAmountInput.jsx ├── FUIAmountInputWithSelectInRight.jsx ├── FUIAvatarGroupStacked.jsx ├── FUIAvatarGroupStackedWithJoinButton.jsx ├── FUIAvatarGroupStackedWithText.jsx ├── FUIAvatarWithLinkAndButton.jsx ├── FUIAvatars.jsx ├── FUIAvatarsWithInfo.jsx ├── FUIAvatarsWithNotification.jsx ├── FUIBannerCentred.jsx ├── FUIBannerCentredWithBadge.jsx ├── FUIBannerCentredWithLink.jsx ├── FUIBannerWithLink.jsx ├── FUIBannerWithUnderlineLink.jsx ├── FUIBasic404Page.jsx ├── FUIBasicContextMenu.jsx ├── FUIBasicFeatureSection.jsx ├── FUIBasicLoginForm.jsx ├── FUIBasicPricingSection.jsx ├── FUIBasicRadioGroup.jsx ├── FUIBasicStats.jsx ├── FUIBasicSteps.jsx ├── FUIBasicTable.jsx ├── FUIBasicTabs.jsx ├── FUIBlogCardsPrimary.jsx ├── FUIBlogCardsSecondary.jsx ├── FUIBlogSectionWithPostsCard.jsx ├── FUIButtonsWithIconAndText.jsx ├── FUIButtonsWithIcons.jsx ├── FUIButtonsWithLowColors.jsx ├── FUIButtonsWithShadow.jsx ├── FUICentered404PageWithTowLinks.jsx ├── FUICenteredContactSection.jsx ├── FUICentredCta.jsx ├── FUICentredCtaWithTwoLinks.jsx ├── FUIColorPickerRadioGroup.jsx ├── FUIContactSectionWithDividedColumns.jsx ├── FUIContactSectionWithFourColumns.jsx ├── FUIContactSectionWithImage.jsx ├── FUIContactSectionWithInfo.jsx ├── FUIContextMenuWithSubmenu.jsx ├── FUICtaWithBlueBackground.jsx ├── FUICtaWithImage.jsx ├── FUICtaWithLinkOnTheSide.jsx ├── FUIDarkContactSection.jsx ├── FUIDarkCta.jsx ├── FUIDarkCtaWithLinkOnTheSide.jsx ├── FUIDarkFaqsWithDividedRows.jsx ├── FUIDarkFeatureSection.jsx ├── FUIDarkFooter.jsx ├── FUIDarkHeroSection.jsx ├── FUIDarkLogoGrid.jsx ├── FUIDarkPricingSectionWithTwoPlans.jsx ├── FUIDarkStats.jsx ├── FUIDarkStatsWithInCards.jsx ├── FUIDefaultButtonsWithIcons.jsx ├── FUIDefaultSelectMenu.jsx ├── FUIDisabledButtons.jsx ├── FUIDividedFeatureSection.jsx ├── FUIDividedLogoGrid.jsx ├── FUIEmailInput.jsx ├── FUIFaqsWithDividedRows.jsx ├── FUIFaqsWithSearchBox.jsx ├── FUIFaqsWithShadow.jsx ├── FUIFaqsWithTitles.jsx ├── FUIFeatureSectionWithCards.jsx ├── FUIFeatureSectionWithCheckIcons.jsx ├── FUIFeatureSectionWithImage.jsx ├── FUIFeatureSectionWithLinks.jsx ├── FUIFeatureSectionWithThreeColumns.jsx ├── FUIFooterWithDescriptionAndTitle.jsx ├── FUIFooterWithDownloadLinks.jsx ├── FUIFooterWithNewsletter.jsx ├── FUIHeroSectionWithBottomImage.jsx ├── FUIHeroSectionWithGradientBackground.jsx ├── FUIHeroSectionWithImage.jsx ├── FUIHeroSectionWithLogoClouds.jsx ├── FUIHeroSectionWithVideo.jsx ├── FUIIntegrationsCard.jsx ├── FUIJobCards.jsx ├── FUIJobCardsWithInformation.jsx ├── FUILoginWithGoogleProvider.jsx ├── FUILoginWithGridProvider.jsx ├── FUILoginWithListedProvider.jsx ├── FUILogoGridWithHeader.jsx ├── FUILogoGridWithTitle.jsx ├── FUILogoGridWithTowRows.jsx ├── FUIModalDanger.jsx ├── FUIModalDialog.jsx ├── FUIModalSuccess.jsx ├── FUIModalWithNewsletter.jsx ├── FUIModalWithShareableLink.jsx ├── FUINavbarWithAdvencedDropdown.jsx ├── FUINavbarWithBlackButton.jsx ├── FUINavbarWithDividedItems.jsx ├── FUINavbarWithSearchBox.jsx ├── FUINavbarWithSubmenu.jsx ├── FUINewsletterStacked.jsx ├── FUINewsletterWithAGradientBackground.jsx ├── FUINewsletterWithBackground.jsx ├── FUINewsletterWithDescription.jsx ├── FUIPaginationStacked.jsx ├── FUIPaginationWithCurrentPageInfo.jsx ├── FUIPaginationWithPreviousAndNextLink.jsx ├── FUIPasswordInput.jsx ├── FUIPaymentCardsRadioGroup.jsx ├── FUIPhoneNumberInput.jsx ├── FUIPricingCardsRadioGroup.jsx ├── FUIPricingSectionWithBadge.jsx ├── FUIPricingSectionWithOnePlan.jsx ├── FUIPricingSectionWithTable.jsx ├── FUIPricingSectionWithTwoPlans.jsx ├── FUIPrimaryButtons.jsx ├── FUIPrimaryCta.jsx ├── FUIPrimaryFaqs.jsx ├── FUIPrimaryFooter.jsx ├── FUIPrimaryHeroSection.jsx ├── FUIPrimaryNavbar.jsx ├── FUIPrimaryNewsletter.jsx ├── FUIPrimarySelectMenu.jsx ├── FUIRoundedButtons.jsx ├── FUISearchInput.jsx ├── FUISearchInputWithSelectMenu.jsx ├── FUISearchInputWithSelectMenuAndAvatars.jsx ├── FUISecondaryButtons.jsx ├── FUISecondaryCta.jsx ├── FUISecondaryFaqs.jsx ├── FUISecondaryFooter.jsx ├── FUISecondaryHeroSection.jsx ├── FUISecondaryNavbar.jsx ├── FUISecondaryNewsletter.jsx ├── FUISectionHeaderWithButtons.jsx ├── FUISectionHeaderWithButtonsAndNavigations.jsx ├── FUISectionHeaderWithDescriptionAndButton.jsx ├── FUISectionHeaderWithNavigations.jsx ├── FUISectionHeaderWithSearchBox.jsx ├── FUISelectMenuWithAvatars.jsx ├── FUISelectMenuWithIcon.jsx ├── FUISelectMenuWithSearchBox.jsx ├── FUISelectMenuWithSearchBox2.jsx ├── FUISidebarWithItemsInBottom.jsx ├── FUISidebarWithListOfLessons.jsx ├── FUISidebarWithSubmenu.jsx ├── FUISidebarWithTooltip.jsx ├── FUISignUpWithGoogleProvider.jsx ├── FUISignUpWithLeftBackground.jsx ├── FUISignUpWithNameEmailPasswordOrGoogle.jsx ├── FUIStatsOnTheSide.jsx ├── FUIStatsWithImage.jsx ├── FUIStatsWithTitleAndDescription.jsx ├── FUIStatusSelectMenu.jsx ├── FUIStepsWithChevrons.jsx ├── FUIStepsWithLine.jsx ├── FUIStepsWithTitlesOnTheBottom.jsx ├── FUIStepsWithTitlesOnTheSide.jsx ├── FUITableWithAvatars.jsx ├── FUITableWithAvatarsAndEditDelete.jsx ├── FUITableWithBorderedColumn.jsx ├── FUITableWithCheckbox.jsx ├── FUITableWithEditAndDelete.jsx ├── FUITableWithManageButton.jsx ├── FUITableWithTabs.jsx ├── FUITabsWithBackgroundColor.jsx ├── FUITabsWithIcons.jsx ├── FUITabsWithoutUnderline.jsx ├── FUITeamMembersCard.jsx ├── FUITeamSectionCentredWithLargeImages.jsx ├── FUITeamSectionWithAvatars.jsx ├── FUITeamSectionWithCentredAvatars.jsx ├── FUITeamSectionWithInfo.jsx ├── FUITeamSectionWithVerticalImages.jsx ├── FUITeamWithLargeAvatars.jsx ├── FUITestimonialCentered.jsx ├── FUITestimonialCenteredWithLogo.jsx ├── FUITestimonialGrid.jsx ├── FUITestimonialWithBackgroundColor.jsx ├── FUITestimonialWithSlider.jsx ├── FUITestimonialWithThreeColumn.jsx ├── FUIUploadFileCard.jsx ├── FUIUsernameInput.jsx ├── FUIVerificationCodeInput.jsx ├── FUIVerticalTabs.jsx ├── FUIVerticalTabsWithoutLine.jsx ├── FUIWebsiteUrlInput.jsx └── FUIWithPreviousAndNextLink.jsx ├── public ├── feature-cover.svg ├── icons │ ├── nextjs.svg │ ├── reactjs.svg │ ├── tailwind.svg │ └── vuejs.svg ├── images │ ├── fb-icon.svg │ ├── logo.svg │ └── tw-icon.svg ├── logo-dark.svg ├── logo-letter.png ├── logo.svg ├── preview-1.svg ├── preview-2.svg ├── preview-3.svg ├── robots.txt ├── tailwind.css ├── templates │ ├── blinder.png │ ├── ioacademy.png │ ├── mailgo.png │ ├── split.png │ └── starboard.png ├── thumbnail.png ├── thumbnails │ ├── Alerts.png │ ├── Authentication.png │ ├── Avatars.png │ ├── Banner.png │ ├── Buttons.png │ ├── CTA-Section.png │ ├── Cards.png │ ├── Contact.png │ ├── Context-menu.png │ ├── FAQS.png │ ├── Feature.png │ ├── Footers.png │ ├── Heroes.png │ ├── Inputs.png │ ├── Logo.png │ ├── Modals.png │ ├── Navbars.png │ ├── Newsletter.png │ ├── Pagination.png │ ├── Pricing.png │ ├── Radio.png │ ├── Section-Header.png │ ├── Select-Menus.png │ ├── Sidebar.png │ ├── Stats.png │ ├── Steps.png │ ├── Table.png │ ├── Tabs.png │ ├── Team.png │ ├── Testimonial.png │ └── page404.png ├── tw-output.css └── up-logo.svg ├── readme ├── 1.png ├── 2.png ├── 3.png └── 4.png ├── sections └── sections.json ├── styles ├── customize.css ├── prismjs-theme.css └── tailwind.css ├── tailwind.config.js ├── tsconfig.json ├── types └── types.ts ├── utils ├── mergeTW.ts ├── seobot.ts └── supportedFrameworksJSON.ts └── viewport ├── components └── Viewport.tsx ├── index.tsx └── template └── index.ts /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | .env 33 | 34 | # vercel 35 | .vercel 36 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib", 3 | "typescript.enablePromptUseWorkspaceTsdk": true 4 | } -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Float UI 2 | 3 | Looking to contribute something to Float UI? Whether you’re a designer, developer, or just an enthusiastic user, we’d love to hear your ideas and feedback. **Here are a few guidelines that will help you along the way.** 4 | 5 | ## Feature requests 6 | 7 | Feature requests are welcome. But take a moment to find out whether your idea 8 | fits with the scope and aims of the project. Please 9 | provide as much detail and context as possible, and ask first before starting work on any significant new features. 10 | 11 | ## Pull requests 12 | 13 | Good pull requests patches, improvements, new features, components, website templates, typos are a fantastic 14 | help. They should remain focused in scope and avoid containing unrelated 15 | commits. 16 | 17 | - **UI components:** you can improve, or fix a bug in an existing component, and to add a new component, please make sure it's unique, modern, responsive, and not duplicated, or taken from another platform, here are few steps you can follow to submit your component: 18 |
19 | 1 - Enter this directory "UIcomponents/LTR".
20 | 2 - Enter the component section you want to add your component to, for example: "UIcomponents/LTR/heroes". 21 |
22 | 3 - Create component file and add your code for example "UIcomponents/LTR/heroes/HeroWithLargeImage.jsx" and create a pull request. 23 | 24 | - **Website templates:** you can improve, or fix a bug in an existing template, and to submit a new template, please make sure it's unique, modern, responsive, not duplicated, or taken from another platform, and follow best practices, here are few steps you can follow to submit your template: 25 | 1 - Create your template using Nextjs and use best practices. 26 |
27 | 2 - Push your code to Github. 28 |
29 | 3 - Deploy your template on Vercel and open a new Feature request. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Float UI logo 3 |

4 | 5 | Float UI is a collection of modern UI components and website templates built on top of React, and soon, Vue. With Tailwind CSS, the components are beautifully designed and expertly crafted, allowing you to build beautiful websites. 6 | 7 | ## Why Float UI? 8 | 9 | Float UI is fully free and open source. You don't need to pay anything to use it, and we are working on it full-time, so we'll keep improving and adding more UIs. If you’re working on a large project that requires a high level of UI customization or you find yourself repeating the same UI patterns across projects, consider creating an internal UI library. In this case, Float UI is a great choice. You should definitely use it. 10 | 11 | ## Prerequisites 12 | 13 | Before you begin, ensure you have met the following requirements: 14 | 15 | * You have installed the latest version of npm/yarn/pnpm. 16 | * You have a `Windows/Linux/Mac` machine. 17 | 18 | ## Getting Started 19 | 20 | First, install the dependencies. We highly recommend using pnpm, and run the development server: 21 | 22 | ```bash 23 | npm run dev 24 | # or 25 | yarn dev 26 | # or 27 | pnpm dev 28 | ``` 29 | 30 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 31 | 32 | ### Quick start 33 | 34 | - [UI components](https://floatui.com/components) : UI components for React and Vue (soon) with Tailwind, every example support both directions LTR and RTL. 35 | 36 | - [Website templates](https://floatui.com/templates) : A collection of professional and beautifully designed website templates, built on top of React, Next.js and Nuxt (soon) with Tailwind CSS. 37 | 38 | ## Contributing 39 | 40 | If you're interested in contributing to Float UI, please read our [contributing guide](https://github.com/MarsX-dev/floatui/blob/main/CONTRIBUTING.md) to learn about our development process before submitting a pull request. 41 | -------------------------------------------------------------------------------- /app/api/subscribe/route.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { NextResponse } from "next/server"; 3 | 4 | function getNameFromEmail(email: string) { 5 | // Split the email by the '@' character 6 | const parts = email.split("@"); 7 | 8 | // Check if the email has a valid format 9 | if (parts.length < 2) { 10 | return ""; // Return an empty string for invalid email 11 | } 12 | 13 | // Return the first part of the split as the name 14 | return parts[0]; 15 | } 16 | 17 | export async function POST(request: Request) { 18 | const { email } = await request.json(); 19 | 20 | try { 21 | const res = await axios.post( 22 | `${process.env.CONVERTKIT_API_URL}/subscribe`, 23 | { 24 | email, 25 | first_name: getNameFromEmail(email), 26 | api_key: process.env.CONVERTKIT_API_KEY, 27 | } 28 | ); 29 | return NextResponse.json({ confirmation: res.data }); 30 | } catch (err) { 31 | return NextResponse.json({ err: "Email address is invalid" }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/blog/page.tsx: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import path from "path"; 3 | import matter from "gray-matter"; 4 | import BlogCard from "components/ui/BlogCard"; 5 | import { getPosts } from "utils/seobot"; 6 | import { BlogPost } from "types/types"; 7 | import Pagination from "components/ui/Pagination"; 8 | 9 | const { title, description } = { 10 | title: "Float UI - Blog", 11 | description: "The latest about Float UI, and some technical stuff.", 12 | }; 13 | 14 | export const metadata = { 15 | title, 16 | description, 17 | openGraph: { 18 | title, 19 | description, 20 | url: "https://floatui.com", 21 | }, 22 | twitter: { 23 | card: "summary_large_image", 24 | title, 25 | description, 26 | }, 27 | }; 28 | 29 | export default async ({ 30 | searchParams: { page }, 31 | }: { 32 | searchParams: { page: number }; 33 | }) => { 34 | const pageNumber = Math.max((page || 0) - 1, 0); 35 | const { total, articles } = await getPosts(pageNumber); 36 | const posts = articles || []; 37 | const lastPage = Math.ceil(total / 10); 38 | 39 | return ( 40 | <> 41 |
42 |
43 |

Blog

44 |

45 | The latest about Float UI, and some technical stuff. 46 |

47 |
48 | 59 | {lastPage > 1 && ( 60 | 65 | )} 66 |
67 | 68 | ); 69 | }; 70 | -------------------------------------------------------------------------------- /app/components/layout.tsx: -------------------------------------------------------------------------------- 1 | import Sidebar from "components/ui/Sidebar"; 2 | import { ReactNode } from "react"; 3 | 4 | const title = "Modern UI Components | Float UI"; 5 | 6 | export const metadata = { 7 | metadataBase: new URL("https://floatui.com"), 8 | title, 9 | openGraph: { 10 | title, 11 | url: "https://floatui.com", 12 | }, 13 | twitter: { 14 | title, 15 | }, 16 | }; 17 | 18 | type Props = { 19 | children: ReactNode; 20 | }; 21 | 22 | export default (props: Props) => { 23 | const { children } = props; 24 | return ( 25 |
26 |
27 | 28 |
29 | {children} 30 |
31 |
32 |
33 | ); 34 | }; 35 | -------------------------------------------------------------------------------- /app/components/page.tsx: -------------------------------------------------------------------------------- 1 | import fs from "fs"; 2 | import path from "path"; 3 | import matter from "gray-matter"; 4 | import { serialize } from "next-mdx-remote/serialize"; 5 | import MDXRemoteClient from "components/MDXRemoteClient"; 6 | import SupportedLibraries from "components/ui/SupportedLibraries"; 7 | 8 | const title = "Float UI - Introduction"; 9 | const description = 10 | "Beautiful and responsive UI components and templates for React and Vue with Tailwind CSS."; 11 | 12 | export const metadata = { 13 | metadataBase: new URL("https://floatui.com"), 14 | title, 15 | description, 16 | openGraph: { 17 | title, 18 | url: "https://floatui.com", 19 | description, 20 | }, 21 | twitter: { 22 | title, 23 | description, 24 | }, 25 | }; 26 | 27 | export default async () => { 28 | const markdownWithMeta = fs.readFileSync( 29 | path.join(process.cwd(), "content/intro.mdx"), 30 | "utf-8" 31 | ); 32 | const { data: frontMatter, content } = matter(markdownWithMeta); 33 | const mdxSource = await serialize(content); 34 | 35 | return ( 36 | <> 37 |
38 | 42 |
43 | 44 | ); 45 | }; 46 | -------------------------------------------------------------------------------- /app/customize.css: -------------------------------------------------------------------------------- 1 | html { 2 | scroll-behavior: smooth; 3 | } 4 | 5 | .max-w-screen { 6 | @apply max-w-screen-xl mx-auto px-4; 7 | } 8 | 9 | .nav-top { 10 | @apply border-b dark:border-gray-800; 11 | animation: 0.4s smoothScroll forwards; 12 | } 13 | 14 | @keyframes smoothScroll { 15 | 0% { 16 | transform: translateY(-6em); 17 | } 18 | 19 | 100% { 20 | transform: translateY(0); 21 | } 22 | } 23 | 24 | .faq-box::after, 25 | .faq-box::before { 26 | position: absolute; 27 | content: ""; 28 | background-image: url("data:image/svg+xml,%3Csvg width='15' height='15' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%232563eb' fill-opacity='0.2' fill-rule='evenodd'%3E%3Ccircle cx='3' cy='3' r='3'/%3E%3Ccircle cx='13' cy='13' r='3'/%3E%3C/g%3E%3C/svg%3E"); 29 | width: 120px; 30 | height: 140px; 31 | z-index: -1; 32 | } 33 | 34 | .faq-box::before { 35 | top: -1em; 36 | left: -1em; 37 | } 38 | 39 | .faq-box::after { 40 | bottom: -1em; 41 | right: -1em; 42 | } 43 | 44 | .notf-right { 45 | animation: 0.4s notfRight forwards; 46 | } 47 | 48 | @keyframes notfRight { 49 | 0% { 50 | transform: translateX(5em); 51 | } 52 | 53 | 100% { 54 | transform: translateX(0); 55 | } 56 | } 57 | 58 | .notf-brogress { 59 | animation: 14s brogress forwards; 60 | } 61 | 62 | @keyframes brogress { 63 | 0% { 64 | width: 0%; 65 | } 66 | 67 | 100% { 68 | width: 100%; 69 | } 70 | } 71 | 72 | pre { 73 | outline: 0 !important; 74 | } 75 | 76 | .remove-scrollbar::-webkit-scrollbar { 77 | -webkit-appearance: none; 78 | -moz-appearance: none; 79 | appearance: none; 80 | height: 0; 81 | } 82 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/app/favicon.ico -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import { Inter } from "next/font/google"; 2 | import "./tailwind.css"; 3 | import "./customize.css"; 4 | import "./prismjs-theme.css"; 5 | import Navbar from "components/ui/Navbar"; 6 | import Footer from "components/ui/Footer"; 7 | import UsermavenSetup from "components/UsermavenSetup"; 8 | import metatag from "metatag"; 9 | 10 | const { title, desc, ogImage } = metatag; 11 | 12 | export const metadata = { 13 | metadataBase: new URL("https://floatui.com"), 14 | title, 15 | description: desc, 16 | openGraph: { 17 | title, 18 | description: desc, 19 | images: ogImage, 20 | url: "https://floatui.com", 21 | }, 22 | twitter: { 23 | title, 24 | description: desc, 25 | images: [ogImage], 26 | }, 27 | }; 28 | 29 | const inter = Inter({ subsets: ["latin"] }); 30 | 31 | const GA_ID = process.env.GA_ID; 32 | const GOOGLE_SITE_VERIFICATION = process.env.GOOGLE_SITE_VERIFICATION; 33 | 34 | export default function RootLayout({ 35 | // Layouts must accept a children prop. 36 | // This will be populated with nested layouts or pages 37 | children, 38 | }: { 39 | children: React.ReactNode; 40 | }) { 41 | return ( 42 | 43 | 44 | 48 | 49 | 50 | 51 | 52 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
{children}
63 |