+
-
Contents
+ Inhalt
-
-
-
Open Source
-
ManagerX stolz lizenziert unter GPL-3.0.
+ {/* Info Badge */}
+
+
+
Open Source
+
+ ManagerX stolz lizenziert unter GPL-3.0 – {allDeps.length} Pakete über {uniqueLicenseCount} Lizenztypen.
+
+
+
+ Stand: {LEGAL_CONFIG.lastUpdate}
+
+
+
+ {/* Quick Links */}
+
+
Weitere Dokumente
+
+
+ Impressum
+
+
+
+ Datenschutzerklärung
+
+
+
+ Nutzungsbedingungen
+
@@ -240,18 +392,51 @@ export const License = memo(function License() {
className="flex items-center gap-4 text-primary mb-6"
>
-
Developer Credits
+
Developer Credits · Third-Party Licenses
Lizenzwesen
-
+
Transparenz bedeutet Vertrauen. Wir nutzen Open-Source-Technologien und geben unseren Code der Community zurück.
+
+
+
+
setQuery(e.target.value)}
+ placeholder="Abhängigkeit oder Lizenz suchen…"
+ aria-label="Abhängigkeiten durchsuchen"
+ className="w-full pl-11 pr-10 py-3 rounded-xl bg-[#111318] border border-white/5 text-sm text-white placeholder:text-slate-600 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/60 focus:border-primary/30 transition-colors"
+ />
+
+ {query && (
+ setQuery("")}
+ aria-label="Suche zurücksetzen"
+ className="absolute right-3 top-1/2 -translate-y-1/2 text-slate-500 hover:text-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/60 rounded"
+ >
+
+
+ )}
+
+
+ {matchCount !== null && (
+
+ {matchCount} von {allDeps.length} Paketen
+
+ )}
-
-
+
+
GNU GPL v3.0
@@ -275,37 +460,17 @@ export const License = memo(function License() {
-
-
- {pythonCategories.map((cat) => (
-
-
{cat.title}
-
- {cat.deps.map((dep) => (
-
- ))}
-
-
- ))}
-
+
+
+ Farbcodierung gilt für alle Abhängigkeiten auf dieser Seite.
+
-
-
- {nodeCategories.map((cat) => (
-
-
{cat.title}
-
- {cat.deps.map((dep) => (
-
- ))}
-
-
- ))}
-
+
-
+
Neben den oben genannten Bibliotheken nutzen wir zahlreiche weitere Tools zur Qualitätssicherung und Entwicklung:
@@ -324,7 +489,7 @@ export const License = memo(function License() {
-
+
Join the Devs
@@ -333,19 +498,37 @@ export const License = memo(function License() {
href="https://github.com/ManagerX-Development/ManagerX"
target="_blank"
rel="noopener noreferrer"
- className="px-8 py-3 rounded-full bg-accent text-white font-black uppercase tracking-widest hover:scale-105 transition-transform"
+ className="px-8 py-3 rounded-full bg-accent text-white font-black uppercase tracking-widest hover:scale-105 transition-transform focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/60"
>
GitHub Repository
-
+
-
© 2026 ManagerX Development
-
© 2024-2026 OPPRO.NET Network
+
© {new Date().getFullYear()} ManagerX Development
+
© 2024-{new Date().getFullYear()} OPPRO.NET Network
+
+ {/* Contact CTA — matches Impressum / Nutzungsbedingungen */}
+
+
+
+
+
+
Fragen zur Lizenz?
+
+ {LEGAL_CONFIG.contact.legalEmail}
+
+
ManagerX Development Network · {LEGAL_CONFIG.owner.name}
+
+ Stand: {LEGAL_CONFIG.lastUpdate} · Version {LEGAL_CONFIG.version} · © ManagerX Development
+
+
+
+
@@ -355,4 +538,4 @@ export const License = memo(function License() {
);
});
-export default License;
+export default License;
\ No newline at end of file
diff --git a/src/web/pages/Nutzungsbedingungen.tsx b/src/web/pages/Nutzungsbedingungen.tsx
index 90879db..465d684 100644
--- a/src/web/pages/Nutzungsbedingungen.tsx
+++ b/src/web/pages/Nutzungsbedingungen.tsx
@@ -1,10 +1,11 @@
import { memo, useState, useEffect } from "react";
import { Link } from "react-router-dom";
import {
- ArrowLeft, FileText, ChevronRight, Shield, Scale, Info,
- CheckCircle, UserCheck, Lock, Zap, Users, MessageSquare,
- Copyright, CreditCard, ExternalLink, Slash, ShieldAlert,
- AlertCircle, RefreshCw, Mail, Gavel
+ FileText, ChevronRight, Shield, Scale, Info,
+ CheckCircle2, UserCheck, Lock, Zap, Users,
+ Copyright, ExternalLink, Slash, ShieldAlert,
+ AlertCircle, RefreshCw, Mail, Gavel, AlertTriangle,
+ Clock, XCircle
} from "lucide-react";
import { Navbar } from "../components/layout/Navbar";
import { Footer } from "../components/layout/Footer";
@@ -12,32 +13,35 @@ import { motion } from "framer-motion";
import { LEGAL_CONFIG } from "../lib/legal";
const SECTIONS = [
- { id: "overview", title: "Overview", icon: Info },
- { id: "acceptance", title: "Acceptance", icon: CheckCircle },
- { id: "eligibility", title: "Eligibility", icon: UserCheck },
- { id: "security", title: "Accounts & Security", icon: Lock },
- { id: "acceptable-use", title: "Acceptable Use", icon: Zap },
- { id: "community", title: "Community Guidelines", icon: Users },
- { id: "content-ip", title: "Content & IP", icon: Copyright },
- { id: "third-party", title: "Third-Party Services", icon: ExternalLink },
- { id: "termination", title: "Suspension & Termination", icon: Slash },
- { id: "disclaimers", title: "Disclaimers", icon: ShieldAlert },
- { id: "liability", title: "Limitation of Liability", icon: AlertCircle },
- { id: "indemnity", title: "Indemnity", icon: Shield },
- { id: "changes", title: "Changes to Terms", icon: RefreshCw },
- { id: "contact", title: "Contact", icon: Mail },
- { id: "law", title: "Governing Law", icon: Gavel },
+ { id: "overview", title: "Übersicht & Geltungsbereich", icon: Info },
+ { id: "acceptance", title: "Zustimmung zu den Bedingungen", icon: CheckCircle2 },
+ { id: "eligibility", title: "Nutzungsvoraussetzungen", icon: UserCheck },
+ { id: "security", title: "Konten & Sicherheit", icon: Lock },
+ { id: "acceptable-use", title: "Zulässige Nutzung", icon: Zap },
+ { id: "prohibited", title: "Verbotene Handlungen", icon: XCircle },
+ { id: "community", title: "Community-Richtlinien", icon: Users },
+ { id: "content-ip", title: "Geistiges Eigentum", icon: Copyright },
+ { id: "third-party", title: "Drittanbieter-Dienste", icon: ExternalLink },
+ { id: "termination", title: "Sperrung & Kündigung", icon: Slash },
+ { id: "disclaimers", title: "Haftungsausschluss", icon: ShieldAlert },
+ { id: "liability", title: "Haftungsbeschränkung", icon: AlertCircle },
+ { id: "indemnity", title: "Freistellung", icon: Shield },
+ { id: "changes", title: "Änderungen der Bedingungen", icon: RefreshCw },
+ { id: "law", title: "Anwendbares Recht & Gerichtsstand", icon: Gavel },
+ { id: "contact", title: "Kontakt", icon: Mail },
];
-const Section = ({ id, title, children }: { id: string; title: string; children: React.ReactNode }) => (
+const Section = ({ id, title, icon: Icon, children }: { id: string; title: string; icon: any; children: React.ReactNode }) => (
-
+
{children}
@@ -50,7 +54,6 @@ export const Nutzungsbedingungen = memo(function Nutzungsbedingungen() {
const handleScroll = () => {
const sectionElements = SECTIONS.map(s => document.getElementById(s.id));
const scrollPosition = window.scrollY + 200;
-
for (let i = sectionElements.length - 1; i >= 0; i--) {
const el = sectionElements[i];
if (el && scrollPosition >= el.offsetTop) {
@@ -59,19 +62,13 @@ export const Nutzungsbedingungen = memo(function Nutzungsbedingungen() {
}
}
};
-
window.addEventListener("scroll", handleScroll);
return () => window.removeEventListener("scroll", handleScroll);
}, []);
const scrollToSection = (id: string) => {
const el = document.getElementById(id);
- if (el) {
- window.scrollTo({
- top: el.offsetTop - 120,
- behavior: "smooth"
- });
- }
+ if (el) window.scrollTo({ top: el.offsetTop - 120, behavior: "smooth" });
};
return (
@@ -80,11 +77,11 @@ export const Nutzungsbedingungen = memo(function Nutzungsbedingungen() {
- {/* Sidebar Container */}
+ {/* Sidebar */}