From afbdc4b13997afd354df78cd3ee037d9c7dedf41 Mon Sep 17 00:00:00 2001 From: DuOtto Date: Mon, 19 Oct 2026 22:27:05 +0200 Subject: [PATCH] first commit --- .gitignore | 7 + Dockerfile | 19 + README.md | 72 ++ _to_delete/awcc5.tgz | Bin 0 -> 32694 bytes _to_delete/awcc6.tgz | Bin 0 -> 35140 bytes _to_delete/awcc7.tgz | Bin 0 -> 51257 bytes _to_delete/awcc8.tgz | Bin 0 -> 53356 bytes _to_delete/awcc9.tgz | Bin 0 -> 53654 bytes backend/app/derive.py | 57 ++ backend/app/export.py | 179 ++++ backend/app/main.py | 193 ++++ backend/data/rules.json | 611 +++++++++++++ backend/requirements.txt | 4 + docker-compose.yml | 9 + frontend/index.html | 12 + frontend/package-lock.json | 1698 +++++++++++++++++++++++++++++++++++ frontend/package.json | 19 + frontend/src/App.jsx | 55 ++ frontend/src/Characters.jsx | 50 ++ frontend/src/Creator.jsx | 523 +++++++++++ frontend/src/Presets.jsx | 136 +++ frontend/src/Rules.jsx | 139 +++ frontend/src/SheetPanel.jsx | 62 ++ frontend/src/calc.js | 187 ++++ frontend/src/main.jsx | 6 + frontend/src/sheetModel.js | 47 + frontend/src/styles.css | 149 +++ frontend/vite.config.js | 8 + 28 files changed, 4242 insertions(+) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 _to_delete/awcc5.tgz create mode 100644 _to_delete/awcc6.tgz create mode 100644 _to_delete/awcc7.tgz create mode 100644 _to_delete/awcc8.tgz create mode 100644 _to_delete/awcc9.tgz create mode 100644 backend/app/derive.py create mode 100644 backend/app/export.py create mode 100644 backend/app/main.py create mode 100644 backend/data/rules.json create mode 100644 backend/requirements.txt create mode 100644 docker-compose.yml create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/src/App.jsx create mode 100644 frontend/src/Characters.jsx create mode 100644 frontend/src/Creator.jsx create mode 100644 frontend/src/Presets.jsx create mode 100644 frontend/src/Rules.jsx create mode 100644 frontend/src/SheetPanel.jsx create mode 100644 frontend/src/calc.js create mode 100644 frontend/src/main.jsx create mode 100644 frontend/src/sheetModel.js create mode 100644 frontend/src/styles.css create mode 100644 frontend/vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d96cac --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +node_modules/ +frontend/dist/ +backend/static/ +backend/__pycache__/ +backend/app/__pycache__/ +backend/aw.db +db/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bb3dc99 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +# Stufe 1: React-Frontend bauen +FROM node:20-alpine AS frontend +WORKDIR /fe +COPY frontend/package.json ./ +RUN npm install --no-audit --no-fund +COPY frontend/ ./ +RUN npm run build + +# Stufe 2: FastAPI liefert API und gebautes Frontend aus +FROM python:3.12-slim +WORKDIR /app +COPY backend/requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt +COPY backend/app ./app +COPY backend/data ./data +COPY --from=frontend /fe/dist ./static +ENV AW_DB=/db/aw.db +EXPOSE 8000 +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..08cae7a --- /dev/null +++ b/README.md @@ -0,0 +1,72 @@ +# Arcane Wasteland Character Creator + +Website for creating characters for the Arcane Wasteland TTRPG, with a searchable rulebook and export to PDF or Word. + +- **Frontend:** React (Vite), 8-step wizard, searchable rules page +- **Backend:** FastAPI, SQLite, `python-docx` and `reportlab` for the export +- Everything runs in **one** container + +## Run it on the server + +```bash +docker compose up -d --build +``` + +Then open `http://:8080`. Characters are stored in `./db/aw.db`. For HTTPS and a domain, put the container behind a reverse proxy (nginx, Caddy, Traefik). + +## Edit the rules + +All rule data lives in `backend/data/rules.json`: attributes, derived-stat formulas, skills, professions, classes, talents, mutations, implants, conditions, equipment and the texts of the rules page. Edit the file and reload the page; no rebuild is needed because the folder is mounted into the container. + +Entries with `"placeholder": true` are placeholders and show a badge in the app. To remove the badge, fill in the entry and delete that line. + +**Note:** Derived-stat formulas are in `rules.json` (`derived[].formula` = list of attributes whose mods are summed). Special rules that cannot be expressed there (profession attribute bonus, skill maximum, higher-of-two-attributes for skills, carry capacity) are mirrored in `frontend/src/calc.js` and `backend/app/derive.py`. When changing them, change both files. + +### Rules presets + +Presets are named sets of creation numbers (attribute points, skill pool, talents, proficiency picks, unlock cost, caps ...). They are defined in `rules.json` under `presets`: each has an `id`, `name`, `desc` and a `creation` object that overrides keys of the global `creation` block (an empty object = the standard values). `default_preset` is the one new characters start with. The list of values that can be edited per character is `tunables`. + +In the creator, the Concept page only has a "Rules preset" selector. Presets are created, edited, duplicated and deleted on the **Presets** tab. Built-in presets (from `rules.json`) are read-only; user presets are stored in the database (`/api/presets`) and visible to everyone, but only the browser that created one holds the key to change or delete it. The chosen numbers are copied into the character, so shared links and exports use the same numbers even if the preset is changed or deleted later. "Start over" keeps the chosen preset. + +### Skills, proficiency and expertise + +- `creation.advanced_unlock_cost`: pool points needed to unlock an advanced skill (free if a profession or proficiency covers it). +- `creation.free_proficiencies`: free proficiency picks every character gets. Talents can add more with `"proficiency_picks": N` (see "Versatile Training"). +- Proficiency is +`proficiency_bonus`; two picks on one skill (a profession proficiency counts as one) give Expertise, +`expertise_bonus`. + +### Equipment + +`equipment` lists every item with `id`, `name`, `cat` (category), `stat` (damage / armor / type), `kg` and `note`. The starting-kit rules are in `creation.kit` (allowed weapon categories, armor tiers, number of resources). Weights are approximate; for ranges in the source document the upper value is used. + +## Development + +```bash +# Backend +cd backend && pip install -r requirements.txt +uvicorn app.main:app --reload --port 8000 + +# Frontend (second terminal, proxies /api to port 8000) +cd frontend && npm install && npm run dev +``` + +## Saving and sharing + +There are no user accounts. When saved, a character gets an ID and a secret write key that stays in the browser ("My characters" page). The link `/#creator/` lets others view the character; only the holder of the key can change it. To move to another browser use the JSON backup (Summary page: "JSON backup" and "Import JSON"). + +If the site is reachable from the internet, protect it with Basic Auth at the reverse proxy. + +While creating, the full character sheet stays visible next to the wizard. Edits are shown as a difference (old → new, added / removed items) until you press **Apply** (or **Apply & next**); **Discard** drops them. + +Each wizard page has a **Reset this page** button that clears only that page's data, plus **Start over** for the whole character. + +## API + +| Method | Path | Purpose | +|---|---|---| +| GET | `/api/rules` | Rule data | +| POST | `/api/characters` | Create a character, returns `id` and `token` | +| GET | `/api/characters/{id}` | Read a character | +| PUT / DELETE | `/api/characters/{id}` | Change / delete, header `X-Edit-Token` | +| POST | `/api/presets` | Create a preset, returns `id` and `token` | +| PUT / DELETE | `/api/presets/{id}` | Change / delete, header `X-Edit-Token` | +| POST | `/api/export/pdf` or `/docx` | Character JSON in the body, file in the response | diff --git a/_to_delete/awcc5.tgz b/_to_delete/awcc5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..bcb076d88aeb5d02044fd10e05b15bb96ecb3826 GIT binary patch literal 32694 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 literal 0 HcmV?d00001 diff --git a/_to_delete/awcc6.tgz b/_to_delete/awcc6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d4e3af6b65fde258883f6c2ee5bc066082bdef07 GIT binary patch literal 35140 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 KQ@HH_NCN=xw`{Ng literal 0 HcmV?d00001 diff --git a/_to_delete/awcc8.tgz b/_to_delete/awcc8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..38e71e92154fc66a958c8debc16095077ae52206 GIT binary patch literal 53356 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 P_V@n)`!Kfh0B{2U**ZXe literal 0 HcmV?d00001 diff --git a/backend/app/derive.py b/backend/app/derive.py new file mode 100644 index 0000000..f7527c3 --- /dev/null +++ b/backend/app/derive.py @@ -0,0 +1,57 @@ +"""Computes modifiers, derived stats, skill totals and carried weight (mirror of frontend/src/calc.js).""" + + +def kit_items(ch: dict, rules: dict) -> list: + """Returns [(label, item, qty)] for the starting kit and extra items.""" + items = {e["id"]: e for e in rules.get("equipment", [])} + kit = ch.get("kit") or {} + out = [] + for label, key in (("Weapon", "weapon"), ("Armor", "armor"), ("Tool", "tool")): + if kit.get(key) in items: + out.append((label, items[kit[key]], 1)) + for rid in kit.get("resources", []): + if rid in items: + out.append(("Resource", items[rid], 1)) + for iid, qty in (kit.get("extras") or {}).items(): + if iid in items and int(qty) > 0: + out.append(("Extra", items[iid], int(qty))) + return out + + +def compute(ch: dict, rules: dict) -> dict: + cr = {**rules["creation"], **(ch.get("creation") or {})} # per-character rules preset overrides + prof_id = ch.get("profession") + bonus_attr = ch.get("profession_bonus_attr") if prof_id else None + + attrs = {} + for a in rules["attributes"]: + base = int((ch.get("attributes") or {}).get(a["id"], cr["attr_start"])) + attrs[a["id"]] = base + (cr["profession_attr_bonus"] if a["id"] == bonus_attr else 0) + mods = {k: v // 10 for k, v in attrs.items()} + + derived = {d["id"]: sum(mods[x] for x in d["formula"]) for d in rules["derived"]} + + skills = [] + for s in rules["skills"]: + pts = int((ch.get("skill_points") or {}).get(s["id"], 0)) + # Proficiency "pips": 1 from the profession plus free picks, at most 2 (2 = Expertise) + prof_pip = 1 if (ch.get("proficiencies") or {}).get(s["id"]) else 0 + free_pips = min(int((ch.get("proficiency_picks") or {}).get(s["id"], 0)), cr.get("max_proficiency_pips", 2) - prof_pip) + pips = prof_pip + max(0, free_pips) + prof = [0, cr["proficiency_bonus"], cr["expertise_bonus"]][pips] + unlocked = s["id"] in (ch.get("unlocked") or []) + usable = s["type"] == "basic" or unlocked or prof > 0 # advanced skills must be unlocked + best = max(attrs[a] for a in s["attrs"]) # with several attributes the higher one counts + skills.append({**s, "points": pts, "prof": prof, "pips": pips, "usable": usable, "unlocked": unlocked, + "total": best + pts + prof}) + + aug_by_id = {a["id"]: a for a in rules["augments"]} + chosen = [aug_by_id[i] for i in ch.get("augments", []) if i in aug_by_id] + used = sum(a["cost"] for a in chosen) + + weight = round(sum(item["kg"] * qty for _, item, qty in kit_items(ch, rules)), 1) + + return {"attrs": attrs, "mods": mods, "derived": derived, "skills": skills, + "capacity_used": used, "capacity_max": derived.get("augmentation", 0), + "augments": chosen, "weight": weight, + "carry_max": max(0, mods["strength"]) * cr.get("carry_per_strength_mod", 10)} diff --git a/backend/app/export.py b/backend/app/export.py new file mode 100644 index 0000000..de9dd98 --- /dev/null +++ b/backend/app/export.py @@ -0,0 +1,179 @@ +"""Character sheet as DOCX and PDF.""" +import io + +from docx import Document +from docx.enum.text import WD_ALIGN_PARAGRAPH +from docx.shared import Pt +from reportlab.lib import colors +from reportlab.lib.pagesizes import A4 +from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet +from reportlab.lib.units import mm +from reportlab.platypus import Paragraph, SimpleDocTemplate, Table, TableStyle + +from .derive import compute, kit_items + +SOURCE = {"noxium": "Noxium", "diesium": "Diesium", "hybrid": "Hybrid", "precyber": "Pre-meteor cybernetics"} +KIND = {"mutation": "Mutation", "implant": "Implant"} + + +def _sheet(ch: dict, rules: dict) -> dict: + """Prepares all data once for both formats.""" + c = compute(ch, rules) + prof = next((p for p in rules["professions"] if p["id"] == ch.get("profession")), None) + talents = [t for t in rules["talents"] if t["id"] in ch.get("talents", [])] + cls = next((k for k in rules.get("classes", []) if k["id"] == ch.get("class_id")), None) + sub = next((x for x in (cls or {}).get("subclasses", []) if x["id"] == ch.get("subclass_id")), None) + gear_rows = [] + for label, item, qty in kit_items(ch, rules): + name = item["name"] + (f" x{qty}" if qty > 1 else "") + gear_rows.append([label, name, item["stat"], f"{round(item['kg'] * qty, 1)} kg"]) + preset = next((x["name"] for x in rules.get("presets", []) if x["id"] == ch.get("preset")), "Custom") + return { + "c": c, + "preset": preset, + "class": " / ".join(x["name"] for x in (cls, sub) if x) or "-", + "profession": prof["name"] if prof else "-", + "talents": talents, + "gear_rows": gear_rows, + "other": (ch.get("gear") or {}).get("other", ""), + "attr_rows": [[a["name"], str(c["attrs"][a["id"]]), str(c["mods"][a["id"]])] for a in rules["attributes"]], + "derived_rows": [[d["name"], str(c["derived"][d["id"]])] for d in rules["derived"]], + "skill_rows": [ + [s["name"], "/".join(a["short"] for a in rules["attributes"] if a["id"] in s["attrs"]), + str(s["points"]), {0: "", 1: "Proficient", 2: "Expertise"}.get(s["pips"], ""), str(s["total"])] + for s in c["skills"] if s["points"] or s["prof"] or (s["unlocked"] and s["type"] == "advanced") + ], + "augment_rows": [[a["name"], KIND.get(a["kind"], a["kind"]), SOURCE.get(a["source"]) or "-", str(a["cost"])] + for a in c["augments"]], + } + + +def to_docx(ch: dict, rules: dict) -> bytes: + s = _sheet(ch, rules) + c = s["c"] + doc = Document() + doc.styles["Normal"].font.name = "Calibri" + doc.styles["Normal"].font.size = Pt(10) + + title = doc.add_heading(ch.get("name") or "Nameless", 0) + title.alignment = WD_ALIGN_PARAGRAPH.LEFT + doc.add_paragraph(f"Arcane Wasteland | Player: {ch.get('player') or '-'} | Profession: {s['profession']} | Class: {s['class']} | Rules: {s['preset']}") + if ch.get("concept"): + doc.add_paragraph().add_run(ch["concept"]).italic = True + + def table(head, rows): + t = doc.add_table(rows=1, cols=len(head)) + t.style = "Light Grid Accent 1" + for i, h in enumerate(head): + t.rows[0].cells[i].text = h + for r in rows: + cells = t.add_row().cells + for i, v in enumerate(r): + cells[i].text = v + + doc.add_heading("Attributes", 1) + table(["Attribute", "Value", "Mod"], s["attr_rows"]) + doc.add_heading("Derived stats", 1) + table(["Stat", ""], s["derived_rows"]) + doc.add_heading("Skills", 1) + if s["skill_rows"]: + table(["Skill", "Attr.", "Points", "Training", "Target"], s["skill_rows"]) + else: + doc.add_paragraph("No skill points spent.") + doc.add_heading("Talents", 1) + for t in s["talents"]: + doc.add_paragraph(f"{t['name']}: {t['desc']}", style="List Bullet") + if not s["talents"]: + doc.add_paragraph("-") + doc.add_heading(f"Mutations and implants ({c['capacity_used']} / {c['capacity_max']} capacity)", 1) + if s["augment_rows"]: + table(["Name", "Type", "Source", "Cost"], s["augment_rows"]) + else: + doc.add_paragraph("-") + doc.add_heading(f"Equipment (carried {c['weight']} / {c['carry_max']} kg)", 1) + if s["gear_rows"]: + table(["", "Item", "Damage / Armor / Type", "Weight"], s["gear_rows"]) + else: + doc.add_paragraph("-") + if s["other"]: + p = doc.add_paragraph() + p.add_run("Other: ").bold = True + p.add_run(s["other"]) + for key, head in (("background", "Background"), ("notes", "Notes")): + if ch.get(key): + doc.add_heading(head, 1) + doc.add_paragraph(ch[key]) + + buf = io.BytesIO() + doc.save(buf) + return buf.getvalue() + + +def to_pdf(ch: dict, rules: dict) -> bytes: + s = _sheet(ch, rules) + c = s["c"] + buf = io.BytesIO() + doc = SimpleDocTemplate(buf, pagesize=A4, leftMargin=18 * mm, rightMargin=18 * mm, + topMargin=16 * mm, bottomMargin=16 * mm, + title=ch.get("name") or "Character", author=ch.get("player") or "") + st = getSampleStyleSheet() + h1 = ParagraphStyle("h1", parent=st["Heading1"], fontSize=22, spaceAfter=2) + h2 = ParagraphStyle("h2", parent=st["Heading2"], fontSize=12, spaceBefore=10, spaceAfter=4, + textColor=colors.HexColor("#2f5d3a")) + body = ParagraphStyle("b", parent=st["BodyText"], fontSize=9.5, leading=12.5) + + def esc(t): + return (t or "").replace("&", "&").replace("<", "<").replace(">", ">").replace("\n", "
") + + def tbl(head, rows, widths=None): + t = Table([head] + rows, colWidths=widths, repeatRows=1) + t.setStyle(TableStyle([ + ("BACKGROUND", (0, 0), (-1, 0), colors.HexColor("#2f5d3a")), + ("TEXTCOLOR", (0, 0), (-1, 0), colors.white), + ("FONTSIZE", (0, 0), (-1, -1), 9), + ("GRID", (0, 0), (-1, -1), 0.4, colors.HexColor("#b9c4bb")), + ("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.white, colors.HexColor("#f1f5f2")]), + ("TOPPADDING", (0, 0), (-1, -1), 3), ("BOTTOMPADDING", (0, 0), (-1, -1), 3), + ])) + return t + + el = [Paragraph(esc(ch.get("name") or "Nameless"), h1), + Paragraph(f"Arcane Wasteland  |  Player: {esc(ch.get('player') or '-')}  |  " + f"Profession: {esc(s['profession'])}  |  Class: {esc(s['class'])}  |  Rules: {esc(s['preset'])}", body)] + if ch.get("concept"): + el.append(Paragraph(f"{esc(ch['concept'])}", body)) + + el += [Paragraph("Attributes", h2), tbl(["Attribute", "Value", "Mod"], s["attr_rows"], [80 * mm, 30 * mm, 30 * mm]), + Paragraph("Derived stats", h2), tbl(["Stat", ""], s["derived_rows"], [80 * mm, 30 * mm]), + Paragraph("Skills", h2)] + if s["skill_rows"]: + el.append(tbl(["Skill", "Attr.", "Points", "Training", "Target"], s["skill_rows"], + [60 * mm, 22 * mm, 22 * mm, 28 * mm, 25 * mm])) + else: + el.append(Paragraph("No skill points spent.", body)) + + el.append(Paragraph("Talents", h2)) + for t in s["talents"]: + el.append(Paragraph(f"{esc(t['name'])}: {esc(t['desc'])}", body)) + if not s["talents"]: + el.append(Paragraph("-", body)) + + el.append(Paragraph(f"Mutations and implants ({c['capacity_used']} / {c['capacity_max']} capacity)", h2)) + if s["augment_rows"]: + el.append(tbl(["Name", "Type", "Source", "Cost"], s["augment_rows"], [60 * mm, 30 * mm, 50 * mm, 22 * mm])) + else: + el.append(Paragraph("-", body)) + + el.append(Paragraph(f"Equipment (carried {c['weight']} / {c['carry_max']} kg)", h2)) + if s["gear_rows"]: + el.append(tbl(["", "Item", "Damage / Armor / Type", "Weight"], s["gear_rows"], [22 * mm, 65 * mm, 55 * mm, 22 * mm])) + else: + el.append(Paragraph("-", body)) + if s["other"]: + el.append(Paragraph(f"Other: {esc(s['other'])}", body)) + for key, head in (("background", "Background"), ("notes", "Notes")): + if ch.get(key): + el += [Paragraph(head, h2), Paragraph(esc(ch[key]), body)] + + doc.build(el) + return buf.getvalue() diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..514d069 --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,193 @@ +import json +import os +import re +import secrets +import sqlite3 +import time +import uuid +from pathlib import Path + +from fastapi import Body, FastAPI, Header, HTTPException, Response +from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles + +from .export import to_docx, to_pdf + +BASE = Path(__file__).resolve().parent.parent +RULES_PATH = Path(os.environ.get("AW_RULES", BASE / "data" / "rules.json")) +DB_PATH = os.environ.get("AW_DB", str(BASE / "aw.db")) +STATIC = Path(os.environ.get("AW_STATIC", BASE / "static")) +MAX_BODY = 200_000 # bytes per character +MAX_PRESETS = 200 + +app = FastAPI(title="Arcane Wasteland Character Creator") + + +def load_rules() -> dict: + # Re-read on every request so rules.json can be edited without a restart. + return json.loads(RULES_PATH.read_text(encoding="utf-8")) + + +def db() -> sqlite3.Connection: + Path(DB_PATH).parent.mkdir(parents=True, exist_ok=True) + con = sqlite3.connect(DB_PATH) + con.row_factory = sqlite3.Row + con.execute("""CREATE TABLE IF NOT EXISTS characters ( + id TEXT PRIMARY KEY, token TEXT NOT NULL, data TEXT NOT NULL, + created REAL NOT NULL, updated REAL NOT NULL)""") + con.execute("""CREATE TABLE IF NOT EXISTS presets ( + id TEXT PRIMARY KEY, token TEXT NOT NULL, data TEXT NOT NULL, + created REAL NOT NULL, updated REAL NOT NULL)""") + return con + + +def custom_presets() -> list: + with db() as con: + rows = con.execute("SELECT id, data FROM presets ORDER BY created").fetchall() + return [{"id": r["id"], **json.loads(r["data"]), "custom": True} for r in rows] + + +def all_rules() -> dict: + """Rules from rules.json plus the presets created in the app.""" + r = load_rules() + r["presets"] = [{**p, "builtin": True} for p in r.get("presets", [])] + custom_presets() + return r + + +def clean_preset(body: dict, rules: dict) -> dict: + """Validates a preset: name, description and only known creation numbers within their limits.""" + name = str(body.get("name", "")).strip()[:60] + if not name: + raise HTTPException(422, "A preset needs a name") + tun = {t["key"]: t for t in rules.get("tunables", [])} + creation = {} + for k, v in (body.get("creation") or {}).items(): + if k not in tun: + raise HTTPException(422, f"Unknown value: {k}") + if isinstance(v, bool) or not isinstance(v, int) or not tun[k]["min"] <= v <= tun[k]["max"]: + raise HTTPException(422, f"Value out of range: {tun[k]['label']}") + if v != rules["creation"].get(k): + creation[k] = v + return {"name": name, "desc": str(body.get("desc", "")).strip()[:300], "creation": creation} + + +def check_size(ch: dict): + if len(json.dumps(ch)) > MAX_BODY: + raise HTTPException(413, "Character too large") + + +@app.get("/api/rules") +def get_rules(): + return all_rules() + + +@app.post("/api/presets") +def create_preset(body: dict = Body(...)): + data = clean_preset(body, load_rules()) + with db() as con: + if con.execute("SELECT COUNT(*) FROM presets").fetchone()[0] >= MAX_PRESETS: + raise HTTPException(409, "Too many presets on this server") + pid, token, now = "u-" + uuid.uuid4().hex[:8], secrets.token_urlsafe(16), time.time() + con.execute("INSERT INTO presets VALUES (?,?,?,?,?)", (pid, token, json.dumps(data), now, now)) + return {"id": pid, "token": token} + + +@app.put("/api/presets/{pid}") +def update_preset(pid: str, body: dict = Body(...), x_edit_token: str = Header(default="")): + data = clean_preset(body, load_rules()) + with db() as con: + row = con.execute("SELECT token FROM presets WHERE id=?", (pid,)).fetchone() + if not row: + raise HTTPException(404, "Preset not found") + if not secrets.compare_digest(row["token"], x_edit_token): + raise HTTPException(403, "No write access to this preset") + con.execute("UPDATE presets SET data=?, updated=? WHERE id=?", (json.dumps(data), time.time(), pid)) + return {"ok": True} + + +@app.delete("/api/presets/{pid}") +def delete_preset(pid: str, x_edit_token: str = Header(default="")): + with db() as con: + row = con.execute("SELECT token FROM presets WHERE id=?", (pid,)).fetchone() + if not row: + raise HTTPException(404, "Preset not found") + if not secrets.compare_digest(row["token"], x_edit_token): + raise HTTPException(403, "No write access to this preset") + con.execute("DELETE FROM presets WHERE id=?", (pid,)) + return {"ok": True} + + +@app.post("/api/characters") +def create_character(ch: dict = Body(...)): + check_size(ch) + cid, token, now = uuid.uuid4().hex[:12], secrets.token_urlsafe(16), time.time() + with db() as con: + con.execute("INSERT INTO characters VALUES (?,?,?,?,?)", (cid, token, json.dumps(ch), now, now)) + return {"id": cid, "token": token} + + +@app.get("/api/characters/{cid}") +def read_character(cid: str): + with db() as con: + row = con.execute("SELECT data FROM characters WHERE id=?", (cid,)).fetchone() + if not row: + raise HTTPException(404, "Character not found") + return json.loads(row["data"]) + + +@app.put("/api/characters/{cid}") +def update_character(cid: str, ch: dict = Body(...), x_edit_token: str = Header(default="")): + check_size(ch) + with db() as con: + row = con.execute("SELECT token FROM characters WHERE id=?", (cid,)).fetchone() + if not row: + raise HTTPException(404, "Character not found") + if not secrets.compare_digest(row["token"], x_edit_token): + raise HTTPException(403, "No write access to this character") + con.execute("UPDATE characters SET data=?, updated=? WHERE id=?", (json.dumps(ch), time.time(), cid)) + return {"ok": True} + + +@app.delete("/api/characters/{cid}") +def delete_character(cid: str, x_edit_token: str = Header(default="")): + with db() as con: + row = con.execute("SELECT token FROM characters WHERE id=?", (cid,)).fetchone() + if not row: + raise HTTPException(404, "Character not found") + if not secrets.compare_digest(row["token"], x_edit_token): + raise HTTPException(403, "No write access to this character") + con.execute("DELETE FROM characters WHERE id=?", (cid,)) + return {"ok": True} + + +def _filename(ch: dict, ext: str) -> str: + base = re.sub(r"[^A-Za-z0-9_-]+", "_", ch.get("name") or "Character").strip("_") or "Character" + return f"{base}.{ext}" + + +@app.post("/api/export/{fmt}") +def export(fmt: str, ch: dict = Body(...)): + check_size(ch) + rules = all_rules() + if fmt == "docx": + data = to_docx(ch, rules) + mime = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" + elif fmt == "pdf": + data = to_pdf(ch, rules) + mime = "application/pdf" + else: + raise HTTPException(404, "Unknown format") + return Response(data, media_type=mime, + headers={"Content-Disposition": f'attachment; filename="{_filename(ch, fmt)}"'}) + + +# Serve the built frontend with an SPA fallback +if STATIC.is_dir(): + app.mount("/assets", StaticFiles(directory=STATIC / "assets"), name="assets") + + @app.get("/{path:path}") + def spa(path: str): + f = (STATIC / path).resolve() + if path and f.is_file() and STATIC in f.parents: + return FileResponse(f) + return FileResponse(STATIC / "index.html") diff --git a/backend/data/rules.json b/backend/data/rules.json new file mode 100644 index 0000000..f45cabc --- /dev/null +++ b/backend/data/rules.json @@ -0,0 +1,611 @@ +{ + "meta": { + "name": "Arcane Wasteland", + "subtitle": "Tabletop rules", + "version": "0.3 (lists from the brainstorm document)", + "note": "Skills, professions, classes, talents, mutations, implants, conditions and equipment come from the brainstorm document. Entries with \"placeholder\": true are still open there and are flagged in the app. Edit this file and reload the page - no rebuild needed." + }, + + "creation": { + "attr_start": 25, + "attr_points": 90, + "attr_max": 45, + "attr_max_raise": 20, + "profession_attr_bonus": 5, + "skill_points_default": 150, + "skill_max_divisor": 2, + "advanced_unlock_cost": 10, + "free_proficiencies": 2, + "max_proficiency_pips": 2, + "talents_min": 1, + "talents_max": 2, + "proficiency_bonus": 10, + "expertise_bonus": 20, + "kit": { + "weapon_cats": [ + "melee", + "firearm" + ], + "armor_tiers": [ + "light" + ], + "resources_min": 1, + "resources_max": 2, + "tools": 1 + }, + "carry_per_strength_mod": 10 + }, + + "default_preset": "standard", + + "presets": [ + {"id": "standard", "name": "Standard", "desc": "The numbers from the brainstorm document.", "creation": {}}, + {"id": "gritty", "name": "Gritty survival", "desc": "Example preset: fewer points, one starting talent, harder to learn advanced skills.", "creation": {"attr_points": 70, "skill_points_default": 100, "talents_max": 1, "free_proficiencies": 1, "advanced_unlock_cost": 15}}, + {"id": "heroic", "name": "Heroic", "desc": "Example preset: more points, higher attribute cap, three starting talents.", "creation": {"attr_points": 110, "attr_max_raise": 25, "attr_max": 50, "skill_points_default": 200, "talents_max": 3, "free_proficiencies": 3, "advanced_unlock_cost": 5}}, + {"id": "oneshot", "name": "One-shot", "desc": "Example preset: quick, strong characters for a single session.", "creation": {"attr_points": 100, "skill_points_default": 120, "talents_max": 2, "free_proficiencies": 3, "advanced_unlock_cost": 0}} + ], + + "tunables": [ + {"key": "attr_start", "label": "Starting value of every attribute", "group": "Attributes", "min": 1, "max": 100}, + {"key": "attr_points", "label": "Attribute points to distribute", "group": "Attributes", "min": 0, "max": 500}, + {"key": "attr_max_raise", "label": "Maximum raise per attribute at creation", "group": "Attributes", "min": 0, "max": 100}, + {"key": "attr_max", "label": "Attribute cap at creation", "group": "Attributes", "min": 1, "max": 150}, + {"key": "profession_attr_bonus", "label": "Profession attribute bonus", "group": "Profession", "min": 0, "max": 50}, + {"key": "free_proficiencies", "label": "Free proficiency picks", "group": "Skills", "min": 0, "max": 20}, + {"key": "skill_points_default", "label": "Skill point pool", "group": "Skills", "min": 0, "max": 1000}, + {"key": "advanced_unlock_cost", "label": "Cost to unlock an advanced skill", "group": "Skills", "min": 0, "max": 100}, + {"key": "skill_max_divisor", "label": "Skill maximum = attribute divided by", "group": "Skills", "min": 1, "max": 10}, + {"key": "proficiency_bonus", "label": "Proficiency bonus", "group": "Skills", "min": 0, "max": 50}, + {"key": "expertise_bonus", "label": "Expertise bonus", "group": "Skills", "min": 0, "max": 100}, + {"key": "talents_min", "label": "Starting talents (minimum)", "group": "Talents", "min": 0, "max": 10}, + {"key": "talents_max", "label": "Starting talents (maximum)", "group": "Talents", "min": 0, "max": 10}, + {"key": "carry_per_strength_mod", "label": "Carry capacity in kg per Strength Mod", "group": "Equipment", "min": 1, "max": 100} + ], + + "attributes": [ + {"id": "strength", "name": "Strength", "short": "STR", "desc": "Raw physical power, melee damage, carrying and climbing."}, + {"id": "agility", "name": "Agility", "short": "AGI", "desc": "Reflexes, balance, stealth, dodging, firearms."}, + {"id": "vitality", "name": "Vitality", "short": "VIT", "desc": "Toughness, stamina and resistance to poison and disease."}, + {"id": "intellect", "name": "Intellect", "short": "INT", "desc": "Knowledge, technology, medicine and logical thinking."}, + {"id": "perception", "name": "Perception", "short": "PER", "desc": "Senses, alertness, tracking and aiming at range."}, + {"id": "charisma", "name": "Charisma", "short": "CHA", "desc": "Presence, persuasion and leadership."}, + {"id": "willpower", "name": "Willpower", "short": "WIL", "desc": "Mental strength, resistance to fear and stress."} + ], + + "derived": [ + {"id": "health", "name": "Health", "formula": ["vitality", "willpower"], "text": "Vitality Mod + Willpower Mod", "note": "Still open in the brainstorm: a level and a shield term."}, + {"id": "sanity", "name": "Sanity", "formula": ["willpower", "perception"], "text": "Willpower Mod + Perception Mod"}, + {"id": "augmentation", "name": "Augmentation Capacity", "formula": ["vitality", "intellect"], "text": "Vitality Mod + Intellect Mod", "note": "Shared pool for mutations and implants."}, + {"id": "defense", "name": "Defense", "formula": ["agility"], "text": "Agility Mod + armor/cover"}, + {"id": "initiative", "name": "Initiative", "formula": ["agility", "perception"], "text": "Agility Mod + Perception Mod (+1d20 in combat)"} + ], + + "skill_groups": [ + {"id": "combat", "name": "Combat"}, + {"id": "survival", "name": "Survival"}, + {"id": "social", "name": "Social"}, + {"id": "technical", "name": "Technical"}, + {"id": "knowledge", "name": "Knowledge & Mental"} + ], + + "skills": [ + {"id": "melee", "name": "Melee Weapons", "group": "combat", "attrs": ["strength"], "type": "basic", "desc": "General melee proficiency."}, + {"id": "bladed", "name": "Bladed Weapons", "group": "combat", "attrs": ["strength", "agility"], "type": "basic", "desc": "Knives, swords, machetes."}, + {"id": "blunt", "name": "Blunt Weapons", "group": "combat", "attrs": ["strength"], "type": "basic", "desc": "Clubs, hammers."}, + {"id": "polearms", "name": "Polearms", "group": "combat", "attrs": ["strength", "agility"], "type": "basic", "desc": "Spears, halberds, reach weapons."}, + {"id": "firearms", "name": "Firearms", "group": "combat", "attrs": ["agility", "perception"], "type": "basic", "desc": "Pistols, rifles, shotguns, most small arms."}, + {"id": "heavy", "name": "Heavy Weapons", "group": "combat", "attrs": ["strength", "agility"], "type": "advanced", "desc": "Machine guns, rocket launchers."}, + {"id": "throwing", "name": "Throwing", "group": "combat", "attrs": ["agility"], "type": "basic", "desc": "Grenades, javelins, thrown knives."}, + {"id": "unarmed", "name": "Unarmed Combat", "group": "combat", "attrs": ["strength", "agility"], "type": "basic", "desc": "Fists, grappling."}, + {"id": "scavenging", "name": "Scavenging", "group": "survival", "attrs": ["perception"], "type": "basic", "desc": "Finding useful items and resources."}, + {"id": "medicine", "name": "Medicine", "group": "survival", "attrs": ["intellect"], "type": "advanced", "desc": "Medical knowledge and surgery."}, + {"id": "firstaid", "name": "First Aid", "group": "survival", "attrs": ["intellect", "vitality"], "type": "basic", "desc": "Stabilizing and patching wounds."}, + {"id": "navigation", "name": "Navigation", "group": "survival", "attrs": ["intellect", "perception"], "type": "basic", "desc": "Maps, stars, landmarks."}, + {"id": "tracking", "name": "Tracking", "group": "survival", "attrs": ["perception"], "type": "basic", "desc": "Following trails and signs."}, + {"id": "animals", "name": "Animal Handling", "group": "survival", "attrs": ["charisma", "perception"], "type": "basic", "desc": "Training, calming and riding animals."}, + {"id": "stealth", "name": "Stealth", "group": "survival", "attrs": ["agility"], "type": "basic", "desc": "Moving unseen."}, + {"id": "climbing", "name": "Climbing", "group": "survival", "attrs": ["strength", "agility"], "type": "basic", "desc": "Scaling obstacles."}, + {"id": "swimming", "name": "Swimming", "group": "survival", "attrs": ["vitality", "strength"], "type": "basic", "desc": "Swimming and holding breath."}, + {"id": "foraging", "name": "Foraging", "group": "survival", "attrs": ["perception", "intellect"], "type": "basic", "desc": "Identifying edible plants and resources."}, + {"id": "trapping", "name": "Trapping", "group": "survival", "attrs": ["intellect", "agility"], "type": "advanced", "desc": "Setting and disarming traps."}, + {"id": "camouflage", "name": "Camouflage", "group": "survival", "attrs": ["agility", "perception"], "type": "basic", "desc": "Concealment in natural settings."}, + {"id": "weather", "name": "Weather Sense", "group": "survival", "attrs": ["perception"], "type": "basic", "desc": "Predicting short-term weather."}, + {"id": "persuasion", "name": "Persuasion", "group": "social", "attrs": ["charisma"], "type": "basic", "desc": "Convincing through logic or emotion."}, + {"id": "intimidation", "name": "Intimidation", "group": "social", "attrs": ["strength", "charisma"], "type": "basic", "desc": "Coercion through fear or strength."}, + {"id": "deception", "name": "Deception", "group": "social", "attrs": ["charisma"], "type": "basic", "desc": "Lies and trickery."}, + {"id": "leadership", "name": "Leadership", "group": "social", "attrs": ["charisma", "willpower"], "type": "basic", "desc": "Inspiring and directing allies."}, + {"id": "negotiation", "name": "Negotiation", "group": "social", "attrs": ["charisma", "intellect"], "type": "basic", "desc": "Bartering and diplomacy."}, + {"id": "hacking", "name": "Hacking", "group": "technical", "attrs": ["intellect"], "type": "advanced", "desc": "Breaching digital systems."}, + {"id": "electronics", "name": "Electronics", "group": "technical", "attrs": ["intellect"], "type": "advanced", "desc": "Repairing circuits and devices."}, + {"id": "mechanics", "name": "Mechanics", "group": "technical", "attrs": ["intellect"], "type": "basic", "desc": "Repairing and maintaining machines."}, + {"id": "engineering", "name": "Engineering", "group": "technical", "attrs": ["intellect"], "type": "advanced", "desc": "Complex designs, structures, inventions."}, + {"id": "demolitions", "name": "Demolitions", "group": "technical", "attrs": ["intellect", "perception"], "type": "advanced", "desc": "Setting up and disposing of explosives."}, + {"id": "chemistry", "name": "Chemistry", "group": "technical", "attrs": ["intellect"], "type": "advanced", "desc": "Compounds, fuels, medicines."}, + {"id": "cybernetics", "name": "Cybernetics", "group": "technical", "attrs": ["intellect"], "type": "advanced", "desc": "Understanding and repairing implants."}, + {"id": "programming", "name": "Programming", "group": "technical", "attrs": ["intellect"], "type": "advanced", "desc": "Writing and altering software."}, + {"id": "lockpicking", "name": "Lockpicking", "group": "technical", "attrs": ["agility", "perception"], "type": "basic", "desc": "Mechanical and electronic locks."}, + {"id": "drones", "name": "Drone Operation", "group": "technical", "attrs": ["intellect", "agility"], "type": "advanced", "desc": "Controlling and repairing drones."}, + {"id": "history", "name": "History", "group": "knowledge", "attrs": ["intellect"], "type": "advanced", "desc": "Past events."}, + {"id": "occult", "name": "Occult Knowledge", "group": "knowledge", "attrs": ["intellect", "willpower"], "type": "advanced", "desc": "Strange powers and Noxium lore."}, + {"id": "science", "name": "Science", "group": "knowledge", "attrs": ["intellect"], "type": "advanced", "desc": "Physics, chemistry, biology."}, + {"id": "tactics", "name": "Tactics", "group": "knowledge", "attrs": ["intellect", "perception"], "type": "advanced", "desc": "Battlefield strategy."}, + {"id": "resolve", "name": "Resolve", "group": "knowledge", "attrs": ["willpower"], "type": "basic", "desc": "Mental endurance, resisting fear."}, + {"id": "concentration", "name": "Concentration", "group": "knowledge", "attrs": ["willpower"], "type": "basic", "desc": "Focus under stress."}, + {"id": "linguistics", "name": "Linguistics", "group": "knowledge", "attrs": ["intellect"], "type": "advanced", "desc": "Old languages and codes."}, + {"id": "survivallore", "name": "Survival Lore", "group": "knowledge", "attrs": ["intellect", "perception"], "type": "basic", "desc": "Edible plants and hazards."}, + {"id": "cartography", "name": "Cartography", "group": "knowledge", "attrs": ["intellect"], "type": "advanced", "desc": "Map-making and terrain data."}, + {"id": "jury", "name": "Jury-Rigging", "group": "knowledge", "attrs": ["intellect"], "type": "basic", "desc": "Improvised repairs under pressure."}, + {"id": "psychology", "name": "Psychology", "group": "knowledge", "attrs": ["intellect", "charisma"], "type": "advanced", "desc": "Motives and mental state."} + ], + + "professions": [ + {"id": "civilian", "name": "Civilian", "desc": "+5 to one attribute of your choice and proficiency in two basic skills of your choice.", "bonus_attrs": [], "proficiencies": [], "picks": 2}, + {"id": "scavenger", "name": "Scavenger", "desc": "+5 Perception, proficiency in Scavenging and Stealth.", "bonus_attrs": ["perception"], "proficiencies": ["scavenging", "stealth"], "picks": 0}, + {"id": "soldier", "name": "Soldier", "desc": "+5 Agility or Strength, proficiency in Firearms and Melee Weapons.", "bonus_attrs": ["agility", "strength"], "proficiencies": ["firearms", "melee"], "picks": 0, "note": "The brainstorm says \"Might\" here; taken as Strength."}, + {"id": "technician", "name": "Technician", "desc": "+5 Intellect, proficiency in Mechanics and Electronics.", "bonus_attrs": ["intellect"], "proficiencies": ["mechanics", "electronics"], "picks": 0}, + {"id": "medic", "name": "Medic", "desc": "+5 Intellect or Vitality, proficiency in First Aid and Medicine.", "bonus_attrs": ["intellect", "vitality"], "proficiencies": ["firstaid", "medicine"], "picks": 0}, + {"id": "diplomat", "name": "Diplomat", "desc": "+5 Charisma, proficiency in Persuasion and Negotiation.", "bonus_attrs": ["charisma"], "proficiencies": ["persuasion", "negotiation"], "picks": 0} + ], + + "classes": [ + {"id": "warrior", "name": "Warrior", "subclasses": [{"id": "berserker", "name": "Berserker", "desc": "Melee and raw strength, mutation synergies."}, {"id": "guardian", "name": "Guardian", "desc": "Defense and protecting allies."}, {"id": "slayer", "name": "Slayer", "desc": "Balanced melee and ranged."}]}, + {"id": "shooter", "name": "Shooter", "subclasses": [{"id": "gunslinger", "name": "Gunslinger", "desc": "Fast and mobile, bonus-action attacks."}, {"id": "marksman", "name": "Marksman", "desc": "Precision, high critical chance."}, {"id": "heavygunner", "name": "Heavy Gunner", "desc": "Heavy weapons, suppression fire."}]}, + {"id": "tech", "name": "Tech", "subclasses": [{"id": "engineer", "name": "Engineer", "desc": "Mechanics, electronics, building."}, {"id": "hacker", "name": "Hacker", "desc": "Digital infiltration, Diesium interfaces."}, {"id": "operator", "name": "Operator", "desc": "Combat support, drones and automation."}]}, + {"id": "mutant", "name": "Mutant", "subclasses": [{"id": "adapted", "name": "Adapted", "desc": "Lower Sanity cost for mutations."}, {"id": "symbiote", "name": "Symbiote", "desc": "Noxium/Diesium hybrid, powerful but unstable."}, {"id": "behemoth", "name": "Behemoth", "desc": "Mutation-heavy brute."}]}, + {"id": "leader", "name": "Leader", "subclasses": [{"id": "commander", "name": "Commander", "desc": "Inspires allies, Leadership buffs."}, {"id": "diplomat_c", "name": "Diplomat", "desc": "Negotiation and alliances."}, {"id": "tactician", "name": "Tactician", "desc": "Battlefield awareness, initiative and positioning."}]}, + {"id": "scholar", "name": "Scholar", "subclasses": [{"id": "scientist", "name": "Scientist", "desc": "Science and Medicine."}, {"id": "occultist", "name": "Occultist", "desc": "Noxium phenomena, ritual powers."}, {"id": "archivist", "name": "Archivist", "desc": "Lore and lost secrets."}]} + ], + + "talent_categories": [ + {"id": "combat", "name": "Combat"}, + {"id": "survival", "name": "Survival"}, + {"id": "technical", "name": "Technical"}, + {"id": "social", "name": "Social"}, + {"id": "knowledge", "name": "Knowledge & Mental"}, + {"id": "synergy", "name": "Mutation / Implant Synergy"} + ], + + "talents": [ + {"id": "quick_reflexes", "name": "Quick Reflexes", "category": "combat", "desc": "Adds Agility and Perception modifiers to Initiative."}, + {"id": "deadeye", "name": "Deadeye", "category": "combat", "desc": "Reroll one missed firearm attack per combat."}, + {"id": "brutal_strikes", "name": "Brutal Strikes", "category": "combat", "desc": "Bonus damage with blunt or polearm weapons."}, + {"id": "dual_wielder", "name": "Dual Wielder", "category": "combat", "desc": "Attack with two light weapons as a bonus action."}, + {"id": "protector", "name": "Guardian", "category": "combat", "desc": "Take an attack meant for an adjacent ally."}, + {"id": "opportunist", "name": "Opportunist", "category": "combat", "desc": "One extra reaction per round, capped by Agility modifier."}, + {"id": "surefooted", "name": "Surefooted", "category": "combat", "desc": "Ignore rough-terrain movement penalties."}, + {"id": "field_medic", "name": "Field Medic", "category": "survival", "desc": "Perform First Aid as a bonus action."}, + {"id": "scav_eye", "name": "Scavenger's Eye", "category": "survival", "desc": "Bonus to Scavenging rolls."}, + {"id": "beast_whisperer", "name": "Beast Whisperer", "category": "survival", "desc": "Bonus to Animal Handling; animals less likely to attack."}, + {"id": "stalker", "name": "Stalker", "category": "survival", "desc": "Bonus to Stealth when moving slowly."}, + {"id": "pathfinder", "name": "Pathfinder", "category": "survival", "desc": "Allies traveling with you ignore Navigation penalties."}, + {"id": "tinkerer", "name": "Tinkerer", "category": "technical", "desc": "Attempt Mechanics and Electronics without full tools."}, + {"id": "hackers_instinct", "name": "Hacker's Instinct", "category": "technical", "desc": "Bonus to Hacking; occasional reroll."}, + {"id": "engineers_touch", "name": "Engineer's Touch", "category": "technical", "desc": "Halves time for Engineering tasks."}, + {"id": "demolitionist", "name": "Demolitionist", "category": "technical", "desc": "Explosives you set deal extra damage."}, + {"id": "silver_tongue", "name": "Silver Tongue", "category": "social", "desc": "Bonus to Persuasion."}, + {"id": "intimidating", "name": "Intimidating Presence", "category": "social", "desc": "Nearby enemies must resist or suffer morale loss."}, + {"id": "negotiator", "name": "Negotiator", "category": "social", "desc": "Once per day, reroll a failed Negotiation."}, + {"id": "leaders_voice", "name": "Leader's Voice", "category": "social", "desc": "Nearby allies gain an attack bonus after a successful Leadership check."}, + {"id": "iron_will", "name": "Iron Will", "category": "knowledge", "desc": "Bonus to Resolve; resists fear and Sanity loss."}, + {"id": "battle_planner", "name": "Battle Planner", "category": "knowledge", "desc": "Bonus to Tactics; allies gain initiative bonus."}, + {"id": "scholar", "name": "Scholar", "category": "knowledge", "desc": "Permanent bonus to one Knowledge skill."}, + {"id": "focus_mastery", "name": "Focus Mastery", "category": "knowledge", "desc": "Spend a reaction to reroll a failed Concentration check."}, + {"id": "adaptive_flesh", "name": "Adaptive Flesh", "category": "synergy", "desc": "Reduces Mutation load by 1."}, + {"id": "cyber_integration", "name": "Cyber Integration", "category": "synergy", "desc": "Reduces Implant load by 1."}, + {"id": "hybrid_symbiosis", "name": "Hybrid Symbiosis", "category": "synergy", "desc": "Extra reaction per round with both Noxium and Diesium mutations."}, + {"id": "resilient_mind", "name": "Resilient Mind", "category": "synergy", "desc": "Reduces Sanity damage from mutations by 1."}, + {"id": "versatile_training", "name": "Versatile Training", "category": "knowledge", "desc": "Gain 2 additional proficiency picks (two skills, or Expertise in one).", "proficiency_picks": 2, "placeholder": true} + ], + + "augments": [ + {"id": "claws", "kind": "mutation", "source": "noxium", "name": "Claws", "cost": 1, "desc": "Gain natural melee attack (1d6 damage, counts as bladed)."}, + {"id": "regeneration", "kind": "mutation", "source": "noxium", "name": "Regeneration", "cost": 2, "desc": "Regain 1 HP per round for 3 rounds once per combat (1/day)."}, + {"id": "chitin", "kind": "mutation", "source": "noxium", "name": "Chitinous Armor", "cost": 2, "desc": "+1 Armor Value."}, + {"id": "nightvision", "kind": "mutation", "source": "noxium", "name": "Night Vision", "cost": 1, "desc": "See in total darkness up to 20 m."}, + {"id": "toxicspit", "kind": "mutation", "source": "noxium", "name": "Toxic Spit", "cost": 2, "desc": "Ranged attack, 1d6 acid damage, 5 m range."}, + {"id": "energychannel", "kind": "mutation", "source": "diesium", "name": "Energy Channel", "cost": 2, "desc": "Add +2 damage to Energy Weapons."}, + {"id": "reflexbooster", "kind": "mutation", "source": "diesium", "name": "Reflex Booster", "cost": 1, "desc": "+2 Initiative."}, + {"id": "reinforcedskin", "kind": "mutation", "source": "diesium", "name": "Reinforced Skin", "cost": 2, "desc": "+1 Armor Value."}, + {"id": "cyberclaw", "kind": "mutation", "source": "diesium", "name": "Cyber Claw", "cost": 2, "desc": "Natural melee attack (1d8 damage)."}, + {"id": "symbioticnode", "kind": "mutation", "source": "hybrid", "name": "Symbiotic Node", "cost": 3, "desc": "Once per combat, reroll a failed attack or defense."}, + {"id": "bioenergycannon", "kind": "mutation", "source": "hybrid", "name": "Bio-Energy Cannon", "cost": 4, "desc": "Ranged attack, 2d8 energy damage, 10 m range."}, + {"id": "cyberarm", "kind": "implant", "source": null, "name": "Cyber Arm", "cost": 2, "desc": "+2 damage with melee attacks, can crush objects."}, + {"id": "neurallink", "kind": "implant", "source": null, "name": "Neural Link", "cost": 2, "desc": "+10 to Hacking/Electronics; control drones."}, + {"id": "exospine", "kind": "implant", "source": null, "name": "Exo-Spine", "cost": 2, "desc": "+2 Strength Modifier for carrying/lifting."}, + {"id": "targetinghud", "kind": "implant", "source": null, "name": "Targeting HUD", "cost": 1, "desc": "+10 to Firearms checks."}, + {"id": "respirator", "kind": "implant", "source": null, "name": "Respirator Implant", "cost": 1, "desc": "Immune to toxic environments."}, + {"id": "dermalplating", "kind": "implant", "source": null, "name": "Dermal Plating", "cost": 2, "desc": "+1 Armor Value."}, + {"id": "adrenalbooster", "kind": "implant", "source": null, "name": "Adrenal Booster", "cost": 2, "desc": "Once per combat, gain +2 Initiative and 1 extra Bonus Action."}, + {"id": "energycore", "kind": "implant", "source": null, "name": "Energy Core", "cost": 3, "desc": "Powers other implants; may explode if overloaded."} + ], + + "conditions": [ + {"id": "fatigue", "name": "Fatigue", "levels": ["-5 to rolls, -1 Initiative.", "-10 to rolls, -2 Initiative.", "Incapacitated."], "removal": "Removed by Long Rest in safe shelter."}, + {"id": "bleeding", "name": "Bleeding", "levels": ["Lose 1 HP/round.", "Lose 2 HP/round.", "Unconscious in 1d4 rounds."], "removal": "Stabilize with First Aid or Medical Supplies."}, + {"id": "stress", "name": "Stress", "levels": ["-5 to Concentration/Resolve.", "-10 to Concentration/Resolve.", "Panic (must flee/freeze)."], "removal": "Reduced by Long Rest or Leadership/Persuasion."}, + {"id": "contamination", "name": "Contamination", "levels": ["Minor mutation risk.", "Roll Willpower/Vitality or gain mutation.", "Severe mutation or sanity collapse."], "removal": "Medical aid, Noxium Antidote, GM event."}, + {"id": "infection", "name": "Infection", "levels": ["-5 to physical rolls.", "-10, daily HP loss.", "Deadly, HP halved until cured."], "removal": "Medicine skill or antibiotics."}, + {"id": "exhaustion", "name": "Exhaustion", "levels": ["Half movement.", "Cannot recover HP on Short Rests.", "Collapse, only crawl."], "removal": "Two consecutive Long Rests."} + ], + + "equipment_categories": [ + {"id": "melee", "name": "Melee Weapons", "stat": "Damage"}, + {"id": "firearm", "name": "Firearms", "stat": "Damage"}, + {"id": "heavy", "name": "Heavy Weapons", "stat": "Damage"}, + {"id": "energy", "name": "Energy Weapons", "stat": "Damage"}, + {"id": "thrown", "name": "Thrown Weapons", "stat": "Damage"}, + {"id": "armor", "name": "Armor", "stat": "Armor"}, + {"id": "resource", "name": "Resources & Supplies", "stat": "Type"}, + {"id": "ammo", "name": "Ammunition", "stat": "Used with"}, + {"id": "tool", "name": "Tools & Gear", "stat": "Type"} + ], + + "equipment": [ + {"id": "knife", "name": "Knife", "cat": "melee", "stat": "1d4", "kg": 0.5, "note": ""}, + {"id": "machete", "name": "Machete", "cat": "melee", "stat": "1d6", "kg": 1, "note": ""}, + {"id": "axe", "name": "Axe", "cat": "melee", "stat": "1d8", "kg": 2, "note": ""}, + {"id": "club", "name": "Club", "cat": "melee", "stat": "1d6", "kg": 1.5, "note": ""}, + {"id": "spear", "name": "Spear", "cat": "melee", "stat": "1d8", "kg": 2.5, "note": "Reach, can be thrown."}, + {"id": "improvised", "name": "Improvised Tool (pipe, wrench, etc.)", "cat": "melee", "stat": "1d4-1d6", "kg": 3, "note": "Weighs 1-3 kg."}, + {"id": "shockbaton", "name": "Shock Baton", "cat": "melee", "stat": "1d6 + shock", "kg": 1.5, "note": "Non-lethal option."}, + {"id": "vibroblade", "name": "Vibroblade", "cat": "melee", "stat": "1d8 + bleed", "kg": 1.2, "note": "Extra bleeding on critical hits."}, + {"id": "pistol", "name": "Pistol", "cat": "firearm", "stat": "2d6", "kg": 1, "note": ""}, + {"id": "smg", "name": "SMG", "cat": "firearm", "stat": "2d6 (burst)", "kg": 2.5, "note": ""}, + {"id": "rifle", "name": "Rifle", "cat": "firearm", "stat": "2d8", "kg": 3.5, "note": "Two-handed."}, + {"id": "shotgun", "name": "Shotgun", "cat": "firearm", "stat": "2d10", "kg": 3, "note": ""}, + {"id": "machinegun", "name": "Machine Gun", "cat": "heavy", "stat": "3d8", "kg": 10, "note": ""}, + {"id": "rocketlauncher", "name": "Rocket Launcher", "cat": "heavy", "stat": "4d10 (area)", "kg": 12, "note": ""}, + {"id": "flamethrower", "name": "Flamethrower", "cat": "heavy", "stat": "2d8 per round", "kg": 8, "note": ""}, + {"id": "plasmathrower", "name": "Plasmathrower", "cat": "heavy", "stat": "3d10 per burst", "kg": 9, "note": "Can overheat."}, + {"id": "railpistol", "name": "Rail Pistol", "cat": "energy", "stat": "2d8", "kg": 3.5, "note": ""}, + {"id": "railgun", "name": "Railgun (Sniper)", "cat": "energy", "stat": "3d10", "kg": 9, "note": ""}, + {"id": "laserrifle", "name": "Laser Rifle", "cat": "energy", "stat": "2d8", "kg": 4, "note": "Overheats on sustained use."}, + {"id": "laserpistol", "name": "Laser Pistol", "cat": "energy", "stat": "2d6", "kg": 2.5, "note": ""}, + {"id": "particlepistol", "name": "Particle Pistol", "cat": "energy", "stat": "2d6", "kg": 2, "note": ""}, + {"id": "plasmacutter", "name": "Plasma Cutter", "cat": "energy", "stat": "2d10", "kg": 5, "note": ""}, + {"id": "tesla", "name": "Tesla Projector", "cat": "energy", "stat": "2d8 (cone)", "kg": 6, "note": ""}, + {"id": "grenade", "name": "Grenade", "cat": "thrown", "stat": "3d6 (area)", "kg": 0.5, "note": "Frag, Stun and Flash types are mentioned in the document."}, + {"id": "molotov", "name": "Molotov", "cat": "thrown", "stat": "2d6 + fire", "kg": 0.5, "note": ""}, + {"id": "javelin", "name": "Javelin", "cat": "thrown", "stat": "1d8", "kg": 2, "note": ""}, + {"id": "cloth", "name": "Cloth / Layered Clothing", "cat": "armor", "tier": "light", "stat": "+0", "kg": 1, "note": ""}, + {"id": "leather", "name": "Leather Jacket / Padded", "cat": "armor", "tier": "light", "stat": "+1", "kg": 2, "note": ""}, + {"id": "scraparmor", "name": "Scrap Armor", "cat": "armor", "tier": "light", "stat": "+2", "kg": 3, "note": ""}, + {"id": "kevlar", "name": "Kevlar Vest", "cat": "armor", "tier": "medium", "stat": "+3", "kg": 5, "note": ""}, + {"id": "tactical", "name": "Tactical Armor", "cat": "armor", "tier": "medium", "stat": "+4", "kg": 7, "note": ""}, + {"id": "reactive", "name": "Reactive Plating", "cat": "armor", "tier": "medium", "stat": "+4", "kg": 8, "note": "Medium/Advanced. Chance to absorb one hit."}, + {"id": "nanoweave", "name": "Nano-weave Suit", "cat": "armor", "tier": "medium", "stat": "+4", "kg": 6, "note": ""}, + {"id": "adaptive", "name": "Adaptive Nano-Fabric", "cat": "armor", "tier": "advanced", "stat": "+5", "kg": 6, "note": "Needs power."}, + {"id": "riotgear", "name": "Riot Gear", "cat": "armor", "tier": "heavy", "stat": "+5", "kg": 12, "note": ""}, + {"id": "platecarrier", "name": "Ballistic Plate Carrier", "cat": "armor", "tier": "heavy", "stat": "+6", "kg": 14, "note": ""}, + {"id": "exosuit", "name": "Military Exosuit", "cat": "armor", "tier": "heavy", "stat": "+7", "kg": 25, "note": "Heavy/Powered, needs fuel/power. The equipment table in the document says +6 and about 20 kg; the armor table's values are used here."}, + {"id": "shieldgen", "name": "Personal Shield Generator", "cat": "armor", "tier": "special", "stat": "Variable", "kg": 4, "note": "Consumes Energy Cells."}, + {"id": "rations", "name": "Rations & Water", "cat": "resource", "stat": "Consumable", "kg": 1, "note": "About 1 kg per day."}, + {"id": "fuel", "name": "Fuel", "cat": "resource", "stat": "Resource", "kg": 5, "note": "About 2-5 kg."}, + {"id": "ammo_ballistic", "name": "Ammunition (Ballistic)", "cat": "resource", "stat": "Resource", "kg": 2, "note": "About 0.5-2 kg."}, + {"id": "ammo_energy", "name": "Ammunition (Energy Cells)", "cat": "resource", "stat": "Resource", "kg": 2, "note": "About 0.5-2 kg."}, + {"id": "specialty_rounds", "name": "Specialty Rounds", "cat": "resource", "stat": "Resource", "kg": 1, "note": "About 0.5-1 kg."}, + {"id": "medical", "name": "Medical Supplies", "cat": "resource", "stat": "Consumable", "kg": 2, "note": "Bandages, antibiotics, stimpacks. About 0.5-2 kg."}, + {"id": "noxium_antidote", "name": "Noxium Antidote", "cat": "resource", "stat": "Consumable", "kg": 0.5, "note": ""}, + {"id": "crafting", "name": "Crafting Materials", "cat": "resource", "stat": "Resource", "kg": 5, "note": "Scrap metal, electronics, chemicals. About 1-5 kg."}, + {"id": "noxium_crystals", "name": "Noxium Crystals", "cat": "resource", "stat": "Exotic resource", "kg": 2, "note": "Used for mutations, dangerous to carry. About 0.5-2 kg."}, + {"id": "diesium_components", "name": "Diesium Tech Components", "cat": "resource", "stat": "Resource", "kg": 4, "note": "Implant fuel and advanced crafting. About 1-4 kg."}, + {"id": "am_standard", "name": "Standard Rounds", "cat": "ammo", "stat": "Firearms", "kg": 0.5, "note": "30 shots - Common."}, + {"id": "am_ap", "name": "Armor-Piercing (AP)", "cat": "ammo", "stat": "Firearms, Railgun", "kg": 0.5, "note": "20 shots - Uncommon."}, + {"id": "am_hp", "name": "Hollow-Point", "cat": "ammo", "stat": "Firearms", "kg": 0.5, "note": "20 shots - Uncommon."}, + {"id": "am_incendiary", "name": "Incendiary Rounds", "cat": "ammo", "stat": "Firearms, Shotgun", "kg": 0.5, "note": "15 shots - Rare."}, + {"id": "am_explosive", "name": "Explosive Rounds", "cat": "ammo", "stat": "Firearms, Heavy", "kg": 1, "note": "10 shots - Rare."}, + {"id": "am_tracer", "name": "Tracer Rounds", "cat": "ammo", "stat": "Firearms, Machine Gun", "kg": 0.5, "note": "30 shots - Common."}, + {"id": "am_railslug", "name": "Rail Slugs", "cat": "ammo", "stat": "Rail weapons", "kg": 1, "note": "10 shots - Uncommon."}, + {"id": "am_penetrator", "name": "Penetrator Slugs", "cat": "ammo", "stat": "Rail weapons", "kg": 1, "note": "5 shots - Rare."}, + {"id": "am_plasma", "name": "Plasma Canisters", "cat": "ammo", "stat": "Plasma weapons", "kg": 2, "note": "5 shots - Very Rare."}, + {"id": "am_fuel", "name": "Fuel Tanks", "cat": "ammo", "stat": "Flamethrower", "kg": 5, "note": "5 shots - Uncommon."}, + {"id": "am_tesla", "name": "Tesla Capacitors", "cat": "ammo", "stat": "Tesla Projector", "kg": 1, "note": "5 shots - Rare."}, + {"id": "am_cells", "name": "Energy Cells (Standard)", "cat": "ammo", "stat": "Laser, Particle", "kg": 0.5, "note": "10 shots - Common."}, + {"id": "am_cells_hc", "name": "High-Cap Energy Cells", "cat": "ammo", "stat": "Laser, Particle, Rail", "kg": 1, "note": "15 shots - Uncommon."}, + {"id": "detectors", "name": "Detectors & Scanners", "cat": "tool", "stat": "Tool", "kg": 3, "note": "About 1-3 kg."}, + {"id": "lockpicks", "name": "Lockpicks", "cat": "tool", "stat": "Tool", "kg": 0, "note": "Negligible weight."}, + {"id": "mechkit", "name": "Mechanic Kit", "cat": "tool", "stat": "Tool", "kg": 5, "note": ""}, + {"id": "hackdevice", "name": "Hacking Device", "cat": "tool", "stat": "Tool", "kg": 2, "note": ""} + ], + + "sections": [ + { + "id": "basics", + "title": "Core Principle", + "blocks": [ + { + "p": "Arcane Wasteland is set about 113 years after a meteorite struck and brought two materials: Noxium and Diesium. Both heavily change humans and animals. The game uses a d100." + }, + { + "h": "The check" + }, + { + "p": "Roll a d100. The check succeeds if the result is less than or equal to Attribute + Skill (± situational modifiers)." + }, + { + "list": [ + "01-05: critical success", + "96-100: critical failure", + "Complex actions may require multiple checks." + ] + } + ] + }, + { + "id": "difficulty", + "title": "Difficulty Levels", + "blocks": [ + { + "p": "The GM picks the difficulty; the modifier is added to the target number." + }, + { + "table": { + "head": [ + "Level", + "Modifier" + ], + "rows": [ + [ + "Trivial", + "+60" + ], + [ + "Elementary", + "+50" + ], + [ + "Easy", + "+30" + ], + [ + "Routine", + "+20" + ], + [ + "Ordinary", + "+10" + ], + [ + "Challenging", + "±0" + ], + [ + "Difficult", + "-10" + ], + [ + "Hard", + "-20" + ], + [ + "Very Hard", + "-30" + ], + [ + "Arduous", + "-40" + ], + [ + "Punishing", + "-50" + ], + [ + "Hellish", + "-60" + ] + ] + } + } + ] + }, + { + "id": "attributes", + "title": "Attributes and Modifiers", + "blocks": [ + { + "p": "There are seven attributes. An attribute's modifier (Mod) is its value divided by 10, rounded down. The maximum at character creation is 45. Talents, implants or mutations can raise it." + }, + { + "attributes": true + } + ] + }, + { + "id": "derived", + "title": "Derived Stats", + "blocks": [ + { + "derived": true + } + ] + }, + { + "id": "skills", + "title": "Skills", + "blocks": [ + { + "p": "Skill value + attribute give the target number of a check. At creation a skill may be at most half the attribute (rounded down). As a cap in play, without talents or story rewards, the limit is attribute x 2." + }, + { + "list": [ + "Basic skills can be attempted untrained (only the attribute counts).", + "Advanced skills must be unlocked first by spending 10 points of the skill pool (free if your profession grants proficiency in them). Once unlocked they are raised like any other skill.", + "Proficiency: +10. Expertise: +20.", + "Every character gets 2 free proficiency picks on top of the profession's proficiencies. A talent can grant 2 more.", + "Putting two proficiency picks into the same skill makes it Expertise (a profession proficiency counts as one of the two).", + "Proficiency in an advanced skill unlocks it for free.", + "Groups: Combat, Survival, Social, Technical, Knowledge & Mental." + ] + }, + { + "p": "Skills listing two attributes (e.g. STR/AGI): the higher of the two counts. This is not defined in the brainstorm and is an assumption of the app.", + "placeholder": true + }, + { + "p": "The free proficiency picks, the Versatile Training talent and the way Expertise is earned are house rules of the app, not part of the brainstorm. They can be changed in rules.json (creation.free_proficiencies, talents).", + "placeholder": true + }, + { + "p": "The unlock cost for advanced skills (10 points) is a house rule of the app, not part of the brainstorm. It can be changed in rules.json (creation.advanced_unlock_cost).", + "placeholder": true + }, + { + "skilllist": true + } + ] + }, + { + "id": "creation", + "title": "Character Creation", + "blocks": [ + { + "list": [ + "All attributes start at 25. Distribute 90 points (at most +20 on one attribute, maximum 45).", + "Derive modifiers and derived stats.", + "Spend the skill point pool (the GM sets its size, e.g. 150).", + "Choose a profession: +5 to one attribute and 2-3 proficiencies.", + "Spend your 2 free proficiency picks on any skills (two on one skill = Expertise).", + "Choose 1-2 starting talents.", + "Starting gear: one weapon (melee or firearm), light armor or clothing, 1-2 resources and one tool or utility item." + ] + }, + { + "p": "The numbers above are the Standard preset. In the character creator the GM or group can pick another rules preset (or change single values); it only changes the creation numbers such as point pools, caps and talent counts. Presets are not part of the brainstorm; they are defined in rules.json.", + "placeholder": true + }, + { + "professions": true + }, + { + "h": "Classes and sub-classes" + }, + { + "classes": true + } + ] + }, + { + "id": "combat", + "title": "Combat", + "blocks": [ + { + "list": [ + "Initiative: 1d20 + Agility Mod or Perception Mod.", + "Attacks are rolled against attribute + skill.", + "Dodge reduces the chance to be hit only if the target has a Reaction available.", + "Damage reduction: flat or relative, chosen by the GM. With flat reduction at least 1 damage goes through.", + "Base movement: 6 m per turn.", + "Per turn: 1 Normal Action, 1 Bonus Action, and Reactions up to the Perception Mod, capped by the Agility Mod." + ] + }, + { + "h": "Noise" + }, + { + "p": "Loud actions (especially firearms) can attract enemies, mostly in cities. Melee and stealth are deliberately favored." + } + ] + }, + { + "id": "rest", + "title": "Rest and Recovery", + "blocks": [ + { + "table": { + "head": [ + "Rest", + "Duration", + "Recovery" + ], + "rows": [ + [ + "Short rest", + "about 1 hour", + "1d4 + Vitality Mod HP. A Willpower check may restore 1 Sanity." + ], + [ + "Long rest", + "6-8 hours, safe shelter", + "Full HP, 1d6 + Willpower Mod Sanity, some conditions are removed." + ], + [ + "Unsafe rest", + "any", + "Half recovery, plus a risk of contamination or an encounter." + ] + ] + } + } + ] + }, + { + "id": "conditions", + "title": "Conditions", + "blocks": [ + { + "p": "Most conditions have severity levels I to III that stack. How different conditions combine is not yet settled in the brainstorm.", + "placeholder": true + }, + { + "conditions": true + } + ] + }, + { + "id": "augments", + "title": "Mutations and Implants", + "blocks": [ + { + "p": "Mutations (Noxium = flesh, Diesium = tech, or Hybrid) and implants (Diesium or pre-meteor cybernetics) share one capacity pool, the Augmentation Capacity. Mutations cost 1-4, implants 1-3. Exceeding the capacity risks corruption or rejection." + }, + { + "augmentlist": true + } + ] + }, + { + "id": "talents", + "title": "Talents", + "blocks": [ + { + "p": "Talents are grouped in six categories: Combat, Survival, Technical, Social, Knowledge & Mental, and Mutation/Implant Synergy." + }, + { + "talentlist": true + } + ] + }, + { + "id": "equipment", + "title": "Equipment", + "blocks": [ + { + "list": [ + "Starting gear: 1 weapon (melee or firearm), light armor or clothing, 1-2 resources (e.g. rations, medical supplies), 1 toolkit or utility item.", + "Carry capacity: Strength Mod x 10 kg." + ] + }, + { + "p": "The brainstorm writes \"Might Modifier\" for the carry capacity (taken as Strength) and also mentions a slot-based inventory without weight. Both approaches are shown in the app; weights are approximate, and for ranges the upper value is used.", + "placeholder": true + }, + { + "equipment": true + } + ] + }, + { + "id": "progression", + "title": "Progression", + "blocks": [ + { + "p": "Experience points (XP) are earned from encounters, survival and exploration. Attributes rise slowly. Mutations and implants are acquired, not leveled." + }, + { + "p": "Open question: level-based like D&D, or freely spendable XP like DSA and Rogue Trader.", + "placeholder": true + } + ] + } + ] +} diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..8c6ce78 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,4 @@ +fastapi>=0.115 +uvicorn[standard]>=0.30 +python-docx>=1.1 +reportlab>=4.2 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..edb9dc2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,9 @@ +services: + awcc: + build: . + restart: unless-stopped + ports: + - "8080:8000" # Host-Port bei Bedarf ändern, oder hinter einen Reverse Proxy hängen + volumes: + - ./db:/db # SQLite-Datenbank (Charaktere) + - ./backend/data:/app/data:ro # rules.json: bearbeiten, Seite neu laden, fertig diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..7a70ba2 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,12 @@ + + + + + + Arcane Wasteland Character Sheet + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..10a2423 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,1698 @@ +{ + "name": "aw-character-creator", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "aw-character-creator", + "version": "0.1.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.4", + "vite": "^5.4.11" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", + "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.8", + "@babel/types": "^7.29.8", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz", + "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz", + "integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", + "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", + "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz", + "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.8", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.9", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.8", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", + "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz", + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^22.20 || ^24.12 || >=25" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.64.10.tgz", + "integrity": "sha512-oJ9ZfVIZjSjts0ZIYA48+5T0vurE5fQfX/Liad2U52Y6EN99x/OCdjGGuKMDP6jSk2i2lY6jwwA3X0drEc4PBg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.64.10.tgz", + "integrity": "sha512-LylBINgYYwgHNz8OMCy5+Y0w/LEgRYE0PcAIZfEuTuLNMf0S40GSLX6SFwqZsBLplS7RIHHy4zOAbl8Y5cQEvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.64.10.tgz", + "integrity": "sha512-vbuT3VT1GBI2fAOoUJUrsHVoOg9nbrFXTM7e3DSnb9PYf4n6jZCN8v4Vo8O6x4u5B67+/c803b8BtCZe2nIeqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.64.10.tgz", + "integrity": "sha512-qYUp/qYvM3T4cF+VWalPl+przBUESILxi+qZ1m1MVRHpg06vS+jHaxXubjCaRpXjLJPDFdXzOZ0FABDghHOhNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.64.10.tgz", + "integrity": "sha512-v9NRQG+JztbP4DP/0yuhSyDcEJk047lYbqeNnqIgbXITcVDjGDS7OpkW5nadSY3tJ7MY8W1qIMMqP4Q3Q8BDjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.64.10.tgz", + "integrity": "sha512-CHc9LBHdxhn6/NXfb9IegXCWoz5VlvcDOx9QrzZ9q+XYhFlfzwymSWJjOlZcEMMtC1zgMV7qxDe6U18AI1SG0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.64.10.tgz", + "integrity": "sha512-ble2WR7kWfzZFJUd3ODMGCJn1XDszptfRC0QvWc0h9/EA6MxnrQ1mvbjPZifEdgHyfHhDrwWeKeJONDITcrHSg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.64.10.tgz", + "integrity": "sha512-DMCYegihxBMKvLpODdk4OsvIgxtHTi+Oddf1Pm3d6wMVNjcBiG2pqyXjMPy55HgG1gCdEFr9VfhB1CmvuKn1lw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.64.10.tgz", + "integrity": "sha512-HQ6HuVH9TmhvPWIas7MA/KeAROgdwqH3REpUU6hZq47NW7m1b1QCrHgM+M3+N/B8DfMt88x1/z79ppRc9RflCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.64.10.tgz", + "integrity": "sha512-avBhxba1DdctX0kxKkN3JWdTSg72QsxSn6FdfhZ9MkL3TTYDOXqxY1GqbC7VNttlgviK7tCe2No5btfRkFgeIg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.64.10.tgz", + "integrity": "sha512-UtQMex7fiXq0W/GqcWRpy6XKqUbXgQeGKB+Bd5rJngmHzpI+3kjwpWFLAhKg02onFsIMSh+Zx0zp9JIMQ7/05A==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.64.10.tgz", + "integrity": "sha512-0Aum2pUsCSuOopi6oka+nR1DTj/nfvc1xjL979lvh6kXUjNa30TCX7sKFjyMsrX7bK3bNVs0FsJwQcE2HCWX1Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.64.10.tgz", + "integrity": "sha512-4dgsouKal3qfMFORgtNigLPt7K3HXiO6jTr7+nFJv1GWu1OkZx0kvQIXbK4sjrIGnaLBk0s80eQCQ9hPIelLrw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.64.10.tgz", + "integrity": "sha512-d7NE89try3jisYzBD7J9M5iwfgcrXYC4dwHEjQ3HIWBftvwch1U/cy3iZ26SthtUOyClKiu7iqYiFjQEwiOlqQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.64.10.tgz", + "integrity": "sha512-dqB5ChSBp91JWXxpCKAS5ZVAE38esKQvdfyqANm0lF5JPiQrXnYwgG3oVBQmuNRcQ1WHkA3j5qYLsrl2CtfhCA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.64.10.tgz", + "integrity": "sha512-7GMf3vbQQslorWLmfsbi5fdt9RVnglk205XpOMFvW6UY5jE5oJc6JLieQJPHtsYlZ2EO0PtC06nY9Hz/IG8guw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.64.10.tgz", + "integrity": "sha512-tuKbkB23DKc5LG+irPSUnZZztRHqC3CNmyxeWloueBteHB+i+1HkRCMzAE41lseLDlarybeLhqfibFitKOxKMg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.64.10.tgz", + "integrity": "sha512-ntHtQOMw7oIshHRF1swV3vyBw+beQt9PeZ04O3D32EeDZUMoHMJuZKp4/fDllH/+xogeK0GUCONVfjjKusqKLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.64.10.tgz", + "integrity": "sha512-Dlh8q8r145aYgh+N3gNIG1dz35Fz/FCxe5hs/43orDsffjP8S1P4Xz5I4FpSJsDS4LpQw1QmswZkQlUbkCldjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.64.10.tgz", + "integrity": "sha512-VBJhHWz/55u45CWFv9OmfSRDgJDVENESgFxSAn13gIKJpTuFJbP4/7ymMZhDfeKFx1zGn1XBsLnNB7Ryy71qww==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.64.10.tgz", + "integrity": "sha512-Vjcazg+EEzUfIz+LcaxS6YtbQHo+sv0sCD+5VbwhY504bCKNW4OOreVgKq61pHT2esRQ/+AXYVPStDwxSvAOdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.64.10.tgz", + "integrity": "sha512-jJAaP4El+HWxYkM0jeJghASaFgfnluY0FRHhyHXxU6STs/nBhKMIxIMDrJEFg2ftKz6orX9WAo4diVan5NugNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.64.10.tgz", + "integrity": "sha512-bXXdRUfRx9PaHCToKt8R/7wjDV6Tbk/hmSHK0uQBKmD3rj4jkuYndct8uGX77ZuZsePrVkQbWUgPR2jJhCTMpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.64.10.tgz", + "integrity": "sha512-57Idx+VkEOQeG6Ys6sZOBFT7FfbeyxGv9A3k1m+Lf/z2SwqT40rNWbAINzjPHSMoCCBvY7Fnb9RGZWQin/HHAw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.64.10.tgz", + "integrity": "sha512-vrvuasIpm/xf+BpZbzgirku0WnrQZMAc+H2Ai26jzqBxYEmQQE4DdJb7h8erkJMfRRipx0ma2Cty8jJwUm9ocQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.11.29", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.29.tgz", + "integrity": "sha512-YeesxhUmR4h5y5V8KF8iBCqJb8YFrBJ++XBTeGcWIaQOYXGN19JM0FoiOjAhwuDoln8owMgXcWBmgHtYSkky2w==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.29.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.3.tgz", + "integrity": "sha512-1R4kiYKXGViqEN0CnoDrXc1StD9niAwu+j2dukWzrD4bJgsD4lDmEp0CRbc6E/vYJIfTHwPmwyaKtVSudICdPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.11.26", + "caniuse-lite": "^1.0.30001813", + "electron-to-chromium": "^1.5.439", + "node-releases": "^2.0.57", + "update-browserslist-db": "^1.3.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001816", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001816.tgz", + "integrity": "sha512-+8Yx7BXCoqk6IF8yTicjfUR6D/ldJzdlsodlEOiOSPmhK844WIgk67/zIQaGAOxNkZyyvBlrRFnLvqKIoqbAFw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.459", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.459.tgz", + "integrity": "sha512-4SC9HHSFjO/liAhifpdOL5hG9b4BP7/5G3y3UPZVO8trlAXr1CaUEEJL0gWK3kOcYcZrOA5rkwG45Gra/lTIgg==", + "dev": true, + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.59", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.59.tgz", + "integrity": "sha512-5qr2okC4ItAI0hG5SaV0HoYMpnM/Y6+Oqr7AmPYy/2uEoGvS+GbSKLeRxSS1uAdu59yz0ouzcuXievSgg///WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.30", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.30.tgz", + "integrity": "sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.20", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.64.10", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.64.10.tgz", + "integrity": "sha512-8N52YH1B5JzBP+B1rkcBERG7rfRTGAM0RmUpyd76yyRfTljuG452GCNbVm6MPzs1+gXBha6Rw5/oHRFohOpfDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@napi-rs/lzma-linux-x64-gnu": "1.5.1", + "@rollup/rollup-android-arm-eabi": "4.64.10", + "@rollup/rollup-android-arm64": "4.64.10", + "@rollup/rollup-darwin-arm64": "4.64.10", + "@rollup/rollup-darwin-x64": "4.64.10", + "@rollup/rollup-freebsd-arm64": "4.64.10", + "@rollup/rollup-freebsd-x64": "4.64.10", + "@rollup/rollup-linux-arm-gnueabihf": "4.64.10", + "@rollup/rollup-linux-arm-musleabihf": "4.64.10", + "@rollup/rollup-linux-arm64-gnu": "4.64.10", + "@rollup/rollup-linux-arm64-musl": "4.64.10", + "@rollup/rollup-linux-loong64-gnu": "4.64.10", + "@rollup/rollup-linux-loong64-musl": "4.64.10", + "@rollup/rollup-linux-ppc64-gnu": "4.64.10", + "@rollup/rollup-linux-ppc64-musl": "4.64.10", + "@rollup/rollup-linux-riscv64-gnu": "4.64.10", + "@rollup/rollup-linux-riscv64-musl": "4.64.10", + "@rollup/rollup-linux-s390x-gnu": "4.64.10", + "@rollup/rollup-linux-x64-gnu": "4.64.10", + "@rollup/rollup-linux-x64-musl": "4.64.10", + "@rollup/rollup-openbsd-x64": "4.64.10", + "@rollup/rollup-openharmony-arm64": "4.64.10", + "@rollup/rollup-win32-arm64-msvc": "4.64.10", + "@rollup/rollup-win32-ia32-msvc": "4.64.10", + "@rollup/rollup-win32-x64-gnu": "4.64.10", + "@rollup/rollup-win32-x64-msvc": "4.64.10", + "fsevents": "~2.3.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz", + "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..bc48f1b --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,19 @@ +{ + "name": "aw-character-creator", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@vitejs/plugin-react": "^4.3.4", + "vite": "^5.4.11" + } +} diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx new file mode 100644 index 0000000..facb266 --- /dev/null +++ b/frontend/src/App.jsx @@ -0,0 +1,55 @@ +import { useEffect, useState } from 'react' +import Creator from './Creator.jsx' +import Rules from './Rules.jsx' +import Characters from './Characters.jsx' +import Presets from './Presets.jsx' + +const useHash = () => { + const [h, setH] = useState(window.location.hash.slice(1) || 'creator') + useEffect(() => { + const f = () => setH(window.location.hash.slice(1) || 'creator') + window.addEventListener('hashchange', f) + return () => window.removeEventListener('hashchange', f) + }, []) + return h +} + +export default function App() { + const hash = useHash() + const [rules, setRules] = useState(null) + const [error, setError] = useState('') + // Used to load a saved character into the creator + const [loadRequest, setLoadRequest] = useState(null) + + const loadRules = () => fetch('/api/rules').then((r) => r.json()).then(setRules).catch(() => setError('Could not load the rules.')) + useEffect(() => { loadRules() }, []) + + const page = hash.split('/')[0] + const nav = [['creator', 'Create character'], ['rules', 'Rules'], ['presets', 'Presets'], ['characters', 'My characters']] + + return ( + <> +
+ + + +
+
+ {error &&

{error}

} + {!rules && !error &&

Loading rules …

} + {rules && page === 'creator' && setLoadRequest(null)} />} + {rules && page === 'rules' && } + {rules && page === 'presets' && } + {rules && page === 'characters' && ( + { setLoadRequest(entry); window.location.hash = 'creator' }} /> + )} +
+ + ) +} diff --git a/frontend/src/Characters.jsx b/frontend/src/Characters.jsx new file mode 100644 index 0000000..6eb623f --- /dev/null +++ b/frontend/src/Characters.jsx @@ -0,0 +1,50 @@ +import { useState } from 'react' + +const KEY = 'aw_chars' +export const loadList = () => { + try { return JSON.parse(localStorage.getItem(KEY)) || [] } catch { return [] } +} +export const saveList = (l) => { + try { localStorage.setItem(KEY, JSON.stringify(l)) } catch { /* storage blocked */ } +} +export const rememberCharacter = (id, token, name) => { + const l = loadList().filter((c) => c.id !== id) + l.unshift({ id, token, name: name || 'Nameless', updated: Date.now() }) + saveList(l) +} + +export default function Characters({ onOpen }) { + const [list, setList] = useState(loadList) + + const remove = async (c) => { + if (!window.confirm(`Really delete "${c.name}"?`)) return + await fetch(`/api/characters/${c.id}`, { method: 'DELETE', headers: { 'X-Edit-Token': c.token } }).catch(() => {}) + const l = list.filter((x) => x.id !== c.id) + saveList(l); setList(l) + } + + return ( +
+

My characters

+

+ This list is stored in this browser. The characters themselves live on the server and can be shared by link + (#creator/<ID>), but only this browser holds the key needed to change them. +

+ {list.length === 0 &&

Nothing saved yet. Create a character and click "Save".

} +
    + {list.map((c) => ( +
  • +
    + {c.name} +
    ID {c.id} · {new Date(c.updated).toLocaleString('en-GB')}
    +
    +
    + + +
    +
  • + ))} +
+
+ ) +} diff --git a/frontend/src/Creator.jsx b/frontend/src/Creator.jsx new file mode 100644 index 0000000..25fc960 --- /dev/null +++ b/frontend/src/Creator.jsx @@ -0,0 +1,523 @@ +import { useEffect, useMemo, useRef, useState } from 'react' +import { applyPreset, applyProfession, compute, effectiveRules, emptyCharacter, kitItems, normalize, resetStep, setProfessionPicks } from './calc.js' +import { rememberCharacter } from './Characters.jsx' +import SheetPanel from './SheetPanel.jsx' + +const DRAFT = 'aw_draft' +const STEPS = ['Concept', 'Attributes', 'Profession', 'Skills', 'Talents', 'Mutations', 'Equipment', 'Summary'] +const SOURCE = { noxium: 'Noxium', diesium: 'Diesium', hybrid: 'Hybrid', precyber: 'Pre-meteor cybernetics' } +const Badge = () => Placeholder + +function readDraft() { + try { return JSON.parse(localStorage.getItem(DRAFT)) } catch { return null } +} + +export default function Creator({ rules: baseRules, loadRequest, clearLoad }) { + const freshCharacter = () => applyPreset(emptyCharacter(baseRules), baseRules, baseRules.default_preset || 'standard') + const [ch, setCh] = useState(() => { + const d = readDraft() + return d?.ch ? normalize(d.ch, baseRules) : freshCharacter() + }) + // `ch` is the working copy the pages edit; `committed` is the applied state shown as "before" in the side panel + const [committed, setCommitted] = useState(() => { + const d = readDraft() + const src = d?.committed || d?.ch + return src ? normalize(src, baseRules) : freshCharacter() + }) + const setBoth = (x) => { setCh(x); setCommitted(x) } + const pending = JSON.stringify(ch) !== JSON.stringify(committed) + const apply = () => setCommitted(ch) + const discard = () => setCh(committed) + const [saved, setSaved] = useState(() => readDraft()?.saved || null) // {id, token} + const [step, setStep] = useState(0) + const [msg, setMsg] = useState('') + const fileRef = useRef(null) + + // Rules for this character: base rules plus the creation numbers of the chosen preset + const rules = useMemo(() => effectiveRules(baseRules, ch), [baseRules, ch.creation]) // eslint-disable-line + const c = useMemo(() => compute(ch, rules), [ch, rules]) + const prof = rules.professions.find((p) => p.id === ch.profession) + const cls = rules.classes.find((k) => k.id === ch.class_id) + const sub = cls?.subclasses.find((x) => x.id === ch.subclass_id) + const set = (patch) => setCh((x) => ({ ...x, ...patch })) + const cr = rules.creation + + // Keep the draft in this browser + useEffect(() => { + try { localStorage.setItem(DRAFT, JSON.stringify({ ch, committed, saved })) } catch { /* ignore */ } + }, [ch, committed, saved]) + + // Load a character picked in "My characters" + useEffect(() => { + if (!loadRequest) return + fetch(`/api/characters/${loadRequest.id}`).then((r) => { if (!r.ok) throw new Error(); return r.json() }) + .then((data) => { setBoth(normalize(data, baseRules)); setSaved({ id: loadRequest.id, token: loadRequest.token }); setStep(7) }) + .catch(() => setMsg('Could not load the character.')) + .finally(clearLoad) + }, [loadRequest]) // eslint-disable-line + + // Direct link #creator/ (read only; saving creates a copy) + useEffect(() => { + const id = window.location.hash.split('/')[1] + if (!id || loadRequest) return + fetch(`/api/characters/${id}`).then((r) => { if (!r.ok) throw new Error(); return r.json() }) + .then((data) => { setBoth(normalize(data, baseRules)); setSaved(null); setStep(7); setMsg('Shared character loaded. "Save" creates your own copy.') }) + .catch(() => setMsg('Shared character not found.')) + }, []) // eslint-disable-line + + // Moving between pages: pending edits are applied first (Next applies silently, other jumps ask). + const go = (i, silent) => { + if (i === step) return + if (pending) { + if (!silent && !window.confirm('You have changes that are not applied yet.\nOK = apply them and continue, Cancel = stay on this page.')) return + apply() + } + setStep(Math.max(0, Math.min(STEPS.length - 1, i))) + } + + const flash = (t) => { setMsg(t); setTimeout(() => setMsg(''), 4000) } + + const resetAll = () => { + if (!window.confirm('Discard all input and start over?')) return + setBoth({ ...emptyCharacter(rules), preset: ch.preset, creation: ch.creation }); setSaved(null); setStep(0) + } + const resetThisStep = () => { + if (!window.confirm(`Reset only the "${STEPS[step]}" page? Everything else is kept.`)) return + setCh((x) => resetStep(x, rules, step)) + } + + const save = async () => { + try { + if (saved) { + const r = await fetch(`/api/characters/${saved.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', 'X-Edit-Token': saved.token }, body: JSON.stringify(ch) }) + if (!r.ok) throw new Error() + rememberCharacter(saved.id, saved.token, ch.name) + flash('Saved.') + } else { + const r = await fetch('/api/characters', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(ch) }) + if (!r.ok) throw new Error() + const { id, token } = await r.json() + setSaved({ id, token }); rememberCharacter(id, token, ch.name) + flash('Saved. The share link is shown below.') + } + } catch { flash('Saving failed.') } + } + + const fileName = (ext) => `${(ch.name || 'Character').replace(/[^\w-]+/g, '_')}.${ext}` + const download = async (fmt) => { + const r = await fetch(`/api/export/${fmt}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(ch) }) + if (!r.ok) return flash('Export failed.') + const url = URL.createObjectURL(await r.blob()) + const a = document.createElement('a'); a.href = url; a.download = fileName(fmt); a.click(); URL.revokeObjectURL(url) + } + const exportJson = () => { + const url = URL.createObjectURL(new Blob([JSON.stringify(ch, null, 2)], { type: 'application/json' })) + const a = document.createElement('a'); a.href = url; a.download = fileName('json'); a.click(); URL.revokeObjectURL(url) + } + const importJson = (e) => { + const f = e.target.files[0]; if (!f) return + f.text().then((t) => { setBoth(normalize(JSON.parse(t), baseRules)); setSaved(null); flash('Imported.') }).catch(() => flash('Invalid file.')) + e.target.value = '' + } + + // Click on pip k (1 = Proficient, 2 = Expertise) of a skill: sets the skill's total pips to k, or one lower if already there. + const clickPip = (s, k) => { + const target = s.pips >= k ? k - 1 : k + const wantFree = Math.max(0, target - s.profPip) + if (wantFree - s.freePips > c.profLeft) return flash('No proficiency picks left.') + set({ proficiency_picks: { ...ch.proficiency_picks, [s.id]: wantFree } }) + } + + const toggle = (key, id, max) => { + const cur = ch[key] + if (cur.includes(id)) return set({ [key]: cur.filter((x) => x !== id) }) + if (max && cur.length >= max) return flash(`At most ${max} can be chosen.`) + set({ [key]: [...cur, id] }) + } + + // ---------- Steps ---------- + const stepConcept = ( + <> +

Concept

+
+ +

{ch.preset === 'custom' ? 'Custom values (from an older version of this character).' : baseRules.presets?.find((p) => p.id === ch.preset)?.desc}

+ {(() => { + const diff = (baseRules.tunables || []).filter((x) => cr[x.key] !== baseRules.creation[x.key]) + return diff.length > 0 &&

Differs from Standard: {diff.map((x) => `${x.label} ${cr[x.key]}`).join(' · ')}

+ })()} +

Create or edit presets on the Presets page.

+
+
+ + +
+
+ + +
+ {sub &&

{sub.desc}

} + +