feat: Intuitivere Bedienung — klickbare Stats + Abstimmungs-Filter + Fraktions-Normalisierung (#14)
Dashboard: - Neuer Endpoint GET /api/stats/dashboard mit allen Kennzahlen - Klickbare Kacheln: Vorlagen nach Typ, Ketten nach Status → navigieren zu Filterlisten - Umsetzungsquote als horizontaler Balken mit klickbaren Segmenten Abstimmungen: - Stimmverhalten-Tabelle klickbar: Fraktion oder Ja/Nein/Enthaltung → filtert - Neuer Endpoint GET /api/abstimmungen/details (?fraktion=&stimme=) mit Pagination - Neuer Endpoint GET /api/abstimmungen/vergleich (?f1=&f2=) für Koalitionsmatrix-Drill-Down - Koalitionsmatrix-Zellen klickbar → zeigt Abstimmungsvergleich beider Fraktionen Fraktions-Normalisierung: - fraktionen_mapping.py: 40+ DB-Varianten → kanonische Namen - 'Bündnis 90 / Die Grünen' / 'Bündnis 90/Die Grünen' / 'Grüne' → 'Grüne' - 'Die Linke' / 'Die Linke.' / 'Linke' → 'Linke' - BfHo-Varianten, Hagen Aktiv, Einzelvertreter etc. normalisiert - Mapping in allen Abstimmungs-Endpoints aktiv - ist_ratsfraktion Flag in Fraktionen-Response Closes #14
This commit is contained in:
parent
31b1e1bd7e
commit
ea3e5cd329
@ -3,6 +3,7 @@ from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
|
||||
from tracker.core.fraktionen_mapping import normalize_fraktion, get_all_variants, is_ratsfraktion
|
||||
from tracker.db.session import get_connection
|
||||
|
||||
router = APIRouter(prefix="/abstimmungen", tags=["Abstimmungen"])
|
||||
@ -49,17 +50,28 @@ def get_fraktionen_uebersicht(conn=Depends(_db)):
|
||||
ORDER BY gesamt DESC
|
||||
""").fetchall()
|
||||
|
||||
return [
|
||||
{
|
||||
"fraktion": r[0],
|
||||
"ja": r[1],
|
||||
"nein": r[2],
|
||||
"enthaltung": r[3],
|
||||
"gesamt": r[4],
|
||||
"ja_quote": round(r[1] / r[4] * 100, 1) if r[4] > 0 else 0
|
||||
}
|
||||
for r in rows
|
||||
]
|
||||
# Normalize and aggregate
|
||||
from collections import defaultdict
|
||||
agg: dict[str, dict] = defaultdict(lambda: {"ja": 0, "nein": 0, "enthaltung": 0, "gesamt": 0})
|
||||
for r in rows:
|
||||
name = normalize_fraktion(r[0])
|
||||
agg[name]["ja"] += r[1]
|
||||
agg[name]["nein"] += r[2]
|
||||
agg[name]["enthaltung"] += r[3]
|
||||
agg[name]["gesamt"] += r[4]
|
||||
|
||||
result = []
|
||||
for name, d in sorted(agg.items(), key=lambda x: -x[1]["gesamt"]):
|
||||
result.append({
|
||||
"fraktion": name,
|
||||
"ja": d["ja"],
|
||||
"nein": d["nein"],
|
||||
"enthaltung": d["enthaltung"],
|
||||
"gesamt": d["gesamt"],
|
||||
"ja_quote": round(d["ja"] / d["gesamt"] * 100, 1) if d["gesamt"] > 0 else 0,
|
||||
"ist_ratsfraktion": is_ratsfraktion(name),
|
||||
})
|
||||
return result
|
||||
|
||||
|
||||
@router.get("/koalitionsmatrix")
|
||||
@ -72,14 +84,16 @@ def get_koalitionsmatrix(conn=Depends(_db)):
|
||||
WHERE stimme IN ('ja', 'nein')
|
||||
""").fetchall()
|
||||
|
||||
# Gruppieren nach Abstimmung
|
||||
# Gruppieren nach Abstimmung (normalisiert)
|
||||
from collections import defaultdict
|
||||
by_abstimmung = defaultdict(dict)
|
||||
for aid, fraktion, stimme in abstimmungen:
|
||||
by_abstimmung[aid][fraktion] = stimme
|
||||
name = normalize_fraktion(fraktion)
|
||||
# Bei Mehrfach-Vorkommen pro Abstimmung: letzten Wert nehmen
|
||||
by_abstimmung[aid][name] = stimme
|
||||
|
||||
# Paarweise Übereinstimmung zählen
|
||||
fraktionen = list(set(r[1] for r in abstimmungen))
|
||||
fraktionen = sorted(set(name for stimmen in by_abstimmung.values() for name in stimmen))
|
||||
matrix = {f1: {f2: {"gleich": 0, "gesamt": 0} for f2 in fraktionen} for f1 in fraktionen}
|
||||
|
||||
for aid, stimmen in by_abstimmung.items():
|
||||
@ -107,6 +121,135 @@ def get_koalitionsmatrix(conn=Depends(_db)):
|
||||
return result
|
||||
|
||||
|
||||
@router.get("/details")
|
||||
def get_abstimmungen_details(
|
||||
fraktion: str | None = None,
|
||||
stimme: str | None = None,
|
||||
page: int = Query(1, ge=1),
|
||||
page_size: int = Query(20, ge=1, le=100),
|
||||
conn=Depends(_db),
|
||||
):
|
||||
"""Paginierte Liste von Abstimmungen gefiltert nach Fraktion und/oder Stimme."""
|
||||
where_clauses = []
|
||||
params: list = []
|
||||
|
||||
if fraktion:
|
||||
variants = get_all_variants(fraktion)
|
||||
placeholders = ",".join("?" * len(variants))
|
||||
where_clauses.append(f"af.fraktion IN ({placeholders})")
|
||||
params.extend(variants)
|
||||
if stimme:
|
||||
where_clauses.append("af.stimme = ?")
|
||||
params.append(stimme)
|
||||
|
||||
where_sql = ("WHERE " + " AND ".join(where_clauses)) if where_clauses else ""
|
||||
|
||||
total = conn.execute(
|
||||
f"""SELECT COUNT(*) FROM abstimmungen_fraktionen af
|
||||
JOIN abstimmungen a ON af.abstimmung_id = a.id
|
||||
JOIN vorlagen v ON a.vorlage_id = v.id
|
||||
{where_sql}""",
|
||||
params,
|
||||
).fetchone()[0]
|
||||
|
||||
offset = (page - 1) * page_size
|
||||
rows = conn.execute(
|
||||
f"""SELECT a.id, a.sitzung_datum, a.ergebnis,
|
||||
v.id as vorlage_id, v.aktenzeichen, v.betreff,
|
||||
af.fraktion, af.stimme, af.anzahl
|
||||
FROM abstimmungen_fraktionen af
|
||||
JOIN abstimmungen a ON af.abstimmung_id = a.id
|
||||
JOIN vorlagen v ON a.vorlage_id = v.id
|
||||
{where_sql}
|
||||
ORDER BY a.sitzung_datum DESC
|
||||
LIMIT ? OFFSET ?""",
|
||||
params + [page_size, offset],
|
||||
).fetchall()
|
||||
|
||||
return {
|
||||
"items": [
|
||||
{
|
||||
"id": r[0],
|
||||
"sitzung_datum": r[1],
|
||||
"ergebnis": r[2],
|
||||
"vorlage_id": r[3],
|
||||
"aktenzeichen": r[4],
|
||||
"betreff": r[5],
|
||||
"fraktion": r[6],
|
||||
"stimme": r[7],
|
||||
"anzahl": r[8],
|
||||
}
|
||||
for r in rows
|
||||
],
|
||||
"total": total,
|
||||
"page": page,
|
||||
"page_size": page_size,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/vergleich")
|
||||
def get_abstimmungen_vergleich(
|
||||
f1: str = Query(..., description="Erste Fraktion"),
|
||||
f2: str = Query(..., description="Zweite Fraktion"),
|
||||
page: int = Query(1, ge=1),
|
||||
page_size: int = Query(20, ge=1, le=100),
|
||||
conn=Depends(_db),
|
||||
):
|
||||
"""Abstimmungen wo beide Fraktionen abgestimmt haben, mit ihrem jeweiligen Verhalten."""
|
||||
# Find abstimmungen where both factions voted
|
||||
v1 = get_all_variants(f1)
|
||||
v2 = get_all_variants(f2)
|
||||
ph1 = ",".join("?" * len(v1))
|
||||
ph2 = ",".join("?" * len(v2))
|
||||
|
||||
total = conn.execute(
|
||||
f"""SELECT COUNT(DISTINCT af1.abstimmung_id)
|
||||
FROM abstimmungen_fraktionen af1
|
||||
JOIN abstimmungen_fraktionen af2 ON af1.abstimmung_id = af2.abstimmung_id
|
||||
WHERE af1.fraktion IN ({ph1}) AND af2.fraktion IN ({ph2})""",
|
||||
v1 + v2,
|
||||
).fetchone()[0]
|
||||
|
||||
offset = (page - 1) * page_size
|
||||
rows = conn.execute(
|
||||
f"""SELECT a.id, a.sitzung_datum, a.ergebnis,
|
||||
v.id as vorlage_id, v.aktenzeichen, v.betreff,
|
||||
af1.stimme as stimme1, af1.anzahl as anzahl1,
|
||||
af2.stimme as stimme2, af2.anzahl as anzahl2
|
||||
FROM abstimmungen_fraktionen af1
|
||||
JOIN abstimmungen_fraktionen af2 ON af1.abstimmung_id = af2.abstimmung_id
|
||||
JOIN abstimmungen a ON af1.abstimmung_id = a.id
|
||||
JOIN vorlagen v ON a.vorlage_id = v.id
|
||||
WHERE af1.fraktion IN ({ph1}) AND af2.fraktion IN ({ph2})
|
||||
ORDER BY a.sitzung_datum DESC
|
||||
LIMIT ? OFFSET ?""",
|
||||
v1 + v2 + [page_size, offset],
|
||||
).fetchall()
|
||||
|
||||
return {
|
||||
"f1": f1,
|
||||
"f2": f2,
|
||||
"items": [
|
||||
{
|
||||
"id": r[0],
|
||||
"sitzung_datum": r[1],
|
||||
"ergebnis": r[2],
|
||||
"vorlage_id": r[3],
|
||||
"aktenzeichen": r[4],
|
||||
"betreff": r[5],
|
||||
"stimme_f1": r[6],
|
||||
"anzahl_f1": r[7],
|
||||
"stimme_f2": r[8],
|
||||
"anzahl_f2": r[9],
|
||||
}
|
||||
for r in rows
|
||||
],
|
||||
"total": total,
|
||||
"page": page,
|
||||
"page_size": page_size,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/ablehnungen")
|
||||
def get_ablehnungsverhalten(conn=Depends(_db)):
|
||||
"""Wer lehnt wessen Anträge ab?"""
|
||||
|
||||
@ -111,6 +111,50 @@ def get_stats(conn=Depends(_db)):
|
||||
}
|
||||
|
||||
|
||||
@router.get("/dashboard")
|
||||
def get_dashboard_stats(conn=Depends(_db)):
|
||||
"""Dashboard-level aggregated stats for the new hub."""
|
||||
vorlagen_total = conn.execute("SELECT COUNT(*) as c FROM vorlagen").fetchone()["c"]
|
||||
ketten_total = conn.execute("SELECT COUNT(*) as c FROM ketten").fetchone()["c"]
|
||||
abstimmungen_total = conn.execute("SELECT COUNT(*) as c FROM abstimmungen").fetchone()["c"]
|
||||
|
||||
vorlagen_nach_typ = conn.execute("""
|
||||
SELECT typ, COUNT(*) as c FROM vorlagen
|
||||
WHERE typ IS NOT NULL
|
||||
GROUP BY typ ORDER BY c DESC
|
||||
""").fetchall()
|
||||
|
||||
ketten_nach_status = conn.execute("""
|
||||
SELECT status, COUNT(*) as c FROM ketten
|
||||
WHERE status IS NOT NULL
|
||||
GROUP BY status ORDER BY c DESC
|
||||
""").fetchall()
|
||||
|
||||
# Umsetzungsquote: umgesetzt, teilweise_umgesetzt, versandet aus ketten
|
||||
umgesetzt = conn.execute("SELECT COUNT(*) as c FROM ketten WHERE status = 'umgesetzt'").fetchone()["c"]
|
||||
teilweise = conn.execute("SELECT COUNT(*) as c FROM ketten WHERE status = 'teilweise_umgesetzt'").fetchone()["c"]
|
||||
versandet = conn.execute("SELECT COUNT(*) as c FROM ketten WHERE status = 'versandet'").fetchone()["c"]
|
||||
beschlossen = conn.execute("SELECT COUNT(*) as c FROM ketten WHERE status = 'beschlossen'").fetchone()["c"]
|
||||
abgelehnt = conn.execute("SELECT COUNT(*) as c FROM ketten WHERE status = 'abgelehnt'").fetchone()["c"]
|
||||
total_bewertet = umgesetzt + teilweise + versandet + beschlossen + abgelehnt
|
||||
|
||||
return {
|
||||
"vorlagen_total": vorlagen_total,
|
||||
"ketten_total": ketten_total,
|
||||
"vorlagen_nach_typ": [{"typ": r["typ"], "anzahl": r["c"]} for r in vorlagen_nach_typ],
|
||||
"ketten_nach_status": [{"status": r["status"], "anzahl": r["c"]} for r in ketten_nach_status],
|
||||
"abstimmungen_total": abstimmungen_total,
|
||||
"umsetzungsquote": {
|
||||
"umgesetzt": umgesetzt,
|
||||
"teilweise": teilweise,
|
||||
"versandet": versandet,
|
||||
"beschlossen": beschlossen,
|
||||
"abgelehnt": abgelehnt,
|
||||
"total_bewertet": total_bewertet,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@router.get("/ketten-stats")
|
||||
def get_ketten_stats(conn=Depends(_db)):
|
||||
"""Aggregated Ketten status distribution with breakdowns."""
|
||||
|
||||
78
backend/src/tracker/core/fraktionen_mapping.py
Normal file
78
backend/src/tracker/core/fraktionen_mapping.py
Normal file
@ -0,0 +1,78 @@
|
||||
"""Normalisierung von Fraktionsnamen in Abstimmungen.
|
||||
|
||||
Verschiedene Schreibweisen → kanonischer Name.
|
||||
"""
|
||||
|
||||
# Mapping: DB-Wert → normalisierter Name
|
||||
FRAKTION_MAPPING: dict[str, str] = {
|
||||
# Grüne
|
||||
"Bündnis 90 / Die Grünen": "Grüne",
|
||||
"Bündnis 90/ Die Grünen": "Grüne",
|
||||
"Bündnis 90/Die Grünen": "Grüne",
|
||||
"Grüne": "Grüne",
|
||||
|
||||
# Linke
|
||||
"Die Linke": "Linke",
|
||||
"Die Linke.": "Linke",
|
||||
"Linke": "Linke",
|
||||
"Linke/HAK": "Linke/HAK",
|
||||
|
||||
# Hagen Aktiv
|
||||
"HAGEN AKTIV": "Hagen Aktiv",
|
||||
"Hagen Aktiv": "Hagen Aktiv",
|
||||
"HAK": "Hagen Aktiv",
|
||||
"HAK/Die Linke": "HAK/Linke",
|
||||
|
||||
# BfHo / Die PARTEI
|
||||
"BfHo": "BfHo",
|
||||
"BFHo/DIE PARTEI": "BfHo/Die PARTEI",
|
||||
"BFHo/Die PARTEI": "BfHo/Die PARTEI",
|
||||
"BfH/Die PARTEI": "BfHo/Die PARTEI",
|
||||
"BfHo/Die PARTEI": "BfHo/Die PARTEI",
|
||||
"Bürger für Hohenlimburg": "BfHo",
|
||||
"Bürger für Hohenlimburg / Die PARTEI": "BfHo/Die PARTEI",
|
||||
|
||||
# Einzelvertreter
|
||||
"Einzelmitglied": "Einzelvertreter",
|
||||
"Einzelvertreter": "Einzelvertreter",
|
||||
"Parteilos": "Einzelvertreter",
|
||||
|
||||
# Verbände (Naturschutz-Beirat etc.)
|
||||
"BUND NRW e. V.": "BUND",
|
||||
"LFV NRW e. V.": "LFV",
|
||||
"LJV NRW e. V.": "LJV",
|
||||
"LNU NRW e. V.": "LNU",
|
||||
"LSB NRW e. V.": "LSB",
|
||||
"LV WLI e. V.": "WLI",
|
||||
"LVG NRW e. V.": "LVG",
|
||||
"NABU NRW e. V.": "NABU",
|
||||
"SDW NRW e. V.": "SDW",
|
||||
"WBV NRW e. V.": "WBV",
|
||||
"WLV e. V.": "WLV",
|
||||
|
||||
# Rest
|
||||
"OB": "OB",
|
||||
"Vertreter*innen der Jugendhilfe": "Jugendhilfe",
|
||||
"Freie Wähler": "Freie Wähler",
|
||||
}
|
||||
|
||||
# Ratsfraktionen (für Stimmverhalten/Koalitionsmatrix relevant)
|
||||
RATSFRAKTIONEN = {
|
||||
"SPD", "CDU", "Grüne", "FDP", "AfD", "Linke", "Hagen Aktiv",
|
||||
"BfHo", "BfHo/Die PARTEI", "BSW", "Freie Wähler",
|
||||
}
|
||||
|
||||
|
||||
def normalize_fraktion(name: str) -> str:
|
||||
"""Normalize a faction name to canonical form."""
|
||||
return FRAKTION_MAPPING.get(name, name)
|
||||
|
||||
|
||||
def is_ratsfraktion(normalized_name: str) -> bool:
|
||||
"""Check if a normalized name is a council faction (vs. Beirat etc.)."""
|
||||
return normalized_name in RATSFRAKTIONEN
|
||||
|
||||
|
||||
def get_all_variants(canonical: str) -> list[str]:
|
||||
"""Get all DB variants for a canonical faction name."""
|
||||
return [k for k, v in FRAKTION_MAPPING.items() if v == canonical] or [canonical]
|
||||
@ -1,5 +1,6 @@
|
||||
<script lang="ts">
|
||||
import '../app.css';
|
||||
import { goto } from '$app/navigation';
|
||||
|
||||
interface Vorlage {
|
||||
id: number;
|
||||
@ -10,62 +11,109 @@
|
||||
ist_verwaltungsvorlage: boolean;
|
||||
}
|
||||
|
||||
interface Stats {
|
||||
vorlagen: number;
|
||||
beratungen: number;
|
||||
ketten: number;
|
||||
gremien: number;
|
||||
interface DashboardStats {
|
||||
vorlagen_total: number;
|
||||
ketten_total: number;
|
||||
vorlagen_nach_typ: { typ: string; anzahl: number }[];
|
||||
ketten_nach_status: { status: string; anzahl: number }[];
|
||||
abstimmungen_total: number;
|
||||
umsetzungsquote: {
|
||||
umgesetzt: number;
|
||||
teilweise: number;
|
||||
versandet: number;
|
||||
beschlossen: number;
|
||||
abgelehnt: number;
|
||||
total_bewertet: number;
|
||||
};
|
||||
}
|
||||
|
||||
let stats = $state<Stats>({ vorlagen: 0, beratungen: 0, ketten: 0, gremien: 0 });
|
||||
let stats = $state<DashboardStats | null>(null);
|
||||
let antraege = $state<Vorlage[]>([]);
|
||||
let loading = $state(true);
|
||||
let error = $state('');
|
||||
|
||||
// API-Base: In Produktion relativ, in Dev mit Port
|
||||
const API_BASE = typeof window !== 'undefined'
|
||||
? (window.location.port === '5173'
|
||||
? `http://${window.location.hostname}:8099/api`
|
||||
: '/api')
|
||||
: '/api';
|
||||
|
||||
async function loadData() {
|
||||
console.log('API_BASE:', API_BASE);
|
||||
try {
|
||||
// Stats laden
|
||||
console.log('Fetching health...');
|
||||
const statsRes = await fetch(`${API_BASE}/health`);
|
||||
console.log('Health response:', statsRes.status);
|
||||
if (statsRes.ok) {
|
||||
// Vorlagen zählen
|
||||
console.log('Fetching vorlagen...');
|
||||
const vorlagenRes = await fetch(`${API_BASE}/vorlagen?page_size=1`);
|
||||
console.log('Vorlagen response:', vorlagenRes.status);
|
||||
const vorlagenData = await vorlagenRes.json();
|
||||
stats.vorlagen = vorlagenData.total;
|
||||
const statusColors: Record<string, string> = {
|
||||
umgesetzt: 'bg-green-100 text-green-800 border-green-200',
|
||||
teilweise_umgesetzt: 'bg-amber-100 text-amber-800 border-amber-200',
|
||||
versandet: 'bg-gray-100 text-gray-700 border-gray-200',
|
||||
beschlossen: 'bg-blue-100 text-blue-800 border-blue-200',
|
||||
abgelehnt: 'bg-red-100 text-red-800 border-red-200',
|
||||
in_beratung: 'bg-purple-100 text-purple-800 border-purple-200',
|
||||
angefragt: 'bg-cyan-100 text-cyan-800 border-cyan-200',
|
||||
beantwortet: 'bg-teal-100 text-teal-800 border-teal-200',
|
||||
verwiesen: 'bg-indigo-100 text-indigo-800 border-indigo-200',
|
||||
offen: 'bg-yellow-100 text-yellow-800 border-yellow-200',
|
||||
};
|
||||
|
||||
// Ketten zählen
|
||||
const kettenRes = await fetch(`${API_BASE}/ketten?page_size=1`);
|
||||
const kettenData = await kettenRes.json();
|
||||
stats.ketten = kettenData.total;
|
||||
const statusLabels: Record<string, string> = {
|
||||
umgesetzt: 'Umgesetzt',
|
||||
teilweise_umgesetzt: 'Teilw. umgesetzt',
|
||||
versandet: 'Versandet',
|
||||
beschlossen: 'Beschlossen',
|
||||
abgelehnt: 'Abgelehnt',
|
||||
in_beratung: 'In Beratung',
|
||||
angefragt: 'Angefragt',
|
||||
beantwortet: 'Beantwortet',
|
||||
verwiesen: 'Verwiesen',
|
||||
offen: 'Offen',
|
||||
};
|
||||
|
||||
const typLabels: Record<string, string> = {
|
||||
antrag: 'Anträge',
|
||||
anfrage: 'Anfragen',
|
||||
bericht: 'Berichte',
|
||||
beschlussvorlage: 'Beschlussvorlagen',
|
||||
mitteilungsvorlage: 'Mitteilungen',
|
||||
stellungnahme: 'Stellungnahmen',
|
||||
sonstig: 'Sonstige',
|
||||
};
|
||||
|
||||
const typIcons: Record<string, string> = {
|
||||
antrag: '📋',
|
||||
anfrage: '❓',
|
||||
bericht: '📄',
|
||||
beschlussvorlage: '📑',
|
||||
mitteilungsvorlage: '📨',
|
||||
stellungnahme: '💬',
|
||||
sonstig: '📁',
|
||||
};
|
||||
|
||||
// Umsetzungsquote bar colors
|
||||
const umsetzungBarColors: Record<string, string> = {
|
||||
umgesetzt: 'bg-green-500',
|
||||
teilweise: 'bg-amber-400',
|
||||
beschlossen: 'bg-blue-400',
|
||||
versandet: 'bg-gray-400',
|
||||
abgelehnt: 'bg-red-400',
|
||||
};
|
||||
|
||||
async function loadData() {
|
||||
try {
|
||||
const [dashRes, antraegeRes] = await Promise.all([
|
||||
fetch(`${API_BASE}/stats/dashboard`),
|
||||
fetch(`${API_BASE}/vorlagen?typ=antrag&page_size=10`),
|
||||
]);
|
||||
|
||||
if (dashRes.ok) {
|
||||
stats = await dashRes.json();
|
||||
} else {
|
||||
error = `Health check failed: ${statsRes.status}`;
|
||||
error = `Dashboard-Stats fehler: ${dashRes.status}`;
|
||||
}
|
||||
|
||||
// Letzte 10 Anträge laden
|
||||
const antraegeRes = await fetch(`${API_BASE}/vorlagen?typ=antrag&page_size=10`);
|
||||
console.log('Antraege response:', antraegeRes.status);
|
||||
if (antraegeRes.ok) {
|
||||
const data = await antraegeRes.json();
|
||||
console.log('Antraege data:', data.items.length);
|
||||
antraege = data.items;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('API Fehler:', e);
|
||||
error = `Fehler: ${e}`;
|
||||
} finally {
|
||||
loading = false;
|
||||
console.log('Loading done, antraege:', antraege.length);
|
||||
}
|
||||
}
|
||||
|
||||
@ -76,70 +124,178 @@
|
||||
<title>Antragstracker Hagen</title>
|
||||
</svelte:head>
|
||||
|
||||
<main class="min-h-screen bg-gray-50">
|
||||
<!-- Header -->
|
||||
<header class="bg-green-700 text-white py-6 shadow-lg">
|
||||
<div class="max-w-6xl mx-auto px-4">
|
||||
<h1 class="text-2xl sm:text-3xl font-bold">🏛️ Antragstracker Hagen</h1>
|
||||
<p class="text-green-100 mt-1">Kommunale Anträge & Anfragen nachverfolgen</p>
|
||||
</div>
|
||||
</header>
|
||||
<div class="mb-6">
|
||||
<h1 class="text-2xl font-bold text-gray-900">🏛️ Dashboard</h1>
|
||||
<p class="text-gray-500 text-sm mt-1">Kommunale Anträge & Anfragen auf einen Blick</p>
|
||||
</div>
|
||||
|
||||
<div class="max-w-6xl mx-auto px-4 py-8">
|
||||
<!-- Stats Cards -->
|
||||
{#if error}
|
||||
<div class="bg-red-50 text-red-700 p-4 rounded-lg mb-6">{error}</div>
|
||||
{/if}
|
||||
|
||||
{#if loading}
|
||||
<div class="flex justify-center py-20">
|
||||
<div class="animate-spin rounded-full h-12 w-12 border-b-2 border-green-600"></div>
|
||||
</div>
|
||||
{:else if stats}
|
||||
<!-- Hauptzahlen -->
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-8">
|
||||
<div class="bg-white rounded-lg shadow p-4 text-center">
|
||||
<div class="text-3xl font-bold text-green-600">{stats.vorlagen.toLocaleString()}</div>
|
||||
<div class="text-gray-500 text-sm">Vorlagen</div>
|
||||
</div>
|
||||
<div class="bg-white rounded-lg shadow p-4 text-center">
|
||||
<div class="text-3xl font-bold text-blue-600">{stats.ketten.toLocaleString()}</div>
|
||||
<div class="text-gray-500 text-sm">Ketten</div>
|
||||
</div>
|
||||
<div class="bg-white rounded-lg shadow p-4 text-center">
|
||||
<div class="text-3xl font-bold text-purple-600">41</div>
|
||||
<div class="text-gray-500 text-sm">Gremien</div>
|
||||
</div>
|
||||
<div class="bg-white rounded-lg shadow p-4 text-center">
|
||||
<button onclick={() => goto('/vorlagen')}
|
||||
class="bg-white rounded-xl shadow-sm border border-gray-200 p-5 text-center cursor-pointer hover:shadow-md transition-shadow">
|
||||
<div class="text-3xl font-bold text-green-600">{stats.vorlagen_total.toLocaleString()}</div>
|
||||
<div class="text-gray-500 text-sm mt-1">Vorlagen</div>
|
||||
</button>
|
||||
<button onclick={() => goto('/ketten')}
|
||||
class="bg-white rounded-xl shadow-sm border border-gray-200 p-5 text-center cursor-pointer hover:shadow-md transition-shadow">
|
||||
<div class="text-3xl font-bold text-blue-600">{stats.ketten_total.toLocaleString()}</div>
|
||||
<div class="text-gray-500 text-sm mt-1">Ketten</div>
|
||||
</button>
|
||||
<button onclick={() => goto('/abstimmungen')}
|
||||
class="bg-white rounded-xl shadow-sm border border-gray-200 p-5 text-center cursor-pointer hover:shadow-md transition-shadow">
|
||||
<div class="text-3xl font-bold text-purple-600">{stats.abstimmungen_total.toLocaleString()}</div>
|
||||
<div class="text-gray-500 text-sm mt-1">Abstimmungen</div>
|
||||
</button>
|
||||
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-5 text-center">
|
||||
<div class="text-3xl font-bold text-orange-600">2004–2026</div>
|
||||
<div class="text-gray-500 text-sm">Zeitraum</div>
|
||||
<div class="text-gray-500 text-sm mt-1">Zeitraum</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Vorlagen nach Typ -->
|
||||
<section class="bg-white rounded-xl shadow-sm border border-gray-200 p-5 mb-8">
|
||||
<h2 class="text-lg font-semibold text-gray-900 mb-4">📊 Vorlagen nach Typ</h2>
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-3">
|
||||
{#each stats.vorlagen_nach_typ as vt}
|
||||
<button onclick={() => goto(`/vorlagen?typ=${vt.typ}`)}
|
||||
class="border border-gray-200 rounded-lg p-4 text-left cursor-pointer hover:shadow-md hover:border-green-300 transition-all group">
|
||||
<div class="text-2xl mb-1">{typIcons[vt.typ] || '📁'}</div>
|
||||
<div class="text-xl font-bold text-gray-900 group-hover:text-green-700">{vt.anzahl.toLocaleString()}</div>
|
||||
<div class="text-sm text-gray-500">{typLabels[vt.typ] || vt.typ}</div>
|
||||
</button>
|
||||
{/each}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Ketten nach Status -->
|
||||
<section class="bg-white rounded-xl shadow-sm border border-gray-200 p-5 mb-8">
|
||||
<h2 class="text-lg font-semibold text-gray-900 mb-4">🔗 Ketten nach Status</h2>
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-3">
|
||||
{#each stats.ketten_nach_status as ks}
|
||||
<button onclick={() => goto(`/ketten?status=${ks.status}`)}
|
||||
class="border rounded-lg p-4 text-left cursor-pointer hover:shadow-md transition-all {statusColors[ks.status] || 'bg-gray-50 text-gray-700 border-gray-200'}">
|
||||
<div class="text-xl font-bold">{ks.anzahl.toLocaleString()}</div>
|
||||
<div class="text-sm opacity-80">{statusLabels[ks.status] || ks.status}</div>
|
||||
</button>
|
||||
{/each}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Umsetzungsquote -->
|
||||
{#if stats.umsetzungsquote.total_bewertet > 0}
|
||||
{@const uq = stats.umsetzungsquote}
|
||||
<section class="bg-white rounded-xl shadow-sm border border-gray-200 p-5 mb-8">
|
||||
<h2 class="text-lg font-semibold text-gray-900 mb-1">📈 Umsetzungsquote</h2>
|
||||
<p class="text-sm text-gray-500 mb-4">{uq.total_bewertet} Ketten mit Endergebnis</p>
|
||||
|
||||
<!-- Bar -->
|
||||
<div class="flex rounded-full overflow-hidden h-8 mb-4">
|
||||
{#if uq.umgesetzt > 0}
|
||||
<button onclick={() => goto('/ketten?status=umgesetzt')}
|
||||
class="{umsetzungBarColors.umgesetzt} hover:brightness-110 transition-all cursor-pointer flex items-center justify-center text-white text-xs font-medium"
|
||||
style="width: {uq.umgesetzt / uq.total_bewertet * 100}%"
|
||||
title="Umgesetzt: {uq.umgesetzt}">
|
||||
{#if uq.umgesetzt / uq.total_bewertet > 0.05}{uq.umgesetzt}{/if}
|
||||
</button>
|
||||
{/if}
|
||||
{#if uq.teilweise > 0}
|
||||
<button onclick={() => goto('/ketten?status=teilweise_umgesetzt')}
|
||||
class="{umsetzungBarColors.teilweise} hover:brightness-110 transition-all cursor-pointer flex items-center justify-center text-white text-xs font-medium"
|
||||
style="width: {uq.teilweise / uq.total_bewertet * 100}%"
|
||||
title="Teilweise umgesetzt: {uq.teilweise}">
|
||||
{#if uq.teilweise / uq.total_bewertet > 0.05}{uq.teilweise}{/if}
|
||||
</button>
|
||||
{/if}
|
||||
{#if uq.beschlossen > 0}
|
||||
<button onclick={() => goto('/ketten?status=beschlossen')}
|
||||
class="{umsetzungBarColors.beschlossen} hover:brightness-110 transition-all cursor-pointer flex items-center justify-center text-white text-xs font-medium"
|
||||
style="width: {uq.beschlossen / uq.total_bewertet * 100}%"
|
||||
title="Beschlossen: {uq.beschlossen}">
|
||||
{#if uq.beschlossen / uq.total_bewertet > 0.05}{uq.beschlossen}{/if}
|
||||
</button>
|
||||
{/if}
|
||||
{#if uq.versandet > 0}
|
||||
<button onclick={() => goto('/ketten?status=versandet')}
|
||||
class="{umsetzungBarColors.versandet} hover:brightness-110 transition-all cursor-pointer flex items-center justify-center text-white text-xs font-medium"
|
||||
style="width: {uq.versandet / uq.total_bewertet * 100}%"
|
||||
title="Versandet: {uq.versandet}">
|
||||
{#if uq.versandet / uq.total_bewertet > 0.05}{uq.versandet}{/if}
|
||||
</button>
|
||||
{/if}
|
||||
{#if uq.abgelehnt > 0}
|
||||
<button onclick={() => goto('/ketten?status=abgelehnt')}
|
||||
class="{umsetzungBarColors.abgelehnt} hover:brightness-110 transition-all cursor-pointer flex items-center justify-center text-white text-xs font-medium"
|
||||
style="width: {uq.abgelehnt / uq.total_bewertet * 100}%"
|
||||
title="Abgelehnt: {uq.abgelehnt}">
|
||||
{#if uq.abgelehnt / uq.total_bewertet > 0.05}{uq.abgelehnt}{/if}
|
||||
</button>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<!-- Legend -->
|
||||
<div class="flex flex-wrap gap-4 text-sm">
|
||||
<span class="flex items-center gap-1.5">
|
||||
<span class="w-3 h-3 rounded-full bg-green-500"></span>
|
||||
Umgesetzt ({uq.umgesetzt})
|
||||
</span>
|
||||
<span class="flex items-center gap-1.5">
|
||||
<span class="w-3 h-3 rounded-full bg-amber-400"></span>
|
||||
Teilweise ({uq.teilweise})
|
||||
</span>
|
||||
<span class="flex items-center gap-1.5">
|
||||
<span class="w-3 h-3 rounded-full bg-blue-400"></span>
|
||||
Beschlossen ({uq.beschlossen})
|
||||
</span>
|
||||
<span class="flex items-center gap-1.5">
|
||||
<span class="w-3 h-3 rounded-full bg-gray-400"></span>
|
||||
Versandet ({uq.versandet})
|
||||
</span>
|
||||
<span class="flex items-center gap-1.5">
|
||||
<span class="w-3 h-3 rounded-full bg-red-400"></span>
|
||||
Abgelehnt ({uq.abgelehnt})
|
||||
</span>
|
||||
</div>
|
||||
</section>
|
||||
{/if}
|
||||
|
||||
<!-- Aktuelle Anträge -->
|
||||
<section class="bg-white rounded-lg shadow">
|
||||
<div class="px-6 py-4 border-b border-gray-200">
|
||||
<h2 class="text-xl font-semibold text-gray-800">📋 Aktuelle Anträge</h2>
|
||||
<section class="bg-white rounded-xl shadow-sm border border-gray-200">
|
||||
<div class="px-5 py-4 border-b border-gray-200 flex items-center justify-between">
|
||||
<h2 class="text-lg font-semibold text-gray-900">📋 Aktuelle Anträge</h2>
|
||||
<a href="/vorlagen?typ=antrag" class="text-sm text-green-600 hover:text-green-800 font-medium">Alle →</a>
|
||||
</div>
|
||||
|
||||
{#if error}
|
||||
<div class="p-6 text-center text-red-500">{error}</div>
|
||||
{:else if loading}
|
||||
<div class="p-6 text-center text-gray-500">Lade Daten... (API: {API_BASE})</div>
|
||||
{:else if antraege.length === 0}
|
||||
{#if antraege.length === 0}
|
||||
<div class="p-6 text-center text-gray-500">Keine Anträge gefunden</div>
|
||||
{:else}
|
||||
<ul class="divide-y divide-gray-100">
|
||||
{#each antraege as antrag}
|
||||
<li class="px-6 py-4 hover:bg-gray-50 cursor-pointer">
|
||||
<li>
|
||||
<a href="/vorlagen/{antrag.id}" class="block px-5 py-4 hover:bg-gray-50 transition-colors">
|
||||
<div class="flex justify-between items-start">
|
||||
<div class="flex-1">
|
||||
<div class="flex items-center gap-2">
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="flex items-center gap-2 flex-wrap">
|
||||
<span class="font-mono text-sm text-green-700 bg-green-50 px-2 py-0.5 rounded">
|
||||
{antrag.aktenzeichen}
|
||||
</span>
|
||||
<span class="text-xs text-gray-400">{antrag.datum_eingang}</span>
|
||||
</div>
|
||||
<p class="mt-1 text-gray-700 line-clamp-2">{antrag.betreff}</p>
|
||||
<p class="mt-1 text-gray-700 text-sm line-clamp-2">{antrag.betreff}</p>
|
||||
</div>
|
||||
<span class="text-xs px-2 py-1 rounded-full bg-yellow-100 text-yellow-800">
|
||||
⏳ offen
|
||||
</span>
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
{/each}
|
||||
</ul>
|
||||
{/if}
|
||||
</section>
|
||||
</div>
|
||||
</main>
|
||||
{/if}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from 'svelte';
|
||||
import { goto } from '$app/navigation';
|
||||
|
||||
interface FraktionStats {
|
||||
fraktion: string;
|
||||
@ -21,11 +22,52 @@
|
||||
uebereinstimmung: Record<string, Uebereinstimmung>;
|
||||
}
|
||||
|
||||
interface AbstimmungDetail {
|
||||
id: number;
|
||||
sitzung_datum: string | null;
|
||||
ergebnis: string | null;
|
||||
vorlage_id: number;
|
||||
aktenzeichen: string | null;
|
||||
betreff: string | null;
|
||||
fraktion: string;
|
||||
stimme: string;
|
||||
anzahl: number | null;
|
||||
}
|
||||
|
||||
interface VergleichItem {
|
||||
id: number;
|
||||
sitzung_datum: string | null;
|
||||
ergebnis: string | null;
|
||||
vorlage_id: number;
|
||||
aktenzeichen: string | null;
|
||||
betreff: string | null;
|
||||
stimme_f1: string;
|
||||
anzahl_f1: number | null;
|
||||
stimme_f2: string;
|
||||
anzahl_f2: number | null;
|
||||
}
|
||||
|
||||
let fraktionen = $state<FraktionStats[]>([]);
|
||||
let koalitionsmatrix = $state<KoalitionsRow[]>([]);
|
||||
let loading = $state(true);
|
||||
let error = $state('');
|
||||
|
||||
// Filter state for detail view
|
||||
let selectedFraktion = $state('');
|
||||
let selectedStimme = $state('');
|
||||
let detailItems = $state<AbstimmungDetail[]>([]);
|
||||
let detailTotal = $state(0);
|
||||
let detailPage = $state(1);
|
||||
let detailLoading = $state(false);
|
||||
|
||||
// Vergleich state
|
||||
let vergleichF1 = $state('');
|
||||
let vergleichF2 = $state('');
|
||||
let vergleichItems = $state<VergleichItem[]>([]);
|
||||
let vergleichTotal = $state(0);
|
||||
let vergleichPage = $state(1);
|
||||
let vergleichLoading = $state(false);
|
||||
|
||||
const API_BASE = typeof window !== 'undefined'
|
||||
? (window.location.port === '5173'
|
||||
? `http://${window.location.hostname}:8099/api`
|
||||
@ -48,6 +90,76 @@
|
||||
}
|
||||
});
|
||||
|
||||
async function loadDetails(fraktion: string, stimme: string, page: number = 1) {
|
||||
selectedFraktion = fraktion;
|
||||
selectedStimme = stimme;
|
||||
detailPage = page;
|
||||
detailLoading = true;
|
||||
|
||||
try {
|
||||
const params = new URLSearchParams();
|
||||
if (fraktion) params.set('fraktion', fraktion);
|
||||
if (stimme) params.set('stimme', stimme);
|
||||
params.set('page', String(page));
|
||||
params.set('page_size', '20');
|
||||
|
||||
const res = await fetch(`${API_BASE}/abstimmungen/details?${params}`);
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
detailItems = data.items;
|
||||
detailTotal = data.total;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Detail-Fehler:', e);
|
||||
} finally {
|
||||
detailLoading = false;
|
||||
}
|
||||
|
||||
// Scroll to detail section
|
||||
setTimeout(() => {
|
||||
document.getElementById('detail-section')?.scrollIntoView({ behavior: 'smooth' });
|
||||
}, 100);
|
||||
}
|
||||
|
||||
async function loadVergleich(f1: string, f2: string, page: number = 1) {
|
||||
vergleichF1 = f1;
|
||||
vergleichF2 = f2;
|
||||
vergleichPage = page;
|
||||
vergleichLoading = true;
|
||||
|
||||
try {
|
||||
const params = new URLSearchParams({ f1, f2, page: String(page), page_size: '20' });
|
||||
const res = await fetch(`${API_BASE}/abstimmungen/vergleich?${params}`);
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
vergleichItems = data.items;
|
||||
vergleichTotal = data.total;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Vergleich-Fehler:', e);
|
||||
} finally {
|
||||
vergleichLoading = false;
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
document.getElementById('vergleich-section')?.scrollIntoView({ behavior: 'smooth' });
|
||||
}, 100);
|
||||
}
|
||||
|
||||
function clearDetail() {
|
||||
selectedFraktion = '';
|
||||
selectedStimme = '';
|
||||
detailItems = [];
|
||||
detailTotal = 0;
|
||||
}
|
||||
|
||||
function clearVergleich() {
|
||||
vergleichF1 = '';
|
||||
vergleichF2 = '';
|
||||
vergleichItems = [];
|
||||
vergleichTotal = 0;
|
||||
}
|
||||
|
||||
function getColor(quote: number): string {
|
||||
if (quote >= 90) return 'bg-green-500';
|
||||
if (quote >= 70) return 'bg-green-400';
|
||||
@ -59,6 +171,12 @@
|
||||
function getTextColor(quote: number): string {
|
||||
return quote >= 50 ? 'text-white' : 'text-gray-900';
|
||||
}
|
||||
|
||||
function stimmeColor(stimme: string): string {
|
||||
if (stimme === 'ja') return 'text-green-700 bg-green-50';
|
||||
if (stimme === 'nein') return 'text-red-700 bg-red-50';
|
||||
return 'text-yellow-700 bg-yellow-50';
|
||||
}
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
@ -82,6 +200,7 @@
|
||||
<!-- Fraktionen Übersicht -->
|
||||
<section class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 sm:p-6 mb-8">
|
||||
<h2 class="text-lg font-semibold text-gray-900 mb-4">📊 Stimmverhalten nach Fraktion</h2>
|
||||
<p class="text-sm text-gray-500 mb-4">Klicke auf eine Fraktion oder Zelle, um die Abstimmungen zu sehen.</p>
|
||||
|
||||
<!-- Desktop Table -->
|
||||
<div class="hidden md:block overflow-x-auto">
|
||||
@ -99,10 +218,30 @@
|
||||
<tbody class="divide-y divide-gray-100">
|
||||
{#each fraktionen as f}
|
||||
<tr class="hover:bg-gray-50">
|
||||
<td class="px-4 py-3 font-medium text-gray-900">{f.fraktion}</td>
|
||||
<td class="px-4 py-3 text-center text-green-600 font-medium">{f.ja}</td>
|
||||
<td class="px-4 py-3 text-center text-red-600 font-medium">{f.nein}</td>
|
||||
<td class="px-4 py-3 text-center text-yellow-600 font-medium">{f.enthaltung}</td>
|
||||
<td class="px-4 py-3">
|
||||
<button onclick={() => loadDetails(f.fraktion, '')}
|
||||
class="font-medium text-gray-900 hover:text-green-700 hover:underline cursor-pointer">
|
||||
{f.fraktion}
|
||||
</button>
|
||||
</td>
|
||||
<td class="px-4 py-3 text-center">
|
||||
<button onclick={() => loadDetails(f.fraktion, 'ja')}
|
||||
class="text-green-600 font-medium hover:bg-green-100 px-2 py-1 rounded cursor-pointer transition-colors">
|
||||
{f.ja}
|
||||
</button>
|
||||
</td>
|
||||
<td class="px-4 py-3 text-center">
|
||||
<button onclick={() => loadDetails(f.fraktion, 'nein')}
|
||||
class="text-red-600 font-medium hover:bg-red-100 px-2 py-1 rounded cursor-pointer transition-colors">
|
||||
{f.nein}
|
||||
</button>
|
||||
</td>
|
||||
<td class="px-4 py-3 text-center">
|
||||
<button onclick={() => loadDetails(f.fraktion, 'enthaltung')}
|
||||
class="text-yellow-600 font-medium hover:bg-yellow-100 px-2 py-1 rounded cursor-pointer transition-colors">
|
||||
{f.enthaltung}
|
||||
</button>
|
||||
</td>
|
||||
<td class="px-4 py-3 text-center text-gray-600">{f.gesamt}</td>
|
||||
<td class="px-4 py-3">
|
||||
<div class="flex items-center gap-2">
|
||||
@ -123,25 +262,28 @@
|
||||
{#each fraktionen as f}
|
||||
<div class="border border-gray-200 rounded-lg p-4">
|
||||
<div class="flex items-center justify-between mb-3">
|
||||
<span class="font-medium text-gray-900">{f.fraktion}</span>
|
||||
<button onclick={() => loadDetails(f.fraktion, '')}
|
||||
class="font-medium text-gray-900 hover:text-green-700 hover:underline cursor-pointer">
|
||||
{f.fraktion}
|
||||
</button>
|
||||
<span class="text-sm font-medium text-gray-600">{f.ja_quote}%</span>
|
||||
</div>
|
||||
<div class="bg-gray-200 rounded-full h-2.5 mb-3">
|
||||
<div class="bg-green-500 h-2.5 rounded-full" style="width: {f.ja_quote}%"></div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 gap-2 text-center text-xs">
|
||||
<div>
|
||||
<button onclick={() => loadDetails(f.fraktion, 'ja')} class="cursor-pointer hover:bg-green-50 rounded p-1 transition-colors">
|
||||
<div class="font-medium text-green-600">{f.ja}</div>
|
||||
<div class="text-gray-500">Ja</div>
|
||||
</div>
|
||||
<div>
|
||||
</button>
|
||||
<button onclick={() => loadDetails(f.fraktion, 'nein')} class="cursor-pointer hover:bg-red-50 rounded p-1 transition-colors">
|
||||
<div class="font-medium text-red-600">{f.nein}</div>
|
||||
<div class="text-gray-500">Nein</div>
|
||||
</div>
|
||||
<div>
|
||||
</button>
|
||||
<button onclick={() => loadDetails(f.fraktion, 'enthaltung')} class="cursor-pointer hover:bg-yellow-50 rounded p-1 transition-colors">
|
||||
<div class="font-medium text-yellow-600">{f.enthaltung}</div>
|
||||
<div class="text-gray-500">Enth.</div>
|
||||
</div>
|
||||
</button>
|
||||
<div>
|
||||
<div class="font-medium text-gray-600">{f.gesamt}</div>
|
||||
<div class="text-gray-500">Gesamt</div>
|
||||
@ -152,10 +294,99 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Gefilterte Abstimmungen (Detail) -->
|
||||
{#if selectedFraktion}
|
||||
<section id="detail-section" class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 sm:p-6 mb-8">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div>
|
||||
<h2 class="text-lg font-semibold text-gray-900">
|
||||
🔍 {selectedFraktion}{selectedStimme ? ` — ${selectedStimme}` : ''}
|
||||
</h2>
|
||||
<p class="text-sm text-gray-500">{detailTotal} Abstimmungen</p>
|
||||
</div>
|
||||
<button onclick={clearDetail}
|
||||
class="text-sm text-gray-500 hover:text-gray-700 border border-gray-300 rounded-lg px-3 py-1.5 hover:bg-gray-50 transition-colors">
|
||||
✕ Schließen
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if detailLoading}
|
||||
<div class="flex justify-center py-8">
|
||||
<div class="animate-spin rounded-full h-8 w-8 border-b-2 border-green-600"></div>
|
||||
</div>
|
||||
{:else if detailItems.length === 0}
|
||||
<p class="text-gray-500 py-4">Keine Abstimmungen gefunden.</p>
|
||||
{:else}
|
||||
<!-- Desktop -->
|
||||
<div class="hidden md:block overflow-x-auto">
|
||||
<table class="w-full text-sm">
|
||||
<thead class="bg-gray-50">
|
||||
<tr>
|
||||
<th class="px-3 py-2 text-left text-xs font-medium text-gray-500 uppercase">Datum</th>
|
||||
<th class="px-3 py-2 text-left text-xs font-medium text-gray-500 uppercase">Aktenzeichen</th>
|
||||
<th class="px-3 py-2 text-left text-xs font-medium text-gray-500 uppercase">Betreff</th>
|
||||
<th class="px-3 py-2 text-center text-xs font-medium text-gray-500 uppercase">Stimme</th>
|
||||
<th class="px-3 py-2 text-left text-xs font-medium text-gray-500 uppercase">Ergebnis</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-gray-100">
|
||||
{#each detailItems as item}
|
||||
<tr class="hover:bg-gray-50 cursor-pointer" onclick={() => goto(`/vorlagen/${item.vorlage_id}`)}>
|
||||
<td class="px-3 py-2 text-gray-500 whitespace-nowrap">{item.sitzung_datum || '–'}</td>
|
||||
<td class="px-3 py-2">
|
||||
<span class="font-mono text-green-700 text-xs bg-green-50 px-1.5 py-0.5 rounded">{item.aktenzeichen || '–'}</span>
|
||||
</td>
|
||||
<td class="px-3 py-2 text-gray-700 max-w-md truncate">{item.betreff || '–'}</td>
|
||||
<td class="px-3 py-2 text-center">
|
||||
<span class="px-2 py-0.5 rounded text-xs font-medium {stimmeColor(item.stimme)}">{item.stimme}</span>
|
||||
</td>
|
||||
<td class="px-3 py-2 text-gray-600 max-w-xs truncate">{item.ergebnis || '–'}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Mobile Cards -->
|
||||
<div class="md:hidden space-y-2">
|
||||
{#each detailItems as item}
|
||||
<a href="/vorlagen/{item.vorlage_id}" class="block border border-gray-200 rounded-lg p-3 hover:shadow-sm transition-shadow">
|
||||
<div class="flex items-center justify-between mb-1">
|
||||
<span class="font-mono text-xs text-green-700 bg-green-50 px-1.5 py-0.5 rounded">{item.aktenzeichen || '–'}</span>
|
||||
<span class="px-2 py-0.5 rounded text-xs font-medium {stimmeColor(item.stimme)}">{item.stimme}</span>
|
||||
</div>
|
||||
<p class="text-sm text-gray-700 line-clamp-2">{item.betreff || '–'}</p>
|
||||
<div class="flex justify-between text-xs text-gray-500 mt-1">
|
||||
<span>{item.sitzung_datum || '–'}</span>
|
||||
<span class="truncate ml-2">{item.ergebnis || ''}</span>
|
||||
</div>
|
||||
</a>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<!-- Pagination -->
|
||||
{#if detailTotal > 20}
|
||||
{@const totalPages = Math.ceil(detailTotal / 20)}
|
||||
<div class="flex justify-center mt-4 space-x-2">
|
||||
<button disabled={detailPage <= 1} onclick={() => loadDetails(selectedFraktion, selectedStimme, detailPage - 1)}
|
||||
class="px-3 py-2 rounded-lg text-sm border border-gray-300 hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed">
|
||||
« Zurück
|
||||
</button>
|
||||
<span class="px-3 py-2 text-sm text-gray-600">Seite {detailPage} von {totalPages}</span>
|
||||
<button disabled={detailPage >= totalPages} onclick={() => loadDetails(selectedFraktion, selectedStimme, detailPage + 1)}
|
||||
class="px-3 py-2 rounded-lg text-sm border border-gray-300 hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed">
|
||||
Weiter »
|
||||
</button>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
</section>
|
||||
{/if}
|
||||
|
||||
<!-- Koalitionsmatrix -->
|
||||
<section class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 sm:p-6">
|
||||
<h2 class="text-lg font-semibold text-gray-900 mb-4">🤝 Koalitionsmatrix</h2>
|
||||
<p class="text-sm text-gray-500 mb-4">Wie oft stimmen Fraktionen gleich ab? (nur Ja/Nein-Stimmen)</p>
|
||||
<p class="text-sm text-gray-500 mb-4">Wie oft stimmen Fraktionen gleich ab? Klicke auf eine Zelle für Details.</p>
|
||||
|
||||
{#if koalitionsmatrix.length > 0}
|
||||
{@const allFraktionen = koalitionsmatrix.map(r => r.fraktion).sort()}
|
||||
@ -185,10 +416,11 @@
|
||||
{:else if row.uebereinstimmung[f2]}
|
||||
{@const data = row.uebereinstimmung[f2]}
|
||||
<td class="p-1">
|
||||
<div class="w-10 h-10 {getColor(data.quote)} {getTextColor(data.quote)} rounded flex items-center justify-center font-medium"
|
||||
<button onclick={() => loadVergleich(row.fraktion, f2)}
|
||||
class="w-10 h-10 {getColor(data.quote)} {getTextColor(data.quote)} rounded flex items-center justify-center font-medium cursor-pointer hover:ring-2 hover:ring-offset-1 hover:ring-green-500 transition-all"
|
||||
title="{row.fraktion} & {f2}: {data.gleich}/{data.gesamt} ({data.quote}%)">
|
||||
{Math.round(data.quote)}
|
||||
</div>
|
||||
</button>
|
||||
</td>
|
||||
{:else}
|
||||
<td class="p-1">
|
||||
@ -216,4 +448,97 @@
|
||||
<p class="text-gray-500">Noch keine Koalitionsdaten verfügbar.</p>
|
||||
{/if}
|
||||
</section>
|
||||
|
||||
<!-- Fraktionsvergleich -->
|
||||
{#if vergleichF1 && vergleichF2}
|
||||
<section id="vergleich-section" class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 sm:p-6 mt-8">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div>
|
||||
<h2 class="text-lg font-semibold text-gray-900">
|
||||
⚖️ {vergleichF1} vs. {vergleichF2}
|
||||
</h2>
|
||||
<p class="text-sm text-gray-500">{vergleichTotal} gemeinsame Abstimmungen</p>
|
||||
</div>
|
||||
<button onclick={clearVergleich}
|
||||
class="text-sm text-gray-500 hover:text-gray-700 border border-gray-300 rounded-lg px-3 py-1.5 hover:bg-gray-50 transition-colors">
|
||||
✕ Schließen
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{#if vergleichLoading}
|
||||
<div class="flex justify-center py-8">
|
||||
<div class="animate-spin rounded-full h-8 w-8 border-b-2 border-green-600"></div>
|
||||
</div>
|
||||
{:else if vergleichItems.length === 0}
|
||||
<p class="text-gray-500 py-4">Keine gemeinsamen Abstimmungen gefunden.</p>
|
||||
{:else}
|
||||
<!-- Desktop -->
|
||||
<div class="hidden md:block overflow-x-auto">
|
||||
<table class="w-full text-sm">
|
||||
<thead class="bg-gray-50">
|
||||
<tr>
|
||||
<th class="px-3 py-2 text-left text-xs font-medium text-gray-500 uppercase">Datum</th>
|
||||
<th class="px-3 py-2 text-left text-xs font-medium text-gray-500 uppercase">Aktenzeichen</th>
|
||||
<th class="px-3 py-2 text-left text-xs font-medium text-gray-500 uppercase">Betreff</th>
|
||||
<th class="px-3 py-2 text-center text-xs font-medium text-gray-500 uppercase">{vergleichF1}</th>
|
||||
<th class="px-3 py-2 text-center text-xs font-medium text-gray-500 uppercase">{vergleichF2}</th>
|
||||
<th class="px-3 py-2 text-left text-xs font-medium text-gray-500 uppercase">Ergebnis</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-gray-100">
|
||||
{#each vergleichItems as item}
|
||||
<tr class="hover:bg-gray-50 cursor-pointer" onclick={() => goto(`/vorlagen/${item.vorlage_id}`)}>
|
||||
<td class="px-3 py-2 text-gray-500 whitespace-nowrap">{item.sitzung_datum || '–'}</td>
|
||||
<td class="px-3 py-2">
|
||||
<span class="font-mono text-green-700 text-xs bg-green-50 px-1.5 py-0.5 rounded">{item.aktenzeichen || '–'}</span>
|
||||
</td>
|
||||
<td class="px-3 py-2 text-gray-700 max-w-sm truncate">{item.betreff || '–'}</td>
|
||||
<td class="px-3 py-2 text-center">
|
||||
<span class="px-2 py-0.5 rounded text-xs font-medium {stimmeColor(item.stimme_f1)}">{item.stimme_f1}</span>
|
||||
</td>
|
||||
<td class="px-3 py-2 text-center">
|
||||
<span class="px-2 py-0.5 rounded text-xs font-medium {stimmeColor(item.stimme_f2)}">{item.stimme_f2}</span>
|
||||
</td>
|
||||
<td class="px-3 py-2 text-gray-600 max-w-xs truncate">{item.ergebnis || '–'}</td>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Mobile Cards -->
|
||||
<div class="md:hidden space-y-2">
|
||||
{#each vergleichItems as item}
|
||||
<a href="/vorlagen/{item.vorlage_id}" class="block border border-gray-200 rounded-lg p-3 hover:shadow-sm transition-shadow">
|
||||
<div class="flex items-center justify-between mb-1">
|
||||
<span class="font-mono text-xs text-green-700 bg-green-50 px-1.5 py-0.5 rounded">{item.aktenzeichen || '–'}</span>
|
||||
<span class="text-xs text-gray-500">{item.sitzung_datum || '–'}</span>
|
||||
</div>
|
||||
<p class="text-sm text-gray-700 line-clamp-2 mb-2">{item.betreff || '–'}</p>
|
||||
<div class="flex items-center gap-3 text-xs">
|
||||
<span>{vergleichF1}: <span class="font-medium {stimmeColor(item.stimme_f1)} px-1.5 py-0.5 rounded">{item.stimme_f1}</span></span>
|
||||
<span>{vergleichF2}: <span class="font-medium {stimmeColor(item.stimme_f2)} px-1.5 py-0.5 rounded">{item.stimme_f2}</span></span>
|
||||
</div>
|
||||
</a>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<!-- Pagination -->
|
||||
{#if vergleichTotal > 20}
|
||||
{@const totalPages = Math.ceil(vergleichTotal / 20)}
|
||||
<div class="flex justify-center mt-4 space-x-2">
|
||||
<button disabled={vergleichPage <= 1} onclick={() => loadVergleich(vergleichF1, vergleichF2, vergleichPage - 1)}
|
||||
class="px-3 py-2 rounded-lg text-sm border border-gray-300 hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed">
|
||||
« Zurück
|
||||
</button>
|
||||
<span class="px-3 py-2 text-sm text-gray-600">Seite {vergleichPage} von {totalPages}</span>
|
||||
<button disabled={vergleichPage >= totalPages} onclick={() => loadVergleich(vergleichF1, vergleichF2, vergleichPage + 1)}
|
||||
class="px-3 py-2 rounded-lg text-sm border border-gray-300 hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed">
|
||||
Weiter »
|
||||
</button>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
</section>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
File diff suppressed because one or more lines are too long
1
static/_app/immutable/assets/app.DDT1WQ7Y.css
Normal file
1
static/_app/immutable/assets/app.DDT1WQ7Y.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
import{a5 as l,a6 as o,a7 as u,a8 as n,a9 as d,B as m,F as p,a4 as _,aa as v,ab as b}from"./Cjw4vZKn.js";class w{anchor;#t=new Map;#s=new Map;#e=new Map;#i=new Set;#a=!0;constructor(t,s=!0){this.anchor=t,this.#a=s}#f=t=>{if(this.#t.has(t)){var s=this.#t.get(t),e=this.#s.get(s);if(e)l(e),this.#i.delete(s);else{var a=this.#e.get(s);a&&(this.#s.set(s,a.effect),this.#e.delete(s),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),e=a.effect)}for(const[i,f]of this.#t){if(this.#t.delete(i),i===t)break;const r=this.#e.get(f);r&&(o(r.effect),this.#e.delete(f))}for(const[i,f]of this.#s){if(i===s||this.#i.has(i))continue;const r=()=>{if(Array.from(this.#t.values()).includes(i)){var c=document.createDocumentFragment();v(f,c),c.append(n()),this.#e.set(i,{effect:f,fragment:c})}else o(f);this.#i.delete(i),this.#s.delete(i)};this.#a||!e?(this.#i.add(i),u(f,r,!1)):r()}}};#r=t=>{this.#t.delete(t);const s=Array.from(this.#t.values());for(const[e,a]of this.#e)s.includes(e)||(o(a.effect),this.#e.delete(e))};ensure(t,s){var e=m,a=b();if(s&&!this.#s.has(t)&&!this.#e.has(t))if(a){var i=document.createDocumentFragment(),f=n();i.append(f),this.#e.set(t,{effect:d(()=>s(f)),fragment:i})}else this.#s.set(t,d(()=>s(this.anchor)));if(this.#t.set(e,t),a){for(const[r,h]of this.#s)r===t?e.unskip_effect(h):e.skip_effect(h);for(const[r,h]of this.#e)r===t?e.unskip_effect(h.effect):e.skip_effect(h.effect);e.oncommit(this.#f),e.ondiscard(this.#r)}else p&&(this.anchor=_),this.#f(e)}}export{w as B};
|
||||
1
static/_app/immutable/chunks/B-WTs0fq.js
Normal file
1
static/_app/immutable/chunks/B-WTs0fq.js
Normal file
@ -0,0 +1 @@
|
||||
import{N as i,R as n,T as d,U as v,V as u,W as h,X as l,Y as g}from"./reyx9_7L.js";const A=Symbol("is custom element"),N=Symbol("is html"),T=g?"link":"LINK";function M(r){if(i){var s=!1,e=()=>{if(!s){if(s=!0,r.hasAttribute("value")){var t=r.value;_(r,"value",null),r.value=t}if(r.hasAttribute("checked")){var o=r.checked;_(r,"checked",null),r.checked=o}}};r.__on_r=e,v(e),u()}}function _(r,s,e,t){var o=m(r);i&&(o[s]=r.getAttribute(s),s==="src"||s==="srcset"||s==="href"&&r.nodeName===T)||o[s]!==(o[s]=e)&&(s==="loading"&&(r[h]=e),e==null?r.removeAttribute(s):typeof e!="string"&&p(r).includes(s)?r[s]=e:r.setAttribute(s,e))}function m(r){return r.__attributes??={[A]:r.nodeName.includes("-"),[N]:r.namespaceURI===n}}var c=new Map;function p(r){var s=r.getAttribute("is")||r.nodeName,e=c.get(s);if(e)return e;c.set(s,e=[]);for(var t,o=r,f=Element.prototype;f!==o;){t=l(o);for(var a in t)t[a].set&&e.push(a);o=d(o)}return e}export{M as r,_ as s};
|
||||
@ -1 +0,0 @@
|
||||
import{i as A,j as L,P as D,g as P,p as T,a as b,k as B,l as Y,D as x,m as M,o as N,q as U,v as h,w as q,x as w,y as z,z as $,S as j,L as y}from"./DAfY0XTB.js";import{c as C}from"./splFp8Bu.js";function F(r,a,t,s){var f=!U||(t&h)!==0,v=(t&M)!==0,E=(t&$)!==0,n=s,S=!0,g=()=>(S&&(S=!1,n=E?N(s):s),n);let u;if(v){var O=j in r||y in r;u=A(r,a)?.set??(O&&a in r?e=>r[a]=e:void 0)}var _,I=!1;v?[_,I]=C(()=>r[a]):_=r[a],_===void 0&&s!==void 0&&(_=g(),u&&(f&&L(),u(_)));var i;if(f?i=()=>{var e=r[a];return e===void 0?g():(S=!0,e)}:i=()=>{var e=r[a];return e!==void 0&&(n=void 0),e===void 0?n:e},f&&(t&D)===0)return i;if(u){var R=r.$$legacy;return(function(e,l){return arguments.length>0?((!f||!l||R||I)&&u(l?i():e),e):i()})}var c=!1,d=((t&q)!==0?w:z)(()=>(c=!1,i()));v&&P(d);var m=Y;return(function(e,l){if(arguments.length>0){const o=l?P(d):f&&v?T(e):e;return b(d,o),c=!0,n!==void 0&&(n=o),e}return B&&c||(m.f&x)!==0?d.v:P(d)})}export{F as p};
|
||||
@ -1,2 +0,0 @@
|
||||
const e=[...`
|
||||
\r\f \v\uFEFF`];function o(t,f,u){var n=t==null?"":""+t;if(f&&(n=n?n+" "+f:f),u){for(var s of Object.keys(u))if(u[s])n=n?n+" "+s:s;else if(n.length)for(var i=s.length,l=0;(l=n.indexOf(s,l))>=0;){var r=l+i;(l===0||e.includes(n[l-1]))&&(r===n.length||e.includes(n[r]))?n=(l===0?"":n.substring(0,l))+n.substring(r+1):l=r}}return n===""?null:n}function c(t,f){return t==null?null:String(t)}export{o as a,c as t};
|
||||
1
static/_app/immutable/chunks/B89f14j0.js
Normal file
1
static/_app/immutable/chunks/B89f14j0.js
Normal file
@ -0,0 +1 @@
|
||||
import{J as O,aM as y,aL as E,aQ as S,l as m,C as A,U as P,b1 as C,a7 as R,ae as g,_ as h,b2 as D,b3 as H,b4 as I,N as d,a2 as u,b5 as W,a0 as k,b6 as B,Z as U,b7 as $}from"./reyx9_7L.js";const f=Symbol("events"),q=new Set,F=new Set;function j(e,r,t,i={}){function n(a){if(i.capture||G.call(r,a),!a.cancelBubble)return C(()=>t?.call(this,a))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?P(()=>{r.addEventListener(e,n,i)}):r.addEventListener(e,n,i),n}function z(e,r,t,i,n){var a={capture:i,passive:n},s=j(e,r,t,a);(r===document.body||r===window||r===document||r instanceof HTMLMediaElement)&&A(()=>{r.removeEventListener(e,s,a)})}function K(e,r,t){(r[f]??={})[e]=t}function Y(e){for(var r=0;r<e.length;r++)q.add(e[r]);for(var t of F)t(e)}let L=null;function G(e){var r=this,t=r.ownerDocument,i=e.type,n=e.composedPath?.()||[],a=n[0]||e.target;L=e;var s=0,c=L===e&&e[f];if(c){var o=n.indexOf(c);if(o!==-1&&(r===document||r===window)){e[f]=r;return}var b=n.indexOf(r);if(b===-1)return;o<=b&&(s=o)}if(a=n[s]||e.target,a!==r){O(e,"currentTarget",{configurable:!0,get(){return a||t}});var N=S,x=m;y(null),E(null);try{for(var _,w=[];a!==null;){var p=a.assignedSlot||a.parentNode||a.host||null;try{var T=a[f]?.[i];T!=null&&(!a.disabled||e.target===a)&&T.call(a,e)}catch(v){_?w.push(v):_=v}if(e.cancelBubble||p===r||p===null)break;a=p}if(_){for(let v of w)queueMicrotask(()=>{throw v});throw _}}finally{e[f]=r,delete e.currentTarget,y(N),E(x)}}}const J=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Q(e){return J?.createHTML(e)??e}function M(e){var r=R("template");return r.innerHTML=Q(e.replaceAll("<!>","<!---->")),r.content}function l(e,r){var t=m;t.nodes===null&&(t.nodes={start:e,end:r,a:null,t:null})}function ee(e,r){var t=(r&H)!==0,i=(r&I)!==0,n,a=!e.startsWith("<!>");return()=>{if(d)return l(u,null),u;n===void 0&&(n=M(a?e:"<!>"+e),t||(n=h(n)));var s=i||D?document.importNode(n,!0):n.cloneNode(!0);if(t){var c=h(s),o=s.lastChild;l(c,o)}else l(s,s);return s}}function V(e,r,t="svg"){var i=!e.startsWith("<!>"),n=`<${t}>${i?e:"<!>"+e}</${t}>`,a;return()=>{if(d)return l(u,null),u;if(!a){var s=M(n),c=h(s);a=h(c)}var o=a.cloneNode(!0);return l(o,o),o}}function re(e,r){return V(e,r,"svg")}function te(e=""){if(!d){var r=g(e+"");return l(r,r),r}var t=u;return t.nodeType!==B?(t.before(t=g()),U(t)):$(t),l(t,t),t}function ae(){if(d)return l(u,null),u;var e=document.createDocumentFragment(),r=document.createComment(""),t=g();return e.append(r,t),l(r,t),e}function ne(e,r){if(d){var t=m;((t.f&W)===0||t.nodes.end===null)&&(t.nodes.end=u),k();return}e!==null&&e.before(r)}const X="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(X);export{ne as a,K as b,ae as c,Y as d,l as e,ee as f,re as g,z as h,q as i,G as j,F as r,te as t};
|
||||
1
static/_app/immutable/chunks/BHBF0lbh.js
Normal file
1
static/_app/immutable/chunks/BHBF0lbh.js
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
import{A as s,B as v,e as o,G as c,H as b,I as m,J as h}from"./Cjw4vZKn.js";function d(e,r,f=!1){if(e.multiple){if(r==null)return;if(!b(r))return m();for(var a of e.options)a.selected=r.includes(i(a));return}for(a of e.options){var t=i(a);if(h(t,r)){a.selected=!0;return}}(!f||r!==void 0)&&(e.selectedIndex=-1)}function y(e){var r=new MutationObserver(()=>{d(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),c(()=>{r.disconnect()})}function S(e,r,f=r){var a=new WeakSet,t=!0;s(e,"change",u=>{var l=u?"[selected]":":checked",n;if(e.multiple)n=[].map.call(e.querySelectorAll(l),i);else{var _=e.querySelector(l)??e.querySelector("option:not([disabled])");n=_&&i(_)}f(n),e.__value=n,v!==null&&a.add(v)}),o(()=>{var u=r();if(e===document.activeElement){var l=v;if(a.has(l))return}if(d(e,u,t),t&&u===void 0){var n=e.querySelector(":checked");n!==null&&(u=i(n),f(u))}e.__value=u,t=!1}),y(e)}function i(e){return"__value"in e?e.__value:e.value}export{S as b};
|
||||
import{A as s,B as v,e as o,C as c,E as b,F as m,G as h}from"./reyx9_7L.js";function d(e,r,f=!1){if(e.multiple){if(r==null)return;if(!b(r))return m();for(var a of e.options)a.selected=r.includes(i(a));return}for(a of e.options){var t=i(a);if(h(t,r)){a.selected=!0;return}}(!f||r!==void 0)&&(e.selectedIndex=-1)}function y(e){var r=new MutationObserver(()=>{d(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),c(()=>{r.disconnect()})}function S(e,r,f=r){var a=new WeakSet,t=!0;s(e,"change",u=>{var l=u?"[selected]":":checked",n;if(e.multiple)n=[].map.call(e.querySelectorAll(l),i);else{var _=e.querySelector(l)??e.querySelector("option:not([disabled])");n=_&&i(_)}f(n),e.__value=n,v!==null&&a.add(v)}),o(()=>{var u=r();if(e===document.activeElement){var l=v;if(a.has(l))return}if(d(e,u,t),t&&u===void 0){var n=e.querySelector(":checked");n!==null&&(u=i(n),f(u))}e.__value=u,t=!1}),y(e)}function i(e){return"__value"in e?e.__value:e.value}export{S as b};
|
||||
@ -1 +0,0 @@
|
||||
import{ai as v,a8 as d,ac as u,aF as T,l,aG as p,aH as h,F as i,a4 as s,aI as E,Z as y,aJ as g,a2 as w,aK as N}from"./Cjw4vZKn.js";const M=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:t=>t});function x(t){return M?.createHTML(t)??t}function A(t){var r=v("template");return r.innerHTML=x(t.replaceAll("<!>","<!---->")),r.content}function a(t,r){var e=l;e.nodes===null&&(e.nodes={start:t,end:r,a:null,t:null})}function I(t,r){var e=(r&p)!==0,f=(r&h)!==0,n,_=!t.startsWith("<!>");return()=>{if(i)return a(s,null),s;n===void 0&&(n=A(_?t:"<!>"+t),e||(n=u(n)));var o=f||T?document.importNode(n,!0):n.cloneNode(!0);if(e){var c=u(o),m=o.lastChild;a(c,m)}else a(o,o);return o}}function O(t=""){if(!i){var r=d(t+"");return a(r,r),r}var e=s;return e.nodeType!==g?(e.before(e=d()),w(e)):N(e),a(e,e),e}function P(){if(i)return a(s,null),s;var t=document.createDocumentFragment(),r=document.createComment(""),e=d();return t.append(r,e),a(r,e),t}function R(t,r){if(i){var e=l;((e.f&E)===0||e.nodes.end===null)&&(e.nodes.end=s),y();return}t!==null&&t.before(r)}const L="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(L);export{R as a,a as b,P as c,I as f,O as t};
|
||||
@ -1 +0,0 @@
|
||||
import{Q as c,F as o,R as l,T as b,U as p,V as v,W as g,X as f,Y as m}from"./DAfY0XTB.js";import{B as y}from"./Duumi1XQ.js";function F(_,d,h=!1){var n;o&&(n=m,l());var s=new y(_),u=h?b:0;function t(a,r){if(o){var e=p(n);if(a!==parseInt(e.substring(1))){var i=v();g(i),s.anchor=i,f(!1),s.ensure(a,r),f(!0);return}}s.ensure(a,r)}c(()=>{var a=!1;d((r,e=0)=>{a=!0,t(e,r)}),a||t(-1,null)},u)}export{F as i};
|
||||
2
static/_app/immutable/chunks/BwTTNG21.js
Normal file
2
static/_app/immutable/chunks/BwTTNG21.js
Normal file
@ -0,0 +1,2 @@
|
||||
import{aG as Q,g as W,Q as G,o as K,aH as C,U as R,ay as $,a2 as u,N as p,l as y,aI as H,ai as X,a0 as Z,aq as ee,aJ as M,af as c,ae as q,ad as D,B as V,ag as te,aK as se,aL as Y,aM as L,aN as P,aO as re,aP as ie,aQ as ne,ao as U,as as ae,ac as F,Z as N,n as he,al as fe,aR as E,aj as oe,aF as de,aS as _e,aT as le,aU as O,_ as ce,a3 as z,aV as ue,a4 as pe,a6 as x,am as b,aW as ge,aD as ve,aX as ye,av as me,p as Ee,ar as be,a5 as Te,c as Re}from"./reyx9_7L.js";import{i as Ne,r as j,j as B,e as Se}from"./B89f14j0.js";function we(r){let e=0,t=$(0),i;return()=>{Q()&&(W(t),G(()=>(e===0&&(i=K(()=>r(()=>C(t)))),e+=1,()=>{R(()=>{e-=1,e===0&&(i?.(),i=void 0,C(t))})})))}}var Ae=oe|de;function De(r,e,t,i){new Fe(r,e,t,i)}class Fe{parent;is_pending=!1;transform_error;#t;#u=p?u:null;#i;#o;#e;#n=null;#s=null;#r=null;#a=null;#d=0;#f=0;#_=!1;#p=new Set;#g=new Set;#h=null;#m=we(()=>(this.#h=$(this.#d),()=>{this.#h=null}));constructor(e,t,i,f){this.#t=e,this.#i=t,this.#o=s=>{var n=y;n.b=this,n.f|=H,i(s)},this.parent=y.b,this.transform_error=f??this.parent?.transform_error??(s=>s),this.#e=X(()=>{if(p){const s=this.#u;Z();const n=s.data===ee;if(s.data.startsWith(M)){const a=JSON.parse(s.data.slice(M.length));this.#b(a)}else n?this.#T():this.#E()}else this.#v()},Ae),p&&(this.#t=u)}#E(){try{this.#n=c(()=>this.#o(this.#t))}catch(e){this.error(e)}}#b(e){const t=this.#i.failed;t&&(this.#r=c(()=>{t(this.#t,()=>e,()=>()=>{})}))}#T(){const e=this.#i.pending;e&&(this.is_pending=!0,this.#s=c(()=>e(this.#t)),R(()=>{var t=this.#a=document.createDocumentFragment(),i=q();t.append(i),this.#n=this.#c(()=>c(()=>this.#o(i))),this.#f===0&&(this.#t.before(t),this.#a=null,D(this.#s,()=>{this.#s=null}),this.#l(V))}))}#v(){try{if(this.is_pending=this.has_pending_snippet(),this.#f=0,this.#d=0,this.#n=c(()=>{this.#o(this.#t)}),this.#f>0){var e=this.#a=document.createDocumentFragment();te(this.#n,e);const t=this.#i.pending;this.#s=c(()=>t(this.#t))}else this.#l(V)}catch(t){this.error(t)}}#l(e){this.is_pending=!1,e.transfer_effects(this.#p,this.#g)}defer_effect(e){se(e,this.#p,this.#g)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#i.pending}#c(e){var t=y,i=ne,f=U;Y(this.#e),L(this.#e),P(this.#e.ctx);try{return re.ensure(),e()}catch(s){return ie(s),null}finally{Y(t),L(i),P(f)}}#y(e,t){if(!this.has_pending_snippet()){this.parent&&this.parent.#y(e,t);return}this.#f+=e,this.#f===0&&(this.#l(t),this.#s&&D(this.#s,()=>{this.#s=null}),this.#a&&(this.#t.before(this.#a),this.#a=null))}update_pending_count(e,t){this.#y(e,t),this.#d+=e,!(!this.#h||this.#_)&&(this.#_=!0,R(()=>{this.#_=!1,this.#h&&ae(this.#h,this.#d)}))}get_effect_pending(){return this.#m(),W(this.#h)}error(e){var t=this.#i.onerror;let i=this.#i.failed;if(!t&&!i)throw e;this.#n&&(F(this.#n),this.#n=null),this.#s&&(F(this.#s),this.#s=null),this.#r&&(F(this.#r),this.#r=null),p&&(N(this.#u),he(),N(fe()));var f=!1,s=!1;const n=()=>{if(f){le();return}f=!0,s&&_e(),this.#r!==null&&D(this.#r,()=>{this.#r=null}),this.#c(()=>{this.#v()})},l=a=>{try{s=!0,t?.(a,n),s=!1}catch(h){E(h,this.#e&&this.#e.parent)}i&&(this.#r=this.#c(()=>{try{return c(()=>{var h=y;h.b=this,h.f|=H,i(this.#t,()=>a,()=>n)})}catch(h){return E(h,this.#e.parent),null}}))};R(()=>{var a;try{a=this.transform_error(e)}catch(h){E(h,this.#e&&this.#e.parent);return}a!==null&&typeof a=="object"&&typeof a.then=="function"?a.then(l,h=>E(h,this.#e&&this.#e.parent)):l(a)})}}const Oe=["touchstart","touchmove"];function xe(r){return Oe.includes(r)}function He(r,e){var t=e==null?"":typeof e=="object"?`${e}`:e;t!==(r.__t??=r.nodeValue)&&(r.__t=t,r.nodeValue=`${t}`)}function Ie(r,e){return J(r,e)}function Me(r,e){O(),e.intro=e.intro??!1;const t=e.target,i=p,f=u;try{for(var s=ce(t);s&&(s.nodeType!==z||s.data!==ue);)s=pe(s);if(!s)throw x;b(!0),N(s);const n=J(r,{...e,anchor:s});return b(!1),n}catch(n){if(n instanceof Error&&n.message.split(`
|
||||
`).some(l=>l.startsWith("https://svelte.dev/e/")))throw n;return n!==x&&console.warn("Failed to hydrate: ",n),e.recover===!1&&ge(),O(),ve(t),b(!1),Ie(r,e)}finally{b(i),N(f)}}const T=new Map;function J(r,{target:e,anchor:t,props:i={},events:f,context:s,intro:n=!0,transformError:l}){O();var a=void 0,h=ye(()=>{var m=t??e.appendChild(q());De(m,{pending:()=>{}},o=>{Ee({});var d=U;if(s&&(d.c=s),f&&(i.$$events=f),p&&Se(o,null),a=r(o,i)||{},p&&(y.nodes.end=u,u===null||u.nodeType!==z||u.data!==be))throw Te(),x;Re()},l);var S=new Set,w=o=>{for(var d=0;d<o.length;d++){var _=o[d];if(!S.has(_)){S.add(_);var v=xe(_);for(const A of[e,document]){var g=T.get(A);g===void 0&&(g=new Map,T.set(A,g));var k=g.get(_);k===void 0?(A.addEventListener(_,B,{passive:v}),g.set(_,1)):g.set(_,k+1)}}}};return w(me(Ne)),j.add(w),()=>{for(var o of S)for(const v of[e,document]){var d=T.get(v),_=d.get(o);--_==0?(v.removeEventListener(o,B),d.delete(o),d.size===0&&T.delete(v)):d.set(o,_)}j.delete(w),m!==t&&m.parentNode?.removeChild(m)}});return I.set(a,h),a}let I=new WeakMap;function Ve(r,e){const t=I.get(r);return t?(I.delete(r),t(e)):Promise.resolve()}export{Me as h,Ie as m,He as s,Ve as u};
|
||||
@ -1 +0,0 @@
|
||||
import{a as y}from"./DVOkFnep.js";import{F as r}from"./DAfY0XTB.js";function a(t,e,f,i){var l=t.__style;if(r||l!==e){var s=y(e);(!r||s!==t.getAttribute("style"))&&(s==null?t.removeAttribute("style"):t.style.cssText=s),t.__style=e}return i}export{a as s};
|
||||
@ -1 +1 @@
|
||||
import{a as b}from"./B08B5jt4.js";import{F as g}from"./Cjw4vZKn.js";function A(i,h,f,N,t,r){var o=i.__className;if(g||o!==f||o===void 0){var a=b(f,N,r);(!g||a!==i.getAttribute("class"))&&(a==null?i.removeAttribute("class"):i.className=a),i.__className=f}else if(r&&t!==r)for(var l in r){var u=!!r[l];(t==null||u!==!!t[l])&&i.classList.toggle(l,u)}return r}export{A as s};
|
||||
import{a as b}from"./D5EBvEcH.js";import{N as g}from"./reyx9_7L.js";function A(i,h,f,N,t,r){var o=i.__className;if(g||o!==f||o===void 0){var a=b(f,N,r);(!g||a!==i.getAttribute("class"))&&(a==null?i.removeAttribute("class"):i.className=a),i.__className=f}else if(r&&t!==r)for(var l in r){var u=!!r[l];(t==null||u!==!!t[l])&&i.classList.toggle(l,u)}return r}export{A as s};
|
||||
@ -1 +0,0 @@
|
||||
import{a1 as z,Q as Z,ao as G,F as A,W as M,a5 as J,R as re,g as U,U as ae,ap as fe,V as X,X as O,Y as H,a7 as K,aq as ie,ar as P,B as le,as as C,a2 as L,at as se,a4 as ue,y as oe,H as te,au as q,av as ve,aw as de,O as ce,ax as Q,ay as pe,D as ge,Z as $,a0 as j,az as B,af as _e,aA as Ee,aB as he,aC as me,a3 as Te,_ as Ce,a8 as V,aD as we,aE as Ae}from"./DAfY0XTB.js";function Ie(e,a){return a}function Se(e,a,s){for(var u=[],t=a.length,r,i=a.length,p=0;p<t;p++){let E=a[p];j(E,()=>{if(r){if(r.pending.delete(E),r.done.add(E),r.pending.size===0){var v=e.outrogroups;Y(e,q(r.done)),v.delete(r),v.size===0&&(e.outrogroups=null)}}else i-=1},!1)}if(i===0){var l=u.length===0&&s!==null;if(l){var c=s,f=c.parentNode;me(f),f.append(c),e.items.clear()}Y(e,a,!l)}else r={pending:new Set(a),done:new Set},(e.outrogroups??=new Set).add(r)}function Y(e,a,s=!0){var u;if(e.pending.size>0){u=new Set;for(const i of e.pending.values())for(const p of i)u.add(e.items.get(p).e)}for(var t=0;t<a.length;t++){var r=a[t];if(u?.has(r)){r.f|=C;const i=document.createDocumentFragment();Te(r,i)}else Ce(a[t],s)}}var W;function Ne(e,a,s,u,t,r=null){var i=e,p=new Map,l=(a&G)!==0;if(l){var c=e;i=A?M(J(c)):c.appendChild(z())}A&&re();var f=null,E=oe(()=>{var d=s();return te(d)?d:d==null?[]:q(d)}),v,h=new Map,m=!0;function I(d){(S.effect.f&ge)===0&&(S.pending.delete(d),S.fallback=f,De(S,v,i,a,u),f!==null&&(v.length===0?(f.f&C)===0?$(f):(f.f^=C,k(f,null,i)):j(f,()=>{f=null})))}function n(d){S.pending.delete(d)}var o=Z(()=>{v=U(E);var d=v.length;let _=!1;if(A){var b=ae(i)===fe;b!==(d===0)&&(i=X(),M(i),O(!1),_=!0)}for(var D=new Set,g=le,N=ue(),R=0;R<d;R+=1){A&&H.nodeType===K&&H.data===ie&&(i=H,_=!0,O(!1));var T=v[R],y=u(T,R),w=m?null:p.get(y);w?(w.v&&P(w.v,T),w.i&&P(w.i,R),N&&g.unskip_effect(w.e)):(w=Re(p,m?i:W??=z(),T,y,R,t,a,s),m||(w.e.f|=C),p.set(y,w)),D.add(y)}if(d===0&&r&&!f&&(m?f=L(()=>r(i)):(f=L(()=>r(W??=z())),f.f|=C)),d>D.size&&se(),A&&d>0&&M(X()),!m)if(h.set(g,D),N){for(const[ee,ne]of p)D.has(ee)||g.skip_effect(ne.e);g.oncommit(I),g.ondiscard(n)}else I(g);_&&O(!0),U(E)}),S={effect:o,items:p,pending:h,outrogroups:null,fallback:f};m=!1,A&&(i=H)}function x(e){for(;e!==null&&(e.f&Ee)===0;)e=e.next;return e}function De(e,a,s,u,t){var r=(u&he)!==0,i=a.length,p=e.items,l=x(e.effect.first),c,f=null,E,v=[],h=[],m,I,n,o;if(r)for(o=0;o<i;o+=1)m=a[o],I=t(m,o),n=p.get(I).e,(n.f&C)===0&&(n.nodes?.a?.measure(),(E??=new Set).add(n));for(o=0;o<i;o+=1){if(m=a[o],I=t(m,o),n=p.get(I).e,e.outrogroups!==null)for(const T of e.outrogroups)T.pending.delete(n),T.done.delete(n);if((n.f&B)!==0&&($(n),r&&(n.nodes?.a?.unfix(),(E??=new Set).delete(n))),(n.f&C)!==0)if(n.f^=C,n===l)k(n,null,s);else{var S=f?f.next:l;n===e.effect.last&&(e.effect.last=n.prev),n.prev&&(n.prev.next=n.next),n.next&&(n.next.prev=n.prev),F(e,f,n),F(e,n,S),k(n,S,s),f=n,v=[],h=[],l=x(f.next);continue}if(n!==l){if(c!==void 0&&c.has(n)){if(v.length<h.length){var d=h[0],_;f=d.prev;var b=v[0],D=v[v.length-1];for(_=0;_<v.length;_+=1)k(v[_],d,s);for(_=0;_<h.length;_+=1)c.delete(h[_]);F(e,b.prev,D.next),F(e,f,b),F(e,D,d),l=d,f=D,o-=1,v=[],h=[]}else c.delete(n),k(n,l,s),F(e,n.prev,n.next),F(e,n,f===null?e.effect.first:f.next),F(e,f,n),f=n;continue}for(v=[],h=[];l!==null&&l!==n;)(c??=new Set).add(l),h.push(l),l=x(l.next);if(l===null)continue}(n.f&C)===0&&v.push(n),f=n,l=x(n.next)}if(e.outrogroups!==null){for(const T of e.outrogroups)T.pending.size===0&&(Y(e,q(T.done)),e.outrogroups?.delete(T));e.outrogroups.size===0&&(e.outrogroups=null)}if(l!==null||c!==void 0){var g=[];if(c!==void 0)for(n of c)(n.f&B)===0&&g.push(n);for(;l!==null;)(l.f&B)===0&&l!==e.fallback&&g.push(l),l=x(l.next);var N=g.length;if(N>0){var R=(u&G)!==0&&i===0?s:null;if(r){for(o=0;o<N;o+=1)g[o].nodes?.a?.measure();for(o=0;o<N;o+=1)g[o].nodes?.a?.fix()}Se(e,g,R)}}r&&_e(()=>{if(E!==void 0)for(n of E)n.nodes?.a?.apply()})}function Re(e,a,s,u,t,r,i,p){var l=(i&ve)!==0?(i&de)===0?ce(s,!1,!1):Q(s):null,c=(i&pe)!==0?Q(t):null;return{v:l,i:c,e:L(()=>(r(a,l??s,c??t,p),()=>{e.delete(u)}))}}function k(e,a,s){if(e.nodes)for(var u=e.nodes.start,t=e.nodes.end,r=a&&(a.f&C)===0?a.nodes.start:s;u!==null;){var i=V(u);if(r.before(u),u===t)return;u=i}}function F(e,a,s){a===null?e.effect.first=s:a.next=s,s===null?e.effect.last=a:s.prev=a}function xe(e,a){let s=null,u=A;var t;if(A){s=H;for(var r=J(document.head);r!==null&&(r.nodeType!==K||r.data!==e);)r=V(r);if(r===null)O(!1);else{var i=V(r);r.remove(),M(i)}}A||(t=document.head.appendChild(z()));try{Z(()=>a(t),we|Ae)}finally{u&&(O(!0),M(s))}}export{Ne as e,xe as h,Ie as i};
|
||||
@ -1 +0,0 @@
|
||||
import{c as y,a as p,f as _}from"./Bkzsmr9I.js";import{d as j,f as S,h as B,c as i,r as n,b as c,t as v,g as r,u as I}from"./Cjw4vZKn.js";import{s as m}from"./DfJQ0EIT.js";import{i as q}from"./kjB3f-xG.js";import{s as w}from"./RVjQLo13.js";import{s as d}from"./CWOupeSg.js";import{p as z}from"./fSdafo1a.js";import{s as A}from"./utcFFRIM.js";var C=_('<a><span class="mr-1"> </span> </a>'),D=_('<span><span class="mr-1"> </span> </span>');function N(x,o){j(o,!0);let h=z(o,"linked",3,!1);const s=I(()=>A(o.status));var u=y(),b=S(u);{var g=e=>{var t=C(),a=i(t),f=i(a,!0);n(a);var l=c(a);n(t),v(()=>{w(t,"href",`/ketten?status=${o.status??""}`),d(t,1,`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r(s).color??""} hover:opacity-80 transition-opacity`),m(f,r(s).emoji),m(l,` ${r(s).label??""}`)}),p(e,t)},k=e=>{var t=D(),a=i(t),f=i(a,!0);n(a);var l=c(a);n(t),v(()=>{d(t,1,`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r(s).color??""}`),m(f,r(s).emoji),m(l,` ${r(s).label??""}`)}),p(e,t)};q(b,e=>{h()&&o.status?e(g):e(k,-1)})}p(x,u),B()}export{N as S};
|
||||
@ -1 +0,0 @@
|
||||
import{A as m,B as v,C as _,o as b,E as i,F as y}from"./Cjw4vZKn.js";function k(e,l,u=l){var s=new WeakSet;m(e,"input",async r=>{var a=r?e.defaultValue:e.value;if(a=o(e)?t(a):a,u(a),v!==null&&s.add(v),await _(),a!==(a=l())){var d=e.selectionStart,f=e.selectionEnd,n=e.value.length;if(e.value=a??"",f!==null){var c=e.value.length;d===f&&f===n&&c>n?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=d,e.selectionEnd=Math.min(f,c))}}}),(y&&e.defaultValue!==e.value||b(l)==null&&e.value)&&(u(o(e)?t(e.value):e.value),v!==null&&s.add(v)),i(()=>{var r=l();if(e===document.activeElement){var a=v;if(s.has(a))return}o(e)&&r===t(e.value)||e.type==="date"&&!r&&!e.value||r!==e.value&&(e.value=r??"")})}function o(e){var l=e.type;return l==="number"||l==="range"}function t(e){return e===""?null:+e}export{k as b};
|
||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
const a=typeof window<"u"&&window.location.port==="5173"?`http://${window.location.hostname}:8099/api`:"/api";async function e(t){const n=await fetch(`${a}${t}`);if(!n.ok)throw new Error(`API error: ${n.status}`);return n.json()}const r=t=>{const n=new URLSearchParams(t).toString();return e(`/vorlagen?${n}`)},s=t=>e(`/vorlagen/${t}`),c=t=>{const n=new URLSearchParams(t).toString();return e(`/ketten?${n}`)},i=t=>e(`/ketten/${t}`),f=()=>e("/fraktionen"),h=(t,n)=>{const o=n?`?jahr=${n}`:"";return e(`/fraktionen/${t}/dashboard${o}`)};export{c as a,s as b,i as c,r as d,h as e,f};
|
||||
File diff suppressed because one or more lines are too long
1
static/_app/immutable/chunks/Cm2grUT-.js
Normal file
1
static/_app/immutable/chunks/Cm2grUT-.js
Normal file
@ -0,0 +1 @@
|
||||
import{c as y,a as p,f as d}from"./B89f14j0.js";import{p as j,f as S,c as B,h as i,r as n,b as c,t as v,g as r,u as I}from"./reyx9_7L.js";import{s as m}from"./BwTTNG21.js";import{i as q}from"./Do7Yo2YN.js";import{s as w}from"./B-WTs0fq.js";import{s as _}from"./C7sCDBjT.js";import{p as z}from"./DfsAIpU3.js";import{s as A}from"./utcFFRIM.js";var C=d('<a><span class="mr-1"> </span> </a>'),D=d('<span><span class="mr-1"> </span> </span>');function N(x,o){j(o,!0);let h=z(o,"linked",3,!1);const s=I(()=>A(o.status));var u=y(),b=S(u);{var g=e=>{var t=C(),a=i(t),f=i(a,!0);n(a);var l=c(a);n(t),v(()=>{w(t,"href",`/ketten?status=${o.status??""}`),_(t,1,`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r(s).color??""} hover:opacity-80 transition-opacity`),m(f,r(s).emoji),m(l,` ${r(s).label??""}`)}),p(e,t)},k=e=>{var t=D(),a=i(t),f=i(a,!0);n(a);var l=c(a);n(t),v(()=>{_(t,1,`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r(s).color??""}`),m(f,r(s).emoji),m(l,` ${r(s).label??""}`)}),p(e,t)};q(b,e=>{h()&&o.status?e(g):e(k,-1)})}p(x,u),B()}export{N as S};
|
||||
1
static/_app/immutable/chunks/CvtDgobB.js
Normal file
1
static/_app/immutable/chunks/CvtDgobB.js
Normal file
@ -0,0 +1 @@
|
||||
import{s as f,g as c}from"./Pu2RPHbX.js";import{C as l,J as b,K as a,M as _,g as d,d as p}from"./reyx9_7L.js";let u=!1,t=Symbol();function v(e,r,n){const s=n[r]??={store:null,source:_(void 0),unsubscribe:a};if(s.store!==e&&!(t in n))if(s.unsubscribe(),s.store=e??null,e==null)s.source.v=void 0,s.unsubscribe=a;else{var i=!0;s.unsubscribe=f(e,o=>{i?s.source.v=o:p(s.source,o)}),i=!1}return e&&t in n?c(e):d(s.source)}function y(){const e={};function r(){l(()=>{for(var n in e)e[n].unsubscribe();b(e,t,{enumerable:!1,value:!0})})}return[e,r]}function M(e){var r=u;try{return u=!1,[e(),u]}finally{u=r}}export{v as a,M as c,y as s};
|
||||
File diff suppressed because one or more lines are too long
2
static/_app/immutable/chunks/D5EBvEcH.js
Normal file
2
static/_app/immutable/chunks/D5EBvEcH.js
Normal file
@ -0,0 +1,2 @@
|
||||
import{ae as y,ai as K,ap as Q,N as A,Z as b,_ as W,a0 as fe,g as U,ak as ae,aq as ie,al as P,am as H,a2 as M,a3 as $,ar as le,as as X,B as se,at as w,af as L,au as ue,ah as te,y as oe,E as de,av as Y,aw as ve,ax as ce,M as pe,ay as Z,az as ge,D as _e,ab as j,ad as ee,aA as B,U as Ee,aB as he,aC as me,aD as Te,ag as we,ac as Ce,a4 as q,aE as Ae,aF as Se}from"./reyx9_7L.js";function Ie(e,a){return a}function De(e,a,l){for(var r=[],t=a.length,i,f=a.length,o=0;o<t;o++){let E=a[o];ee(E,()=>{if(i){if(i.pending.delete(E),i.done.add(E),i.pending.size===0){var v=e.outrogroups;V(e,Y(i.done)),v.delete(i),v.size===0&&(e.outrogroups=null)}}else f-=1},!1)}if(f===0){var u=r.length===0&&l!==null;if(u){var p=l,s=p.parentNode;Te(s),s.append(p),e.items.clear()}V(e,a,!u)}else i={pending:new Set(a),done:new Set},(e.outrogroups??=new Set).add(i)}function V(e,a,l=!0){var r;if(e.pending.size>0){r=new Set;for(const f of e.pending.values())for(const o of f)r.add(e.items.get(o).e)}for(var t=0;t<a.length;t++){var i=a[t];if(r?.has(i)){i.f|=w;const f=document.createDocumentFragment();we(i,f)}else Ce(a[t],l)}}var G;function Re(e,a,l,r,t,i=null){var f=e,o=new Map,u=(a&Q)!==0;if(u){var p=e;f=A?b(W(p)):p.appendChild(y())}A&&fe();var s=null,E=oe(()=>{var c=l();return de(c)?c:c==null?[]:Y(c)}),v,h=new Map,m=!0;function F(c){(S.effect.f&_e)===0&&(S.pending.delete(c),S.fallback=s,Ne(S,v,f,a,r),s!==null&&(v.length===0?(s.f&w)===0?j(s):(s.f^=w,O(s,null,f)):ee(s,()=>{s=null})))}function n(c){S.pending.delete(c)}var d=K(()=>{v=U(E);var c=v.length;let _=!1;if(A){var k=ae(f)===ie;k!==(c===0)&&(f=P(),b(f),H(!1),_=!0)}for(var D=new Set,g=se,I=te(),N=0;N<c;N+=1){A&&M.nodeType===$&&M.data===le&&(f=M,_=!0,H(!1));var T=v[N],z=r(T,N),C=m?null:o.get(z);C?(C.v&&X(C.v,T),C.i&&X(C.i,N),I&&g.unskip_effect(C.e)):(C=xe(o,m?f:G??=y(),T,z,N,t,a,l),m||(C.e.f|=w),o.set(z,C)),D.add(z)}if(c===0&&i&&!s&&(m?s=L(()=>i(f)):(s=L(()=>i(G??=y())),s.f|=w)),c>D.size&&ue(),A&&c>0&&b(P()),!m)if(h.set(g,D),I){for(const[ne,re]of o)D.has(ne)||g.skip_effect(re.e);g.oncommit(F),g.ondiscard(n)}else F(g);_&&H(!0),U(E)}),S={effect:d,items:o,pending:h,outrogroups:null,fallback:s};m=!1,A&&(f=M)}function R(e){for(;e!==null&&(e.f&he)===0;)e=e.next;return e}function Ne(e,a,l,r,t){var i=(r&me)!==0,f=a.length,o=e.items,u=R(e.effect.first),p,s=null,E,v=[],h=[],m,F,n,d;if(i)for(d=0;d<f;d+=1)m=a[d],F=t(m,d),n=o.get(F).e,(n.f&w)===0&&(n.nodes?.a?.measure(),(E??=new Set).add(n));for(d=0;d<f;d+=1){if(m=a[d],F=t(m,d),n=o.get(F).e,e.outrogroups!==null)for(const T of e.outrogroups)T.pending.delete(n),T.done.delete(n);if((n.f&B)!==0&&(j(n),i&&(n.nodes?.a?.unfix(),(E??=new Set).delete(n))),(n.f&w)!==0)if(n.f^=w,n===u)O(n,null,l);else{var S=s?s.next:u;n===e.effect.last&&(e.effect.last=n.prev),n.prev&&(n.prev.next=n.next),n.next&&(n.next.prev=n.prev),x(e,s,n),x(e,n,S),O(n,S,l),s=n,v=[],h=[],u=R(s.next);continue}if(n!==u){if(p!==void 0&&p.has(n)){if(v.length<h.length){var c=h[0],_;s=c.prev;var k=v[0],D=v[v.length-1];for(_=0;_<v.length;_+=1)O(v[_],c,l);for(_=0;_<h.length;_+=1)p.delete(h[_]);x(e,k.prev,D.next),x(e,s,k),x(e,D,c),u=c,s=D,d-=1,v=[],h=[]}else p.delete(n),O(n,u,l),x(e,n.prev,n.next),x(e,n,s===null?e.effect.first:s.next),x(e,s,n),s=n;continue}for(v=[],h=[];u!==null&&u!==n;)(p??=new Set).add(u),h.push(u),u=R(u.next);if(u===null)continue}(n.f&w)===0&&v.push(n),s=n,u=R(n.next)}if(e.outrogroups!==null){for(const T of e.outrogroups)T.pending.size===0&&(V(e,Y(T.done)),e.outrogroups?.delete(T));e.outrogroups.size===0&&(e.outrogroups=null)}if(u!==null||p!==void 0){var g=[];if(p!==void 0)for(n of p)(n.f&B)===0&&g.push(n);for(;u!==null;)(u.f&B)===0&&u!==e.fallback&&g.push(u),u=R(u.next);var I=g.length;if(I>0){var N=(r&Q)!==0&&f===0?l:null;if(i){for(d=0;d<I;d+=1)g[d].nodes?.a?.measure();for(d=0;d<I;d+=1)g[d].nodes?.a?.fix()}De(e,g,N)}}i&&Ee(()=>{if(E!==void 0)for(n of E)n.nodes?.a?.apply()})}function xe(e,a,l,r,t,i,f,o){var u=(f&ve)!==0?(f&ce)===0?pe(l,!1,!1):Z(l):null,p=(f&ge)!==0?Z(t):null;return{v:u,i:p,e:L(()=>(i(a,u??l,p??t,o),()=>{e.delete(r)}))}}function O(e,a,l){if(e.nodes)for(var r=e.nodes.start,t=e.nodes.end,i=a&&(a.f&w)===0?a.nodes.start:l;r!==null;){var f=q(r);if(i.before(r),r===t)return;r=f}}function x(e,a,l){a===null?e.effect.first=l:a.next=l,l===null?e.effect.last=a:l.prev=a}function Me(e,a){let l=null,r=A;var t;if(A){l=M;for(var i=W(document.head);i!==null&&(i.nodeType!==$||i.data!==e);)i=q(i);if(i===null)H(!1);else{var f=q(i);i.remove(),b(f)}}A||(t=document.head.appendChild(y()));try{K(()=>a(t),Ae|Se)}finally{r&&(H(!0),b(l))}}const J=[...`
|
||||
\r\f \v\uFEFF`];function Oe(e,a,l){var r=e==null?"":""+e;if(a&&(r=r?r+" "+a:a),l){for(var t of Object.keys(l))if(l[t])r=r?r+" "+t:t;else if(r.length)for(var i=t.length,f=0;(f=r.indexOf(t,f))>=0;){var o=f+i;(f===0||J.includes(r[f-1]))&&(o===r.length||J.includes(r[o]))?r=(f===0?"":r.substring(0,f))+r.substring(o+1):f=o}}return r===""?null:r}function be(e,a){return e==null?null:String(e)}export{Oe as a,Re as e,Me as h,Ie as i,be as t};
|
||||
@ -1 +0,0 @@
|
||||
import{t as b}from"./DVOkFnep.js";import{F as g}from"./DAfY0XTB.js";function A(i,h,t,N,f,r){var o=i.__className;if(g||o!==t||o===void 0){var a=b(t,N,r);(!g||a!==i.getAttribute("class"))&&(a==null?i.removeAttribute("class"):i.className=a),i.__className=t}else if(r&&f!==r)for(var l in r){var u=!!r[l];(f==null||u!==!!f[l])&&i.classList.toggle(l,u)}return r}export{A as s};
|
||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
import{ab as v,a1 as d,a5 as u,aF as T,l,aG as p,aH as h,F as i,Y as s,aI as E,R as y,aJ as g,W as w,aK as N}from"./DAfY0XTB.js";const M=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:t=>t});function b(t){return M?.createHTML(t)??t}function x(t){var r=v("template");return r.innerHTML=b(t.replaceAll("<!>","<!---->")),r.content}function a(t,r){var e=l;e.nodes===null&&(e.nodes={start:t,end:r,a:null,t:null})}function R(t,r){var e=(r&p)!==0,f=(r&h)!==0,n,_=!t.startsWith("<!>");return()=>{if(i)return a(s,null),s;n===void 0&&(n=x(_?t:"<!>"+t),e||(n=u(n)));var o=f||T?document.importNode(n,!0):n.cloneNode(!0);if(e){var c=u(o),m=o.lastChild;a(c,m)}else a(o,o);return o}}function I(t=""){if(!i){var r=d(t+"");return a(r,r),r}var e=s;return e.nodeType!==g?(e.before(e=d()),w(e)):N(e),a(e,e),e}function O(){if(i)return a(s,null),s;var t=document.createDocumentFragment(),r=document.createComment(""),e=d();return t.append(r,e),a(r,e),t}function P(t,r){if(i){var e=l;((e.f&E)===0||e.nodes.end===null)&&(e.nodes.end=s),y();return}t!==null&&t.before(r)}const A="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(A);export{P as a,a as b,O as c,R as f,I as t};
|
||||
@ -1 +0,0 @@
|
||||
import{am as o,an as t,q as c,o as l}from"./DAfY0XTB.js";function a(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function r(e){t===null&&a(),c&&t.l!==null?u(t).m.push(e):o(()=>{const n=l(e);if(typeof n=="function")return n})}function u(e){var n=e.l;return n.u??={a:[],b:[],m:[]}}export{r as o};
|
||||
@ -1 +0,0 @@
|
||||
import{N as o,o as a,ae as d}from"./DAfY0XTB.js";function p(s,u,n){if(s==null)return u(void 0),o;const t=a(()=>s.subscribe(u,n));return t.unsubscribe?()=>t.unsubscribe():t}const i=[];function _(s,u=o){let n=null;const t=new Set;function c(r){if(d(s,r)&&(s=r,n)){const b=!i.length;for(const e of t)e[1](),i.push(e,s);if(b){for(let e=0;e<i.length;e+=2)i[e][0](i[e+1]);i.length=0}}}function f(r){c(r(s))}function l(r,b=o){const e=[r,b];return t.add(e),t.size===1&&(n=u(c,f)||o),r(s),()=>{t.delete(e),t.size===0&&n&&(n(),n=null)}}return{set:c,update:f,subscribe:l}}function h(s){let u;return p(s,n=>u=n)(),u}export{h as g,p as s,_ as w};
|
||||
@ -1 +1 @@
|
||||
import{A as m,B as v,C as _,o as b,E as i,F as y}from"./DAfY0XTB.js";function k(e,l,u=l){var s=new WeakSet;m(e,"input",async r=>{var a=r?e.defaultValue:e.value;if(a=o(e)?t(a):a,u(a),v!==null&&s.add(v),await _(),a!==(a=l())){var d=e.selectionStart,f=e.selectionEnd,n=e.value.length;if(e.value=a??"",f!==null){var c=e.value.length;d===f&&f===n&&c>n?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=d,e.selectionEnd=Math.min(f,c))}}}),(y&&e.defaultValue!==e.value||b(l)==null&&e.value)&&(u(o(e)?t(e.value):e.value),v!==null&&s.add(v)),i(()=>{var r=l();if(e===document.activeElement){var a=v;if(s.has(a))return}o(e)&&r===t(e.value)||e.type==="date"&&!r&&!e.value||r!==e.value&&(e.value=r??"")})}function o(e){var l=e.type;return l==="number"||l==="range"}function t(e){return e===""?null:+e}export{k as b};
|
||||
import{A as m,B as v,O as _,o as b,Q as i,N as y}from"./reyx9_7L.js";function E(e,l,u=l){var s=new WeakSet;m(e,"input",async r=>{var a=r?e.defaultValue:e.value;if(a=o(e)?t(a):a,u(a),v!==null&&s.add(v),await _(),a!==(a=l())){var d=e.selectionStart,f=e.selectionEnd,n=e.value.length;if(e.value=a??"",f!==null){var c=e.value.length;d===f&&f===n&&c>n?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=d,e.selectionEnd=Math.min(f,c))}}}),(y&&e.defaultValue!==e.value||b(l)==null&&e.value)&&(u(o(e)?t(e.value):e.value),v!==null&&s.add(v)),i(()=>{var r=l();if(e===document.activeElement){var a=v;if(s.has(a))return}o(e)&&r===t(e.value)||e.type==="date"&&!r&&!e.value||r!==e.value&&(e.value=r??"")})}function o(e){var l=e.type;return l==="number"||l==="range"}function t(e){return e===""?null:+e}export{E as b};
|
||||
@ -1,2 +0,0 @@
|
||||
import{F as l,af as u,ag as d,ah as g,ai as v,aj as h,ak as A,al as m}from"./DAfY0XTB.js";const i=[...`
|
||||
\r\f \v\uFEFF`];function I(r,s,t){var e=r==null?"":""+r;if(s&&(e=e?e+" "+s:s),t){for(var n of Object.keys(t))if(t[n])e=e?e+" "+n:n;else if(e.length)for(var f=n.length,o=0;(o=e.indexOf(n,o))>=0;){var a=o+f;(o===0||i.includes(e[o-1]))&&(a===e.length||i.includes(e[a]))?e=(o===0?"":e.substring(0,o))+e.substring(a+1):o=a}}return e===""?null:e}function y(r,s){return r==null?null:String(r)}const p=Symbol("is custom element"),S=Symbol("is html"),L=h?"link":"LINK";function E(r){if(l){var s=!1,t=()=>{if(!s){if(s=!0,r.hasAttribute("value")){var e=r.value;c(r,"value",null),r.value=e}if(r.hasAttribute("checked")){var n=r.checked;c(r,"checked",null),r.checked=n}}};r.__on_r=t,u(t),d()}}function c(r,s,t,e){var n=M(r);l&&(n[s]=r.getAttribute(s),s==="src"||s==="srcset"||s==="href"&&r.nodeName===L)||n[s]!==(n[s]=t)&&(s==="loading"&&(r[g]=t),t==null?r.removeAttribute(s):typeof t!="string"&&N(r).includes(s)?r[s]=t:r.setAttribute(s,t))}function M(r){return r.__attributes??={[p]:r.nodeName.includes("-"),[S]:r.namespaceURI===v}}var _=new Map;function N(r){var s=r.getAttribute("is")||r.nodeName,t=_.get(s);if(t)return t;_.set(s,t=[]);for(var e,n=r,f=Element.prototype;f!==n;){e=m(n);for(var o in e)e[o].set&&t.push(o);n=A(n)}return t}export{y as a,E as r,c as s,I as t};
|
||||
@ -1 +0,0 @@
|
||||
import{a8 as z,Y as G,F as A,a2 as M,ac as J,Z as ae,g as P,a0 as re,ao as fe,a1 as Q,a3 as O,a4 as H,ae as K,ap as ie,aq as U,B as le,ar as C,a9 as L,as as se,ab as ue,y as oe,H as te,at as V,au as ve,av as de,O as ce,aw as X,ax as pe,D as ge,a5 as W,a7 as $,ay as B,az as _e,aA as Ee,aa as he,a6 as me,af as Y,aB as j,Q as Te,aC as Ce,aD as we,aE as Ae}from"./Cjw4vZKn.js";function Ne(e,r){return r}function Se(e,r,s){for(var u=[],t=r.length,a,i=r.length,p=0;p<t;p++){let E=r[p];$(E,()=>{if(a){if(a.pending.delete(E),a.done.add(E),a.pending.size===0){var v=e.outrogroups;q(e,V(a.done)),v.delete(a),v.size===0&&(e.outrogroups=null)}}else i-=1},!1)}if(i===0){var l=u.length===0&&s!==null;if(l){var c=s,f=c.parentNode;Ee(f),f.append(c),e.items.clear()}q(e,r,!l)}else a={pending:new Set(r),done:new Set},(e.outrogroups??=new Set).add(a)}function q(e,r,s=!0){var u;if(e.pending.size>0){u=new Set;for(const i of e.pending.values())for(const p of i)u.add(e.items.get(p).e)}for(var t=0;t<r.length;t++){var a=r[t];if(u?.has(a)){a.f|=C;const i=document.createDocumentFragment();he(a,i)}else me(r[t],s)}}var Z;function Re(e,r,s,u,t,a=null){var i=e,p=new Map,l=(r&j)!==0;if(l){var c=e;i=A?M(J(c)):c.appendChild(z())}A&&ae();var f=null,E=oe(()=>{var d=s();return te(d)?d:d==null?[]:V(d)}),v,h=new Map,m=!0;function N(d){(S.effect.f&ge)===0&&(S.pending.delete(d),S.fallback=f,De(S,v,i,r,u),f!==null&&(v.length===0?(f.f&C)===0?W(f):(f.f^=C,k(f,null,i)):$(f,()=>{f=null})))}function n(d){S.pending.delete(d)}var o=G(()=>{v=P(E);var d=v.length;let _=!1;if(A){var b=re(i)===fe;b!==(d===0)&&(i=Q(),M(i),O(!1),_=!0)}for(var D=new Set,g=le,R=ue(),F=0;F<d;F+=1){A&&H.nodeType===K&&H.data===ie&&(i=H,_=!0,O(!1));var T=v[F],y=u(T,F),w=m?null:p.get(y);w?(w.v&&U(w.v,T),w.i&&U(w.i,F),R&&g.unskip_effect(w.e)):(w=Fe(p,m?i:Z??=z(),T,y,F,t,r,s),m||(w.e.f|=C),p.set(y,w)),D.add(y)}if(d===0&&a&&!f&&(m?f=L(()=>a(i)):(f=L(()=>a(Z??=z())),f.f|=C)),d>D.size&&se(),A&&d>0&&M(Q()),!m)if(h.set(g,D),R){for(const[ee,ne]of p)D.has(ee)||g.skip_effect(ne.e);g.oncommit(N),g.ondiscard(n)}else N(g);_&&O(!0),P(E)}),S={effect:o,items:p,pending:h,outrogroups:null,fallback:f};m=!1,A&&(i=H)}function x(e){for(;e!==null&&(e.f&_e)===0;)e=e.next;return e}function De(e,r,s,u,t){var a=(u&Ce)!==0,i=r.length,p=e.items,l=x(e.effect.first),c,f=null,E,v=[],h=[],m,N,n,o;if(a)for(o=0;o<i;o+=1)m=r[o],N=t(m,o),n=p.get(N).e,(n.f&C)===0&&(n.nodes?.a?.measure(),(E??=new Set).add(n));for(o=0;o<i;o+=1){if(m=r[o],N=t(m,o),n=p.get(N).e,e.outrogroups!==null)for(const T of e.outrogroups)T.pending.delete(n),T.done.delete(n);if((n.f&B)!==0&&(W(n),a&&(n.nodes?.a?.unfix(),(E??=new Set).delete(n))),(n.f&C)!==0)if(n.f^=C,n===l)k(n,null,s);else{var S=f?f.next:l;n===e.effect.last&&(e.effect.last=n.prev),n.prev&&(n.prev.next=n.next),n.next&&(n.next.prev=n.prev),I(e,f,n),I(e,n,S),k(n,S,s),f=n,v=[],h=[],l=x(f.next);continue}if(n!==l){if(c!==void 0&&c.has(n)){if(v.length<h.length){var d=h[0],_;f=d.prev;var b=v[0],D=v[v.length-1];for(_=0;_<v.length;_+=1)k(v[_],d,s);for(_=0;_<h.length;_+=1)c.delete(h[_]);I(e,b.prev,D.next),I(e,f,b),I(e,D,d),l=d,f=D,o-=1,v=[],h=[]}else c.delete(n),k(n,l,s),I(e,n.prev,n.next),I(e,n,f===null?e.effect.first:f.next),I(e,f,n),f=n;continue}for(v=[],h=[];l!==null&&l!==n;)(c??=new Set).add(l),h.push(l),l=x(l.next);if(l===null)continue}(n.f&C)===0&&v.push(n),f=n,l=x(n.next)}if(e.outrogroups!==null){for(const T of e.outrogroups)T.pending.size===0&&(q(e,V(T.done)),e.outrogroups?.delete(T));e.outrogroups.size===0&&(e.outrogroups=null)}if(l!==null||c!==void 0){var g=[];if(c!==void 0)for(n of c)(n.f&B)===0&&g.push(n);for(;l!==null;)(l.f&B)===0&&l!==e.fallback&&g.push(l),l=x(l.next);var R=g.length;if(R>0){var F=(u&j)!==0&&i===0?s:null;if(a){for(o=0;o<R;o+=1)g[o].nodes?.a?.measure();for(o=0;o<R;o+=1)g[o].nodes?.a?.fix()}Se(e,g,F)}}a&&Te(()=>{if(E!==void 0)for(n of E)n.nodes?.a?.apply()})}function Fe(e,r,s,u,t,a,i,p){var l=(i&ve)!==0?(i&de)===0?ce(s,!1,!1):X(s):null,c=(i&pe)!==0?X(t):null;return{v:l,i:c,e:L(()=>(a(r,l??s,c??t,p),()=>{e.delete(u)}))}}function k(e,r,s){if(e.nodes)for(var u=e.nodes.start,t=e.nodes.end,a=r&&(r.f&C)===0?r.nodes.start:s;u!==null;){var i=Y(u);if(a.before(u),u===t)return;u=i}}function I(e,r,s){r===null?e.effect.first=s:r.next=s,s===null?e.effect.last=r:s.prev=r}function xe(e,r){let s=null,u=A;var t;if(A){s=H;for(var a=J(document.head);a!==null&&(a.nodeType!==K||a.data!==e);)a=Y(a);if(a===null)O(!1);else{var i=Y(a);a.remove(),M(i)}}A||(t=document.head.appendChild(z()));try{G(()=>r(t),we|Ae)}finally{u&&(O(!0),M(s))}}export{Re as e,xe as h,Ne as i};
|
||||
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
import{i as A,j as L,P as D,g as P,p as T,a as b,k as B,l as Y,D as x,m as M,o as N,q as U,v as h,w as q,x as w,y as z,z as $,S as j,L as y}from"./Cjw4vZKn.js";import{c as C}from"./DjXdyWBG.js";function F(r,a,t,s){var f=!U||(t&h)!==0,v=(t&M)!==0,E=(t&$)!==0,n=s,S=!0,g=()=>(S&&(S=!1,n=E?N(s):s),n);let u;if(v){var O=j in r||y in r;u=A(r,a)?.set??(O&&a in r?e=>r[a]=e:void 0)}var _,I=!1;v?[_,I]=C(()=>r[a]):_=r[a],_===void 0&&s!==void 0&&(_=g(),u&&(f&&L(),u(_)));var i;if(f?i=()=>{var e=r[a];return e===void 0?g():(S=!0,e)}:i=()=>{var e=r[a];return e!==void 0&&(n=void 0),e===void 0?n:e},f&&(t&D)===0)return i;if(u){var R=r.$$legacy;return(function(e,l){return arguments.length>0?((!f||!l||R||I)&&u(l?i():e),e):i()})}var c=!1,d=((t&q)!==0?w:z)(()=>(c=!1,i()));v&&P(d);var m=Y;return(function(e,l){if(arguments.length>0){const o=l?P(d):f&&v?T(e):e;return b(d,o),c=!0,n!==void 0&&(n=o),e}return B&&c||(m.f&x)!==0?d.v:P(d)})}export{F as p};
|
||||
import{i as A,j as L,P as D,g as P,a as T,d as b,k as B,l as Y,D as x,m as M,o as N,q as U,v as h,w as q,x as w,y as z,z as $,S as j,L as y}from"./reyx9_7L.js";import{c as C}from"./CvtDgobB.js";function F(r,a,t,s){var f=!U||(t&h)!==0,v=(t&M)!==0,E=(t&$)!==0,n=s,S=!0,g=()=>(S&&(S=!1,n=E?N(s):s),n);let u;if(v){var O=j in r||y in r;u=A(r,a)?.set??(O&&a in r?e=>r[a]=e:void 0)}var _,I=!1;v?[_,I]=C(()=>r[a]):_=r[a],_===void 0&&s!==void 0&&(_=g(),u&&(f&&L(),u(_)));var i;if(f?i=()=>{var e=r[a];return e===void 0?g():(S=!0,e)}:i=()=>{var e=r[a];return e!==void 0&&(n=void 0),e===void 0?n:e},f&&(t&D)===0)return i;if(u){var R=r.$$legacy;return(function(e,l){return arguments.length>0?((!f||!l||R||I)&&u(l?i():e),e):i()})}var c=!1,d=((t&q)!==0?w:z)(()=>(c=!1,i()));v&&P(d);var m=Y;return(function(e,l){if(arguments.length>0){const o=l?P(d):f&&v?T(e):e;return b(d,o),c=!0,n!==void 0&&(n=o),e}return B&&c||(m.f&x)!==0?d.v:P(d)})}export{F as p};
|
||||
@ -1 +0,0 @@
|
||||
import{s as f,g as c}from"./DiIboHMF.js";import{G as l,M as b,N as a,O as _,g as p,a as d}from"./Cjw4vZKn.js";let u=!1,t=Symbol();function v(e,r,n){const s=n[r]??={store:null,source:_(void 0),unsubscribe:a};if(s.store!==e&&!(t in n))if(s.unsubscribe(),s.store=e??null,e==null)s.source.v=void 0,s.unsubscribe=a;else{var i=!0;s.unsubscribe=f(e,o=>{i?s.source.v=o:d(s.source,o)}),i=!1}return e&&t in n?c(e):p(s.source)}function y(){const e={};function r(){l(()=>{for(var n in e)e[n].unsubscribe();b(e,t,{enumerable:!1,value:!0})})}return[e,r]}function N(e){var r=u;try{return u=!1,[e(),u]}finally{u=r}}export{v as a,N as c,y as s};
|
||||
@ -1 +1 @@
|
||||
import{t as y}from"./B08B5jt4.js";import{F as r}from"./Cjw4vZKn.js";function n(t,e,f,i){var l=t.__style;if(r||l!==e){var s=y(e);(!r||s!==t.getAttribute("style"))&&(s==null?t.removeAttribute("style"):t.style.cssText=s),t.__style=e}return i}export{n as s};
|
||||
import{t as y}from"./D5EBvEcH.js";import{N as r}from"./reyx9_7L.js";function n(t,e,f,i){var l=t.__style;if(r||l!==e){var s=y(e);(!r||s!==t.getAttribute("style"))&&(s==null?t.removeAttribute("style"):t.style.cssText=s),t.__style=e}return i}export{n as s};
|
||||
1
static/_app/immutable/chunks/Do7Yo2YN.js
Normal file
1
static/_app/immutable/chunks/Do7Yo2YN.js
Normal file
@ -0,0 +1 @@
|
||||
import{ab as v,ac as c,ad as b,ae as u,af as _,B as g,N as o,a2 as m,ag as k,ah as y,ai as w,a0 as A,aj as F,ak as M,al as x,Z as B,am as p}from"./reyx9_7L.js";class E{anchor;#t=new Map;#s=new Map;#e=new Map;#a=new Set;#i=!0;constructor(t,s=!0){this.anchor=t,this.#i=s}#r=t=>{if(this.#t.has(t)){var s=this.#t.get(t),e=this.#s.get(s);if(e)v(e),this.#a.delete(s);else{var r=this.#e.get(s);r&&(this.#s.set(s,r.effect),this.#e.delete(s),r.fragment.lastChild.remove(),this.anchor.before(r.fragment),e=r.effect)}for(const[i,f]of this.#t){if(this.#t.delete(i),i===t)break;const a=this.#e.get(f);a&&(c(a.effect),this.#e.delete(f))}for(const[i,f]of this.#s){if(i===s||this.#a.has(i))continue;const a=()=>{if(Array.from(this.#t.values()).includes(i)){var h=document.createDocumentFragment();k(f,h),h.append(u()),this.#e.set(i,{effect:f,fragment:h})}else c(f);this.#a.delete(i),this.#s.delete(i)};this.#i||!e?(this.#a.add(i),b(f,a,!1)):a()}}};#f=t=>{this.#t.delete(t);const s=Array.from(this.#t.values());for(const[e,r]of this.#e)s.includes(e)||(c(r.effect),this.#e.delete(e))};ensure(t,s){var e=g,r=y();if(s&&!this.#s.has(t)&&!this.#e.has(t))if(r){var i=document.createDocumentFragment(),f=u();i.append(f),this.#e.set(t,{effect:_(()=>s(f)),fragment:i})}else this.#s.set(t,_(()=>s(this.anchor)));if(this.#t.set(e,t),r){for(const[a,n]of this.#s)a===t?e.unskip_effect(n):e.skip_effect(n);for(const[a,n]of this.#e)a===t?e.unskip_effect(n.effect):e.skip_effect(n.effect);e.oncommit(this.#r),e.ondiscard(this.#f)}else o&&(this.anchor=m),this.#r(e)}}function T(d,t,s=!1){var e;o&&(e=m,A());var r=new E(d),i=s?F:0;function f(a,n){if(o){var h=M(e);if(a!==parseInt(h.substring(1))){var l=x();B(l),r.anchor=l,p(!1),r.ensure(a,n),p(!0);return}}r.ensure(a,n)}w(()=>{var a=!1;t((n,h=0)=>{a=!0,f(h,n)}),a||f(-1,null)},i)}export{E as B,T as i};
|
||||
1
static/_app/immutable/chunks/DrzKg1h1.js
Normal file
1
static/_app/immutable/chunks/DrzKg1h1.js
Normal file
@ -0,0 +1 @@
|
||||
import{an as t,ao as o,q as c,o as l}from"./reyx9_7L.js";function a(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function r(e){o===null&&a(),c&&o.l!==null?u(o).m.push(e):t(()=>{const n=l(e);if(typeof n=="function")return n})}function u(e){var n=e.l;return n.u??={a:[],b:[],m:[]}}export{r as o};
|
||||
@ -1 +0,0 @@
|
||||
import{Z as l,_ as o,a0 as u,a1 as n,a2 as d,B as m,F as p,Y as _,a3 as v,a4 as k}from"./DAfY0XTB.js";class w{anchor;#t=new Map;#s=new Map;#e=new Map;#i=new Set;#a=!0;constructor(t,s=!0){this.anchor=t,this.#a=s}#f=t=>{if(this.#t.has(t)){var s=this.#t.get(t),e=this.#s.get(s);if(e)l(e),this.#i.delete(s);else{var a=this.#e.get(s);a&&(this.#s.set(s,a.effect),this.#e.delete(s),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),e=a.effect)}for(const[i,f]of this.#t){if(this.#t.delete(i),i===t)break;const r=this.#e.get(f);r&&(o(r.effect),this.#e.delete(f))}for(const[i,f]of this.#s){if(i===s||this.#i.has(i))continue;const r=()=>{if(Array.from(this.#t.values()).includes(i)){var c=document.createDocumentFragment();v(f,c),c.append(n()),this.#e.set(i,{effect:f,fragment:c})}else o(f);this.#i.delete(i),this.#s.delete(i)};this.#a||!e?(this.#i.add(i),u(f,r,!1)):r()}}};#r=t=>{this.#t.delete(t);const s=Array.from(this.#t.values());for(const[e,a]of this.#e)s.includes(e)||(o(a.effect),this.#e.delete(e))};ensure(t,s){var e=m,a=k();if(s&&!this.#s.has(t)&&!this.#e.has(t))if(a){var i=document.createDocumentFragment(),f=n();i.append(f),this.#e.set(t,{effect:d(()=>s(f)),fragment:i})}else this.#s.set(t,d(()=>s(this.anchor)));if(this.#t.set(e,t),a){for(const[r,h]of this.#s)r===t?e.unskip_effect(h):e.skip_effect(h);for(const[r,h]of this.#e)r===t?e.unskip_effect(h.effect):e.skip_effect(h.effect);e.oncommit(this.#f),e.ondiscard(this.#r)}else p&&(this.anchor=_),this.#f(e)}}export{w as B};
|
||||
@ -1 +0,0 @@
|
||||
import{c as y,a as p,f as _}from"./DCPIP6Ym.js";import{d as j,f as S,h as B,c as i,r as n,b as c,t as v,g as r,u as I}from"./DAfY0XTB.js";import{s as m}from"./D2u1A_4g.js";import{i as q}from"./Br6sCvve.js";import{s as w}from"./DVOkFnep.js";import{s as d}from"./D6E-zrqv.js";import{p as z}from"./B-uV6-Xr.js";import{s as A}from"./utcFFRIM.js";var C=_('<a><span class="mr-1"> </span> </a>'),D=_('<span><span class="mr-1"> </span> </span>');function N(x,o){j(o,!0);let h=z(o,"linked",3,!1);const s=I(()=>A(o.status));var u=y(),b=S(u);{var g=e=>{var t=C(),a=i(t),f=i(a,!0);n(a);var l=c(a);n(t),v(()=>{w(t,"href",`/ketten?status=${o.status??""}`),d(t,1,`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r(s).color??""} hover:opacity-80 transition-opacity`),m(f,r(s).emoji),m(l,` ${r(s).label??""}`)}),p(e,t)},k=e=>{var t=D(),a=i(t),f=i(a,!0);n(a);var l=c(a);n(t),v(()=>{d(t,1,`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${r(s).color??""}`),m(f,r(s).emoji),m(l,` ${r(s).label??""}`)}),p(e,t)};q(b,e=>{h()&&o.status?e(g):e(k,-1)})}p(x,u),B()}export{N as S};
|
||||
@ -1 +0,0 @@
|
||||
import{s as e}from"./3I_XkZiy.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};
|
||||
@ -1 +1 @@
|
||||
import{N as o,o as a,al as d}from"./Cjw4vZKn.js";function p(s,u,e){if(s==null)return u(void 0),o;const t=a(()=>s.subscribe(u,e));return t.unsubscribe?()=>t.unsubscribe():t}const i=[];function _(s,u=o){let e=null;const t=new Set;function c(r){if(d(s,r)&&(s=r,e)){const b=!i.length;for(const n of t)n[1](),i.push(n,s);if(b){for(let n=0;n<i.length;n+=2)i[n][0](i[n+1]);i.length=0}}}function f(r){c(r(s))}function l(r,b=o){const n=[r,b];return t.add(n),t.size===1&&(e=u(c,f)||o),r(s),()=>{t.delete(n),t.size===0&&e&&(e(),e=null)}}return{set:c,update:f,subscribe:l}}function h(s){let u;return p(s,e=>u=e)(),u}export{h as g,p as s,_ as w};
|
||||
import{K as o,o as a,aa as d}from"./reyx9_7L.js";function p(s,u,e){if(s==null)return u(void 0),o;const t=a(()=>s.subscribe(u,e));return t.unsubscribe?()=>t.unsubscribe():t}const i=[];function _(s,u=o){let e=null;const t=new Set;function c(r){if(d(s,r)&&(s=r,e)){const b=!i.length;for(const n of t)n[1](),i.push(n,s);if(b){for(let n=0;n<i.length;n+=2)i[n][0](i[n+1]);i.length=0}}}function f(r){c(r(s))}function l(r,b=o){const n=[r,b];return t.add(n),t.size===1&&(e=u(c,f)||o),r(s),()=>{t.delete(n),t.size===0&&e&&(e(),e=null)}}return{set:c,update:f,subscribe:l}}function h(s){let u;return p(s,e=>u=e)(),u}export{h as g,p as s,_ as w};
|
||||
@ -1 +0,0 @@
|
||||
import{F as i,Q as n,R as d,T as v,U as u,V as h,W as l,X as g}from"./Cjw4vZKn.js";const A=Symbol("is custom element"),T=Symbol("is html"),m=h?"link":"LINK";function N(r){if(i){var s=!1,e=()=>{if(!s){if(s=!0,r.hasAttribute("value")){var t=r.value;_(r,"value",null),r.value=t}if(r.hasAttribute("checked")){var o=r.checked;_(r,"checked",null),r.checked=o}}};r.__on_r=e,n(e),d()}}function _(r,s,e,t){var o=p(r);i&&(o[s]=r.getAttribute(s),s==="src"||s==="srcset"||s==="href"&&r.nodeName===m)||o[s]!==(o[s]=e)&&(s==="loading"&&(r[v]=e),e==null?r.removeAttribute(s):typeof e!="string"&&L(r).includes(s)?r[s]=e:r.setAttribute(s,e))}function p(r){return r.__attributes??={[A]:r.nodeName.includes("-"),[T]:r.namespaceURI===u}}var c=new Map;function L(r){var s=r.getAttribute("is")||r.nodeName,e=c.get(s);if(e)return e;c.set(s,e=[]);for(var t,o=r,f=Element.prototype;f!==o;){t=g(o);for(var a in t)t[a].set&&e.push(a);o=l(o)}return e}export{N as r,_ as s};
|
||||
@ -1 +0,0 @@
|
||||
import{Y as c,F as o,Z as l,_ as b,a0 as p,a1 as v,a2 as g,a3 as _,a4 as m}from"./Cjw4vZKn.js";import{B as y}from"./6IKeDOr0.js";function T(f,d,h=!1){var n;o&&(n=m,l());var s=new y(f),u=h?b:0;function t(a,r){if(o){var e=p(n);if(a!==parseInt(e.substring(1))){var i=v();g(i),s.anchor=i,_(!1),s.ensure(a,r),_(!0);return}}s.ensure(a,r)}c(()=>{var a=!1;d((r,e=0)=>{a=!0,t(e,r)}),a||t(-1,null)},u)}export{T as i};
|
||||
1
static/_app/immutable/chunks/nhOotKLT.js
Normal file
1
static/_app/immutable/chunks/nhOotKLT.js
Normal file
@ -0,0 +1 @@
|
||||
const r=typeof window<"u"&&window.location.port==="5173"?`http://${window.location.hostname}:8099/api`:"/api";async function n(t){const e=await fetch(`${r}${t}`);if(!e.ok)throw new Error(`API error: ${e.status}`);return e.json()}const s=t=>{const e=new URLSearchParams(t).toString();return n(`/vorlagen?${e}`)},c=t=>n(`/vorlagen/${t}`),i=t=>{const e=new URLSearchParams(t).toString();return n(`/ketten?${e}`)},h=t=>n(`/ketten/${t}`);async function a(t,e){const o=await fetch(`${r}${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!o.ok)throw new Error(`API error: ${o.status}`);return o.json()}const f=(t,e)=>a(`/bewertung/vorlagen/${t}`,{anmerkung:e}),g=(t,e)=>a(`/bewertung/ketten/${t}`,{anmerkung:e}),$=t=>n(`/bewertung/status/${t}`),u=t=>n(`/vorlagen/suggest?q=${encodeURIComponent(t)}`),w=()=>n("/fraktionen"),d=(t,e)=>{const o=e?`?jahr=${e}`:"";return n(`/fraktionen/${t}/dashboard${o}`)};export{i as a,c as b,h as c,$ as d,g as e,w as f,u as g,s as h,d as i,f as r};
|
||||
1
static/_app/immutable/chunks/reyx9_7L.js
Normal file
1
static/_app/immutable/chunks/reyx9_7L.js
Normal file
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
import{s as f,g as c}from"./DIGUPa-Q.js";import{G as l,M as b,N as a,O as _,g as p,a as d}from"./DAfY0XTB.js";let u=!1,t=Symbol();function v(e,r,n){const s=n[r]??={store:null,source:_(void 0),unsubscribe:a};if(s.store!==e&&!(t in n))if(s.unsubscribe(),s.store=e??null,e==null)s.source.v=void 0,s.unsubscribe=a;else{var i=!0;s.unsubscribe=f(e,o=>{i?s.source.v=o:d(s.source,o)}),i=!1}return e&&t in n?c(e):p(s.source)}function y(){const e={};function r(){l(()=>{for(var n in e)e[n].unsubscribe();b(e,t,{enumerable:!1,value:!0})})}return[e,r]}function N(e){var r=u;try{return u=!1,[e(),u]}finally{u=r}}export{v as a,N as c,y as s};
|
||||
@ -1 +0,0 @@
|
||||
import{am as o,an as t,q as c,o as l}from"./Cjw4vZKn.js";function a(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function r(e){t===null&&a(),c&&t.l!==null?u(t).m.push(e):o(()=>{const n=l(e);if(typeof n=="function")return n})}function u(e){var n=e.l;return n.u??={a:[],b:[],m:[]}}export{r as o};
|
||||
@ -1 +1 @@
|
||||
import{s as e}from"./CTIvq_GE.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};
|
||||
import{s as e}from"./BHBF0lbh.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};
|
||||
@ -1 +0,0 @@
|
||||
import{A as s,B as v,e as o,G as c,H as b,I as m,J as h}from"./DAfY0XTB.js";function d(e,r,f=!1){if(e.multiple){if(r==null)return;if(!b(r))return m();for(var a of e.options)a.selected=r.includes(i(a));return}for(a of e.options){var t=i(a);if(h(t,r)){a.selected=!0;return}}(!f||r!==void 0)&&(e.selectedIndex=-1)}function y(e){var r=new MutationObserver(()=>{d(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),c(()=>{r.disconnect()})}function S(e,r,f=r){var a=new WeakSet,t=!0;s(e,"change",u=>{var l=u?"[selected]":":checked",n;if(e.multiple)n=[].map.call(e.querySelectorAll(l),i);else{var _=e.querySelector(l)??e.querySelector("option:not([disabled])");n=_&&i(_)}f(n),e.__value=n,v!==null&&a.add(v)}),o(()=>{var u=r();if(e===document.activeElement){var l=v;if(a.has(l))return}if(d(e,u,t),t&&u===void 0){var n=e.querySelector(":checked");n!==null&&(u=i(n),f(u))}e.__value=u,t=!1}),y(e)}function i(e){return"__value"in e?e.__value:e.value}export{S as b};
|
||||
File diff suppressed because one or more lines are too long
2
static/_app/immutable/entry/app.Bf2mSiZt.js
Normal file
2
static/_app/immutable/entry/app.Bf2mSiZt.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
import{l as o,a as r}from"../chunks/CTIvq_GE.js";export{o as load_css,r as start};
|
||||
1
static/_app/immutable/entry/start.CJw4zQCo.js
Normal file
1
static/_app/immutable/entry/start.CJw4zQCo.js
Normal file
@ -0,0 +1 @@
|
||||
import{l as o,a as r}from"../chunks/BHBF0lbh.js";export{o as load_css,r as start};
|
||||
@ -1 +0,0 @@
|
||||
import{l as o,a as r}from"../chunks/3I_XkZiy.js";export{o as load_css,r as start};
|
||||
@ -1 +0,0 @@
|
||||
import{a as d,f as x}from"../chunks/Bkzsmr9I.js";import{Y as i,_ as l,b as p,c as n,r as o}from"../chunks/Cjw4vZKn.js";import{B as c}from"../chunks/6IKeDOr0.js";/* empty css */function f(r,s,...e){var t=new c(r);i(()=>{const a=s()??null;t.ensure(a,a&&(m=>a(m,...e)))},l)}const g=!1,u=!1,k=Object.freeze(Object.defineProperty({__proto__:null,prerender:g,ssr:u},Symbol.toStringTag,{value:"Module"}));var v=x('<div class="min-h-screen bg-gray-50"><nav class="bg-white border-b border-gray-200 shadow-sm"><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><div class="flex justify-between h-16"><div class="flex items-center space-x-8"><a href="/" class="text-xl font-bold text-gray-900">Antragstracker <span class="text-green-600">Hagen</span></a> <div class="hidden sm:flex space-x-4"><a href="/" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Dashboard</a> <a href="/ketten" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Ketten</a> <a href="/vorlagen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Vorlagen</a> <a href="/abstimmungen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Abstimmungen</a> <a href="/karte" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Karte</a> <a href="/fraktionen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Fraktionen</a></div></div></div></div></nav> <main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"><!></main></div>');function w(r,s){var e=v(),t=p(n(e),2),a=n(t);f(a,()=>s.children),o(t),o(e),d(r,e)}export{w as component,k as universal};
|
||||
@ -1 +0,0 @@
|
||||
import{a as d,f as x}from"../chunks/DCPIP6Ym.js";import{Q as i,T as l,b as p,c as n,r as o}from"../chunks/DAfY0XTB.js";import{B as c}from"../chunks/Duumi1XQ.js";/* empty css */function f(r,s,...e){var t=new c(r);i(()=>{const a=s()??null;t.ensure(a,a&&(m=>a(m,...e)))},l)}const g=!1,u=!1,k=Object.freeze(Object.defineProperty({__proto__:null,prerender:g,ssr:u},Symbol.toStringTag,{value:"Module"}));var v=x('<div class="min-h-screen bg-gray-50"><nav class="bg-white border-b border-gray-200 shadow-sm"><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><div class="flex justify-between h-16"><div class="flex items-center space-x-8"><a href="/" class="text-xl font-bold text-gray-900">Antragstracker <span class="text-green-600">Hagen</span></a> <div class="hidden sm:flex space-x-4"><a href="/" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Dashboard</a> <a href="/ketten" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Ketten</a> <a href="/vorlagen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Vorlagen</a> <a href="/abstimmungen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Abstimmungen</a> <a href="/karte" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Karte</a> <a href="/fraktionen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Fraktionen</a></div></div></div></div></nav> <main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"><!></main></div>');function w(r,s){var e=v(),t=p(n(e),2),a=n(t);f(a,()=>s.children),o(t),o(e),d(r,e)}export{w as component,k as universal};
|
||||
1
static/_app/immutable/nodes/0.DUsCU6Z7.js
Normal file
1
static/_app/immutable/nodes/0.DUsCU6Z7.js
Normal file
@ -0,0 +1 @@
|
||||
import{d as D,b as d,a as c,f as A,g as B}from"../chunks/B89f14j0.js";import{ai as H,aj as N,t as P,h as t,b as s,g,r,d as i,s as R}from"../chunks/reyx9_7L.js";import{B as V,i as M}from"../chunks/Do7Yo2YN.js";import{s as z}from"../chunks/B-WTs0fq.js";/* empty css */function L(x,p,...e){var l=new V(x);H(()=>{const o=p()??null;l.ensure(o,o&&(m=>o(m,...e)))},N)}const q=!1,G=!1,ee=Object.freeze(Object.defineProperty({__proto__:null,prerender:q,ssr:G},Symbol.toStringTag,{value:"Module"}));var I=B('<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg>'),J=B('<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path></svg>'),Q=A('<div class="sm:hidden border-t border-gray-200 bg-white"><div class="px-2 pt-2 pb-3 space-y-1"><a href="/" class="block text-gray-600 hover:text-gray-900 hover:bg-gray-50 px-3 py-3 rounded-md text-base font-medium">Dashboard</a> <a href="/ketten" class="block text-gray-600 hover:text-gray-900 hover:bg-gray-50 px-3 py-3 rounded-md text-base font-medium">Ketten</a> <a href="/vorlagen" class="block text-gray-600 hover:text-gray-900 hover:bg-gray-50 px-3 py-3 rounded-md text-base font-medium">Vorlagen</a> <a href="/abstimmungen" class="block text-gray-600 hover:text-gray-900 hover:bg-gray-50 px-3 py-3 rounded-md text-base font-medium">Abstimmungen</a> <a href="/karte" class="block text-gray-600 hover:text-gray-900 hover:bg-gray-50 px-3 py-3 rounded-md text-base font-medium">Karte</a> <a href="/fraktionen" class="block text-gray-600 hover:text-gray-900 hover:bg-gray-50 px-3 py-3 rounded-md text-base font-medium">Fraktionen</a></div></div>'),U=A('<div class="min-h-screen bg-gray-50"><nav class="bg-white border-b border-gray-200 shadow-sm"><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"><div class="flex justify-between h-16"><div class="flex items-center"><a href="/" class="text-xl font-bold text-gray-900 shrink-0">Antragstracker <span class="text-green-600">Hagen</span></a> <div class="hidden sm:flex sm:ml-8 space-x-4"><a href="/" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Dashboard</a> <a href="/ketten" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Ketten</a> <a href="/vorlagen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Vorlagen</a> <a href="/abstimmungen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Abstimmungen</a> <a href="/karte" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Karte</a> <a href="/fraktionen" class="text-gray-600 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Fraktionen</a></div></div> <div class="flex items-center sm:hidden"><button class="inline-flex items-center justify-center p-3 rounded-md text-gray-500 hover:text-gray-900 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-green-500" aria-label="Hauptmenü"><!></button></div></div></div> <!></nav> <main class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6 sm:py-8"><!></main></div>');function ae(x,p){let e=R(!1);var l=U(),o=t(l),m=t(o),f=t(m),h=s(t(f),2),v=t(h),F=t(v);{var K=a=>{var n=I();c(a,n)},T=a=>{var n=J();c(a,n)};M(F,a=>{g(e)?a(K):a(T,-1)})}r(v),r(h),r(f),r(m);var C=s(m,2);{var E=a=>{var n=Q(),y=t(n),b=t(y),k=s(b,2),_=s(k,2),w=s(_,2),j=s(w,2),S=s(j,2);r(y),r(n),d("click",b,()=>i(e,!1)),d("click",k,()=>i(e,!1)),d("click",_,()=>i(e,!1)),d("click",w,()=>i(e,!1)),d("click",j,()=>i(e,!1)),d("click",S,()=>i(e,!1)),c(a,n)};M(C,a=>{g(e)&&a(E)})}r(o);var u=s(o,2),O=t(u);L(O,()=>p.children),r(u),r(l),P(()=>z(v,"aria-expanded",g(e))),d("click",v,()=>i(e,!g(e))),c(x,l)}D(["click"]);export{ae as component,ee as universal};
|
||||
@ -1 +0,0 @@
|
||||
import{a as b,f as x}from"../chunks/DCPIP6Ym.js";import{an as k,aL as y,am as i,o as $,aM as l,aN as E,g as v,aO as L,x as M,aP as N,d as O,f as P,t as j,h as q,c as u,r as m,b as w}from"../chunks/DAfY0XTB.js";import{s as g}from"../chunks/D2u1A_4g.js";import{s as z,p as _}from"../chunks/CTIvq_GE.js";function A(r=!1){const t=k,e=t.l.u;if(!e)return;let a=()=>L(t.s);if(r){let o=0,s={};const f=M(()=>{let p=!1;const c=t.s;for(const n in c)c[n]!==s[n]&&(s[n]=c[n],p=!0);return p&&o++,o});a=()=>v(f)}e.b.length&&y(()=>{d(t,a),l(e.b)}),i(()=>{const o=$(()=>e.m.map(E));return()=>{for(const s of o)typeof s=="function"&&s()}}),e.a.length&&i(()=>{d(t,a),l(e.a)})}function d(r,t){if(r.l.s)for(const e of r.l.s)v(e);t()}N();const B={get error(){return _.error},get status(){return _.status}};z.updated.check;const h=B;var C=x("<h1> </h1> <p> </p>",1);function I(r,t){O(t,!1),A();var e=C(),a=P(e),o=u(a,!0);m(a);var s=w(a,2),f=u(s,!0);m(s),j(()=>{g(o,h.status),g(f,h.error?.message)}),b(r,e),q()}export{I as component};
|
||||
@ -1 +0,0 @@
|
||||
import{a as b,f as x}from"../chunks/Bkzsmr9I.js";import{an as k,aL as y,am as i,o as $,aM as l,aN as E,g as v,aO as L,x as M,aP as N,d as O,f as P,t as j,h as q,c as u,r as m,b as w}from"../chunks/Cjw4vZKn.js";import{s as g}from"../chunks/DfJQ0EIT.js";import{s as z,p as _}from"../chunks/3I_XkZiy.js";function A(r=!1){const t=k,e=t.l.u;if(!e)return;let a=()=>L(t.s);if(r){let o=0,s={};const f=M(()=>{let p=!1;const c=t.s;for(const n in c)c[n]!==s[n]&&(s[n]=c[n],p=!0);return p&&o++,o});a=()=>v(f)}e.b.length&&y(()=>{d(t,a),l(e.b)}),i(()=>{const o=$(()=>e.m.map(E));return()=>{for(const s of o)typeof s=="function"&&s()}}),e.a.length&&i(()=>{d(t,a),l(e.a)})}function d(r,t){if(r.l.s)for(const e of r.l.s)v(e);t()}N();const B={get error(){return _.error},get status(){return _.status}};z.updated.check;const h=B;var C=x("<h1> </h1> <p> </p>",1);function I(r,t){O(t,!1),A();var e=C(),a=P(e),o=u(a,!0);m(a);var s=w(a,2),f=u(s,!0);m(s),j(()=>{g(o,h.status),g(f,h.error?.message)}),b(r,e),q()}export{I as component};
|
||||
1
static/_app/immutable/nodes/1.pFFIwPua.js
Normal file
1
static/_app/immutable/nodes/1.pFFIwPua.js
Normal file
@ -0,0 +1 @@
|
||||
import{a as b,f as x}from"../chunks/B89f14j0.js";import{ao as k,aY as $,an as i,o as y,aZ as l,a_ as E,g as v,a$ as Y,x as Z,b0 as j,p as q,f as w,t as z,c as A,h as u,r as m,b as B}from"../chunks/reyx9_7L.js";import{s as _}from"../chunks/BwTTNG21.js";import{s as C,p as g}from"../chunks/BHBF0lbh.js";function D(r=!1){const t=k,e=t.l.u;if(!e)return;let a=()=>Y(t.s);if(r){let o=0,s={};const f=Z(()=>{let p=!1;const c=t.s;for(const n in c)c[n]!==s[n]&&(s[n]=c[n],p=!0);return p&&o++,o});a=()=>v(f)}e.b.length&&$(()=>{h(t,a),l(e.b)}),i(()=>{const o=y(()=>e.m.map(E));return()=>{for(const s of o)typeof s=="function"&&s()}}),e.a.length&&i(()=>{h(t,a),l(e.a)})}function h(r,t){if(r.l.s)for(const e of r.l.s)v(e);t()}j();const F={get error(){return g.error},get status(){return g.status}};C.updated.check;const d=F;var G=x("<h1> </h1> <p> </p>",1);function L(r,t){q(t,!1),D();var e=G(),a=w(e),o=u(a,!0);m(a);var s=B(a,2),f=u(s,!0);m(s),z(()=>{_(o,d.status),_(f,d.error?.message)}),b(r,e),A()}export{L as component};
|
||||
4
static/_app/immutable/nodes/10.DEvMau45.js
Normal file
4
static/_app/immutable/nodes/10.DEvMau45.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
import{a as l,f as v}from"../chunks/DCPIP6Ym.js";import{p as S,s as $,t as m,a as u,g as o,e as Q,$ as T,b as d,c as s,r as a,n as _}from"../chunks/DAfY0XTB.js";import{s as n}from"../chunks/D2u1A_4g.js";import{i as U}from"../chunks/Br6sCvve.js";import{h as W,e as X,i as Y}from"../chunks/CBOKTDOo.js";/* empty css */var ee=v('<div class="p-6 text-center text-red-500"> </div>'),te=v('<div class="p-6 text-center text-gray-500"> </div>'),ae=v('<div class="p-6 text-center text-gray-500">Keine Anträge gefunden</div>'),se=v('<li class="px-6 py-4 hover:bg-gray-50 cursor-pointer"><div class="flex justify-between items-start"><div class="flex-1"><div class="flex items-center gap-2"><span class="font-mono text-sm text-green-700 bg-green-50 px-2 py-0.5 rounded"> </span> <span class="text-xs text-gray-400"> </span></div> <p class="mt-1 text-gray-700 line-clamp-2"> </p></div> <span class="text-xs px-2 py-1 rounded-full bg-yellow-100 text-yellow-800">⏳ offen</span></div></li>'),re=v('<ul class="divide-y divide-gray-100"></ul>'),oe=v('<main class="min-h-screen bg-gray-50"><header class="bg-green-700 text-white py-6 shadow-lg"><div class="max-w-6xl mx-auto px-4"><h1 class="text-3xl font-bold">🏛️ Antragstracker Hagen</h1> <p class="text-green-100 mt-1">Kommunale Anträge & Anfragen nachverfolgen</p></div></header> <div class="max-w-6xl mx-auto px-4 py-8"><div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-8"><div class="bg-white rounded-lg shadow p-4 text-center"><div class="text-3xl font-bold text-green-600"> </div> <div class="text-gray-500 text-sm">Vorlagen</div></div> <div class="bg-white rounded-lg shadow p-4 text-center"><div class="text-3xl font-bold text-blue-600"> </div> <div class="text-gray-500 text-sm">Ketten</div></div> <div class="bg-white rounded-lg shadow p-4 text-center"><div class="text-3xl font-bold text-purple-600">41</div> <div class="text-gray-500 text-sm">Gremien</div></div> <div class="bg-white rounded-lg shadow p-4 text-center"><div class="text-3xl font-bold text-orange-600">2004–2026</div> <div class="text-gray-500 text-sm">Zeitraum</div></div></div> <section class="bg-white rounded-lg shadow"><div class="px-6 py-4 border-b border-gray-200"><h2 class="text-xl font-semibold text-gray-800">📋 Aktuelle Anträge</h2></div> <!></section></div></main>');function ge(K){let g=S({vorlagen:0,beratungen:0,ketten:0,gremien:0}),x=$(S([])),R=$(!0),p=$("");const i=typeof window<"u"&&window.location.port==="5173"?`http://${window.location.hostname}:8099/api`:"/api";async function B(){console.log("API_BASE:",i);try{console.log("Fetching health...");const e=await fetch(`${i}/health`);if(console.log("Health response:",e.status),e.ok){console.log("Fetching vorlagen...");const r=await fetch(`${i}/vorlagen?page_size=1`);console.log("Vorlagen response:",r.status);const c=await r.json();g.vorlagen=c.total;const f=await(await fetch(`${i}/ketten?page_size=1`)).json();g.ketten=f.total}else u(p,`Health check failed: ${e.status}`);const t=await fetch(`${i}/vorlagen?typ=antrag&page_size=10`);if(console.log("Antraege response:",t.status),t.ok){const r=await t.json();console.log("Antraege data:",r.items.length),u(x,r.items,!0)}}catch(e){console.error("API Fehler:",e),u(p,`Fehler: ${e}`)}finally{u(R,!1),console.log("Loading done, antraege:",o(x).length)}}B();var w=oe();W("1uha8ag",e=>{Q(()=>{T.title="Antragstracker Hagen"})});var j=d(s(w),2),y=s(j),b=s(y),z=s(b),E=s(z,!0);a(z),_(2),a(b);var D=d(b,2),F=s(D),V=s(F,!0);a(F),_(2),a(D),_(4),a(y);var H=d(y,2),G=d(s(H),2);{var Z=e=>{var t=ee(),r=s(t,!0);a(t),m(()=>n(r,o(p))),l(e,t)},q=e=>{var t=te(),r=s(t);a(t),m(()=>n(r,`Lade Daten... (API: ${i})`)),l(e,t)},C=e=>{var t=ae();l(e,t)},J=e=>{var t=re();X(t,21,()=>o(x),Y,(r,c)=>{var h=se(),f=s(h),I=s(f),k=s(I),A=s(k),M=s(A,!0);a(A);var L=d(A,2),N=s(L,!0);a(L),a(k);var P=d(k,2),O=s(P,!0);a(P),a(I),_(2),a(f),a(h),m(()=>{n(M,o(c).aktenzeichen),n(N,o(c).datum_eingang),n(O,o(c).betreff)}),l(r,h)}),a(t),l(e,t)};U(G,e=>{o(p)?e(Z):o(R)?e(q,1):o(x).length===0?e(C,2):e(J,-1)})}a(H),a(j),a(w),m((e,t)=>{n(E,e),n(V,t)},[()=>g.vorlagen.toLocaleString(),()=>g.ketten.toLocaleString()]),l(K,w)}export{ge as component};
|
||||
@ -1 +0,0 @@
|
||||
import{a as l,f as v}from"../chunks/Bkzsmr9I.js";import{p as S,s as $,t as m,a as u,g as o,e as Q,$ as T,b as d,c as s,r as a,n as _}from"../chunks/Cjw4vZKn.js";import{s as n}from"../chunks/DfJQ0EIT.js";import{i as U}from"../chunks/kjB3f-xG.js";import{h as W,e as X,i as Y}from"../chunks/DaCWmHjB.js";/* empty css */var ee=v('<div class="p-6 text-center text-red-500"> </div>'),te=v('<div class="p-6 text-center text-gray-500"> </div>'),ae=v('<div class="p-6 text-center text-gray-500">Keine Anträge gefunden</div>'),se=v('<li class="px-6 py-4 hover:bg-gray-50 cursor-pointer"><div class="flex justify-between items-start"><div class="flex-1"><div class="flex items-center gap-2"><span class="font-mono text-sm text-green-700 bg-green-50 px-2 py-0.5 rounded"> </span> <span class="text-xs text-gray-400"> </span></div> <p class="mt-1 text-gray-700 line-clamp-2"> </p></div> <span class="text-xs px-2 py-1 rounded-full bg-yellow-100 text-yellow-800">⏳ offen</span></div></li>'),re=v('<ul class="divide-y divide-gray-100"></ul>'),oe=v('<main class="min-h-screen bg-gray-50"><header class="bg-green-700 text-white py-6 shadow-lg"><div class="max-w-6xl mx-auto px-4"><h1 class="text-3xl font-bold">🏛️ Antragstracker Hagen</h1> <p class="text-green-100 mt-1">Kommunale Anträge & Anfragen nachverfolgen</p></div></header> <div class="max-w-6xl mx-auto px-4 py-8"><div class="grid grid-cols-2 md:grid-cols-4 gap-4 mb-8"><div class="bg-white rounded-lg shadow p-4 text-center"><div class="text-3xl font-bold text-green-600"> </div> <div class="text-gray-500 text-sm">Vorlagen</div></div> <div class="bg-white rounded-lg shadow p-4 text-center"><div class="text-3xl font-bold text-blue-600"> </div> <div class="text-gray-500 text-sm">Ketten</div></div> <div class="bg-white rounded-lg shadow p-4 text-center"><div class="text-3xl font-bold text-purple-600">41</div> <div class="text-gray-500 text-sm">Gremien</div></div> <div class="bg-white rounded-lg shadow p-4 text-center"><div class="text-3xl font-bold text-orange-600">2004–2026</div> <div class="text-gray-500 text-sm">Zeitraum</div></div></div> <section class="bg-white rounded-lg shadow"><div class="px-6 py-4 border-b border-gray-200"><h2 class="text-xl font-semibold text-gray-800">📋 Aktuelle Anträge</h2></div> <!></section></div></main>');function ge(K){let g=S({vorlagen:0,beratungen:0,ketten:0,gremien:0}),x=$(S([])),R=$(!0),p=$("");const i=typeof window<"u"&&window.location.port==="5173"?`http://${window.location.hostname}:8099/api`:"/api";async function B(){console.log("API_BASE:",i);try{console.log("Fetching health...");const e=await fetch(`${i}/health`);if(console.log("Health response:",e.status),e.ok){console.log("Fetching vorlagen...");const r=await fetch(`${i}/vorlagen?page_size=1`);console.log("Vorlagen response:",r.status);const c=await r.json();g.vorlagen=c.total;const f=await(await fetch(`${i}/ketten?page_size=1`)).json();g.ketten=f.total}else u(p,`Health check failed: ${e.status}`);const t=await fetch(`${i}/vorlagen?typ=antrag&page_size=10`);if(console.log("Antraege response:",t.status),t.ok){const r=await t.json();console.log("Antraege data:",r.items.length),u(x,r.items,!0)}}catch(e){console.error("API Fehler:",e),u(p,`Fehler: ${e}`)}finally{u(R,!1),console.log("Loading done, antraege:",o(x).length)}}B();var w=oe();W("1uha8ag",e=>{Q(()=>{T.title="Antragstracker Hagen"})});var j=d(s(w),2),y=s(j),b=s(y),z=s(b),E=s(z,!0);a(z),_(2),a(b);var D=d(b,2),F=s(D),V=s(F,!0);a(F),_(2),a(D),_(4),a(y);var H=d(y,2),G=d(s(H),2);{var Z=e=>{var t=ee(),r=s(t,!0);a(t),m(()=>n(r,o(p))),l(e,t)},q=e=>{var t=te(),r=s(t);a(t),m(()=>n(r,`Lade Daten... (API: ${i})`)),l(e,t)},C=e=>{var t=ae();l(e,t)},J=e=>{var t=re();X(t,21,()=>o(x),Y,(r,c)=>{var h=se(),f=s(h),I=s(f),k=s(I),A=s(k),M=s(A,!0);a(A);var L=d(A,2),N=s(L,!0);a(L),a(k);var P=d(k,2),O=s(P,!0);a(P),a(I),_(2),a(f),a(h),m(()=>{n(M,o(c).aktenzeichen),n(N,o(c).datum_eingang),n(O,o(c).betreff)}),l(r,h)}),a(t),l(e,t)};U(G,e=>{o(p)?e(Z):o(R)?e(q,1):o(x).length===0?e(C,2):e(J,-1)})}a(H),a(j),a(w),m((e,t)=>{n(E,e),n(V,t)},[()=>g.vorlagen.toLocaleString(),()=>g.ketten.toLocaleString()]),l(K,w)}export{ge as component};
|
||||
1
static/_app/immutable/nodes/2.D2rnNjUq.js
Normal file
1
static/_app/immutable/nodes/2.D2rnNjUq.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
static/_app/immutable/nodes/3.s-yat7Fq.js
Normal file
1
static/_app/immutable/nodes/3.s-yat7Fq.js
Normal file
File diff suppressed because one or more lines are too long
1
static/_app/immutable/nodes/4.CCcGmKvl.js
Normal file
1
static/_app/immutable/nodes/4.CCcGmKvl.js
Normal file
@ -0,0 +1 @@
|
||||
import{a as l,f as n}from"../chunks/B89f14j0.js";import{o as L}from"../chunks/DrzKg1h1.js";import{p as M,s as _,a as j,c as q,e as B,b as c,h as i,d as h,$ as C,g as a,r as e,n as D,t as E}from"../chunks/reyx9_7L.js";import{s as f}from"../chunks/BwTTNG21.js";import{i as G}from"../chunks/Do7Yo2YN.js";import{h as I,e as J,i as K}from"../chunks/D5EBvEcH.js";import{s as N}from"../chunks/B-WTs0fq.js";import{s as u}from"../chunks/DnBxR3jh.js";import{f as O}from"../chunks/nhOotKLT.js";var P=n('<div class="text-gray-500">Laden...</div>'),Q=n('<a class="block p-4 rounded-lg border hover:shadow-md transition-shadow"><div class="font-bold text-lg"> </div> <div class="text-sm text-gray-600"> </div> <div class="mt-2 text-2xl font-semibold"> </div> <div class="text-xs text-gray-500">Anträge & Anfragen</div></a>'),R=n('<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"></div>'),S=n('<div class="max-w-4xl mx-auto"><h1 class="text-2xl font-bold mb-6">Fraktionen</h1> <!></div>');function ra(b,k){M(k,!0);let p=_(j([])),x=_(!0);L(async()=>{h(p,await O(),!0),h(x,!1)});var v=S();I("caopi2",t=>{B(()=>{C.title="Fraktionen — Antragstracker Hagen"})});var y=c(i(v),2);{var $=t=>{var s=P();l(t,s)},w=t=>{var s=R();J(s,21,()=>a(p),K,(z,r)=>{var o=Q(),d=i(o),A=i(d,!0);e(d);var m=c(d,2),F=i(m,!0);e(m);var g=c(m,2),H=i(g,!0);e(g),D(2),e(o),E(()=>{N(o,"href",`/fraktionen/${a(r).kuerzel??""}`),u(o,`border-left: 4px solid ${(a(r).farbe||"#6b7280")??""}`),u(d,`color: ${(a(r).farbe||"#374151")??""}`),f(A,a(r).kuerzel),f(F,a(r).name),f(H,a(r).anzahl)}),l(z,o)}),e(s),l(t,s)};G(y,t=>{a(x)?t($):t(w,-1)})}e(v),l(b,v),q()}export{ra as component};
|
||||
@ -1 +0,0 @@
|
||||
import{a as l,f as n}from"../chunks/Bkzsmr9I.js";import{o as L}from"../chunks/trpXq522.js";import{d as M,s as _,p as j,h as q,e as B,b as c,c as i,a as h,$ as C,g as a,r as e,n as D,t as E}from"../chunks/Cjw4vZKn.js";import{s as f}from"../chunks/DfJQ0EIT.js";import{i as G}from"../chunks/kjB3f-xG.js";import{h as I,e as J,i as K}from"../chunks/DaCWmHjB.js";import{s as N}from"../chunks/RVjQLo13.js";import{s as u}from"../chunks/QfvBL-nR.js";import{f as O}from"../chunks/Cgke0YGN.js";var P=n('<div class="text-gray-500">Laden...</div>'),Q=n('<a class="block p-4 rounded-lg border hover:shadow-md transition-shadow"><div class="font-bold text-lg"> </div> <div class="text-sm text-gray-600"> </div> <div class="mt-2 text-2xl font-semibold"> </div> <div class="text-xs text-gray-500">Anträge & Anfragen</div></a>'),R=n('<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"></div>'),S=n('<div class="max-w-4xl mx-auto p-6"><h1 class="text-2xl font-bold mb-6">Fraktionen</h1> <!></div>');function ra(b,k){M(k,!0);let p=_(j([])),x=_(!0);L(async()=>{h(p,await O(),!0),h(x,!1)});var v=S();I("caopi2",t=>{B(()=>{C.title="Fraktionen — Antragstracker Hagen"})});var y=c(i(v),2);{var $=t=>{var s=P();l(t,s)},w=t=>{var s=R();J(s,21,()=>a(p),K,(z,r)=>{var o=Q(),d=i(o),A=i(d,!0);e(d);var m=c(d,2),F=i(m,!0);e(m);var g=c(m,2),H=i(g,!0);e(g),D(2),e(o),E(()=>{N(o,"href",`/fraktionen/${a(r).kuerzel??""}`),u(o,`border-left: 4px solid ${(a(r).farbe||"#6b7280")??""}`),u(d,`color: ${(a(r).farbe||"#374151")??""}`),f(A,a(r).kuerzel),f(F,a(r).name),f(H,a(r).anzahl)}),l(z,o)}),e(s),l(t,s)};G(y,t=>{a(x)?t($):t(w,-1)})}e(v),l(b,v),q()}export{ra as component};
|
||||
@ -1 +0,0 @@
|
||||
import{a as l,f as n}from"../chunks/DCPIP6Ym.js";import{o as L}from"../chunks/DDErvS7v.js";import{d as M,s as _,p as j,h as q,e as B,b as c,c as i,a as h,$ as C,g as a,r as e,n as D,t as E}from"../chunks/DAfY0XTB.js";import{s as f}from"../chunks/D2u1A_4g.js";import{i as G}from"../chunks/Br6sCvve.js";import{h as I,e as J,i as K}from"../chunks/CBOKTDOo.js";import{s as N}from"../chunks/DVOkFnep.js";import{s as u}from"../chunks/C-x9yHfs.js";import{f as O}from"../chunks/Cgke0YGN.js";var P=n('<div class="text-gray-500">Laden...</div>'),Q=n('<a class="block p-4 rounded-lg border hover:shadow-md transition-shadow"><div class="font-bold text-lg"> </div> <div class="text-sm text-gray-600"> </div> <div class="mt-2 text-2xl font-semibold"> </div> <div class="text-xs text-gray-500">Anträge & Anfragen</div></a>'),R=n('<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"></div>'),S=n('<div class="max-w-4xl mx-auto p-6"><h1 class="text-2xl font-bold mb-6">Fraktionen</h1> <!></div>');function ra(b,k){M(k,!0);let p=_(j([])),x=_(!0);L(async()=>{h(p,await O(),!0),h(x,!1)});var v=S();I("caopi2",t=>{B(()=>{C.title="Fraktionen — Antragstracker Hagen"})});var y=c(i(v),2);{var $=t=>{var s=P();l(t,s)},w=t=>{var s=R();J(s,21,()=>a(p),K,(z,r)=>{var o=Q(),d=i(o),A=i(d,!0);e(d);var m=c(d,2),F=i(m,!0);e(m);var g=c(m,2),H=i(g,!0);e(g),D(2),e(o),E(()=>{N(o,"href",`/fraktionen/${a(r).kuerzel??""}`),u(o,`border-left: 4px solid ${(a(r).farbe||"#6b7280")??""}`),u(d,`color: ${(a(r).farbe||"#374151")??""}`),f(A,a(r).kuerzel),f(F,a(r).name),f(H,a(r).anzahl)}),l(z,o)}),e(s),l(t,s)};G(y,t=>{a(x)?t($):t(w,-1)})}e(v),l(b,v),q()}export{ra as component};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
static/_app/immutable/nodes/5.DWEKtTGz.js
Normal file
1
static/_app/immutable/nodes/5.DWEKtTGz.js
Normal file
File diff suppressed because one or more lines are too long
@ -1,6 +1,6 @@
|
||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../assets/leaflet.CIGW-MKW.css"])))=>i.map(i=>d[i]);
|
||||
import{_ as S}from"../chunks/PPVm8Dsz.js";import{a as l,f as n}from"../chunks/DCPIP6Ym.js";import{o as de}from"../chunks/DDErvS7v.js";import{d as ce,s as u,p as B,b as i,f as ve,t as _,h as pe,e as ge,c as r,g as o,$ as me,r as a,a as h}from"../chunks/DAfY0XTB.js";import{d as fe,s as d,a as ue}from"../chunks/D2u1A_4g.js";import{i as L}from"../chunks/Br6sCvve.js";import{h as _e,e as Z,i as q}from"../chunks/CBOKTDOo.js";import{s as he}from"../chunks/DVOkFnep.js";import{s as xe}from"../chunks/D6E-zrqv.js";var be=n('<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>'),ye=n('<div class="h-[500px] flex items-center justify-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-green-600"></div></div>'),we=n('<div id="map" class="h-[500px]"></div>'),ke=n('<li><a class="block p-2 rounded-lg border border-gray-100 hover:bg-gray-50 transition-colors"><div class="flex items-center gap-2"><span class="font-mono text-xs font-medium text-green-700"> </span> <span class="text-xs px-1.5 py-0.5 rounded bg-gray-100 text-gray-500"> </span></div> <p class="text-xs text-gray-600 mt-1 line-clamp-2"> </p></a></li>'),Oe=n('<ul class="space-y-2"></ul>'),Ae=n('<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><h2 class="text-lg font-semibold text-gray-900 mb-2"> </h2> <p class="text-sm text-gray-500 mb-4"> </p> <!></div>'),Ee=n('<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><p class="text-gray-500 text-sm">Klicke auf einen Marker um die zugehörigen Vorlagen zu sehen.</p></div>'),$e=n('<li><button><span class="font-medium"> </span> <span class="text-gray-400 ml-2"> </span></button></li>'),Ve=n('<div class="mb-6"><h1 class="text-2xl font-bold text-gray-900">📍 Anträge auf der Karte</h1> <p class="text-gray-500 text-sm mt-1">Orte aus Anträgen und Anfragen in Hagen</p></div> <div class="grid grid-cols-1 lg:grid-cols-3 gap-6"><div class="lg:col-span-2"><div class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden"><!></div> <div class="mt-4 text-sm text-gray-500"> </div></div> <div class="space-y-6"><!> <div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><h2 class="text-lg font-semibold text-gray-900 mb-4">🗺️ Alle Orte</h2> <ul class="space-y-1 max-h-80 overflow-y-auto"></ul></div></div></div>',1);function Ke(J,Q){ce(Q,!0);let g=u(B([])),p=u(null),x=u(B([])),P=u(!0),b=null;const T=typeof window<"u"&&window.location.port==="5173"?`http://${window.location.hostname}:8099/api`:"/api",U=[51.361,7.476],W=12;async function X(){try{const t=await fetch(`${T}/orte`);t.ok&&h(g,await t.json(),!0)}catch(t){console.error("Fehler beim Laden der Orte:",t)}finally{h(P,!1)}}async function H(t){h(p,t,!0);try{const e=await fetch(`${T}/orte/${t.id}/vorlagen`);e.ok&&h(x,await e.json(),!0)}catch(e){console.error("Fehler:",e)}}de(async()=>{await X();const t=await S(()=>import("../chunks/CjPBq9Bq.js").then(e=>e.l),[],import.meta.url);await S(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url),b=t.map("map").setView(U,W),t.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'}).addTo(b);for(const e of o(g)){const s=t.circleMarker([e.lat,e.lon],{radius:Math.min(8+e.vorlage_count*2,20),fillColor:"#16a34a",color:"#166534",weight:2,opacity:1,fillOpacity:.7}).addTo(b);s.bindPopup(`
|
||||
import{_ as S}from"../chunks/PPVm8Dsz.js";import{d as de,a as l,f as n,b as ce}from"../chunks/B89f14j0.js";import{o as ve}from"../chunks/DrzKg1h1.js";import{p as pe,s as u,a as B,b as i,f as ge,t as _,c as me,e as fe,h as r,g as o,$ as ue,r as a,d as h}from"../chunks/reyx9_7L.js";import{s as d}from"../chunks/BwTTNG21.js";import{i as L}from"../chunks/Do7Yo2YN.js";import{h as _e,e as Z,i as q}from"../chunks/D5EBvEcH.js";import{s as he}from"../chunks/B-WTs0fq.js";import{s as xe}from"../chunks/C7sCDBjT.js";var be=n('<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>'),ye=n('<div class="h-[500px] flex items-center justify-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-green-600"></div></div>'),we=n('<div id="map" class="h-[500px]"></div>'),ke=n('<li><a class="block p-2 rounded-lg border border-gray-100 hover:bg-gray-50 transition-colors"><div class="flex items-center gap-2"><span class="font-mono text-xs font-medium text-green-700"> </span> <span class="text-xs px-1.5 py-0.5 rounded bg-gray-100 text-gray-500"> </span></div> <p class="text-xs text-gray-600 mt-1 line-clamp-2"> </p></a></li>'),Oe=n('<ul class="space-y-2"></ul>'),Ae=n('<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><h2 class="text-lg font-semibold text-gray-900 mb-2"> </h2> <p class="text-sm text-gray-500 mb-4"> </p> <!></div>'),Ee=n('<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><p class="text-gray-500 text-sm">Klicke auf einen Marker um die zugehörigen Vorlagen zu sehen.</p></div>'),$e=n('<li><button><span class="font-medium"> </span> <span class="text-gray-400 ml-2"> </span></button></li>'),Ve=n('<div class="mb-6"><h1 class="text-2xl font-bold text-gray-900">📍 Anträge auf der Karte</h1> <p class="text-gray-500 text-sm mt-1">Orte aus Anträgen und Anfragen in Hagen</p></div> <div class="grid grid-cols-1 lg:grid-cols-3 gap-6"><div class="lg:col-span-2"><div class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden"><!></div> <div class="mt-4 text-sm text-gray-500"> </div></div> <div class="space-y-6"><!> <div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><h2 class="text-lg font-semibold text-gray-900 mb-4">🗺️ Alle Orte</h2> <ul class="space-y-1 max-h-80 overflow-y-auto"></ul></div></div></div>',1);function Ke(J,Q){pe(Q,!0);let g=u(B([])),p=u(null),x=u(B([])),P=u(!0),b=null;const T=typeof window<"u"&&window.location.port==="5173"?`http://${window.location.hostname}:8099/api`:"/api",U=[51.361,7.476],W=12;async function X(){try{const t=await fetch(`${T}/orte`);t.ok&&h(g,await t.json(),!0)}catch(t){console.error("Fehler beim Laden der Orte:",t)}finally{h(P,!1)}}async function H(t){h(p,t,!0);try{const e=await fetch(`${T}/orte/${t.id}/vorlagen`);e.ok&&h(x,await e.json(),!0)}catch(e){console.error("Fehler:",e)}}ve(async()=>{await X();const t=await S(()=>import("../chunks/CjPBq9Bq.js").then(e=>e.l),[],import.meta.url);await S(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url),b=t.map("map").setView(U,W),t.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'}).addTo(b);for(const e of o(g)){const s=t.circleMarker([e.lat,e.lon],{radius:Math.min(8+e.vorlage_count*2,20),fillColor:"#16a34a",color:"#166534",weight:2,opacity:1,fillOpacity:.7}).addTo(b);s.bindPopup(`
|
||||
<strong>${e.name}</strong><br>
|
||||
${e.vorlage_count} Vorlage(n)
|
||||
`),s.on("click",()=>H(e))}});var j=Ve();_e("hbihfm",t=>{var e=be();ge(()=>{me.title="Karte - Antragstracker Hagen"}),l(t,e)});var G=i(ve(j),2),y=r(G),w=r(y),Y=r(w);{var ee=t=>{var e=ye();l(t,e)},te=t=>{var e=we();l(t,e)};L(Y,t=>{o(P)?t(ee):t(te,-1)})}a(w);var I=i(w,2),ae=r(I);a(I),a(y);var K=i(y,2),N=r(K);{var re=t=>{var e=Ae(),s=r(e),v=r(s,!0);a(s);var c=i(s,2),k=r(c);a(c);var m=i(c,2);{var O=A=>{var E=Oe();Z(E,21,()=>o(x),q,(se,f)=>{var $=ke(),V=r($),M=r(V),z=r(M),ie=r(z,!0);a(z);var D=i(z,2),le=r(D,!0);a(D),a(M);var F=i(M,2),ne=r(F,!0);a(F),a(V),a($),_(()=>{he(V,"href",`/vorlagen/${o(f).id??""}`),d(ie,o(f).aktenzeichen),d(le,o(f).typ),d(ne,o(f).betreff)}),l(se,$)}),a(E),l(A,E)};L(m,A=>{o(x).length>0&&A(O)})}a(e),_(()=>{d(v,o(p).name),d(k,`${o(p).vorlage_count??""} Vorlage(n) betreffen diesen Ort`)}),l(t,e)},oe=t=>{var e=Ee();l(t,e)};L(N,t=>{o(p)?t(re):t(oe,-1)})}var R=i(N,2),C=i(r(R),2);Z(C,21,()=>o(g),q,(t,e)=>{var s=$e(),v=r(s),c=r(v),k=r(c,!0);a(c);var m=i(c,2),O=r(m);a(m),a(v),a(s),_(()=>{xe(v,1,`w-full text-left px-3 py-2 rounded-lg hover:bg-gray-50 transition-colors text-sm
|
||||
${o(p)?.id===o(e).id?"bg-green-50 text-green-700":"text-gray-700"}`),d(k,o(e).name),d(O,`(${o(e).vorlage_count??""})`)}),ue("click",v,()=>H(o(e))),l(t,s)}),a(C),a(R),a(K),a(G),_(()=>d(ae,`${o(g).length??""} Orte geocodiert • Marker-Größe = Anzahl Vorlagen`)),l(J,j),pe()}fe(["click"]);export{Ke as component};
|
||||
`),s.on("click",()=>H(e))}});var j=Ve();_e("hbihfm",t=>{var e=be();fe(()=>{ue.title="Karte - Antragstracker Hagen"}),l(t,e)});var G=i(ge(j),2),y=r(G),w=r(y),Y=r(w);{var ee=t=>{var e=ye();l(t,e)},te=t=>{var e=we();l(t,e)};L(Y,t=>{o(P)?t(ee):t(te,-1)})}a(w);var I=i(w,2),ae=r(I);a(I),a(y);var K=i(y,2),N=r(K);{var re=t=>{var e=Ae(),s=r(e),v=r(s,!0);a(s);var c=i(s,2),k=r(c);a(c);var m=i(c,2);{var O=A=>{var E=Oe();Z(E,21,()=>o(x),q,(se,f)=>{var $=ke(),V=r($),M=r(V),z=r(M),ie=r(z,!0);a(z);var D=i(z,2),le=r(D,!0);a(D),a(M);var F=i(M,2),ne=r(F,!0);a(F),a(V),a($),_(()=>{he(V,"href",`/vorlagen/${o(f).id??""}`),d(ie,o(f).aktenzeichen),d(le,o(f).typ),d(ne,o(f).betreff)}),l(se,$)}),a(E),l(A,E)};L(m,A=>{o(x).length>0&&A(O)})}a(e),_(()=>{d(v,o(p).name),d(k,`${o(p).vorlage_count??""} Vorlage(n) betreffen diesen Ort`)}),l(t,e)},oe=t=>{var e=Ee();l(t,e)};L(N,t=>{o(p)?t(re):t(oe,-1)})}var R=i(N,2),C=i(r(R),2);Z(C,21,()=>o(g),q,(t,e)=>{var s=$e(),v=r(s),c=r(v),k=r(c,!0);a(c);var m=i(c,2),O=r(m);a(m),a(v),a(s),_(()=>{xe(v,1,`w-full text-left px-3 py-2 rounded-lg hover:bg-gray-50 transition-colors text-sm
|
||||
${o(p)?.id===o(e).id?"bg-green-50 text-green-700":"text-gray-700"}`),d(k,o(e).name),d(O,`(${o(e).vorlage_count??""})`)}),ce("click",v,()=>H(o(e))),l(t,s)}),a(C),a(R),a(K),a(G),_(()=>d(ae,`${o(g).length??""} Orte geocodiert • Marker-Größe = Anzahl Vorlagen`)),l(J,j),me()}de(["click"]);export{Ke as component};
|
||||
@ -1,6 +0,0 @@
|
||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../assets/leaflet.CIGW-MKW.css"])))=>i.map(i=>d[i]);
|
||||
import{_ as S}from"../chunks/PPVm8Dsz.js";import{a as l,f as n}from"../chunks/Bkzsmr9I.js";import{o as de}from"../chunks/trpXq522.js";import{d as ce,s as u,p as B,b as i,f as ve,t as _,h as pe,e as ge,c as r,g as o,$ as me,r as a,a as h}from"../chunks/Cjw4vZKn.js";import{d as fe,s as d,a as ue}from"../chunks/DfJQ0EIT.js";import{i as L}from"../chunks/kjB3f-xG.js";import{h as _e,e as Z,i as q}from"../chunks/DaCWmHjB.js";import{s as he}from"../chunks/RVjQLo13.js";import{s as xe}from"../chunks/CWOupeSg.js";var be=n('<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>'),ye=n('<div class="h-[500px] flex items-center justify-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-green-600"></div></div>'),we=n('<div id="map" class="h-[500px]"></div>'),ke=n('<li><a class="block p-2 rounded-lg border border-gray-100 hover:bg-gray-50 transition-colors"><div class="flex items-center gap-2"><span class="font-mono text-xs font-medium text-green-700"> </span> <span class="text-xs px-1.5 py-0.5 rounded bg-gray-100 text-gray-500"> </span></div> <p class="text-xs text-gray-600 mt-1 line-clamp-2"> </p></a></li>'),Oe=n('<ul class="space-y-2"></ul>'),Ae=n('<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><h2 class="text-lg font-semibold text-gray-900 mb-2"> </h2> <p class="text-sm text-gray-500 mb-4"> </p> <!></div>'),Ee=n('<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><p class="text-gray-500 text-sm">Klicke auf einen Marker um die zugehörigen Vorlagen zu sehen.</p></div>'),$e=n('<li><button><span class="font-medium"> </span> <span class="text-gray-400 ml-2"> </span></button></li>'),Ve=n('<div class="mb-6"><h1 class="text-2xl font-bold text-gray-900">📍 Anträge auf der Karte</h1> <p class="text-gray-500 text-sm mt-1">Orte aus Anträgen und Anfragen in Hagen</p></div> <div class="grid grid-cols-1 lg:grid-cols-3 gap-6"><div class="lg:col-span-2"><div class="bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden"><!></div> <div class="mt-4 text-sm text-gray-500"> </div></div> <div class="space-y-6"><!> <div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6"><h2 class="text-lg font-semibold text-gray-900 mb-4">🗺️ Alle Orte</h2> <ul class="space-y-1 max-h-80 overflow-y-auto"></ul></div></div></div>',1);function Ke(J,Q){ce(Q,!0);let g=u(B([])),p=u(null),x=u(B([])),P=u(!0),b=null;const T=typeof window<"u"&&window.location.port==="5173"?`http://${window.location.hostname}:8099/api`:"/api",U=[51.361,7.476],W=12;async function X(){try{const t=await fetch(`${T}/orte`);t.ok&&h(g,await t.json(),!0)}catch(t){console.error("Fehler beim Laden der Orte:",t)}finally{h(P,!1)}}async function H(t){h(p,t,!0);try{const e=await fetch(`${T}/orte/${t.id}/vorlagen`);e.ok&&h(x,await e.json(),!0)}catch(e){console.error("Fehler:",e)}}de(async()=>{await X();const t=await S(()=>import("../chunks/CjPBq9Bq.js").then(e=>e.l),[],import.meta.url);await S(()=>Promise.resolve({}),__vite__mapDeps([0]),import.meta.url),b=t.map("map").setView(U,W),t.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'}).addTo(b);for(const e of o(g)){const s=t.circleMarker([e.lat,e.lon],{radius:Math.min(8+e.vorlage_count*2,20),fillColor:"#16a34a",color:"#166534",weight:2,opacity:1,fillOpacity:.7}).addTo(b);s.bindPopup(`
|
||||
<strong>${e.name}</strong><br>
|
||||
${e.vorlage_count} Vorlage(n)
|
||||
`),s.on("click",()=>H(e))}});var j=Ve();_e("hbihfm",t=>{var e=be();ge(()=>{me.title="Karte - Antragstracker Hagen"}),l(t,e)});var G=i(ve(j),2),y=r(G),w=r(y),Y=r(w);{var ee=t=>{var e=ye();l(t,e)},te=t=>{var e=we();l(t,e)};L(Y,t=>{o(P)?t(ee):t(te,-1)})}a(w);var I=i(w,2),ae=r(I);a(I),a(y);var K=i(y,2),N=r(K);{var re=t=>{var e=Ae(),s=r(e),v=r(s,!0);a(s);var c=i(s,2),k=r(c);a(c);var m=i(c,2);{var O=A=>{var E=Oe();Z(E,21,()=>o(x),q,(se,f)=>{var $=ke(),V=r($),M=r(V),z=r(M),ie=r(z,!0);a(z);var D=i(z,2),le=r(D,!0);a(D),a(M);var F=i(M,2),ne=r(F,!0);a(F),a(V),a($),_(()=>{he(V,"href",`/vorlagen/${o(f).id??""}`),d(ie,o(f).aktenzeichen),d(le,o(f).typ),d(ne,o(f).betreff)}),l(se,$)}),a(E),l(A,E)};L(m,A=>{o(x).length>0&&A(O)})}a(e),_(()=>{d(v,o(p).name),d(k,`${o(p).vorlage_count??""} Vorlage(n) betreffen diesen Ort`)}),l(t,e)},oe=t=>{var e=Ee();l(t,e)};L(N,t=>{o(p)?t(re):t(oe,-1)})}var R=i(N,2),C=i(r(R),2);Z(C,21,()=>o(g),q,(t,e)=>{var s=$e(),v=r(s),c=r(v),k=r(c,!0);a(c);var m=i(c,2),O=r(m);a(m),a(v),a(s),_(()=>{xe(v,1,`w-full text-left px-3 py-2 rounded-lg hover:bg-gray-50 transition-colors text-sm
|
||||
${o(p)?.id===o(e).id?"bg-green-50 text-green-700":"text-gray-700"}`),d(k,o(e).name),d(O,`(${o(e).vorlage_count??""})`)}),ue("click",v,()=>H(o(e))),l(t,s)}),a(C),a(R),a(K),a(G),_(()=>d(ae,`${o(g).length??""} Orte geocodiert • Marker-Größe = Anzahl Vorlagen`)),l(J,j),pe()}fe(["click"]);export{Ke as component};
|
||||
File diff suppressed because one or more lines are too long
1
static/_app/immutable/nodes/7.Doi71Cyg.js
Normal file
1
static/_app/immutable/nodes/7.Doi71Cyg.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
static/_app/immutable/nodes/8.BHSHK6Ap.js
Normal file
2
static/_app/immutable/nodes/8.BHSHK6Ap.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
static/_app/immutable/nodes/9.CAAaOvUh.js
Normal file
1
static/_app/immutable/nodes/9.CAAaOvUh.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
{"version":"1774994287140"}
|
||||
{"version":"1775046465615"}
|
||||
@ -3,34 +3,33 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<link href="/_app/immutable/entry/start.BlI5Xt52.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/CTIvq_GE.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/DAfY0XTB.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/DIGUPa-Q.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/DDErvS7v.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/entry/app.CPVPz_La.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/entry/start.CJw4zQCo.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/BHBF0lbh.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/reyx9_7L.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/Pu2RPHbX.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/DrzKg1h1.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/entry/app.Bf2mSiZt.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/PPVm8Dsz.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/D2u1A_4g.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/DCPIP6Ym.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/Br6sCvve.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/Duumi1XQ.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/B-uV6-Xr.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/splFp8Bu.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/BwTTNG21.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/B89f14j0.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/Do7Yo2YN.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/DfsAIpU3.js" rel="modulepreload">
|
||||
<link href="/_app/immutable/chunks/CvtDgobB.js" rel="modulepreload">
|
||||
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover">
|
||||
<div style="display: contents">
|
||||
<script>
|
||||
{
|
||||
__sveltekit_1fbmgu4 = {
|
||||
__sveltekit_jcwz9y = {
|
||||
base: ""
|
||||
};
|
||||
|
||||
const element = document.currentScript.parentElement;
|
||||
|
||||
Promise.all([
|
||||
import("/_app/immutable/entry/start.BlI5Xt52.js"),
|
||||
import("/_app/immutable/entry/app.CPVPz_La.js")
|
||||
import("/_app/immutable/entry/start.CJw4zQCo.js"),
|
||||
import("/_app/immutable/entry/app.Bf2mSiZt.js")
|
||||
]).then(([kit, app]) => {
|
||||
kit.start(app, element);
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user