Skip to content

Commit

Permalink
feat: initialize project with nuxt layers concept
Browse files Browse the repository at this point in the history
  • Loading branch information
viandwi24 committed Mar 19, 2023
0 parents commit 7b6c0f6
Show file tree
Hide file tree
Showing 37 changed files with 8,620 additions and 0 deletions.
13 changes: 13 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# editorconfig.org
root = true

[*]
indent_size = 2
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
node_modules
*.log*
.nuxt
.nitro
.cache
.output
.env
dist
.DS_Store
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
shamefully-hoist=true
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Nuxt 3 Awesome Starter
a Nuxt 3 starter template with a lot of useful features, integrated with TailwindCSS 3. Easy use and implemented in Nuxt Layer, you can extend this template with zero config.

> **NOTES**
> - This Project using "pnpm" as package manager
## Features
- [x] 💨 [Tailwind CSS v3](https://tailwindcss.com/) with [Windicss](https://windicss.org/)
- [x][Headless UI](https://headlessui.dev/)
- [x] 🔔 [Nuxt Icon](https://icones.js.org/)
- [x] 🛹 [State & Store Management (Pinia)](https://pinia.vuejs.org/)
- [x] 📦 [Vue Composition Collection (Vueuse)](https://vueuse.org/)
- [x] 🌙 Switch Theme (light, dark, system, realtime)
- [x] 🇮🇩 Language Switcher
- [x] 🪝 Built-in Component & Layout
- [x] Eslint & Prettier
- [x] Configurable Theme (Easy to change)
- [x] Primary Colors
- [x] Font
87 changes: 87 additions & 0 deletions app.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { AppConfigInput } from 'nuxt/schema'
import type { RouteLocationRaw } from 'vue-router'

export interface NuxtAwesomeAppConfig {
/** title name */
name?: string

/** project config */
project?: {
/** links */
links?: {
/** project github link */
github?: string
}
}

/** layout config */
layout?: {
/** page layout */
page?: {
/** navbar */
navbar?: {
/** menus in navbar */
menus?: {
type?: 'link' | 'button'
title?: string
to?: RouteLocationRaw | undefined
}[]
}
}
/** footer */
footer?: {
/** footer year */
year?: number
}
}

/** author config */
author?: {
/** author name */
name?: string
/** author links */
links?: {
/** author github link */
github?: string
/** author medium link */
medium?: string,
/** author website link */
website?: string
}
}
}

declare module '@nuxt/schema' {
interface AppConfigInput {
awesome?: NuxtAwesomeAppConfig
}
}

export default defineAppConfig({
awesome: {
name: 'Nuxt 3 Awesome Starter',
project: {
links: {
github: 'https://github.com/viandwi24/nuxt3-awesome-starter',
}
},
layout: {
page: {
navbar: {
menus: []
}
},
footer: {
year: 2022,
},
},
author: {
name: 'viandwi24',
links: {
github: 'https://github.com/viandwi24',
medium: 'https://viandwi24.medium.com',
website: 'https://viandwi24.site',
},
},
} as NuxtAwesomeAppConfig
})
8 changes: 8 additions & 0 deletions app.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<template>
<Html class="dark">
<NuxtLayout>
<NuxtLoadingIndicator />
<NuxtPage />
</NuxtLayout>
</Html>
</template>
28 changes: 28 additions & 0 deletions app/app.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
export default defineAppConfig({
awesome: {
name: 'Nuxt 3 Awesome Starter',
project: {
links: {
github: 'https://github.com/viandwi24/nuxt3-awesome-starter',
}
},
layout: {
page: {
navbar: {
menus: []
}
},
footer: {
year: 2022,
},
},
author: {
name: 'viandwi24',
links: {
github: 'https://github.com/viandwi24',
medium: 'https://viandwi24.medium.com',
website: 'https://viandwi24.site',
},
},
}
})
7 changes: 7 additions & 0 deletions app/nuxt.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default defineNuxtConfig({
extends: '../',
modules: [
// for dev only
'@nuxt/devtools'
]
})
3 changes: 3 additions & 0 deletions app/pages/about.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<template>
<NuxtWelcome />
</template>
19 changes: 19 additions & 0 deletions app/pages/blank.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<script lang="ts" setup>
definePageMeta({ layout: 'page' })
</script>

<template>
<LayoutPageWrapper>
<LayoutPageHeader>
<LayoutPageTitle text="Blank Page" class="capitalize" />
</LayoutPageHeader>
<LayoutPageSection>
<LayoutPageSectionTitle text="Section Title" />
<div>My Content</div>
</LayoutPageSection>
<LayoutPageSection>
<LayoutPageSectionTitle text="Another Section" />
<div>My Content</div>
</LayoutPageSection>
</LayoutPageWrapper>
</template>
177 changes: 177 additions & 0 deletions app/pages/index.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
<script lang="ts" setup>
definePageMeta({ layout: 'page' })
const { awesome } = useAppConfig()
const titlesText = computed<string[]>(() => 'Nuxt 3[]Awesome[]Starter'.split('[]'))
const leadingsText = computed(() => [
{
text: titlesText.value[0],
startColor: '#007CF0',
endColor: '#00DFD8',
delay: 0,
},
{
text: titlesText.value[1],
startColor: '#7928CA',
endColor: '#FF0080',
delay: 2,
},
{
text: titlesText.value[2],
startColor: '#FF4D4D',
endColor: '#F9CB28',
delay: 4,
},
])
</script>

<template>
<LayoutPageWrapper class="flex-1 flex">
<LayoutPageSection class="flex-1 flex">
<div class="flex-1 flex flex-col items-center justify-center">
<h1 class="text-center mt-4">
<span
v-for="(item, i) in leadingsText"
:key="i"
:style="`--content: '${item.text}'; --start-color: ${
item.startColor
}; --end-color: ${item.endColor}; --animation-name: anim-fg-${
i + 1
}`"
class="animated-text-bg drop-shadow-xl text-5xl xl:text-7xl 2xl:text-8xl block font-black uppercase"
>
<span class="animated-text-fg">{{ item.text }}</span>
</span>
</h1>
<div class="px-4 mt-6 text-center max-w-[600px]">
a starter template for Nuxt 3 with minimalist themes design, built in components, drawer & menus, and more.
</div>
<div
class="flex space-x-4 ml-2 mt-8 justify-center md:justify-start"
>
<AwesomeButton
size="lg"
text="Nuxt 3"
class="font-extrabold"
href="https://nuxt.com"
_target="blank"
/>
<AwesomeButton
v-if="awesome?.project?.links?.github"
size="lg"
text="Github"
type="secondary"
class="font-extrabold"
:href="awesome?.project?.links?.github"
_target="blank"
/>
</div>
</div>
<div class="top-0 left-0 absolute w-screen">
<div class="absolute right-0 top-0 w-[300px] h-screen py-10 pt-12 z-0 flex">
<div class="flex-1 rounded-l-9xl bg-gradient-to-l from-blue-600/18"></div>
</div>
<div class="absolute left-0 top-0 w-[300px] h-screen py-10 pt-12 z-0 flex">
<div class="flex-1 rounded-r-9xl bg-gradient-to-r from-green-600/18"></div>
</div>
</div>
</LayoutPageSection>
</LayoutPageWrapper>
</template>

<style lang="scss">
:root {
--padding: 0.05em;
}
@keyframes anim-fg-1 {
0%,
16.667%,
100% {
opacity: 1;
}
33.333%,
83.333% {
opacity: 0;
}
}
@keyframes anim-fg-2 {
0%,
16.667%,
66.667%,
100% {
opacity: 0;
}
33.333%,
50% {
opacity: 1;
}
}
@keyframes anim-fg-3 {
0%,
50%,
100% {
opacity: 0;
}
66.667%,
83.333% {
opacity: 1;
}
}
.animated-text-bg {
position: relative;
display: block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
content: var(--content);
display: block;
width: 100%;
color: theme('colors.slate.800');
top: 0;
bottom: 0;
left: 0;
z-index: 0;
padding-left: var(--padding);
padding-right: var(--padding);
&:before {
content: var(--content);
position: absolute;
display: block;
width: 100%;
color: theme('colors.slate.800');
top: 0;
bottom: 0;
left: 0;
z-index: 0;
padding-left: var(--padding);
padding-right: var(--padding);
}
}
.animated-text-fg {
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
padding-left: var(--padding);
padding-right: var(--padding);
background-image: linear-gradient(
90deg,
var(--start-color),
var(--end-color)
);
position: relative;
opacity: 0;
z-index: 1;
animation: var(--animation-name) 8s infinite;
}
html.dark {
.animated-text-bg {
color: theme('colors.gray.100');
&:before {
color: theme('colors.gray.100');
}
}
}
</style>
9 changes: 9 additions & 0 deletions app/pages/post.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<script lang="ts" setup>
definePageMeta({ layout: 'page' })
</script>

<template>
<LayoutPageSection class="flex">
<div>aweawe</div>
</LayoutPageSection>
</template>
Loading

0 comments on commit 7b6c0f6

Please sign in to comment.