"Refactor CSS

This commit is contained in:
2025-05-26 09:46:07 +02:00
parent e4db65c85a
commit eabb3f6a60
3 changed files with 67 additions and 61 deletions

File diff suppressed because one or more lines are too long

View File

@@ -100,7 +100,7 @@
<!-- Users Tab --> <!-- Users Tab -->
{% if active_tab == 'users' %} {% if active_tab == 'users' %}
<div id="users-tab" class="tab-pane active"> <div id="users-tab" class="tab-pane active">
<div class="bg-white dark:bg-dark-card rounded-xl shadow-lg p-6"> <div class="bg-white dark:bg-dark-card rounded-xl shadow-lg p-6 transition-colors">
<div class="flex justify-between items-center mb-6"> <div class="flex justify-between items-center mb-6">
<h3 class="text-xl font-bold text-slate-900 dark:text-white">Benutzer</h3> <h3 class="text-xl font-bold text-slate-900 dark:text-white">Benutzer</h3>
<form action="{{ url_for('admin_page', tab='users') }}" method="get"> <form action="{{ url_for('admin_page', tab='users') }}" method="get">
@@ -114,7 +114,7 @@
</div> </div>
<div class="overflow-x-auto rounded-lg border border-light-border dark:border-dark-border"> <div class="overflow-x-auto rounded-lg border border-light-border dark:border-dark-border">
<table class="min-w-full divide-y divide-light-border dark:divide-dark-border"> <table class="min-w-full divide-y divide-light-border dark:divide-dark-border">
<thead class="bg-slate-50 dark:bg-slate-800"> <thead class="bg-slate-50 dark:bg-slate-800 transition-colors">
<tr> <tr>
<th class="px-6 py-3 text-left text-xs font-medium text-slate-500 dark:text-slate-400 uppercase tracking-wider">Benutzer</th> <th class="px-6 py-3 text-left text-xs font-medium text-slate-500 dark:text-slate-400 uppercase tracking-wider">Benutzer</th>
<th class="px-6 py-3 text-left text-xs font-medium text-slate-500 dark:text-slate-400 uppercase tracking-wider">Rolle</th> <th class="px-6 py-3 text-left text-xs font-medium text-slate-500 dark:text-slate-400 uppercase tracking-wider">Rolle</th>
@@ -122,34 +122,34 @@
<th class="px-6 py-3 text-right text-xs font-medium text-slate-500 dark:text-slate-400 uppercase tracking-wider">Aktionen</th> <th class="px-6 py-3 text-right text-xs font-medium text-slate-500 dark:text-slate-400 uppercase tracking-wider">Aktionen</th>
</tr> </tr>
</thead> </thead>
<tbody class="bg-white dark:bg-dark-card divide-y divide-light-border dark:divide-dark-border"> <tbody class="bg-white dark:bg-dark-card divide-y divide-light-border dark:divide-dark-border transition-colors">
{% for user in users %} {% for user in users %}
<tr> <tr class="transition-colors hover:bg-slate-50 dark:hover:bg-slate-700">
<td class="px-6 py-4 whitespace-nowrap"> <td class="px-6 py-4 whitespace-nowrap">
<div class="flex items-center"> <div class="flex items-center">
<div class="flex-shrink-0 h-10 w-10 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-700 dark:text-blue-300 font-medium"> <div class="flex-shrink-0 h-10 w-10 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-700 dark:text-blue-300 font-medium transition-colors">
{{ user.email[0]|upper if user.email else 'U' }} {{ user.email[0]|upper if user.email else 'U' }}
</div> </div>
<div class="ml-4"> <div class="ml-4">
<div class="text-sm font-medium text-slate-900 dark:text-white">{{ user.name }}</div> <div class="text-sm font-medium text-slate-900 dark:text-white transition-colors">{{ user.name }}</div>
<div class="text-sm text-slate-500 dark:text-slate-400">{{ user.email }}</div> <div class="text-sm text-slate-500 dark:text-slate-400 transition-colors">{{ user.email }}</div>
</div> </div>
</div> </div>
</td> </td>
<td class="px-6 py-4 whitespace-nowrap"> <td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {{ 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200' if user.is_admin else 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200' }}"> <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {{ 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200' if user.is_admin else 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200' }} transition-colors">
{{ 'Administrator' if user.is_admin else 'Benutzer' }} {{ 'Administrator' if user.is_admin else 'Benutzer' }}
</span> </span>
</td> </td>
<td class="px-6 py-4 whitespace-nowrap"> <td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {{ 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' if user.active else 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200' }}"> <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {{ 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' if user.active else 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200' }} transition-colors">
{{ 'Aktiv' if user.active else 'Inaktiv' }} {{ 'Aktiv' if user.active else 'Inaktiv' }}
</span> </span>
</td> </td>
<td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium"> <td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
<form method="post" action="{{ url_for('delete_user', user_id=user.id) }}" class="inline" onsubmit="return confirm('Benutzer wirklich löschen?');"> <form method="post" action="{{ url_for('delete_user', user_id=user.id) }}" class="inline" onsubmit="return confirm('Benutzer wirklich löschen?');">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300"> <button type="submit" class="text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300 transition-colors">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" /> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
</svg> </svg>
@@ -163,8 +163,8 @@
</div> </div>
<!-- Add User Form --> <!-- Add User Form -->
<div class="mt-8 bg-slate-50 dark:bg-slate-800 rounded-lg p-6"> <div class="mt-8 bg-slate-50 dark:bg-slate-800 rounded-lg p-6 transition-colors">
<h4 class="text-lg font-semibold text-slate-900 dark:text-white mb-4">Neuen Benutzer hinzufügen</h4> <h4 class="text-lg font-semibold text-slate-900 dark:text-white mb-4 transition-colors">Neuen Benutzer hinzufügen</h4>
<form action="{{ url_for('create_user') }}" method="post" class="space-y-4"> <form action="{{ url_for('create_user') }}" method="post" class="space-y-4">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
@@ -200,9 +200,9 @@
<!-- Printers Tab --> <!-- Printers Tab -->
{% if active_tab == 'printers' %} {% if active_tab == 'printers' %}
<div id="printers-tab" class="tab-pane active"> <div id="printers-tab" class="tab-pane active">
<div class="bg-white dark:bg-dark-card rounded-xl shadow-lg p-6"> <div class="bg-white dark:bg-dark-card rounded-xl shadow-lg p-6 transition-colors">
<div class="flex justify-between items-center mb-6"> <div class="flex justify-between items-center mb-6">
<h3 class="text-xl font-bold text-slate-900 dark:text-white">Drucker</h3> <h3 class="text-xl font-bold text-slate-900 dark:text-white transition-colors">Drucker</h3>
<form action="{{ url_for('admin_page', tab='printers') }}" method="get"> <form action="{{ url_for('admin_page', tab='printers') }}" method="get">
<button type="submit" class="btn btn-primary"> <button type="submit" class="btn btn-primary">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@@ -214,13 +214,13 @@
</div> </div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
{% for printer in printers %} {% for printer in printers %}
<div class="printer-card"> <div class="printer-card transition-colors">
<div class="printer-header"> <div class="printer-header">
<h4 class="printer-name">{{ printer.name }}</h4> <h4 class="printer-name">{{ printer.name }}</h4>
<div class="printer-actions"> <div class="printer-actions">
<form method="post" action="{{ url_for('delete_printer', printer_id=printer.id) }}" onsubmit="return confirm('Drucker wirklich löschen?');"> <form method="post" action="{{ url_for('delete_printer', printer_id=printer.id) }}" onsubmit="return confirm('Drucker wirklich löschen?');">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300"> <button type="submit" class="text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300 transition-colors">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" /> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
</svg> </svg>
@@ -230,59 +230,59 @@
</div> </div>
<div class="printer-info"> <div class="printer-info">
<div> <div>
<span class="text-sm text-slate-500 dark:text-slate-400">Modell:</span> <span class="text-sm text-slate-500 dark:text-slate-400 transition-colors">Modell:</span>
<span class="text-sm font-medium text-slate-900 dark:text-white">{{ printer.model }}</span> <span class="text-sm font-medium text-slate-900 dark:text-white transition-colors">{{ printer.model }}</span>
</div> </div>
<div> <div>
<span class="text-sm text-slate-500 dark:text-slate-400">IP-Adresse:</span> <span class="text-sm text-slate-500 dark:text-slate-400 transition-colors">IP-Adresse:</span>
<span class="text-sm font-medium text-slate-900 dark:text-white">{{ printer.ip_address }}</span> <span class="text-sm font-medium text-slate-900 dark:text-white transition-colors">{{ printer.ip_address }}</span>
</div> </div>
<div> <div>
<span class="text-sm text-slate-500 dark:text-slate-400">Standort:</span> <span class="text-sm text-slate-500 dark:text-slate-400 transition-colors">Standort:</span>
<span class="text-sm font-medium text-slate-900 dark:text-white">{{ printer.location or 'Nicht angegeben' }}</span> <span class="text-sm font-medium text-slate-900 dark:text-white transition-colors">{{ printer.location or 'Nicht angegeben' }}</span>
</div> </div>
</div> </div>
<div class="printer-status"> <div class="printer-status">
<div class="status-indicator {{ 'status-running' if printer.status == 'online' else 'status-stopped' }}"></div> <div class="status-indicator {{ 'status-running' if printer.status == 'online' else 'status-stopped' }} transition-colors"></div>
<span class="status-text">{{ 'Online' if printer.status == 'online' else 'Offline' }}</span> <span class="status-text transition-colors">{{ 'Online' if printer.status == 'online' else 'Offline' }}</span>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
<!-- Add Printer Form --> <!-- Add Printer Form -->
<div class="mt-8 bg-slate-50 dark:bg-slate-800 rounded-lg p-6"> <div class="mt-8 bg-slate-50 dark:bg-slate-800 rounded-lg p-6 transition-colors">
<h4 class="text-lg font-semibold text-slate-900 dark:text-white mb-4">Neuen Drucker hinzufügen</h4> <h4 class="text-lg font-semibold text-slate-900 dark:text-white mb-4 transition-colors">Neuen Drucker hinzufügen</h4>
<form action="{{ url_for('create_printer') }}" method="post" class="space-y-4"> <form action="{{ url_for('create_printer') }}" method="post" class="space-y-4">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<div class="grid grid-cols-1 md:grid-cols-2 gap-4"> <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<div class="form-group"> <div class="form-group">
<label for="printer-name" class="form-label">Name</label> <label for="printer-name" class="form-label transition-colors">Name</label>
<input type="text" id="printer-name" name="name" class="form-input" required> <input type="text" id="printer-name" name="name" class="form-input transition-colors" required>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="printer-model" class="form-label">Modell</label> <label for="printer-model" class="form-label transition-colors">Modell</label>
<input type="text" id="printer-model" name="model" class="form-input" required> <input type="text" id="printer-model" name="model" class="form-input transition-colors" required>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="printer-mac" class="form-label">MAC-Adresse</label> <label for="printer-mac" class="form-label transition-colors">MAC-Adresse</label>
<input type="text" id="printer-mac" name="mac_address" class="form-input" required> <input type="text" id="printer-mac" name="mac_address" class="form-input transition-colors" required>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="printer-location" class="form-label">Standort</label> <label for="printer-location" class="form-label transition-colors">Standort</label>
<input type="text" id="printer-location" name="location" class="form-input"> <input type="text" id="printer-location" name="location" class="form-input transition-colors">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="printer-plug-ip" class="form-label">Steckdosen-IP</label> <label for="printer-plug-ip" class="form-label transition-colors">Steckdosen-IP</label>
<input type="text" id="printer-plug-ip" name="plug_ip" class="form-input"> <input type="text" id="printer-plug-ip" name="plug_ip" class="form-input transition-colors">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="printer-plug-username" class="form-label">Steckdosen-Benutzername</label> <label for="printer-plug-username" class="form-label transition-colors">Steckdosen-Benutzername</label>
<input type="text" id="printer-plug-username" name="plug_username" class="form-input"> <input type="text" id="printer-plug-username" name="plug_username" class="form-input transition-colors">
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="printer-plug-password" class="form-label">Steckdosen-Passwort</label> <label for="printer-plug-password" class="form-label transition-colors">Steckdosen-Passwort</label>
<input type="password" id="printer-plug-password" name="plug_password" class="form-input"> <input type="password" id="printer-plug-password" name="plug_password" class="form-input transition-colors">
</div> </div>
</div> </div>
<div class="flex justify-end"> <div class="flex justify-end">
@@ -297,9 +297,9 @@
<!-- Scheduler Tab --> <!-- Scheduler Tab -->
{% if active_tab == 'scheduler' %} {% if active_tab == 'scheduler' %}
<div id="scheduler-tab" class="tab-pane active"> <div id="scheduler-tab" class="tab-pane active">
<div class="bg-white dark:bg-dark-card rounded-xl shadow-lg p-6"> <div class="bg-white dark:bg-dark-card rounded-xl shadow-lg p-6 transition-colors">
<div class="flex justify-between items-center mb-6"> <div class="flex justify-between items-center mb-6">
<h3 class="text-xl font-bold text-slate-900 dark:text-white">Scheduler Status</h3> <h3 class="text-xl font-bold text-slate-900 dark:text-white transition-colors">Scheduler Status</h3>
<div class="flex space-x-4"> <div class="flex space-x-4">
<form action="{{ url_for('start_scheduler') }}" method="post" class="inline"> <form action="{{ url_for('start_scheduler') }}" method="post" class="inline">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"> <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
@@ -324,26 +324,26 @@
</div> </div>
</div> </div>
<div class="scheduler-status"> <div class="scheduler-status">
<div class="bg-slate-50 dark:bg-slate-800 rounded-lg p-6 flex items-center justify-between"> <div class="bg-slate-50 dark:bg-slate-800 rounded-lg p-6 flex items-center justify-between transition-colors">
<div class="flex items-center"> <div class="flex items-center">
<div class="status-indicator {{ 'status-running pulse' if scheduler_status.running else 'status-stopped' }}"></div> <div class="status-indicator {{ 'status-running pulse' if scheduler_status.running else 'status-stopped' }}"></div>
<span class="text-xl font-medium ml-3 {{ 'text-success' if scheduler_status.running else 'text-error' }}"> <span class="text-xl font-medium ml-3 {{ 'text-green-600 dark:text-green-400' if scheduler_status.running else 'text-red-600 dark:text-red-400' }} transition-colors">
{{ 'Aktiv' if scheduler_status.running else 'Inaktiv' }} {{ 'Aktiv' if scheduler_status.running else 'Inaktiv' }}
</span> </span>
</div> </div>
<div class="text-slate-700 dark:text-slate-300"> <div class="text-slate-700 dark:text-slate-300 transition-colors">
{{ scheduler_status.message }} {{ scheduler_status.message }}
</div> </div>
</div> </div>
<div class="mt-6 bg-slate-50 dark:bg-slate-800 rounded-lg p-6"> <div class="mt-6 bg-slate-50 dark:bg-slate-800 rounded-lg p-6 transition-colors">
<h4 class="text-lg font-semibold text-slate-900 dark:text-white mb-4">Scheduler Informationen</h4> <h4 class="text-lg font-semibold text-slate-900 dark:text-white mb-4 transition-colors">Scheduler Informationen</h4>
<div class="space-y-4"> <div class="space-y-4">
<p class="text-slate-700 dark:text-slate-300"> <p class="text-slate-700 dark:text-slate-300 transition-colors">
Der Scheduler ist verantwortlich für die automatische Zuweisung und Ausführung von Druckaufträgen. Der Scheduler ist verantwortlich für die automatische Zuweisung und Ausführung von Druckaufträgen.
Er überwacht kontinuierlich den Status der Drucker und der anstehenden Jobs. Er überwacht kontinuierlich den Status der Drucker und der anstehenden Jobs.
</p> </p>
<p class="text-slate-700 dark:text-slate-300"> <p class="text-slate-700 dark:text-slate-300 transition-colors">
<strong>Wichtige Hinweise:</strong> <strong>Wichtige Hinweise:</strong>
<ul class="list-disc list-inside mt-2 space-y-1"> <ul class="list-disc list-inside mt-2 space-y-1">
<li>Der Scheduler sollte während des normalen Betriebs immer aktiv sein</li> <li>Der Scheduler sollte während des normalen Betriebs immer aktiv sein</li>
@@ -362,37 +362,37 @@
{% if active_tab == 'system' %} {% if active_tab == 'system' %}
<div id="system-tab" class="tab-pane active"> <div id="system-tab" class="tab-pane active">
<div class="grid grid-cols-1 md:grid-cols-2 gap-6"> <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="bg-white dark:bg-dark-card rounded-xl shadow-lg p-6"> <div class="bg-white dark:bg-dark-card rounded-xl shadow-lg p-6 transition-colors">
<h3 class="text-xl font-bold text-slate-900 dark:text-white mb-6">System Ressourcen</h3> <h3 class="text-xl font-bold text-slate-900 dark:text-white mb-6 transition-colors">System Ressourcen</h3>
<div class="space-y-6"> <div class="space-y-6">
<div> <div>
<div class="flex justify-between mb-2"> <div class="flex justify-between mb-2">
<span class="text-slate-700 dark:text-slate-300">CPU Auslastung</span> <span class="text-slate-700 dark:text-slate-300 transition-colors">CPU Auslastung</span>
<span class="text-slate-900 dark:text-white font-medium">{{ system_info.cpu }}%</span> <span class="text-slate-900 dark:text-white font-medium transition-colors">{{ system_info.cpu }}%</span>
</div> </div>
{{ render_progress_bar(system_info.cpu, 'blue')|safe }} {{ render_progress_bar(system_info.cpu, 'blue')|safe }}
</div> </div>
<div> <div>
<div class="flex justify-between mb-2"> <div class="flex justify-between mb-2">
<span class="text-slate-700 dark:text-slate-300">Arbeitsspeicher</span> <span class="text-slate-700 dark:text-slate-300 transition-colors">Arbeitsspeicher</span>
<span class="text-slate-900 dark:text-white font-medium">{{ system_info.memory }}%</span> <span class="text-slate-900 dark:text-white font-medium transition-colors">{{ system_info.memory }}%</span>
</div> </div>
{{ render_progress_bar(system_info.memory, 'green')|safe }} {{ render_progress_bar(system_info.memory, 'green')|safe }}
</div> </div>
<div> <div>
<div class="flex justify-between mb-2"> <div class="flex justify-between mb-2">
<span class="text-slate-700 dark:text-slate-300">Festplattenspeicher</span> <span class="text-slate-700 dark:text-slate-300 transition-colors">Festplattenspeicher</span>
<span class="text-slate-900 dark:text-white font-medium">{{ system_info.disk }}%</span> <span class="text-slate-900 dark:text-white font-medium transition-colors">{{ system_info.disk }}%</span>
</div> </div>
{{ render_progress_bar(system_info.disk, 'purple')|safe }} {{ render_progress_bar(system_info.disk, 'purple')|safe }}
</div> </div>
<div class="pt-4 border-t border-gray-200 dark:border-gray-700"> <div class="pt-4 border-t border-gray-200 dark:border-gray-700 transition-colors">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<span class="text-slate-700 dark:text-slate-300">System Uptime</span> <span class="text-slate-700 dark:text-slate-300 transition-colors">System Uptime</span>
<span class="text-slate-900 dark:text-white font-medium">{{ system_info.uptime }} Tage</span> <span class="text-slate-900 dark:text-white font-medium transition-colors">{{ system_info.uptime }} Tage</span>
</div> </div>
</div> </div>
</div> </div>

6
package-lock.json generated Normal file
View File

@@ -0,0 +1,6 @@
{
"name": "Projektarbeit-MYP",
"lockfileVersion": 3,
"requires": true,
"packages": {}
}