├── .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 |
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 |
49 | {posts.map((item: BlogPost, idx: number) => (
50 |
57 | ))}
58 |
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 |
64 |
65 |
66 | );
67 | }
68 |
--------------------------------------------------------------------------------
/app/license/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 |
7 | const title = "Float UI - License";
8 |
9 | export const metadata = {
10 | metadataBase: new URL("https://floatui.com"),
11 | title,
12 | openGraph: {
13 | title,
14 | url: "https://floatui.com",
15 | },
16 | twitter: {
17 | title,
18 | },
19 | };
20 |
21 | export default async () => {
22 | const markdownWithMeta = fs.readFileSync(
23 | path.join(process.cwd(), "content/license.mdx"),
24 | "utf-8"
25 | );
26 | const { data: frontMatter, content } = matter(markdownWithMeta);
27 | const mdxSource = await serialize(content);
28 |
29 | return (
30 | <>
31 |
32 |
33 |
34 | License
35 |
36 |
37 | All you need to know about the Float UI licensing model
38 |
39 |
40 |
41 |
42 |
43 |
44 | >
45 | );
46 | };
47 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import CTA from "components/ui/CTA";
2 | import Features from "components/ui/Features/Features";
3 | import Hero from "components/ui/Hero";
4 | import SupportedFrameworks from "components/ui/SupportedFrameworks";
5 | import TemplateCTA from "components/ui/TemplateCTA";
6 |
7 | export default () => {
8 | return (
9 | <>
10 |
11 |
12 |
13 |
14 |
15 | >
16 | );
17 | };
18 |
--------------------------------------------------------------------------------
/app/prismjs-theme.css:
--------------------------------------------------------------------------------
1 | code[class*="language-"],
2 | pre[class*="language-"] {
3 | color: #c5c8c6;
4 | text-shadow: 0 1px rgba(0, 0, 0, 0.3);
5 | font-family: Inconsolata, Monaco, Consolas, "Courier New", Courier, monospace;
6 | direction: ltr;
7 | text-align: left;
8 | white-space: pre;
9 | word-spacing: normal;
10 | word-break: normal;
11 | line-height: 1.5;
12 | -moz-tab-size: 4;
13 | -o-tab-size: 4;
14 | tab-size: 4;
15 | -webkit-hyphens: none;
16 | -moz-hyphens: none;
17 | -ms-hyphens: none;
18 | hyphens: none;
19 | }
20 | pre[class*="language-"] {
21 | overflow: auto;
22 | border-radius: 0.3em;
23 | }
24 |
25 | :not(pre) > code[class*="language-"] {
26 | border-radius: 0.3em;
27 | }
28 | .token.cdata,
29 | .token.comment,
30 | .token.doctype,
31 | .token.prolog {
32 | color: #7c7c7c;
33 | }
34 | .token.punctuation {
35 | color: #c5c8c6;
36 | }
37 | .namespace {
38 | opacity: 0.7;
39 | }
40 | .token.keyword,
41 | .token.property,
42 | .token.tag {
43 | color: #96cbfe;
44 | }
45 | .token.class-name {
46 | color: #ffffb6;
47 | text-decoration: underline;
48 | }
49 | .token.boolean,
50 | .token.constant {
51 | color: #9c9;
52 | }
53 | .token.deleted,
54 | .token.symbol {
55 | color: #f92672;
56 | }
57 | .token.number {
58 | color: #ff73fd;
59 | }
60 | .token.attr-name,
61 | .token.builtin,
62 | .token.char,
63 | .token.inserted,
64 | .token.selector,
65 | .token.string {
66 | color: #a8ff60;
67 | }
68 | .token.variable {
69 | color: #c6c5fe;
70 | }
71 | .token.operator {
72 | color: #ededed;
73 | }
74 | .token.entity {
75 | color: #ffffb6;
76 | cursor: help;
77 | }
78 | .token.url {
79 | color: #96cbfe;
80 | }
81 | .language-css .token.string,
82 | .style .token.string {
83 | color: #87c38a;
84 | }
85 | .token.atrule,
86 | .token.attr-value {
87 | color: #f9ee98;
88 | }
89 | .token.function {
90 | color: #dad085;
91 | }
92 | .token.regex {
93 | color: #e9c062;
94 | }
95 | .token.important {
96 | color: #fd971f;
97 | }
98 | .token.bold,
99 | .token.important {
100 | font-weight: 700;
101 | }
102 | .token.italic {
103 | font-style: italic;
104 | }
105 |
--------------------------------------------------------------------------------
/app/robots.txt:
--------------------------------------------------------------------------------
1 | User-Agent: *
2 | Allow: /
3 | Disallow: /private/
4 | Sitemap: https://floatui.com/sitemap.xml
--------------------------------------------------------------------------------
/app/templates/page.tsx:
--------------------------------------------------------------------------------
1 | import HeroBgGradient from "components/HeroBgGradient";
2 | import TemplateCard from "components/ui/TemplateCard";
3 | import { fetchDocs } from "../../firebase/config";
4 | import { Templates } from "types/types";
5 |
6 | const { title, desc } = {
7 | title: "Float UI - Beautiful Tailwind website templates",
8 | desc: "Beautiful and responsive UI components and templates for React, Nextjs with Tailwind CSS.",
9 | };
10 |
11 | export const metadata = {
12 | metadataBase: new URL("https://floatui.com"),
13 | title,
14 | description: desc,
15 | openGraph: {
16 | title,
17 | description: desc,
18 | },
19 | twitter: {
20 | title,
21 | description: desc,
22 | },
23 | };
24 |
25 | export default async () => {
26 | const querySnapshot = await fetchDocs("templates");
27 | const templates = await querySnapshot.docs
28 | .map((item) => {
29 | const {
30 | banner_url,
31 | template_name,
32 | price,
33 | description,
34 | created_at,
35 | slug,
36 | } = item.data();
37 |
38 | return {
39 | banner_url,
40 | template_name,
41 | price,
42 | slug,
43 | description,
44 | created_at,
45 | };
46 | })
47 | .sort((a, b) => b.created_at - a.created_at);
48 |
49 | return (
50 | <>
51 |
52 |
53 |
54 |
55 |
56 | Professional website templates for your next project
57 |
58 |
59 | A collection of professional and beautifully designed website
60 | templates, built with React, Next.js with Tailwind CSS.
61 |
62 |
63 |
67 | {templates.map((item, idx) => (
68 |
69 | ))}
70 |
71 |
72 |
73 | >
74 | );
75 | };
76 |
--------------------------------------------------------------------------------
/components/BlurBackground.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 |
3 | export default ({
4 | className = "",
5 | isActive,
6 | setActive = () => null,
7 | ...props
8 | }: {
9 | isActive: boolean;
10 | setActive?: (bool: boolean) => void;
11 | className?: string;
12 | }) => (
13 | setActive(false)}
21 | >
22 | );
23 |
--------------------------------------------------------------------------------
/components/HeroBgGradient.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 |
3 | export default ({
4 | className = "",
5 | height = 444,
6 | }: {
7 | className?: string;
8 | height?: number;
9 | }) => (
10 |
17 |
18 |
23 |
24 |
25 |
34 |
35 |
41 |
45 |
46 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | );
63 |
--------------------------------------------------------------------------------
/components/HighlightCodeSeobot.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useEffect } from "react";
4 | import hljs from "highlight.js";
5 | import "highlight.js/styles/vs2015.min.css";
6 |
7 | export default function HighlightCodeSeobot() {
8 | useEffect(() => {
9 | hljs.highlightAll();
10 | }, []);
11 | return null;
12 | }
13 |
--------------------------------------------------------------------------------
/components/LazyMotionWrapper.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { LazyMotion, domAnimation } from "framer-motion";
4 | import { ReactNode } from "react";
5 |
6 | export default ({ children }: { children: ReactNode }) => (
7 | {children}
8 | );
9 |
--------------------------------------------------------------------------------
/components/MDXRemoteClient.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { MDXRemote, MDXRemoteSerializeResult } from "next-mdx-remote";
4 |
5 | export default ({
6 | mdxSource,
7 | components,
8 | }: {
9 | mdxSource: MDXRemoteSerializeResult;
10 | components?: any;
11 | }) => ;
12 |
--------------------------------------------------------------------------------
/components/SyntaxHeighlight.tsx:
--------------------------------------------------------------------------------
1 | import Prism from "prismjs";
2 | import "prismjs/components/prism-jsx";
3 | import { useEffect } from "react";
4 | import mergeTW from "utils/mergeTW";
5 |
6 | export default ({
7 | code,
8 | className = "",
9 | }: {
10 | code: string;
11 | className?: string;
12 | }) => {
13 | useEffect(() => {
14 | Prism.highlightAll();
15 | }, [code]);
16 |
17 | return (
18 |
19 | {code}
20 |
21 | );
22 | };
23 |
--------------------------------------------------------------------------------
/components/UsermavenSetup.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { usermavenClient, UsermavenClient } from "@usermaven/sdk-js";
4 | import { useEffect } from "react";
5 |
6 | export default () => {
7 | useEffect(() => {
8 | // Init Usermaven
9 | const usermaven: UsermavenClient = usermavenClient({
10 | key: process.env.ANALYTICS_KEY as string,
11 | tracking_host: "https://events.usermaven.com",
12 | });
13 | }, []);
14 |
15 | return <>>;
16 | };
17 |
--------------------------------------------------------------------------------
/components/icons/IconAlpinejs.tsx:
--------------------------------------------------------------------------------
1 | export default () => (
2 |
3 |
9 |
15 |
16 | );
17 |
--------------------------------------------------------------------------------
/components/icons/IconArrowsexpandLeft.tsx:
--------------------------------------------------------------------------------
1 | export const IconArrowsexpandLeft = () => (
2 |
9 |
13 |
17 |
18 |
26 |
27 |
28 |
29 |
37 |
38 |
39 |
40 |
41 |
42 | );
43 |
--------------------------------------------------------------------------------
/components/icons/IconBxCustomize.tsx:
--------------------------------------------------------------------------------
1 | export const IconBxCustomize = () => (
2 |
9 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
27 | );
28 |
--------------------------------------------------------------------------------
/components/icons/IconHTML.tsx:
--------------------------------------------------------------------------------
1 | export const IconHTML = () => (
2 |
9 |
10 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 |
--------------------------------------------------------------------------------
/components/icons/IconLoading.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 |
3 | export const IconLoading = ({ className = "" }: { className?: string }) => (
4 |
10 |
18 |
23 |
24 | );
25 |
--------------------------------------------------------------------------------
/components/icons/IconPennibLine.tsx:
--------------------------------------------------------------------------------
1 | export const IconPennibLine = () => (
2 |
9 |
10 |
14 |
15 |
16 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | );
33 |
--------------------------------------------------------------------------------
/components/icons/IconRadix.tsx:
--------------------------------------------------------------------------------
1 | export default () => (
2 |
9 |
10 |
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | );
27 |
--------------------------------------------------------------------------------
/components/icons/IconVue.tsx:
--------------------------------------------------------------------------------
1 | export const IconVue = () => (
2 |
9 |
10 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | );
22 |
--------------------------------------------------------------------------------
/components/icons/index.ts:
--------------------------------------------------------------------------------
1 | export * from "./IconGithub";
2 | export * from "./IconPennibLine";
3 | export * from "./IconArrowsexpandLeft";
4 | export * from "./IconBxCustomize";
5 | export * from "./IconHTML";
6 | export * from "./IconReact";
7 | export * from "./IconVue";
8 | export * from "./IconSvelte";
9 | export * from "./IconRadix";
10 | export * from "./IconRadixVue";
11 | export * from "./IconAlpinejs";
12 | export * from "./IconLoading";
13 |
--------------------------------------------------------------------------------
/components/ui/Banner/Banner.tsx:
--------------------------------------------------------------------------------
1 | export default () => {
2 | return (
3 | //
36 | <>>
37 | );
38 | };
39 |
--------------------------------------------------------------------------------
/components/ui/BgGradient/index.tsx:
--------------------------------------------------------------------------------
1 | export default () => (
2 |
9 | );
10 |
--------------------------------------------------------------------------------
/components/ui/BlogCard/index.tsx:
--------------------------------------------------------------------------------
1 | import { ArrowLongRightIcon } from "@heroicons/react/24/solid";
2 | import moment from "moment";
3 | import Link from "next/link";
4 |
5 | export default ({
6 | href,
7 | date,
8 | title,
9 | desc,
10 | }: {
11 | href: string;
12 | date: string;
13 | title: string;
14 | desc: string;
15 | }) => {
16 | return (
17 |
18 |
19 |
20 | {moment(date).format("dddd, MMMM D, YYYY")}
21 |
22 |
23 |
24 | {title}
25 |
26 |
27 | {desc}
28 |
29 |
30 |
31 | READ MORE
32 |
33 |
34 |
35 |
36 | );
37 | };
38 |
--------------------------------------------------------------------------------
/components/ui/Brand/index.tsx:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import logoDark from "public/logo-dark.svg";
3 |
4 | export default () => (
5 | <>
6 |
7 |
8 |
9 | >
10 | );
11 |
--------------------------------------------------------------------------------
/components/ui/Button.tsx:
--------------------------------------------------------------------------------
1 | import { IconLoading } from "components/icons";
2 | import mergeTW from "utils/mergeTW";
3 | import { HTMLAttributes, ReactNode, RefObject } from "react";
4 | import { buttonVariants } from "components/variants";
5 |
6 | interface Props extends HTMLAttributes {
7 | children: ReactNode;
8 | child?: ReactNode;
9 | className?: string;
10 | isLoad?: boolean;
11 | variant?: "shiny" | "default";
12 | type?: "button" | "submit" | "reset";
13 | ref?: RefObject;
14 | }
15 |
16 | export default ({
17 | children,
18 | child,
19 | className = "",
20 | variant = "default",
21 | isLoad = false,
22 | ...props
23 | }: Props) => {
24 | const variants = {
25 | shiny:
26 | "py-2.5 px-3 font-medium text-center text-white active:shadow-none rounded-lg shadow bg-zinc-700 md:bg-[linear-gradient(179.23deg,_#1E293B_0.66%,_rgba(30,_41,_59,_0)_255.99%)] hover:bg-zinc-800 duration-150",
27 | default:
28 | "py-2.5 px-3 rounded-lg duration-150 font-medium text-center text-sm text-white bg-orange-500",
29 | };
30 |
31 | return (
32 |
42 | {isLoad ? : ""}
43 | {!isLoad && child ? {child}
: ""}
44 | {children}
45 |
46 | );
47 | };
48 |
--------------------------------------------------------------------------------
/components/ui/Button/index.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 | import { AnchorHTMLAttributes, HTMLAttributes, ReactNode } from "react";
3 | import { buttonVariants } from "components/variants";
4 |
5 | interface Props extends HTMLAttributes {
6 | children: ReactNode;
7 | className?: string;
8 | variant?: "default" | "shiny";
9 | }
10 |
11 | export default ({
12 | children,
13 | className = "",
14 | variant = "default",
15 | ...props
16 | }: Props) => (
17 |
21 | {children}
22 |
23 | );
24 |
--------------------------------------------------------------------------------
/components/ui/CTA/index.tsx:
--------------------------------------------------------------------------------
1 | import LinkItem from "../LinkItem";
2 |
3 | export default () => (
4 |
5 |
6 |
7 | Make your ideas come to life with no time
8 |
9 |
10 | Copy and paste our ready to use components into your apps, and save
11 | time, or use it in MarsX.
12 |
13 |
14 |
19 | Get started
20 |
21 |
26 | Use in MarsX
27 |
28 |
29 |
30 |
31 | );
32 |
--------------------------------------------------------------------------------
/components/ui/CodeSwitchBar/index.tsx:
--------------------------------------------------------------------------------
1 | import Button from "components/ui/Button";
2 | import { TechStack, Component, Dir, CodeBlock } from "types/types";
3 |
4 | type Props = {
5 | labels: CodeBlock[];
6 | setActivateBlock: (idx: number) => void;
7 | activatedBlock: number;
8 | };
9 |
10 | export default ({ labels, setActivateBlock, activatedBlock }: Props) => (
11 |
12 |
13 | {labels?.map(
14 | (
15 | item: {
16 | label?: string;
17 | },
18 | idx
19 | ) => (
20 |
26 | setActivateBlock(idx)}
28 | className="border-none focus:text-teal-400"
29 | >
30 | {item.label}
31 |
32 |
33 | )
34 | )}
35 |
36 |
37 | );
38 |
--------------------------------------------------------------------------------
/components/ui/DemoHeader/DemoHeader.tsx:
--------------------------------------------------------------------------------
1 | export default () => {
2 | return (
3 |
4 |
5 | Components demo
6 |
7 |
8 | Discover the power of our UI Components with live demos
9 |
10 |
11 |
12 | Take a closer look at our UI components and see how they can elevate
13 | your website or web application
14 |
15 |
16 |
17 | );
18 | };
19 |
--------------------------------------------------------------------------------
/components/ui/DemoHeader/index.ts:
--------------------------------------------------------------------------------
1 | export { default } from "./DemoHeader"
--------------------------------------------------------------------------------
/components/ui/Features/Features.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | IconArrowsexpandLeft,
3 | IconBxCustomize,
4 | IconPennibLine,
5 | } from "components/icons";
6 | import { ReactNode } from "react";
7 | import featureCover from "public/feature-cover.svg";
8 | import Image from "next/image";
9 | import Card from "./Card";
10 |
11 | type Feature = {
12 | title: string;
13 | desc: string;
14 | icon: ReactNode;
15 | };
16 |
17 | export default () => {
18 | const features: Feature[] = [
19 | {
20 | title: "Beautifully designed",
21 | desc: "Float UI allows you build beautiful and modern websites regardless of your design skills.",
22 | icon: ,
23 | },
24 | {
25 | title: "Fully Responsive",
26 | desc: "Responsive designed components and templates that look great on any screen.",
27 | icon: ,
28 | },
29 | {
30 | title: "Customizable",
31 | desc: "copy and paste into your apps and experience the power of customizable components.",
32 | icon: ,
33 | },
34 | ];
35 |
36 | return (
37 |
38 |
39 |
Turn your ideas into reality
40 |
41 | Float UI offers all the vital building blocks you need to transform
42 | your idea into a great-looking startup.
43 |
44 |
45 |
46 | {features.map((item: Feature, key: number) => (
47 |
48 | ))}
49 |
50 |
51 | );
52 | };
53 |
--------------------------------------------------------------------------------
/components/ui/Footer/BgGradient.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 |
3 | export default ({ className = "" }: { className: string }) => (
4 |
12 |
13 |
18 |
19 |
20 |
29 |
30 |
36 |
40 |
41 |
49 |
50 |
51 |
52 |
53 |
54 | );
55 |
--------------------------------------------------------------------------------
/components/ui/Footer/BorderGradient.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 |
3 | export default ({ className = "" }: { className: string }) => (
4 |
12 |
13 |
14 |
22 |
23 |
24 |
25 |
26 |
27 | );
28 |
--------------------------------------------------------------------------------
/components/ui/Footer/index.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { usePathname } from "next/navigation";
4 | import Footer from "./Footer";
5 |
6 | export default () => {
7 | const pathname = usePathname();
8 | const isInComponentsPage = pathname.includes("/components");
9 | return !isInComponentsPage ? : <>>;
10 | };
11 |
--------------------------------------------------------------------------------
/components/ui/Hero/HeroBgGradient.Client.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useInView } from "framer-motion";
4 | import { useRef } from "react";
5 | import HeroBgGradient from "components/HeroBgGradient";
6 |
7 | export default () => {
8 | const ref = useRef(null);
9 | const isInView = useInView(ref, { once: true });
10 | return (
11 |
12 |
16 |
17 | );
18 | };
19 |
--------------------------------------------------------------------------------
/components/ui/Hero/index.tsx:
--------------------------------------------------------------------------------
1 | import LinkItem from "../LinkItem";
2 | import { IconGithub } from "components/icons";
3 | import HeroBgGradientClient from "./HeroBgGradient.Client";
4 |
5 | export default () => {
6 | return (
7 |
8 |
9 |
10 | Build and ship fast with Tailwind CSS UI components
11 |
12 |
13 | Move faster with beautiful, responsive UI components and website
14 | templates with modern design, 100% free and open-source.
15 |
16 |
17 |
22 | Get started
23 |
24 |
30 |
31 | Star on GitHub
32 |
33 |
34 |
35 |
36 |
37 | );
38 | };
39 |
--------------------------------------------------------------------------------
/components/ui/Input.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 | import { HTMLAttributes } from "react";
3 |
4 | interface Props extends HTMLAttributes {
5 | className?: string;
6 | value?: string;
7 | type?: "text" | "email" | "password";
8 | name?: string;
9 | validate?: {};
10 | required?: boolean;
11 | disabled?: boolean;
12 | autoFocus?: boolean;
13 | }
14 |
15 | export default ({ className, required, validate, ...props }: Props) => (
16 |
22 | );
23 |
--------------------------------------------------------------------------------
/components/ui/LinkItem/index.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 | import Link from "next/link";
3 | import { AnchorHTMLAttributes, ReactNode } from "react";
4 | import { buttonVariants } from "components/variants";
5 |
6 | interface Props extends AnchorHTMLAttributes {
7 | children: ReactNode;
8 | href: string;
9 | className?: string;
10 | variant?: "default" | "shiny";
11 | }
12 |
13 | export default ({
14 | children,
15 | href,
16 | className = "",
17 | variant = "default",
18 | ...props
19 | }: Props) => (
20 |
25 | {children}
26 |
27 | );
28 |
--------------------------------------------------------------------------------
/components/ui/Modal.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 | import BlurBackground from "../BlurBackground";
3 | import mergeTW from "utils/mergeTW";
4 |
5 | type Props = {
6 | title?: string;
7 | description?: string;
8 | icon?: ReactNode;
9 | children: ReactNode;
10 | isActive: boolean;
11 | variant?: "default" | "custom";
12 | className?: string;
13 | classNameContainer?: string;
14 | onCancel?: () => void;
15 | };
16 |
17 | export default ({
18 | children,
19 | title,
20 | description,
21 | icon,
22 | isActive,
23 | variant = "default",
24 | className = "",
25 | classNameContainer,
26 | onCancel,
27 | }: Props) => {
28 | return isActive ? (
29 |
30 |
31 |
36 |
41 | {variant == "default" ? (
42 |
43 |
44 | {icon}
45 |
46 |
47 |
{title}
48 |
49 | {description}
50 |
51 |
52 | {children}
53 |
54 |
55 |
56 | ) : (
57 | ""
58 | )}
59 | {variant == "custom" ? children : ""}
60 |
61 |
62 |
63 | ) : (
64 | <>>
65 | );
66 | };
67 |
--------------------------------------------------------------------------------
/components/ui/Navbar/index.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { usePathname } from "next/navigation";
4 | import Navbar from "./Navbar";
5 |
6 | export default () => {
7 | const pathname = usePathname();
8 | const isInComponentsPage = pathname.includes("/components");
9 | return (
10 |
17 |
18 |
19 | );
20 | };
21 |
--------------------------------------------------------------------------------
/components/ui/Pagination.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | ArrowLongRightIcon,
3 | ArrowLongLeftIcon,
4 | } from "@heroicons/react/24/solid";
5 |
6 | interface PaginationProps {
7 | slug: string;
8 | pageNumber: number;
9 | lastPage: number;
10 | }
11 |
12 | const Pagination: React.FC = ({
13 | slug,
14 | pageNumber,
15 | lastPage,
16 | }) => {
17 | return (
18 |
43 | );
44 | };
45 |
46 | export default Pagination;
47 |
--------------------------------------------------------------------------------
/components/ui/Preview/PreviewApp.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 | import { MDXRemoteSerializeResult } from "next-mdx-remote";
3 | import { usePathname } from "next/navigation";
4 | import { useState } from "react";
5 | import {
6 | CodeBlock,
7 | Component,
8 | ComponentCards,
9 | ComponentDetails,
10 | } from "types/types";
11 | import Preview from ".";
12 |
13 | interface ComponentData extends Component, ComponentDetails, CodeBlock {
14 | mdxSource: MDXRemoteSerializeResult;
15 | }
16 |
17 | interface Props {
18 | components: ComponentData[];
19 | }
20 |
21 | export default ({ components }: Props) => {
22 | const pathname = usePathname();
23 |
24 | return (
25 | <>
26 | {components?.map((item: ComponentData, idx: number) =>
27 | item.isActive ? (
28 |
31 | ) : (
32 | ""
33 | )
34 | )}
35 | >
36 | );
37 | };
38 |
--------------------------------------------------------------------------------
/components/ui/PreviewSwitch/index.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { CodeBracketIcon, TvIcon } from "@heroicons/react/24/outline";
4 | import Button from "../Button";
5 |
6 | type Props = {
7 | preview: boolean;
8 | setPreview: (type: boolean) => void;
9 | };
10 |
11 | const SwitchBtn = ({ preview, setPreview }: Props) => (
12 | setPreview(!preview)}
14 | className="flex gap-x-3 text-sm text-zinc-50 bg-zinc-800 hover:bg-zinc-700 rounded-lg w-50 py-2 shadow-sm"
15 | >
16 | Code
17 | {preview ? (
18 |
19 | ) : (
20 |
21 | )}
22 |
23 | );
24 |
25 | export default ({ preview, setPreview }: Props) => {
26 | return (
27 |
28 |
29 |
30 | );
31 | };
32 |
--------------------------------------------------------------------------------
/components/ui/Sidebar/NavLink.tsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import { usePathname } from "next/navigation";
3 | import { ReactNode } from "react";
4 | import mergeTW from "utils/mergeTW";
5 |
6 | const NavLink = ({ ...props }) => {
7 | const {
8 | children,
9 | href = "",
10 | className = "",
11 | active = "",
12 | }: {
13 | children?: ReactNode;
14 | href?: string;
15 | className?: string;
16 | active?: string;
17 | } = props;
18 |
19 | const pathname = usePathname();
20 |
21 | const isActive: boolean = pathname == href;
22 | const activeClass = isActive ? active : "";
23 |
24 | return (
25 |
34 |
39 | {children}
40 |
41 |
42 | );
43 | };
44 |
45 | export default NavLink;
46 |
--------------------------------------------------------------------------------
/components/ui/SupportedFrameworks/index.tsx:
--------------------------------------------------------------------------------
1 | import FrameworksTabs from "./FrameworksTabs";
2 | import PreviewCard from "./PreviewCard";
3 |
4 | export default () => {
5 | return (
6 |
7 |
8 |
9 |
Use your favorite framework
10 |
11 | Copy and paste the components you want with your favorite JS
12 | framework
13 |
14 |
15 |
19 |
20 |
21 | );
22 | };
23 |
--------------------------------------------------------------------------------
/components/ui/Tabs/TabsTrigger.tsx:
--------------------------------------------------------------------------------
1 | import { ReactNode } from "react";
2 | import * as Tabs from "@radix-ui/react-tabs";
3 | import { motion } from "framer-motion";
4 | import LazyMotionWrapper from "components/LazyMotionWrapper";
5 |
6 | export default ({
7 | children,
8 | value,
9 | selectedTab,
10 | }: {
11 | children: ReactNode;
12 | value: any;
13 | selectedTab: any;
14 | }) => (
15 |
19 | {children}
20 | {selectedTab == value ? (
21 |
22 |
27 |
28 | ) : (
29 | ""
30 | )}
31 |
32 | );
33 |
--------------------------------------------------------------------------------
/components/ui/TechStackSwitch/index.tsx:
--------------------------------------------------------------------------------
1 | import { ChangeEventHandler } from "react";
2 |
3 | export default ({
4 | setTechStack,
5 | framework,
6 | }: {
7 | setTechStack: (type: any) => void;
8 | framework: string;
9 | }) => {
10 | // Select menu items
11 | const techStack =
12 | framework == "react"
13 | ? [
14 | {
15 | label: "React and Tailwind",
16 | key: "jsxTail",
17 | },
18 | {
19 | label: "React and CSS",
20 | key: "jsxCss",
21 | },
22 | ]
23 | : [
24 | {
25 | label: "Vue and Tailwind",
26 | key: "vueTail",
27 | },
28 | {
29 | label: "Vue and CSS",
30 | key: "vueCss",
31 | },
32 | ];
33 |
34 | return (
35 |
36 |
setTechStack(e.target.value)}
39 | >
40 | {techStack.map((item, idx) => (
41 |
42 | {item.label}
43 |
44 | ))}
45 |
46 |
52 |
57 |
58 |
59 | );
60 | };
61 |
--------------------------------------------------------------------------------
/components/ui/TemplateCTA/BgGradient.tsx:
--------------------------------------------------------------------------------
1 | import mergeTW from "utils/mergeTW";
2 |
3 | export default ({ className = "" }: { className?: string }) => (
4 |
10 |
11 |
16 |
17 |
18 |
27 |
28 |
34 |
38 |
39 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | );
56 |
--------------------------------------------------------------------------------
/components/ui/TemplateCTA/TemplateScoresCard.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useEffect, useState } from "react";
4 | import { useInView } from "framer-motion";
5 | import { useRef } from "react";
6 |
7 | export default () => {
8 | const [progressCount, setProgressCount] = useState(5);
9 |
10 | const ref = useRef(null);
11 | const isInView = useInView(ref, { once: true });
12 |
13 | useEffect(() => {
14 | if (isInView && progressCount < 95) {
15 | setTimeout(() => {
16 | setProgressCount((count) => count + 1);
17 | }, 50);
18 | }
19 | }, [progressCount, isInView]);
20 |
21 | return (
22 |
23 |
Good template scores
24 |
25 | Our templates are made to be super fast, easy for everyone to use, and
26 | show up well on search engines.
27 |
28 |
29 |
30 |
31 |
41 |
42 |
43 |
53 |
54 |
55 | {progressCount}
56 |
57 |
58 |
59 |
60 | );
61 | };
62 |
--------------------------------------------------------------------------------
/components/ui/TemplateCTA/TemplatesOverview.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import Image from "next/image";
4 | import preview1 from "public/preview-1.svg";
5 | import preview2 from "public/preview-2.svg";
6 | import preview3 from "public/preview-3.svg";
7 |
8 | export default () => {
9 | return (
10 |
11 |
Ready to use templates
12 |
13 | Explore pre-designed templates to quickly begin building your
14 | application or website.
15 |
16 |
17 |
22 |
27 |
32 |
33 |
34 | );
35 | };
36 |
--------------------------------------------------------------------------------
/components/ui/TemplateCTA/index.tsx:
--------------------------------------------------------------------------------
1 | import BgGradient from "./BgGradient";
2 | import TemplateScoresCard from "./TemplateScoresCard";
3 | import TemplatesOverview from "./TemplatesOverview";
4 |
5 | export default () => (
6 |
7 |
8 |
9 |
10 |
Professional website templates
11 |
12 | A collection of professional and beautifully designed website
13 | templates, built on top of React, Next.js with Tailwind CSS.
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 |
--------------------------------------------------------------------------------
/components/ui/TemplateCard/index.tsx:
--------------------------------------------------------------------------------
1 | import Link from "next/link";
2 | import { Templates } from "types/types";
3 |
4 | export default ({ item }: { item: Templates }) => (
5 |
6 |
7 |
8 |
13 |
14 |
15 |
16 |
17 |
{item.template_name}
18 |
19 | ${item.price}
20 | $0
21 |
22 |
23 |
{item.description}
24 |
25 |
26 |
27 |
28 | );
29 |
--------------------------------------------------------------------------------
/components/variants.ts:
--------------------------------------------------------------------------------
1 | const buttonNormalize =
2 | "py-2.5 px-4 rounded-full duration-150 font-medium text-center text-sm";
3 | export const buttonVariants = {
4 | default: "bg-zinc-50 hover:bg-zinc-200 " + buttonNormalize,
5 | shiny: "bg-shiny text-zinc-300 " + buttonNormalize,
6 | };
7 |
--------------------------------------------------------------------------------
/content/intro.mdx:
--------------------------------------------------------------------------------
1 | # What is Float UI?
2 |
3 | Float UI is a collection of modern UI components and website templates, built on top of React/Nextjs with Tailwind CSS,
4 | the components are beautiful designed, expertly crafted, allow you to build beautiful websites.
5 |
6 | ## Why Float UI?
7 |
8 | First, Float UI is fully free, and open source, you don't need to pay anything to use it,
9 | and we are working on it full-time, so we'll keep improving, and adding more UIs,
10 | the second thing 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,
11 | and in this case Float UI is a great choice. You should definitely use it.
12 |
13 | ## Frameworks
14 |
15 | We Provide Support for Components Developed Using React, Vue.js, Svelte, HTML, and Alpine.js.
16 | And for the interactive components we use the following Libraries:
17 |
18 |
19 |
--------------------------------------------------------------------------------
/metatag.ts:
--------------------------------------------------------------------------------
1 | export default {
2 | title: "Float UI - Free open source Tailwind UI components & Templates",
3 | desc: "Beautiful and responsive website templates and UI components for React, Vue, Svelte, HTML with Tailwind CSS.",
4 | ogImage: "/thumbnail.png?v2",
5 | };
6 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 |
3 | const nextConfig = {
4 | env: {
5 | DB_URI: process.env.DB_URI,
6 | URL: process.env.URL,
7 | SENDGRID_API_KEY: process.env.SENDGRID_API_KEY,
8 |
9 | API_KEY: process.env.API_KEY,
10 | AUTH_DOMAIN: process.env.AUTH_DOMAIN,
11 | PROJECT_ID: process.env.PROJECT_ID,
12 | STORAGE_BUCKET: process.env.STORAGE_BUCKET,
13 | MG_SENDER_ID: process.env.MG_SENDER_ID,
14 | APP_ID: process.env.APP_ID,
15 | JWT_SECRET: process.env.JWT_SECRET,
16 | URL: process.env.URL,
17 | CRYPTO_SCRETKEY: process.env.CRYPTO_SCRETKEY,
18 |
19 | PADDLE_VENDOR_ID: process.env.PADDLE_VENDOR_ID,
20 | VENDOR_API_CODE: process.env.VENDOR_API_CODE,
21 |
22 | ANALYTICS_KEY: process.env.ANALYTICS_KEY,
23 |
24 | GA_ID: process.env.GA_ID,
25 | GOOGLE_SITE_VERIFICATION: process.env.GOOGLE_SITE_VERIFICATION,
26 |
27 | CONVERTKIT_API_URL: process.env.CONVERTKIT_API_URL,
28 | CONVERTKIT_API_KEY: process.env.CONVERTKIT_API_KEY,
29 | },
30 | images: {
31 | remotePatterns: [
32 | {
33 | protocol: "https",
34 | hostname: "avatars.githubusercontent.com",
35 | },
36 | {
37 | protocol: "https",
38 | hostname: "api.uifaces.co",
39 | },
40 | {
41 | protocol: "https",
42 | hostname: "randomuser.me",
43 | },
44 | {
45 | protocol: "https",
46 | hostname: "images.unsplash.com",
47 | },
48 | ],
49 | },
50 | };
51 |
52 | module.exports = nextConfig;
53 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "floatui",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "tailwind": "npx tailwindcss -i ./styles/tailwind.css -o ./public/tailwind.css --watch"
10 | },
11 | "dependencies": {
12 | "@babel/core": "^7.18.6",
13 | "@babel/preset-react": "^7.18.6",
14 | "@heroicons/react": "^2.0.18",
15 | "@next/third-parties": "^14.0.3",
16 | "@radix-ui/react-avatar": "^1.0.3",
17 | "@radix-ui/react-context-menu": "^2.1.5",
18 | "@radix-ui/react-dialog": "^1.0.5",
19 | "@radix-ui/react-dropdown-menu": "^2.0.6",
20 | "@radix-ui/react-select": "^2.0.0",
21 | "@radix-ui/react-tabs": "^1.0.4",
22 | "@tailwindcss/typography": "^0.5.0",
23 | "@types/babel__core": "^7.1.19",
24 | "@usermaven/sdk-js": "^1.1.9",
25 | "axios": "^0.24.0",
26 | "firebase": "^9.9.0",
27 | "framer-motion": "^10.16.4",
28 | "fs": "^0.0.1-security",
29 | "google": "link:@next/third-parties/google",
30 | "gray-matter": "^4.0.3",
31 | "highlight.js": "^11.9.0",
32 | "moment": "^2.29.4",
33 | "next": "14.0.3",
34 | "next-mdx-remote": "^3.0.8",
35 | "next-themes": "^0.2.1",
36 | "path": "^0.12.7",
37 | "prismjs": "^1.29.0",
38 | "react": "^18.2.0",
39 | "react-dom": "^18.2.0",
40 | "remove": "^0.1.5",
41 | "tailwind-merge": "^1.14.0",
42 | "uuid": "^8.3.2"
43 | },
44 | "devDependencies": {
45 | "@tailwindcss/forms": "^0.5.3",
46 | "@types/node": "^18.0.4",
47 | "@types/prismjs": "^1.26.0",
48 | "@types/react": "^18.0.15",
49 | "@types/react-dom": "^18.0.6",
50 | "@types/uuid": "^8.3.4",
51 | "autoprefixer": "^10.4.0",
52 | "eslint": "7.32.0",
53 | "eslint-config-next": "12.0.3",
54 | "postcss": "^8.4.5",
55 | "prettier": "2.7.1",
56 | "tailwindcss": "^3.3.2",
57 | "typescript": "^4.7.4"
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/previewsComponents/FUI404PageWithImage.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUI404PageWithImage() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | 404 Error
20 |
21 |
22 | Page not found
23 |
24 |
25 | Sorry, the page you are looking for could not be found or has been removed.
26 |
27 |
28 | Go back
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | )
38 | }
39 |
40 |
--------------------------------------------------------------------------------
/previewsComponents/FUI404PageWithLogo.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUI404PageWithLogo() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | Page not found
19 |
20 |
21 | Sorry, the page you are looking for could not be found or has been removed.
22 |
23 |
24 |
25 |
26 | )
27 | }
28 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAlertDanger.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAlertDanger() {
10 | return (
11 |
12 |
13 |
14 |
19 |
20 |
21 | Error
22 |
23 |
24 | Sorry something wrong happened, please enter a correct email.
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | )
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAlertDangerWithDescription.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAlertDangerWithDescription() {
10 | return (
11 |
12 |
13 |
14 |
19 |
20 |
21 | Your account is blocked
22 |
23 |
24 |
25 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
26 |
27 |
28 |
29 |
30 |
31 |
32 | )
33 | }
34 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAlertDangerWithLink.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAlertDangerWithLink() {
10 | return (
11 |
12 |
13 |
14 |
19 |
20 | There is no account associated with this email address. Sign up?
21 |
22 |
23 |
24 |
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAlertInfoLinear.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAlertInfoLinear() {
10 | return (
11 |
12 |
13 |
14 |
19 |
20 | we have just released a new app version with so many features, you can check it out?
21 |
22 |
23 |
24 |
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAlertSuccess.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAlertSuccess() {
10 | return (
11 |
12 |
13 |
14 |
19 |
20 |
21 | Success
22 |
23 |
24 | Team member has been added successfully.
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | )
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAlertWarning.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAlertWarning() {
10 | return (
11 |
12 |
13 |
14 |
19 |
20 |
21 | Warning
22 |
23 |
24 | Manage your team members permissions from your dashboard
25 |
26 |
27 |
28 |
29 |
30 | )
31 | }
32 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAlertWarningWithBorder.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAlertWarningWithBorder () {
10 | return (
11 |
12 |
13 |
14 |
19 |
20 |
21 | Bandwidth is up to 300GB
22 |
23 |
24 |
25 | Lorem ipsum dolor sit amet, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. et dolore magna aliqua.
26 |
27 |
28 |
29 |
30 |
31 |
32 | )
33 | }
34 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAmountInput.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAmountInput() {
10 | return (
11 |
12 |
13 | Amount
14 |
15 |
16 |
17 |
18 | USD
19 | EUR
20 | MRO
21 |
22 |
23 |
28 |
29 |
30 | )
31 | }
32 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAmountInputWithSelectInRight.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAmountInputWithSelectInRight() {
10 | return (
11 |
12 |
13 | Amount
14 |
15 |
16 |
17 | $
18 |
19 |
24 |
25 |
26 | USD
27 | EUR
28 | MRO
29 |
30 |
31 |
32 |
33 | )
34 | }
35 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAvatarGroupStacked.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAvatarGroupStacked() {
10 |
11 | const avatarData = [
12 | {
13 | name: "CT",
14 | imgURL: "https://randomuser.me/api/portraits/women/79.jpg",
15 | },
16 | {
17 | name: "CT",
18 | imgURL: "https://randomuser.me/api/portraits/med/men/75.jpg",
19 | },
20 | {
21 | name: "CT",
22 | imgURL:
23 | "https://images.unsplash.com/photo-1511485977113-f34c92461ad9?ixlib=rb-1.2.1&w=128&h=128&dpr=2&q=80",
24 | },
25 | {
26 | name: "CT",
27 | imgURL: "https://api.uifaces.co/our-content/donated/xZ4wg2Xj.jpg",
28 | },
29 | ];
30 |
31 | return
32 | {avatarData.map((item, idx) => {
33 | return (
34 |
38 |
39 | {item.name}
40 |
41 | );
42 | })}
43 |
44 | }
45 |
46 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAvatarGroupStackedWithText.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAvatarGroupStackedWithText() {
10 |
11 | const avatarData = [
12 | {
13 | name: "CT",
14 | imgURL: "https://randomuser.me/api/portraits/women/79.jpg",
15 | },
16 | {
17 | name: "CT",
18 | imgURL: "https://randomuser.me/api/portraits/med/men/75.jpg",
19 | },
20 | {
21 | name: "CT",
22 | imgURL:
23 | "https://images.unsplash.com/photo-1511485977113-f34c92461ad9?ixlib=rb-1.2.1&w=128&h=128&dpr=2&q=80",
24 | },
25 | {
26 | name: "CT",
27 | imgURL: "https://randomuser.me/api/portraits/men/18.jpg",
28 | },
29 | {
30 | name: "CT",
31 | imgURL: "https://randomuser.me/api/portraits/med/men/36.jpg",
32 | },
33 | ];
34 | return
35 | {avatarData.map((item, idx) => {
36 | return (
37 |
41 |
45 | {item.name}
46 |
47 | );
48 | })}
49 |
50 | Join 5.000+ users
51 |
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAvatarWithLinkAndButton.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAvatarWithLinkAndButton() {
10 | return
11 | {/* Avatar 1 */}
12 |
13 |
17 |
21 | CT
22 |
23 |
34 |
35 | {/* Avatar 2 */}
36 |
37 |
38 |
42 |
46 | CT
47 |
48 |
54 |
59 |
60 |
61 |
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAvatars.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAvatars() {
10 | return
11 |
12 |
16 | CT
17 |
18 |
19 |
23 | CT
24 |
25 |
26 |
30 | CT
31 |
32 |
33 |
37 | CT
38 |
39 |
40 |
44 | CT
45 |
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/previewsComponents/FUIAvatarsWithInfo.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIAvatarsWithInfo() {
10 | return
11 | {/* Avatar 1 */}
12 |
13 |
17 |
21 | CT
22 |
23 |
24 | Jane Smith
25 |
26 | janesmith@example.com
27 |
28 |
29 |
30 | {/* Avatar 2 */}
31 |
32 |
36 |
40 | CT
41 |
42 |
43 | Nikita Andrew
44 |
45 | nikitaandrew@example.com
46 |
47 |
48 |
49 |
50 | }
51 |
52 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBannerCentred.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBannerCentred() {
10 | return (
11 |
23 | )
24 | }
25 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBannerCentredWithBadge.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBannerCentredWithBadge() {
10 | return (
11 |
12 |
13 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | )
34 | }
35 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBannerCentredWithLink.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBannerCentredWithLink() {
10 | return (
11 |
12 |
13 |
14 | We just launched our new product! you can check out all features now.
15 |
16 |
17 | Learn more
18 |
19 |
20 |
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBannerWithLink.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBannerWithLink() {
10 | return (
11 |
12 |
13 |
14 |
19 |
20 | We just launched a new version of our library.
21 |
22 |
23 |
24 | Learn more
25 |
26 |
27 |
28 | )
29 | }
30 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBasic404Page.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBasic404Page() {
10 | return (
11 |
12 |
13 |
14 |
15 | Page not found
16 |
17 |
18 | Sorry, the page you are looking for could not be found or has been removed.
19 |
20 |
21 | Go back
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | )
30 | }
31 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBasicRadioGroup.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBasicRadioGroup() {
10 | const radios = ["Write and Read", "Read only", "Write only"]
11 |
12 | return (
13 |
14 |
15 |
Select user role
16 |
36 |
37 |
38 | )
39 | }
40 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBasicStats.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBasicStats() {
10 |
11 | const stats = [
12 | {
13 | data: "35K",
14 | title: "Customers"
15 | },
16 | {
17 | data: "10K+",
18 | title: "Downloads"
19 | },
20 | {
21 | data: "40+",
22 | title: "Countries"
23 | },
24 | {
25 | data: "30M+",
26 | title: "Total revenue"
27 | },
28 | ]
29 |
30 | return (
31 |
32 |
33 |
34 | {
35 | stats.map((item, idx) => (
36 |
37 | {item.data}
38 | {item.title}
39 |
40 | ))
41 | }
42 |
43 |
44 |
45 | )
46 | }
47 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBasicSteps.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBasicSteps() {
10 |
11 | const [steps, setStep] = React.useState({
12 | stpesCount: [1, 2, 3, 4],
13 | currentStep: 2
14 | })
15 |
16 | return (
17 |
18 |
19 | {steps.stpesCount.map((item, idx) => (
20 |
21 | idx + 1 ? "bg-indigo-600 border-indigo-600" : "" || steps.currentStep == idx + 1 ? "border-indigo-600" : ""}`}>
22 |
23 | {
24 | steps.currentStep > idx + 1 ? (
25 |
26 |
27 |
28 | ) : ""
29 | }
30 |
31 | idx + 1 ? "border-indigo-600" : ""}`} />
32 |
33 | ))}
34 |
35 |
36 | )
37 | }
38 |
--------------------------------------------------------------------------------
/previewsComponents/FUIBasicTabs.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIBasicTabs() {
10 |
11 | const tabItems = [
12 | "Overview",
13 | "Integration",
14 | "Billing",
15 | "Transactions",
16 | "plans",
17 | ];
18 |
19 | return
23 |
27 | {tabItems.map((item, idx) => (
28 |
33 |
34 | {item}
35 |
36 |
37 | ))}
38 |
39 | {tabItems.map((item, idx) => (
40 |
41 |
42 | This is {item} Tab
43 |
44 |
45 | ))}
46 |
47 | }
48 |
49 |
--------------------------------------------------------------------------------
/previewsComponents/FUIButtonsWithLowColors.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIButtonsWithLowColors() {
10 | return (
11 |
12 |
15 | Button
16 |
17 |
20 | Button
21 |
22 |
25 | Button
26 |
27 |
30 | Button
31 |
32 |
33 |
36 | Button
37 |
38 |
39 |
40 | )
41 | }
42 |
--------------------------------------------------------------------------------
/previewsComponents/FUIButtonsWithShadow.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIButtonsWithShadow() {
10 | return (
11 |
12 |
15 | Button
16 |
17 |
18 |
21 | Button
22 |
23 |
24 |
27 | Button
28 |
29 |
30 |
33 | Button
34 |
35 |
36 |
39 | Button
40 |
41 |
42 | )
43 | }
44 |
--------------------------------------------------------------------------------
/previewsComponents/FUICentered404PageWithTowLinks.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUICentered404PageWithTowLinks() {
10 | return (
11 |
12 |
13 |
14 |
15 | 404 Error
16 |
17 |
18 | Page not found
19 |
20 |
21 | Sorry, the page you are looking for could not be found or has been removed.
22 |
23 |
31 |
32 |
33 |
34 | )
35 | }
36 |
--------------------------------------------------------------------------------
/previewsComponents/FUICentredCta.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUICentredCta() {
10 | return (
11 |
12 |
13 |
14 |
15 | Professional services
16 |
17 |
18 | Build the future with us
19 |
20 |
21 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur excepteur sint occaecat cupidatat non proident.
22 |
23 |
24 |
29 |
30 |
31 | )
32 | }
33 |
--------------------------------------------------------------------------------
/previewsComponents/FUICentredCtaWithTwoLinks.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUICentredCtaWithTwoLinks() {
10 | return (
11 |
12 |
13 |
14 |
15 | Build the future with us
16 |
17 |
18 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur excepteur sint occaecat cupidatat non proident.
19 |
20 |
21 |
29 |
30 |
31 | )
32 | }
33 |
--------------------------------------------------------------------------------
/previewsComponents/FUIColorPickerRadioGroup.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIColorPickerRadioGroup() {
10 | const colors = [{ bg: "bg-[#2563EB]", ring: "ring-[#2563EB]" }, { bg: "bg-[#8B5CF6]", ring: "ring-[#8B5CF6]" }, { bg: "bg-[#DB2777]", ring: "ring-[#DB2777]" }, { bg: "bg-[#475569]", ring: "ring-[#475569]" }, { bg: "bg-[#EA580C]", ring: "ring-[#EA580C]" }]
11 |
12 | return (
13 |
14 |
Pick your favorite color
15 |
32 |
33 | )
34 | }
35 |
--------------------------------------------------------------------------------
/previewsComponents/FUICtaWithBlueBackground.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUICtaWithBlueBackground() {
10 | return (
11 |
12 |
13 |
14 |
15 | Build the future with us
16 |
17 |
18 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur excepteur sint occaecat cupidatat non proident.
19 |
20 |
21 |
26 |
27 |
28 |
29 | )
30 | }
31 |
--------------------------------------------------------------------------------
/previewsComponents/FUICtaWithLinkOnTheSide.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUICtaWithLinkOnTheSide() {
10 | return (
11 |
12 |
13 |
14 |
15 | Build your SaaS solution with help from our experts
16 |
17 |
18 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
19 |
20 |
21 |
26 |
27 |
28 | )
29 | }
30 |
--------------------------------------------------------------------------------
/previewsComponents/FUIDarkCta.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIDarkCta() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 | Get Unlimited Access To All Templates
17 |
18 |
19 | Nam erat risus, sodales sit amet lobortis ut, finibus eget metus. Cras aliquam ante ut tortor posuere feugiat. Duis sodales nisi id porta lacinia.
20 |
21 |
22 |
36 |
37 |
38 | )
39 | }
40 |
--------------------------------------------------------------------------------
/previewsComponents/FUIDarkCtaWithLinkOnTheSide.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIDarkCtaWithLinkOnTheSide() {
10 | return (
11 |
12 |
13 |
14 |
15 | Build your SaaS solution with help from our experts
16 |
17 |
18 | Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
19 |
20 |
21 |
26 |
27 |
28 | )
29 | }
30 |
--------------------------------------------------------------------------------
/previewsComponents/FUIDarkStatsWithInCards.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIDarkStatsWithInCards() {
10 |
11 | const stats = [
12 | {
13 | data: "35K",
14 | title: "Customers"
15 | },
16 | {
17 | data: "40+",
18 | title: "Countries"
19 | },
20 | {
21 | data: "30M+",
22 | title: "Total revenue"
23 | },
24 | ]
25 |
26 | return (
27 |
28 |
29 |
30 |
31 | Our customers are always happy
32 |
33 |
34 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi venenatis sollicitudin quam ut tincidunt.
35 |
36 |
37 |
38 |
39 | {
40 | stats.map((item, idx) => (
41 |
42 | {item.data}
43 | {item.title}
44 |
45 | ))
46 | }
47 |
48 |
49 |
50 |
51 | )
52 | }
53 |
--------------------------------------------------------------------------------
/previewsComponents/FUIDefaultSelectMenu.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIDefaultSelectMenu() {
10 | return (
11 |
12 |
18 |
23 |
24 |
25 | Project manager
26 | Software engineer
27 | IT manager
28 | UI / UX designer
29 |
30 |
31 | );
32 | };
33 |
34 |
--------------------------------------------------------------------------------
/previewsComponents/FUIDisabledButtons.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIDisabledButtons() {
10 | return (
11 |
12 |
15 | Button
16 |
17 |
18 |
21 | Button
22 |
23 |
24 |
27 | Button
28 |
29 |
30 |
33 | Button
34 |
35 |
36 |
39 | Button
40 |
41 |
42 | )
43 | }
44 |
--------------------------------------------------------------------------------
/previewsComponents/FUIEmailInput.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIEmailInput() {
10 | return (
11 |
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/previewsComponents/FUIHeroSectionWithBottomImage.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIHeroSectionWithBottomImage() {
10 | return (
11 |
12 |
13 |
14 |
15 | Build products for everyone
16 |
17 |
18 | Design your projects faster with the largest figma UI kit
19 |
20 |
21 | Sed ut perspiciatis unde omnis iste natus voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae.
22 |
23 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | )
38 | }
39 |
--------------------------------------------------------------------------------
/previewsComponents/FUIPhoneNumberInput.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIPhoneNumberInput() {
10 | return (
11 |
12 |
13 | Phone number
14 |
15 |
16 |
17 |
18 | US
19 | ES
20 | MR
21 |
22 |
23 |
28 |
29 |
30 | )
31 | }
32 |
--------------------------------------------------------------------------------
/previewsComponents/FUIPrimaryButtons.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIPrimaryButtons() {
10 | return (
11 |
12 |
15 | Button
16 |
17 |
18 |
19 |
22 | Button
23 |
24 |
25 |
28 | Button
29 |
30 |
31 |
34 | Button
35 |
36 |
37 |
40 | Button
41 |
42 |
43 | )
44 | }
45 |
--------------------------------------------------------------------------------
/previewsComponents/FUIPrimaryCta.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIPrimaryCta() {
10 | return (
11 |
12 |
13 |
14 |
15 | build your websites with high performance
16 |
17 |
18 | Nam erat risus, sodales sit amet lobortis ut, finibus eget metus. Cras aliquam ante ut tortor posuere feugiat. Duis sodales nisi id porta lacinia.
19 |
20 |
21 |
24 | Try it out
25 |
26 |
27 |
28 |
29 |
30 |
31 | )
32 | }
33 |
--------------------------------------------------------------------------------
/previewsComponents/FUIRoundedButtons.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIRoundedButtons() {
10 | return (
11 |
12 |
13 |
16 | Button
17 |
18 |
19 |
22 | Button
23 |
24 |
25 |
28 | Button
29 |
30 |
31 |
34 | Button
35 |
36 |
37 |
40 | Button
41 |
42 |
43 |
44 | )
45 | }
46 |
--------------------------------------------------------------------------------
/previewsComponents/FUISearchInput.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUISearchInput() {
10 | return (
11 |
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/previewsComponents/FUISecondaryButtons.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUISecondaryButtons() {
10 | return (
11 |
12 |
15 | Button
16 |
17 |
18 |
21 | Button
22 |
23 |
24 |
27 | Button
28 |
29 |
30 |
33 | Button
34 |
35 |
36 |
39 | Button
40 |
41 |
42 | )
43 | }
44 |
45 |
--------------------------------------------------------------------------------
/previewsComponents/FUISecondaryCta.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUISecondaryCta() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 | build your websites with high performance
17 |
18 |
19 | Nam erat risus, sodales sit amet lobortis ut, finibus eget metus. Cras aliquam ante ut tortor posuere feugiat. Duis sodales nisi id porta lacinia.
20 |
21 |
24 | Try it out
25 |
26 |
27 |
28 |
29 |
30 |
31 |
36 |
37 |
38 |
39 | )
40 | }
41 |
42 |
--------------------------------------------------------------------------------
/previewsComponents/FUISecondaryNewsletter.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUISecondaryNewsletter() {
10 | return (
11 |
12 |
13 |
14 | Subscribe to our newsletter
15 |
16 |
17 | Stay up to date with the roadmap progress, announcements and exclusive discounts feel free to sign up with your email.
18 |
19 |
20 |
21 |
35 |
36 | Product updates, announcements, and discounts.
37 | Read our Privacy Policy
38 |
39 |
40 |
41 | )
42 | }
43 |
--------------------------------------------------------------------------------
/previewsComponents/FUISectionHeaderWithButtons.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUISectionHeaderWithButtons() {
10 | return (
11 |
12 |
13 |
14 |
15 | Analytics
16 |
17 |
18 |
32 |
33 |
34 | )
35 | }
36 |
--------------------------------------------------------------------------------
/previewsComponents/FUISectionHeaderWithDescriptionAndButton.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUISectionHeaderWithDescriptionAndButton() {
10 | return (
11 |
12 |
13 |
14 |
15 | Team members
16 |
17 |
18 | Lorem Ipsum is simply dummy text of the printing and typesetting industry.
19 |
20 |
21 |
29 |
30 |
31 | )
32 | }
33 |
--------------------------------------------------------------------------------
/previewsComponents/FUISectionHeaderWithSearchBox.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUISectionHeaderWithSearchBox() {
10 | return (
11 |
12 |
13 |
14 |
15 | Team members
16 |
17 |
18 | Lorem Ipsum text of the printing and typesetting industry.
19 |
20 |
21 |
33 |
34 |
35 | )
36 | }
37 |
--------------------------------------------------------------------------------
/previewsComponents/FUIStatsOnTheSide.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIStatsOnTheSide() {
10 |
11 | const stats = [
12 | {
13 | data: "35K",
14 | title: "Customers"
15 | },
16 | {
17 | data: "10K+",
18 | title: "Downloads"
19 | },
20 | {
21 | data: "40+",
22 | title: "Countries"
23 | },
24 | {
25 | data: "30M+",
26 | title: "Total revenue"
27 | },
28 | ]
29 |
30 | return (
31 |
32 |
33 |
34 |
35 | We do our best to make customers always happy
36 |
37 |
38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi venenatis sollicitudin quam ut tincidunt.
39 |
40 |
41 |
42 |
43 | {
44 | stats.map((item, idx) => (
45 |
46 | {item.data}
47 | {item.title}
48 |
49 | ))
50 | }
51 |
52 |
53 |
54 |
55 | )
56 | }
57 |
--------------------------------------------------------------------------------
/previewsComponents/FUIStatsWithTitleAndDescription.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIStatsWithTitleAndDescription() {
10 |
11 | const stats = [
12 | {
13 | data: "35K",
14 | title: "Customers"
15 | },
16 | {
17 | data: "10K+",
18 | title: "Downloads"
19 | },
20 | {
21 | data: "40+",
22 | title: "Countries"
23 | },
24 | {
25 | data: "30M+",
26 | title: "Total revenue"
27 | },
28 | ]
29 |
30 | return (
31 |
32 |
33 |
34 |
35 | Our customers are always happy
36 |
37 |
38 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi venenatis sollicitudin quam ut tincidunt.
39 |
40 |
41 |
42 |
43 | {
44 | stats.map((item, idx) => (
45 |
46 | {item.data}
47 | {item.title}
48 |
49 | ))
50 | }
51 |
52 |
53 |
54 |
55 | )
56 | }
57 |
--------------------------------------------------------------------------------
/previewsComponents/FUIStepsWithLine.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIStepsWithLine() {
10 |
11 | const [steps, setStep] = React.useState({
12 | stepsItems: ["Profile", "Contact", "Identity", "Passport"],
13 | currentStep: 2
14 | })
15 |
16 | return (
17 |
18 |
19 | {steps.stepsItems.map((item, idx) => (
20 |
21 |
22 |
idx + 1 ? "bg-indigo-600" : "bg-gray-200"}`}>
23 |
24 |
idx + 1 ? "text-indigo-600" : ""}`}>Step {idx + 1}
25 |
26 | {item}
27 |
28 |
29 |
30 |
31 | ))}
32 |
33 |
34 | )
35 | }
36 |
--------------------------------------------------------------------------------
/previewsComponents/FUITestimonialCentered.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUITestimonialCentered() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 | “Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc et est hendrerit, porta nunc vitae, gravida justo. Nunc fermentum magna lorem, euismod volutpat arcu volutpat et.“
18 |
19 |
20 |
21 |
22 |
23 | Martin escobar
24 | Founder of meta
25 |
26 |
27 |
28 |
29 |
30 |
31 | )
32 | }
33 |
--------------------------------------------------------------------------------
/previewsComponents/FUITestimonialCenteredWithLogo.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUITestimonialCenteredWithLogo() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | “Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc et est hendrerit, porta nunc vitae, gravida justo. Nunc fermentum magna lorem, euismod volutpat arcu volutpat et.“
21 |
22 |
23 |
24 |
25 |
26 | Martin escobar
27 | Founder of meta
28 |
29 |
30 |
31 |
32 |
33 |
34 | )
35 | }
36 |
--------------------------------------------------------------------------------
/previewsComponents/FUITestimonialWithBackgroundColor.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUITestimonialWithBackgroundColor() {
10 | return (
11 |
12 |
13 |
14 |
What people are saying
15 |
16 |
17 |
18 | “Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc et est hendrerit, porta nunc vitae, gravida justo. Nunc fermentum magna lorem, euismod volutpat arcu volutpat et.“
19 |
20 |
21 |
22 |
23 |
24 | Martin escobar
25 | Founder of meta
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | )
34 | }
35 |
--------------------------------------------------------------------------------
/previewsComponents/FUIUploadFileCard.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIUploadFileCard() {
10 | return (
11 |
12 |
13 |
14 |
15 |
16 | Click to Upload your file or drag and drop your file here
17 |
18 |
19 |
20 | )
21 | }
22 |
--------------------------------------------------------------------------------
/previewsComponents/FUIUsernameInput.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIUsernameInput() {
10 | return (
11 |
12 |
13 | Username
14 |
15 |
16 |
17 | @
18 |
19 |
25 |
26 |
27 | )
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/previewsComponents/FUIWebsiteUrlInput.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIWebsiteUrlInput() {
10 | return (
11 |
12 |
13 | Website URL
14 |
15 |
16 |
17 | https://
18 |
19 |
25 |
26 |
27 | )
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/previewsComponents/FUIWithPreviousAndNextLink.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import * as Avatar from "@radix-ui/react-avatar";
3 | import * as ContextMenu from "@radix-ui/react-context-menu";
4 | import * as Dialog from "@radix-ui/react-dialog";
5 | import * as Select from "@radix-ui/react-select";
6 | import * as Tabs from "@radix-ui/react-tabs";
7 | import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
8 |
9 | export default function FUIWithPreviousAndNextLink() {
10 |
11 | const [pages, setPages] = React.useState(["1", "2", "3", , "...", "8", "9", "10",])
12 | const [currentPage, setCurrentPage] = React.useState("1")
13 |
14 | return (
15 |
16 |
17 |
Previous
18 |
19 | Page {currentPage} of {pages.length}
20 |
21 |
Next
22 |
23 |
24 | )
25 | }
26 |
--------------------------------------------------------------------------------
/public/icons/nextjs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/public/icons/tailwind.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/public/icons/vuejs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/images/fb-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/images/tw-icon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/logo-letter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/logo-letter.png
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # Block all crawlers for /accounts
2 | User-agent: *
3 | Disallow: /accounts
4 |
5 | # Allow all crawlers
6 | User-agent: *
7 | Allow: /
--------------------------------------------------------------------------------
/public/templates/blinder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/templates/blinder.png
--------------------------------------------------------------------------------
/public/templates/ioacademy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/templates/ioacademy.png
--------------------------------------------------------------------------------
/public/templates/mailgo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/templates/mailgo.png
--------------------------------------------------------------------------------
/public/templates/split.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/templates/split.png
--------------------------------------------------------------------------------
/public/templates/starboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/templates/starboard.png
--------------------------------------------------------------------------------
/public/thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnail.png
--------------------------------------------------------------------------------
/public/thumbnails/Alerts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Alerts.png
--------------------------------------------------------------------------------
/public/thumbnails/Authentication.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Authentication.png
--------------------------------------------------------------------------------
/public/thumbnails/Avatars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Avatars.png
--------------------------------------------------------------------------------
/public/thumbnails/Banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Banner.png
--------------------------------------------------------------------------------
/public/thumbnails/Buttons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Buttons.png
--------------------------------------------------------------------------------
/public/thumbnails/CTA-Section.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/CTA-Section.png
--------------------------------------------------------------------------------
/public/thumbnails/Cards.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Cards.png
--------------------------------------------------------------------------------
/public/thumbnails/Contact.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Contact.png
--------------------------------------------------------------------------------
/public/thumbnails/Context-menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Context-menu.png
--------------------------------------------------------------------------------
/public/thumbnails/FAQS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/FAQS.png
--------------------------------------------------------------------------------
/public/thumbnails/Feature.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Feature.png
--------------------------------------------------------------------------------
/public/thumbnails/Footers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Footers.png
--------------------------------------------------------------------------------
/public/thumbnails/Heroes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Heroes.png
--------------------------------------------------------------------------------
/public/thumbnails/Inputs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Inputs.png
--------------------------------------------------------------------------------
/public/thumbnails/Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Logo.png
--------------------------------------------------------------------------------
/public/thumbnails/Modals.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Modals.png
--------------------------------------------------------------------------------
/public/thumbnails/Navbars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Navbars.png
--------------------------------------------------------------------------------
/public/thumbnails/Newsletter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Newsletter.png
--------------------------------------------------------------------------------
/public/thumbnails/Pagination.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Pagination.png
--------------------------------------------------------------------------------
/public/thumbnails/Pricing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Pricing.png
--------------------------------------------------------------------------------
/public/thumbnails/Radio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Radio.png
--------------------------------------------------------------------------------
/public/thumbnails/Section-Header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Section-Header.png
--------------------------------------------------------------------------------
/public/thumbnails/Select-Menus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Select-Menus.png
--------------------------------------------------------------------------------
/public/thumbnails/Sidebar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Sidebar.png
--------------------------------------------------------------------------------
/public/thumbnails/Stats.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Stats.png
--------------------------------------------------------------------------------
/public/thumbnails/Steps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Steps.png
--------------------------------------------------------------------------------
/public/thumbnails/Table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Table.png
--------------------------------------------------------------------------------
/public/thumbnails/Tabs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Tabs.png
--------------------------------------------------------------------------------
/public/thumbnails/Team.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Team.png
--------------------------------------------------------------------------------
/public/thumbnails/Testimonial.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/Testimonial.png
--------------------------------------------------------------------------------
/public/thumbnails/page404.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/public/thumbnails/page404.png
--------------------------------------------------------------------------------
/public/up-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Group 6
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/readme/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/readme/1.png
--------------------------------------------------------------------------------
/readme/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/readme/2.png
--------------------------------------------------------------------------------
/readme/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/readme/3.png
--------------------------------------------------------------------------------
/readme/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MarsX-dev/floatui/70824397a5ca6eca3cff1bee37d8a6972d653860/readme/4.png
--------------------------------------------------------------------------------
/styles/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 | .faq-box::after,
10 | .faq-box::before {
11 | position: absolute;
12 | content: "";
13 | 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");
14 | width: 120px;
15 | height: 140px;
16 | z-index: -1;
17 | }
18 |
19 | .faq-box::before {
20 | top: -1em;
21 | left: -1em;
22 | }
23 |
24 | .faq-box::after {
25 | bottom: -1em;
26 | right: -1em;
27 | }
28 |
29 | .notf-right {
30 | animation: 0.4s notfRight forwards;
31 | }
32 |
33 | @keyframes notfRight {
34 | 0% {
35 | transform: translateX(5em);
36 | }
37 |
38 | 100% {
39 | transform: translateX(0);
40 | }
41 | }
42 |
43 | .notf-brogress {
44 | animation: 14s brogress forwards;
45 | }
46 |
47 | @keyframes brogress {
48 | 0% {
49 | width: 0%;
50 | }
51 |
52 | 100% {
53 | width: 100%;
54 | }
55 | }
56 |
57 | code {
58 | font-size: 15px !important;
59 | }
60 |
61 | pre {
62 | outline: 0 !important;
63 | }
64 |
65 | .remove-scrollbar::-webkit-scrollbar {
66 | -webkit-appearance: none;
67 | -moz-appearance: none;
68 | appearance: none;
69 | height: 0;
70 | }
71 |
--------------------------------------------------------------------------------
/styles/prismjs-theme.css:
--------------------------------------------------------------------------------
1 | code[class*=language-],pre[class*=language-]{color:#c5c8c6;text-shadow:0 1px rgba(0,0,0,.3);font-family:Inconsolata,Monaco,Consolas,'Courier New',Courier,monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background-color:#1f2937}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#7c7c7c}.token.punctuation{color:#c5c8c6}.namespace{opacity:.7}.token.keyword,.token.property,.token.tag{color:#96cbfe}.token.class-name{color:#ffffb6;text-decoration:underline}.token.boolean,.token.constant{color:#9c9}.token.deleted,.token.symbol{color:#f92672}.token.number{color:#ff73fd}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#a8ff60}.token.variable{color:#c6c5fe}.token.operator{color:#ededed}.token.entity{color:#ffffb6;cursor:help}.token.url{color:#96cbfe}.language-css .token.string,.style .token.string{color:#87c38a}.token.atrule,.token.attr-value{color:#f9ee98}.token.function{color:#dad085}.token.regex{color:#e9c062}.token.important{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | darkMode: "class",
3 | content: [
4 | "./app/**/*.{js,ts,jsx,tsx}",
5 | "./components/**/*.{js,ts,jsx,tsx}",
6 | "./package/**/*.{js,ts,jsx,tsx}",
7 | "./previewsComponents/**/*.{js,ts,jsx,tsx}",
8 | "./examples/**/*.{js,ts,jsx,tsx}",
9 | "./viewport/**/*.{js,ts,jsx,tsx}",
10 | "./componentsDB/**/*.md",
11 | ],
12 | theme: {
13 | extend: {},
14 | },
15 | plugins: [
16 | require("@tailwindcss/typography"),
17 | require("@tailwindcss/forms")({
18 | strategy: "class", // only generate classes
19 | }),
20 | ],
21 | };
22 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "baseUrl": ".",
4 | "target": "es5",
5 | "lib": ["dom", "dom.iterable", "esnext"],
6 | "allowJs": true,
7 | "skipLibCheck": true,
8 | "strict": true,
9 | "forceConsistentCasingInFileNames": true,
10 | "noEmit": true,
11 | "esModuleInterop": true,
12 | "module": "esnext",
13 | "moduleResolution": "node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "jsx": "preserve",
17 | "incremental": true,
18 | "plugins": [
19 | {
20 | "name": "next"
21 | }
22 | ]
23 | },
24 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
25 | "exclude": ["node_modules"]
26 | }
27 |
--------------------------------------------------------------------------------
/types/types.ts:
--------------------------------------------------------------------------------
1 | export type ComponentCards = {
2 | id: string;
3 | cover_url: string;
4 | section_name: string;
5 | slug: string;
6 | description: string;
7 | count: number;
8 | isNew: boolean;
9 | };
10 |
11 | export type ComponentDetails = {
12 | id?: string;
13 | title?: string;
14 | slug?: string;
15 | category?: string;
16 | paid?: boolean | null;
17 | isActive?: boolean;
18 | };
19 |
20 | export type CodeBlock = {
21 | label?: string;
22 | code?: string;
23 | };
24 |
25 | export type Component = {
26 | ltr: {
27 | preview: string;
28 | react: {
29 | jsxTail: CodeBlock[];
30 | jsxCss: CodeBlock[];
31 | };
32 | };
33 | rtl: {
34 | preview: string;
35 | react: {
36 | jsxTail: CodeBlock[];
37 | jsxCss: CodeBlock[];
38 | };
39 | };
40 | };
41 |
42 | export type Templates = {
43 | id: string;
44 | banner_url: string;
45 | product_id: number;
46 | template_name: string;
47 | price: number;
48 | slug: string;
49 | templateFile: string;
50 | details: string;
51 | preview_url: string;
52 | description: string;
53 | created_at: string;
54 | };
55 |
56 | export type BlogPost = {
57 | slug: string;
58 | createdAt: string;
59 | headline: string;
60 | metaDescription: string;
61 | };
62 |
63 | export type Dir = "ltr" | "rtl";
64 | export type TechStack = "jsxTail" | "jsxCss";
65 |
--------------------------------------------------------------------------------
/utils/mergeTW.ts:
--------------------------------------------------------------------------------
1 | import { twMerge } from "tailwind-merge";
2 |
3 | export default (classNameValue: string, ...classes: string[]) =>
4 | twMerge(classNameValue, ...classes);
5 |
--------------------------------------------------------------------------------
/utils/seobot.ts:
--------------------------------------------------------------------------------
1 | export async function getPosts(page: number) {
2 | const key = process.env.SEOBOT_API_KEY;
3 | if (!key) throw Error("SEOBOT_API_KEY enviroment variable must be set");
4 |
5 | try {
6 | const res = await fetch(
7 | `https://app.seobotai.com/api/articles?key=${key}&page=${page}&limit=10`
8 | );
9 | const result = await res.json();
10 | return result?.data;
11 | } catch {
12 | return { total: 0, articles: [] };
13 | }
14 | }
15 |
16 | export async function getPost(slug: string) {
17 | const key = process.env.SEOBOT_API_KEY;
18 | if (!key) throw Error("SEOBOT_API_KEY enviroment variable must be set");
19 |
20 | try {
21 | const res = await fetch(
22 | `https://app.seobotai.com/api/article?key=${key}&slug=${slug}`,
23 | { cache: "no-store" }
24 | );
25 | const result = await res.json();
26 | return result?.data?.article;
27 | } catch {
28 | return null;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/viewport/index.tsx:
--------------------------------------------------------------------------------
1 | import Viewport from './components/Viewport';
2 |
3 | export default Viewport
--------------------------------------------------------------------------------
/viewport/template/index.ts:
--------------------------------------------------------------------------------
1 | const template:string = `
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Document
13 |
14 |
15 |
16 |
17 |
18 | `
19 |
20 | export default template
--------------------------------------------------------------------------------