Compare commits

...

61 Commits

Author SHA1 Message Date
Robert Burgess ff979a2cfc test
Build KX3DEX.radio / Build and Deploy (push) Successful in 28m58s Details
2024-08-15 15:49:05 -04:00
Dex d6958ea3ea Adding Version releases
Build KX3DEX.radio / Build and Deploy (push) Successful in 29m55s Details
2024-05-06 22:39:45 -04:00
Dex 221d7f9c72 revert
Build KX3DEX.radio / Build and Deploy (push) Successful in 32m45s Details
2024-05-06 20:42:54 -04:00
Dex 84b0d5923d Test new version method.
Build KX3DEX.radio / Build and Deploy (push) Failing after 30m43s Details
2024-05-06 18:19:33 -04:00
Dex 6e12955241 deploy testing
Build KX3DEX.radio / Build and Deploy (push) Failing after 46s Details
2024-05-06 16:32:11 -04:00
Dex 571d5558b1 Test pulling version
Build KX3DEX.radio / Build and Deploy (push) Failing after 35s Details
2024-05-06 16:06:30 -04:00
Dex 38ad6bbe53 Resolve docker build.
Build KX3DEX.radio / Build and Deploy (push) Failing after 32s Details
2024-05-06 15:10:14 -04:00
Dex fe7bbf995f Fix release & publish
Build KX3DEX.radio / Build and Deploy (push) Failing after 2m13s Details
2024-05-06 14:00:39 -04:00
Dex d44acad05c Update Deployment.
Build KX3DEX.radio / Build and Deploy (push) Failing after 31s Details
2024-05-06 13:54:56 -04:00
Dex 6b0be661bd update release step
Build KX3DEX.radio / Build and Deploy (push) Failing after 2m21s Details
2024-05-06 13:03:39 -04:00
Dex 21ae7fa91c Update Homepage
Build KX3DEX.radio / Build and Deploy (push) Has been cancelled Details
2024-05-05 03:14:09 -04:00
Dex 03d159e358 Fix text.
Build KX3DEX.radio / Build and Deploy (push) Successful in 31m58s Details
2024-05-04 22:41:14 -04:00
Dex d2262d7f2d Next test.
Build KX3DEX.radio / Build and Deploy (push) Failing after 1m31s Details
2024-05-04 22:36:24 -04:00
Dex 874fd6d9c3 remove argocd
Build KX3DEX.radio / Build and Deploy (push) Successful in 29m27s Details
2024-05-04 00:00:20 -04:00
Dex ae27af92a7 Adding ArgoCD
Build KX3DEX.radio / Build and Deploy (push) Failing after 33m13s Details
2024-05-01 03:11:59 -04:00
Dex 9bf6a0e4b5 Update Version
Build KX3DEX.radio / Build and Deploy (push) Successful in 31m32s Details
2024-04-10 22:41:52 -04:00
Dex 1af01fa8a7 add mobile menu and v1 of DexNet
Build KX3DEX.radio / Build and Deploy (push) Successful in 31m18s Details
2024-04-10 22:40:31 -04:00
Dex e0ed17bd66 Merge branch 'master' of https://gitea.simplysyncedllc.com/Dex/kx3dex_radio
Build KX3DEX.radio / Build and Deploy (push) Successful in 30m2s Details
2024-03-31 23:32:13 -04:00
Dex 9e81d7be45 fix spelling 2024-03-31 23:32:04 -04:00
Dex Burgess d675ceb261 Delete bu_Dockerfile
Build KX3DEX.radio / Build and Deploy (push) Successful in 28m18s Details
2024-03-30 06:18:36 +00:00
Dex 8dfe805cef Memory Updates
Build KX3DEX.radio / Build and Deploy (push) Successful in 27m14s Details
2024-03-30 00:41:31 -04:00
Dex 076025f977 Change QEMU
Build KX3DEX.radio / Build and Deploy (push) Has been cancelled Details
2024-03-30 00:04:47 -04:00
Dex 325d736536 just arm
Build KX3DEX.radio / Build and Deploy (push) Failing after 22s Details
2024-03-29 23:54:19 -04:00
Dex bf32f4a33a only arm build
Build KX3DEX.radio / Build and Deploy (push) Failing after 7m37s Details
2024-03-29 23:45:41 -04:00
Dex Burgess f18cee6775 Update .gitea/workflows/merge-master-tag-deploy.yaml
Build KX3DEX.radio / Build and Deploy (push) Failing after 8m49s Details
2024-03-30 00:51:51 +00:00
Dex Burgess 7ad8713fb9 Update .gitea/workflows/merge-master-tag-deploy.yaml
Build KX3DEX.radio / Build and Deploy (push) Failing after 31s Details
2024-03-30 00:49:28 +00:00
Dex 6dcae4ffa8 New approach
Build KX3DEX.radio / Build and Deploy (push) Failing after 8m38s Details
2024-03-29 15:56:37 -04:00
Dex dc90d2ac4d Dockerfile update
Build KX3DEX.radio / Build and Deploy (push) Has started running Details
2024-03-29 15:42:41 -04:00
Dex 2d81c10377 opf
Build KX3DEX.radio / Build and Deploy (push) Failing after 8m16s Details
2024-03-29 14:13:24 -04:00
Dex d3b581574a up
Build KX3DEX.radio / Build and Deploy (push) Failing after 36s Details
2024-03-29 14:11:54 -04:00
Dex bbf7753ad0 another deployment change
Build KX3DEX.radio / Build and Deploy (push) Failing after 15s Details
2024-03-29 14:10:33 -04:00
Dex 889a70fe65 update versions in deploy yaml
Build KX3DEX.radio / Build and Deploy (push) Failing after 24s Details
2024-03-29 12:22:26 -04:00
Dex 5bca013e5a fix format issue
Build KX3DEX.radio / Build and Deploy (push) Failing after 29s Details
2024-03-29 12:09:27 -04:00
Dex 065b364390 Add QEMU and Buildx 2024-03-29 12:06:07 -04:00
Dex d4215470c1 new build 2024-03-29 11:50:03 -04:00
Dex 4f39a6169c New build YAML
Build KX3DEX.radio / Build and Deploy (push) Failing after 22s Details
2024-03-29 11:41:06 -04:00
Dex ec8649d0c6 update docker file
Build KX3DEX.radio / Build and Deploy (push) Failing after 5m26s Details
2024-03-28 17:16:20 -04:00
Dex 6711b3f240 fix url
Build KX3DEX.radio / Build and Deploy (push) Failing after 5m6s Details
2024-03-28 15:48:01 -04:00
Dex 1d54c34812 fix build step
Build KX3DEX.radio / Build and Deploy (push) Failing after 14s Details
2024-03-28 15:46:53 -04:00
Dex 7ec3e0101e fix action file
Build KX3DEX.radio / Build and Deploy (push) Failing after 1m59s Details
2024-03-28 15:41:19 -04:00
Dex 68b0f78cc6 removing tailwind js
Build KX3DEX.radio / Build and Deploy (push) Failing after 1m55s Details
2024-03-28 14:14:16 -04:00
Dex 19934ffecf Fix page
Build KX3DEX.radio / Build and Deploy (push) Failing after 1m7s Details
2024-03-28 13:31:40 -04:00
Dex Burgess 2becf72f39 Update .gitea/workflows/merge-master-tag-deploy.yaml
Build KX3DEX.radio / Build and Deploy (push) Failing after 2m43s Details
2024-03-28 15:38:34 +00:00
Dex Burgess 7eed63fe2c update deploy 2024-03-28 11:17:57 -04:00
Dex Burgess 5b75e1ffd5 Updating versions
Build KX3DEX.radio / Build and Deploy (push) Failing after 50s Details
2024-03-28 01:00:42 -04:00
Dex Burgess 2753b32ca8 Node issue
Build KX3DEX.radio / Build and Deploy (push) Failing after 3m11s Details
2024-03-27 22:04:01 -04:00
Dex Burgess 490e8cf028 update 2024-03-27 16:57:37 -04:00
Dex Burgess 859af681ec update yarn
Build KX3DEX.radio / Build and Deploy (push) Failing after 2m21s Details
2024-03-27 15:28:18 -04:00
Dex Burgess 870e3abcff fix version
Build KX3DEX.radio / Build and Deploy (push) Failing after 2m20s Details
2024-03-27 15:13:59 -04:00
Dex Burgess 540450476a Config update
Build KX3DEX.radio / Build and Deploy (push) Failing after 2m18s Details
2024-03-27 13:18:33 -04:00
Dex Burgess a99fe1489c Update Nextjs config
Build KX3DEX.radio / Build and Deploy (push) Failing after 2m20s Details
2024-03-27 13:10:52 -04:00
Dex Burgess 4f85bc0676 Updated Deploy
Build KX3DEX.radio / Build and Deploy (push) Failing after 2m30s Details
2024-03-27 11:46:56 -04:00
Dex Burgess 8fc8b3722e new deploy
Build KX3DEX.radio / Build and Deploy (push) Has been cancelled Details
2024-03-27 11:12:13 -04:00
Dex Burgess def5f208f8 Dockerfile update
Build KX3DEX.radio / Build and Deploy (push) Successful in 2m32s Details
2024-03-24 14:24:51 -04:00
Dex Burgess 94217e80c8 config and Dockerfile update
Build KX3DEX.radio / Build and Deploy (push) Successful in 2m35s Details
2024-03-24 14:05:19 -04:00
Dex Burgess b1df62636b Updated Dockerfile
Build KX3DEX.radio / Build and Deploy (push) Failing after 3m59s Details
2024-03-24 13:56:03 -04:00
Dex Burgess 6b7a47d2bd Updated Dockerfile
Build KX3DEX.radio / Build and Deploy (push) Failing after 36s Details
2024-03-24 13:48:33 -04:00
Dex Burgess 42062e8d47 Fix Dockerfile
Build KX3DEX.radio / Build and Deploy (push) Successful in 2m23s Details
2024-03-24 03:11:27 -04:00
Dex Burgess 9a9e16cad5 Add Dockerfile
Build KX3DEX.radio / Build and Deploy (push) Failing after 4m31s Details
2024-03-24 03:04:20 -04:00
Dex Burgess 5e97a6f759 Update README.md
Build KX3DEX.radio / Build and Deploy (push) Failing after 16s Details
2024-03-24 06:59:53 +00:00
Dex Burgess 76b12efbbd Updated home page
Build KX3DEX.radio / Build and Deploy (push) Failing after 11s Details
2024-03-24 02:56:41 -04:00
65 changed files with 1764 additions and 283 deletions

View File

@ -11,17 +11,41 @@ jobs:
runs-on: host
steps:
- name: Check out repository code
uses: actions/checkout@v3
uses: actions/checkout@v4
- uses: actions/github-script@v7
id: set-result
with:
script: |
var fs = require("fs")
var content = fs.readFileSync("package.json", { encoding: 'utf8', flag: 'r' })
var pkg = JSON.parse(content)
return pkg.version
result-encoding: string
- name: Get result
run: echo "gitea.simplysyncedllc.com/dex/kx3dex_radio:${{steps.set-result.outputs.result}}"
- name: Install QEMU
run: apt-get update && apt-get install -y qemu-user-static
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '18.20.0'
- name: Create a new release and publish package.
id: release
run: |
CURR_VER="$(cat package.json | jq -r .name)_v$(cat package.json | jq -r .version)"
CURR_NAME="$(cat package.json | jq -r .name) v$(cat package.json | jq -r .version)"
echo "Checking http://gitea.dex/api/v1/repos/${{ gitea.repository }}/releases for name ${CURR_NAME}"
if curl -s -X GET -H "Authorization: token ${{ secrets.action_token }}" http://gitea.dex/api/v1/repos/${{ gitea.repository }}/releases | grep -o "\"name\"\:\"${CURR_NAME}\"" > /dev/null; then
echo "Checking https://gitea.simplysyncedllc.com/api/v1/repos/${{ gitea.repository }}/releases for name ${CURR_NAME}"
if curl -s -X GET -H "Authorization: token ${{ secrets.ACTION_TOKEN }}" https://gitea.simplysyncedllc.com/api/v1/repos/${{ gitea.repository }}/releases | grep -o "\"name\"\:\"${CURR_NAME}\"" > /dev/null; then
echo "Skipping ${{ gitea.job }} since $CURR_NAME already exists";
exit 0
fi
@ -33,9 +57,9 @@ jobs:
echo "Creating ${CURR_VER} release on gitea"
RELEASE_RESULT=$(curl \
-X POST \
-H "Authorization: token ${{ secrets.action_token }}" \
-H "Authorization: token ${{ secrets.ACTION_TOKEN }}" \
-H "Content-Type: application/json" \
http://gitea.dex/api/v1/repos/${{ gitea.repository }}/releases \
https://gitea.simplysyncedllc.com/api/v1/repos/${{ gitea.repository }}/releases \
-d "{\"tag_name\":\"${CURR_VER}\",\"name\":\"${CURR_NAME}\",\"body\":\"Automatic release from gitea :\n\n${{ gitea.event.head_commit.message }}\"}")
@ -44,12 +68,18 @@ jobs:
curl \
-X POST \
-H "Authorization: token ${{ secrets.action_token }}" \
http://gitea.dex/api/v1/repos/${{ gitea.repository }}/releases/$RELEASE_ID/assets
-H "Authorization: token ${{ secrets.ACTION_TOKEN }}" \
-H "Content-Type: application/json" \
https://gitea.simplysyncedllc.com/api/v1/repos/${{ gitea.repository }}/releases/$RELEASE_ID/assets
- name: Build Docker container and put in gitea registry.
run: |
echo "${{ secrets.action_token }}" | docker login gitea.dex -u dex --password-stdin
docker build -t gitea.dex/dex/kx3dex_radio:latest .
docker push gitea.dex/dex/kx3dex_radio:latest
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
file: ./Dockerfile
platforms: |
linux/arm64
push: true
tags: |
gitea.simplysyncedllc.com/dex/kx3dex_radio:latest
gitea.simplysyncedllc.com/dex/kx3dex_radio:${{steps.set-result.outputs.result}}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

44
Dockerfile Normal file
View File

@ -0,0 +1,44 @@
# Install dependencies only when needed
FROM node:18-alpine3.19 AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn config set network-timeout 100000
RUN yarn install
# Rebuild the source code only when needed
FROM node:18-alpine3.19 AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN yarn build
# Production image, copy all the files and run next
FROM node:18-alpine3.19 AS runner
WORKDIR /app
ENV NODE_ENV production
RUN addgroup --system --gid 1001 kx3dex_radio
RUN adduser --system --uid 1001 kx3dex_radio
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=kx3dex_radio:kx3dex_radio /app/.next/standalone ./
COPY --from=builder --chown=kx3dex_radio:kx3dex_radio /app/.next/static ./.next/static
USER kx3dex_radio
EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
CMD ["node", "server.js"]

View File

@ -2,4 +2,4 @@
KX3DEX Radio
Currently has 2 pages. May come back to add blogging.
Currently has 2 pages. May come back to add blogging. MAYBE

View File

@ -1,40 +0,0 @@
"use client"
import * as React from "react"
import { MoonIcon, SunIcon } from "@radix-ui/react-icons"
import { useTheme } from "next-themes"
import { Button } from "@/components/ui/button"
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
export function ModeToggle() {
const { setTheme } = useTheme()
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline" size="icon">
<SunIcon className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
<MoonIcon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
<span className="sr-only">Toggle theme</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem onClick={() => setTheme("light")}>
Light
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("dark")}>
Dark
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("system")}>
System
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
)
}

View File

@ -7,7 +7,7 @@ export default function DexNetPage() {
<div>
<h1 className="text-2xl font-black text-center mb-10">DexNet VHF/UHF Comm Plan Guide</h1>
<p className="text-lg">With the crazyness of the world I thought it would be worth while to have a communications plan for family and close personal friends. There are many out there such as the S2 Underground for HF communications and a net. However, I did not see much in terms of a more localized one. So I set out to do just that. I have attached the file in a PDF format to be printed. The print is designed to be cut out and placed in 4in x 6in laminating pouches. Before laminating the pouches there are sections to be filled out and decided upon by those in your communications group. Personally I used a hold punch in the top left and used a small caribeener to hold them together.</p>
<p className="text-lg">With the crazyness of the world I thought it would be worth while to have a communications plan for family and close personal friends. There are many other guides out there such as the S2 Underground for HF communications and a net. However, I did not see much in terms of a more localized one. So I set out to do just that. I have attached the file in a PDF format to be printed. The print is designed to be cut out and placed in 4in x 6in laminating pouches. Before laminating the pouches there are sections to be filled out and decided upon by those in your communications group. Personally I used a hole punch in the top left and used a small caribeener to hold them together.</p>
<div className="flex align-center justify-center">
<Image
src={dexnet_cover}
@ -19,7 +19,7 @@ export default function DexNetPage() {
/>
</div>
<h2 className="text-xl font-black text-center mt-10">
<Link href="#">Download Here - LINK COMING SOON</Link>
<Link href="KX3DEX_DexNet_v1.pdf">Download Version 1</Link>
</h2>
</div>
)

View File

@ -1,14 +1,7 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
.thumbs .swiper-slide {
opacity: 0.25;
}
.thumbs .swiper-slide-thumb-active {
opacity: 1;
}
@layer base {
:root {
@ -18,8 +11,8 @@
--card-foreground: 240 10% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 240 10% 3.9%;
--primary: 158 58% 67%;
--primary-foreground: 0 0% 0%;
--primary: 240 5.9% 10%;
--primary-foreground: 0 0% 98%;
--secondary: 240 4.8% 95.9%;
--secondary-foreground: 240 5.9% 10%;
--muted: 240 4.8% 95.9%;
@ -30,29 +23,39 @@
--destructive-foreground: 0 0% 98%;
--border: 240 5.9% 90%;
--input: 240 5.9% 90%;
--ring: 142.1 76.2% 36.3%;
--ring: 240 5.9% 10%;
--radius: 0.5rem;
}
.dark {
--background: 20 14.3% 4.1%;
--foreground: 0 0% 95%;
--card: 24 9.8% 10%;
--card-foreground: 0 0% 95%;
--popover: 0 0% 9%;
--popover-foreground: 0 0% 95%;
--primary: 158 58% 67%;
--primary-foreground: 0 0% 0%;
--background: 240 10% 3.9%;
--foreground: 0 0% 98%;
--card: 240 10% 3.9%;
--card-foreground: 0 0% 98%;
--popover: 240 10% 3.9%;
--popover-foreground: 0 0% 98%;
--primary: 0 0% 98%;
--primary-foreground: 240 5.9% 10%;
--secondary: 240 3.7% 15.9%;
--secondary-foreground: 0 0% 98%;
--muted: 0 0% 15%;
--muted: 240 3.7% 15.9%;
--muted-foreground: 240 5% 64.9%;
--accent: 12 6.5% 15.1%;
--accent: 240 3.7% 15.9%;
--accent-foreground: 0 0% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 85.7% 97.3%;
--destructive-foreground: 0 0% 98%;
--border: 240 3.7% 15.9%;
--input: 240 3.7% 15.9%;
--ring: 142.4 71.8% 29.2%;
--ring: 240 4.9% 83.9%;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
}
}

View File

@ -1,11 +1,14 @@
import "./globals.css";
import type { Metadata } from "next";
import Image from 'next/image'
import React from 'react';
import { Inter } from "next/font/google";
import "./globals.css";
import { ThemeProvider } from "./components/theme-provider";
import Header from "@/components/ui/header";
import Footer from "@/components/ui/footer";
import Header from '@/components/header'
import HeaderMobile from '@/components/header-mobile'
import Footer from "@/components/footer";
import MarginWidthWrapper from '@/components/margin-width-wrapper';
import PageWrapper from '@/components/page-wrapper';
const inter = Inter({ subsets: ["latin"] });
@ -36,9 +39,12 @@ export default function RootLayout({
fill
style={{ position: 'absolute' }}
/>
<Header />
<main className="max-w-5xl mx-auto px-4 z-10">{children}</main>
<Footer />
<main className="max-w-5xl mx-auto px-4 z-10">
<Header />
<HeaderMobile />
{children}
<Footer />
</main>
</div>
</ThemeProvider>
</body>

View File

@ -1,10 +1,16 @@
import { Button } from "@/components/ui/button";
export default async function Home() {
return (
<div className="grid grid-cols-1 md:grid-cols-1 mt-5 gap-5">
This is my little corner of the internet to share my radio projects on things I&apos;m doing. Things I find and build that seem to not be documented anywhere.
<div>
<div className="grid grid-cols-1 md:grid-cols-1 mt-5 gap-5">
This is my little corner of the internet to share my radio projects on things I&apos;m doing. Things I find and build that seem to not be documented anywhere. I have created pages for some of the projects I have done such as a communcations plan template. Also my go kit builds.
</div>
<div className="grid grid-cols-1 md:grid-cols-1 mt-5 gap-5">
if there is anything you have for suggestions on projects you&apos;d like to see a writeup on email me at bluebulletrl@gmail.com. Still need to setup email for this domain.
</div>
<div className="grid grid-cols-1 md:grid-cols-1 mt-5 gap-5">
Coming soon will be an updated DexNet guide that will include Meshtastic Information. New document will be uploaded End of August.
</div>
</div>
);
}

View File

@ -41,13 +41,13 @@ export default function GoKitPage() {
<h2 className="text-xl font-black mt-10">Current List of parts:</h2>
<ul className="list-disc list-inside">
<li>4U, 13in Gator Case - https://gatorco.com/product/4u-13-deep-molded-audio-rack-g-pro-4u-13/</li>
<li>4U, 13 in Gator Case - https://gatorco.com/product/4u-13-deep-molded-audio-rack-g-pro-4u-13/</li>
<li>2 2U rack shelves</li>
<li>Custom 3D printed 2U Rack Panel</li>
<li>2.5in 8W Speakers</li>
<li>2.5 in 8W Speakers</li>
<li>2 LED Lights</li>
<li>uBITX v6 HF Radio - https://www.hfsignals.com/index.php/ubitx-v6/</li>
<li>Mini PC running off 12volts running Arch Linux</li>
<li>Mini PC running off 12 volts running Arch Linux</li>
<li>AARL End-Fed Half-Wave Antenna - https://www.arrl.org/end-fed-half-wave-antenna-kit</li>
</ul>
</div>

118
components/drawer.tsx Normal file
View File

@ -0,0 +1,118 @@
"use client"
import * as React from "react"
import { Drawer as DrawerPrimitive } from "vaul"
import { cn } from "@/lib/utils"
const Drawer = ({
shouldScaleBackground = true,
...props
}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (
<DrawerPrimitive.Root
shouldScaleBackground={shouldScaleBackground}
{...props}
/>
)
Drawer.displayName = "Drawer"
const DrawerTrigger = DrawerPrimitive.Trigger
const DrawerPortal = DrawerPrimitive.Portal
const DrawerClose = DrawerPrimitive.Close
const DrawerOverlay = React.forwardRef<
React.ElementRef<typeof DrawerPrimitive.Overlay>,
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>
>(({ className, ...props }, ref) => (
<DrawerPrimitive.Overlay
ref={ref}
className={cn("fixed inset-0 z-50 bg-black/80", className)}
{...props}
/>
))
DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName
const DrawerContent = React.forwardRef<
React.ElementRef<typeof DrawerPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>
>(({ className, children, ...props }, ref) => (
<DrawerPortal>
<DrawerOverlay />
<DrawerPrimitive.Content
ref={ref}
className={cn(
"fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background",
className
)}
{...props}
>
<div className="mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" />
{children}
</DrawerPrimitive.Content>
</DrawerPortal>
))
DrawerContent.displayName = "DrawerContent"
const DrawerHeader = ({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) => (
<div
className={cn("grid gap-1.5 p-4 text-center sm:text-left", className)}
{...props}
/>
)
DrawerHeader.displayName = "DrawerHeader"
const DrawerFooter = ({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) => (
<div
className={cn("mt-auto flex flex-col gap-2 p-4", className)}
{...props}
/>
)
DrawerFooter.displayName = "DrawerFooter"
const DrawerTitle = React.forwardRef<
React.ElementRef<typeof DrawerPrimitive.Title>,
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>
>(({ className, ...props }, ref) => (
<DrawerPrimitive.Title
ref={ref}
className={cn(
"text-lg font-semibold leading-none tracking-tight",
className
)}
{...props}
/>
))
DrawerTitle.displayName = DrawerPrimitive.Title.displayName
const DrawerDescription = React.forwardRef<
React.ElementRef<typeof DrawerPrimitive.Description>,
React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>
>(({ className, ...props }, ref) => (
<DrawerPrimitive.Description
ref={ref}
className={cn("text-sm text-muted-foreground", className)}
{...props}
/>
))
DrawerDescription.displayName = DrawerPrimitive.Description.displayName
export {
Drawer,
DrawerPortal,
DrawerOverlay,
DrawerTrigger,
DrawerClose,
DrawerContent,
DrawerHeader,
DrawerFooter,
DrawerTitle,
DrawerDescription,
}

View File

@ -0,0 +1,240 @@
'use client';
import React, { ReactNode, useEffect, useRef, useState } from 'react';
import Link from 'next/link';
import { usePathname } from 'next/navigation';
import { NAV_ITEMS } from '@/components/nav';
import { NavItem } from '@/components/types';
import { Icon } from '@iconify/react';
import { motion, useCycle } from 'framer-motion';
type MenuItemWithSubMenuProps = {
item: NavItem;
toggleOpen: () => void;
};
const sidebar = {
open: (height = 1000) => ({
clipPath: `circle(${height * 2 + 200}px at 100% 0)`,
transition: {
type: 'spring',
stiffness: 20,
restDelta: 2,
},
}),
closed: {
clipPath: 'circle(0px at 100% 0)',
transition: {
type: 'spring',
stiffness: 400,
damping: 40,
},
},
};
const HeaderMobile = () => {
const pathname = usePathname();
const containerRef = useRef(null);
const { height } = useDimensions(containerRef);
const [isOpen, toggleOpen] = useCycle(false, true);
return (
<motion.nav
initial={false}
animate={isOpen ? 'open' : 'closed'}
custom={height}
className={`fixed inset-0 z-50 w-full md:hidden ${
isOpen ? '' : 'pointer-events-none'
}`}
ref={containerRef}
>
<motion.div
className="absolute inset-0 right-0 w-full bg-black"
variants={sidebar}
/>
<motion.ul
variants={variants}
className="absolute grid w-full gap-3 px-10 py-16 max-h-screen overflow-y-auto"
>
{NAV_ITEMS.map((item, idx) => {
const isLastItem = idx === NAV_ITEMS.length - 1; // Check if it's the last item
return (
<div key={idx}>
{item.submenu ? (
<MenuItemWithSubMenu item={item} toggleOpen={toggleOpen} />
) : (
<MenuItem>
<Link
href={item.path}
onClick={() => toggleOpen()}
className={`flex w-full text-2xl ${
item.path === pathname ? 'font-bold' : ''
}`}
>
{item.title}
</Link>
</MenuItem>
)}
{!isLastItem && (
<MenuItem className="my-3 h-px w-full bg-gray-300" />
)}
</div>
);
})}
</motion.ul>
<MenuToggle toggle={toggleOpen} />
</motion.nav>
);
};
export default HeaderMobile;
const MenuToggle = ({ toggle }: { toggle: any }) => (
<button
onClick={toggle}
className="pointer-events-auto absolute right-4 top-[14px] z-30 p-7"
>
<svg width="60" height="60" viewBox="0 0 23 23">
<Path
variants={{
closed: { d: 'M 2 2.5 L 20 2.5' },
open: { d: 'M 3 16.5 L 17 2.5' },
}}
/>
<Path
d="M 2 9.423 L 20 9.423"
variants={{
closed: { opacity: 1 },
open: { opacity: 0 },
}}
transition={{ duration: 0.1 }}
/>
<Path
variants={{
closed: { d: 'M 2 16.346 L 20 16.346' },
open: { d: 'M 3 2.5 L 17 16.346' },
}}
/>
</svg>
</button>
);
const Path = (props: any) => (
<motion.path
fill="transparent"
strokeWidth="2"
stroke="hsl(0, 0%, 100%)"
strokeLinecap="round"
{...props}
/>
);
const MenuItem = ({
className,
children,
}: {
className?: string;
children?: ReactNode;
}) => {
return (
<motion.li variants={MenuItemVariants} className={className}>
{children}
</motion.li>
);
};
const MenuItemWithSubMenu: React.FC<MenuItemWithSubMenuProps> = ({
item,
toggleOpen,
}) => {
const pathname = usePathname();
const [subMenuOpen, setSubMenuOpen] = useState(false);
return (
<>
<MenuItem>
<button
className="flex w-full text-2xl"
onClick={() => setSubMenuOpen(!subMenuOpen)}
>
<div className="flex flex-row justify-between w-full items-center">
<span
className={`${pathname.includes(item.path) ? 'font-bold' : ''}`}
>
{item.title}
</span>
<div className={`${subMenuOpen && 'rotate-180'}`}>
<Icon icon="lucide:chevron-down" width="24" height="24" />
</div>
</div>
</button>
</MenuItem>
<div className="mt-2 ml-2 flex flex-col space-y-2">
{subMenuOpen && (
<>
{item.subMenuItems?.map((subItem, subIdx) => {
return (
<MenuItem key={subIdx}>
<Link
href={subItem.path}
onClick={() => toggleOpen()}
className={` ${
subItem.path === pathname ? 'font-bold' : ''
}`}
>
{subItem.title}
</Link>
</MenuItem>
);
})}
</>
)}
</div>
</>
);
};
const MenuItemVariants = {
open: {
y: 0,
opacity: 1,
transition: {
y: { stiffness: 1000, velocity: -100 },
},
},
closed: {
y: 50,
opacity: 0,
transition: {
y: { stiffness: 1000 },
duration: 0.02,
},
},
};
const variants = {
open: {
transition: { staggerChildren: 0.02, delayChildren: 0.15 },
},
closed: {
transition: { staggerChildren: 0.01, staggerDirection: -1 },
},
};
const useDimensions = (ref: any) => {
const dimensions = useRef({ width: 0, height: 0 });
useEffect(() => {
if (ref.current) {
dimensions.current.width = ref.current.offsetWidth;
dimensions.current.height = ref.current.offsetHeight;
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [ref]);
return dimensions.current;
};

65
components/header.tsx Normal file
View File

@ -0,0 +1,65 @@
'use client';
import React from 'react';
import Image from 'next/image';
import { useSelectedLayoutSegment } from 'next/navigation';
import logo from '@/public/images/kx3dex_radio_logo.png'
import useScroll from '@/hooks/use-scroll';
import { cn } from '@/lib/utils';
import {
NavigationMenu,
NavigationMenuContent,
NavigationMenuItem,
NavigationMenuLink,
NavigationMenuList,
NavigationMenuTrigger,
} from "@/components/navigation-menu"
const Header = () => {
const scrolled = useScroll(5);
const selectedLayout = useSelectedLayoutSegment();
return (
<div
className={cn(
`sticky inset-x-0 top-0 z-30 w-full transition-all border-b border-gray-200`,
{
'border-b border-gray-200 backdrop-blur-lg': scrolled,
'border-b border-gray-200 mb-5': selectedLayout,
},
)}
>
<div className="flex items-center justify-between p-4">
<div className="flex items-center space-x-4">
<Image
src={logo}
width={100}
height={100}
alt="Logo Image"
priority
className="rounded-lg border"
/>
</div>
<div className="hidden md:block">
<NavigationMenu>
<NavigationMenuLink href="/" className="font-bold text-3xl pr-5">Home</NavigationMenuLink>
<NavigationMenuLink href="/dexnet" className="font-bold text-3xl pr-5">DexNet</NavigationMenuLink>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger className="font-bold text-3xl pr-5">Go Kits</NavigationMenuTrigger>
<NavigationMenuContent className="flex flex-col min-w-[300px] p-2 absolute right-0">
<NavigationMenuLink href="/projects/go-kit-command-center" className="font-bold">Go Kit (Command Center)</NavigationMenuLink>
</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
</div>
</div>
</div>
);
};
export default Header;

View File

@ -0,0 +1,13 @@
import { ReactNode } from 'react';
export default function MarginWidthWrapper({
children,
}: {
children: ReactNode;
}) {
return (
<div className="flex flex-col md:ml-60 sm:border-r sm:border-zinc-700 min-h-screen">
{children}
</div>
);
}

22
components/nav.tsx Normal file
View File

@ -0,0 +1,22 @@
import { Icon } from '@iconify/react';
import { NavItem } from '@/components/types';
export const NAV_ITEMS: NavItem[] = [
{
title: 'Home',
path: '/',
},
{
title: 'DexNet',
path: '/dexnet',
},
{
title: 'Go Kits',
path: '',
submenu: true,
subMenuItems: [
{ title: 'Go Kit Command Center', path: '/projects/go-kit-command-center' },
],
}
];

View File

@ -41,7 +41,7 @@ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName
const NavigationMenuItem = NavigationMenuPrimitive.Item
const navigationMenuTriggerStyle = cva(
"group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50"
"group inline-flex h-10 w-max items-center justify-center rounded-md yarnpy-2 text-sm font-medium transition-colors focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50"
)
const NavigationMenuTrigger = React.forwardRef<
@ -83,10 +83,10 @@ const NavigationMenuViewport = React.forwardRef<
React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,
React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>
>(({ className, ...props }, ref) => (
<div className={cn("absolute left-0 top-full flex justify-center")}>
<div className={cn("absolute right-0 top-full flex ")}>
<NavigationMenuPrimitive.Viewport
className={cn(
"origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
"origin-top-left relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
className
)}
ref={ref}

View File

@ -0,0 +1,9 @@
import { ReactNode } from 'react';
export default function PageWrapper({ children }: { children: ReactNode }) {
return (
<div className="flex flex-col pt-2 px-4 space-y-2 bg-zinc-100 flex-grow pb-4">
{children}
</div>
);
}

7
components/types.tsx Normal file
View File

@ -0,0 +1,7 @@
export type NavItem = {
title: string;
path: string;
icon?: JSX.Element;
submenu?: boolean;
subMenuItems?: NavItem[];
};

View File

@ -1,47 +0,0 @@
'use client'
import Link from 'next/link'
import Image from 'next/image'
import logo from '@/public/images/kx3dex_radio_logo.png'
import {
NavigationMenu,
NavigationMenuContent,
NavigationMenuItem,
NavigationMenuLink,
NavigationMenuList,
NavigationMenuTrigger,
} from "@/components/ui/navigation-menu"
export default function Header() {
return (
<nav className="w-full relative flex items-center max-w-5xl mx-auto px-4 py-5">
<Image
src={logo}
width={100}
height={100}
alt="Logo Image"
priority
className="rounded-lg border"
/>
<Link href="/" className="font-bold text-3xl pl-10 pr-5">
Home
</Link>
<Link href="/dexnet" className="font-bold text-3xl ">
DexNet
</Link>
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem>
<NavigationMenuTrigger className="font-bold text-3xl pr-5">Go Kits</NavigationMenuTrigger>
<NavigationMenuContent className="flex flex-col min-w-[300px] p-2">
<NavigationMenuLink href="/projects/go-kit-command-center" className="font-bold">Go Kit (Command Center)</NavigationMenuLink>
</NavigationMenuContent>
</NavigationMenuItem>
</NavigationMenuList>
</NavigationMenu>
</nav>
)
}

21
hooks/use-scroll.tsx Normal file
View File

@ -0,0 +1,21 @@
import { useCallback, useEffect, useState } from 'react';
export default function useScroll(threshold: number) {
const [scrolled, setScrolled] = useState(false);
const onScroll = useCallback(() => {
setScrolled(window.scrollY > threshold);
}, [threshold]);
useEffect(() => {
window.addEventListener('scroll', onScroll);
return () => window.removeEventListener('scroll', onScroll);
}, [onScroll]);
// also check on first load
useEffect(() => {
onScroll();
}, [onScroll]);
return scrolled;
}

6
next.config.js Normal file
View File

@ -0,0 +1,6 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'standalone'
}
module.exports = nextConfig

View File

@ -1,4 +0,0 @@
/** @type {import('next').NextConfig} */
const nextConfig = {};
export default nextConfig;

707
package-lock.json generated
View File

@ -1,27 +1,32 @@
{
"name": "kx3dex_radio",
"version": "0.1.0",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "kx3dex_radio",
"version": "0.1.0",
"version": "1.0.0",
"dependencies": {
"@iconify/react": "^4.1.1",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-navigation-menu": "^1.1.4",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"framer-motion": "^11.0.27",
"lucide-react": "^0.363.0",
"next": "14.1.4",
"next-themes": "^0.3.0",
"node": "^21.7.1",
"react": "^18",
"react-dom": "^18",
"swiper": "^11.0.7",
"react-icons": "^5.0.1",
"sharp": "^0.33.3",
"swiper": "^11.1.0",
"tailwind-merge": "^2.2.2",
"tailwindcss-animate": "^1.0.7"
"tailwindcss-animate": "^1.0.7",
"vaul": "^0.9.0"
},
"devDependencies": {
"@types/node": "^20",
@ -66,6 +71,15 @@
"node": ">=6.9.0"
}
},
"node_modules/@emnapi/runtime": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.0.tgz",
"integrity": "sha512-gCGlE0fJGWalfy+wbFApjhKn6uoSVvopru77IPyxNKkjkaiSx2HxDS7eOYSmo9dcMIhmmIvoxiC3N9TM1c3EaA==",
"optional": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@ -189,6 +203,456 @@
"integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
"dev": true
},
"node_modules/@iconify/react": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@iconify/react/-/react-4.1.1.tgz",
"integrity": "sha512-jed14EjvKjee8mc0eoscGxlg7mSQRkwQG3iX3cPBCO7UlOjz0DtlvTqxqEcHUJGh+z1VJ31Yhu5B9PxfO0zbdg==",
"dependencies": {
"@iconify/types": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/cyberalien"
},
"peerDependencies": {
"react": ">=16"
}
},
"node_modules/@iconify/types": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
"integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="
},
"node_modules/@img/sharp-darwin-arm64": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.3.tgz",
"integrity": "sha512-FaNiGX1MrOuJ3hxuNzWgsT/mg5OHG/Izh59WW2mk1UwYHUwtfbhk5QNKYZgxf0pLOhx9ctGiGa2OykD71vOnSw==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"darwin"
],
"engines": {
"glibc": ">=2.26",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-darwin-arm64": "1.0.2"
}
},
"node_modules/@img/sharp-darwin-x64": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.3.tgz",
"integrity": "sha512-2QeSl7QDK9ru//YBT4sQkoq7L0EAJZA3rtV+v9p8xTKl4U1bUqTIaCnoC7Ctx2kCjQgwFXDasOtPTCT8eCTXvw==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"darwin"
],
"engines": {
"glibc": ">=2.26",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-darwin-x64": "1.0.2"
}
},
"node_modules/@img/sharp-libvips-darwin-arm64": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz",
"integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"darwin"
],
"engines": {
"macos": ">=11",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-darwin-x64": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz",
"integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"darwin"
],
"engines": {
"macos": ">=10.13",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-arm": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz",
"integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==",
"cpu": [
"arm"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"glibc": ">=2.28",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-arm64": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz",
"integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"glibc": ">=2.26",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-s390x": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz",
"integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==",
"cpu": [
"s390x"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"glibc": ">=2.28",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linux-x64": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz",
"integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"glibc": ">=2.26",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linuxmusl-arm64": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz",
"integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"musl": ">=1.2.2",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-linuxmusl-x64": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz",
"integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"musl": ">=1.2.2",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-linux-arm": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.3.tgz",
"integrity": "sha512-Q7Ee3fFSC9P7vUSqVEF0zccJsZ8GiiCJYGWDdhEjdlOeS9/jdkyJ6sUSPj+bL8VuOYFSbofrW0t/86ceVhx32w==",
"cpu": [
"arm"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"glibc": ">=2.28",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-arm": "1.0.2"
}
},
"node_modules/@img/sharp-linux-arm64": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.3.tgz",
"integrity": "sha512-Zf+sF1jHZJKA6Gor9hoYG2ljr4wo9cY4twaxgFDvlG0Xz9V7sinsPp8pFd1XtlhTzYo0IhDbl3rK7P6MzHpnYA==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"glibc": ">=2.26",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-arm64": "1.0.2"
}
},
"node_modules/@img/sharp-linux-s390x": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.3.tgz",
"integrity": "sha512-vFk441DKRFepjhTEH20oBlFrHcLjPfI8B0pMIxGm3+yilKyYeHEVvrZhYFdqIseSclIqbQ3SnZMwEMWonY5XFA==",
"cpu": [
"s390x"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"glibc": ">=2.28",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-s390x": "1.0.2"
}
},
"node_modules/@img/sharp-linux-x64": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.3.tgz",
"integrity": "sha512-Q4I++herIJxJi+qmbySd072oDPRkCg/SClLEIDh5IL9h1zjhqjv82H0Seupd+q2m0yOfD+/fJnjSoDFtKiHu2g==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"glibc": ">=2.26",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linux-x64": "1.0.2"
}
},
"node_modules/@img/sharp-linuxmusl-arm64": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.3.tgz",
"integrity": "sha512-qnDccehRDXadhM9PM5hLvcPRYqyFCBN31kq+ErBSZtZlsAc1U4Z85xf/RXv1qolkdu+ibw64fUDaRdktxTNP9A==",
"cpu": [
"arm64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"musl": ">=1.2.2",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linuxmusl-arm64": "1.0.2"
}
},
"node_modules/@img/sharp-linuxmusl-x64": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.3.tgz",
"integrity": "sha512-Jhchim8kHWIU/GZ+9poHMWRcefeaxFIs9EBqf9KtcC14Ojk6qua7ghKiPs0sbeLbLj/2IGBtDcxHyjCdYWkk2w==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"linux"
],
"engines": {
"musl": ">=1.2.2",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-libvips-linuxmusl-x64": "1.0.2"
}
},
"node_modules/@img/sharp-wasm32": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.3.tgz",
"integrity": "sha512-68zivsdJ0koE96stdUfM+gmyaK/NcoSZK5dV5CAjES0FUXS9lchYt8LAB5rTbM7nlWtxaU/2GON0HVN6/ZYJAQ==",
"cpu": [
"wasm32"
],
"optional": true,
"dependencies": {
"@emnapi/runtime": "^1.1.0"
},
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-ia32": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.3.tgz",
"integrity": "sha512-CyimAduT2whQD8ER4Ux7exKrtfoaUiVr7HG0zZvO0XTFn2idUWljjxv58GxNTkFb8/J9Ub9AqITGkJD6ZginxQ==",
"cpu": [
"ia32"
],
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-x64": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.3.tgz",
"integrity": "sha512-viT4fUIDKnli3IfOephGnolMzhz5VaTvDRkYqtZxOMIoMQ4MrAziO7pT1nVnOt2FAm7qW5aa+CCc13aEY6Le0g==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"win32"
],
"engines": {
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0",
"yarn": ">=3.2.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@ -554,6 +1018,42 @@
}
}
},
"node_modules/@radix-ui/react-dialog": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz",
"integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==",
"dependencies": {
"@babel/runtime": "^7.13.10",
"@radix-ui/primitive": "1.0.1",
"@radix-ui/react-compose-refs": "1.0.1",
"@radix-ui/react-context": "1.0.1",
"@radix-ui/react-dismissable-layer": "1.0.5",
"@radix-ui/react-focus-guards": "1.0.1",
"@radix-ui/react-focus-scope": "1.0.4",
"@radix-ui/react-id": "1.0.1",
"@radix-ui/react-portal": "1.0.4",
"@radix-ui/react-presence": "1.0.1",
"@radix-ui/react-primitive": "1.0.3",
"@radix-ui/react-slot": "1.0.2",
"@radix-ui/react-use-controllable-state": "1.0.1",
"aria-hidden": "^1.1.1",
"react-remove-scroll": "2.5.5"
},
"peerDependencies": {
"@types/react": "*",
"@types/react-dom": "*",
"react": "^16.8 || ^17.0 || ^18.0",
"react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
},
"@types/react-dom": {
"optional": true
}
}
},
"node_modules/@radix-ui/react-direction": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz",
@ -1077,9 +1577,9 @@
}
},
"node_modules/@rushstack/eslint-patch": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.8.0.tgz",
"integrity": "sha512-0HejFckBN2W+ucM6cUOlwsByTKt9/+0tWhqUffNIcHqCXkthY/mZ7AuYPK/2IIaGWhdl0h+tICDO0ssLMd6XMQ==",
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.9.0.tgz",
"integrity": "sha512-AAWymnpvHbGty1BmgbdfbqQDboXs6xN6h2yAacO4yKVyyUUBnpYkp+P9jjPrV9zrAGw7JVVriRtGOHPInnfjZQ==",
"dev": true
},
"node_modules/@swc/helpers": {
@ -1112,13 +1612,12 @@
"devOptional": true
},
"node_modules/@types/react": {
"version": "18.2.69",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.69.tgz",
"integrity": "sha512-W1HOMUWY/1Yyw0ba5TkCV+oqynRjG7BnteBB+B7JmAK7iw3l2SW+VGOxL+akPweix6jk2NNJtyJKpn4TkpfK3Q==",
"version": "18.2.73",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.73.tgz",
"integrity": "sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==",
"devOptional": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
@ -1131,12 +1630,6 @@
"@types/react": "*"
}
},
"node_modules/@types/scheduler": {
"version": "0.16.8",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
"integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
"devOptional": true
},
"node_modules/@typescript-eslint/parser": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz",
@ -1838,6 +2331,18 @@
"node": ">=6"
}
},
"node_modules/color": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
"dependencies": {
"color-convert": "^2.0.1",
"color-string": "^1.9.0"
},
"engines": {
"node": ">=12.5.0"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@ -1854,6 +2359,15 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/color-string": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
"dependencies": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
}
},
"node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@ -2021,6 +2535,14 @@
"node": ">=6"
}
},
"node_modules/detect-libc": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
"engines": {
"node": ">=8"
}
},
"node_modules/detect-node-es": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
@ -2066,9 +2588,9 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/electron-to-chromium": {
"version": "1.4.715",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz",
"integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==",
"version": "1.4.719",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.719.tgz",
"integrity": "sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q==",
"dev": true
},
"node_modules/emoji-regex": {
@ -2828,6 +3350,30 @@
"url": "https://github.com/sponsors/rawify"
}
},
"node_modules/framer-motion": {
"version": "11.0.27",
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.0.27.tgz",
"integrity": "sha512-OmY1hnBXxUfvQTuoPqumAiXYPEt8jY31Fqbmihf/NR29XUL9BkRPHrqVqtJS7TLKriwRt+0pbwiO9tnziZTJzA==",
"dependencies": {
"tslib": "^2.4.0"
},
"peerDependencies": {
"@emotion/is-prop-valid": "*",
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
"peerDependenciesMeta": {
"@emotion/is-prop-valid": {
"optional": true
},
"react": {
"optional": true
},
"react-dom": {
"optional": true
}
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -3233,6 +3779,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-arrayish": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
},
"node_modules/is-async-function": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
@ -3959,26 +4510,6 @@
"node": "^10 || ^12 || >=14"
}
},
"node_modules/node": {
"version": "21.7.1",
"resolved": "https://registry.npmjs.org/node/-/node-21.7.1.tgz",
"integrity": "sha512-j6NFfbKy3DBuaJh2X8lRZmS59oLr2XRtt0rTa9VsFj3ZcGbeK7xp40gZaI92AqNuRv1aL5dRueNqL6YuZFcjJg==",
"hasInstallScript": true,
"dependencies": {
"node-bin-setup": "^1.0.0"
},
"bin": {
"node": "bin/node"
},
"engines": {
"npm": ">=5.0.0"
}
},
"node_modules/node-bin-setup": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.1.3.tgz",
"integrity": "sha512-opgw9iSCAzT2+6wJOETCpeRYAQxSopqQ2z+N6BXwIMsQQ7Zj5M8MaafQY8JMlolRR6R1UXg2WmhKp0p9lSOivg=="
},
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
@ -4234,11 +4765,11 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-scurry": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
"integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz",
"integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==",
"dependencies": {
"lru-cache": "^9.1.1 || ^10.0.0",
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
@ -4510,6 +5041,14 @@
"react": "^18.2.0"
}
},
"node_modules/react-icons": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz",
"integrity": "sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==",
"peerDependencies": {
"react": "*"
}
},
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@ -4793,7 +5332,6 @@
"version": "7.6.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@ -4808,7 +5346,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
@ -4848,6 +5385,45 @@
"node": ">= 0.4"
}
},
"node_modules/sharp": {
"version": "0.33.3",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.3.tgz",
"integrity": "sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==",
"hasInstallScript": true,
"dependencies": {
"color": "^4.2.3",
"detect-libc": "^2.0.3",
"semver": "^7.6.0"
},
"engines": {
"libvips": ">=8.15.2",
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
"@img/sharp-darwin-arm64": "0.33.3",
"@img/sharp-darwin-x64": "0.33.3",
"@img/sharp-libvips-darwin-arm64": "1.0.2",
"@img/sharp-libvips-darwin-x64": "1.0.2",
"@img/sharp-libvips-linux-arm": "1.0.2",
"@img/sharp-libvips-linux-arm64": "1.0.2",
"@img/sharp-libvips-linux-s390x": "1.0.2",
"@img/sharp-libvips-linux-x64": "1.0.2",
"@img/sharp-libvips-linuxmusl-arm64": "1.0.2",
"@img/sharp-libvips-linuxmusl-x64": "1.0.2",
"@img/sharp-linux-arm": "0.33.3",
"@img/sharp-linux-arm64": "0.33.3",
"@img/sharp-linux-s390x": "0.33.3",
"@img/sharp-linux-x64": "0.33.3",
"@img/sharp-linuxmusl-arm64": "0.33.3",
"@img/sharp-linuxmusl-x64": "0.33.3",
"@img/sharp-wasm32": "0.33.3",
"@img/sharp-win32-ia32": "0.33.3",
"@img/sharp-win32-x64": "0.33.3"
}
},
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@ -4896,6 +5472,14 @@
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
"dependencies": {
"is-arrayish": "^0.3.1"
}
},
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@ -5167,9 +5751,9 @@
}
},
"node_modules/swiper": {
"version": "11.0.7",
"resolved": "https://registry.npmjs.org/swiper/-/swiper-11.0.7.tgz",
"integrity": "sha512-cDfglW1B6uSmB6eB6pNmzDTNLmZtu5bWWa1vak0RU7fOI9qHjMzl7gVBvYSl34b0RU2N11HxxETJqQ5LeqI1cA==",
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.0.tgz",
"integrity": "sha512-Pm78CgU7Wvg+w/MgIL/1NwMSLgx0XqFof25EnVyX8iZFCYJv5CppH7LHkBj43qW2k5Cp3Iz7FcdBxrox7XX2AQ==",
"funding": [
{
"type": "patreon",
@ -5197,9 +5781,9 @@
}
},
"node_modules/tailwindcss": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz",
"integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==",
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz",
"integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@ -5209,7 +5793,7 @@
"fast-glob": "^3.3.0",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"jiti": "^1.19.1",
"jiti": "^1.21.0",
"lilconfig": "^2.1.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
@ -5535,6 +6119,18 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/vaul": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/vaul/-/vaul-0.9.0.tgz",
"integrity": "sha512-bZSySGbAHiTXmZychprnX/dE0EsSige88xtyyL3/MCRbrFotRPQZo7UdydGXZWw+CKbNOw5Ow8gwAo93/nB/Cg==",
"dependencies": {
"@radix-ui/react-dialog": "^1.0.4"
},
"peerDependencies": {
"react": "^16.8 || ^17.0 || ^18.0",
"react-dom": "^16.8 || ^17.0 || ^18.0"
}
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@ -5724,8 +6320,7 @@
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/yaml": {
"version": "2.4.1",

View File

@ -1,6 +1,6 @@
{
"name": "kx3dex_radio",
"version": "0.1.0",
"version": "1.3.5",
"private": true,
"scripts": {
"dev": "next dev",
@ -9,20 +9,25 @@
"lint": "next lint"
},
"dependencies": {
"@iconify/react": "^4.1.1",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-navigation-menu": "^1.1.4",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"framer-motion": "^11.0.27",
"lucide-react": "^0.363.0",
"next": "14.1.4",
"next-themes": "^0.3.0",
"node": "^21.7.1",
"react": "^18",
"react-dom": "^18",
"swiper": "^11.0.7",
"react-icons": "^5.0.1",
"sharp": "^0.33.3",
"swiper": "^11.1.0",
"tailwind-merge": "^2.2.2",
"tailwindcss-animate": "^1.0.7"
"tailwindcss-animate": "^1.0.7",
"vaul": "^0.9.0"
},
"devDependencies": {
"@types/node": "^20",

BIN
public/KX3DEX_DexNet_v1.pdf Normal file

Binary file not shown.

534
yarn.lock
View File

@ -28,6 +28,15 @@ __metadata:
languageName: node
linkType: hard
"@emnapi/runtime@npm:^1.1.0":
version: 1.1.1
resolution: "@emnapi/runtime@npm:1.1.1"
dependencies:
tslib: ^2.4.0
checksum: db5ec075a8fa71d7dbbba8592c8edfed073dfe5181a87bde56f92693985c548be5be3a66c6bd656e41b7f23d0af20d59e55684a81aecc5d2977f74ed24cbe3fe
languageName: node
linkType: hard
"@eslint-community/eslint-utils@npm:^4.2.0":
version: 4.4.0
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
@ -133,6 +142,199 @@ __metadata:
languageName: node
linkType: hard
"@iconify/react@npm:^4.1.1":
version: 4.1.1
resolution: "@iconify/react@npm:4.1.1"
dependencies:
"@iconify/types": ^2.0.0
peerDependencies:
react: ">=16"
checksum: 43b71a0eb4312cf0fa7412b568369e75b8a327b8b7d9fc3dce42b2d047326e39dd17541a8d915fb80b87b20a56eba1a9b52304410624b5814fdf3ad17da9196a
languageName: node
linkType: hard
"@iconify/types@npm:^2.0.0":
version: 2.0.0
resolution: "@iconify/types@npm:2.0.0"
checksum: 029f58542c160e9d4a746869cf2e475b603424d3adf3994c5cc8d0406c47e6e04a3b898b2707840c1c5b9bd5563a1660a34b110d89fce43923baca5222f4e597
languageName: node
linkType: hard
"@img/sharp-darwin-arm64@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-darwin-arm64@npm:0.33.3"
dependencies:
"@img/sharp-libvips-darwin-arm64": 1.0.2
dependenciesMeta:
"@img/sharp-libvips-darwin-arm64":
optional: true
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@img/sharp-darwin-x64@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-darwin-x64@npm:0.33.3"
dependencies:
"@img/sharp-libvips-darwin-x64": 1.0.2
dependenciesMeta:
"@img/sharp-libvips-darwin-x64":
optional: true
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@img/sharp-libvips-darwin-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.2"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@img/sharp-libvips-darwin-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.2"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@img/sharp-libvips-linux-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.2"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@img/sharp-libvips-linux-arm@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-arm@npm:1.0.2"
conditions: os=linux & cpu=arm & libc=glibc
languageName: node
linkType: hard
"@img/sharp-libvips-linux-s390x@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.2"
conditions: os=linux & cpu=s390x & libc=glibc
languageName: node
linkType: hard
"@img/sharp-libvips-linux-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linux-x64@npm:1.0.2"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.2"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@img/sharp-libvips-linuxmusl-x64@npm:1.0.2":
version: 1.0.2
resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.2"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@img/sharp-linux-arm64@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-linux-arm64@npm:0.33.3"
dependencies:
"@img/sharp-libvips-linux-arm64": 1.0.2
dependenciesMeta:
"@img/sharp-libvips-linux-arm64":
optional: true
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@img/sharp-linux-arm@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-linux-arm@npm:0.33.3"
dependencies:
"@img/sharp-libvips-linux-arm": 1.0.2
dependenciesMeta:
"@img/sharp-libvips-linux-arm":
optional: true
conditions: os=linux & cpu=arm & libc=glibc
languageName: node
linkType: hard
"@img/sharp-linux-s390x@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-linux-s390x@npm:0.33.3"
dependencies:
"@img/sharp-libvips-linux-s390x": 1.0.2
dependenciesMeta:
"@img/sharp-libvips-linux-s390x":
optional: true
conditions: os=linux & cpu=s390x & libc=glibc
languageName: node
linkType: hard
"@img/sharp-linux-x64@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-linux-x64@npm:0.33.3"
dependencies:
"@img/sharp-libvips-linux-x64": 1.0.2
dependenciesMeta:
"@img/sharp-libvips-linux-x64":
optional: true
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@img/sharp-linuxmusl-arm64@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.3"
dependencies:
"@img/sharp-libvips-linuxmusl-arm64": 1.0.2
dependenciesMeta:
"@img/sharp-libvips-linuxmusl-arm64":
optional: true
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@img/sharp-linuxmusl-x64@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-linuxmusl-x64@npm:0.33.3"
dependencies:
"@img/sharp-libvips-linuxmusl-x64": 1.0.2
dependenciesMeta:
"@img/sharp-libvips-linuxmusl-x64":
optional: true
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@img/sharp-wasm32@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-wasm32@npm:0.33.3"
dependencies:
"@emnapi/runtime": ^1.1.0
conditions: cpu=wasm32
languageName: node
linkType: hard
"@img/sharp-win32-ia32@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-win32-ia32@npm:0.33.3"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@img/sharp-win32-x64@npm:0.33.3":
version: 0.33.3
resolution: "@img/sharp-win32-x64@npm:0.33.3"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@isaacs/cliui@npm:^8.0.2":
version: 8.0.2
resolution: "@isaacs/cliui@npm:8.0.2"
@ -296,15 +498,15 @@ __metadata:
linkType: hard
"@npmcli/agent@npm:^2.0.0":
version: 2.2.1
resolution: "@npmcli/agent@npm:2.2.1"
version: 2.2.2
resolution: "@npmcli/agent@npm:2.2.2"
dependencies:
agent-base: ^7.1.0
http-proxy-agent: ^7.0.0
https-proxy-agent: ^7.0.1
lru-cache: ^10.0.1
socks-proxy-agent: ^8.0.1
checksum: c69aca42dbba393f517bc5777ee872d38dc98ea0e5e93c1f6d62b82b8fecdc177a57ea045f07dda1a770c592384b2dd92a5e79e21e2a7cf51c9159466a8f9c9b
socks-proxy-agent: ^8.0.3
checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874
languageName: node
linkType: hard
@ -406,6 +608,39 @@ __metadata:
languageName: node
linkType: hard
"@radix-ui/react-dialog@npm:^1.0.4, @radix-ui/react-dialog@npm:^1.0.5":
version: 1.0.5
resolution: "@radix-ui/react-dialog@npm:1.0.5"
dependencies:
"@babel/runtime": ^7.13.10
"@radix-ui/primitive": 1.0.1
"@radix-ui/react-compose-refs": 1.0.1
"@radix-ui/react-context": 1.0.1
"@radix-ui/react-dismissable-layer": 1.0.5
"@radix-ui/react-focus-guards": 1.0.1
"@radix-ui/react-focus-scope": 1.0.4
"@radix-ui/react-id": 1.0.1
"@radix-ui/react-portal": 1.0.4
"@radix-ui/react-presence": 1.0.1
"@radix-ui/react-primitive": 1.0.3
"@radix-ui/react-slot": 1.0.2
"@radix-ui/react-use-controllable-state": 1.0.1
aria-hidden: ^1.1.1
react-remove-scroll: 2.5.5
peerDependencies:
"@types/react": "*"
"@types/react-dom": "*"
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
peerDependenciesMeta:
"@types/react":
optional: true
"@types/react-dom":
optional: true
checksum: 3d11ca31afb794a6dd286005ab7894cb0ce7bc2de5481de98900470b11d495256401306763de030f5e35aa545ff90d34632ffd54a1b29bf55afba813be4bb84a
languageName: node
linkType: hard
"@radix-ui/react-direction@npm:1.0.1":
version: 1.0.1
resolution: "@radix-ui/react-direction@npm:1.0.1"
@ -876,9 +1111,9 @@ __metadata:
linkType: hard
"@rushstack/eslint-patch@npm:^1.3.3":
version: 1.8.0
resolution: "@rushstack/eslint-patch@npm:1.8.0"
checksum: 25ba5f5dc8828f9a5499045b28d33c642e3db7cd32b3e5f4fbfa5cc6695c28b3967981d662cf37df4e945ba7f874df9bd559c9b2770a1e7d3b5b36afb45246c3
version: 1.9.0
resolution: "@rushstack/eslint-patch@npm:1.9.0"
checksum: 28da9f3771254e17fb1bf2c400541d34b947bbe30c580e9836349831d0b4b235a2b6cfb0f172337bc89120f42d9b5b6526c3358985a6200c1716506006b8b77f
languageName: node
linkType: hard
@ -924,20 +1159,12 @@ __metadata:
linkType: hard
"@types/react@npm:*, @types/react@npm:^18":
version: 18.2.69
resolution: "@types/react@npm:18.2.69"
version: 18.2.73
resolution: "@types/react@npm:18.2.73"
dependencies:
"@types/prop-types": "*"
"@types/scheduler": "*"
csstype: ^3.0.2
checksum: 7657978c4bbca41f566481b5507cdf571575e6631d0f8105ec2f6eea4029c315f9381182369bd5c700f3f2ea247dd2d12005381b937c9ad1771f86acd7201768
languageName: node
linkType: hard
"@types/scheduler@npm:*":
version: 0.16.8
resolution: "@types/scheduler@npm:0.16.8"
checksum: 6c091b096daa490093bf30dd7947cd28e5b2cd612ec93448432b33f724b162587fed9309a0acc104d97b69b1d49a0f3fc755a62282054d62975d53d7fd13472d
checksum: 0921d3e3286f11365e796f01eff4fb64de315c68f569e0bbfdaa7680dc4b774c7e8dc416d72d77f7f16a0c2075048429386a55bbfd43ac507d1dddc8d44142e7
languageName: node
linkType: hard
@ -1037,12 +1264,12 @@ __metadata:
languageName: node
linkType: hard
"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0":
version: 7.1.0
resolution: "agent-base@npm:7.1.0"
"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1":
version: 7.1.1
resolution: "agent-base@npm:7.1.1"
dependencies:
debug: ^4.3.4
checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f
checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037
languageName: node
linkType: hard
@ -1522,13 +1749,33 @@ __metadata:
languageName: node
linkType: hard
"color-name@npm:~1.1.4":
"color-name@npm:^1.0.0, color-name@npm:~1.1.4":
version: 1.1.4
resolution: "color-name@npm:1.1.4"
checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
languageName: node
linkType: hard
"color-string@npm:^1.9.0":
version: 1.9.1
resolution: "color-string@npm:1.9.1"
dependencies:
color-name: ^1.0.0
simple-swizzle: ^0.2.2
checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5
languageName: node
linkType: hard
"color@npm:^4.2.3":
version: 4.2.3
resolution: "color@npm:4.2.3"
dependencies:
color-convert: ^2.0.1
color-string: ^1.9.0
checksum: 0579629c02c631b426780038da929cca8e8d80a40158b09811a0112a107c62e10e4aad719843b791b1e658ab4e800558f2e87ca4522c8b32349d497ecb6adeb4
languageName: node
linkType: hard
"commander@npm:^4.0.0":
version: 4.1.1
resolution: "commander@npm:4.1.1"
@ -1667,6 +1914,13 @@ __metadata:
languageName: node
linkType: hard
"detect-libc@npm:^2.0.3":
version: 2.0.3
resolution: "detect-libc@npm:2.0.3"
checksum: 2ba6a939ae55f189aea996ac67afceb650413c7a34726ee92c40fb0deb2400d57ef94631a8a3f052055eea7efb0f99a9b5e6ce923415daa3e68221f963cfc27d
languageName: node
linkType: hard
"detect-node-es@npm:^1.1.0":
version: 1.1.0
resolution: "detect-node-es@npm:1.1.0"
@ -1723,9 +1977,9 @@ __metadata:
linkType: hard
"electron-to-chromium@npm:^1.4.668":
version: 1.4.715
resolution: "electron-to-chromium@npm:1.4.715"
checksum: b3ccbd571ecaa3b74b2c098b705416e15e36f9338f75fea062ba48397ac379972f915c29437286914d05ea9d3454b0fa74e9606becd6c221879c6fc139a09284
version: 1.4.719
resolution: "electron-to-chromium@npm:1.4.719"
checksum: 0d5d73dad03e52bba512771c54795d77cc86e107dfaa0e947a54188e63537dd2eef3eb362123606dc6f57a11238997d17dd707b9931ec96ac983377749969521
languageName: node
linkType: hard
@ -2306,6 +2560,26 @@ __metadata:
languageName: node
linkType: hard
"framer-motion@npm:^11.0.27":
version: 11.0.27
resolution: "framer-motion@npm:11.0.27"
dependencies:
tslib: ^2.4.0
peerDependencies:
"@emotion/is-prop-valid": "*"
react: ^18.0.0
react-dom: ^18.0.0
peerDependenciesMeta:
"@emotion/is-prop-valid":
optional: true
react:
optional: true
react-dom:
optional: true
checksum: 07809e386288350547bd9193143d9e33e6ab2d1357152b4d90acf50a445437b59ddb1653dcedde75579d3af8c7904c158fdfa6ad97d65786855eb002634bb38b
languageName: node
linkType: hard
"fs-minipass@npm:^2.0.0":
version: 2.1.0
resolution: "fs-minipass@npm:2.1.0"
@ -2434,7 +2708,7 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:10.3.10, glob@npm:^10.2.2, glob@npm:^10.3.10":
"glob@npm:10.3.10, glob@npm:^10.3.10":
version: 10.3.10
resolution: "glob@npm:10.3.10"
dependencies:
@ -2449,6 +2723,21 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:^10.2.2":
version: 10.3.12
resolution: "glob@npm:10.3.12"
dependencies:
foreground-child: ^3.1.0
jackspeak: ^2.3.6
minimatch: ^9.0.1
minipass: ^7.0.4
path-scurry: ^1.10.2
bin:
glob: dist/esm/bin.mjs
checksum: 2b0949d6363021aaa561b108ac317bf5a97271b8a5d7a5fac1a176e40e8068ecdcccc992f8a7e958593d501103ac06d673de92adc1efcbdab45edefe35f8d7c6
languageName: node
linkType: hard
"glob@npm:^7.1.3":
version: 7.2.3
resolution: "glob@npm:7.2.3"
@ -2697,6 +2986,13 @@ __metadata:
languageName: node
linkType: hard
"is-arrayish@npm:^0.3.1":
version: 0.3.2
resolution: "is-arrayish@npm:0.3.2"
checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f
languageName: node
linkType: hard
"is-async-function@npm:^2.0.0":
version: 2.0.0
resolution: "is-async-function@npm:2.0.0"
@ -2966,7 +3262,7 @@ __metadata:
languageName: node
linkType: hard
"jackspeak@npm:^2.3.5":
"jackspeak@npm:^2.3.5, jackspeak@npm:^2.3.6":
version: 2.3.6
resolution: "jackspeak@npm:2.3.6"
dependencies:
@ -2979,7 +3275,7 @@ __metadata:
languageName: node
linkType: hard
"jiti@npm:^1.19.1":
"jiti@npm:^1.21.0":
version: 1.21.0
resolution: "jiti@npm:1.21.0"
bin:
@ -3070,6 +3366,8 @@ __metadata:
version: 0.0.0-use.local
resolution: "kx3dex_radio@workspace:."
dependencies:
"@iconify/react": ^4.1.1
"@radix-ui/react-dialog": ^1.0.5
"@radix-ui/react-dropdown-menu": ^2.0.6
"@radix-ui/react-icons": ^1.3.0
"@radix-ui/react-navigation-menu": ^1.1.4
@ -3081,18 +3379,21 @@ __metadata:
clsx: ^2.1.0
eslint: ^8
eslint-config-next: 14.1.4
framer-motion: ^11.0.27
lucide-react: ^0.363.0
next: 14.1.4
next-themes: ^0.3.0
node: ^21.7.1
postcss: ^8
react: ^18
react-dom: ^18
swiper: ^11.0.7
react-icons: ^5.0.1
sharp: ^0.33.3
swiper: ^11.1.0
tailwind-merge: ^2.2.2
tailwindcss: ^3.4.1
tailwindcss-animate: ^1.0.7
typescript: ^5
vaul: ^0.9.0
languageName: unknown
linkType: soft
@ -3170,7 +3471,7 @@ __metadata:
languageName: node
linkType: hard
"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0":
"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
version: 10.2.0
resolution: "lru-cache@npm:10.2.0"
checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db
@ -3323,7 +3624,7 @@ __metadata:
languageName: node
linkType: hard
"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3":
"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4":
version: 7.0.4
resolution: "minipass@npm:7.0.4"
checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21
@ -3455,16 +3756,9 @@ __metadata:
languageName: node
linkType: hard
"node-bin-setup@npm:^1.0.0":
version: 1.1.3
resolution: "node-bin-setup@npm:1.1.3"
checksum: ae09c036dde8133f5226dc984445a8bdecc9b56078fd091f9e243e3965e544275f4786054041db60cc4ebc2957a5e44e8f316dfc15d100f3988ee2d04661d4bf
languageName: node
linkType: hard
"node-gyp@npm:latest":
version: 10.0.1
resolution: "node-gyp@npm:10.0.1"
version: 10.1.0
resolution: "node-gyp@npm:10.1.0"
dependencies:
env-paths: ^2.2.0
exponential-backoff: ^3.1.1
@ -3478,7 +3772,7 @@ __metadata:
which: ^4.0.0
bin:
node-gyp: bin/node-gyp.js
checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f
checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60
languageName: node
linkType: hard
@ -3489,17 +3783,6 @@ __metadata:
languageName: node
linkType: hard
"node@npm:^21.7.1":
version: 21.7.1
resolution: "node@npm:21.7.1"
dependencies:
node-bin-setup: ^1.0.0
bin:
node: bin/node
checksum: dfa81d69f0b09bd12385ea81fb9ee2951d5813e64f95e04f9f81f8f97d9b254742c3aaa85c506cda87076d6f86fe8a89672eabf44a6772ad448cb0b4f290ed7d
languageName: node
linkType: hard
"nopt@npm:^7.0.0":
version: 7.2.0
resolution: "nopt@npm:7.2.0"
@ -3708,13 +3991,13 @@ __metadata:
languageName: node
linkType: hard
"path-scurry@npm:^1.10.1":
version: 1.10.1
resolution: "path-scurry@npm:1.10.1"
"path-scurry@npm:^1.10.1, path-scurry@npm:^1.10.2":
version: 1.10.2
resolution: "path-scurry@npm:1.10.2"
dependencies:
lru-cache: ^9.1.1 || ^10.0.0
lru-cache: ^10.2.0
minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90
checksum: 6739b4290f7d1a949c61c758b481c07ac7d1a841964c68cf5e1fa153d7e18cbde4872b37aadf9c5173c800d627f219c47945859159de36c977dd82419997b9b8
languageName: node
linkType: hard
@ -3913,6 +4196,15 @@ __metadata:
languageName: node
linkType: hard
"react-icons@npm:^5.0.1":
version: 5.0.1
resolution: "react-icons@npm:5.0.1"
peerDependencies:
react: "*"
checksum: e5df9c5e3bcdb8d68bd4c5e41650c26d2a3ceda61ded0e2abf7caa0e54c9fb712badcd06f0c240cfc645a5dd15a5dc1eb5dd55f60123d86860f516b1fc456474
languageName: node
linkType: hard
"react-is@npm:^16.13.1":
version: 16.13.1
resolution: "react-is@npm:16.13.1"
@ -4181,7 +4473,7 @@ __metadata:
languageName: node
linkType: hard
"semver@npm:^7.3.5, semver@npm:^7.5.4":
"semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.6.0":
version: 7.6.0
resolution: "semver@npm:7.6.0"
dependencies:
@ -4218,6 +4510,75 @@ __metadata:
languageName: node
linkType: hard
"sharp@npm:^0.33.3":
version: 0.33.3
resolution: "sharp@npm:0.33.3"
dependencies:
"@img/sharp-darwin-arm64": 0.33.3
"@img/sharp-darwin-x64": 0.33.3
"@img/sharp-libvips-darwin-arm64": 1.0.2
"@img/sharp-libvips-darwin-x64": 1.0.2
"@img/sharp-libvips-linux-arm": 1.0.2
"@img/sharp-libvips-linux-arm64": 1.0.2
"@img/sharp-libvips-linux-s390x": 1.0.2
"@img/sharp-libvips-linux-x64": 1.0.2
"@img/sharp-libvips-linuxmusl-arm64": 1.0.2
"@img/sharp-libvips-linuxmusl-x64": 1.0.2
"@img/sharp-linux-arm": 0.33.3
"@img/sharp-linux-arm64": 0.33.3
"@img/sharp-linux-s390x": 0.33.3
"@img/sharp-linux-x64": 0.33.3
"@img/sharp-linuxmusl-arm64": 0.33.3
"@img/sharp-linuxmusl-x64": 0.33.3
"@img/sharp-wasm32": 0.33.3
"@img/sharp-win32-ia32": 0.33.3
"@img/sharp-win32-x64": 0.33.3
color: ^4.2.3
detect-libc: ^2.0.3
semver: ^7.6.0
dependenciesMeta:
"@img/sharp-darwin-arm64":
optional: true
"@img/sharp-darwin-x64":
optional: true
"@img/sharp-libvips-darwin-arm64":
optional: true
"@img/sharp-libvips-darwin-x64":
optional: true
"@img/sharp-libvips-linux-arm":
optional: true
"@img/sharp-libvips-linux-arm64":
optional: true
"@img/sharp-libvips-linux-s390x":
optional: true
"@img/sharp-libvips-linux-x64":
optional: true
"@img/sharp-libvips-linuxmusl-arm64":
optional: true
"@img/sharp-libvips-linuxmusl-x64":
optional: true
"@img/sharp-linux-arm":
optional: true
"@img/sharp-linux-arm64":
optional: true
"@img/sharp-linux-s390x":
optional: true
"@img/sharp-linux-x64":
optional: true
"@img/sharp-linuxmusl-arm64":
optional: true
"@img/sharp-linuxmusl-x64":
optional: true
"@img/sharp-wasm32":
optional: true
"@img/sharp-win32-ia32":
optional: true
"@img/sharp-win32-x64":
optional: true
checksum: 2470df24b099dc160d42f56a75f5342631c9fb82f2db62536555c5297834525897d25b82727caacc5201bef416cf7fe2cdad1b0eed1ca2bed838d87c3769a037
languageName: node
linkType: hard
"shebang-command@npm:^2.0.0":
version: 2.0.0
resolution: "shebang-command@npm:2.0.0"
@ -4253,6 +4614,15 @@ __metadata:
languageName: node
linkType: hard
"simple-swizzle@npm:^0.2.2":
version: 0.2.2
resolution: "simple-swizzle@npm:0.2.2"
dependencies:
is-arrayish: ^0.3.1
checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0
languageName: node
linkType: hard
"slash@npm:^3.0.0":
version: 3.0.0
resolution: "slash@npm:3.0.0"
@ -4267,24 +4637,24 @@ __metadata:
languageName: node
linkType: hard
"socks-proxy-agent@npm:^8.0.1":
version: 8.0.2
resolution: "socks-proxy-agent@npm:8.0.2"
"socks-proxy-agent@npm:^8.0.3":
version: 8.0.3
resolution: "socks-proxy-agent@npm:8.0.3"
dependencies:
agent-base: ^7.0.2
agent-base: ^7.1.1
debug: ^4.3.4
socks: ^2.7.1
checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d
checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5
languageName: node
linkType: hard
"socks@npm:^2.7.1":
version: 2.8.1
resolution: "socks@npm:2.8.1"
version: 2.8.3
resolution: "socks@npm:2.8.3"
dependencies:
ip-address: ^9.0.5
smart-buffer: ^4.2.0
checksum: 29586d42e9c36c5016632b2bcb6595e3adfbcb694b3a652c51bc8741b079c5ec37bdd5675a1a89a1620078c8137208294991fabb50786f92d47759a725b2b62e
checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd
languageName: node
linkType: hard
@ -4476,10 +4846,10 @@ __metadata:
languageName: node
linkType: hard
"swiper@npm:^11.0.7":
version: 11.0.7
resolution: "swiper@npm:11.0.7"
checksum: dfb82ff649ff22a612bf6a55f2351caad314e394f1ed8327a994021ac2297072f807d4164f861d33fb52b80bcc502e35138f8a988ca11552c43dfe93fc302160
"swiper@npm:^11.1.0":
version: 11.1.0
resolution: "swiper@npm:11.1.0"
checksum: c03a4f3dbff711a8dd05ee648677fcf295ae378b0c8988b9c0ddbfea539042ac59f61c0aa18b238091dab9d4a64d07e9c61054d28bf57c159bbd8c1257a543c4
languageName: node
linkType: hard
@ -4502,8 +4872,8 @@ __metadata:
linkType: hard
"tailwindcss@npm:^3.4.1":
version: 3.4.1
resolution: "tailwindcss@npm:3.4.1"
version: 3.4.3
resolution: "tailwindcss@npm:3.4.3"
dependencies:
"@alloc/quick-lru": ^5.2.0
arg: ^5.0.2
@ -4513,7 +4883,7 @@ __metadata:
fast-glob: ^3.3.0
glob-parent: ^6.0.2
is-glob: ^4.0.3
jiti: ^1.19.1
jiti: ^1.21.0
lilconfig: ^2.1.0
micromatch: ^4.0.5
normalize-path: ^3.0.0
@ -4530,7 +4900,7 @@ __metadata:
bin:
tailwind: lib/cli.js
tailwindcss: lib/cli.js
checksum: ef5a587dd32bb4e91e1549ead6162f85f0b78d3e6ffd8b4e8eeb15585b7b886cb3af6ae9df5092ed8ccb7e590608d1b3eec79ca08c862b07cd9ff7e72f73104b
checksum: 7d181a6aafb520c5760d23d0a199444a324dfa36538edd31934daa253ed9a7ac4bde18c4205aaa89c1269bc2ff11781efda04d2e27ded535a9a2547667a344b1
languageName: node
linkType: hard
@ -4810,6 +5180,18 @@ __metadata:
languageName: node
linkType: hard
"vaul@npm:^0.9.0":
version: 0.9.0
resolution: "vaul@npm:0.9.0"
dependencies:
"@radix-ui/react-dialog": ^1.0.4
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
react-dom: ^16.8 || ^17.0 || ^18.0
checksum: 12c4ced1a91400abe8d20c0c2108f2ffe7d81172eb08c3d7a24e9f813a034e00a9ddb43bb30a7ec312e71292d7b15b13d0fd9e866646b35e13b6d8bc61974198
languageName: node
linkType: hard
"which-boxed-primitive@npm:^1.0.2":
version: 1.0.2
resolution: "which-boxed-primitive@npm:1.0.2"