From 29a0251d6c426d5b80c30bf504bace75e9b8875a Mon Sep 17 00:00:00 2001 From: David Bernard Date: Tue, 28 Jan 2025 16:25:49 +0100 Subject: [PATCH] chore(deps): upgrade tailwindcss to 4.0.0 --- .mega-linter.yml | 1 + cdviz-site/.gitignore | 3 + cdviz-site/landingpage/.mise.toml | 2 +- cdviz-site/landingpage/bun.lockb | Bin 65580 -> 46157 bytes cdviz-site/landingpage/index.html | 4 +- cdviz-site/landingpage/package.json | 17 +- cdviz-site/landingpage/postcss.config.js | 6 - cdviz-site/landingpage/{ => src}/main.js | 0 cdviz-site/landingpage/src/style.css | 217 ++++++++++++++++++ .../landingpage/src/tailwind.config.cjs | 11 + cdviz-site/landingpage/style.css | 171 -------------- cdviz-site/landingpage/tailwind.config.cjs | 68 ------ cdviz-site/landingpage/vite.config.ts | 6 + 13 files changed, 248 insertions(+), 258 deletions(-) delete mode 100644 cdviz-site/landingpage/postcss.config.js rename cdviz-site/landingpage/{ => src}/main.js (100%) create mode 100644 cdviz-site/landingpage/src/style.css create mode 100644 cdviz-site/landingpage/src/tailwind.config.cjs delete mode 100644 cdviz-site/landingpage/style.css delete mode 100644 cdviz-site/landingpage/tailwind.config.cjs create mode 100644 cdviz-site/landingpage/vite.config.ts diff --git a/.mega-linter.yml b/.mega-linter.yml index 6448eb1..1b9004c 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -22,6 +22,7 @@ DISABLE_LINTERS: - REPOSITORY_TRUFFLEHOG # too long to search for secret - RUST_CLIPPY # run via an other way, and current version doesn't support `--deny ... --allow ...` - SQL_TSQLLINT # "You must install or update .NET to run this application." + - TYPESCRIPT_STANDARD SHOW_ELAPSED_TIME: true FILEIO_REPORTER: false # DISABLE_ERRORS: true # Uncomment if you want MegaLinter to detect errors but not block CI to pass diff --git a/cdviz-site/.gitignore b/cdviz-site/.gitignore index 3502ef7..c6e5b0a 100644 --- a/cdviz-site/.gitignore +++ b/cdviz-site/.gitignore @@ -142,3 +142,6 @@ dist .svelte-kit # End of https://www.toptal.com/developers/gitignore/api/node + +.vite +dist diff --git a/cdviz-site/landingpage/.mise.toml b/cdviz-site/landingpage/.mise.toml index fab8187..93681da 100644 --- a/cdviz-site/landingpage/.mise.toml +++ b/cdviz-site/landingpage/.mise.toml @@ -5,4 +5,4 @@ install = "bun install" dev = "bun run vite dev" build = "bun run vite build" -preview = "bun run vitepreview" +preview = "bun run vite preview" diff --git a/cdviz-site/landingpage/bun.lockb b/cdviz-site/landingpage/bun.lockb index 69cd6a40e0bafe05adf258611deacb3a364effa5..744ae91eadf98eda517987052f9c7a069e51be5f 100755 GIT binary patch literal 46157 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 z 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 literal 65580 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 -
+
@@ -423,6 +423,6 @@

Frequently Asked Questions

- + diff --git a/cdviz-site/landingpage/package.json b/cdviz-site/landingpage/package.json index 97edfe7..df87e9a 100644 --- a/cdviz-site/landingpage/package.json +++ b/cdviz-site/landingpage/package.json @@ -4,15 +4,12 @@ "version": "0.0.0", "type": "module", "devDependencies": { - "autoprefixer": "^10.4.20", - "postcss": "^8.4.49", - "prettier": "^3.3.3", - "prettier-plugin-tailwindcss": "^0.6.8", - "tailwindcss": "^3.4.15", - "vite": "^6.0.0" - }, - "dependencies": { - "@iconify-json/simple-icons": "^1.2.12", - "@iconify/tailwind": "^1.1.3" + "@iconify-json/simple-icons": "^1.2.22", + "@iconify/tailwind": "^1.2.0", + "@tailwindcss/vite": "^4.0.0", + "prettier": "^3.4.2", + "prettier-plugin-tailwindcss": "^0.6.11", + "tailwindcss": "^4.0.0", + "vite": "^6.0.11" } } diff --git a/cdviz-site/landingpage/postcss.config.js b/cdviz-site/landingpage/postcss.config.js deleted file mode 100644 index 2aa7205..0000000 --- a/cdviz-site/landingpage/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/cdviz-site/landingpage/main.js b/cdviz-site/landingpage/src/main.js similarity index 100% rename from cdviz-site/landingpage/main.js rename to cdviz-site/landingpage/src/main.js diff --git a/cdviz-site/landingpage/src/style.css b/cdviz-site/landingpage/src/style.css new file mode 100644 index 0000000..250e4f3 --- /dev/null +++ b/cdviz-site/landingpage/src/style.css @@ -0,0 +1,217 @@ +@import "tailwindcss"; + +/* +The plugin iconify is not working (yet?) with the plugin system of tailwindcss v4 => use the config file instead. +``` +@plugin "@iconify/tailwind"; +``` +*/ +@config "./tailwind.config.cjs"; + +@custom-variant dark (&:where(.dark, .dark *)); + +@font-face { + font-family: "Droid Sans", system-ui, sans-serif; + font-style: normal; + font-weight: 400; + font-display: swap; + src: + url("./assets/fonts/droid-sans/DroidSans-webfont.woff2") format("woff2"), + url("./assets/fonts/droid-sans/DroidSans-webfont.woff") format("woff"); +} + +@theme { + /* see [Perfect Ratios & How to Find Them - YouTube](https://www.youtube.com/watch?v=r1DANFZYJDw) */ + --spacing-2xs: 0.3rem; + --spacing-xs: 0.486rem; + --spacing-sm: 0.7862rem; + --spacing-md: 1.272rem; /* "1rem", the base */ + --spacing-lg: 2.058rem; + --spacing-xl: 3.330rem; + --spacing-2xl: 5.388rem; + --spacing-4xl: 8.778rem; + /* + // theme build with: + // - https://www.realtimecolors.com/?colors=0e151b-c9d2de-f29107-a294c2-725190&fonts=DroidSans-DroidSans + // - alternative: https://www.realtimecolors.com/?colors=0e0d0b-f9f8f6-fbbd23-abbfb9-8d9daa&fonts=DroidSans-DroidSans + // - manually set `DEFAULT` when export in Tailwind CSS + Themes + Shades + // - export in Tailwind CSS + Themes in HSL (to be able to use opacity `/5`) + // - in source of realtime the number suffixing the color is the opacity + + // fontSize: { + // sm: "0.750rem", + // base: "1rem", + // xl: "1.333rem", + // "2xl": "1.777rem", + // "3xl": "2.369rem", + // "4xl": "3.158rem", + // "5xl": "4.210rem", + // }, + */ + --font-sans: ["Droid Sans", var(--font-sans)]; + --font-heading: "Droid Sans"; + --font-body: "Droid Sans"; + --font-weight-normal: "400"; + --font-weight-bold: "700"; + --color-text: var(--text); + --color-background: var(--background); + --color-primary: var(--primary); + --color-secondary: var(--secondary); + --color-accent: var(--accent); +} + +:root { + --text: oklch(19.15% 0.016 244.65); + --background: oklch(86.05% 0.019 255.54); + --primary: oklch(74.22% 0.166 64.29); + --secondary: oklch(69.49% 0.068 298.56); + --accent: oklch(49.68% 0.104 307.15); +} + +.dark { + --text: oklch(93.65% 0.011 243.66); + --background: oklch(28.19% 0.026 255.73); + --primary: oklch(75.84% 0.168 64.71); + --secondary: oklch(39.60% 0.077 296.74); + --accent: oklch(59.84% 0.100 307.64); +} + +h1 { + @apply text-4xl font-bold leading-[3.2rem] tracking-tight; + @apply md:text-6xl md:leading-[4.2rem]; + @apply bg-gradient-to-r from-primary to-accent bg-clip-text text-transparent; +} + +h2 { + @apply mb-lg text-center text-3xl font-bold tracking-tight; + @apply md:text-5xl; + @apply relative; +} + +h3 { + @apply mb-md text-xl font-bold tracking-tight; +} + +/* @layer components { */ +.clickable { + @apply cursor-pointer transition-all duration-300; + @apply hover:scale-105 hover:cursor-pointer hover:shadow-lg; +} + +.btn { + @apply rounded-lg bg-secondary px-6 py-3 text-text; + @apply focus:outline-none focus:ring-2 focus:ring-secondary focus:ring-offset-2; + @apply active:bg-secondary/80; + @apply font-semibold; +} + +.btn-primary { + @apply bg-primary text-background; + @apply focus:ring-primary; + @apply shadow-md hover:shadow-primary/20; +} + +.isDisabled { + color: currentColor; + cursor: not-allowed; + opacity: 0.5; + text-decoration: none; + pointer-events: none; +} + +.font-outline { + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: var(--text); + color: transparent; +} + +.check-circle { + background-image: url("assets/icons/check-circle.svg"); + background-position: 0em 0.2em; + background-repeat: no-repeat; +} + +/* Glass effect for cards */ +@utility glass-card { + @apply border border-white/20 bg-white/10 backdrop-blur-md; + @apply dark:border-white/10 dark:bg-black/10; + @apply rounded-xl shadow-xl; +} + +/* Modern section styling */ +section { + @apply px-4 py-16; + @apply transition-all duration-300; +} + +body { + @apply bg-gradient-to-r from-primary/10 to-accent/10; +} +/* Enhanced hero section */ +#hero { + @apply relative overflow-hidden; + /*@apply before:absolute before:inset-0 before:bg-gradient-to-r before:from-primary/10 before:to-accent/10;*/ +} + +/* Modern feature cards */ +.feature-card { + @apply glass-card p-6; + @apply transform transition-all duration-300; + @apply hover:scale-105 hover:shadow-2xl; +} + +/* technics from https://iconify.design/docs/usage/css/ */ +.svg-mask { + /* Add dimensions to span */ + display: inline-block; + /* width: 32px; + height: 32px; */ + /* Add background color */ + background-color: currentColor; + /* Add mask image, use variable to reduce duplication */ + --svg: url("https://api.iconify.design/bi/bell-fill.svg"); + -webkit-mask-image: var(--svg); + mask-image: var(--svg); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-size: 100% 100%; + mask-size: 100% 100%; +} + +.svg-cdevents { + /* width: 444px; + height: 184px; */ + --svg: url("./assets/logos/cdevents_monochrome.svg"); +} +/* } */ + +/* New animations */ +@keyframes float { + 0% { + transform: translateY(0px); + } + 50% { + transform: translateY(-20px); + } + 100% { + transform: translateY(0px); + } +} + +.float-animation { + animation: float 6s ease-in-out infinite; +} + +/* Enhanced scrollbar */ +::-webkit-scrollbar { + width: 8px; +} + +::-webkit-scrollbar-track { + @apply bg-background; +} + +::-webkit-scrollbar-thumb { + @apply rounded-full bg-primary/50; + @apply hover:bg-primary; +} diff --git a/cdviz-site/landingpage/src/tailwind.config.cjs b/cdviz-site/landingpage/src/tailwind.config.cjs new file mode 100644 index 0000000..bf9ea99 --- /dev/null +++ b/cdviz-site/landingpage/src/tailwind.config.cjs @@ -0,0 +1,11 @@ +const { addDynamicIconSelectors } = require("@iconify/tailwind"); + +/** @type {import('tailwindcss').Config} */ +module.exports = { + plugins: [ + // https://iconify.design/docs/usage/css/tailwind/#installation + // Iconify plugin, requires writing list of icon sets to load + // addIconSelectors(["simple-icons" /*, 'logos'*/]), + addDynamicIconSelectors(), + ], +}; diff --git a/cdviz-site/landingpage/style.css b/cdviz-site/landingpage/style.css deleted file mode 100644 index 0d2839a..0000000 --- a/cdviz-site/landingpage/style.css +++ /dev/null @@ -1,171 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - @font-face { - font-family: "Droid Sans", system-ui, sans-serif; - font-style: normal; - font-weight: 400; - font-display: swap; - src: - url("./assets/fonts/droid-sans/DroidSans-webfont.woff2") format("woff2"), - url("./assets/fonts/droid-sans/DroidSans-webfont.woff") format("woff"); - } - - :root { - --text: 225 25% 10%; - --background: 210 20% 98%; - --primary: 35 95% 50%; - --secondary: 260 30% 65%; - --accent: 270 60% 50%; - } - - .dark { - --text: 210 25% 98%; - --background: 225 25% 12%; - --primary: 35 95% 55%; - --secondary: 260 30% 40%; - --accent: 270 60% 60%; - } - - h1 { - @apply text-4xl font-bold leading-[3.2rem] tracking-tight; - @apply md:text-6xl md:leading-[4.2rem]; - @apply bg-gradient-to-r from-primary to-accent bg-clip-text text-transparent; - } - - h2 { - @apply mb-lg text-center text-3xl font-bold tracking-tight; - @apply md:text-5xl; - @apply relative; - } - - h3 { - @apply mb-md text-xl font-bold tracking-tight; - } -} - -@layer components { - .clickable { - @apply cursor-pointer transition-all duration-300; - @apply hover:scale-105 hover:cursor-pointer hover:shadow-lg; - } - - .btn { - @apply rounded-lg bg-secondary px-6 py-3 text-text; - @apply focus:outline-none focus:ring-2 focus:ring-secondary focus:ring-offset-2; - @apply active:bg-secondary/80; - @apply font-semibold; - } - - .btn-primary { - @apply bg-primary text-background; - @apply focus:ring-primary; - @apply shadow-md hover:shadow-primary/20; - } - - .isDisabled { - color: currentColor; - cursor: not-allowed; - opacity: 0.5; - text-decoration: none; - pointer-events: none; - } - - .font-outline { - -webkit-text-stroke-width: 1px; - -webkit-text-stroke-color: hsl(var(--text)); - color: transparent; - } - - .check-circle { - background-image: url("assets/icons/check-circle.svg"); - background-position: 0em 0.2em; - background-repeat: no-repeat; - } - - /* Glass effect for cards */ - .glass-card { - @apply border border-white/20 bg-white/10 backdrop-blur-md; - @apply dark:border-white/10 dark:bg-black/10; - @apply rounded-xl shadow-xl; - } - - /* Modern section styling */ - section { - @apply px-4 py-16; - @apply transition-all duration-300; - } - - body { - @apply bg-gradient-to-r from-primary/10 to-accent/10; - } - /* Enhanced hero section */ - #hero { - @apply relative overflow-hidden; - /*@apply before:absolute before:inset-0 before:bg-gradient-to-r before:from-primary/10 before:to-accent/10;*/ - } - - /* Modern feature cards */ - .feature-card { - @apply glass-card p-6; - @apply transform transition-all duration-300; - @apply hover:scale-105 hover:shadow-2xl; - } - - /* technics from https://iconify.design/docs/usage/css/ */ - .svg-mask { - /* Add dimensions to span */ - display: inline-block; - width: 32px; - height: 32px; - /* Add background color */ - background-color: currentColor; - /* Add mask image, use variable to reduce duplication */ - --svg: url("https://api.iconify.design/bi/bell-fill.svg"); - -webkit-mask-image: var(--svg); - mask-image: var(--svg); - -webkit-mask-repeat: no-repeat; - mask-repeat: no-repeat; - -webkit-mask-size: 100% 100%; - mask-size: 100% 100%; - } - - .svg-cdevents { - width: 444px; - height: 184px; - --svg: url("./assets/logos/cdevents_monochrome.svg"); - } -} - -/* New animations */ -@keyframes float { - 0% { - transform: translateY(0px); - } - 50% { - transform: translateY(-20px); - } - 100% { - transform: translateY(0px); - } -} - -.float-animation { - animation: float 6s ease-in-out infinite; -} - -/* Enhanced scrollbar */ -::-webkit-scrollbar { - width: 8px; -} - -::-webkit-scrollbar-track { - @apply bg-background; -} - -::-webkit-scrollbar-thumb { - @apply rounded-full bg-primary/50; - @apply hover:bg-primary; -} diff --git a/cdviz-site/landingpage/tailwind.config.cjs b/cdviz-site/landingpage/tailwind.config.cjs deleted file mode 100644 index 567a694..0000000 --- a/cdviz-site/landingpage/tailwind.config.cjs +++ /dev/null @@ -1,68 +0,0 @@ -const defaultTheme = require("tailwindcss/defaultTheme"); -const { addDynamicIconSelectors } = require("@iconify/tailwind"); -// const colors = require("tailwindcss/colors"); - -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], - theme: { - extend: { - spacing: { - // see [Perfect Ratios & How to Find Them - YouTube](https://www.youtube.com/watch?v=r1DANFZYJDw) - "2xs": "0.3rem", - xs: "0.486rem", - sm: "0.7862rem", - md: "1.272rem", // "1rem", // the base - lg: "2.058rem", - xl: "3.330rem", - "2xl": "5.388rem", - "4xl": "8.778rem", - }, - // theme build with: - // - https://www.realtimecolors.com/?colors=0e151b-c9d2de-f29107-a294c2-725190&fonts=DroidSans-DroidSans - // - alternative: https://www.realtimecolors.com/?colors=0e0d0b-f9f8f6-fbbd23-abbfb9-8d9daa&fonts=DroidSans-DroidSans - // - manually set `DEFAULT` when export in Tailwind CSS + Themes + Shades - // - export in Tailwind CSS + Themes in HSL (to be able to use opacity `/5`) - // - in source of realtime the number suffixing the color is the opacity - - // fontSize: { - // sm: "0.750rem", - // base: "1rem", - // xl: "1.333rem", - // "2xl": "1.777rem", - // "3xl": "2.369rem", - // "4xl": "3.158rem", - // "5xl": "4.210rem", - // }, - fontFamily: { - sans: ["Droid Sans", ...defaultTheme.fontFamily.sans], - heading: "Droid Sans", - body: "Droid Sans", - }, - fontWeight: { - normal: "400", - bold: "700", - }, - colors: { - // text: colors.slate[50], - // background: colors.slate[700], - // primary: colors.amber[200], - // secondary: colors.purple[600], - // accent: colors.violet[500], - - text: "hsl(var(--text))", - background: "hsl(var(--background))", - primary: "hsl(var(--primary))", - secondary: "hsl(var(--secondary))", - accent: "hsl(var(--accent))", - }, - }, - }, - plugins: [ - // https://iconify.design/docs/usage/css/tailwind/#installation - // Iconify plugin, requires writing list of icon sets to load - // addIconSelectors(["simple-icons" /*, 'logos'*/]), - addDynamicIconSelectors(), - ], - darkMode: "class", // "media" or "selector", -}; diff --git a/cdviz-site/landingpage/vite.config.ts b/cdviz-site/landingpage/vite.config.ts new file mode 100644 index 0000000..2f4c184 --- /dev/null +++ b/cdviz-site/landingpage/vite.config.ts @@ -0,0 +1,6 @@ +import tailwindcss from "@tailwindcss/vite"; +import { defineConfig } from "vite"; + +export default defineConfig({ + plugins: [tailwindcss()], +});