diff --git a/.dockerignore b/.dockerignore index 72c41e1..283129d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,6 +3,7 @@ !src/ !bun.lockb !bunfig.toml +!LICENSE !next.config.js !package.json !tsconfig.json \ No newline at end of file diff --git a/.env.example b/.env.example deleted file mode 100644 index fd2fa8e..0000000 --- a/.env.example +++ /dev/null @@ -1 +0,0 @@ -API_URL= \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e045074 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,197 @@ +# Default +* text=auto + +# Source code +*.bash text eol=lf +*.bat text eol=crlf +*.cmd text eol=crlf +*.coffee text +*.css text diff=css +*.htm text diff=html +*.html text diff=html +*.inc text +*.ini text +*.js text +*.mjs text +*.cjs text +*.json text +*.jsx text +*.less text +*.ls text +*.map text -diff +*.od text +*.onlydata text +*.php text diff=php +*.pl text +*.ps1 text eol=crlf +*.py text diff=python +*.rb text diff=ruby +*.sass text +*.scm text +*.scss text diff=css +*.sh text eol=lf +.husky/* text eol=lf +*.sql text +*.styl text +*.tag text +*.ts text +*.tsx text +*.xml text +*.xhtml text diff=html + +# Docker +Dockerfile text + +# Documentation +*.ipynb text eol=lf +*.markdown text diff=markdown +*.md text diff=markdown +*.mdwn text diff=markdown +*.mdown text diff=markdown +*.mkd text diff=markdown +*.mkdn text diff=markdown +*.mdtxt text +*.mdtext text +*.txt text +AUTHORS text +CHANGELOG text +CHANGES text +CONTRIBUTING text +COPYING text +copyright text +*COPYRIGHT* text +INSTALL text +license text +LICENSE text +NEWS text +readme text +*README* text + +# Templates +*.dot text +*.ejs text +*.erb text +*.haml text +*.handlebars text +*.hbs text +*.hbt text +*.jade text +*.latte text +*.mustache text +*.njk text +*.phtml text +*.svelte text +*.tmpl text +*.tpl text +*.twig text +*.vue text + +# Configs +*.cnf text +*.conf text +*.config text +.editorconfig text +.env text +.gitattributes text +.gitconfig text +.htaccess text +*.lock text -diff +*.lockb binary diff=lockb +package.json text eol=lf +package-lock.json text eol=lf -diff +pnpm-lock.yaml text eol=lf -diff +.prettierrc text +yarn.lock text -diff +*.toml text +*.yaml text +*.yml text +browserslist text +Makefile text +makefile text +tsconfig.json linguist-language=JSON-with-Comments + +# Heroku +Procfile text + +# Graphics +*.ai binary +*.bmp binary +*.eps binary +*.gif binary +*.gifv binary +*.ico binary +*.jng binary +*.jp2 binary +*.jpg binary +*.jpeg binary +*.jpx binary +*.jxr binary +*.pdf binary +*.png binary +*.psb binary +*.psd binary +*.svg text +*.svgz binary +*.tif binary +*.tiff binary +*.wbmp binary +*.webp binary + +# Audio +*.kar binary +*.m4a binary +*.mid binary +*.midi binary +*.mp3 binary +*.ogg binary +*.ra binary + +# Video +*.3gpp binary +*.3gp binary +*.as binary +*.asf binary +*.asx binary +*.avi binary +*.fla binary +*.flv binary +*.m4v binary +*.mng binary +*.mov binary +*.mp4 binary +*.mpeg binary +*.mpg binary +*.ogv binary +*.swc binary +*.swf binary +*.webm binary + +# Archives +*.7z binary +*.gz binary +*.jar binary +*.rar binary +*.tar binary +*.zip binary + +# Fonts +*.ttf binary +*.eot binary +*.otf binary +*.woff binary +*.woff2 binary + +# Executables +*.exe binary +*.pyc binary +**/.yarn/releases/** binary +**/.yarn/plugins/** binary + +# RC files (like .babelrc or .eslintrc) +*.*rc text + +# Ignore files (like .npmignore or .gitignore) +*.*ignore text + +# Prevents massive diffs from built files +dist/* binary \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0f2ce04..a42e059 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,9 +1,9 @@ version: 2 updates: - package-ecosystem: github-actions - directory: '/' + directory: / target-branch: dev schedule: - interval: daily + interval: weekly labels: - dependency:gha \ No newline at end of file diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml deleted file mode 100644 index eeac4b9..0000000 --- a/.github/workflows/container.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: 'CD -> Container' -on: - workflow_dispatch: - push: - branches: - - stable - -concurrency: - group: '${{ github.workflow }}-${{ github.ref }}' - cancel-in-progress: false - -permissions: - contents: read - -jobs: - build: - if: ${{ github.repository_owner == 'jspaste' }} - name: 'Build container image' - runs-on: ubuntu-latest - permissions: - packages: write - - steps: - - name: 'Harden Runner' - uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 - with: - egress-policy: audit - - - name: 'Checkout' - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - - - name: 'Setup QEMU' - run: | - sudo apt-get update - sudo apt-get install -y qemu-user-static - - - name: 'Setup tags' - id: setup-tags - run: | - TIMESTAMP="$(date +%Y.%m.%d)" - SHA_SHORT="${GITHUB_SHA::7}" - - TAGS=() - TAGS+=("latest") - TAGS+=("${GITHUB_SHA}") - TAGS+=("${TIMESTAMP}-${SHA_SHORT}") - - echo "build-tags=${TAGS[*]}" >> $GITHUB_OUTPUT - - - name: 'Build image' - id: build-image - uses: redhat-actions/buildah-build@7a95fa7ee0f02d552a32753e7414641a04307056 # v2.13 - with: - archs: amd64, arm64 - containerfiles: Dockerfile - image: ${{ github.repository }} - layers: true - oci: true - tags: ${{ steps.setup-tags.outputs.build-tags }} - - - name: 'Push to GHCR' - uses: redhat-actions/push-to-registry@9986a6552bc4571882a4a67e016b17361412b4df # v2.7.1 - with: - image: ${{ steps.build-image.outputs.image }} - tags: ${{ steps.build-image.outputs.tags }} - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..6c247ca --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,105 @@ +name: "CD -> Release" +on: + workflow_dispatch: + inputs: + image-action: + description: "Container image action" + type: choice + required: true + default: "none" + options: + - "none" + - "build" + - "build-release" + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: false + +permissions: + contents: read + +jobs: + container: + if: ${{ github.repository_owner == 'jspaste' && inputs.image-action != 'none' }} + name: "Build container image" + runs-on: ubuntu-latest + env: + REGISTRY: ghcr.io + + permissions: + attestations: write + id-token: write + packages: write + + steps: + - name: "Harden Runner" + uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1 + with: + egress-policy: audit + + - name: "Setup QEMU" + run: | + sudo apt-get update + sudo apt-get install -y qemu-user-static + + - name: "Setup tags" + id: tags-image + run: | + TIMESTAMP="$(date +%Y.%m.%d)" + GITHUB_SHA_SHORT="${GITHUB_SHA::7}" + + TAGS=() + + if [[ "${GITHUB_REF}" == "refs/heads/stable" ]]; then + TAGS+=("latest") + else + TAGS+=("snapshot") + fi + + TAGS+=("${GITHUB_SHA}") + TAGS+=("${TIMESTAMP}-${GITHUB_SHA_SHORT}") + + echo "tags=${TAGS[*]}" >>"$GITHUB_OUTPUT" + + - name: "Checkout" + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + with: + persist-credentials: false + + - name: "Build image" + id: build-image + uses: redhat-actions/buildah-build@7a95fa7ee0f02d552a32753e7414641a04307056 # v2.13 + with: + archs: amd64, arm64 + containerfiles: Dockerfile + image: ${{ github.repository }} + layers: true + oci: true + tags: ${{ steps.tags-image.outputs.tags }} + extra-args: --squash + + - if: ${{ inputs.image-action == 'build-release' }} + name: "Login to GHCR" + uses: redhat-actions/podman-login@4934294ad0449894bcd1e9f191899d7292469603 # v1.7 + with: + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + registry: ${{ env.REGISTRY }} + + - if: ${{ inputs.image-action == 'build-release' }} + name: "Push to GHCR" + id: push-image + uses: redhat-actions/push-to-registry@5ed88d269cf581ea9ef6dd6806d01562096bee9c # v2.8 + with: + image: ${{ steps.build-image.outputs.image }} + tags: ${{ steps.build-image.outputs.tags }} + registry: ${{ env.REGISTRY }} + + - if: ${{ inputs.image-action == 'build-release' }} + name: "Attest image" + uses: actions/attest-build-provenance@173725a1209d09b31f9d30a3890cf2757ebbff0d # v1.1.2 + with: + subject-name: "${{ env.REGISTRY }}/${{ steps.build-image.outputs.image }}" + subject-digest: ${{ steps.push-image.outputs.digest }} + push-to-registry: false \ No newline at end of file diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index 45c823f..a080d6b 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -1,5 +1,6 @@ name: 'CI -> Security' on: + branch_protection_rule: schedule: - cron: '33 3 * * 1' @@ -34,20 +35,22 @@ jobs: steps: - name: 'Harden Runner' - uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1 with: egress-policy: audit - name: 'Checkout' - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 + with: + persist-credentials: false - name: 'Setup CodeQL' - uses: github/codeql-action/init@4355270be187e1b672a7a1c7c7bae5afdc1ab94a # v3.24.10 + uses: github/codeql-action/init@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 with: languages: ${{ matrix.language }} - name: 'Run analysis' - uses: github/codeql-action/analyze@4355270be187e1b672a7a1c7c7bae5afdc1ab94a # v3.24.10 + uses: github/codeql-action/analyze@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 with: category: '/language:${{ matrix.language }}' @@ -60,23 +63,23 @@ jobs: steps: - name: 'Harden Runner' - uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1 with: egress-policy: audit - name: 'Checkout' - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 with: persist-credentials: false - name: 'Run analysis' - uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 + uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3 with: results_file: scoreboard.sarif results_format: sarif publish_results: true - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@4355270be187e1b672a7a1c7c7bae5afdc1ab94a # v3.24.10 + uses: github/codeql-action/upload-sarif@b7cec7526559c32f1616476ff32d17ba4c59b2d6 # v3.25.5 with: sarif_file: scoreboard.sarif \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c7d0f5d..a287810 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,12 +28,12 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Harden Runner' - uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0 + uses: step-security/harden-runner@a4aa98b93cab29d9b1101a6143fb8bce00e2eac4 # v2.7.1 with: egress-policy: audit - name: 'Checkout' - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 with: persist-credentials: false diff --git a/.gitignore b/.gitignore index 84e894e..8fedb49 100644 --- a/.gitignore +++ b/.gitignore @@ -134,4 +134,4 @@ dist .yarn/unplugged .yarn/build-state.yml .yarn/install-state.gz -.pnp.* +.pnp.* \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 9afe1e4..203d0d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,26 +1,28 @@ -# Builder -FROM docker.io/imbios/bun-node:1.1-21-alpine AS builder +FROM docker.io/oven/bun:1-alpine AS builder +WORKDIR /build/ COPY . ./ RUN bun install --production --frozen-lockfile && \ - NEXT_OUTPUT=standalone bun run build + bun run build:standalone -# Runner -FROM cgr.dev/chainguard/bun:latest -WORKDIR /home/nonroot +FROM docker.io/oven/bun:1-distroless +WORKDIR /frontend/ -COPY --chown=nonroot --from=builder /home/bun/app/.next/standalone ./ -COPY --chown=nonroot --from=builder /home/bun/app/.next/static ./.next/static -COPY --chown=nonroot --from=builder /home/bun/app/public ./public +COPY --chown=nonroot --from=builder /build/.next/standalone ./ +COPY --chown=nonroot --from=builder /build/.next/static ./.next/static +COPY --chown=nonroot --from=builder /build/public ./public LABEL org.opencontainers.image.url="https://jspaste.eu" \ org.opencontainers.image.source="https://github.com/jspaste/frontend" \ - org.opencontainers.image.title="jspaste-frontend" \ - org.opencontainers.image.description="The frontend for JSPaste, built with Bun and Next.js" \ + org.opencontainers.image.title="@jspaste/frontend" \ + org.opencontainers.image.description="The frontend for JSPaste" \ org.opencontainers.image.documentation="https://docs.jspaste.eu" \ org.opencontainers.image.licenses="EUPL-1.2" -EXPOSE 3000/tcp +ENV HOSTNAME=127.0.0.1 +ENV PORT=3000 + +EXPOSE 3000 CMD ["server.js"] \ No newline at end of file diff --git a/biome.json b/biome.json index f188466..195aeee 100644 --- a/biome.json +++ b/biome.json @@ -1,13 +1,12 @@ { - "$schema": "https://biomejs.dev/schemas/1.6.4/schema.json", + "$schema": "https://biomejs.dev/schemas/1.7.3/schema.json", "files": { - "ignoreUnknown": true, - "ignore": [".next/", "**/node_modules/"] + "ignore": ["./.next/", "**/node_modules/", "./dist/"], + "ignoreUnknown": true }, "formatter": { "enabled": true, "formatWithErrors": false, - "ignore": [".next/", "**/node_modules/"], "indentStyle": "tab", "indentWidth": 4, "lineEnding": "lf", @@ -33,7 +32,6 @@ }, "linter": { "enabled": true, - "ignore": [".next/", "**/node_modules/"], "rules": { "recommended": true, "style": { diff --git a/bun.lockb b/bun.lockb index b9f76f4..126925a 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/bunfig.toml b/bunfig.toml index 1b6555b..0fe4641 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -1 +1,8 @@ -telemetry = false \ No newline at end of file +telemetry = false + +[install] +auto = "disable" + +[run] +bun = true +silent = true \ No newline at end of file diff --git a/next.config.js b/next.config.js index 83441bf..a252157 100644 --- a/next.config.js +++ b/next.config.js @@ -14,9 +14,6 @@ const nextConfig = { } ] }, - env: { - API_URL: process.env.API_URL - }, async redirects() { return [ { @@ -26,8 +23,8 @@ const nextConfig = { }, { source: '/favicon.ico', - destination: '/image/favicon.svg', - permanent: true + destination: '/media/jspaste.bg.rounded.svg', + permanent: false }, { source: '/:key/raw', diff --git a/package.json b/package.json index ec023c9..6e949a4 100644 --- a/package.json +++ b/package.json @@ -5,13 +5,16 @@ "license": "EUPL-1.2", "type": "module", "scripts": { - "build": "bun next build", + "build": "bun run build:next", + "build:next": "bun next build", + "build:standalone": "NEXT_OUTPUT=standalone bun run build:next", "fix": "bun run fix:biome && bun run fix:package", - "fix:biome": "bun --bun biome check --apply .", - "fix:package": "bun --bun sort-package-json --quiet", + "fix:biome": "bun biome check --apply .", + "fix:package": "bun sort-package-json --quiet", + "postinstall": "bun next telemetry disable", "lint": "bun run lint:biome && bun run lint:tsc", - "lint:biome": "bun --bun biome lint .", - "lint:tsc": "bun --bun tsc --noEmit", + "lint:biome": "bun biome lint .", + "lint:tsc": "bun tsc --noEmit", "start": "bun run build && bun next start", "start:dev": "bun next dev" }, @@ -21,23 +24,21 @@ "@chakra-ui/react": "~2.8.2", "@chakra-ui/system": "~2.6.2", "@monaco-editor/react": "~4.6.0", - "@types/bun": "~1.0.12", - "@types/react": "~18.2.74", - "@types/react-dom": "~18.2.24", - "env-var": "~7.4.1", + "@types/bun": "~1.1.3", + "@types/react": "~18.3.3", + "@types/react-dom": "~18.3.0", "highlight.js": "~11.9.0", - "million": "~3.0.6", - "next": "~14.1.4", - "react": "~18.2.0", - "react-dom": "~18.2.0", - "react-icons": "~5.0.1", - "sharp": "~0.33.3", - "typescript": "~5.4.4", + "million": "~3.1.6", + "next": "~14.2.3", + "react": "~18.3.1", + "react-dom": "~18.3.1", + "react-icons": "~5.2.1", + "typescript": "~5.4.5", "zustand": "~4.5.2" }, "devDependencies": { - "@biomejs/biome": "~1.6.4", - "lefthook": "~1.6.8", + "@biomejs/biome": "~1.7.3", + "lefthook": "~1.6.12", "sort-package-json": "~2.10.0" }, "trustedDependencies": [ diff --git a/public/image/favicon.png b/public/image/favicon.png deleted file mode 100644 index 4f377ca..0000000 Binary files a/public/image/favicon.png and /dev/null differ diff --git a/public/image/favicon.svg b/public/image/favicon.svg deleted file mode 100644 index 8e38ef7..0000000 --- a/public/image/favicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/image/logo.svg b/public/image/logo.svg deleted file mode 100644 index b7b8e6e..0000000 --- a/public/image/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/image/logo.webp b/public/image/logo.webp deleted file mode 100644 index f5e9834..0000000 Binary files a/public/image/logo.webp and /dev/null differ diff --git a/public/image/logo_bg.svg b/public/image/logo_bg.svg deleted file mode 100644 index 879cb0e..0000000 --- a/public/image/logo_bg.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/image/logo_bg.webp b/public/image/logo_bg.webp deleted file mode 100644 index d5262a3..0000000 Binary files a/public/image/logo_bg.webp and /dev/null differ diff --git a/public/media/big/jspaste.bg.rounded.svg b/public/media/big/jspaste.bg.rounded.svg new file mode 100644 index 0000000..7d860b4 --- /dev/null +++ b/public/media/big/jspaste.bg.rounded.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/media/big/jspaste.bg.svg b/public/media/big/jspaste.bg.svg new file mode 100644 index 0000000..64b7b03 --- /dev/null +++ b/public/media/big/jspaste.bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/media/big/jspaste.svg b/public/media/big/jspaste.svg new file mode 100644 index 0000000..6a5277e --- /dev/null +++ b/public/media/big/jspaste.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/media/full/jspaste.bg.svg b/public/media/full/jspaste.bg.svg new file mode 100644 index 0000000..14e1ab7 --- /dev/null +++ b/public/media/full/jspaste.bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/media/full/jspaste.svg b/public/media/full/jspaste.svg new file mode 100644 index 0000000..d63f563 --- /dev/null +++ b/public/media/full/jspaste.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/media/jspaste.bg.rounded.svg b/public/media/jspaste.bg.rounded.svg new file mode 100644 index 0000000..490f039 --- /dev/null +++ b/public/media/jspaste.bg.rounded.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/media/jspaste.bg.svg b/public/media/jspaste.bg.svg new file mode 100644 index 0000000..2b336d4 --- /dev/null +++ b/public/media/jspaste.bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/media/jspaste.png b/public/media/jspaste.png new file mode 100644 index 0000000..d2d9aa8 Binary files /dev/null and b/public/media/jspaste.png differ diff --git a/public/media/jspaste.svg b/public/media/jspaste.svg new file mode 100644 index 0000000..29729e4 --- /dev/null +++ b/public/media/jspaste.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..77470cb --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/src/app/[documentId]/page.tsx b/src/app/[documentId]/page.tsx index a8aecf6..5f52315 100644 --- a/src/app/[documentId]/page.tsx +++ b/src/app/[documentId]/page.tsx @@ -1,7 +1,6 @@ 'use client'; import DocumentScreen from '@/components/screens/DocumentScreen'; -import type { ReactElement } from 'react'; type DocumentViewPageProps = { params: { @@ -9,6 +8,6 @@ type DocumentViewPageProps = { }; }; -export default function DocumentViewPage({ params: { documentId } }: Readonly): ReactElement { +export default function DocumentViewPage({ params: { documentId } }: Readonly) { return ; } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index d3086e4..4f70db7 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -3,7 +3,7 @@ import useThemeValues from '@/hooks/useThemeValues'; import { CacheProvider } from '@chakra-ui/next-js'; import { Box, ChakraProvider, ColorModeScript, extendTheme } from '@chakra-ui/react'; -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; const theme = extendTheme({ config: { @@ -16,7 +16,7 @@ type RootLayoutProps = { children: ReactNode; }; -export default function RootLayout({ children }: Readonly): ReactElement { +export default function RootLayout({ children }: Readonly) { const { getThemeValue } = useThemeValues(); return ( @@ -31,7 +31,7 @@ export default function RootLayout({ children }: Readonly): Rea }} > - JSPaste - The developer website for easy code sharing. + JSPaste - The developer website for easy code sharing @@ -50,7 +50,7 @@ export default function RootLayout({ children }: Readonly): Rea property='og:description' content='Create and share code with JSPaste! The developer website for easy code sharing.' /> - + ): Rea property='twitter:description' content='Create and share code with JSPaste! The developer website for easy code sharing.' /> - + - - + +