diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 7fc50a1..6e458a9 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -8,7 +8,9 @@ "pflannery.vscode-versionlens", "editorconfig.editorconfig", "prisma.prisma", - "graphql.vscode-graphql" + "graphql.vscode-graphql", + "csstools.postcss", + "bradlc.vscode-tailwindcss" ], "unwantedRecommendations": [] -} +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 6887d36..1d3afa8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,5 +7,11 @@ }, "[prisma]": { "editor.formatOnSave": true - } + }, + "tailwindCSS.classAttributes": [ + "class", + "className", + "activeClassName", + "errorClassName" + ] } diff --git a/package.json b/package.json index 7e55fcd..5f8b915 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ }, "devDependencies": { "@redwoodjs/core": "8.3.0", - "@redwoodjs/project-config": "8.3.0" + "@redwoodjs/project-config": "8.3.0", + "prettier-plugin-tailwindcss": "^0.5.12" }, "eslintConfig": { "extends": "@redwoodjs/eslint-config", diff --git a/prettier.config.js b/prettier.config.js index 45058f7..3ed0f1e 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -15,4 +15,6 @@ module.exports = { }, }, ], + tailwindConfig: './web/config/tailwind.config.js', + plugins: ['prettier-plugin-tailwindcss'], } diff --git a/web/config/postcss.config.js b/web/config/postcss.config.js new file mode 100644 index 0000000..3cdce19 --- /dev/null +++ b/web/config/postcss.config.js @@ -0,0 +1,9 @@ +const path = require('path') + +module.exports = { + plugins: [ + require('tailwindcss/nesting'), + require('tailwindcss')(path.resolve(__dirname, 'tailwind.config.js')), + require('autoprefixer'), + ], +} diff --git a/web/config/tailwind.config.js b/web/config/tailwind.config.js new file mode 100644 index 0000000..2716265 --- /dev/null +++ b/web/config/tailwind.config.js @@ -0,0 +1,9 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['src/**/*.{js,jsx,ts,tsx}'], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/web/package.json b/web/package.json index 6cca1dd..d8c2bc5 100644 --- a/web/package.json +++ b/web/package.json @@ -21,6 +21,10 @@ "devDependencies": { "@redwoodjs/vite": "8.3.0", "@types/react": "^18.2.55", - "@types/react-dom": "^18.2.19" + "@types/react-dom": "^18.2.19", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.47", + "postcss-loader": "^8.1.1", + "tailwindcss": "^3.4.13" } } diff --git a/web/src/index.css b/web/src/index.css index e69de29..b31cb33 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -0,0 +1,13 @@ +/** + * START --- SETUP TAILWINDCSS EDIT + * + * `yarn rw setup ui tailwindcss` placed these directives here + * to inject Tailwind's styles into your CSS. + * For more information, see: https://tailwindcss.com/docs/installation + */ +@tailwind base; +@tailwind components; +@tailwind utilities; +/** + * END --- SETUP TAILWINDCSS EDIT + */ diff --git a/web/src/scaffold.css b/web/src/scaffold.css index 3a6a215..395138b 100644 --- a/web/src/scaffold.css +++ b/web/src/scaffold.css @@ -1,397 +1,243 @@ -/* - normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css -*/ - -.rw-scaffold *, -.rw-scaffold ::after, -.rw-scaffold ::before { - box-sizing: inherit; -} -.rw-scaffold main { - color: #4a5568; - display: block; +.rw-scaffold { + @apply bg-white text-gray-600; } .rw-scaffold h1, .rw-scaffold h2 { - margin: 0; + @apply m-0; } .rw-scaffold a { - background-color: transparent; + @apply bg-transparent; } .rw-scaffold ul { - margin: 0; - padding: 0; -} -.rw-scaffold input { - font-family: inherit; - font-size: 100%; - overflow: visible; + @apply m-0 p-0; } .rw-scaffold input:-ms-input-placeholder { - color: #a0aec0; + @apply text-gray-500; } .rw-scaffold input::-ms-input-placeholder { - color: #a0aec0; + @apply text-gray-500; } .rw-scaffold input::placeholder { - color: #a0aec0; -} -.rw-scaffold table { - border-collapse: collapse; -} - -/* - Style -*/ - -.rw-scaffold, -.rw-toast { - background-color: #fff; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, - 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', - 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + @apply text-gray-500; } .rw-header { - display: flex; - justify-content: space-between; - padding: 1rem 2rem 1rem 2rem; + @apply flex justify-between py-4 px-8; } .rw-main { - margin-left: 1rem; - margin-right: 1rem; - padding-bottom: 1rem; + @apply mx-4 pb-4; } .rw-segment { - border-radius: 0.5rem; - border-width: 1px; - border-color: #e5e7eb; - overflow: hidden; - width: 100%; - scrollbar-color: #a1a1aa transparent; + @apply rounded-lg overflow-hidden w-full border border-gray-200; + scrollbar-color: theme('colors.zinc.400') transparent; } .rw-segment::-webkit-scrollbar { height: initial; } .rw-segment::-webkit-scrollbar-track { - background-color: transparent; - border-color: #e2e8f0; - border-style: solid; - border-radius: 0 0 10px 10px; - border-width: 1px 0 0 0; - padding: 2px; + @apply border-gray-200 bg-transparent border-solid rounded-t-none rounded-b-[10px] border-0 border-t p-[2px]; } .rw-segment::-webkit-scrollbar-thumb { - background-color: #a1a1aa; - background-clip: content-box; - border: 3px solid transparent; - border-radius: 10px; + @apply bg-zinc-400 bg-clip-content border-[3px] border-solid border-transparent rounded-full; } .rw-segment-header { - background-color: #e2e8f0; - color: #4a5568; - padding: 0.75rem 1rem; + @apply bg-gray-200 text-gray-700 py-3 px-4; } .rw-segment-main { - background-color: #f7fafc; - padding: 1rem; + @apply bg-gray-100 p-4; } .rw-link { - color: #4299e1; - text-decoration: underline; + @apply text-blue-400 underline; } .rw-link:hover { - color: #2b6cb0; + @apply text-blue-500; } .rw-forgot-link { - font-size: 0.75rem; - color: #a0aec0; - text-align: right; - margin-top: 0.1rem; + @apply text-xs text-gray-400 text-right mt-1 underline; } .rw-forgot-link:hover { - font-size: 0.75rem; - color: #4299e1; + @apply text-blue-500; } .rw-heading { - font-weight: 600; + @apply font-semibold; } .rw-heading.rw-heading-primary { - font-size: 1.25rem; + @apply text-xl; } .rw-heading.rw-heading-secondary { - font-size: 0.875rem; + @apply text-sm; } .rw-heading .rw-link { - color: #4a5568; - text-decoration: none; + @apply text-gray-600 no-underline; } .rw-heading .rw-link:hover { - color: #1a202c; - text-decoration: underline; + @apply text-gray-900 underline; } .rw-cell-error { - font-size: 90%; - font-weight: 600; + @apply text-sm font-semibold; } .rw-form-wrapper { - box-sizing: border-box; - font-size: 0.875rem; - margin-top: -1rem; + @apply text-sm -mt-4; } .rw-cell-error, .rw-form-error-wrapper { - padding: 1rem; - background-color: #fff5f5; - color: #c53030; - border-width: 1px; - border-color: #feb2b2; - border-radius: 0.25rem; - margin: 1rem 0; + @apply p-4 bg-red-50 text-red-600 border border-red-100 rounded my-4; } .rw-form-error-title { - margin-top: 0; - margin-bottom: 0; - font-weight: 600; + @apply m-0 font-semibold; } .rw-form-error-list { - margin-top: 0.5rem; - list-style-type: disc; - list-style-position: inside; + @apply mt-2 list-disc list-inside; } .rw-button { - border: none; - color: #718096; - cursor: pointer; - display: flex; - justify-content: center; - font-size: 0.75rem; - font-weight: 600; - padding: 0.25rem 1rem; - text-transform: uppercase; - text-decoration: none; - letter-spacing: 0.025em; - border-radius: 0.25rem; - line-height: 2; - border: 0; + @apply flex justify-center py-1 px-4 border-0 rounded bg-gray-200 text-gray-500 text-xs font-semibold uppercase tracking-wide leading-loose no-underline cursor-pointer transition duration-100; } .rw-button:hover { - background-color: #718096; - color: #fff; + @apply bg-gray-500 text-white; } .rw-button.rw-button-small { - font-size: 0.75rem; - border-radius: 0.125rem; - padding: 0.25rem 0.5rem; - line-height: inherit; + @apply text-xs rounded-sm py-1 px-2; } .rw-button.rw-button-green { - background-color: #48bb78; - color: #fff; + @apply bg-green-500 text-white; } .rw-button.rw-button-green:hover { - background-color: #38a169; - color: #fff; + @apply bg-green-700; } .rw-button.rw-button-blue { - background-color: #3182ce; - color: #fff; + @apply bg-blue-500 text-white; } .rw-button.rw-button-blue:hover { - background-color: #2b6cb0; + @apply bg-blue-700; } .rw-button.rw-button-red { - background-color: #e53e3e; - color: #fff; + @apply bg-red-500 text-white; } .rw-button.rw-button-red:hover { - background-color: #c53030; + @apply bg-red-700 text-white; } .rw-button-icon { - font-size: 1.25rem; - line-height: 1; - margin-right: 0.25rem; + @apply text-xl leading-5 mr-1; } .rw-button-group { - display: flex; - justify-content: center; - margin: 0.75rem 0.5rem; + @apply flex justify-center my-3 mx-2; } .rw-button-group .rw-button { - margin: 0 0.25rem; + @apply mx-1; } .rw-form-wrapper .rw-button-group { - margin-top: 2rem; - margin-bottom: 0; + @apply mt-8; } .rw-label { - display: block; - margin-top: 1.5rem; - color: #4a5568; - font-weight: 600; - text-align: left; + @apply block mt-6 text-gray-600 font-semibold text-left; } .rw-label.rw-label-error { - color: #c53030; + @apply text-red-600; } .rw-input { - display: block; - margin-top: 0.5rem; - width: 100%; - padding: 0.5rem; - border-width: 1px; - border-style: solid; - border-color: #e2e8f0; - color: #4a5568; - border-radius: 0.25rem; - outline: none; -} -.rw-check-radio-item-none { - color: #4a5568; + @apply block mt-2 w-full p-2 bg-white border border-gray-200 rounded outline-none; } .rw-check-radio-items { - display: flex; - justify-items: center; + @apply flex justify-items-center; } -.rw-input[type='checkbox'] { - display: inline; - width: 1rem; - margin-left: 0; - margin-right: 0.5rem; - margin-top: 0.25rem; +.rw-check-radio-item-none { + @apply text-gray-600; } +.rw-input[type='checkbox'], .rw-input[type='radio'] { - display: inline; - width: 1rem; - margin-left: 0; - margin-right: 0.5rem; - margin-top: 0.25rem; + @apply inline w-4 ml-0 mr-1 mt-1; } .rw-input:focus { - border-color: #a0aec0; + @apply border-gray-400; } .rw-input-error { - border-color: #c53030; - color: #c53030; + @apply border-red-600 text-red-600; } - .rw-input-error:focus { - outline: none; - border-color: #c53030; + @apply border-red-600 outline-none; box-shadow: 0 0 5px #c53030; } - .rw-field-error { - display: block; - margin-top: 0.25rem; - font-weight: 600; - text-transform: uppercase; - font-size: 0.75rem; - color: #c53030; + @apply block mt-1 font-semibold text-xs text-red-600 uppercase; } .rw-table-wrapper-responsive { - overflow-x: auto; + @apply overflow-x-auto; } .rw-table-wrapper-responsive .rw-table { min-width: 48rem; } .rw-table { - table-layout: auto; - width: 100%; - font-size: 0.875rem; + @apply w-full text-sm; } .rw-table th, .rw-table td { - padding: 0.75rem; + @apply p-3; } .rw-table td { - background-color: #ffffff; - color: #1a202c; + @apply bg-white text-gray-900; } .rw-table tr:nth-child(odd) td, .rw-table tr:nth-child(odd) th { - background-color: #f7fafc; + @apply bg-gray-50; } .rw-table thead tr { - color: #4a5568; + @apply bg-gray-200 text-gray-600; } .rw-table th { - font-weight: 600; - text-align: left; + @apply font-semibold text-left; } .rw-table thead th { - background-color: #e2e8f0; - text-align: left; + @apply text-left; } .rw-table tbody th { - text-align: right; + @apply text-right; } @media (min-width: 768px) { .rw-table tbody th { - width: 20%; + @apply w-1/5; } } .rw-table tbody tr { - border-top-width: 1px; + @apply border-t border-gray-200; } .rw-table input { - margin-left: 0; + @apply ml-0; } .rw-table-actions { - display: flex; - justify-content: flex-end; - align-items: center; - height: 17px; - padding-right: 0.25rem; + @apply flex justify-end items-center h-4 pr-1; } .rw-table-actions .rw-button { - background-color: transparent; + @apply bg-transparent; } .rw-table-actions .rw-button:hover { - background-color: #718096; - color: #fff; + @apply bg-gray-500 text-white; } .rw-table-actions .rw-button-blue { - color: #3182ce; + @apply text-blue-500; } .rw-table-actions .rw-button-blue:hover { - background-color: #3182ce; - color: #fff; + @apply bg-blue-500 text-white; } .rw-table-actions .rw-button-red { - color: #e53e3e; + @apply text-red-600; } .rw-table-actions .rw-button-red:hover { - background-color: #e53e3e; - color: #fff; + @apply bg-red-600 text-white; } .rw-text-center { - text-align: center; + @apply text-center; } .rw-login-container { - display: flex; - align-items: center; - justify-content: center; - width: 24rem; - margin: 4rem auto; - flex-wrap: wrap; + @apply flex items-center justify-center flex-wrap mx-auto w-96 my-16; } .rw-login-container .rw-form-wrapper { - width: 100%; - text-align: center; + @apply w-full text-center; } .rw-login-link { - margin-top: 1rem; - color: #4a5568; - font-size: 90%; - text-align: center; - flex-basis: 100%; + @apply mt-4 text-gray-600 text-sm text-center w-full; } .rw-webauthn-wrapper { - margin: 1.5rem 1rem 1rem; - line-height: 1.4; + @apply mt-6 mx-4 leading-6; } .rw-webauthn-wrapper h2 { - font-size: 150%; - font-weight: bold; - margin-bottom: 1rem; + @apply mb-4 text-xl font-bold; } diff --git a/yarn.lock b/yarn.lock index 5703936..d2d8196 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,13 @@ __metadata: languageName: node linkType: hard +"@alloc/quick-lru@npm:^5.2.0": + version: 5.2.0 + resolution: "@alloc/quick-lru@npm:5.2.0" + checksum: 10c0/7b878c48b9d25277d0e1a9b8b2f2312a314af806b4129dc902f2bc29ab09b58236e53964689feec187b28c80d2203aff03829754773a707a8a5987f1b7682d92 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.3.0 resolution: "@ampproject/remapping@npm:2.3.0" @@ -3639,7 +3646,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.5": +"@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.5 resolution: "@jridgewell/gen-mapping@npm:0.3.5" dependencies: @@ -6296,6 +6303,13 @@ __metadata: languageName: node linkType: hard +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 10c0/60f0298ed34c74fef50daab88e8dab786036ed5a7fad02e012ab57e376e0a0b4b29e83b95ea9b5e7d89df762f5f25119b83e00706ecaccb22cfbacee98d74889 + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -6357,7 +6371,7 @@ __metadata: languageName: node linkType: hard -"arg@npm:5.0.2": +"arg@npm:5.0.2, arg@npm:^5.0.2": version: 5.0.2 resolution: "arg@npm:5.0.2" checksum: 10c0/ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e @@ -6640,6 +6654,24 @@ __metadata: languageName: node linkType: hard +"autoprefixer@npm:^10.4.20": + version: 10.4.20 + resolution: "autoprefixer@npm:10.4.20" + dependencies: + browserslist: "npm:^4.23.3" + caniuse-lite: "npm:^1.0.30001646" + fraction.js: "npm:^4.3.7" + normalize-range: "npm:^0.1.2" + picocolors: "npm:^1.0.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: 10c0/e1f00978a26e7c5b54ab12036d8c13833fad7222828fc90914771b1263f51b28c7ddb5803049de4e77696cbd02bb25cfc3634e80533025bb26c26aacdf938940 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -7270,6 +7302,13 @@ __metadata: languageName: node linkType: hard +"camelcase-css@npm:^2.0.1": + version: 2.0.1 + resolution: "camelcase-css@npm:2.0.1" + checksum: 10c0/1a1a3137e8a781e6cbeaeab75634c60ffd8e27850de410c162cce222ea331cd1ba5364e8fb21c95e5ca76f52ac34b81a090925ca00a87221355746d049c6e273 + languageName: node + linkType: hard + "camelcase@npm:6.3.0, camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" @@ -7284,6 +7323,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001667 + resolution: "caniuse-lite@npm:1.0.30001667" + checksum: 10c0/6bc8555a47603e1e76eaef9b185d6fdeeca7d9c20a283f7c32c971eb1b52ea3a80e6ec086920f088f06abe619240f1023a2d3a08b5b1f2f11df1475695e9f71c + languageName: node + linkType: hard + "caniuse-lite@npm:^1.0.30001663": version: 1.0.30001663 resolution: "caniuse-lite@npm:1.0.30001663" @@ -7464,7 +7510,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:3.6.0, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.6.0": +"chokidar@npm:3.6.0, chokidar@npm:^3.4.2, chokidar@npm:^3.5.2, chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -7705,6 +7751,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: 10c0/84a76c08fe6cc08c9c93f62ac573d2907d8e79138999312c92d4155bc2325d487d64d13f669b2000c9f8caf70493c1be2dac74fec3c51d5a04f8bc3ae1830bab + languageName: node + linkType: hard + "commander@npm:^6.2.0": version: 6.2.1 resolution: "commander@npm:6.2.1" @@ -7904,6 +7957,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee + languageName: node + linkType: hard + "crc-32@npm:^1.2.0": version: 1.2.2 resolution: "crc-32@npm:1.2.2" @@ -8078,6 +8148,15 @@ __metadata: languageName: node linkType: hard +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + "cssom@npm:^0.5.0": version: 0.5.0 resolution: "cssom@npm:0.5.0" @@ -8416,6 +8495,13 @@ __metadata: languageName: node linkType: hard +"didyoumean@npm:^1.2.2": + version: 1.2.2 + resolution: "didyoumean@npm:1.2.2" + checksum: 10c0/95d0b53d23b851aacff56dfadb7ecfedce49da4232233baecfeecb7710248c4aa03f0aa8995062f0acafaf925adf8536bd7044a2e68316fd7d411477599bc27b + languageName: node + linkType: hard + "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -8450,6 +8536,13 @@ __metadata: languageName: node linkType: hard +"dlv@npm:^1.1.3": + version: 1.1.3 + resolution: "dlv@npm:1.1.3" + checksum: 10c0/03eb4e769f19a027fd5b43b59e8a05e3fd2100ac239ebb0bf9a745de35d449e2f25cfaf3aa3934664551d72856f4ae8b7822016ce5c42c2d27c18ae79429ec42 + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -8717,7 +8810,7 @@ __metadata: languageName: node linkType: hard -"env-paths@npm:^2.2.0": +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 @@ -9652,7 +9745,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:3.3.2, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": +"fast-glob@npm:3.3.2, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -10006,6 +10099,13 @@ __metadata: languageName: node linkType: hard +"fraction.js@npm:^4.3.7": + version: 4.3.7 + resolution: "fraction.js@npm:4.3.7" + checksum: 10c0/df291391beea9ab4c263487ffd9d17fed162dbb736982dee1379b2a8cc94e4e24e46ed508c6d278aded9080ba51872f1bc5f3a5fd8d7c74e5f105b508ac28711 + languageName: node + linkType: hard + "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -10828,7 +10928,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -12019,7 +12119,7 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.17.1": +"jiti@npm:^1.17.1, jiti@npm:^1.20.0, jiti@npm:^1.21.0": version: 1.21.6 resolution: "jiti@npm:1.21.6" bin: @@ -12453,6 +12553,13 @@ __metadata: languageName: node linkType: hard +"lilconfig@npm:^3.0.0": + version: 3.1.2 + resolution: "lilconfig@npm:3.1.2" + checksum: 10c0/f059630b1a9bddaeba83059db00c672b64dc14074e9f232adce32b38ca1b5686ab737eb665c5ba3c32f147f0002b4bee7311ad0386a9b98547b5623e87071fbe + languageName: node + linkType: hard + "line-column@npm:1.0.2": version: 1.0.2 resolution: "line-column@npm:1.0.2" @@ -13215,6 +13322,17 @@ __metadata: languageName: node linkType: hard +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: "npm:^1.0.0" + object-assign: "npm:^4.0.1" + thenify-all: "npm:^1.0.0" + checksum: 10c0/103114e93f87362f0b56ab5b2e7245051ad0276b646e3902c98397d18bb8f4a77f2ea4a2c9d3ad516034ea3a56553b60d3f5f78220001ca4c404bd711bd0af39 + languageName: node + linkType: hard + "nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" @@ -13394,6 +13512,13 @@ __metadata: languageName: node linkType: hard +"normalize-range@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-range@npm:0.1.2" + checksum: 10c0/bf39b73a63e0a42ad1a48c2bd1bda5a07ede64a7e2567307a407674e595bcff0fa0d57e8e5f1e7fa5e91000797c7615e13613227aaaa4d6d6e87f5bd5cc95de6 + languageName: node + linkType: hard + "normalize-url@npm:^4.1.0": version: 4.5.1 resolution: "normalize-url@npm:4.5.1" @@ -13433,13 +13558,20 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 languageName: node linkType: hard +"object-hash@npm:^3.0.0": + version: 3.0.0 + resolution: "object-hash@npm:3.0.0" + checksum: 10c0/a06844537107b960c1c8b96cd2ac8592a265186bfa0f6ccafe0d34eabdb526f6fa81da1f37c43df7ed13b12a4ae3457a16071603bcd39d8beddb5f08c37b0f47 + languageName: node + linkType: hard + "object-inspect@npm:^1.13.1": version: 1.13.2 resolution: "object-inspect@npm:1.13.2" @@ -13964,6 +14096,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc + languageName: node + linkType: hard + "pify@npm:^3.0.0": version: 3.0.0 resolution: "pify@npm:3.0.0" @@ -14016,7 +14155,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4, pirates@npm:^4.0.6": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.6": version: 4.0.6 resolution: "pirates@npm:4.0.6" checksum: 10c0/00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36 @@ -14084,7 +14223,97 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.43": +"postcss-import@npm:^15.1.0": + version: 15.1.0 + resolution: "postcss-import@npm:15.1.0" + dependencies: + postcss-value-parser: "npm:^4.0.0" + read-cache: "npm:^1.0.0" + resolve: "npm:^1.1.7" + peerDependencies: + postcss: ^8.0.0 + checksum: 10c0/518aee5c83ea6940e890b0be675a2588db68b2582319f48c3b4e06535a50ea6ee45f7e63e4309f8754473245c47a0372632378d1d73d901310f295a92f26f17b + languageName: node + linkType: hard + +"postcss-js@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-js@npm:4.0.1" + dependencies: + camelcase-css: "npm:^2.0.1" + peerDependencies: + postcss: ^8.4.21 + checksum: 10c0/af35d55cb873b0797d3b42529514f5318f447b134541844285c9ac31a17497297eb72296902967911bb737a75163441695737300ce2794e3bd8c70c13a3b106e + languageName: node + linkType: hard + +"postcss-load-config@npm:^4.0.1": + version: 4.0.2 + resolution: "postcss-load-config@npm:4.0.2" + dependencies: + lilconfig: "npm:^3.0.0" + yaml: "npm:^2.3.4" + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 10c0/3d7939acb3570b0e4b4740e483d6e555a3e2de815219cb8a3c8fc03f575a6bde667443aa93369c0be390af845cb84471bf623e24af833260de3a105b78d42519 + languageName: node + linkType: hard + +"postcss-loader@npm:^8.1.1": + version: 8.1.1 + resolution: "postcss-loader@npm:8.1.1" + dependencies: + cosmiconfig: "npm:^9.0.0" + jiti: "npm:^1.20.0" + semver: "npm:^7.5.4" + peerDependencies: + "@rspack/core": 0.x || 1.x + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10c0/86cde94cd4c7c39892ef9bd4bf09342f422a21789654038694cf2b23c37c0ed9550c73608f656426a6631f0ade1eca82022781831e93d5362afe2f191388b85e + languageName: node + linkType: hard + +"postcss-nested@npm:^6.0.1": + version: 6.2.0 + resolution: "postcss-nested@npm:6.2.0" + dependencies: + postcss-selector-parser: "npm:^6.1.1" + peerDependencies: + postcss: ^8.2.14 + checksum: 10c0/7f9c3f2d764191a39364cbdcec350f26a312431a569c9ef17408021424726b0d67995ff5288405e3724bb7152a4c92f73c027e580ec91e798800ed3c52e2bc6e + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.1.1": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 + languageName: node + linkType: hard + +"postcss@npm:^8.4.23, postcss@npm:^8.4.43, postcss@npm:^8.4.47": version: 8.4.47 resolution: "postcss@npm:8.4.47" dependencies: @@ -14118,6 +14347,61 @@ __metadata: languageName: node linkType: hard +"prettier-plugin-tailwindcss@npm:^0.5.12": + version: 0.5.14 + resolution: "prettier-plugin-tailwindcss@npm:0.5.14" + peerDependencies: + "@ianvs/prettier-plugin-sort-imports": "*" + "@prettier/plugin-pug": "*" + "@shopify/prettier-plugin-liquid": "*" + "@trivago/prettier-plugin-sort-imports": "*" + "@zackad/prettier-plugin-twig-melody": "*" + prettier: ^3.0 + prettier-plugin-astro: "*" + prettier-plugin-css-order: "*" + prettier-plugin-import-sort: "*" + prettier-plugin-jsdoc: "*" + prettier-plugin-marko: "*" + prettier-plugin-organize-attributes: "*" + prettier-plugin-organize-imports: "*" + prettier-plugin-sort-imports: "*" + prettier-plugin-style-order: "*" + prettier-plugin-svelte: "*" + peerDependenciesMeta: + "@ianvs/prettier-plugin-sort-imports": + optional: true + "@prettier/plugin-pug": + optional: true + "@shopify/prettier-plugin-liquid": + optional: true + "@trivago/prettier-plugin-sort-imports": + optional: true + "@zackad/prettier-plugin-twig-melody": + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + checksum: 10c0/9857873cb8cb0d9b7b895806e7f6265617a08805691125d282767dffb1cb3d2c4c662f2b9168ef391edc40dff1b81beb99eee488f96544e01b8924db694f2299 + languageName: node + linkType: hard + "prettier@npm:3.3.3": version: 3.3.3 resolution: "prettier@npm:3.3.3" @@ -14565,6 +14849,15 @@ __metadata: languageName: node linkType: hard +"read-cache@npm:^1.0.0": + version: 1.0.0 + resolution: "read-cache@npm:1.0.0" + dependencies: + pify: "npm:^2.3.0" + checksum: 10c0/90cb2750213c7dd7c80cb420654344a311fdec12944e81eb912cd82f1bc92aea21885fa6ce442e3336d9fccd663b8a7a19c46d9698e6ca55620848ab932da814 + languageName: node + linkType: hard + "readable-stream@npm:^2.0.5, readable-stream@npm:^2.3.8": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -14880,7 +15173,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.11.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.20.0, resolve@npm:^1.22.4, resolve@npm:^1.22.8": +"resolve@npm:^1.1.7, resolve@npm:^1.11.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.20.0, resolve@npm:^1.22.2, resolve@npm:^1.22.4, resolve@npm:^1.22.8": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -14906,7 +15199,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.11.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": +"resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.11.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -15109,6 +15402,7 @@ __metadata: dependencies: "@redwoodjs/core": "npm:8.3.0" "@redwoodjs/project-config": "npm:8.3.0" + prettier-plugin-tailwindcss: "npm:^0.5.12" languageName: unknown linkType: soft @@ -15960,6 +16254,24 @@ __metadata: languageName: node linkType: hard +"sucrase@npm:^3.32.0": + version: 3.35.0 + resolution: "sucrase@npm:3.35.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.2" + commander: "npm:^4.0.0" + glob: "npm:^10.3.10" + lines-and-columns: "npm:^1.1.6" + mz: "npm:^2.7.0" + pirates: "npm:^4.0.1" + ts-interface-checker: "npm:^0.1.9" + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 10c0/ac85f3359d2c2ecbf5febca6a24ae9bf96c931f05fde533c22a94f59c6a74895e5d5f0e871878dfd59c2697a75ebb04e4b2224ef0bfc24ca1210735c2ec191ef + languageName: node + linkType: hard + "supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -16047,6 +16359,39 @@ __metadata: languageName: node linkType: hard +"tailwindcss@npm:^3.4.13": + version: 3.4.13 + resolution: "tailwindcss@npm:3.4.13" + dependencies: + "@alloc/quick-lru": "npm:^5.2.0" + arg: "npm:^5.0.2" + chokidar: "npm:^3.5.3" + didyoumean: "npm:^1.2.2" + dlv: "npm:^1.1.3" + fast-glob: "npm:^3.3.0" + glob-parent: "npm:^6.0.2" + is-glob: "npm:^4.0.3" + jiti: "npm:^1.21.0" + lilconfig: "npm:^2.1.0" + micromatch: "npm:^4.0.5" + normalize-path: "npm:^3.0.0" + object-hash: "npm:^3.0.0" + picocolors: "npm:^1.0.0" + postcss: "npm:^8.4.23" + postcss-import: "npm:^15.1.0" + postcss-js: "npm:^4.0.1" + postcss-load-config: "npm:^4.0.1" + postcss-nested: "npm:^6.0.1" + postcss-selector-parser: "npm:^6.0.11" + resolve: "npm:^1.22.2" + sucrase: "npm:^3.32.0" + bin: + tailwind: lib/cli.js + tailwindcss: lib/cli.js + checksum: 10c0/c6525be3dd26febc4ec5e45e80596bff8b48ade7de258c1ec8704297bf47c1ec7b2b186b13662ebaa6ab4795ad8879fb64064f796756bfc8b46558b542b01a6c + languageName: node + linkType: hard + "tar-stream@npm:^3.0.0": version: 3.1.7 resolution: "tar-stream@npm:3.1.7" @@ -16119,6 +16464,24 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: "npm:>= 3.1.0 < 4" + checksum: 10c0/9b896a22735e8122754fe70f1d65f7ee691c1d70b1f116fda04fea103d0f9b356e3676cb789506e3909ae0486a79a476e4914b0f92472c2e093d206aed4b7d6b + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: "npm:^1.0.0" + checksum: 10c0/f375aeb2b05c100a456a30bc3ed07ef03a39cbdefe02e0403fb714b8c7e57eeaad1a2f5c4ecfb9ce554ce3db9c2b024eba144843cd9e344566d9fcee73b04767 + languageName: node + linkType: hard + "thread-stream@npm:^3.0.0": version: 3.1.0 resolution: "thread-stream@npm:3.1.0" @@ -16268,6 +16631,13 @@ __metadata: languageName: node linkType: hard +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 10c0/232509f1b84192d07b81d1e9b9677088e590ac1303436da1e92b296e9be8e31ea042e3e1fd3d29b1742ad2c959e95afe30f63117b8f1bc3a3850070a5142fea7 + languageName: node + linkType: hard + "ts-invariant@npm:^0.10.3": version: 0.10.3 resolution: "ts-invariant@npm:0.10.3" @@ -16759,7 +17129,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 @@ -17001,9 +17371,13 @@ __metadata: "@redwoodjs/web": "npm:8.3.0" "@types/react": "npm:^18.2.55" "@types/react-dom": "npm:^18.2.19" + autoprefixer: "npm:^10.4.20" humanize-string: "npm:2.1.0" + postcss: "npm:^8.4.47" + postcss-loader: "npm:^8.1.1" react: "npm:18.3.1" react-dom: "npm:18.3.1" + tailwindcss: "npm:^3.4.13" languageName: unknown linkType: soft @@ -17374,6 +17748,15 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.3.4": + version: 2.5.1 + resolution: "yaml@npm:2.5.1" + bin: + yaml: bin.mjs + checksum: 10c0/40fba5682898dbeeb3319e358a968fe886509fab6f58725732a15f8dda3abac509f91e76817c708c9959a15f786f38ff863c1b88062d7c1162c5334a7d09cb4a + languageName: node + linkType: hard + "yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1"