Skip to content

feat: Nuxt UI Version 3 einsetzen #24

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 95 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
55c2a8e
feat: upgrade package dependencies in package.json
c1chy-jott Mar 13, 2025
c02659f
feat: add main.css to nuxt configuration and update modules
c1chy-jott Mar 13, 2025
3e0cf7e
feat(minimal.vue): update layout structure for better encapsulation
c1chy-jott Mar 13, 2025
5df832a
feat: rename tailwind.css to main.css and add custom styles
c1chy-jott Mar 13, 2025
3401eed
feat(index.vue): update UI elements and class names
c1chy-jott Mar 13, 2025
e62318e
feat(blog): replace UBlogList with UBlogPosts in blog index page
c1chy-jott Mar 13, 2025
b2dea20
feat: update Image.vue component with improved styling
c1chy-jott Mar 13, 2025
a02a1ef
feat(layouts): update default layout structure in default.vue
c1chy-jott Mar 13, 2025
397b04f
feat(Button.vue): update button component to use UButton with primary…
c1chy-jott Mar 13, 2025
e0ef6c9
feat: update app.vue with UApp and UMain components
c1chy-jott Mar 13, 2025
7e39ff4
feat(app.config.ts): update UI configuration
c1chy-jott Mar 13, 2025
6555496
feat: update CSS styling parameters
c1chy-jott Mar 14, 2025
2b94d8b
feat(app.config.ts): add new UI configurations
c1chy-jott Mar 14, 2025
5c52de2
feat: improve Carousel.vue UX and accessibility
c1chy-jott Mar 14, 2025
52bbf00
feat: update ImageFigure component for enhanced UI
c1chy-jott Mar 14, 2025
8868f98
feat(blog): enhance category button selection and loading more posts
c1chy-jott Mar 14, 2025
46808ce
feat: update button components in index.vue
c1chy-jott Mar 14, 2025
79fe37f
feat(Menu.vue): refactor menu component for improved readability and …
c1chy-jott Mar 14, 2025
1b61c19
feat: enhance UI components on team page
c1chy-jott Mar 14, 2025
69b28d8
Update pnpm-lock.yaml with dependency version upgrades
c1chy-jott Mar 14, 2025
e43e842
feat: remove Button.vue component
c1chy-jott Mar 14, 2025
52d75e3
feat: update logo position in blog slug page
c1chy-jott Mar 26, 2025
c50f19e
feat: update button layout in team profile page
c1chy-jott Mar 26, 2025
63424c6
feat: update package dependencies
c1chy-jott Mar 26, 2025
098138b
Update pnpm-lock.yaml with package version upgrades
c1chy-jott Mar 26, 2025
cc1caa2
feat: update CSS styles in main.css
c1chy-jott Mar 26, 2025
941a509
feat: update UI container and remove redundant spaces in config file
c1chy-jott Mar 26, 2025
cc41414
feat: remove Center.vue component
c1chy-jott Mar 26, 2025
fa8d9a9
feat(error.vue): refactor code and improve readability
c1chy-jott Mar 26, 2025
2772b79
feat(Carousel.vue): update UIcon class for better color formatting
c1chy-jott Mar 26, 2025
38fb815
feat: update CSS class in ImageFigure.vue component
c1chy-jott Mar 26, 2025
61615cc
feat(imprint.vue): refactor HTML structure and Vue.js script setup
c1chy-jott Mar 26, 2025
4529fd5
feat(blog): update UI layout for better user experience
c1chy-jott Mar 26, 2025
222608a
feat: update index page layout and styling
c1chy-jott Mar 26, 2025
9a469f1
feat: refactor Menu.vue layout structure
c1chy-jott Mar 26, 2025
9c024dc
feat(privacy.vue): refactor HTML structure and rearrange script attri…
c1chy-jott Mar 26, 2025
8be8833
feat: update CSS class naming convention in team profiles
c1chy-jott Mar 27, 2025
34a8437
feat: update CSS UI color variables and body properties
c1chy-jott Mar 27, 2025
8a650ea
feat: update layout and styling in Menu and Footer components
c1chy-jott Mar 27, 2025
326ed2e
feat: update layout and styling on team page
c1chy-jott Mar 27, 2025
9258acd
feat: add footer and refactor page layout in default.vue
c1chy-jott Mar 27, 2025
6bbf706
feat: rede#dex layout and update content
c1chy-jott Mar 27, 2025
d78498b
feat(minimal.vue): simplify component structure by removing UPageBody
c1chy-jott Mar 27, 2025
996413b
Update CSS class format in blog titles for consistency
c1chy-jott Mar 28, 2025
5eb1c79
feat: upgrade @nuxt/ui-pro from v3.0.1 to v3.0.2
c1chy-jott Mar 28, 2025
b0501fe
Update dependencies and pnpm-lock.yaml
c1chy-jott Mar 28, 2025
cce3b90
feat: update CSS properties in main.css
c1chy-jott Mar 28, 2025
b7ce6b7
feat: update blog post design and limit displayed posts
c1chy-jott Mar 28, 2025
848d00c
feat(Footer.vue): remove top margin from Footer component
c1chy-jott Mar 28, 2025
e115813
feat: add uiPro configuration to app.config.ts
c1chy-jott Mar 28, 2025
3cc7874
feat(router.options): enhance scroll behavior for hash links and save…
c1chy-jott Apr 2, 2025
661aae4
feat(nuxt.config): add image optimization settings
c1chy-jott Apr 2, 2025
9dd89eb
feat: update CSS UI color variables
c1chy-jott Apr 2, 2025
c4f2221
feat: update blog post layout in index.vue
c1chy-jott Apr 2, 2025
67fb126
feat: update blog page UI
c1chy-jott Apr 2, 2025
fdf578b
feat(error.vue): update UContainer class for max width
c1chy-jott Apr 2, 2025
b898703
feat: update UI configuration for blog post in app.config.ts
c1chy-jott Apr 2, 2025
5f88453
feat: update UI styles and layouts in blog pages
c1chy-jott Apr 2, 2025
5018bb2
feat: Update image properties and author link in blog post component
c1chy-jott Apr 3, 2025
38684d1
feat(blog): enhance article layout by adding padding and linking auth…
c1chy-jott Apr 3, 2025
f0cef99
feat: update blog post formatting
c1chy-jott Apr 3, 2025
a8d2e17
feat: update styling classes in app.config.ts
c1chy-jott Apr 3, 2025
ffc23cd
feat: update UI elements in blog detail page
c1chy-jott Apr 3, 2025
0bf8f50
feat: update blog post markdown formatting
c1chy-jott Apr 3, 2025
70459db
feat: update blog post headers
c1chy-jott Apr 3, 2025
c3b3584
feat(blog): enhance styling and add debugging log
c1chy-jott Apr 3, 2025
671cd7f
feat(pages): update UI layout and style in index.vue
c1chy-jott Apr 4, 2025
6bc7c67
feat(blog): update layout and add transition effects to blog posts
c1chy-jott Apr 4, 2025
c3fbf0c
feat: update team page layout for better responsiveness
c1chy-jott Apr 4, 2025
05a1d60
feat(privacy.vue): update styling and layout for privacy page
c1chy-jott Apr 7, 2025
c461b1d
feat(imprint.vue): update UI layout and styling
c1chy-jott Apr 7, 2025
a18de85
feat(index.vue): decrease z-index of author link
c1chy-jott Apr 7, 2025
6a2e931
feat(Menu.vue): add text-center style to the container div
c1chy-jott Apr 7, 2025
b928bf8
feat(Image.vue): modify color scale parameters in linear gradient
c1chy-jott Apr 7, 2025
77322db
feat: adjust alpha scale in Image component gradient background
c1chy-jott Apr 7, 2025
3a66ec5
feat: change hash navigation to element navigation in router options
c1chy-jott Apr 8, 2025
43a1bd3
fix(error.vue): replace Button component with UButton component
c1chy-jott Apr 8, 2025
add75d9
feat: remove console.log statements and unnecessary div in various files
c1chy-jott Apr 8, 2025
c557312
feat(error.vue): add closing div tag to NuxtLayout in template
c1chy-jott Apr 8, 2025
5a18f32
feat: update scroll position offset in router options
c1chy-jott Apr 8, 2025
4c24223
feat: add new UI foreground color to main.css
c1chy-jott Apr 8, 2025
1abcc77
feat(team): update font size for person description on team page
c1chy-jott Apr 8, 2025
c78f481
fix: correct alpha values in Image.vue gradient settings
c1chy-jott Apr 8, 2025
eb62ee0
feat: add SCROLL_DELAY constant to router options
c1chy-jott Apr 8, 2025
838246f
feat: update gradient scale in Image.vue component
c1chy-jott Apr 8, 2025
c833a35
feat: adjust blog post title size for responsiveness
c1chy-jott Apr 8, 2025
3c1ca83
feat(blog): adjust font size responsiveness in blog page title
c1chy-jott Apr 8, 2025
1e8a932
feat(Menu.vue): update image sizing and alignment in navigation menu
c1chy-jott Apr 8, 2025
c01e403
feat(Menu.vue): update margin styling for responsiveness
c1chy-jott Apr 8, 2025
88be39b
Refine headline styles and container sizes.
c1chy-jott Apr 9, 2025
79b35b4
Update dependencies in package.json to latest versions
c1chy-jott Apr 9, 2025
49087e2
Update pnpm-lock.yaml with latest package versions
c1chy-jott Apr 9, 2025
9e645cf
Optimize scroll delay with dynamic calculation.
c1chy-jott Apr 9, 2025
234134f
Fix button positioning on larger screens
c1chy-jott Apr 9, 2025
1311301
feat(app.vue): add page transition animation and routing delay
c1chy-jott Apr 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 74 additions & 14 deletions app.config.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,76 @@
export default defineAppConfig({
ui: {
primary: 'nuxt-ui-primary',
// gray: 'nuxt-ui-grey',
variables: {
light: {
background: '255 255 255',
foreground: '000 000 000'
},
dark: {
background: '255 255 255',
foreground: '000 000 000'
},
}
}
uiPro: {
blogPost: {
slots: {
authors: 'pt-4',
body: 'sm:p-3!',
description: 'mb-0 text-xs text-pretty jm-contrast-black color-jm-contrast-black',
image: 'object-fill w-full max-w-full h-full block bg-center bg-cover bg-no-repeat',
meta: 'gap-1 px-0',
root: 'relative group/blog-post flex flex-col overflow-hidden p-0 test',
title: 'text-xl uppercase font-extrabold leading-6',
},
}
},

ui: {
container: {
base: 'max-w-(--container-3xl) mx-auto px-4 sm:px-6 lg:px-8',
},
colors: {
primary: 'nuxt-ui-primary',
secondary: 'nuxt-ui-brown',
},
button: {
defaultVariants: {
color: "secondary",
},
slots: {
base: 'inline-block border-[3px] border-jm-primary-brown rounded px-3 py-2 uppercase font-[800] text-sm text-jm-primary-brown hover:text-jm-secondary-white hover:bg-jm-primary-brown transition',
}
},
size: {
xs: {
base: 'px-2 py-1 text-xs gap-1',
leadingIcon: 'size-4',
leadingAvatarSize: '3xs',
trailingIcon: 'size-4'
},
sm: {
base: 'px-2.5 py-1.5 text-xs gap-1.5',
leadingIcon: 'size-4',
leadingAvatarSize: '3xs',
trailingIcon: 'size-4'
},
md: {
base: 'px-2.5 py-1.5 text-sm gap-1.5',
leadingIcon: 'size-5',
leadingAvatarSize: '2xs',
trailingIcon: 'size-5'
},
lg: {
base: 'px-3 py-2 text-sm gap-2',
leadingIcon: 'size-5',
leadingAvatarSize: '2xs',
trailingIcon: 'size-5'
},
xl: {
base: 'px-3 py-2 text-base gap-2',
leadingIcon: 'size-6',
leadingAvatarSize: 'xs',
trailingIcon: 'size-6'
}
},
variables: {
light: {
background: '255 255 255',
foreground: '000 000 000'
},
dark: {
background: '255 255 255',
foreground: '000 000 000'
},
}
},

})
61 changes: 50 additions & 11 deletions app.vue
Original file line number Diff line number Diff line change
@@ -1,13 +1,44 @@
<template>
<div class="custom-cursor overflow-x-hidden scroll-smooth"
:class="{'cursor-down': isMouseDown, 'cursor-show': isMouseShow}"
:style="{ '--mouse-x': cursorX + 'px', '--mouse-y': cursorY + 'px' }">
<NuxtLayout>
<NuxtPage/>
</NuxtLayout>
</div>
<UApp>
<div :class="{'cursor-down': isMouseDown, 'cursor-show': isMouseShow}"
:style="{ '--mouse-x': cursorX + 'px', '--mouse-y': cursorY + 'px' }"
class="custom-cursor overflow-hidden scroll-smooth">
<NuxtLayout>
<UMain>
<NuxtPage/>
</UMain>
</NuxtLayout>
</div>
</UApp>
</template>
<script setup lang="ts">
<script lang="ts" setup>


const router = useRouter()
const pageTransition = ref(false)
const ROUTING_DELAY = 1000

router.beforeEach((to, from, next) => {

if (pageTransition.value) return next()

pageTransition.value = true

setTimeout(() => {
next()
}, ROUTING_DELAY)
})

watch(pageTransition, (newVal) => {

if (newVal) {
setTimeout(() => {
pageTransition.value = false
}, 600)
}
})


const cursorX = ref(0);
const cursorY = ref(0);
const isMouseDown = ref(false);
Expand Down Expand Up @@ -83,13 +114,21 @@ onUnmounted(() => {
}

}

.page-enter-active,
.page-leave-active {
transition: all 0.4s;
transition: transform 0.4s ease-in-out;
}

.page-enter-from,
.page-leave-to {
opacity: 0;
filter: blur(1rem);
transform: translateY(100%);
}

.page-enter-to,
.page-leave-from {
transform: translateY(0%);
}


</style>
63 changes: 55 additions & 8 deletions app/router.options.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,61 @@
import type {RouterConfig} from "@nuxt/schema";
import type {RouterConfig} from '@nuxt/schema'

const FIXED_OFFSET = 60

function calculateDynamicDelay(): number {
const complexityFactor = document.querySelectorAll('*').length / 1000
return Math.min(200, Math.max(50, complexityFactor * 50))
}

function findHashPosition(hash: string): { el: any, behavior: ScrollBehavior, top: number } | undefined {
const el = document.querySelector(hash)
if (el) {
return {
el: el,
behavior: 'smooth',
top: FIXED_OFFSET
}
}
}

export default <RouterConfig>{
async scrollBehavior(to, from, savedPosition) {
scrollBehavior(to, from, savedPosition) {
const nuxtApp = useNuxtApp()

if (history.state && history.state.stop)
return

if (history.state && history.state.smooth) {
return {
el: history.state.smooth,
behavior: 'smooth',
}
}

if (savedPosition) {
return savedPosition;
return new Promise((resolve) => {
nuxtApp.hooks.hookOnce('page:finish', () => {
setTimeout(() => resolve(savedPosition), 250)
})
})
}
if (to.path.startsWith('/blog/')) {
return {top: 0};
} else if (to.path.startsWith('/blog')) {
return {top: 0};

if (to.hash) {
return new Promise((resolve) => {
if (to.path === from.path) {
setTimeout(() => resolve(findHashPosition(to.hash)), calculateDynamicDelay())
} else {
nuxtApp.hooks.hookOnce('page:finish', () => {
setTimeout(() => resolve(findHashPosition(to.hash)), calculateDynamicDelay())
})
}
})
}

return new Promise((resolve) => {
setTimeout(() => {
resolve({top: 0})
}, 250)
})
},
};
}
125 changes: 125 additions & 0 deletions assets/css/main.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
@import "tailwindcss";
@import 'tailwindcss/theme' layer(theme);
@import 'tailwindcss/utilities' layer(utilities);
@import 'tailwindcss/preflight' layer(base);
@import '@nuxt/ui-pro';

@layer theme, base, components, utilities;

@plugin '@tailwindcss/typography';


:root {
--ui-text-muted: #000000;
--ui-text-highlighted: 104 126 94;
--ui-foreground: #000000;
--ui-primary: #9B9371;
--ui-bg: var(--color-jm-secondary-grey-lighter);
/* Font Families */
--font-family-sans: 'Open Sans', sans-serif;

/* Colors */
--color-nuxt-ui-primary-50: #687E5E;
--color-nuxt-ui-primary-100: #687E5E;
--color-nuxt-ui-primary-200: #687E5E;
--color-nuxt-ui-primary-300: #687E5E;
--color-nuxt-ui-primary-400: #687E5E;
--color-nuxt-ui-primary-500: #687E5E;
--color-nuxt-ui-primary-600: #687E5E;
--color-nuxt-ui-primary-700: #687E5E;
--color-nuxt-ui-primary-800: #687E5E;
--color-nuxt-ui-primary-900: #687E5E;
--color-nuxt-ui-primary-950: #687E5E;

--color-nuxt-ui-grey-50: #7C7B7B;
--color-nuxt-ui-grey-100: #7C7B7B;
--color-nuxt-ui-grey-200: #7C7B7B;
--color-nuxt-ui-grey-300: #7C7B7B;
--color-nuxt-ui-grey-400: #7C7B7B;
--color-nuxt-ui-grey-500: #7C7B7B;
--color-nuxt-ui-grey-600: #7C7B7B;
--color-nuxt-ui-grey-700: #7C7B7B;
--color-nuxt-ui-grey-800: #7C7B7B;
--color-nuxt-ui-grey-900: #7C7B7B;
--color-nuxt-ui-grey-950: #7C7B7B;

--color-nuxt-ui-brown-50: #9B9371;
--color-nuxt-ui-brown-100: #9B9371;
--color-nuxt-ui-brown-200: #9B9371;
--color-nuxt-ui-brown-300: #9B9371;
--color-nuxt-ui-brown-400: #9B9371;
--color-nuxt-ui-brown-500: #9B9371;
--color-nuxt-ui-brown-600: #9B9371;
--color-nuxt-ui-brown-700: #9B9371;
--color-nuxt-ui-brown-800: #9B9371;
--color-nuxt-ui-brown-900: #9B9371;
--color-nuxt-ui-brown-950: #9B9371;

--color-jm-primary-brown: #9B9371;
--color-jm-primary-brown-light: #C3C2B4;
--color-jm-primary-brown-lighter: #DBDAD2;

--color-jm-primary-grey: #7C7B7B;
--color-jm-primary-grey-light: #B5B7B5;
--color-jm-primary-grey-lighter: #D2D4D3;

--color-jm-primary-green: #687E5E;
--color-jm-primary-green-light: #AEB9AC;
--color-jm-primary-green-lighter: #CFD5CD;

--color-jm-secondary-grey: #C9CAC9;
--color-jm-secondary-grey-light: #DDDEDC;
--color-jm-secondary-grey-lighter: #EAEBEA;

--color-jm-secondary-white: #FFFFFF;

--color-jm-contrast-blue: #3B5B5D;
--color-jm-contrast-blue-light: #9BA7A7;
--color-jm-contrast-blue-lighter: #C3CACA;

--color-jm-contrast-black: #000000;
--color-jm-contrast-black-light: #808082;
--color-jm-contrast-black-lighter: #B3B3B4;
}


@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 300 800;
font-stretch: 100%;
font-display: swap;
src: url(../fonts/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-mu0SC55I.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}


@layer utilities {
.no-scrollbar::-webkit-scrollbar {
display: none;
}

.no-scrollbar {
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
}

html {
font-size: 20px;

@media (max-width: 768px) {
font-size: 18px;
}
}

body {
--tw-bg-opacity: 1;
font-family: Open Sans, sans-serif;
--tw-text-opacity: 1;
color: rgb(var(--ui-foreground) / var(--tw-text-opacity, 1));
}

b, strong {
font-weight: 800;
}
Loading