Initial
This commit is contained in:
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__pycache__/
|
||||||
|
*.db
|
||||||
|
|
||||||
|
*node_modules/*
|
||||||
|
|
||||||
|
uploads/
|
||||||
1
.python-version
Normal file
1
.python-version
Normal file
@@ -0,0 +1 @@
|
|||||||
|
3.13
|
||||||
56
Dockerfile
Normal file
56
Dockerfile
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# Multi-stage build for React frontend and Python backend
|
||||||
|
FROM node:18-alpine as frontend-builder
|
||||||
|
|
||||||
|
WORKDIR /app/frontend
|
||||||
|
COPY ppq-frontend/package.json ppq-frontend/yarn.lock ./
|
||||||
|
RUN yarn install --frozen-lockfile
|
||||||
|
|
||||||
|
COPY ppq-frontend/ ./
|
||||||
|
RUN yarn build
|
||||||
|
|
||||||
|
# Python backend stage
|
||||||
|
FROM python:3.13-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install system dependencies for Pillow and HEIF support
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
gcc \
|
||||||
|
libjpeg-dev \
|
||||||
|
zlib1g-dev \
|
||||||
|
libffi-dev \
|
||||||
|
libheif-dev \
|
||||||
|
pkg-config \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Copy Python dependencies and install
|
||||||
|
COPY pyproject.toml ./
|
||||||
|
RUN pip install --no-cache-dir -e .
|
||||||
|
|
||||||
|
# Install additional dependencies based on imports
|
||||||
|
RUN pip install --no-cache-dir \
|
||||||
|
flask==3.1.2 \
|
||||||
|
flask-cors==6.0.1 \
|
||||||
|
pillow==11.3.0 \
|
||||||
|
pillow-heif==1.1.0 \
|
||||||
|
werkzeug==3.1.3
|
||||||
|
|
||||||
|
# Copy Python application files
|
||||||
|
COPY *.py ./
|
||||||
|
COPY schemas/ ./schemas/
|
||||||
|
|
||||||
|
# Copy built React frontend from builder stage
|
||||||
|
COPY --from=frontend-builder /app/frontend/dist ./ppq-frontend/dist
|
||||||
|
|
||||||
|
# Create uploads directory
|
||||||
|
RUN mkdir -p uploads
|
||||||
|
|
||||||
|
# Expose port
|
||||||
|
EXPOSE 5000
|
||||||
|
|
||||||
|
# Set environment variables
|
||||||
|
ENV FLASK_APP=main.py
|
||||||
|
ENV FLASK_ENV=production
|
||||||
|
|
||||||
|
# Run the application
|
||||||
|
CMD ["python", "-m", "flask", "run", "--host=0.0.0.0", "--port=5000"]
|
||||||
7
README.md
Normal file
7
README.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# ppq!
|
||||||
|
|
||||||
|
This is a rewrite of [petpicturequeue](https://git.torrtle.co/ryan/petpicturequeue), which I slop-coded a while back. I felt a little guilty and also wanted to wrrite something that I could actually work on later and feel confident using. Thus, ppq! was born.
|
||||||
|
|
||||||
|
The only files generated by AI are the Dockerfile and docker-compose.yml. Claude Code was consulted for general questions but all the code was hand-written.
|
||||||
|
|
||||||
|
In the end, I found that writing this did not take much longer than writing this purely using Claude Code with the added benefit tthat I actually understand what is going on in the codebase!
|
||||||
8
database.py
Normal file
8
database.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import os
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
class Database:
|
||||||
|
@staticmethod
|
||||||
|
def get_connection():
|
||||||
|
database_file = os.getenv("PPQ_DATABASE_PATH", "ppq.db")
|
||||||
|
return sqlite3.connect(database_file)
|
||||||
20
docker-compose.yml
Normal file
20
docker-compose.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ppq-app:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "5000:5000"
|
||||||
|
volumes:
|
||||||
|
- ./uploads:/app/uploads
|
||||||
|
- ./ppq.db:/app/ppq.db
|
||||||
|
environment:
|
||||||
|
- FLASK_APP=main.py
|
||||||
|
- FLASK_ENV=production
|
||||||
|
restart: unless-stopped
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:5000/api/pictures"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 40s
|
||||||
74
images.py
Normal file
74
images.py
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
import typing
|
||||||
|
from uuid import UUID, uuid4
|
||||||
|
|
||||||
|
from database import Database
|
||||||
|
|
||||||
|
class PetPicture:
|
||||||
|
uuid: str
|
||||||
|
title: str
|
||||||
|
contributor: str
|
||||||
|
created_at: int
|
||||||
|
posted: bool
|
||||||
|
filepath: str
|
||||||
|
description: str
|
||||||
|
|
||||||
|
def __init__(self, title, contributor, created_at, filepath, description, uuid=None, posted=False):
|
||||||
|
self.uuid = str(uuid4()) if uuid is None else uuid
|
||||||
|
self.title = title
|
||||||
|
self.contributor = contributor
|
||||||
|
self.created_at = created_at
|
||||||
|
self.posted = posted
|
||||||
|
self.filepath = filepath
|
||||||
|
self.description = description
|
||||||
|
|
||||||
|
def get_json(self):
|
||||||
|
return {
|
||||||
|
"uuid": self.uuid,
|
||||||
|
"title": self.title,
|
||||||
|
"contributor": self.contributor,
|
||||||
|
"description": self.description,
|
||||||
|
"created_at": self.created_at,
|
||||||
|
"posted": self.posted,
|
||||||
|
"filepath": self.filepath,
|
||||||
|
}
|
||||||
|
|
||||||
|
def upsert(self):
|
||||||
|
conn = Database.get_connection()
|
||||||
|
c = conn.cursor()
|
||||||
|
save_string = """INSERT INTO PetPictures (uuid, title, contributor, description, created_at, posted, filepath)
|
||||||
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||||
|
ON CONFLICT (uuid) DO UPDATE SET title = excluded.title, contributor = excluded.contributor, created_at = excluded.created_at, posted = excluded.posted, filepath = excluded.filepath, description = excluded.description"""
|
||||||
|
c.execute(save_string, (self.uuid, self.title, self.contributor, self.description, self.created_at, self.posted, self.filepath,))
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_row(db_row):
|
||||||
|
return PetPicture(uuid=db_row[0], title=db_row[1], contributor=db_row[2], description=db_row[3], created_at=db_row[4], filepath=db_row[6], posted=db_row[5])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get(uuid: str):
|
||||||
|
conn = Database.get_connection()
|
||||||
|
c = conn.cursor()
|
||||||
|
FETCH_QUERY = "SELECT * FROM PetPictures WHERE UUID=?"
|
||||||
|
c.execute(FETCH_QUERY, (uuid,))
|
||||||
|
row = c.fetchone()
|
||||||
|
return PetPicture.from_row(row)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_all():
|
||||||
|
conn = Database.get_connection()
|
||||||
|
c = conn.cursor()
|
||||||
|
FETCH_QUERY = "SELECT * FROM PetPictures ORDER BY created_at DESC"
|
||||||
|
c.execute(FETCH_QUERY)
|
||||||
|
rows = c.fetchall()
|
||||||
|
conn.close()
|
||||||
|
return [
|
||||||
|
PetPicture.from_row(row) for row in rows
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
146
main.py
Normal file
146
main.py
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
import os
|
||||||
|
|
||||||
|
from flask import Flask, jsonify, request, send_from_directory, render_template
|
||||||
|
from flask_cors import CORS
|
||||||
|
from PIL import Image
|
||||||
|
from pillow_heif import register_heif_opener
|
||||||
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
|
from images import PetPicture
|
||||||
|
|
||||||
|
app = Flask(__name__, static_folder="ppq-frontend/dist/static", template_folder="ppq-frontend/dist")
|
||||||
|
app.config['UPLOAD_FOLDER'] = 'uploads'
|
||||||
|
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
|
||||||
|
|
||||||
|
CORS(app)
|
||||||
|
|
||||||
|
register_heif_opener()
|
||||||
|
|
||||||
|
|
||||||
|
def allowed_file(filename):
|
||||||
|
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp', 'heic'}
|
||||||
|
return '.' in filename and \
|
||||||
|
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
||||||
|
|
||||||
|
def allowed_file(filename):
|
||||||
|
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'webp', 'heic', 'heif'}
|
||||||
|
return '.' in filename and \
|
||||||
|
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
|
||||||
|
|
||||||
|
def is_heic_file(filename, mimetype):
|
||||||
|
"""Check if file is HEIC/HEIF"""
|
||||||
|
extension = filename.rsplit('.', 1)[1].lower() if '.' in filename else ''
|
||||||
|
return extension in ['heic', 'heif'] or mimetype in ['image/heic', 'image/heif']
|
||||||
|
|
||||||
|
def convert_heic_image(file_stream, output_path, quality=85):
|
||||||
|
"""Convert HEIC image from file stream"""
|
||||||
|
try:
|
||||||
|
# Open image from stream
|
||||||
|
image = Image.open(file_stream)
|
||||||
|
|
||||||
|
# Convert to RGB if needed (HEIC can have different color modes)
|
||||||
|
if image.mode not in ['RGB', 'L']:
|
||||||
|
image = image.convert('RGB')
|
||||||
|
|
||||||
|
# Save as JPEG
|
||||||
|
image.save(output_path, 'JPEG', quality=quality, optimize=True)
|
||||||
|
return True, None
|
||||||
|
except Exception as e:
|
||||||
|
return False, str(e)
|
||||||
|
|
||||||
|
|
||||||
|
# Serve React static files
|
||||||
|
@app.route('/static/<path:filename>')
|
||||||
|
def static_files(filename):
|
||||||
|
return send_from_directory(app.static_folder, filename)
|
||||||
|
|
||||||
|
# Serve the React app for all routes (catch-all)
|
||||||
|
@app.route('/', defaults={'path': ''})
|
||||||
|
@app.route('/<path:path>')
|
||||||
|
def serve_react_app(path):
|
||||||
|
if path and os.path.exists(os.path.join(app.template_folder, path)):
|
||||||
|
return send_from_directory(app.template_folder, path)
|
||||||
|
return render_template('index.html')
|
||||||
|
|
||||||
|
# List pictures
|
||||||
|
# Create a picture entry
|
||||||
|
# Edit a picture metadata
|
||||||
|
@app.route("/api/pictures", methods=["GET", "POST", "PATCH"])
|
||||||
|
def list_pictures():
|
||||||
|
if request.method == "GET":
|
||||||
|
return jsonify([pp.get_json() for pp in PetPicture.get_all()])
|
||||||
|
elif request.method == "POST":
|
||||||
|
title = request.form.get("title")
|
||||||
|
contributor = request.form.get("contributor")
|
||||||
|
description = request.form.get("description")
|
||||||
|
image = request.files.get("image")
|
||||||
|
timestamp = int(datetime.now().timestamp())
|
||||||
|
|
||||||
|
# Validate
|
||||||
|
if image is None:
|
||||||
|
return jsonify({"error": "No file provided"}), 400
|
||||||
|
|
||||||
|
if image and allowed_file(image.filename):
|
||||||
|
# Check if it's HEIC
|
||||||
|
if is_heic_file(image.filename, image.mimetype):
|
||||||
|
# Convert HEIC to JPEG
|
||||||
|
original_name = image.filename.rsplit('.', 1)[0]
|
||||||
|
filename = f"{timestamp}_{original_name}.jpg"
|
||||||
|
output_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
|
||||||
|
|
||||||
|
# Reset file stream position
|
||||||
|
image.stream.seek(0)
|
||||||
|
|
||||||
|
success, error_msg = convert_heic_image(image.stream, output_path)
|
||||||
|
|
||||||
|
if not success:
|
||||||
|
return jsonify({'error': f'HEIC conversion failed: {error_msg}'}), 500
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Secure the filename
|
||||||
|
filename = secure_filename(image.filename)
|
||||||
|
|
||||||
|
# Save the file
|
||||||
|
image.save(os.path.join('uploads', filename))
|
||||||
|
|
||||||
|
pic = PetPicture(title=title,
|
||||||
|
contributor=contributor,
|
||||||
|
created_at=timestamp,
|
||||||
|
filepath=filename,
|
||||||
|
description=description)
|
||||||
|
pic.upsert()
|
||||||
|
|
||||||
|
return jsonify({'message': 'File uploaded successfully', 'filename': filename})
|
||||||
|
|
||||||
|
return jsonify({'error': 'Something went wrong'}), 400
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/uploads/<filename>')
|
||||||
|
def uploaded_file(filename):
|
||||||
|
return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
|
||||||
|
|
||||||
|
@app.route("/api/pictures/<string:uuid>", methods=["GET", "PATCH"])
|
||||||
|
def single_picture(uuid):
|
||||||
|
if request.method == "GET":
|
||||||
|
pet_picture = PetPicture.get(uuid=uuid)
|
||||||
|
return jsonify(pet_picture.get_json())
|
||||||
|
elif request.method == "PATCH":
|
||||||
|
data = request.get_json()
|
||||||
|
print(data)
|
||||||
|
pic = PetPicture(uuid=uuid,
|
||||||
|
title=data.get("title"),
|
||||||
|
contributor=data.get("contributor"),
|
||||||
|
created_at=data.get("created_at"),
|
||||||
|
filepath=data.get("filepath"),
|
||||||
|
description=data.get("description"))
|
||||||
|
pic.upsert()
|
||||||
|
return jsonify(pic.get_json()), 200
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("Hello from ppq!")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
16
ppq-frontend/.gitignore
vendored
Normal file
16
ppq-frontend/.gitignore
vendored
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Local
|
||||||
|
.DS_Store
|
||||||
|
*.local
|
||||||
|
*.log*
|
||||||
|
|
||||||
|
# Dist
|
||||||
|
node_modules
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# Profile
|
||||||
|
.rspack-profile-*/
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
36
ppq-frontend/README.md
Normal file
36
ppq-frontend/README.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Rsbuild project
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Install the dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm install
|
||||||
|
```
|
||||||
|
|
||||||
|
## Get started
|
||||||
|
|
||||||
|
Start the dev server, and the app will be available at [http://localhost:3000](http://localhost:3000).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Build the app for production:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm build
|
||||||
|
```
|
||||||
|
|
||||||
|
Preview the production build locally:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pnpm preview
|
||||||
|
```
|
||||||
|
|
||||||
|
## Learn more
|
||||||
|
|
||||||
|
To learn more about Rsbuild, check out the following resources:
|
||||||
|
|
||||||
|
- [Rsbuild documentation](https://rsbuild.rs) - explore Rsbuild features and APIs.
|
||||||
|
- [Rsbuild GitHub repository](https://github.com/web-infra-dev/rsbuild) - your feedback and contributions are welcome!
|
||||||
34
ppq-frontend/biome.json
Normal file
34
ppq-frontend/biome.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
|
||||||
|
"assist": {
|
||||||
|
"actions": {
|
||||||
|
"source": {
|
||||||
|
"organizeImports": "on"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vcs": {
|
||||||
|
"enabled": true,
|
||||||
|
"clientKind": "git",
|
||||||
|
"useIgnoreFile": true
|
||||||
|
},
|
||||||
|
"formatter": {
|
||||||
|
"indentStyle": "space"
|
||||||
|
},
|
||||||
|
"javascript": {
|
||||||
|
"formatter": {
|
||||||
|
"quoteStyle": "single"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"css": {
|
||||||
|
"parser": {
|
||||||
|
"cssModules": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"linter": {
|
||||||
|
"enabled": true,
|
||||||
|
"rules": {
|
||||||
|
"recommended": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
30
ppq-frontend/package.json
Normal file
30
ppq-frontend/package.json
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"name": "ppq-frontend",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"build": "rsbuild build",
|
||||||
|
"check": "biome check --write",
|
||||||
|
"dev": "rsbuild dev --open",
|
||||||
|
"format": "biome format --write",
|
||||||
|
"preview": "rsbuild preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^1.12.2",
|
||||||
|
"react": "^19.1.1",
|
||||||
|
"react-dom": "^19.1.1",
|
||||||
|
"react-hot-toast": "^2.6.0",
|
||||||
|
"react-router": "^7.9.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@biomejs/biome": "2.2.3",
|
||||||
|
"@rsbuild/core": "^1.5.6",
|
||||||
|
"@rsbuild/plugin-react": "^1.4.0",
|
||||||
|
"@tailwindcss/postcss": "^4.1.13",
|
||||||
|
"@types/react": "^19.1.13",
|
||||||
|
"@types/react-dom": "^19.1.9",
|
||||||
|
"tailwindcss": "^4.1.13",
|
||||||
|
"typescript": "^5.9.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
5
ppq-frontend/postcss.config.mjs
Normal file
5
ppq-frontend/postcss.config.mjs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
plugins: {
|
||||||
|
'@tailwindcss/postcss': {},
|
||||||
|
},
|
||||||
|
};
|
||||||
9
ppq-frontend/rsbuild.config.ts
Normal file
9
ppq-frontend/rsbuild.config.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import { defineConfig } from "@rsbuild/core";
|
||||||
|
import { pluginReact } from "@rsbuild/plugin-react";
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [pluginReact()],
|
||||||
|
html: {
|
||||||
|
title: "ppq!",
|
||||||
|
},
|
||||||
|
});
|
||||||
11
ppq-frontend/src/App.css
Normal file
11
ppq-frontend/src/App.css
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
@import 'tailwindcss';
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: Inter, Avenir, Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
min-height: 100vh;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
38
ppq-frontend/src/App.tsx
Normal file
38
ppq-frontend/src/App.tsx
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import "./App.css";
|
||||||
|
|
||||||
|
import { useState } from "react";
|
||||||
|
|
||||||
|
import { BrowserRouter, Routes, Route, Link } from "react-router";
|
||||||
|
import { Toaster } from "react-hot-toast";
|
||||||
|
|
||||||
|
import { CreateEditPostPage } from "./CreateEditPostPage.tsx";
|
||||||
|
import { ListPage } from "./ListPage";
|
||||||
|
|
||||||
|
const App = () => {
|
||||||
|
return (
|
||||||
|
<div className="content bg-fuchsia-200">
|
||||||
|
<Toaster />
|
||||||
|
<div className="flex flex-col gap-8">
|
||||||
|
<div className="flex place-content-between flex-row px-16 py-8 sticky top-0">
|
||||||
|
<p className="text-3xl font-bold">ppq</p>
|
||||||
|
<Link to="/create">
|
||||||
|
<h1>upload a new picture</h1>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
<Routes>
|
||||||
|
<Route path="/" element={<ListPage />} />
|
||||||
|
<Route
|
||||||
|
path="/edit/:uuid"
|
||||||
|
element={<CreateEditPostPage />}
|
||||||
|
/>
|
||||||
|
<Route
|
||||||
|
path="/create"
|
||||||
|
element={<CreateEditPostPage isCreate />}
|
||||||
|
/>
|
||||||
|
</Routes>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default App;
|
||||||
75
ppq-frontend/src/Card.tsx
Normal file
75
ppq-frontend/src/Card.tsx
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
|
import { NavLink, Link } from "react-router";
|
||||||
|
|
||||||
|
type CardProps = {
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
timestamp: number;
|
||||||
|
contributor: string;
|
||||||
|
uuid: string;
|
||||||
|
filepath: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const Card = ({
|
||||||
|
title,
|
||||||
|
description,
|
||||||
|
timestamp,
|
||||||
|
contributor,
|
||||||
|
uuid,
|
||||||
|
filepath,
|
||||||
|
}: CardProps) => {
|
||||||
|
const [showMenu, setShowMenu] = useState<boolean>(false);
|
||||||
|
console.log(filepath);
|
||||||
|
return (
|
||||||
|
<div className="flex flex-row justify-center grow">
|
||||||
|
<div className="rounded-xl shadow-xl max-w-96 min-w-lg p-8 border border-solid border-stone-100 bg-neutral-100">
|
||||||
|
<img className="pb-4" src={"/uploads/" + filepath} />
|
||||||
|
<p className="font-bold text-xl">{title}</p>
|
||||||
|
<p className="text-lg italic">
|
||||||
|
submitted {timestamp} by{" "}
|
||||||
|
<span className="font-bold">{contributor}</span>
|
||||||
|
</p>
|
||||||
|
<p className="text-lg">
|
||||||
|
<span className="font-bold">Description: </span>
|
||||||
|
{description}
|
||||||
|
</p>
|
||||||
|
<hr className="m-4" />
|
||||||
|
<div className="flex flex-col gap-4">
|
||||||
|
<div className="flex flex-row gap-4">
|
||||||
|
<div className="bg-pink-500 hover:bg-pink-700 cursor-pointer outline px-3 py-2 rounded-md grow justify-items-center">
|
||||||
|
<p className="font-bold text-xl text-neutral-50">
|
||||||
|
like
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
className="bg-slate-500 hover:bg-slate-700 cursor-pointer outline px-3 py-2 rounded-md grow justify-items-center"
|
||||||
|
onClick={() => setShowMenu(!showMenu)}
|
||||||
|
>
|
||||||
|
<p className="font-bold text-xl text-neutral-50">
|
||||||
|
menu
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{showMenu && (
|
||||||
|
<>
|
||||||
|
<Link to={`/edit/${uuid}`}>
|
||||||
|
<div className="bg-yellow-500 hover:bg-yellow-700 cursor-pointer outline px-3 py-2 rounded-md grow justify-items-center">
|
||||||
|
<p className="font-bold text-xl text-neutral-50">
|
||||||
|
edit
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</Link>
|
||||||
|
<div className="bg-green-500 hover:bg-green-700 cursor-pointer outline px-3 py-2 rounded-md grow justify-items-center">
|
||||||
|
<p className="font-bold text-xl text-neutral-50">
|
||||||
|
mark as posted
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
229
ppq-frontend/src/CreateEditPostPage.tsx
Normal file
229
ppq-frontend/src/CreateEditPostPage.tsx
Normal file
@@ -0,0 +1,229 @@
|
|||||||
|
import { useEffect, useState, ChangeEvent } from "react";
|
||||||
|
|
||||||
|
import axios from "axios";
|
||||||
|
import toast from "react-hot-toast";
|
||||||
|
import { useNavigate, useParams } from "react-router";
|
||||||
|
|
||||||
|
type CreateEditProps = {
|
||||||
|
isCreate?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const CreateEditPostPage = ({ isCreate = false }: CreateEditProps) => {
|
||||||
|
let { uuid } = useParams();
|
||||||
|
let navigate = useNavigate();
|
||||||
|
const [title, setTitle] = useState<string>("");
|
||||||
|
const [contributor, setContributor] = useState<string>("");
|
||||||
|
const [description, setDescription] = useState<string>("");
|
||||||
|
const [filepath, setFilepath] = useState<string>("");
|
||||||
|
const [immutableProperties, setImmutableProperties] = useState({});
|
||||||
|
const [loading, setLoading] = useState<boolean>(false);
|
||||||
|
const [uploadFile, setUploadFile] = useState(null);
|
||||||
|
const [uploadedImageURI, setUploadedImageURI] = useState("");
|
||||||
|
|
||||||
|
const [titleError, setTitleError] = useState(false);
|
||||||
|
const [contributorError, setContributorError] = useState(false);
|
||||||
|
const [descriptionError, setDescriptionError] = useState(false);
|
||||||
|
const [fileError, setFileError] = useState(false);
|
||||||
|
|
||||||
|
const headerTitle = isCreate ? "Upload a pet photo" : "Edit a post";
|
||||||
|
const headerDescription = isCreate
|
||||||
|
? "Add a description"
|
||||||
|
: "Edit the description";
|
||||||
|
|
||||||
|
const handleTitleChange = (event: ChangeEvent<HTMLInputElement>) => {
|
||||||
|
const title = event.target.value;
|
||||||
|
setTitle(event.target.value);
|
||||||
|
setTitleError(title.length == 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleContributorChange = (event: ChangeEvent<HTMLInputElement>) => {
|
||||||
|
const contributor = event.target.value;
|
||||||
|
setContributor(event.target.value);
|
||||||
|
setContributorError(contributor.length == 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDescriptionChange = (event: ChangeEvent<HTMLInputElement>) => {
|
||||||
|
const description = event.target.value;
|
||||||
|
setDescription(description);
|
||||||
|
setDescriptionError(description.length == 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
const validateForm = () => {
|
||||||
|
if (isCreate) {
|
||||||
|
let isValid = true;
|
||||||
|
if (titleError || title.length == 0) {
|
||||||
|
setTitleError(true);
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (contributorError || contributor.length == 0) {
|
||||||
|
setContributorError(true);
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (descriptionError || description.length == 0) {
|
||||||
|
setDescriptionError(true);
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileError || uploadedImageURI.length == 0) {
|
||||||
|
setDescriptionError(true);
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isValid;
|
||||||
|
} else {
|
||||||
|
let isValid = true;
|
||||||
|
if (titleError || title.length == 0) {
|
||||||
|
setTitleError(true);
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (descriptionError || description.length == 0) {
|
||||||
|
setDescriptionError(true);
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
return isValid;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSubmit = () => {
|
||||||
|
if (!validateForm()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isCreate) {
|
||||||
|
const payload = {
|
||||||
|
title: title,
|
||||||
|
description: description,
|
||||||
|
...immutableProperties,
|
||||||
|
};
|
||||||
|
|
||||||
|
axios
|
||||||
|
.patch(`/api/pictures/${uuid}`, payload)
|
||||||
|
.then((response) => navigate("/"));
|
||||||
|
} else {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("title", title);
|
||||||
|
formData.append("contributor", contributor);
|
||||||
|
formData.append("description", description);
|
||||||
|
formData.append("title", title);
|
||||||
|
|
||||||
|
formData.append("image", uploadFile);
|
||||||
|
|
||||||
|
axios
|
||||||
|
.post(`/api/pictures`, formData)
|
||||||
|
.then((result) => navigate("/"));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleFileChange = (event) => {
|
||||||
|
const file = event.target.files[0]; // Get the first file
|
||||||
|
setUploadFile(file);
|
||||||
|
if (file) {
|
||||||
|
setUploadedImageURI(URL.createObjectURL(event.target.files[0]));
|
||||||
|
} else {
|
||||||
|
setUploadedImageURI("");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isCreate) {
|
||||||
|
axios.get(`/api/pictures/${uuid}`).then((result) => {
|
||||||
|
const picture = result.data;
|
||||||
|
setTitle(picture.title);
|
||||||
|
setDescription(picture.description);
|
||||||
|
setContributor(picture.contributor);
|
||||||
|
setFilepath(picture.filepath);
|
||||||
|
setImmutableProperties({
|
||||||
|
uuid: picture.uuid,
|
||||||
|
contributor: picture.contributor,
|
||||||
|
created_at: picture.created_at,
|
||||||
|
posted: picture.posted,
|
||||||
|
filepath: picture.filepath,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setTitle("");
|
||||||
|
setDescription("");
|
||||||
|
setContributor("");
|
||||||
|
setFilepath("");
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex flex-row justify-center grow">
|
||||||
|
<div className="rounded-xl shadow-xl max-w-96 min-w-lg p-8 border border-solid border-stone-100 bg-neutral-100">
|
||||||
|
<div className="flex flex-col gap-4">
|
||||||
|
<p className="text-3xl font-bold">{headerTitle}</p>
|
||||||
|
{isCreate ? (
|
||||||
|
<div className="flex flex-col gap-2">
|
||||||
|
<img src={uploadedImageURI} />
|
||||||
|
<p className="text-lg font-bold"> Upload a file</p>
|
||||||
|
<input
|
||||||
|
type="file"
|
||||||
|
accept="image/*"
|
||||||
|
class="file:mr-4 file:border cursor-pointer file:cursor-pointer file:rounded-full file:border file:bg-violet-50 file:px-4 file:py-2 file:text-sm file:font-semibold file:text-violet-700 hover:file:bg-violet-100 dark:file:bg-violet-600 dark:file:text-violet-100 dark:hover:file:bg-violet-500"
|
||||||
|
onChange={handleFileChange}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<img className="pb-4" src={`/uploads/${filepath}`} />
|
||||||
|
)}
|
||||||
|
<div className="flex flex-row gap-2">
|
||||||
|
<p className="text-lg font-bold">Title: </p>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={title}
|
||||||
|
onChange={handleTitleChange}
|
||||||
|
className={`p-1 rounded-md flex grow ${titleError ? "border-2 border-red-300" : "border"}`}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-row gap-2">
|
||||||
|
<p className="text-lg font-bold">Contributor: </p>
|
||||||
|
{isCreate ? (
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={contributor}
|
||||||
|
onChange={handleContributorChange}
|
||||||
|
className={`p-1 rounded-md flex grow ${contributorError ? "border-2 border-red-300" : "border"}`}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
value={contributor}
|
||||||
|
disabled
|
||||||
|
className="p-1 border rounded-md flex grow bg-stone-200 text-stone-500"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col gap-1">
|
||||||
|
<p className="text-lg font-bold">{headerDescription}</p>
|
||||||
|
<textarea
|
||||||
|
type="text"
|
||||||
|
value={description}
|
||||||
|
onChange={handleDescriptionChange}
|
||||||
|
className={`p-3 rounded-md ${descriptionError ? "border-2 border-red-300" : "border"}`}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className="bg-green-500 hover:bg-green-700 cursor-pointer outline px-3 py-2 rounded-md grow justify-items-center"
|
||||||
|
onClick={() => handleSubmit()}
|
||||||
|
>
|
||||||
|
<p className="font-bold text-xl text-neutral-50">
|
||||||
|
save
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className="bg-red-500 hover:bg-red-700 cursor-pointer outline px-3 py-2 rounded-md grow justify-items-center"
|
||||||
|
onClick={() => navigate("/")}
|
||||||
|
>
|
||||||
|
<p className="font-bold text-xl text-neutral-50">
|
||||||
|
cancel
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
31
ppq-frontend/src/ListPage.tsx
Normal file
31
ppq-frontend/src/ListPage.tsx
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { useEffect, useState } from "react";
|
||||||
|
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
|
import { Card } from "./Card";
|
||||||
|
|
||||||
|
export const ListPage = () => {
|
||||||
|
const [petPictures, setPetPictures] = useState([]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
axios
|
||||||
|
.get("/api/pictures")
|
||||||
|
.then((result) => setPetPictures(result.data));
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{petPictures.map((picture) => (
|
||||||
|
<Card
|
||||||
|
key={picture.uuid}
|
||||||
|
uuid={picture.uuid}
|
||||||
|
title={picture.title}
|
||||||
|
description={picture.description}
|
||||||
|
timestamp={picture.created_at}
|
||||||
|
contributor={picture.contributor}
|
||||||
|
filepath={picture.filepath}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
11
ppq-frontend/src/env.d.ts
vendored
Normal file
11
ppq-frontend/src/env.d.ts
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/// <reference types="@rsbuild/core/types" />
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imports the SVG file as a React component.
|
||||||
|
* @requires [@rsbuild/plugin-svgr](https://npmjs.com/package/@rsbuild/plugin-svgr)
|
||||||
|
*/
|
||||||
|
declare module '*.svg?react' {
|
||||||
|
import type React from 'react';
|
||||||
|
const ReactComponent: React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
|
||||||
|
export default ReactComponent;
|
||||||
|
}
|
||||||
16
ppq-frontend/src/index.tsx
Normal file
16
ppq-frontend/src/index.tsx
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import ReactDOM from 'react-dom/client';
|
||||||
|
import App from './App';
|
||||||
|
import { BrowserRouter, Routes, Route } from "react-router";
|
||||||
|
|
||||||
|
const rootEl = document.getElementById('root');
|
||||||
|
if (rootEl) {
|
||||||
|
const root = ReactDOM.createRoot(rootEl);
|
||||||
|
root.render(
|
||||||
|
<React.StrictMode>
|
||||||
|
<BrowserRouter>
|
||||||
|
<App/>
|
||||||
|
</BrowserRouter>
|
||||||
|
</React.StrictMode>,
|
||||||
|
);
|
||||||
|
}
|
||||||
25
ppq-frontend/tsconfig.json
Normal file
25
ppq-frontend/tsconfig.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"lib": ["DOM", "ES2020"],
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"target": "ES2020",
|
||||||
|
"noEmit": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
|
||||||
|
/* modules */
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleDetection": "force",
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"verbatimModuleSyntax": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"noUncheckedSideEffectImports": true,
|
||||||
|
|
||||||
|
/* type checking */
|
||||||
|
"strict": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true
|
||||||
|
},
|
||||||
|
"include": ["src"]
|
||||||
|
}
|
||||||
849
ppq-frontend/yarn.lock
Normal file
849
ppq-frontend/yarn.lock
Normal file
@@ -0,0 +1,849 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@alloc/quick-lru@^5.2.0":
|
||||||
|
version "5.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30"
|
||||||
|
integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==
|
||||||
|
|
||||||
|
"@biomejs/biome@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-2.2.3.tgz#9d17991c80e006c5ca3e21bebe84b7afd71559e3"
|
||||||
|
integrity sha512-9w0uMTvPrIdvUrxazZ42Ib7t8Y2yoGLKLdNne93RLICmaHw7mcLv4PPb5LvZLJF3141gQHiCColOh/v6VWlWmg==
|
||||||
|
optionalDependencies:
|
||||||
|
"@biomejs/cli-darwin-arm64" "2.2.3"
|
||||||
|
"@biomejs/cli-darwin-x64" "2.2.3"
|
||||||
|
"@biomejs/cli-linux-arm64" "2.2.3"
|
||||||
|
"@biomejs/cli-linux-arm64-musl" "2.2.3"
|
||||||
|
"@biomejs/cli-linux-x64" "2.2.3"
|
||||||
|
"@biomejs/cli-linux-x64-musl" "2.2.3"
|
||||||
|
"@biomejs/cli-win32-arm64" "2.2.3"
|
||||||
|
"@biomejs/cli-win32-x64" "2.2.3"
|
||||||
|
|
||||||
|
"@biomejs/cli-darwin-arm64@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.3.tgz#e18240343fa705dafb08ba72a7b0e88f04a8be3e"
|
||||||
|
integrity sha512-OrqQVBpadB5eqzinXN4+Q6honBz+tTlKVCsbEuEpljK8ASSItzIRZUA02mTikl3H/1nO2BMPFiJ0nkEZNy3B1w==
|
||||||
|
|
||||||
|
"@biomejs/cli-darwin-x64@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.3.tgz#964b51c9f649e3a725f6f43e75c4173b9ab8a3ae"
|
||||||
|
integrity sha512-OCdBpb1TmyfsTgBAM1kPMXyYKTohQ48WpiN9tkt9xvU6gKVKHY4oVwteBebiOqyfyzCNaSiuKIPjmHjUZ2ZNMg==
|
||||||
|
|
||||||
|
"@biomejs/cli-linux-arm64-musl@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.3.tgz#1756c37960d5585ca865e184539b113e48719b41"
|
||||||
|
integrity sha512-q3w9jJ6JFPZPeqyvwwPeaiS/6NEszZ+pXKF+IczNo8Xj6fsii45a4gEEicKyKIytalV+s829ACZujQlXAiVLBQ==
|
||||||
|
|
||||||
|
"@biomejs/cli-linux-arm64@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.3.tgz#036c6334d5b09b51233ce5120b18f4c89a15a74c"
|
||||||
|
integrity sha512-g/Uta2DqYpECxG+vUmTAmUKlVhnGEcY7DXWgKP8ruLRa8Si1QHsWknPY3B/wCo0KgYiFIOAZ9hjsHfNb9L85+g==
|
||||||
|
|
||||||
|
"@biomejs/cli-linux-x64-musl@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.3.tgz#e6cce01910b9f56c1645c5518595d0b1eb38c245"
|
||||||
|
integrity sha512-y76Dn4vkP1sMRGPFlNc+OTETBhGPJ90jY3il6jAfur8XWrYBQV3swZ1Jo0R2g+JpOeeoA0cOwM7mJG6svDz79w==
|
||||||
|
|
||||||
|
"@biomejs/cli-linux-x64@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.3.tgz#f328e7cfde92fad6c7ad215df1f51b146b4ed007"
|
||||||
|
integrity sha512-LEtyYL1fJsvw35CxrbQ0gZoxOG3oZsAjzfRdvRBRHxOpQ91Q5doRVjvWW/wepgSdgk5hlaNzfeqpyGmfSD0Eyw==
|
||||||
|
|
||||||
|
"@biomejs/cli-win32-arm64@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.3.tgz#b8d64ca6dc1c50b8f3d42475afd31b7b44460935"
|
||||||
|
integrity sha512-Ms9zFYzjcJK7LV+AOMYnjN3pV3xL8Prxf9aWdDVL74onLn5kcvZ1ZMQswE5XHtnd/r/0bnUd928Rpbs14BzVmA==
|
||||||
|
|
||||||
|
"@biomejs/cli-win32-x64@2.2.3":
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.3.tgz#ecafffddf0c0675c825735c7cc917cbc8c538433"
|
||||||
|
integrity sha512-gvCpewE7mBwBIpqk1YrUqNR4mCiyJm6UI3YWQQXkedSSEwzRdodRpaKhbdbHw1/hmTWOVXQ+Eih5Qctf4TCVOQ==
|
||||||
|
|
||||||
|
"@emnapi/core@^1.4.3", "@emnapi/core@^1.4.5", "@emnapi/core@^1.5.0":
|
||||||
|
version "1.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.5.0.tgz#85cd84537ec989cebb2343606a1ee663ce4edaf0"
|
||||||
|
integrity sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==
|
||||||
|
dependencies:
|
||||||
|
"@emnapi/wasi-threads" "1.1.0"
|
||||||
|
tslib "^2.4.0"
|
||||||
|
|
||||||
|
"@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.4.5", "@emnapi/runtime@^1.5.0":
|
||||||
|
version "1.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.5.0.tgz#9aebfcb9b17195dce3ab53c86787a6b7d058db73"
|
||||||
|
integrity sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==
|
||||||
|
dependencies:
|
||||||
|
tslib "^2.4.0"
|
||||||
|
|
||||||
|
"@emnapi/wasi-threads@1.1.0", "@emnapi/wasi-threads@^1.0.4":
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz#60b2102fddc9ccb78607e4a3cf8403ea69be41bf"
|
||||||
|
integrity sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==
|
||||||
|
dependencies:
|
||||||
|
tslib "^2.4.0"
|
||||||
|
|
||||||
|
"@isaacs/fs-minipass@^4.0.0":
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
|
||||||
|
integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
|
||||||
|
dependencies:
|
||||||
|
minipass "^7.0.4"
|
||||||
|
|
||||||
|
"@jridgewell/gen-mapping@^0.3.5":
|
||||||
|
version "0.3.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
|
||||||
|
integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/sourcemap-codec" "^1.5.0"
|
||||||
|
"@jridgewell/trace-mapping" "^0.3.24"
|
||||||
|
|
||||||
|
"@jridgewell/remapping@^2.3.4":
|
||||||
|
version "2.3.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
|
||||||
|
integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/gen-mapping" "^0.3.5"
|
||||||
|
"@jridgewell/trace-mapping" "^0.3.24"
|
||||||
|
|
||||||
|
"@jridgewell/resolve-uri@^3.1.0":
|
||||||
|
version "3.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
|
||||||
|
integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
|
||||||
|
|
||||||
|
"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5":
|
||||||
|
version "1.5.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
|
||||||
|
integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
|
||||||
|
|
||||||
|
"@jridgewell/trace-mapping@^0.3.24":
|
||||||
|
version "0.3.31"
|
||||||
|
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0"
|
||||||
|
integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/resolve-uri" "^3.1.0"
|
||||||
|
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||||
|
|
||||||
|
"@module-federation/error-codes@0.18.0":
|
||||||
|
version "0.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@module-federation/error-codes/-/error-codes-0.18.0.tgz#00830ece3b5b6bcda0a874a8426bcd94599bf738"
|
||||||
|
integrity sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==
|
||||||
|
|
||||||
|
"@module-federation/runtime-core@0.18.0":
|
||||||
|
version "0.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@module-federation/runtime-core/-/runtime-core-0.18.0.tgz#d696bce1001b42a3074613a9e51b1f9e843f5492"
|
||||||
|
integrity sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==
|
||||||
|
dependencies:
|
||||||
|
"@module-federation/error-codes" "0.18.0"
|
||||||
|
"@module-federation/sdk" "0.18.0"
|
||||||
|
|
||||||
|
"@module-federation/runtime-tools@0.18.0":
|
||||||
|
version "0.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.18.0.tgz#8eddf50178974e0b2caaf8ad42e798eff3ab98e2"
|
||||||
|
integrity sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==
|
||||||
|
dependencies:
|
||||||
|
"@module-federation/runtime" "0.18.0"
|
||||||
|
"@module-federation/webpack-bundler-runtime" "0.18.0"
|
||||||
|
|
||||||
|
"@module-federation/runtime@0.18.0":
|
||||||
|
version "0.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.18.0.tgz#875486c67a0038d474a7efc890be5ee6f579ad38"
|
||||||
|
integrity sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==
|
||||||
|
dependencies:
|
||||||
|
"@module-federation/error-codes" "0.18.0"
|
||||||
|
"@module-federation/runtime-core" "0.18.0"
|
||||||
|
"@module-federation/sdk" "0.18.0"
|
||||||
|
|
||||||
|
"@module-federation/sdk@0.18.0":
|
||||||
|
version "0.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.18.0.tgz#47bdbc23768fc2b9aae4f70bad47d6454349c1c1"
|
||||||
|
integrity sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==
|
||||||
|
|
||||||
|
"@module-federation/webpack-bundler-runtime@0.18.0":
|
||||||
|
version "0.18.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.18.0.tgz#ba81a43800e6ceaff104a6956d9088b84df5a496"
|
||||||
|
integrity sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==
|
||||||
|
dependencies:
|
||||||
|
"@module-federation/runtime" "0.18.0"
|
||||||
|
"@module-federation/sdk" "0.18.0"
|
||||||
|
|
||||||
|
"@napi-rs/wasm-runtime@^0.2.12":
|
||||||
|
version "0.2.12"
|
||||||
|
resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2"
|
||||||
|
integrity sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==
|
||||||
|
dependencies:
|
||||||
|
"@emnapi/core" "^1.4.3"
|
||||||
|
"@emnapi/runtime" "^1.4.3"
|
||||||
|
"@tybys/wasm-util" "^0.10.0"
|
||||||
|
|
||||||
|
"@napi-rs/wasm-runtime@^1.0.5":
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.5.tgz#1fc8952d993d476c9e57999a3b886239119ce476"
|
||||||
|
integrity sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==
|
||||||
|
dependencies:
|
||||||
|
"@emnapi/core" "^1.5.0"
|
||||||
|
"@emnapi/runtime" "^1.5.0"
|
||||||
|
"@tybys/wasm-util" "^0.10.1"
|
||||||
|
|
||||||
|
"@rsbuild/core@^1.5.6":
|
||||||
|
version "1.5.12"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rsbuild/core/-/core-1.5.12.tgz#02b190b60664633895a293886d94b287e0b1e3ce"
|
||||||
|
integrity sha512-DpinE1If6WRTwQYqH+PRtJo3zshkDYHfIcWq4lTtfsPfPLrXshmRXBam3BS1RRu4v2gGT+LCNiUefftsmcmL0A==
|
||||||
|
dependencies:
|
||||||
|
"@rspack/core" "1.5.7"
|
||||||
|
"@rspack/lite-tapable" "~1.0.1"
|
||||||
|
"@swc/helpers" "^0.5.17"
|
||||||
|
core-js "~3.45.1"
|
||||||
|
jiti "^2.6.0"
|
||||||
|
|
||||||
|
"@rsbuild/plugin-react@^1.4.0":
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rsbuild/plugin-react/-/plugin-react-1.4.1.tgz#83d05dd5359b9e6f327e39238f0233fe5a7f0ba8"
|
||||||
|
integrity sha512-kahvnfRPQTsG0tReR6h0KuVfyjKJfpv/PoU5qW5SDkON7vmbGn8Jx7l3fI+yU3lR/7qDiAO19QnNjkqxPsFT3Q==
|
||||||
|
dependencies:
|
||||||
|
"@rspack/plugin-react-refresh" "^1.5.1"
|
||||||
|
react-refresh "^0.17.0"
|
||||||
|
|
||||||
|
"@rspack/binding-darwin-arm64@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.5.7.tgz#a6d72c3bc4ced356e0e014231f2759261950af0b"
|
||||||
|
integrity sha512-prQ/vgJxOPdlYiR4gVeOEKofTCEOu70JQIQApqFnw8lKM7rd9ag8ogDNqmc2L/GGXGHLAqds28oeKXRlzYf7+Q==
|
||||||
|
|
||||||
|
"@rspack/binding-darwin-x64@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.5.7.tgz#92210902db273773bc2bcb1e587d66e025b9d1b0"
|
||||||
|
integrity sha512-FPqiWSbEEerqfJrGnYe68svvl6NyuQFAb3qqFe/Q0MqFhBYmAZwa0R2/ylugCdgFLZxmkFuWqpDgItpvJb/E3Q==
|
||||||
|
|
||||||
|
"@rspack/binding-linux-arm64-gnu@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.5.7.tgz#a8042c41264c5e8603d67e56277d45c2b012f0cd"
|
||||||
|
integrity sha512-fwy+NY+0CHrZqqzDrjPBlTuK53W4dG5EEg/QQFAE7KVM+okRqPk8tg45bJ5628rCNLe13GDmPIE107LmgspNqA==
|
||||||
|
|
||||||
|
"@rspack/binding-linux-arm64-musl@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.5.7.tgz#15421d912a758f63d19c104b6d40b96b4ae09e03"
|
||||||
|
integrity sha512-576u/0F4ZUzpHckFme4vQ0sSxjE+B/gVP4tNJ+P6bJaclXLFXV4icbjTUQwOIgmA1EQz/JFeKGGJZ4p6mowpBQ==
|
||||||
|
|
||||||
|
"@rspack/binding-linux-x64-gnu@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.5.7.tgz#0b3c973c8c900ba774e0f5ea275e6dbdace9c16f"
|
||||||
|
integrity sha512-brSHywXjjeuWkv0ywgxS4VgDgquarEb4XGr+eXhOaPcc8x2rNefyc4hErplrI7+oxPXVuGK5VE4ZH5bj3Yknvg==
|
||||||
|
|
||||||
|
"@rspack/binding-linux-x64-musl@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.5.7.tgz#b7a9f984686a07fa66762acb18af1a4ad1800a87"
|
||||||
|
integrity sha512-HcS0DzbLlWCwVfYcWMbTgILh4GELD6m4CZoFEhIr4fJCJi0p8NgLYycy1QtDhaUjs8TKalmyMwHrJwGnD141JA==
|
||||||
|
|
||||||
|
"@rspack/binding-wasm32-wasi@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.5.7.tgz#c0a30d4700725723c6198961dbc7d2ecfa713e21"
|
||||||
|
integrity sha512-uTRUEuK+TVlvUBSWXVoxD+6JTN+rvtRqVlO+A7I7VnOY7p9Rpvk1sXcHtEwg/XuDCq4DALnvlzbFLh7G3zILvw==
|
||||||
|
dependencies:
|
||||||
|
"@napi-rs/wasm-runtime" "^1.0.5"
|
||||||
|
|
||||||
|
"@rspack/binding-win32-arm64-msvc@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.5.7.tgz#53184c858b08e47429a1b281a18d9f30e5a06806"
|
||||||
|
integrity sha512-dFHrXRUmMTkxEn/Uw2RLbIckKfi0Zmn2NnEXwedWdyRgZW4Vhk7+VBxM22O/CHZmAGt12Ol25yTuVv58ANLEKA==
|
||||||
|
|
||||||
|
"@rspack/binding-win32-ia32-msvc@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.5.7.tgz#dc12761a5903e6f1aefd368158d450bdfe30d563"
|
||||||
|
integrity sha512-PNtnOIUzE9p/Fbl6l/1Zs7bhn8ccTlaHTgZgQq0sO/QxjLlbU0WPjRl+YLo27cAningSOAbANuYlN8vAcuimrw==
|
||||||
|
|
||||||
|
"@rspack/binding-win32-x64-msvc@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.5.7.tgz#b7f5e023edcb299782e9e396bfa4767476bd1bde"
|
||||||
|
integrity sha512-22gTaYkwaIUvyXRxf1RVnFTJPqF2hD1pgAQNBIz7kYybe6vvSZ6KInW4WyG4vjYKrJg/cbS4QvtlLn0lYXrdIw==
|
||||||
|
|
||||||
|
"@rspack/binding@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/binding/-/binding-1.5.7.tgz#4154710c38c85312d9e54615b5721106aad04e9a"
|
||||||
|
integrity sha512-/fFrf4Yu8Tc0yXBw33g2++turdld1MDphLiLg05bx92fOVI1MafocwPvm35e3y1z7CtlQJ2Bmvzhi6APJShKxg==
|
||||||
|
optionalDependencies:
|
||||||
|
"@rspack/binding-darwin-arm64" "1.5.7"
|
||||||
|
"@rspack/binding-darwin-x64" "1.5.7"
|
||||||
|
"@rspack/binding-linux-arm64-gnu" "1.5.7"
|
||||||
|
"@rspack/binding-linux-arm64-musl" "1.5.7"
|
||||||
|
"@rspack/binding-linux-x64-gnu" "1.5.7"
|
||||||
|
"@rspack/binding-linux-x64-musl" "1.5.7"
|
||||||
|
"@rspack/binding-wasm32-wasi" "1.5.7"
|
||||||
|
"@rspack/binding-win32-arm64-msvc" "1.5.7"
|
||||||
|
"@rspack/binding-win32-ia32-msvc" "1.5.7"
|
||||||
|
"@rspack/binding-win32-x64-msvc" "1.5.7"
|
||||||
|
|
||||||
|
"@rspack/core@1.5.7":
|
||||||
|
version "1.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/core/-/core-1.5.7.tgz#e5d3b72637d7f9463e3822615c9a7f36dd570b92"
|
||||||
|
integrity sha512-57ey3wafK/g+B9zLdCiIrX3eTK8rFEM3yvxBUb2ro3ZtAaCGm4y7xERcXZJNn4D01pjzzCJ/u1ezpQmsZYLP7A==
|
||||||
|
dependencies:
|
||||||
|
"@module-federation/runtime-tools" "0.18.0"
|
||||||
|
"@rspack/binding" "1.5.7"
|
||||||
|
"@rspack/lite-tapable" "1.0.1"
|
||||||
|
|
||||||
|
"@rspack/lite-tapable@1.0.1", "@rspack/lite-tapable@~1.0.1":
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz#d4540a5d28bd6177164bc0ba0bee4bdec0458591"
|
||||||
|
integrity sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==
|
||||||
|
|
||||||
|
"@rspack/plugin-react-refresh@^1.5.1":
|
||||||
|
version "1.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.5.1.tgz#b3349d20e1985f7f87405d17d5fe1bbd6f7954f4"
|
||||||
|
integrity sha512-GT3KV1GSmIXO8dQg6taNf9AuZ8XHEs8cZqRn5mC2GT6DPCvUA/ZKezIGsHTyH+HMEbJnJ/T8yYeJnvnzuUcqAQ==
|
||||||
|
dependencies:
|
||||||
|
error-stack-parser "^2.1.4"
|
||||||
|
html-entities "^2.6.0"
|
||||||
|
|
||||||
|
"@swc/helpers@^0.5.17":
|
||||||
|
version "0.5.17"
|
||||||
|
resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971"
|
||||||
|
integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==
|
||||||
|
dependencies:
|
||||||
|
tslib "^2.8.0"
|
||||||
|
|
||||||
|
"@tailwindcss/node@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/node/-/node-4.1.13.tgz#cecd0dfa4f573fd37fdbaf29403b8dba9d50f118"
|
||||||
|
integrity sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/remapping" "^2.3.4"
|
||||||
|
enhanced-resolve "^5.18.3"
|
||||||
|
jiti "^2.5.1"
|
||||||
|
lightningcss "1.30.1"
|
||||||
|
magic-string "^0.30.18"
|
||||||
|
source-map-js "^1.2.1"
|
||||||
|
tailwindcss "4.1.13"
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-android-arm64@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz#34e02dc9bbb3902c36800c75edad3f033cd33ce3"
|
||||||
|
integrity sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-darwin-arm64@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz#f36dca1f6bc28ac6d81ea6072d9455aa2f5198bb"
|
||||||
|
integrity sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-darwin-x64@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz#259aa6d8c58c6d4fd01e856ea731924ba2afcab9"
|
||||||
|
integrity sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-freebsd-x64@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz#b9987fb460ed24d4227392970e6af8e90784d434"
|
||||||
|
integrity sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz#ed157b7fa2ea79cc97f196383f461c9be1acc309"
|
||||||
|
integrity sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-linux-arm64-gnu@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz#5732ad1e5679d7d93999563e63728a813f3d121c"
|
||||||
|
integrity sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-linux-arm64-musl@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz#987837bc5bf88ef84e2aef38c6cbebed0cf40d81"
|
||||||
|
integrity sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-linux-x64-gnu@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz#a673731e1c8ae6e97bdacd6140ec08cdc23121fb"
|
||||||
|
integrity sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-linux-x64-musl@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz#5201013bff73ab309ad5fe0ff0abe1ad51b2bd63"
|
||||||
|
integrity sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-wasm32-wasi@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz#6af873b3417468670b88c70bcb3f6d5fa76fbaae"
|
||||||
|
integrity sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==
|
||||||
|
dependencies:
|
||||||
|
"@emnapi/core" "^1.4.5"
|
||||||
|
"@emnapi/runtime" "^1.4.5"
|
||||||
|
"@emnapi/wasi-threads" "^1.0.4"
|
||||||
|
"@napi-rs/wasm-runtime" "^0.2.12"
|
||||||
|
"@tybys/wasm-util" "^0.10.0"
|
||||||
|
tslib "^2.8.0"
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-win32-arm64-msvc@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz#feca2e628d6eac3fb156613e53c2a3d8006b7d16"
|
||||||
|
integrity sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide-win32-x64-msvc@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz#20db1f2dabbc6b89bda9f4af5e1ab848079ea3dc"
|
||||||
|
integrity sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==
|
||||||
|
|
||||||
|
"@tailwindcss/oxide@4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/oxide/-/oxide-4.1.13.tgz#fc6d48fb2ea1d13d9ddba7ea6473716ad757a8fc"
|
||||||
|
integrity sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==
|
||||||
|
dependencies:
|
||||||
|
detect-libc "^2.0.4"
|
||||||
|
tar "^7.4.3"
|
||||||
|
optionalDependencies:
|
||||||
|
"@tailwindcss/oxide-android-arm64" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-darwin-arm64" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-darwin-x64" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-freebsd-x64" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-linux-arm-gnueabihf" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-linux-arm64-gnu" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-linux-arm64-musl" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-linux-x64-gnu" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-linux-x64-musl" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-wasm32-wasi" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-win32-arm64-msvc" "4.1.13"
|
||||||
|
"@tailwindcss/oxide-win32-x64-msvc" "4.1.13"
|
||||||
|
|
||||||
|
"@tailwindcss/postcss@^4.1.13":
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tailwindcss/postcss/-/postcss-4.1.13.tgz#47a19ed4b2aa2517ebcfe658cfa3fc67fe4fdd71"
|
||||||
|
integrity sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==
|
||||||
|
dependencies:
|
||||||
|
"@alloc/quick-lru" "^5.2.0"
|
||||||
|
"@tailwindcss/node" "4.1.13"
|
||||||
|
"@tailwindcss/oxide" "4.1.13"
|
||||||
|
postcss "^8.4.41"
|
||||||
|
tailwindcss "4.1.13"
|
||||||
|
|
||||||
|
"@tybys/wasm-util@^0.10.0", "@tybys/wasm-util@^0.10.1":
|
||||||
|
version "0.10.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414"
|
||||||
|
integrity sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==
|
||||||
|
dependencies:
|
||||||
|
tslib "^2.4.0"
|
||||||
|
|
||||||
|
"@types/react-dom@^19.1.9":
|
||||||
|
version "19.1.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.1.9.tgz#5ab695fce1e804184767932365ae6569c11b4b4b"
|
||||||
|
integrity sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==
|
||||||
|
|
||||||
|
"@types/react@^19.1.13":
|
||||||
|
version "19.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.13.tgz#fc650ffa680d739a25a530f5d7ebe00cdd771883"
|
||||||
|
integrity sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==
|
||||||
|
dependencies:
|
||||||
|
csstype "^3.0.2"
|
||||||
|
|
||||||
|
asynckit@^0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||||
|
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||||
|
|
||||||
|
axios@^1.12.2:
|
||||||
|
version "1.12.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7"
|
||||||
|
integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==
|
||||||
|
dependencies:
|
||||||
|
follow-redirects "^1.15.6"
|
||||||
|
form-data "^4.0.4"
|
||||||
|
proxy-from-env "^1.1.0"
|
||||||
|
|
||||||
|
call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
|
||||||
|
integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
|
||||||
|
dependencies:
|
||||||
|
es-errors "^1.3.0"
|
||||||
|
function-bind "^1.1.2"
|
||||||
|
|
||||||
|
chownr@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
|
||||||
|
integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
|
||||||
|
|
||||||
|
combined-stream@^1.0.8:
|
||||||
|
version "1.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||||
|
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||||
|
dependencies:
|
||||||
|
delayed-stream "~1.0.0"
|
||||||
|
|
||||||
|
cookie@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610"
|
||||||
|
integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==
|
||||||
|
|
||||||
|
core-js@~3.45.1:
|
||||||
|
version "3.45.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.45.1.tgz#5810e04a1b4e9bc5ddaa4dd12e702ff67300634d"
|
||||||
|
integrity sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==
|
||||||
|
|
||||||
|
csstype@^3.0.2, csstype@^3.1.3:
|
||||||
|
version "3.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
|
||||||
|
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
|
||||||
|
|
||||||
|
delayed-stream@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||||
|
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||||
|
|
||||||
|
detect-libc@^2.0.3, detect-libc@^2.0.4:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.1.tgz#9f1e511ace6bb525efea4651345beac424dac7b9"
|
||||||
|
integrity sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==
|
||||||
|
|
||||||
|
dunder-proto@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
|
||||||
|
integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
|
||||||
|
dependencies:
|
||||||
|
call-bind-apply-helpers "^1.0.1"
|
||||||
|
es-errors "^1.3.0"
|
||||||
|
gopd "^1.2.0"
|
||||||
|
|
||||||
|
enhanced-resolve@^5.18.3:
|
||||||
|
version "5.18.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz#9b5f4c5c076b8787c78fe540392ce76a88855b44"
|
||||||
|
integrity sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==
|
||||||
|
dependencies:
|
||||||
|
graceful-fs "^4.2.4"
|
||||||
|
tapable "^2.2.0"
|
||||||
|
|
||||||
|
error-stack-parser@^2.1.4:
|
||||||
|
version "2.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286"
|
||||||
|
integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==
|
||||||
|
dependencies:
|
||||||
|
stackframe "^1.3.4"
|
||||||
|
|
||||||
|
es-define-property@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
|
||||||
|
integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
|
||||||
|
|
||||||
|
es-errors@^1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
||||||
|
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
|
||||||
|
|
||||||
|
es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
|
||||||
|
integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
|
||||||
|
dependencies:
|
||||||
|
es-errors "^1.3.0"
|
||||||
|
|
||||||
|
es-set-tostringtag@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
|
||||||
|
integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
|
||||||
|
dependencies:
|
||||||
|
es-errors "^1.3.0"
|
||||||
|
get-intrinsic "^1.2.6"
|
||||||
|
has-tostringtag "^1.0.2"
|
||||||
|
hasown "^2.0.2"
|
||||||
|
|
||||||
|
follow-redirects@^1.15.6:
|
||||||
|
version "1.15.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340"
|
||||||
|
integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==
|
||||||
|
|
||||||
|
form-data@^4.0.4:
|
||||||
|
version "4.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4"
|
||||||
|
integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
|
||||||
|
dependencies:
|
||||||
|
asynckit "^0.4.0"
|
||||||
|
combined-stream "^1.0.8"
|
||||||
|
es-set-tostringtag "^2.1.0"
|
||||||
|
hasown "^2.0.2"
|
||||||
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
|
function-bind@^1.1.2:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
||||||
|
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
|
||||||
|
|
||||||
|
get-intrinsic@^1.2.6:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
|
||||||
|
integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
|
||||||
|
dependencies:
|
||||||
|
call-bind-apply-helpers "^1.0.2"
|
||||||
|
es-define-property "^1.0.1"
|
||||||
|
es-errors "^1.3.0"
|
||||||
|
es-object-atoms "^1.1.1"
|
||||||
|
function-bind "^1.1.2"
|
||||||
|
get-proto "^1.0.1"
|
||||||
|
gopd "^1.2.0"
|
||||||
|
has-symbols "^1.1.0"
|
||||||
|
hasown "^2.0.2"
|
||||||
|
math-intrinsics "^1.1.0"
|
||||||
|
|
||||||
|
get-proto@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
|
||||||
|
integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
|
||||||
|
dependencies:
|
||||||
|
dunder-proto "^1.0.1"
|
||||||
|
es-object-atoms "^1.0.0"
|
||||||
|
|
||||||
|
goober@^2.1.16:
|
||||||
|
version "2.1.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.16.tgz#7d548eb9b83ff0988d102be71f271ca8f9c82a95"
|
||||||
|
integrity sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==
|
||||||
|
|
||||||
|
gopd@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
|
||||||
|
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
|
||||||
|
|
||||||
|
graceful-fs@^4.2.4:
|
||||||
|
version "4.2.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
|
||||||
|
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
|
||||||
|
|
||||||
|
has-symbols@^1.0.3, has-symbols@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
|
||||||
|
integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
|
||||||
|
|
||||||
|
has-tostringtag@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
|
||||||
|
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
|
||||||
|
dependencies:
|
||||||
|
has-symbols "^1.0.3"
|
||||||
|
|
||||||
|
hasown@^2.0.2:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
|
||||||
|
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
|
||||||
|
dependencies:
|
||||||
|
function-bind "^1.1.2"
|
||||||
|
|
||||||
|
html-entities@^2.6.0:
|
||||||
|
version "2.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.6.0.tgz#7c64f1ea3b36818ccae3d3fb48b6974208e984f8"
|
||||||
|
integrity sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==
|
||||||
|
|
||||||
|
jiti@^2.5.1, jiti@^2.6.0:
|
||||||
|
version "2.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.0.tgz#b831fdc4440c0a4944c34456643c555afe09d36d"
|
||||||
|
integrity sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==
|
||||||
|
|
||||||
|
lightningcss-darwin-arm64@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz#3d47ce5e221b9567c703950edf2529ca4a3700ae"
|
||||||
|
integrity sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==
|
||||||
|
|
||||||
|
lightningcss-darwin-x64@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz#e81105d3fd6330860c15fe860f64d39cff5fbd22"
|
||||||
|
integrity sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==
|
||||||
|
|
||||||
|
lightningcss-freebsd-x64@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz#a0e732031083ff9d625c5db021d09eb085af8be4"
|
||||||
|
integrity sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==
|
||||||
|
|
||||||
|
lightningcss-linux-arm-gnueabihf@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz#1f5ecca6095528ddb649f9304ba2560c72474908"
|
||||||
|
integrity sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==
|
||||||
|
|
||||||
|
lightningcss-linux-arm64-gnu@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz#eee7799726103bffff1e88993df726f6911ec009"
|
||||||
|
integrity sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==
|
||||||
|
|
||||||
|
lightningcss-linux-arm64-musl@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz#f2e4b53f42892feeef8f620cbb889f7c064a7dfe"
|
||||||
|
integrity sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==
|
||||||
|
|
||||||
|
lightningcss-linux-x64-gnu@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz#2fc7096224bc000ebb97eea94aea248c5b0eb157"
|
||||||
|
integrity sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==
|
||||||
|
|
||||||
|
lightningcss-linux-x64-musl@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz#66dca2b159fd819ea832c44895d07e5b31d75f26"
|
||||||
|
integrity sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==
|
||||||
|
|
||||||
|
lightningcss-win32-arm64-msvc@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz#7d8110a19d7c2d22bfdf2f2bb8be68e7d1b69039"
|
||||||
|
integrity sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==
|
||||||
|
|
||||||
|
lightningcss-win32-x64-msvc@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz#fd7dd008ea98494b85d24b4bea016793f2e0e352"
|
||||||
|
integrity sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==
|
||||||
|
|
||||||
|
lightningcss@1.30.1:
|
||||||
|
version "1.30.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.30.1.tgz#78e979c2d595bfcb90d2a8c0eb632fe6c5bfed5d"
|
||||||
|
integrity sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==
|
||||||
|
dependencies:
|
||||||
|
detect-libc "^2.0.3"
|
||||||
|
optionalDependencies:
|
||||||
|
lightningcss-darwin-arm64 "1.30.1"
|
||||||
|
lightningcss-darwin-x64 "1.30.1"
|
||||||
|
lightningcss-freebsd-x64 "1.30.1"
|
||||||
|
lightningcss-linux-arm-gnueabihf "1.30.1"
|
||||||
|
lightningcss-linux-arm64-gnu "1.30.1"
|
||||||
|
lightningcss-linux-arm64-musl "1.30.1"
|
||||||
|
lightningcss-linux-x64-gnu "1.30.1"
|
||||||
|
lightningcss-linux-x64-musl "1.30.1"
|
||||||
|
lightningcss-win32-arm64-msvc "1.30.1"
|
||||||
|
lightningcss-win32-x64-msvc "1.30.1"
|
||||||
|
|
||||||
|
magic-string@^0.30.18:
|
||||||
|
version "0.30.19"
|
||||||
|
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9"
|
||||||
|
integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==
|
||||||
|
dependencies:
|
||||||
|
"@jridgewell/sourcemap-codec" "^1.5.5"
|
||||||
|
|
||||||
|
math-intrinsics@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
|
||||||
|
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
|
||||||
|
|
||||||
|
mime-db@1.52.0:
|
||||||
|
version "1.52.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||||
|
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||||
|
|
||||||
|
mime-types@^2.1.12:
|
||||||
|
version "2.1.35"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||||
|
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||||
|
dependencies:
|
||||||
|
mime-db "1.52.0"
|
||||||
|
|
||||||
|
minipass@^7.0.4, minipass@^7.1.2:
|
||||||
|
version "7.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
|
||||||
|
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
|
||||||
|
|
||||||
|
minizlib@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c"
|
||||||
|
integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==
|
||||||
|
dependencies:
|
||||||
|
minipass "^7.1.2"
|
||||||
|
|
||||||
|
nanoid@^3.3.11:
|
||||||
|
version "3.3.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
|
||||||
|
integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
|
||||||
|
|
||||||
|
picocolors@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||||
|
integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
|
||||||
|
|
||||||
|
postcss@^8.4.41:
|
||||||
|
version "8.5.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
|
||||||
|
integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
|
||||||
|
dependencies:
|
||||||
|
nanoid "^3.3.11"
|
||||||
|
picocolors "^1.1.1"
|
||||||
|
source-map-js "^1.2.1"
|
||||||
|
|
||||||
|
proxy-from-env@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
|
||||||
|
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
|
||||||
|
|
||||||
|
react-dom@^19.1.1:
|
||||||
|
version "19.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.1.tgz#2daa9ff7f3ae384aeb30e76d5ee38c046dc89893"
|
||||||
|
integrity sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==
|
||||||
|
dependencies:
|
||||||
|
scheduler "^0.26.0"
|
||||||
|
|
||||||
|
react-hot-toast@^2.6.0:
|
||||||
|
version "2.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.6.0.tgz#4ada6ed3c75c5e42a90d562f55665ff37ee1442b"
|
||||||
|
integrity sha512-bH+2EBMZ4sdyou/DPrfgIouFpcRLCJ+HoCA32UoAYHn6T3Ur5yfcDCeSr5mwldl6pFOsiocmrXMuoCJ1vV8bWg==
|
||||||
|
dependencies:
|
||||||
|
csstype "^3.1.3"
|
||||||
|
goober "^2.1.16"
|
||||||
|
|
||||||
|
react-refresh@^0.17.0:
|
||||||
|
version "0.17.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
|
||||||
|
integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==
|
||||||
|
|
||||||
|
react-router@^7.9.2:
|
||||||
|
version "7.9.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.9.2.tgz#f424a14f87e4d7b5b268ce3647876e9504e4fca6"
|
||||||
|
integrity sha512-i2TPp4dgaqrOqiRGLZmqh2WXmbdFknUyiCRmSKs0hf6fWXkTKg5h56b+9F22NbGRAMxjYfqQnpi63egzD2SuZA==
|
||||||
|
dependencies:
|
||||||
|
cookie "^1.0.1"
|
||||||
|
set-cookie-parser "^2.6.0"
|
||||||
|
|
||||||
|
react@^19.1.1:
|
||||||
|
version "19.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/react/-/react-19.1.1.tgz#06d9149ec5e083a67f9a1e39ce97b06a03b644af"
|
||||||
|
integrity sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==
|
||||||
|
|
||||||
|
scheduler@^0.26.0:
|
||||||
|
version "0.26.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337"
|
||||||
|
integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==
|
||||||
|
|
||||||
|
set-cookie-parser@^2.6.0:
|
||||||
|
version "2.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943"
|
||||||
|
integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==
|
||||||
|
|
||||||
|
source-map-js@^1.2.1:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
|
||||||
|
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
|
||||||
|
|
||||||
|
stackframe@^1.3.4:
|
||||||
|
version "1.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
|
||||||
|
integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
|
||||||
|
|
||||||
|
tailwindcss@4.1.13, tailwindcss@^4.1.13:
|
||||||
|
version "4.1.13"
|
||||||
|
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-4.1.13.tgz#ade3471fdfd0a2a86da3a679bfc10c623e645b09"
|
||||||
|
integrity sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==
|
||||||
|
|
||||||
|
tapable@^2.2.0:
|
||||||
|
version "2.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.3.tgz#4b67b635b2d97578a06a2713d2f04800c237e99b"
|
||||||
|
integrity sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==
|
||||||
|
|
||||||
|
tar@^7.4.3:
|
||||||
|
version "7.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.1.tgz#750a8bd63b7c44c1848e7bf982260a083cf747c9"
|
||||||
|
integrity sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==
|
||||||
|
dependencies:
|
||||||
|
"@isaacs/fs-minipass" "^4.0.0"
|
||||||
|
chownr "^3.0.0"
|
||||||
|
minipass "^7.1.2"
|
||||||
|
minizlib "^3.1.0"
|
||||||
|
yallist "^5.0.0"
|
||||||
|
|
||||||
|
tslib@^2.4.0, tslib@^2.8.0:
|
||||||
|
version "2.8.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
|
||||||
|
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
|
||||||
|
|
||||||
|
typescript@^5.9.2:
|
||||||
|
version "5.9.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6"
|
||||||
|
integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==
|
||||||
|
|
||||||
|
yallist@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
|
||||||
|
integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
|
||||||
7
pyproject.toml
Normal file
7
pyproject.toml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[project]
|
||||||
|
name = "ppq"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Add your description here"
|
||||||
|
readme = "README.md"
|
||||||
|
requires-python = ">=3.13"
|
||||||
|
dependencies = []
|
||||||
9
schemas/PetPicture.sql
Normal file
9
schemas/PetPicture.sql
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
CREATE TABLE IF NOT EXISTS PetPictures (
|
||||||
|
uuid TEXT PRIMARY KEY,
|
||||||
|
title text,
|
||||||
|
contributor text,
|
||||||
|
description text,
|
||||||
|
created_at integer,
|
||||||
|
posted integer,
|
||||||
|
filepath text
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user