Compare commits

...

18 commits

Author SHA1 Message Date
819b854c14 docs: update README.md with detailed project description, features, and setup instructions
Some checks failed
container-scan / Container Scan (pull_request) Failing after 11s
docker-build / docker (pull_request) Failing after 8m45s
Adds a detailed project description, implemented and planned features, technologies used, and setup instructions to the README.
2025-05-10 00:29:44 +02:00
0808b2f891 feat: add HoverCard component and minimal page footer 2025-05-10 00:29:44 +02:00
e524314854 Merge pull request 'chore(ci): rework build pipeline'
All checks were successful
container-scan / Container Scan (push) Successful in 2m24s
docker-build / docker (push) Successful in 3m9s
Reviewed-on: #32
2025-05-09 22:16:12 +00:00
96d2852c2d
fix: dont try to remove already removed tags
All checks were successful
container-scan / Container Scan (pull_request) Successful in 4m41s
docker-build / docker (pull_request) Successful in 9m46s
2025-05-10 00:01:34 +02:00
aeb904dcde fix: make repo to lower workflow step posix compatible
Some checks failed
container-scan / Container Scan (pull_request) Successful in 1m22s
docker-build / docker (pull_request) Failing after 3m25s
2025-05-09 21:51:15 +00:00
dcb9dda000 fix: set container image in workflow files 2025-05-09 21:51:15 +00:00
ae2d7005e6 fix: keep some build caches to speed up builds 2025-05-09 21:51:15 +00:00
794ed54832 chore: remove docker installs from workflows 2025-05-09 21:51:15 +00:00
ef65c5bbf6 chore: add Docker cleanup steps to workflows 2025-05-09 21:51:15 +00:00
0927116a2c fix: add missing env variable to docker-compose
added the missing AUTH_URL variable to the example docker-compose.yml
2025-05-09 21:51:15 +00:00
2c38418770 chore(ci): remove sha_ tags from build docker images 2025-05-09 21:51:15 +00:00
e7fc02c8c9 chore(ci): example environment variables
add example environment variables to docker-compose.yml to prevent errors
2025-05-09 21:51:15 +00:00
f896665dcf chore(ci): Add labels to docker image 2025-05-09 21:51:15 +00:00
f3784c1512 Merge pull request 'docs: create README.md with detailed project description, added example env file'
All checks were successful
container-scan / Container Scan (push) Successful in 3m43s
docker-build / docker (push) Successful in 10m24s
Reviewed-on: #37
Reviewed-by: Dominik <mail@dominikstahl.dev>
2025-05-09 21:43:42 +00:00
2de18006fe docs: remove optional notes from contributing section in README.md
All checks were successful
container-scan / Container Scan (pull_request) Successful in 1m48s
docker-build / docker (pull_request) Successful in 4m0s
2025-05-09 23:21:31 +02:00
c13286b05d feat(env): add example env file and update .gitignore to include it
Some checks failed
container-scan / Container Scan (pull_request) Successful in 1m46s
docker-build / docker (pull_request) Failing after 4m32s
2025-05-09 23:12:17 +02:00
84066b33f1 docs: add environment variable for skipping login flow in development
Some checks failed
container-scan / Container Scan (pull_request) Successful in 1m54s
docker-build / docker (pull_request) Failing after 4m20s
2025-05-09 23:08:28 +02:00
d5195086ca docs: update README.md with detailed project description, features, and setup instructions
All checks were successful
container-scan / Container Scan (pull_request) Successful in 2m55s
docker-build / docker (pull_request) Successful in 3m57s
Adds a detailed project description, implemented and planned features, technologies used, and setup instructions to the README.
2025-05-09 20:54:02 +00:00
11 changed files with 423 additions and 40 deletions

11
.env.example Normal file
View file

@ -0,0 +1,11 @@
DATABASE_URL=
AUTH_SECRET= # Added by `npx auth`. Read more: https://cli.authjs.dev
AUTH_AUTHENTIK_ID=
AUTH_AUTHENTIK_SECRET=
AUTH_AUTHENTIK_ISSUER=
NEXT_PUBLIC_APP_URL=
MEETUP_SKIP_LOGIN=

View file

@ -9,22 +9,11 @@ jobs:
name: Container Scan
runs-on: docker
container:
image: node:22-bullseye@sha256:ed0338dd02fd86861a59dc1cbc2e12152f3a93c4ce5933d347d6677232000dc7
image: ghcr.io/di0ik/forgejo_runner_container:main
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Install Docker
run: |
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- name: Build an image from Dockerfile
run: docker build -t git.dominikstahl.dev/dhbw-we/meetup:${{ github.sha }} .
@ -41,3 +30,9 @@ jobs:
uses: forgejo/upload-artifact@v4
with:
path: trivy-report.json
- name: Clean up Docker
run: |
docker builder prune -af --keep-storage 2GB
docker rmi $(docker images --filter=reference="git.dominikstahl.dev/dhbw-we/meetup:*" -q)
docker image prune -f

View file

@ -12,18 +12,9 @@ on:
jobs:
docker:
runs-on: docker
container:
image: ghcr.io/di0ik/forgejo_runner_container:main
steps:
- name: Install Docker
run: |
apt-get update
apt-get install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- name: Login to Docker Hub
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3
with:
@ -46,14 +37,14 @@ jobs:
- name: lowercase repo name
run: |
echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}
echo "REPO=$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')" >>${GITHUB_ENV}
- name: Build and push (pull_request)
uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6
if: github.event_name == 'pull_request'
with:
push: true
tags: git.dominikstahl.dev/${{ env.REPO }}:sha_${{ github.sha }},git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag}}
tags: git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag}}
- name: Build and push (push_tag)
uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6
@ -67,4 +58,9 @@ jobs:
if: github.event_name == 'push' && github.ref_type == 'branch'
with:
push: true
tags: git.dominikstahl.dev/${{ env.REPO }}:sha_${{ github.sha }},git.dominikstahl.dev/${{ env.REPO }}:main
tags: git.dominikstahl.dev/${{ env.REPO }}:${{ steps.get-ref.outputs.tag }}
- name: Clean up Docker
run: |
docker builder prune -af --keep-storage 2GB
docker image prune -f

1
.gitignore vendored
View file

@ -32,6 +32,7 @@ yarn-error.log*
# env files (can opt-in for committing if needed)
.env*
!.env.example
# vercel
.vercel

View file

@ -27,6 +27,10 @@ COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
LABEL org.opencontainers.image.source="https://git.dominikstahl.dev/DHBW-WE/MeetUp"
LABEL org.opencontainers.image.title="MeetUp"
LABEL org.opencontainers.image.description="A web application for managing meetups"
EXPOSE 3000
ENV HOSTNAME="0.0.0.0"

146
README.md
View file

@ -1 +1,145 @@
# MeetUp
# MeetUP
## Description
MeetUP is a social calendar application designed to make coordinating schedules with friends seamless and intuitive. It was created because it can be a hassle coordinating meetings between multiple friends and across different friend groups. MeetUP aims to simplify the process of finding mutual availability without endless back-and-forth messaging.
## Project Status
**Still in Development:** This project is actively under development. Core features are being built, and the application is not yet feature-complete or ready for production use.
## Features
### Implemented Features
- Core infrastructure setup in progress. No user-facing features are implemented yet.
### Planned Features (Roadmap)
- **Friendships:** Connect with friends to share calendars.
- **Group Calendars:** Create and manage shared calendars for groups.
- **iCal Import:** Import existing calendars from iCalendar (.ics) files.
- **iCal Export:** Export personal or shared calendars in iCalendar (.ics) format.
- **Email Notifications:** Receive email alerts for event bookings, reminders, and updates.
- **View Blocked Slots:** See when friends are busy without revealing event details.
- **Book Timeslots:** Request and confirm meeting times in friends' available slots.
- **SSO Compatibility:** Planning for Single Sign-On integration.
## Technologies Used
This project is built with a modern tech stack:
- **Package Manager:** [Yarn](https://yarnpkg.com/)
- **Framework:** [Next.js](https://nextjs.org/) - React framework for server-side rendering and static site generation.
- **Language:** [TypeScript](https://www.typescriptlang.org/) - Superset of JavaScript that adds static typing.
- **ORM:** [Prisma](https://www.prisma.io/) - Next-generation ORM for Node.js and TypeScript.
- **Authentication:** [Auth.js](https://authjs.dev/) (formerly NextAuth.js) - Authentication for Next.js.
- **Styling:** [Tailwind CSS](https://tailwindcss.com/) - A utility-first CSS framework.
- **UI Components:** [shadcn/ui](https://ui.shadcn.com/) - Re-usable components built using Radix UI and Tailwind CSS.
- **Containerization:** [Docker](https://www.docker.com/) (for planned self-hosting option)
- _(You can also list related tools here, e.g., ESLint, Prettier, testing libraries if you plan to use them)_
## Getting Started
**Prerequisites:**
- Node.js: Version is continually upgraded. It's recommended to use the latest LTS or a recent stable version. (Check `.nvmrc` if available).
- Yarn: Version is continually upgraded. (Check `package.json` engines field if specified).
- A database supported by Prisma (e.g., PostgreSQL, MySQL, SQLite). Ensure your database server is running.
**Installation & Running Locally:**
1. **Clone the repository:**
- Using SSH:
```bash
git clone ssh://git@git.dominikstahl.dev/DHBW-WE/MeetUp.git
```
- Or using HTTPS (recommended for most users):
```bash
git clone [https://git.dominikstahl.dev/DHBW-WE/MeetUp.git](https://git.dominikstahl.dev/DHBW-WE/MeetUp.git)
```
```bash
cd MeetUp
```
2. **Install dependencies:**
```bash
yarn install
```
3. **Set up environment variables:**
- You will need to create an `AUTH_SECRET`. You can generate one using the following command:
```bash
npx auth secret
```
- Copy the `.env.example` file (if it exists) to `.env.local`. If not, create `.env.local`.
```bash
# If .env.example exists:
cp .env.example .env.local
# Otherwise, create .env.local and add the following:
```
- Ensure the following environment variables are set in your `.env.local` file. Adjust `DATABASE_URL` for your specific database provider and credentials.
```env
# Database Connection String (Prisma)
# Example for PostgreSQL: DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public"
DATABASE_URL="your_database_connection_string"
# Generated with npx auth secret
AUTH_SECRET="your_generated_auth_secret"
# Authentik SSO Variables (if you are using this provider)
AUTH_AUTHENTIK_ID=
AUTH_AUTHENTIK_SECRET=
AUTH_AUTHENTIK_ISSUER=
# Base URL of your application
NEXT_PUBLIC_APP_URL="http://localhost:3000"
```
4. **Apply database migrations (Prisma):**
- Ensure your Prisma schema (`prisma/schema.prisma`) is defined.
- Run the following command to apply migrations and generate Prisma Client:
```bash
npx prisma migrate dev
# You might be prompted to name your first migration.
```
- (Optional: If you need to generate Prisma Client without running migrations, use `npx prisma generate`)
5. **Run the development server:**
```bash
yarn dev
```
Open [http://localhost:3000](http://localhost:3000) in your browser to see the application.
**Self-Hosting with Docker (Planned):**
- A Docker image and `docker-compose.yml` file will be provided in the future to allow for easy self-hosting of the MeetUP application. This setup will also include database services. Instructions will be updated here once available.
## Contributing
_(This section can be expanded as your project grows and you're open to contributions.)_
Contributions are welcome! If you'd like to contribute, please:
1. Fork the repository.
2. Create a new branch (`git checkout -b feature/your-feature-name` or `fix/your-bug-fix`).
3. Make your changes.
4. Commit your changes (`git commit -m 'Add some feature'`).
5. Push to the branch (`git push origin feature/your-feature-name`).
6. Open a Pull Request against the `main` (or `develop`) branch.
Please ensure your code adheres to the project's coding standards (e.g., run linters/formatters if configured) and that any database schema changes are accompanied by a Prisma migration.
_(Optional: You can add more details about reporting bugs, suggesting features, or coding style guides here.)_
---
**(Optional Sections You Might Want to Add Later):**
- **Screenshots/Demo:** (Once you have UI to show)
- **API Reference:** (If you plan to expose an API)
- **Detailed Deployment Guides:** (For various platforms beyond Docker)
- **License:** (e.g., MIT, GPL - Important for open source projects)
- **Contact:** (How to get in touch with the maintainers)
- **Acknowledgements:** (Credit to any libraries, inspirations, or contributors)

View file

@ -3,5 +3,9 @@ services:
build:
context: .
dockerfile: Dockerfile
image: git.dominikstahl.dev/dhbw-we/meetup:main
ports:
- '3000:3000'
environment:
- AUTH_SECRET=secret
- AUTH_URL=http://localhost:3000

View file

@ -15,6 +15,7 @@
"@fortawesome/free-regular-svg-icons": "^6.7.2",
"@fortawesome/free-solid-svg-icons": "^6.7.2",
"@fortawesome/react-fontawesome": "^0.2.2",
"@radix-ui/react-hover-card": "^1.1.13",
"@radix-ui/react-slot": "^1.2.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",

View file

@ -2,9 +2,16 @@ import { auth } from '@/auth';
import SSOLogin from '@/components/user/sso-login-button';
import LoginForm from '@/components/user/login-form';
import { redirect } from 'next/navigation';
import { Button } from '@/components/ui/button';
import Image from 'next/image';
import '@/app/globals.css';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import {
HoverCard,
HoverCardTrigger,
HoverCardContent,
} from '@/components/ui/hover-card';
export default async function LoginPage() {
const session = await auth();
@ -14,6 +21,7 @@ export default async function LoginPage() {
}
return (
<div className='flex flex-col items-center justify-center h-screen'>
<div className='flex flex-col items-center justify-center h-screen'>
<Card className='w-[350px] max-w-screen'>
<CardHeader>
@ -30,5 +38,20 @@ export default async function LoginPage() {
</CardContent>
</Card>
</div>
<HoverCard>
<HoverCardTrigger className='text-sm text-muted-foreground hover:underline'>
<Button variant='link'>made with love</Button>
</HoverCardTrigger>
<HoverCardContent className='flex items-center justify-center'>
<Image
src='https://img1.wikia.nocookie.net/__cb20140808110649/clubpenguin/images/a/a1/Action_Dance_Light_Blue.gif'
width='150'
height='150'
alt='dancing penguin'
unoptimized={true}
></Image>
</HoverCardContent>
</HoverCard>
</div>
);
}

View file

@ -0,0 +1,44 @@
"use client"
import * as React from "react"
import * as HoverCardPrimitive from "@radix-ui/react-hover-card"
import { cn } from "@/lib/utils"
function HoverCard({
...props
}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {
return <HoverCardPrimitive.Root data-slot="hover-card" {...props} />
}
function HoverCardTrigger({
...props
}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {
return (
<HoverCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />
)
}
function HoverCardContent({
className,
align = "center",
sideOffset = 4,
...props
}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {
return (
<HoverCardPrimitive.Portal data-slot="hover-card-portal">
<HoverCardPrimitive.Content
data-slot="hover-card-content"
align={align}
sideOffset={sideOffset}
className={cn(
"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
className
)}
{...props}
/>
</HoverCardPrimitive.Portal>
)
}
export { HoverCard, HoverCardTrigger, HoverCardContent }

162
yarn.lock
View file

@ -239,6 +239,33 @@
"@eslint/core" "^0.13.0"
levn "^0.4.1"
"@floating-ui/core@^1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.0.tgz#1aff27a993ea1b254a586318c29c3b16ea0f4d0a"
integrity sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==
dependencies:
"@floating-ui/utils" "^0.2.9"
"@floating-ui/dom@^1.0.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.7.0.tgz#f9f83ee4fee78ac23ad9e65b128fc11a27857532"
integrity sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==
dependencies:
"@floating-ui/core" "^1.7.0"
"@floating-ui/utils" "^0.2.9"
"@floating-ui/react-dom@^2.0.0":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31"
integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==
dependencies:
"@floating-ui/dom" "^1.0.0"
"@floating-ui/utils@^0.2.9":
version "0.2.9"
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429"
integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==
"@fortawesome/fontawesome-common-types@6.7.2":
version "6.7.2"
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz#7123d74b0c1e726794aed1184795dbce12186470"
@ -625,18 +652,151 @@
dependencies:
"@prisma/debug" "6.7.0"
"@radix-ui/primitive@1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65"
integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==
"@radix-ui/react-arrow@1.1.6":
version "1.1.6"
resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.6.tgz#4b460fdbc1ac097a4964e04ca404c25c2f6d7d3f"
integrity sha512-2JMfHJf/eVnwq+2dewT3C0acmCWD3XiVA1Da+jTDqo342UlU13WvXtqHhG+yJw5JeQmu4ue2eMy6gcEArLBlcw==
dependencies:
"@radix-ui/react-primitive" "2.1.2"
"@radix-ui/react-compose-refs@1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30"
integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==
"@radix-ui/react-slot@^1.2.2":
"@radix-ui/react-context@1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36"
integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==
"@radix-ui/react-dismissable-layer@1.1.9":
version "1.1.9"
resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.9.tgz#46e025ba6e6f403677e22fbb7d99b63cf7b32bca"
integrity sha512-way197PiTvNp+WBP7svMJasHl+vibhWGQDb6Mgf5mhEWJkgb85z7Lfl9TUdkqpWsf8GRNmoopx9ZxCyDzmgRMQ==
dependencies:
"@radix-ui/primitive" "1.1.2"
"@radix-ui/react-compose-refs" "1.1.2"
"@radix-ui/react-primitive" "2.1.2"
"@radix-ui/react-use-callback-ref" "1.1.1"
"@radix-ui/react-use-escape-keydown" "1.1.1"
"@radix-ui/react-hover-card@^1.1.13":
version "1.1.13"
resolved "https://registry.yarnpkg.com/@radix-ui/react-hover-card/-/react-hover-card-1.1.13.tgz#875bc07bae27a1634544b2d41940b358263bec5f"
integrity sha512-Wtjvx0d/6Bgd/jAYS1mW6IPSUQ25y0hkUSOS1z5/4+U8+DJPwKroqJlM/AlVFl3LywGoruiPmcvB9Aks9mSOQw==
dependencies:
"@radix-ui/primitive" "1.1.2"
"@radix-ui/react-compose-refs" "1.1.2"
"@radix-ui/react-context" "1.1.2"
"@radix-ui/react-dismissable-layer" "1.1.9"
"@radix-ui/react-popper" "1.2.6"
"@radix-ui/react-portal" "1.1.8"
"@radix-ui/react-presence" "1.1.4"
"@radix-ui/react-primitive" "2.1.2"
"@radix-ui/react-use-controllable-state" "1.2.2"
"@radix-ui/react-popper@1.2.6":
version "1.2.6"
resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.6.tgz#227d2882f19d80933796525c7bbd0d3ddf699ac0"
integrity sha512-7iqXaOWIjDBfIG7aq8CUEeCSsQMLFdn7VEE8TaFz704DtEzpPHR7w/uuzRflvKgltqSAImgcmxQ7fFX3X7wasg==
dependencies:
"@floating-ui/react-dom" "^2.0.0"
"@radix-ui/react-arrow" "1.1.6"
"@radix-ui/react-compose-refs" "1.1.2"
"@radix-ui/react-context" "1.1.2"
"@radix-ui/react-primitive" "2.1.2"
"@radix-ui/react-use-callback-ref" "1.1.1"
"@radix-ui/react-use-layout-effect" "1.1.1"
"@radix-ui/react-use-rect" "1.1.1"
"@radix-ui/react-use-size" "1.1.1"
"@radix-ui/rect" "1.1.1"
"@radix-ui/react-portal@1.1.8":
version "1.1.8"
resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.8.tgz#0181e85bc0d8c67229dd8cf198204f5f4cc7c09c"
integrity sha512-hQsTUIn7p7fxCPvao/q6wpbxmCwgLrlz+nOrJgC+RwfZqWY/WN+UMqkXzrtKbPrF82P43eCTl3ekeKuyAQbFeg==
dependencies:
"@radix-ui/react-primitive" "2.1.2"
"@radix-ui/react-use-layout-effect" "1.1.1"
"@radix-ui/react-presence@1.1.4":
version "1.1.4"
resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced"
integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==
dependencies:
"@radix-ui/react-compose-refs" "1.1.2"
"@radix-ui/react-use-layout-effect" "1.1.1"
"@radix-ui/react-primitive@2.1.2":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.2.tgz#03f64f957719c761d22c2f92cc43ffb64bd42cc8"
integrity sha512-uHa+l/lKfxuDD2zjN/0peM/RhhSmRjr5YWdk/37EnSv1nJ88uvG85DPexSm8HdFQROd2VdERJ6ynXbkCFi+APw==
dependencies:
"@radix-ui/react-slot" "1.2.2"
"@radix-ui/react-slot@1.2.2", "@radix-ui/react-slot@^1.2.2":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.2.tgz#18e6533e778a2051edc2ad0773da8e22f03f626a"
integrity sha512-y7TBO4xN4Y94FvcWIOIh18fM4R1A8S4q1jhoz4PNzOoHsFcN8pogcFmZrTYAm4F9VRUrWP/Mw7xSKybIeRI+CQ==
dependencies:
"@radix-ui/react-compose-refs" "1.1.2"
"@radix-ui/react-use-callback-ref@1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40"
integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==
"@radix-ui/react-use-controllable-state@1.2.2":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190"
integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==
dependencies:
"@radix-ui/react-use-effect-event" "0.0.2"
"@radix-ui/react-use-layout-effect" "1.1.1"
"@radix-ui/react-use-effect-event@0.0.2":
version "0.0.2"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907"
integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==
dependencies:
"@radix-ui/react-use-layout-effect" "1.1.1"
"@radix-ui/react-use-escape-keydown@1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29"
integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==
dependencies:
"@radix-ui/react-use-callback-ref" "1.1.1"
"@radix-ui/react-use-layout-effect@1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e"
integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==
"@radix-ui/react-use-rect@1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152"
integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==
dependencies:
"@radix-ui/rect" "1.1.1"
"@radix-ui/react-use-size@1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37"
integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==
dependencies:
"@radix-ui/react-use-layout-effect" "1.1.1"
"@radix-ui/rect@1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb"
integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==
"@rtsao/scc@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8"