docs: add marketing pages (#3308)

Co-authored-by: Benjamin Canac <canacb1@gmail.com>
This commit is contained in:
Sébastien Chopin
2025-02-14 14:18:14 +01:00
committed by GitHub
parent d4bc9b3d0e
commit ba3ed86ae1
52 changed files with 1855 additions and 83 deletions

View File

@@ -0,0 +1,217 @@
title: Nuxt UI Pro Pricing
description: Start for free in development mode, then upgrade to a paid plan to unlock the full features of Nuxt UI Pro when you are ready to launch.
pricing:
headline: Pricing
title: Upgrade to Nuxt UI [Pro]{class="text-(--ui-primary)"}.
description: On top of 40+ open source components from Nuxt UI, Pro gives you access to 50+ premium Vue components to create beautiful & responsive Nuxt applications in minutes. It includes all primitives to build landing pages, documentations, blogs, dashboards or entire SaaS products.
freePlan:
title: Free in development
description: Try Nuxt UI Pro for free in development, no credit card required. Upgrade when ready to deploy.
variant: soft
orientation: horizontal
button:
label: Get started for Free
to: '/getting-started/installation/pro/nuxt'
color: 'neutral'
variant: 'outline'
figma:
title: Figma Kit Pro
description: Get all Nuxt UI Pro components in a Figma kit to design your next application before coding. Everything you need, from wire-framing to high-fidelity web integration.
variant: soft
orientation: horizontal
price: $149 - $349
terms: Solo & Team licenses available.
features:
- 1700+ components & variants from Nuxt UI & UI Pro
- 'Variables: primary, neutral, fonts, rounded, shadows, etc.'
- Light & dark mode support
- 'Templates: Starter, Landing, Docs, SaaS and Dashboard'
- Auto-layout & responsive ready
- Tailwind CSS assets & icons included
- Free [preview available](https://www.figma.com/design/mxXR9binOSLU3rYKZZRPXs/PREVIEW---NuxtUIPro-V3-BETA?m=auto&t=c4598Wr0rZwKPs5M-1)
- Includes Nuxt UI [Figma Kit](https://www.figma.com/community/file/1288455405058138934)
button:
label: Explore Figma Kit Pricing
to: 'https://nuxt.lemonsqueezy.com/buy/17213c49-621b-4c2c-9478-3a50a099003d'
color: 'neutral'
plans:
- title: Solo
description: Tailored for indie hackers, freelancers and solo founders.
price: $249
billing_period: one-time payment
billing_cycle: plus local taxes
features:
- One developer
- Unlimited projects
- Access to the GitHub repository
- Unlimited minor & patch updates
- Lifetime access
button:
label: Buy now
to: https://nuxt.lemonsqueezy.com/buy/057dacb2-87ba-4dc1-9256-59ee5b3bd394
- title: Startup
description: Best suited for small teams, startups and agencies.
price: $499
billing_period: one-time payment
billing_cycle: plus local taxes
features:
- Up to 5 developers
- Unlimited projects
- Access to the GitHub repository
- Unlimited minor & patch updates
- Lifetime access
button:
label: Buy now
to: https://nuxt.lemonsqueezy.com/buy/2e042a33-7e76-4dda-bd68-e353c182e571
highlight: true
- title: Organization
description: Ideal for larger teams and organizations.
price: $999
billing_period: one-time payment
billing_cycle: plus local taxes
features:
- Up to 20 developers
- Unlimited projects
- Everything in Startup
- Prioritized feature requests
- Unlimited minor & patch updates
- Lifetime access
button:
label: Buy now
to: https://nuxt.lemonsqueezy.com/buy/2979099c-b7a0-4ba1-90e0-a0d60509b92d
logos:
- src: /pro/logos/springfieldclinic.svg
alt: Springfield Clinic
- src: /pro/logos/churnkey.svg
alt: Churnkey
- src: /pro/logos/bosch.svg
alt: BOSCH
- src: /pro/logos/blizzard.svg
alt: Blizzard
- src: /pro/logos/bodet.svg
alt: Bodet
- src: /pro/logos/win.svg
alt: WinReality
- src: /pro/logos/tower.svg
alt: Tower Research
- src: /pro/logos/liegeairport.svg
alt: Liege Airport
- src: /pro/logos/wuniversity.svg
alt: University of Washington
- src: /pro/logos/funda.svg
alt: Funda
- src: /pro/logos/exxonmobil.svg
alt: ExxonMobil
- src: /pro/logos/mainpost.svg
alt: Main Post
- src: /pro/logos/insep.svg
alt: INSEP
- src: /pro/logos/applause.svg
alt: Applause
- src: /pro/logos/instadapp.svg
alt: Instadapp
testimonials:
title: What people are saying
description: Nuxt UI Pro is already trusted by 2,000+ users and teams around the world.
items:
- quote: "We were using a SaaS service for the docs site, but were left unfulfilled. We put in the effort to do it in house, with UI Pro and not only did we get complimented by a prospect on our site, but they wanted to know our platform."
user:
name: 'Anthony Bettini'
description: 'CEO and founder of VulnCheck'
to: 'https://www.linkedin.com/in/anthonybettini/'
target: _blank
avatar:
src: 'https://media.licdn.com/dms/image/v2/C4E03AQEY3pmXsH8hDg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1519741249602?e=1743638400&v=beta&t=lw2K6vS0OOCZWGtHY1buJVkRItQCa4OQw0vzAhhpJk8'
- quote: "Wow, Nuxt UI Pro is a total game-changer! I'm seriously impressed with the quality, attention to detail, and the insane variety of components you get. It's like hitting the jackpot for any developer. I've saved countless hours that I would've spent stressing over making my apps look good, with amazing accessible UX, and instead, I've been able to focus on the real deal building the app itself. It's an instant buy for me, every single time. No second thoughts!"
user:
name: 'Yaz Jallad'
description: 'Founder Ninjaparade Digital'
to: 'https://twitter.com/ninjaparade/'
target: _blank
avatar:
src: 'https://pbs.twimg.com/profile_images/1824690890222485504/lQ7v1AGt_400x400.jpg'
- quote: "Nuxt UI Pro saves 100s of hours of dev and design time while delivering a clean professional look on any device."
user:
name: 'Kevin Olson'
description: 'Founder of Fume.app'
to: 'https://github.com/acidjazz'
target: _blank
avatar:
src: 'https://ipx.nuxt.com/f_auto,s_40x40/gh_avatar/acidjazz'
srcset: 'https://ipx.nuxt.com/f_auto,s_80x80/gh_avatar/acidjazz 2x'
- quote: "I decided to replace my custom-built components with a component library and chose Nuxt UI Pro. It only took me a few hours, and the new UI looks more professional. Integrating the library is easy; the components are well-documented and highly customizable. I can only recommend it; this library is my new choice for new SaaS products."
user:
name: 'Michael Hoffmann'
description: 'Senior Frontend Developer'
to: 'https://mokkapps.de/'
target: _blank
avatar:
src: 'https://ipx.nuxt.com/f_auto,s_40x40/gh_avatar/mokkapps'
srcset: 'https://ipx.nuxt.com/f_auto,s_80x80/gh_avatar/mokkapps 2x'
- quote: "Nuxt UI Pro is my go to component library. Out-of-the-box it handles all of the UI demands I throw at it while looking great. The customisation is really worth thought out, allowing you to override components in a breeze. Always amazed at the improvements dropped in each update as well, the team is doing an amazing job."
user:
name: 'Harlan Wilton'
description: 'Nuxt core team member'
to: 'https://github.com/harlan-zw'
target: _blank
avatar:
src: 'https://ipx.nuxt.com/f_auto,s_40x40/gh_avatar/harlan-zw'
srcset: 'https://ipx.nuxt.com/f_auto,s_80x80/gh_avatar/harlan-zw 2x'
- quote: "I jumped at the chance to buy the Nuxt team's new UI kit as soon as I saw it. While I'm already a fan of Nuxt UI, the pro version takes it to a whole new level and lets me paste entire blocks into all my projects, saving me a ton of time."
user:
name: 'Thomas Sanlis'
description: 'Freelance developer and designer'
to: 'https://twitter.com/T_Zahil'
target: _blank
avatar:
src: 'https://pbs.twimg.com/profile_images/1374040164180299791/ACw4G3nZ_400x400.jpg'
- quote: "Nuxt UI has allowed me to develop my SaaS without any prior mockups. The design quality of their components and the intelligence of the DX meant that I was able to try many different layouts for my application until I found the perfect UX for my users. Nuxt UI is the ui-kit I would have dreamed of building myself, and Nuxt UI Pro makes things even easier when you want to go further with your SaaS. Kudos to the team."
user:
name: 'Benjamin Code'
description: 'YouTuber and SaaS builder'
to: 'https://twitter.com/benjamincode'
target: _blank
avatar:
src: 'https://pbs.twimg.com/profile_images/1607353032420769793/I8qQSUfQ_400x400.jpg'
- quote: "Nuxt UI Pro is my preferred choice for everything, from a POC to a web platform. It's ready to use out-of-the-box and assists me in crafting pixel-perfect UIs. It saves me a significant amount of time while remaining highly customizable. Give it a try, and you won't be let down."
user:
name: 'Estéban Soubiran'
description: 'Web developer and UnJS member'
to: 'https://twitter.com/soubiran_'
target: _blank
avatar:
src: 'https://pbs.twimg.com/profile_images/1801649350319218689/aS_X_iTm_400x400.jpg'
- quote: "As someone who builds a lot of projects, Nuxt UI Pro has been a game-changer. It's not just about saving time it's about having components that are thoughtfully designed and just work. The developer experience is exceptional, and I can focus on building features instead of tweaking UI components."
user:
name: 'Hugo Richard'
description: 'Frontend Engineer at NuxtLabs'
to: 'https://twitter.com/hugorcd__'
target: _blank
avatar:
src: 'https://ipx.nuxt.com/f_auto,s_40x40/gh_avatar/hugorcd'
srcset: 'https://ipx.nuxt.com/f_auto,s_80x80/gh_avatar/hugorcd 2x'
faq:
title: Frequently Asked Questions
description: If you can't find what you're looking for, email our support team and if you're lucky someone will get back to you.
items:
- label: What is the difference between Nuxt UI Pro and Nuxt UI?
content: Nuxt UI Pro is a collection of premium Vue components, composables and utils built on top of Nuxt UI. It includes advanced responsive components ([Header](/components/header), [PageHero](/components/page-hero), [PricingPlan](/components/pricing-plan), [BlogPost](/components/blog-post), etc.) designed ot help you build web applications faster.
defaultOpen: true
- label: Do you have a free trial?
content: We have much better than a free trial, you can use Nuxt UI Pro for free in development mode. Once you are ready to deploy your application, you can purchase a license.
- label: What do I get with my license?
content: Once you purchase a license, you will receive a license key to [activate](/pro/activate) by inviting the team members to our private GitHub repository. On top of having access to the source code and private roadmap, the license key will allow you to [build your project to production](/getting-started/license#build) with the `nuxt build` command.
- label: Can I use Nuxt UI Pro for Open Source projects?
content: Yes, you can use Nuxt UI Pro for your open source projects as well as your commercial projects as long as you don't sell Nuxt UI Pro as a product and that you don't share your license key.
- label: What does “Unlimited minor & patch updates” include?
content: We add new components and improvements to Nuxt UI Pro as we get new ideas and feedback, you will receive these updates for the major version you purchased. :br **Your license key will work forever for the major version.** We may release a major version including more advanced components and features in the future, you will be able to upgrade to this version with a generous discount.
- label: I purchased Nuxt UI Pro previous versions, do I need to purchase the version 3?
content: '**The version 3 is a free upgrade**, so the license you bought on previous versions will be valid for v3.'
- label: What does “lifetime access” means?
content: Nuxt UI Pro is a one-time purchase, with no recurring subscription. You will have access to all assets of Nuxt UI Pro forever.
- label: Do you have discounts for students or non-profits?
content: Yes, we offer a 50% discount for students using Nuxt UI Pro purely for educational purposes. Contact us at ui-pro@nuxt.com with your details and we'll send you a discount code.
- label: Do you offer technical support?
content: Once you sign up you get access to our private GitHub repository, where you can ask questions, report bugs or feature requests and get help from other customers. If you require more specialised support or consultancy, contact us at ui-pro@nuxt.com.
- label: What is your refund policy?
content: If you are not satisfied with Nuxt UI Pro, let us know within 14 days of your purchase at ui-pro@nuxt.com and we'll refund your money.

View File

@@ -0,0 +1,174 @@
title: Build faster with Nuxt UI Pro.
description: A collection of premium Vue components, composables and utils built on top of Nuxt UI, oriented on structure and layout and designed to be used as building blocks for your application.
hero:
title: Build faster with Nuxt UI [Pro]{class="text-(--ui-primary)"}.
description: A collection of premium Vue components, composables and utils built on top of Nuxt UI. :br Focused on structure and layout, these **responsive components** are designed to be the perfect **building blocks for your next idea**.
links:
- label: Get started
icon: i-lucide-arrow-right
trailing: true
to: /getting-started/installation/pro/nuxt
size: xl
- label: Purchase a license
size: xl
color: neutral
variant: outline
to: /pro/pricing
features:
title: Create stunning Vue applications faster.
description: Nuxt UI Pro comes packed with powerful features to help you build modern, performant, accessible and responsive Nuxt applications at record speed. From pre-built UI sections to Figma design kits, every detail is crafted to speed up your development and deliver a polished user experience.
features:
- title: 40+ Ready-to-use Sections
description: Pre-built UI components for landing pages, documentation, blogs, dashboards, and more—ready to use out of the box.
icon: i-lucide-layout-grid
- title: Auto Dark Mode
description: Seamlessly adapts to user preferences with a built-in dark mode switch—no extra configuration needed.
icon: i-lucide-moon
- title: Blazing-fast Performance
description: Optimized for Nuxt 3 with minimal bundle size, lightning-fast rendering, and best practices in performance.
icon: i-lucide-zap
- title: SEO & Accessibility Ready
description: Built with proper semantic HTML, structured data, and accessibility in mind for better rankings and usability.
icon: i-lucide-search-check
- title: Fully Customizable UI
description: Modify colors, fonts, spacing, and layouts with Tailwind CSS and Nuxt UIs design tokens to match your brand identity.
icon: i-lucide-settings-2
- title: Nuxt Content Support
description: Write content with Markdown and MDC, making it easy to build documentation, blogs, and knowledge bases.
icon: i-simple-icons-markdown
- title: Vue-only mode
description: Enjoy the benefits of Nuxt UI Pro without Nuxt. Integrate it seamlessly into your Vue 3 + Vite projects and build modern UIs with ease.
icon: i-simple-icons-vuedotjs
- title: Built-in Internationalization (i18n)
description: Easily localize your site with built-in support for multiple languages and right-to-left (RTL) layouts.
icon: i-lucide-globe
- title: Figma Design Kits
description: Match your development workflow with Nuxt UI & UI Pro Figma UI kits, ensuring a fast transition from design to code.
icon: i-simple-icons-figma
authorQuote:
quote: Nuxt UI, born from a desire to improve Vue component development, is the go-to library for building modern web interfaces. We aim to provide you with a comprehensive set of tools to create and customize your next UI while maintaining the best developer experience.
user:
name: Benjamin Canac
description: Author of Nuxt UI
to: https://github.com/benjamincanac
avatar:
src: https://github.com/benjamincanac.png
sections:
- title: The freedom to build anything
description: Nuxt UI Pro ships with an extensive set of advanced components that cover a wide range of use-cases. Carefully crafted to reduce boilerplate code without sacrificing flexibility.
id: features
features:
- name: Fully customizable
description: Like Nuxt UI, change the style of any component from your App Config or customize them specifically through the ui prop.
icon: i-lucide-pencil-ruler
- name: Slots for everything
description: Each component leverages the power of Vue's slots to give you the flexibility to build anything.
icon: i-lucide-code
- name: Responsive by design
description: Nuxt UI Pro components aims to structure your content, they are responsive by design and will adapt to any screen size.
icon: i-lucide-layout
links:
- label: Explore components
to: /components
trailingIcon: i-lucide-arrow-right
code: |
```vue [app.vue]
<script setup lang="ts">
const links = [
{ to: '/', label: 'Home' },
{ to: '/about', label: 'About' },
{ to: '/contact', label: 'Contact' }
]
</script>
<template>
<UApp>
<UHeader :links="links" />
<UPageHero title="Hello World" />
<UPageSection title="Features">
<UPageGrid>
<UPageCard title="First Card" />
<UPageCard title="Second Card" />
<UPageCard title="Third Card" />
</UPageGrid>
</UPageSection>
<UFooter />
</UApp>
</template>
```
- title: The flexibility to control your data
description: Although you can use any data source you want, Nuxt UI Pro is fully integrated with Nuxt Content and provides additional features when the module is detected.
reverse: true
features:
- name: 'Write Markdown with ease'
description: Nuxt UI Pro overrides Nuxt Content prose components to make them awesome but also adds new ones like Callout, CodeGroup, Field, etc.
icon: i-simple-icons-markdown
- name: Full-Text Search out of the box
description: 'Nuxt UI Pro ships with a ready to use command palette component. No need to setup Algolia DocSearch anymore.'
icon: i-lucide-search
links:
- label: Nuxt Content integration
to: /getting-started/content
icon: i-lucide-arrow-right
trailing: true
code: |
```vue [pages/\[...slug\\].vue]
<script setup lang="ts">
const route = useRoute()
const { data: page } = await useAsyncData(route.path, () => queryCollection('content').path(route.path).first())
</script>
<template>
<UPage>
<UPageHeader :title="page.title" :description="page.description" :links="page.links" />
<UPageBody>
<ContentRenderer v-if="page.body" :value="page" />
</UPageBody>
<template #right>
<UContentToc :links="page.body.toc.links" />
</template>
</UPage>
</template>
```
templates:
headline: Templates
title: Kickstart with Nuxt UI Pro in seconds
description: Choose from a variety of templates to get started with Nuxt UI Pro in seconds. Each template is designed to help you build beautiful and responsive Nuxt applications in minutes.
items:
- title: Landing
description: A template for building a landing page with Nuxt UI Pro.
icon: i-lucide-layout
to: 'https://landing-template.nuxt.dev/'
image: '/pro/templates/landing.png'
- title: Saas
description: A template for building a SaaS application with Nuxt UI Pro.
icon: i-lucide-cloud
to: 'https://saas-template.nuxt.dev/'
image: '/pro/templates/saas.png'
- title: Docs
description: A template for building a documentation site with Nuxt UI Pro.
icon: i-lucide-book
to: 'https://docs-template.nuxt.dev/'
image: '/pro/templates/docs.png'
- title: Dashboard
description: A template for building a dashboard with Nuxt UI Pro.
icon: i-lucide-chart-bar
to: 'https://dashboard-template.nuxt.dev/'
image: '/pro/templates/dashboard.png'
cta:
title: Start with Nuxt UI Pro today!
description: Nuxt UI Pro is free in development, but you need a license to use it in production.
links:
- label: Purchase a license
to: '/pro/pricing'
icon: i-lucide-shopping-cart
- label: License
to: '/getting-started/license'
trailingIcon: i-lucide-circle-help
variant: subtle

View File

@@ -0,0 +1,111 @@
title: Official Nuxt UI [Pro]{.text-(--ui-primary)} Templates
description: 'Ready to use templates powered by our premium Vue components and Nuxt Content.<br class="hidden lg:block"> The templates are responsive, accessible and easy to customize so you can get started in no time.'
head.title: Templates
head.description: 'Ready to use templates powered by our premium Vue components and Nuxt Content. The templates are responsive, accessible and easy to customize so you can get started in no time.'
navigation: false
links:
- label: Get started
to: /getting-started/installation/pro/nuxt#use-an-official-template
color: neutral
size: xl
trailingIcon: i-lucide-arrow-right
- label: Purchase a license
size: xl
color: neutral
variant: outline
to: /pro/pricing
templates:
- title: 'Landing'
description: "A landing page template you can use as a starting point for your next idea. You can change the content easily in [`content/index.yml`](https://github.com/nuxt-ui-pro/landing/blob/v3/content/index.yml)."
thumbnail:
dark: https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL2xhbmRpbmctdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjMzNzV9.ja2nUDVOoIFvyaMmg9Jn51uNMoYYt4WA1KWUQBWwUPo.jpg?theme=dark
light: https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL2xhbmRpbmctdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjMzNzV9.ja2nUDVOoIFvyaMmg9Jn51uNMoYYt4WA1KWUQBWwUPo.jpg?theme=light
features:
- title: Full responsive
icon: i-lucide-smartphone
- title: Features, Pricing, Testimonials and FAQ sections
icon: i-lucide-rows-3
- title: Write content in YAML
icon: i-simple-icons-yaml
links:
- label: Live preview
to: https://v3.landing-template.nuxt.dev
target: _blank
trailingIcon: i-lucide-arrow-up-right
color: neutral
- label: Use this template
to: https://github.com/nuxt-ui-pro/landing/tree/v3
target: _blank
icon: i-simple-icons-github
color: neutral
variant: outline
- title: 'Docs'
description: "A ready-to-use documentation template integrated with [Nuxt Content](https://content.nuxt.com). You can start writing your docs right away inside the [`content/`](https://github.com/nuxt-ui-pro/docs/tree/v3/content) directory."
thumbnail:
dark: https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL2RvY3MtdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjM0MTd9.ltVAqPgKG38O01X1zl6MXfrJc55nf9OewXNFjpZ_2JY.jpg?theme=dark
light: https://assets.hub.nuxt.com/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL2RvY3MtdGVtcGxhdGUubnV4dC5kZXYiLCJpYXQiOjE3Mzk0NjM0MTd9.ltVAqPgKG38O01X1zl6MXfrJc55nf9OewXNFjpZ_2JY.jpg?theme=light
features:
- title: Write pages in Markdown
icon: i-simple-icons-markdown
- title: Generated navigation & table of contents
icon: i-lucide-text
- title: Full-text search out of the box
icon: i-lucide-search
links:
- label: Live preview
to: https://v3.docs-template.nuxt.dev/
target: _blank
trailingIcon: i-lucide-arrow-up-right
color: neutral
- label: Use this template
to: https://github.com/nuxt-ui-pro/docs/tree/v3
target: _blank
variant: outline
icon: i-simple-icons-github
color: neutral
- title: 'SaaS'
description: "A fully built SaaS application to launch your next project. It includes a landing page, a pricing page, a documentation and a blog which can customized easily from the `content/` directory."
features:
- title: Includes Landing & Docs sections
icon: i-lucide-grid-2x2-plus
- title: Customizable command palette
icon: i-lucide-command
- title: Authentication pages (login, register)
icon: i-lucide-user-round-check
links:
- label: Live preview (soon)
to: https://v3.saas-template.nuxt.dev
target: _blank
trailingIcon: i-lucide-arrow-up-right
color: neutral
disabled: true
- label: Use this template (soon)
to: https://github.com/nuxt-ui-pro/saas/tree/v3
target: _blank
variant: outline
icon: i-simple-icons-github
color: neutral
disabled: true
- title: 'Dashboard'
description: "A template to illustrate how to build your own dashboard with the 15+ latest Nuxt UI Pro components, designed specifically to create a consistent look and feel."
features:
- title: Mix with SaaS template for a complete solution
icon: i-lucide-puzzle
- title: Includes custom components for charts, date pickers, etc.
icon: i-lucide-bar-chart-big
- title: Resizable multi-column layout
icon: i-lucide-columns-3
links:
- label: Live preview (soon)
to: https://v3.dashboard-template.nuxt.dev
target: _blank
trailingIcon: i-lucide-arrow-up-right
color: neutral
disabled: true
- label: Use this template (soon)
to: https://github.com/nuxt-ui-pro/dashboard/tree/v3
target: _blank
icon: i-simple-icons-github
color: neutral
variant: outline
disabled: true

View File

@@ -0,0 +1,115 @@
<script setup lang="ts">
import { z } from 'zod'
import type { FormSubmitEvent } from '@nuxt/ui'
const title = 'Activate your Nuxt UI Pro License'
const description = 'Enable Nuxt UI Pro in your production projects by activating your license key received by email and get invited to the GitHub private repository.'
const route = useRoute()
useSeoMeta({
title,
description,
ogTitle: `${title} - Nuxt UI Pro`,
ogDescription: description
})
defineOgImageComponent('Docs', {
headline: 'Pro'
})
const schema = z.object({
license: z.string().length(36, 'Invalid license key'),
username: z.string().min(1, 'Required')
})
type Schema = z.output<typeof schema>
const state = reactive<Partial<Schema>>({
license: '',
username: ''
})
const activating = ref(false)
const successMessage = ref()
const errorMessage = ref('')
async function submit(event: FormSubmitEvent<any>) {
activating.value = true
errorMessage.value = ''
successMessage.value = ''
try {
const res: { activationsLeft: number, activationsTotal: number } = await $fetch<{ activationsLeft: number, activationsTotal: number }>('https://api.nuxtlabs.com/ui-pro/activate', {
method: 'POST',
body: {
key: event.data.license,
username: event.data.username
}
})
successMessage.value = 'License activated!'
if (res.activationsTotal > 1) {
successMessage.value += ` ${res.activationsLeft} activation${res.activationsLeft > 1 ? 's' : ''} left.`
}
state.username = ''
} catch (err) {
// @ts-expect-error this is not properly typed
errorMessage.value = err.data?.message || err.message
}
activating.value = false
}
onMounted(() => {
if (route.query.license_key && !state.license) {
state.license = route.query.license_key as string
}
})
</script>
<template>
<UPageHero headline="License Activation" :title="title" :description="description">
<template #top>
<div class="absolute z-[-1] rounded-full bg-[var(--ui-primary)] blur-[300px] size-60 sm:size-80 transform -translate-x-1/2 left-1/2 -translate-y-80" />
<StarsBg />
</template>
<div>
<UCard class="lg:w-1/2 m-auto backdrop-blur-sm">
<UForm
:schema="schema"
:validate-on="['blur']"
:state="state"
class="space-y-4"
@submit="submit"
>
<UFormField label="License Key" name="license">
<UInput v-model="state.license" autocomplete="off" :ui="{ root: 'flex' }" />
</UFormField>
<UFormField label="GitHub Username" name="username">
<UInput v-model="state.username" autocomplete="off" :ui="{ root: 'flex' }" />
</UFormField>
<UButton type="submit" :loading="activating" :disabled="state.license.length !== 36 || !state.username">
Activate the license
</UButton>
<UAlert v-if="successMessage" color="success" variant="subtle" :title="successMessage">
<template #description>
The GitHub invitation to <NuxtLink to="https://github.com/nuxt/ui-pro/invitations" external target="_blank" class="font-bold text-primary hover:underline">
Nuxt UI Pro repository
</NuxtLink> has been sent and
you can now use your license key in your projects, checkout the
<NuxtLink class="font-bold underline" to="/pro/getting-started/installation">
installation guide
</NuxtLink>
</template>
</UAlert>
<UAlert v-else-if="errorMessage" color="error" variant="subtle" :title="errorMessage" />
</UForm>
</UCard>
<p class="text-sm text-center text-neutral-500 dark:text-neutral-400 my-4">
If you purchased a license with multiple seats, activate the license key for each of your team members.
</p>
</div>
</UPageHero>
</template>

View File

@@ -0,0 +1,111 @@
<script setup lang="ts">
// @ts-expect-error yaml is not typed
import page from '.content/pro.yml'
useSeoMeta({
title: page.title,
ogTitle: page.title,
description: page.description,
ogDescription: page.description
})
defineOgImageComponent('Docs', {
headline: 'Pro'
})
</script>
<template>
<div class="relative">
<UPageHero
:links="page.hero.links"
class="relative"
orientation="horizontal"
>
<template #title>
<MDC :value="page.hero.title" unwrap="p" />
</template>
<template #description>
<MDC :value="page.hero.description" unwrap="p" />
</template>
<template #top>
<div class="absolute z-[-1] rounded-full bg-[var(--ui-primary)] blur-[300px] size-60 sm:size-80 transform -translate-x-1/2 left-1/2 -translate-y-80" />
<StarsBg />
</template>
<PromotionalVideo />
</UPageHero>
<UPageSection
v-bind="page.features"
:ui="{ title: 'text-left', description: 'text-left' }"
/>
<UPageCTA
:description="page.authorQuote.quote"
variant="soft"
class="rounded-none"
:ui="{ container: 'sm:py-12 lg:py-12 sm:gap-8', description: 'before:content-[open-quote] after:content-[close-quote]' }"
>
<UUser
v-bind="page.authorQuote.user"
size="xl"
class="justify-center"
/>
</UPageCTA>
<UPageSection
v-for="(section, index) in page.sections"
:key="index"
v-bind="section"
orientation="horizontal"
>
<MDC :value="section.code" />
</UPageSection>
<UPageSection
id="templates"
v-bind="page.templates"
class="overflow-hidden"
>
<UCarousel
v-slot="{ item }"
loop
arrows
dots
:autoplay="{ delay: 3000 }"
:items="(page.templates.items as any[])"
:ui="{ item: 'basis-1/2', container: 'py-2' }"
>
<UPageCard
:to="item.to"
:description="item.description"
class="group"
:ui="{ container: 'p-4 sm:p-4', title: 'flex items-center gap-1' }"
>
<template #title>
<UIcon :name="item.icon" />
<span>
{{ item.title }}
</span>
</template>
<img
:src="item.image"
:alt="item.title"
class="rounded-lg grayscale group-hover:grayscale-0 transition-all duration-200 ease-in-out"
>
</UPageCard>
</UCarousel>
</UPageSection>
<USeparator />
<UPageCTA
v-bind="page.cta"
variant="naked"
class="overflow-hidden"
>
<div class="absolute rounded-full dark:bg-[var(--ui-primary)] blur-[250px] size-40 sm:size-50 transform -translate-x-1/2 left-1/2 -translate-y-80" />
<StarsBg />
</UPageCTA>
</div>
</template>

View File

@@ -0,0 +1,114 @@
<script setup lang="ts">
// @ts-expect-error yaml is not typed
import page from '.content/pricing.yml'
useSeoMeta({
title: page.title,
ogTitle: page.title,
description: page.description,
ogDescription: page.description
})
defineOgImageComponent('Docs', {
headline: 'Pro'
})
</script>
<template>
<div class="relative">
<UPageHero
class="relative"
:description="page.pricing.description"
>
<template #title>
<MDC :value="page.pricing.title" unwrap="p" />
</template>
<template #top>
<div class="absolute z-[-1] rounded-full bg-[var(--ui-primary)] blur-[300px] size-60 sm:size-80 transform -translate-x-1/2 left-1/2 -translate-y-80" />
<StarsBg />
</template>
<UContainer>
<UPricingPlan
v-bind="page.pricing.freePlan"
class="mb-16"
/>
<UPricingPlans
class="mb-16"
scale
>
<UPricingPlan
v-for="(plan, index) in page.pricing.plans"
:key="index"
:title="plan.title"
:description="plan.description"
:price="plan.price"
:billing-period="plan.billing_period"
:billing-cycle="plan.billing_cycle"
:highlight="plan.highlight"
:scale="plan.highlight"
variant="soft"
:features="plan.features"
:button="plan.button"
/>
</UPricingPlans>
<UPricingPlan
v-bind="page.pricing.figma"
>
<template #features>
<li v-for="(feature, index) in page.pricing.figma.features" :key="index" class="flex items-center gap-2 min-w-0">
<UIcon name="i-lucide-circle-check" class="size-5 text-(--ui-primary) shrink-0" />
<MDC :value="feature" unwrap="p" class="text-sm truncate text-(--ui-text-toned)" />
</li>
</template>
</UPricingPlan>
</UContainer>
</UPageHero>
<UPageSection
id="testimonials"
v-bind="page.testimonials"
>
<UPageMarquee pause-on-hover :ui="{ root: '[--duration:40s]' }">
<img
v-for="(logo, index) in page.logos"
:key="index"
v-bind="logo"
class="h-6 shrink-0 max-w-[140px] filter invert dark:invert-0"
>
</UPageMarquee>
<UContainer>
<UPageColumns class="xl:columns-4">
<UPageCard
v-for="(testimonial, index) in page.testimonials.items"
:key="index"
variant="subtle"
:description="testimonial.quote"
:ui="{ description: 'before:content-[open-quote] after:content-[close-quote]' }"
>
<template #footer>
<UUser
v-bind="testimonial.user"
size="xl"
/>
</template>
</UPageCard>
</UPageColumns>
</UContainer>
</UPageSection>
<UPageSection
id="faq"
v-bind="page.faq"
class="scroll-mt-[var(--header-height)]"
>
<UPageAccordion
multiple
:items="(page.faq.items as any[])"
class="max-w-4xl mx-auto"
>
<template #body="{ item }">
<MDC :value="item.content" unwrap="p" />
</template>
</UPageAccordion>
</UPageSection>
</div>
</template>

View File

@@ -0,0 +1,69 @@
<script setup lang="ts">
// @ts-expect-error yaml is not typed
import page from '.content/templates.yml'
const title = page.head?.title || page.title
const description = page.head?.description || page.description
useSeoMeta({
title,
description,
ogTitle: `${title} - Nuxt UI Pro`,
ogDescription: description
})
defineOgImageComponent('Docs', {
headline: 'Pro'
})
</script>
<!-- eslint-disable vue/no-v-html -->
<template>
<div class="relative">
<UPageHero :links="page.links">
<template #top>
<div class="absolute z-[-1] rounded-full bg-[var(--ui-primary)] blur-[300px] size-60 sm:size-80 transform -translate-x-1/2 left-1/2 -translate-y-80" />
<StarsBg />
</template>
<template #title>
<MDC :value="page.title" unwrap="p" />
</template>
<template #description>
<MDC :value="page.description" unwrap="p" />
</template>
</UPageHero>
<UPageSection
v-for="(template, index) in page.templates"
:key="index"
:title="template.title"
:links="template.links"
:features="template.features"
orientation="horizontal"
reverse
class="*:!pt-0"
:ui="{ title: 'lg:text-4xl' }"
>
<template #description>
<MDC :value="template.description" unwrap="p" />
</template>
<UColorModeImage
v-if="template.thumbnail"
v-bind="template.thumbnail"
class="w-full h-auto rounded-(--ui-radius) border border-(--ui-border)"
width="656"
height="369"
/>
<UCarousel
v-else-if="template.images"
v-slot="{ item }"
:items="(template.images as any[])"
dots
>
<NuxtImg v-bind="item" class="w-full h-full object-cover" width="576" height="360" />
</UCarousel>
<Placeholder v-else class="w-full h-full aspect-video" />
</UPageSection>
</div>
</template>

View File

@@ -0,0 +1,31 @@
<script setup lang="ts">
const { data: page } = await useAsyncData('terms', () => queryCollection('content').path('/pro/terms').first())
if (!page.value) {
throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true })
}
const title = page.value.title
const description = page.value.description
useSeoMeta({
title,
description,
ogTitle: `${title} - Nuxt UI Pro`,
ogDescription: description
})
defineOgImageComponent('Docs', {
headline: 'Pro'
})
</script>
<template>
<UContainer>
<UPage v-if="page">
<UPageHeader :title="page.title" :description="page.description" />
<UPageBody prose>
<ContentRenderer v-if="page.body" :value="page" />
</UPageBody>
</UPage>
</UContainer>
</template>