From 422fabf0f6d401e9e5d9f77e7e239bfd3fc600b1 Mon Sep 17 00:00:00 2001 From: Lucemans Date: Fri, 6 Oct 2023 18:03:24 +0000 Subject: [PATCH] Introduce Basic Page --- .github/workflows/deploy.yaml | 40 +++ .gitignore | 1 + Dockerfile | 59 +++++ app/[slug]/page.tsx | 141 +++++++++++ app/global.css | 3 + app/layout.tsx | 24 +- app/page.tsx | 2 +- hooks/useEnstate.ts | 32 +++ next.config.js | 11 + package.json | 13 +- pnpm-lock.yaml | 455 +++++++++++++++++++++++++++++++--- postcss.config.js | 7 + public/frensday_1.svg | 52 ++++ public/frensday_2.png | Bin 0 -> 15509 bytes public/frensday_2.svg | 45 ++++ tailwind.config.js | 16 ++ 16 files changed, 852 insertions(+), 49 deletions(-) create mode 100644 .github/workflows/deploy.yaml create mode 100644 Dockerfile create mode 100644 app/[slug]/page.tsx create mode 100644 app/global.css create mode 100644 hooks/useEnstate.ts create mode 100644 next.config.js create mode 100644 postcss.config.js create mode 100644 public/frensday_1.svg create mode 100644 public/frensday_2.png create mode 100644 public/frensday_2.svg create mode 100644 tailwind.config.js diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..bdf027f --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,40 @@ +name: Build App +on: + push: + branches: + - master +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: | + ghcr.io/v3xlabs/ens-page + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=edge + type=sha + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v3 + with: + push: true + context: . + file: Dockerfile + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitignore b/.gitignore index 2e629e3..77178f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ .next +.dockerignore diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f68a80a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,59 @@ +FROM node:18-alpine AS base + +# Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \ + else echo "Lockfile not found." && exit 1; \ + fi + + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Next.js collects completely anonymous telemetry data about general usage. +# Learn more here: https://nextjs.org/telemetry +# Uncomment the following line in case you want to disable telemetry during the build. +# ENV NEXT_TELEMETRY_DISABLED 1 + +RUN yarn build + +# If using npm comment out above and use below instead +# RUN npm run build + +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV production +# Uncomment the following line in case you want to disable telemetry during runtime. +# ENV NEXT_TELEMETRY_DISABLED 1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT 3000 + +CMD ["node", "server.js"] diff --git a/app/[slug]/page.tsx b/app/[slug]/page.tsx new file mode 100644 index 0000000..07bd949 --- /dev/null +++ b/app/[slug]/page.tsx @@ -0,0 +1,141 @@ +import { ens_normalize } from '@adraffy/ens-normalize'; +import { formatRecord } from '@ens-tools/format'; +import { FC, PropsWithChildren, ReactNode } from 'react'; +import { FaTelegram } from 'react-icons/fa'; +import { FiGithub, FiLink, FiTwitter } from 'react-icons/fi'; + +import { useEnstate } from '../../hooks/useEnstate'; + +const Button: FC> = ({ + children, + href, +}) => { + return ( + + {children} + + ); +}; + +const buttonControls = (key: string, value: string): ReactNode | undefined => { + const formatted = formatRecord(key as any, value); + + if (key == 'com.twitter') { + return ( + + ); + } + + if (key == 'url') { + const { hostname } = new URL(formatted || value); + + return ( + + ); + } + + if (key == 'com.github') { + return ( + + ); + } + + if (key == 'org.telegram') { + return ( + + ); + } + + if (key == 'com.discord') { + // TODO: Discord url: https://discord.com/users/1234567890 <-- userid + // Can be done once discord implements a way to resolve user ids, or we change the record + } + + // return
Unknown {key}
; +}; + +export default async function ({ + params: { slug }, +}: { + params: { slug: string }; +}) { + const raw_name = slug; + const name = ens_normalize(raw_name.toLowerCase()); + + if (raw_name.toLowerCase() !== name) { + throw new Error('Invalid ENS name'); + } + + // if (!name.match(/^[a-z0-9-.]+$/)) { + + const data = await useEnstate(name); + + return ( +
+
+ frensday +
November 13 2023, Istanbul Türkiye
+
+
+
+
+ profile +
+
+ frensday +
+
+
+
+ {data.name} +
+ {data.records.description && ( +
{data.records.description}
+ )} +
+
+
+ {Object.keys(data.records) + .map((key) => buttonControls(key, data.records[key])) + .filter(Boolean)} + +
+
+ ); +} diff --git a/app/global.css b/app/global.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/app/global.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/app/layout.tsx b/app/layout.tsx index a14e64f..26b13c5 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,16 +1,20 @@ +import './global.css'; + +import React from 'react'; + export const metadata = { - title: 'Next.js', - description: 'Generated by Next.js', -} + title: 'Next.js', + description: 'Generated by Next.js', +}; export default function RootLayout({ - children, + children, }: { - children: React.ReactNode + children: React.ReactNode; }) { - return ( - - {children} - - ) + return ( + + {children} + + ); } diff --git a/app/page.tsx b/app/page.tsx index dbaa8ff..fa0b5bc 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,3 +1,3 @@ export default function () { - return
h
; + return
ens.page v0.1-alpha.1
; } diff --git a/hooks/useEnstate.ts b/hooks/useEnstate.ts new file mode 100644 index 0000000..7f6a78f --- /dev/null +++ b/hooks/useEnstate.ts @@ -0,0 +1,32 @@ +const FALLBACK_DATA = { + name: 'luc.eth', + address: '0x225f137127d9067788314bc7fcc1f36746a3c3B5', + avatar: 'https://ens.xyz/luc.eth', + display: 'luc.eth', + records: { + 'com.discord': 'lucemans', + 'com.github': 'lucemans', + 'com.twitter': 'lucemansnl', + description: 'Create Epic Shit', + email: 'luc@lucemans.nl', + location: 'Breda, NL', + name: 'luc', + 'org.telegram': 'lucemans', + timezone: 'Etc/UTC', + url: 'https://luc.computer', + }, + chains: { + eth: '0x225f137127d9067788314bc7fcc1f36746a3c3B5', + }, + fresh: 1_696_518_163_749, + resolver: '0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41', + errors: {}, +}; + +export const useEnstate = async (name: string) => { + const http = await fetch(`https://enstate.rs/n/${name}`); + + const data: typeof FALLBACK_DATA = await http.json(); + + return data; +}; diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..6351ee7 --- /dev/null +++ b/next.config.js @@ -0,0 +1,11 @@ +/** @type {import('next').NextConfig} */ +// eslint-disable-next-line unicorn/no-empty-file +module.exports = { + reactStrictMode: true, + output: 'standalone', + webpack: (config) => { + config.resolve.fallback = { fs: false, net: false, tls: false }; + + return config; + }, +}; diff --git a/package.json b/package.json index 78dd35c..d3cd7fb 100644 --- a/package.json +++ b/package.json @@ -5,13 +5,22 @@ "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "lint": "eslint -c .eslintrc.json --ext .ts ./src" + "lint": "eslint -c .eslintrc.json --ext .ts ./src", + "dev": "next dev", + "build": "next build" }, "keywords": [], "author": "", "license": "GPL-3", "dependencies": { - "next": "^13.4.10" + "@adraffy/ens-normalize": "^1.10.0", + "@ens-tools/format": "^0.0.2", + "autoprefixer": "^10.4.14", + "next": "^13.4.10", + "postcss": "^8.4.26", + "react": "^18.2.0", + "react-icons": "^4.11.0", + "tailwindcss": "^3.3.3" }, "devDependencies": { "@types/node": "20.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 43e45a8..4fe9365 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,30 @@ lockfileVersion: '6.0' dependencies: + '@adraffy/ens-normalize': + specifier: ^1.10.0 + version: 1.10.0 + '@ens-tools/format': + specifier: ^0.0.2 + version: 0.0.2 + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.26) next: specifier: ^13.4.10 version: 13.4.10(react-dom@18.2.0)(react@18.2.0) + postcss: + specifier: ^8.4.26 + version: 8.4.26 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-icons: + specifier: ^4.11.0 + version: 4.11.0(react@18.2.0) + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 devDependencies: '@types/node': @@ -32,6 +53,15 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: false + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: false + /@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} @@ -60,6 +90,10 @@ packages: regenerator-runtime: 0.13.11 dev: true + /@ens-tools/format@0.0.2: + resolution: {integrity: sha512-hgIznthtDRaxtmuGsvv51RpL840daIk619nBG90lTWFGnrfzKWaKNo98QA/n+7WWd//47Bvy/3unv0VVgQaggA==} + dev: false + /@eslint-community/eslint-utils@4.4.0(eslint@8.45.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -117,6 +151,40 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 + dev: false + + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/sourcemap-codec@1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: false + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: false + + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: false + /@next/env@13.4.10: resolution: {integrity: sha512-3G1yD/XKTSLdihyDSa8JEsaWOELY+OWe08o0LUYzfuHp1zHDA8SObQlzKt+v+wrkkPcnPweoLH1ImZeUa0A1NQ==} dev: false @@ -208,12 +276,10 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -221,7 +287,6 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true /@swc/helpers@0.5.1: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} @@ -448,6 +513,22 @@ packages: color-convert: 2.0.1 dev: true + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -517,6 +598,22 @@ packages: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} dev: true + /autoprefixer@10.4.14(postcss@8.4.26): + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.9 + caniuse-lite: 1.0.30001516 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.26 + postcss-value-parser: 4.2.0 + dev: false + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -535,21 +632,34 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: true + + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001516 + electron-to-chromium: 1.4.461 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.9) + dev: false /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} @@ -575,6 +685,11 @@ packages: engines: {node: '>=6'} dev: true + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: false + /caniuse-lite@1.0.30001516: resolution: {integrity: sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g==} dev: false @@ -596,6 +711,21 @@ packages: supports-color: 7.2.0 dev: true + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: false + /ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} @@ -633,9 +763,13 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: false + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -646,6 +780,12 @@ packages: which: 2.0.2 dev: true + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} dev: true @@ -683,6 +823,10 @@ packages: engines: {node: '>=6'} dev: true + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -690,6 +834,10 @@ packages: path-type: 4.0.0 dev: true + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -697,6 +845,10 @@ packages: esutils: 2.0.3 dev: true + /electron-to-chromium@1.4.461: + resolution: {integrity: sha512-1JkvV2sgEGTDXjdsaQCeSwYYuhLRphRpc+g6EHTFELJXEiznLt3/0pZ9JuAOQ5p2rI3YxKTbivtvajirIfhrEQ==} + dev: false + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true @@ -776,6 +928,11 @@ packages: is-symbol: 1.0.4 dev: true + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: false + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -1083,7 +1240,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -1097,7 +1253,6 @@ packages: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 - dev: true /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} @@ -1111,7 +1266,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: true /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -1147,13 +1301,23 @@ packages: is-callable: 1.2.7 dev: true + /fraction.js@4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: false + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} @@ -1191,19 +1355,28 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: true /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: false + /glob@7.1.6: + resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: @@ -1297,7 +1470,6 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: true /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -1331,11 +1503,9 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} @@ -1364,6 +1534,13 @@ packages: has-bigints: 1.0.2 dev: true + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} @@ -1388,7 +1565,6 @@ packages: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: has: 1.0.3 - dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -1400,14 +1576,12 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: true /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} @@ -1424,7 +1598,6 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -1484,6 +1657,11 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /jiti@1.19.1: + resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==} + hasBin: true + dev: false + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1534,9 +1712,13 @@ packages: type-check: 0.4.0 dev: true + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: false + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} @@ -1577,7 +1759,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -1585,7 +1766,6 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -1596,12 +1776,19 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + /nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1655,6 +1842,10 @@ packages: - babel-plugin-macros dev: false + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: false + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -1664,6 +1855,26 @@ packages: validate-npm-package-license: 3.0.4 dev: true + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + /object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true @@ -1714,7 +1925,6 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: true /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -1786,7 +1996,6 @@ packages: /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -1795,7 +2004,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -1809,13 +2017,83 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: false /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} dev: true + /postcss-import@15.1.0(postcss@8.4.26): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.26 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.2 + dev: false + + /postcss-js@4.0.1(postcss@8.4.26): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.26 + dev: false + + /postcss-load-config@4.0.1(postcss@8.4.26): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.26 + yaml: 2.3.1 + dev: false + + /postcss-nested@6.0.1(postcss@8.4.26): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.26 + postcss-selector-parser: 6.0.13 + dev: false + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false + /postcss@8.4.14: resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} engines: {node: ^10 || ^12 || >=14} @@ -1825,6 +2103,15 @@ packages: source-map-js: 1.0.2 dev: false + /postcss@8.4.26: + resolution: {integrity: sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -1850,7 +2137,6 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true /react-dom@18.2.0(react@18.2.0): resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} @@ -1862,6 +2148,14 @@ packages: scheduler: 0.23.0 dev: false + /react-icons@4.11.0(react@18.2.0): + resolution: {integrity: sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==} + peerDependencies: + react: '*' + dependencies: + react: 18.2.0 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -1869,6 +2163,12 @@ packages: loose-envify: 1.4.0 dev: false + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: false + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -1888,6 +2188,13 @@ packages: type-fest: 0.6.0 dev: true + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true @@ -1918,12 +2225,10 @@ packages: is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -1936,7 +2241,6 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - dev: true /safe-array-concat@1.0.0: resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} @@ -2104,6 +2408,20 @@ packages: react: 18.2.0 dev: false + /sucrase@3.33.0: + resolution: {integrity: sha512-ARGC7vbufOHfpvyGcZZXFaXCMZ9A4fffOGC5ucOW7+WHDGlAe8LJdf3Jts1sWhDeiI1RSWrKy5Hodl+JWGdW2A==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + dev: false + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -2121,18 +2439,60 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true + + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.0 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.19.1 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.26 + postcss-import: 15.1.0(postcss@8.4.26) + postcss-js: 4.0.1(postcss@8.4.26) + postcss-load-config: 4.0.1(postcss@8.4.26) + postcss-nested: 6.0.1(postcss@8.4.26) + postcss-selector-parser: 6.0.13 + resolve: 1.22.2 + sucrase: 3.33.0 + transitivePeerDependencies: + - ts-node + dev: false /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: false + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: false + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: true /ts-api-utils@1.0.1(typescript@5.1.6): resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} @@ -2143,6 +2503,10 @@ packages: typescript: 5.1.6 dev: true + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: false + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true @@ -2236,12 +2600,27 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: false + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 dev: true + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -2289,12 +2668,16 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + dev: false + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..b304d33 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +// eslint-disable-next-line unicorn/no-empty-file +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/frensday_1.svg b/public/frensday_1.svg new file mode 100644 index 0000000..1d21490 --- /dev/null +++ b/public/frensday_1.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/frensday_2.png b/public/frensday_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1188c43700b0aeee0817e604f4a9557773476aa0 GIT binary patch literal 15509 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..c14b080 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,16 @@ +/** @type {import('tailwindcss').Config} */ +// eslint-disable-next-line unicorn/no-empty-file +module.exports = { + content: [ + './app/**/*.{js,ts,jsx,tsx,mdx}', + './pages/**/*.{js,ts,jsx,tsx,mdx}', + './components/**/*.{js,ts,jsx,tsx,mdx}', + + // Or if using `src` directory: + './src/**/*.{js,ts,jsx,tsx,mdx}', + ], + theme: { + extend: {}, + }, + plugins: [], +};