diff options
471 files changed, 5689 insertions, 6101 deletions
diff --git a/app/controllers/admin/courses.php b/app/controllers/admin/courses.php index 7765a2d..16e735c 100644 --- a/app/controllers/admin/courses.php +++ b/app/controllers/admin/courses.php @@ -634,7 +634,7 @@ class Admin_CoursesController extends AuthenticatedController $d['name'] = '<a href="'.URLHelper::getLink('dispatch.php/course/basicdata/view', ['cid' => $course->id]).'">' . htmlReady($course->name) .'</a> ' - .'<a href="'.URLHelper::getLink('dispatch.php/course/details/index/'. $course->id).'" data-dialog><button class="undecorated">'.Icon::create('info-circle', Icon::ROLE_INACTIVE)->asImg($params).'</button></a> ' + .'<a href="'.URLHelper::getLink('dispatch.php/course/details/index/'. $course->id).'" data-dialog><button class="undecorated">'.Icon::create('info-circle', Icon::ROLE_INACTIVE)->asSvg($params).'</button></a> ' .(!$course->visible ? _('(versteckt)') : ''); } if (in_array('number', $activated_fields)) { @@ -705,7 +705,7 @@ class Admin_CoursesController extends AuthenticatedController foreach ($icons as $icon) { $d['contents'] .= '<li class="my-courses-navigation-item '. ($icon->getImage()->signalsAttention() ? 'my-courses-navigation-important' : '').'"> <a href="'. URLHelper::getLink('dispatch.php/course/go', ['to' => $course->id, 'redirect_to' => $icon->getURL()]).'"'. ($icon->getTitle() ? ' title="'.htmlReady($icon->getTitle()).'"' : '') .'> - '. $icon->getImage()->asImg() .' + '. $icon->getImage()->asSvg() .' </a> </li>'; } diff --git a/app/controllers/admin/layout.php b/app/controllers/admin/layout.php new file mode 100644 index 0000000..bd91497 --- /dev/null +++ b/app/controllers/admin/layout.php @@ -0,0 +1,40 @@ +<?php +/** + * admin/layout.php - Layout for Stud.IP + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * @author Ron Lucke <lucke@elan-ev.de> + * @license http://www.gnu.org/licenses/gpl-2.0.html GPL version 2 + * @category Stud.IP + * @package admin + * @since 6.1 + */ + +class Admin_LayoutController extends AuthenticatedController +{ + public function before_filter(&$action, &$args) + { + parent::before_filter($action, $args); + $GLOBALS['perm']->check('root'); + PageLayout::setTitle(_('Darstellung')); + Navigation::activateItem('/admin/locations/layout'); + } + + public function index_action() + { + $this->render_vue_app( + Studip\VueApp::create('ThemeSettings') + ->withVuexStore( + 'theme-settings.module.js', + 'theme-settings-module', + [ + 'setUserId' => User::findCurrent()->id, + ] + ) + ); + } +} diff --git a/app/controllers/course/contentmodules.php b/app/controllers/course/contentmodules.php index bbda1b3..66fa2c5 100644 --- a/app/controllers/course/contentmodules.php +++ b/app/controllers/course/contentmodules.php @@ -300,7 +300,6 @@ class Course_ContentmodulesController extends AuthenticatedController $visibility = $tool ? $tool->getVisibilityPermission() : 'nobody'; $metadata = $plugin->getMetadata(); - $icon = $this->getIconFromMetadata($metadata, $plugin); $list[$plugin_id] = [ 'id' => $plugin_id, 'moduleclass' => get_class($plugin), @@ -309,7 +308,7 @@ class Course_ContentmodulesController extends AuthenticatedController 'displayname' => $displayname, 'visibility' => $visibility, 'active' => (bool) $tool, - 'icon' => $icon ? $icon->asImagePath() : null, + 'icon' => $this->getIconFromMetadata($metadata, $plugin), 'summary' => $metadata['summary'] ?? null, 'mandatory' => $this->sem_class->isModuleMandatory(get_class($plugin)), 'highlighted' => (bool) $plugin->isHighlighted(), diff --git a/app/controllers/course/members.php b/app/controllers/course/members.php index 22c6b1e..adeb4a8 100644 --- a/app/controllers/course/members.php +++ b/app/controllers/course/members.php @@ -205,7 +205,7 @@ class Course_MembersController extends AuthenticatedController $results = SimpleCollection::createFromArray($members)->pluck('email'); if (!empty($results)) { - return sprintf('<a href="mailto:%s">%s</a>', htmlReady(join(',', $results)), Icon::create('mail', attributes: ['title' => sprintf('E-Mail an alle %s versenden',$textStatus)])->asImg()); + return sprintf('<a href="mailto:%s">%s</a>', htmlReady(join(',', $results)), Icon::create('mail', attributes: ['title' => sprintf('E-Mail an alle %s versenden',$textStatus)])->asSvg()); } else { return null; } diff --git a/app/controllers/course/room_requests.php b/app/controllers/course/room_requests.php index df21a2a..85d7a70 100644 --- a/app/controllers/course/room_requests.php +++ b/app/controllers/course/room_requests.php @@ -625,7 +625,7 @@ class Course_RoomRequestsController extends AuthenticatedController } if ($request_dates_booked === 0) { $this->available_room_icons[$room->id] = - Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asImg( + Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asSvg( [ 'class' => 'text-bottom', 'title' => _('freier Raum') @@ -633,7 +633,7 @@ class Course_RoomRequestsController extends AuthenticatedController ); $available_rooms[] = $room; } elseif ($request_dates_booked < $request_time_intervals) { - $this->available_room_icons[$room->id] = Icon::create('exclaim-circle', Icon::ROLE_STATUS_YELLOW)->asImg([ + $this->available_room_icons[$room->id] = Icon::create('exclaim-circle', Icon::ROLE_STATUS_YELLOW)->asSvg([ 'class' => 'text-bottom', 'title' => _('teilweise belegter Raum') ]); diff --git a/app/controllers/course/wiki.php b/app/controllers/course/wiki.php index 81d933e..1dad1d0 100644 --- a/app/controllers/course/wiki.php +++ b/app/controllers/course/wiki.php @@ -59,8 +59,8 @@ class Course_WikiController extends AuthenticatedController '<a href="%s">%s</a>', URLHelper::getLink('dispatch.php/course/wiki/edit_toc'), $toc_content_empty - ? Icon::create('add')->asImg(['title' => _('Erstellen')]) - : Icon::create('edit')->asImg(['title' => _('Bearbeiten')]) + ? Icon::create('add')->asSvg(['title' => _('Erstellen')]) + : Icon::create('edit')->asSvg(['title' => _('Bearbeiten')]) ); $widget->setExtra($extra); } diff --git a/app/controllers/materialien/files.php b/app/controllers/materialien/files.php index a8d4823..57aed1b 100644 --- a/app/controllers/materialien/files.php +++ b/app/controllers/materialien/files.php @@ -424,7 +424,7 @@ class Materialien_FilesController extends MVVController } $output['document_id'] = $file->id; - $output['icon'] = $file->getIcon(Icon::ROLE_CLICKABLE)->asImg(['class' => 'text-bottom']); + $output['icon'] = $file->getIcon(Icon::ROLE_CLICKABLE)->asSvg(['class' => 'text-bottom']); $this->render_json($output); } diff --git a/app/controllers/messages.php b/app/controllers/messages.php index 65a5cea..3c374b2 100644 --- a/app/controllers/messages.php +++ b/app/controllers/messages.php @@ -198,7 +198,7 @@ class MessagesController extends AuthenticatedController { if ($this->default_message->attachment_folder) { foreach ($this->default_message->attachment_folder->getTypedFolder()->getFiles() as $filetype) { $this->default_attachments[] = [ - 'icon' => $filetype->getIcon('info')->asImg(['class' => 'text-bottom']), + 'icon' => $filetype->getIcon('info')->asSvg(['class' => 'text-bottom']), 'name' => $filetype->getFilename(), 'document_id' => $filetype->getId(), 'size' => $filetype->getSize() @@ -507,7 +507,7 @@ class MessagesController extends AuthenticatedController { if ($new_attachment_file_ref->store()) { $icon = FileManager::getIconForFileRef($new_attachment_file_ref); $this->default_attachments[] = [ - 'icon' => $icon->asImg(['class' => 'text-bottom']), + 'icon' => $icon->asSvg(['class' => 'text-bottom']), 'name' => $new_attachment_file_ref->name, 'document_id' => $new_attachment_file_ref->id, 'size' => relsize($new_attachment_file_ref->size, false) @@ -876,7 +876,7 @@ class MessagesController extends AuthenticatedController { $output['document_id'] = $uploaded['files'][0]->getId(); - $output['icon'] = $uploaded['files'][0]->getIcon(Icon::ROLE_CLICKABLE)->asImg(['class' => 'text-bottom']); + $output['icon'] = $uploaded['files'][0]->getIcon(Icon::ROLE_CLICKABLE)->asSvg(['class' => 'text-bottom']); $this->render_json($output); } @@ -975,7 +975,7 @@ class MessagesController extends AuthenticatedController { if ($action === 'overview') { if (MessageUser::countBySQL("snd_rec = 'rec' AND user_id = :id AND deleted != 1 LIMIT 1", ['id' => $GLOBALS['user']->id])) { $message = sprintf( - _("Möchten Sie wirklich alle Nachrichten im Posteingang löschen? Es werden %u Nachrichten endgültig gelöscht."), + _('Möchten Sie wirklich alle Nachrichten im Posteingang löschen? Es werden %u Nachrichten endgültig gelöscht.'), MessageUser::countBySQL("snd_rec = 'rec' AND user_id = :id AND deleted != 1", ['id' => $GLOBALS['user']->id]) ); $actions->addLink( diff --git a/app/controllers/oer/admin.php b/app/controllers/oer/admin.php index c394556..3404e54 100644 --- a/app/controllers/oer/admin.php +++ b/app/controllers/oer/admin.php @@ -129,7 +129,7 @@ class Oer_AdminController extends AuthenticatedController } $this->render_text(( - Icon::create("checkbox-".(Request::int("active") ? "" : "un")."checked")->asImg() + Icon::create("checkbox-".(Request::int("active") ? "" : "un")."checked")->asSvg() )); } @@ -144,7 +144,7 @@ class Oer_AdminController extends AuthenticatedController } $this->render_text(( - Icon::create("checkbox-".(Request::int("active") ? "" : "un")."checked")->asImg() + Icon::create('checkbox-'.(Request::int('active') ? '' : 'un').'checked')->asSvg() )); } diff --git a/app/views/admin/autoinsert/index.php b/app/views/admin/autoinsert/index.php index 33dfdcf..5773537 100644 --- a/app/views/admin/autoinsert/index.php +++ b/app/views/admin/autoinsert/index.php @@ -93,7 +93,7 @@ <?= $this->render_partial("admin/autoinsert/_status.php", ['status' => 'autor', 'auto_sem' => $auto_sem, 'domains' => $userdomains]) ?> <td class="actions"> <a href="<?= $controller->delete($auto_sem['seminar_id'] ) ?>"> - <?= Icon::create('trash')->asImg([ + <?= Icon::create('trash')->asSvg([ 'title' => _('Veranstaltung entfernen'), 'class' => 'text-top', ]) ?> diff --git a/app/views/admin/banner/index.php b/app/views/admin/banner/index.php index 11f9d8e..620f7a5 100644 --- a/app/views/admin/banner/index.php +++ b/app/views/admin/banner/index.php @@ -61,16 +61,16 @@ <td><?= $banner->priority ?> (<?= $banner->getViewProbability() ?>)</td> <td class="actions"> <a class="load-in-new-row" href="<?= $controller->info($banner, ['path' => $banner->banner_path]) ?>"> - <?= Icon::create('info')->asImg(['title' => _('Eigenschaften')]) ?> + <?= Icon::create('info')->asSvg(['title' => _('Eigenschaften')]) ?> </a> <a href="<?= $controller->edit($banner, ['path' => $banner->banner_path]) ?>" data-dialog="size=auto"> - <?= Icon::create('edit')->asImg(['title' => _('Banner bearbeiten')]) ?> + <?= Icon::create('edit')->asSvg(['title' => _('Banner bearbeiten')]) ?> </a> <a href="<?= $controller->reset($banner) ?>"> - <?= Icon::create('refresh')->asImg(['title' => _('Klicks/Views zurücksetzen')]) ?> + <?= Icon::create('refresh')->asSvg(['title' => _('Klicks/Views zurücksetzen')]) ?> </a> <a href="<?= $controller->delete($banner) ?>"> - <?= Icon::create('trash')->asImg(['title' => _('Banner löschen')]) ?> + <?= Icon::create('trash')->asSvg(['title' => _('Banner löschen')]) ?> </a> </td> </tr> diff --git a/app/views/admin/configuration/edit_configuration.php b/app/views/admin/configuration/edit_configuration.php index aa4c574..6d8354f 100644 --- a/app/views/admin/configuration/edit_configuration.php +++ b/app/views/admin/configuration/edit_configuration.php @@ -28,9 +28,9 @@ <?= _('Standard') ?> <? if ($config['is_default'] === '1'): ?> - <?= Icon::create('checkbox-checked', Icon::ROLE_INFO)->asImg(['title' => _('Ja')]) ?> + <?= Icon::create('checkbox-checked', Icon::ROLE_INFO)->asSvg(['title' => _('Ja')]) ?> <? elseif ($config['is_default'] === '0'): ?> - <?= Icon::create('checkbox-unchecked', Icon::ROLE_INFO)->asImg(['title' => _('Nein')]) ?> + <?= Icon::create('checkbox-unchecked', Icon::ROLE_INFO)->asSvg(['title' => _('Nein')]) ?> <? elseif ($config['is_default'] === null): ?> <em>- <?= _('kein Eintrag vorhanden') ?> -</em> <? endif ?> diff --git a/app/views/admin/configuration/table-row.php b/app/views/admin/configuration/table-row.php index a0725a5..3f7ae89 100644 --- a/app/views/admin/configuration/table-row.php +++ b/app/views/admin/configuration/table-row.php @@ -37,10 +37,10 @@ <td class="actions"> <? if (!Config::get()->fromEnv($field)): ?> <a data-dialog="size=auto" href="<?= $controller->link_for($linkchunk, compact('field')) ?>"> - <?= Icon::create('edit')->asImg(['title' => _('Konfigurationsparameter bearbeiten')]) ?> + <?= Icon::create('edit')->asSvg(['title' => _('Konfigurationsparameter bearbeiten')]) ?> </a> <? else: ?> - <?= Icon::create('ufo', Icon::ROLE_INFO)->asImg([ + <?= Icon::create('ufo', Icon::ROLE_INFO)->asSvg([ 'title' => _('Wert wurde über eine Umgebungsvariable gesetzt und kann an dieser Stelle nicht verändert werden.'), ]) ?> <? endif; ?> diff --git a/app/views/admin/course_wizard_steps/edit.php b/app/views/admin/course_wizard_steps/edit.php index 067ff2e..f25005c 100644 --- a/app/views/admin/course_wizard_steps/edit.php +++ b/app/views/admin/course_wizard_steps/edit.php @@ -25,7 +25,7 @@ <? foreach ($availableClasses as $className) : ?> <li> <a href="#" onClick="jQuery('input[name=classname]').val('<?= htmlReady($className) ?>');"> - <?= Icon::create('arr_2up', 'info')->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('arr_2up', 'info')->asSvg(['class' => "text-bottom"]) ?> <?= htmlReady($className) ?> </a> </li> diff --git a/app/views/admin/course_wizard_steps/index.php b/app/views/admin/course_wizard_steps/index.php index b951e21..d57d7ea 100644 --- a/app/views/admin/course_wizard_steps/index.php +++ b/app/views/admin/course_wizard_steps/index.php @@ -15,7 +15,7 @@ <?= _('Vorhandene Schritte im Anlegeassistenten für Veranstaltungen') ?> <span class="actions"> <a href="<?= $controller->url_for('admin/coursewizardsteps/edit') ?>" data-dialog="size=auto"> - <?= Icon::create('add')->asImg(tooltip2(_('Neuen Schritt hinzufügen'))) ?> + <?= Icon::create('add')->asSvg(tooltip2(_('Neuen Schritt hinzufügen'))) ?> </a> </span> </caption> diff --git a/app/views/admin/courseplanning/nonconform.php b/app/views/admin/courseplanning/nonconform.php index 08a128a..2ddda05 100644 --- a/app/views/admin/courseplanning/nonconform.php +++ b/app/views/admin/courseplanning/nonconform.php @@ -23,7 +23,7 @@ <td> <?= htmlReady($ncd['name']) ?> <a href="<?= $controller->link_for('course/details/index/' . $ncd['cid']) ?>" data-dialog="size=auto"> - <?= Icon::create('info-circle')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('info-circle')->asSvg(['class' => 'text-bottom']) ?> </a> </td> <td><?= htmlReady($ncd['start']) ?></td> diff --git a/app/views/admin/cronjobs/logs/index.php b/app/views/admin/cronjobs/logs/index.php index d76e153..b1f0195 100644 --- a/app/views/admin/cronjobs/logs/index.php +++ b/app/views/admin/cronjobs/logs/index.php @@ -114,19 +114,19 @@ use Studip\Button, Studip\LinkButton; <td><?= htmlReady($log->schedule->title ?: $log->schedule->task->name) ?></td> <td> <? if ($log->duration == -1): ?> - <?= Icon::create('question', Icon::ROLE_INACTIVE)->asImg(['title' => _('Läuft noch')]) ?> + <?= Icon::create('question', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Läuft noch')]) ?> <? elseif ($log->exception === null): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('Ja')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('Ja')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('Nein')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('Nein')]) ?> <? endif; ?> </td> <td style="text-align: right"> <a data-dialog href="<?= $controller->display($log, $pagination->getCurrentPage()) ?>"> - <?= Icon::create('admin')->asImg(['title' => _('Logeintrag anzeigen')]) ?> + <?= Icon::create('admin')->asSvg(['title' => _('Logeintrag anzeigen')]) ?> </a> <a href="<?= $controller->delete($log, $pagination->getCurrentPage()) ?>"> - <?= Icon::create('trash')->asImg(['title' => _('Logeintrag löschen')]) ?> + <?= Icon::create('trash')->asSvg(['title' => _('Logeintrag löschen')]) ?> </a> </td> </tr> diff --git a/app/views/admin/cronjobs/schedules/index.php b/app/views/admin/cronjobs/schedules/index.php index 12180a6..1872ff6 100644 --- a/app/views/admin/cronjobs/schedules/index.php +++ b/app/views/admin/cronjobs/schedules/index.php @@ -97,29 +97,29 @@ use Studip\Button, Studip\LinkButton; <td style="text-align: center;" data-sort-value="'<?= (int)($schedule->active && $schedule->task->active) ?>'"> <? if (!$schedule->task->active): ?> - <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE)->asImg(['title' => _('Cronjob kann nicht aktiviert werden, da die zugehörige ' . 'Aufgabe deaktiviert ist.')]) ?> + <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Cronjob kann nicht aktiviert werden, da die zugehörige ' . 'Aufgabe deaktiviert ist.')]) ?> <? elseif ($schedule->active): ?> <a href="<?= $controller->deactivate($schedule) ?>" data-behaviour="ajax-toggle"> - <?= Icon::create('checkbox-checked')->asImg(['title' => _('Cronjob deaktivieren')]) ?> + <?= Icon::create('checkbox-checked')->asSvg(['title' => _('Cronjob deaktivieren')]) ?> </a> <? else: ?> <a href="<?= $controller->activate($schedule) ?>" data-behaviour="ajax-toggle"> - <?= Icon::create('checkbox-unchecked')->asImg(['title' => _('Cronjob aktivieren')]) ?> + <?= Icon::create('checkbox-unchecked')->asSvg(['title' => _('Cronjob aktivieren')]) ?> </a> <? endif; ?> </td> <?= $this->render_partial('admin/cronjobs/schedules/periodic-schedule', $schedule->toArray() + ['display' => 'table-cells']) ?> <td style="text-align: right"> <a data-dialog href="<?= $controller->display($schedule) ?>"> - <?= Icon::create('admin')->asImg(['title' => _('Cronjob anzeigen')]) ?> + <?= Icon::create('admin')->asSvg(['title' => _('Cronjob anzeigen')]) ?> </a> <a href="<?= $controller->edit($schedule) ?>"> - <?= Icon::create('edit')->asImg(['title' => _('Cronjob bearbeiten')]) ?> + <?= Icon::create('edit')->asSvg(['title' => _('Cronjob bearbeiten')]) ?> </a> <a href="<?= $controller->link_for('admin/cronjobs/logs/schedule', $schedule) ?>"> - <?= Icon::create('log')->asImg(['title' => _('Log anzeigen')]) ?> + <?= Icon::create('log')->asSvg(['title' => _('Log anzeigen')]) ?> </a> <?= Icon::create('trash')->asInput([ 'data-confirm' => _('Wollen Sie den ausgewählten Cronjob wirklich löschen?'), diff --git a/app/views/admin/cronjobs/tasks/index.php b/app/views/admin/cronjobs/tasks/index.php index 9f2602d..ab510b0 100644 --- a/app/views/admin/cronjobs/tasks/index.php +++ b/app/views/admin/cronjobs/tasks/index.php @@ -50,22 +50,22 @@ use Studip\Button; <td style="text-align: center;" data-sort-value="'<?= (int) $task->active ?>'"> <? if ($task->active): ?> <a href="<?= $controller->deactivate($task) ?>" data-behaviour="ajax-toggle"> - <?= Icon::create('checkbox-checked')->asImg(['title' => _('Aufgabe deaktivieren')]) ?> + <?= Icon::create('checkbox-checked')->asSvg(['title' => _('Aufgabe deaktivieren')]) ?> </a> <? else: ?> <a href="<?= $controller->activate($task) ?>" data-behaviour="ajax-toggle"> - <?= Icon::create('checkbox-unchecked')->asImg(['title' => _('Aufgabe aktivieren')]) ?> + <?= Icon::create('checkbox-unchecked')->asSvg(['title' => _('Aufgabe aktivieren')]) ?> </a> <? endif; ?> </td> <td style="text-align: right"> <? if ($task->valid): ?> <a data-dialog href="<?= $controller->execute($task) ?>"> - <?= Icon::create('play')->asImg(['title' => _('Aufgabe ausführen')]) ?> + <?= Icon::create('play')->asSvg(['title' => _('Aufgabe ausführen')]) ?> </a> <? endif; ?> <a href="<?= $controller->link_for('admin/cronjobs/logs/task', $task) ?>"> - <?= Icon::create('log')->asImg(['title' => _('Log anzeigen')]) ?> + <?= Icon::create('log')->asSvg(['title' => _('Log anzeigen')]) ?> </a> <?= Icon::create('trash')->asInput([ 'data-confirm' => _('Wollen Sie die ausgewählte Aufgabe wirklich löschen?'), diff --git a/app/views/admin/datafields/index.php b/app/views/admin/datafields/index.php index 5d959d7..5441e24 100644 --- a/app/views/admin/datafields/index.php +++ b/app/views/admin/datafields/index.php @@ -89,7 +89,7 @@ <td> <? if (in_array($val->type, words('selectbox selectboxmultiple radio combo'))): ?> <a data-dialog="size=auto" href="<?= $controller->url_for('admin/datafields/config/'. $val->id) ?>"> - <?= Icon::create('edit')->asImg(['class'=> 'text-top', 'title' => 'Einträge bearbeiten']) ?> + <?= Icon::create('edit')->asSvg(['class'=> 'text-top', 'title' => 'Einträge bearbeiten']) ?> </a> <? endif; ?> <span><?= htmlReady($val->type) ?></span> @@ -131,31 +131,31 @@ <? if ($key === 'user'): ?> <td> <? if ($val->system): ?> - <?= Icon::create('checkbox-checked', Icon::ROLE_INACTIVE, ['title' => _('Ja')])->asImg() ?> + <?= Icon::create('checkbox-checked', Icon::ROLE_INACTIVE, ['title' => _('Ja')])->asSvg() ?> <? else: ?> - <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE, ['title' => _('Nein')])->asImg() ?> + <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE, ['title' => _('Nein')])->asSvg() ?> <? endif; ?> </td> <td> <? if ($val->is_userfilter): ?> - <?= Icon::create('checkbox-checked', Icon::ROLE_INACTIVE, ['title' => _('Ja')])->asImg() ?> + <?= Icon::create('checkbox-checked', Icon::ROLE_INACTIVE, ['title' => _('Ja')])->asSvg() ?> <? else: ?> - <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE, ['title' => _('Nein')])->asImg() ?> + <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE, ['title' => _('Nein')])->asSvg() ?> <? endif; ?> </td> <? elseif ($key === 'sem'): ?> <td> <? if ($val->is_required): ?> - <?= Icon::create('checkbox-checked', Icon::ROLE_INACTIVE, ['title' => _('Ja')])->asImg() ?> + <?= Icon::create('checkbox-checked', Icon::ROLE_INACTIVE, ['title' => _('Ja')])->asSvg() ?> <? else: ?> - <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE, ['title' => _('Nein')])->asImg() ?> + <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE, ['title' => _('Nein')])->asSvg() ?> <? endif; ?> </td> <td> <? if (trim($val->description)): ?> - <?= Icon::create('checkbox-checked', Icon::ROLE_INACTIVE, ['title' => _('Ja')])->asImg() ?> + <?= Icon::create('checkbox-checked', Icon::ROLE_INACTIVE, ['title' => _('Ja')])->asSvg() ?> <? else: ?> - <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE, ['title' => _('Nein')])->asImg() ?> + <?= Icon::create('checkbox-unchecked', Icon::ROLE_INACTIVE, ['title' => _('Nein')])->asSvg() ?> <? endif; ?> </td> <? else: ?> @@ -165,10 +165,10 @@ <td style="text-align: right;"><?= count($val) ?></td> <td class="actions"> <a href="<?=$controller->url_for('admin/datafields/edit/' . $val->id)?>" data-dialog> - <?= Icon::create('edit')->asImg(['title' => 'Datenfeld ändern']) ?> + <?= Icon::create('edit')->asSvg(['title' => 'Datenfeld ändern']) ?> </a> <a href="<?=$controller->url_for('admin/datafields/delete/' . $val->id)?>"> - <?= Icon::create('trash')->asImg(['title' => 'Datenfeld löschen']) ?> + <?= Icon::create('trash')->asSvg(['title' => 'Datenfeld löschen']) ?> </a> </td> </tr> diff --git a/app/views/admin/domain/index.php b/app/views/admin/domain/index.php index 4b709d7..74c6a2b 100644 --- a/app/views/admin/domain/index.php +++ b/app/views/admin/domain/index.php @@ -38,7 +38,7 @@ <td><?= $domain->countCourses() ?></td> <td class="actions"> <a href="<?= $controller->link_for("admin/domain/edit/{$domain->id}") ?>" data-dialog="size=auto"> - <?= Icon::create('edit')->asImg(tooltip2(_('bearbeiten'))) ?> + <?= Icon::create('edit')->asSvg(tooltip2(_('bearbeiten'))) ?> </a> <? if ($domain->countUsers() === 0): ?> <?= Icon::create('trash')->asInput(tooltip2(_('löschen')) + [ @@ -47,7 +47,7 @@ 'data-confirm' => _('Wollen Sie die Nutzerdomäne wirklich löschen?') ]) ?> <? else: ?> - <?= Icon::create('trash', Icon::ROLE_INACTIVE)->asImg(['title' => _('Domänen, denen noch Personen zugewiesen sind, können nicht gelöscht werden.')]) ?> + <?= Icon::create('trash', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Domänen, denen noch Personen zugewiesen sind, können nicht gelöscht werden.')]) ?> <? endif; ?> </td> </tr> diff --git a/app/views/admin/holidays/index.php b/app/views/admin/holidays/index.php index 98aa72e..4c523d3 100644 --- a/app/views/admin/holidays/index.php +++ b/app/views/admin/holidays/index.php @@ -58,7 +58,7 @@ </td> <td class="actions"> <a data-dialog="size=auto" href="<?= $controller->url_for('admin/holidays/edit/' . $holiday->id) ?>"> - <?= Icon::create('edit')->asImg(['title' => _('Ferienangaben bearbeiten')]) ?> + <?= Icon::create('edit')->asSvg(['title' => _('Ferienangaben bearbeiten')]) ?> </a> <?= Icon::create('trash')->asInput([ 'title' => _('Ferien löschen'), diff --git a/app/views/admin/ilias_interface/edit_server.php b/app/views/admin/ilias_interface/edit_server.php index 18c648a..803670a 100644 --- a/app/views/admin/ilias_interface/edit_server.php +++ b/app/views/admin/ilias_interface/edit_server.php @@ -82,9 +82,9 @@ <?=$ldap_options;?> </select><br> <?=_("Authentifizierungsplugin (nur LDAP/Shibboleth) beim Anlegen von externen Accounts übernehmen.");?> - <?=Icon::create('info-circle', Icon::ROLE_INACTIVE)->asImg(['title' => _("Wählen Sie hier ein Authentifizierungsplugin, damit neu angelegte ILIAS-Accounts den entsprechenden Authentifizierungsmodus erhalten, wenn dieser Modus auch für den vorhandenen Stud.IP-Account gilt. Andernfalls erhalten alle ILIAS-Accounts den default-Modus")]);?> + <?=Icon::create('info-circle', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Wählen Sie hier ein Authentifizierungsplugin, damit neu angelegte ILIAS-Accounts den entsprechenden Authentifizierungsmodus erhalten, wenn dieser Modus auch für den vorhandenen Stud.IP-Account gilt. Andernfalls erhalten alle ILIAS-Accounts den default-Modus')]);?> <? else : ?> - <br><?=_("(Um diese Einstellung zu nutzen muss zumindest ein Authentifizierungsplugin aktiviert sein.)");?> + <br><?=_('(Um diese Einstellung zu nutzen, muss zumindest ein Authentifizierungsplugin aktiviert sein.)');?> <input type="hidden" name="ilias_ldap_enable" value=""> <? endif ?> </label> diff --git a/app/views/admin/ilias_interface/index.php b/app/views/admin/ilias_interface/index.php index 00e4f36..fce9464 100644 --- a/app/views/admin/ilias_interface/index.php +++ b/app/views/admin/ilias_interface/index.php @@ -11,7 +11,7 @@ <?= _('Angebundene ILIAS-Installationen') ?> <span class="actions"> <a href="<?= $controller->url_for('admin/ilias_interface/edit_server/new') ?>" data-dialog="size=auto"> - <?= Icon::create('add')->asImg(tooltip2(_('Neue ILIAS-Installation hinzufügen'))) ?> + <?= Icon::create('add')->asSvg(tooltip2(_('Neue ILIAS-Installation hinzufügen'))) ?> </a> </span> </caption> @@ -44,7 +44,7 @@ } ?> <a href="<?= $controller->url_for('admin/ilias_interface/'.$cmd.'/'.$ilias_index) ?>"> - <?= Icon::create($img)->asImg(['title' => $text]) ?> + <?= Icon::create($img)->asSvg(['title' => $text]) ?> </a> </td> <td><?= htmlReady($ilias_config['name']) ?></td> diff --git a/app/views/admin/licenses/index.php b/app/views/admin/licenses/index.php index e72536a..e6d162d 100644 --- a/app/views/admin/licenses/index.php +++ b/app/views/admin/licenses/index.php @@ -34,9 +34,9 @@ </td> <td class="actions"> <a href="<?= $controller->link_for("admin/licenses/edit", ['identifier' => $license['identifier']]) ?>" data-dialog> - <?= Icon::create('edit')->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('edit')->asSvg(['class' => "text-bottom"]) ?> </a> - <form action="<?= $controller->link_for("admin/licenses/delete", ['identifier' => $license->getId()]) ?>" + <form action="<?= $controller->link_for('admin/licenses/delete', ['identifier' => $license->getId()]) ?>" method="post" data-confirm="<?= _("Wirklich löschen?") ?>" class="inline"> diff --git a/app/views/admin/lockrules/index.php b/app/views/admin/lockrules/index.php index 1214d83..b439b94 100644 --- a/app/views/admin/lockrules/index.php +++ b/app/views/admin/lockrules/index.php @@ -43,7 +43,7 @@ </td> <td class="actions"> <a href="<?= $controller->url_for('admin/lockrules/edit/' . $rule->lock_id) ?>"> - <?= Icon::create('edit')->asImg(['title' => _('Diese Regel bearbeiten')]) ?> + <?= Icon::create('edit')->asSvg(['title' => _('Diese Regel bearbeiten')]) ?> </a> <? diff --git a/app/views/admin/login_style/newpic.php b/app/views/admin/login_style/newpic.php index c5f7fbf..fe8948b 100644 --- a/app/views/admin/login_style/newpic.php +++ b/app/views/admin/login_style/newpic.php @@ -17,7 +17,7 @@ accept="image/gif,image/jpeg,image/png" required multiple> - <?= Icon::create('upload')->asImg(['class' => 'text-bottom upload']) ?> + <?= Icon::create('upload')->asSvg(['class' => 'text-bottom upload']) ?> </label> <label> diff --git a/app/views/admin/overlapping/conflicts.php b/app/views/admin/overlapping/conflicts.php index f1cd914..9923a9d 100644 --- a/app/views/admin/overlapping/conflicts.php +++ b/app/views/admin/overlapping/conflicts.php @@ -78,7 +78,7 @@ <div class="mvv-ovl-title"> <?= htmlReady($comp_cycle->comp_course->VeranstaltungsNummer) ?> <a href="<?= $controller->course_info($comp_cycle->id) ?>" data-dialog> - <?= Icon::create('info-circle', Icon::ROLE_INFO)->asImg(['style' => 'vertical-align: text-bottom;', 'title' => _('Veranstaltungsdetails')]) ?> + <?= Icon::create('info-circle', Icon::ROLE_INFO)->asSvg(['style' => 'vertical-align: text-bottom;', 'title' => _('Veranstaltungsdetails')]) ?> </a> <?= htmlReady($comp_cycle->comp_course->getFullName('type-name')) ?> <? if ($comp_cycle->comp_course->admission_turnout) : ?> diff --git a/app/views/admin/overlapping/courses.php b/app/views/admin/overlapping/courses.php index 5cb0a7d..22c4a49 100644 --- a/app/views/admin/overlapping/courses.php +++ b/app/views/admin/overlapping/courses.php @@ -30,7 +30,7 @@ <? if ($course_obj->admission_turnout) : ?> <?= sprintf(_('(erw. TN %s)'), htmlReady($course_obj->admission_turnout)) ?> <? endif; ?> - <?= Icon::create('date-cycle', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('date-cycle', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <?= sprintf('%s (%sx)', $cycle->toString('short'), count($dates)); ?> </div> <ul> diff --git a/app/views/admin/plugin/index.php b/app/views/admin/plugin/index.php index fb56d15..66e1a81 100644 --- a/app/views/admin/plugin/index.php +++ b/app/views/admin/plugin/index.php @@ -75,7 +75,7 @@ use Studip\Button, Studip\LinkButton; <td <? if (!$plugin['enabled']) echo 'class="quiet"'; ?>> <?= htmlReady($update_info[$pluginid]['version'] ?? '') ?> <? if ($plugin['automatic_update_url']): ?> - <?= Icon::create('install', Icon::ROLE_STATUS_RED)->asImg([ + <?= Icon::create('install', Icon::ROLE_STATUS_RED)->asSvg([ 'title' => _('Automatische Updates sind eingerichtet'), 'style' => 'vertical-align: text-bottom', ]) ?> diff --git a/app/views/admin/plugin/upload-drag-and-drop.php b/app/views/admin/plugin/upload-drag-and-drop.php index efa9923..dc0bc3c 100644 --- a/app/views/admin/plugin/upload-drag-and-drop.php +++ b/app/views/admin/plugin/upload-drag-and-drop.php @@ -9,7 +9,7 @@ <?= CSRFProtection::tokenTag() ?> <input type="hidden" name="studip_ticket" value="<?= get_ticket() ?>"> - <?= _('Plugin auswählen oder via Drag and Drop installieren') ?> + <span><?= _('Plugin auswählen oder via Drag and Drop installieren') ?></span> <input type="file" name="upload_file"> </form> </div>
\ No newline at end of file diff --git a/app/views/admin/role/assign_role.php b/app/views/admin/role/assign_role.php index 8215f41..ab85070 100644 --- a/app/views/admin/role/assign_role.php +++ b/app/views/admin/role/assign_role.php @@ -133,7 +133,7 @@ use Studip\Button, Studip\LinkButton; </td> <td class="actions"> <a href="<?= $controller->action_link('assign_role_institutes/' . $assignedrole->getRoleid() . '/' . $currentuser->id) ?>" data-dialog="size=auto;reload-on-close"> - <?= Icon::create('edit')->asImg(['title' => _('Einrichtungszuordnung bearbeiten')]) ?> + <?= Icon::create('edit')->asSvg(['title' => _('Einrichtungszuordnung bearbeiten')]) ?> </a> </td> </tr> diff --git a/app/views/admin/role/index.php b/app/views/admin/role/index.php index 80f5f23..54b25d8 100644 --- a/app/views/admin/role/index.php +++ b/app/views/admin/role/index.php @@ -60,7 +60,7 @@ <td class="actions"> <? if (!$role->getSystemtype()): ?> <a href="<?= $controller->link_for('admin/role/ask_remove_role', $role_id) ?>"> - <?= Icon::create('trash')->asImg(tooltip2(_('Rolle löschen'))) ?> + <?= Icon::create('trash')->asSvg(tooltip2(_('Rolle löschen'))) ?> </a> <? endif ?> </td> diff --git a/app/views/admin/sem_classes/_sem_type.php b/app/views/admin/sem_classes/_sem_type.php index c61257b..9ee57d6 100644 --- a/app/views/admin/sem_classes/_sem_type.php +++ b/app/views/admin/sem_classes/_sem_type.php @@ -27,12 +27,12 @@ $id = $sem_type['id']; </span> </span> (<?= sprintf(_("%s Veranstaltungen"), $number_of_seminars ?: _("keine")) ?>) - <a href="#" class="sem_type_edit" onClick="jQuery(this).closest('li').find('.name_container').children().toggle().find('input').focus(); return false;" title="<?= _("Veranstaltungstyp umbenennen") ?>"> - <?= Icon::create('edit')->asImg(['class' => "text-bottom"]) ?> + <a href="#" class="sem_type_edit" onClick="jQuery(this).closest('li').find('.name_container').children().toggle().find('input').focus(); return false;" title="<?= _('Veranstaltungstyp umbenennen') ?>"> + <?= Icon::create('edit')->asSvg(['class' => 'text-bottom']) ?> </a> <? if ($number_of_seminars == 0) : ?> <a href="#" class="sem_type_delete" onClick="return false;" title="<?= _("Veranstaltungstyp löschen") ?>"> - <?= Icon::create('trash')->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> </li> diff --git a/app/views/admin/sem_classes/details.php b/app/views/admin/sem_classes/details.php index 5f7de1b..c5553d6 100644 --- a/app/views/admin/sem_classes/details.php +++ b/app/views/admin/sem_classes/details.php @@ -26,7 +26,7 @@ <div> <span class="name"><?= htmlReady($sem_class['name']) ?></span> <a href="#" class="sem_class_edit" onClick="jQuery(this).closest('label').children().toggle().find('input:visible').focus(); return false;"> - <?= Icon::create('edit')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('edit')->asSvg(['class' => 'text-bottom']) ?> </a> </div> @@ -42,7 +42,7 @@ <div> <span class="description"><?= htmlReady($sem_class['description']) ?></span> <a href="#" class="sem_class_edit" onClick="jQuery(this).closest('label').children().toggle().find('input:visible').focus(); return false;"> - <?= Icon::create('edit')->asImg(['class' => 'text-bottom']) ?></a> + <?= Icon::create('edit')->asSvg(['class' => 'text-bottom']) ?></a> </div> <div class="description_input" style="display: none;"> <input id="sem_class_description" type="text" value="<?= htmlReady($sem_class['description']) ?>" onBlur="jQuery(this).closest('label.sem_class_name').children().toggle().find('.description').text(this.value);" style="width: 80%;"> @@ -60,11 +60,11 @@ <div class="add"> <div style="display: none; margin-left: 37px;"> <input type="text" id="new_sem_type" onBlur="if (!this.value) jQuery(this).closest('.add').children().toggle();"> - <a href="" onClick="STUDIP.admin_sem_class.add_sem_type(); return false;"><?= Icon::create('arr_2up', 'sort')->asImg(['class' => "text-bottom", "title" => _("hinzufügen")]) ?></a> + <a href="" onClick="STUDIP.admin_sem_class.add_sem_type(); return false;"><?= Icon::create('arr_2up', 'sort')->asSvg(['class' => 'text-bottom', 'title' => _('hinzufügen')]) ?></a> </div> <div style="margin-left: 21px;"> <a href="#" onClick="jQuery(this).closest('.add').children().toggle(); jQuery('#new_sem_type').focus(); return false;"> - <?= Icon::create('add')->asImg([ + <?= Icon::create('add')->asSvg([ 'class' => 'text-bottom', 'title' => _('Veranstaltungstyp hinzufügen'), ]) ?> diff --git a/app/views/admin/sem_classes/overview.php b/app/views/admin/sem_classes/overview.php index 1369b0c..5cae59c 100644 --- a/app/views/admin/sem_classes/overview.php +++ b/app/views/admin/sem_classes/overview.php @@ -31,8 +31,8 @@ <td><?= $sem_class->countSeminars() ?></td> <td><?= date("j.n.Y H:i", $sem_class['chdate']) ?> <?= _("Uhr") ?></td> <td class="actions"> - <a href="<?= URLHelper::getLink("dispatch.php/admin/sem_classes/details", ['id' => $id]) ?>" title="<?= _("Editieren dieser Veranstaltungskategorie") ?>"> - <?= Icon::create('edit')->asImg(['class' => 'text-bottom']) ?> + <a href="<?= URLHelper::getLink('dispatch.php/admin/sem_classes/details', ['id' => $id]) ?>" title="<?= _('Editieren dieser Veranstaltungskategorie') ?>"> + <?= Icon::create('edit')->asSvg(['class' => 'text-bottom']) ?> </a> </td> </tr> diff --git a/app/views/admin/specification/index.php b/app/views/admin/specification/index.php index 4538b6a..9933cce 100644 --- a/app/views/admin/specification/index.php +++ b/app/views/admin/specification/index.php @@ -43,10 +43,10 @@ </td> <td class="actions"> <a href="<?= $controller->edit($rule) ?>"> - <?= Icon::create('edit')->asImg(['title' => _('Regel bearbeiten')]) ?> + <?= Icon::create('edit')->asSvg(['title' => _('Regel bearbeiten')]) ?> </a> <? if (count($rule->courses) > 0): ?> - <?= Icon::create('trash', Icon::ROLE_INACTIVE)->asImg( + <?= Icon::create('trash', Icon::ROLE_INACTIVE)->asSvg( tooltip2(_('Die Regel kann nicht gelöscht werden, da sie noch verwendet wird.')) ) ?> <? else: ?> diff --git a/app/views/admin/user/_results.php b/app/views/admin/user/_results.php index 1541907..6fe0ad0 100644 --- a/app/views/admin/user/_results.php +++ b/app/views/admin/user/_results.php @@ -82,7 +82,7 @@ <?= htmlReady($user->username) ?> </a> <? if ($user->locked) : ?> - <?= Icon::create('lock-locked', Icon::ROLE_INFO)->asImg(tooltip2(sprintf(_('%s ist gesperrt'), htmlReady($user->getFullName())))) ?> + <?= Icon::create('lock-locked', Icon::ROLE_INFO)->asSvg(tooltip2(sprintf(_('%s ist gesperrt'), htmlReady($user->getFullName())))) ?> <? endif ?> </td> <td> diff --git a/app/views/admin/user/activities.php b/app/views/admin/user/activities.php index 0357b86..fce928f 100644 --- a/app/views/admin/user/activities.php +++ b/app/views/admin/user/activities.php @@ -32,7 +32,7 @@ <? if (!empty($query['details'])) : ?> <a href="<?= $controller->url_for('admin/user/activities/' . $user['user_id'], ['view' => $query['details']] + $params) ?>" <?= Request::isXhr() ? 'data-dialog="size=50%"' : ''?>> - <?= Icon::create('info-circle')->asImg(['title' => _('Übersicht anzeigen')]) ?> + <?= Icon::create('info-circle')->asSvg(['title' => _('Übersicht anzeigen')]) ?> </a> <? endif ?> </td> diff --git a/app/views/admin/user/edit.php b/app/views/admin/user/edit.php index b56bd69..d808a5b 100644 --- a/app/views/admin/user/edit.php +++ b/app/views/admin/user/edit.php @@ -266,7 +266,7 @@ use Studip\Button, Studip\LinkButton; </label> <label class="col-2"> - <?= Icon::create('accept', Icon::ROLE_ACCEPT)->asImg([ + <?= Icon::create('accept', Icon::ROLE_ACCEPT)->asSvg([ 'id' => 'pw_success', 'style' => 'display: none', ]) ?> @@ -574,10 +574,10 @@ use Studip\Button, Studip\LinkButton; <li> <?= htmlReady($inst_membership->institute->name) ?> - <? if ($GLOBALS['perm']->have_studip_perm("admin", $inst_membership->institut_id)) : ?> + <? if ($GLOBALS['perm']->have_studip_perm('admin', $inst_membership->institut_id)) : ?> <a data-dialog="size=auto" href="<?= $controller->url_for('admin/user/edit_institute/' . $user->user_id . '/' . $inst_membership->institut_id) ?>"> - <?= Icon::create('edit')->asImg([ + <?= Icon::create('edit')->asSvg([ 'class' => 'text-bottom', 'title' => _('Diese Einrichtung bearbeiten'), ]) ?> diff --git a/app/views/admission/courseset/index.php b/app/views/admission/courseset/index.php index 70033af..656b5ba 100644 --- a/app/views/admission/courseset/index.php +++ b/app/views/admission/courseset/index.php @@ -57,18 +57,18 @@ if ($coursesets) { </td> <td class="actions"> <a class="load-in-new-row" href="<?= $controller->link_for('', ['course_set_details' => $courseset->getId()]); ?>"> - <?= Icon::create('info')->asImg(['title' => _('Weitere Informationen einblenden')]) ?> + <?= Icon::create('info')->asSvg(['title' => _('Weitere Informationen einblenden')]) ?> </a> <? if ($courseset->isUserAllowedToEdit($GLOBALS['user']->id)) : ?> <a href="<?= $controller->link_for('admission/courseset/copy/'.$courseset->getId()); ?>"> - <?= Icon::create('clipboard')->asImg(['title' => _('Anmeldeset kopieren'), "alt" => _('Anmeldeset kopieren')]); ?> + <?= Icon::create('clipboard')->asSvg(['title' => _('Anmeldeset kopieren'), "alt" => _('Anmeldeset kopieren')]); ?> </a> <a href="<?= $controller->link_for('admission/courseset/configure/'.$courseset->getId()); ?>"> - <?= Icon::create('edit')->asImg(['title' => _('Anmeldeset bearbeiten')]) ?> + <?= Icon::create('edit')->asSvg(['title' => _('Anmeldeset bearbeiten')]) ?> </a> <a href="<?= $controller->link_for('admission/courseset/delete/'. $courseset->getId(), ['really' => 1]) ?>" data-confirm="<?= sprintf(_('Soll das Anmeldeset %s wirklich gelöscht werden?'), htmlReady($courseset->getName())) ?>"> - <?= Icon::create('trash')->asImg(['title' => _('Anmeldeset löschen')]) ?> + <?= Icon::create('trash')->asSvg(['title' => _('Anmeldeset löschen')]) ?> </a> <? endif ?> </td> diff --git a/app/views/admission/courseset/institutes.php b/app/views/admission/courseset/institutes.php index 30b78c3..30f10ba 100644 --- a/app/views/admission/courseset/institutes.php +++ b/app/views/admission/courseset/institutes.php @@ -5,7 +5,7 @@ * @var array $selectedInstitutes */ ?> -<?= Icon::create('arr_2down', Icon::ROLE_SORT)->asImg([ +<?= Icon::create('arr_2down', Icon::ROLE_SORT)->asSvg([ 'title' => _('Einrichtung hinzufügen'), 'onclick' => "STUDIP.Admission.updateInstitutes($('input[name=\"institute_id\"]').val(), '" . $controller->url_for('admission/courseset/institutes', !empty($courseset) ? $courseset->getId() : '') . "', '" . $controller->url_for('admission/courseset/instcourses', !empty($courseset) ? $courseset->getId() : '') . "', 'add')", ]) ?> @@ -19,7 +19,7 @@ <span class="hover_box"> <?= htmlReady($data['Name']) ?> <span class="action_icons"> - <?= Icon::create('trash')->asImg([ + <?= Icon::create('trash')->asSvg([ 'title' => _('Einrichtung entfernen'), 'onclick' => "STUDIP.Admission.updateInstitutes('{$institute}', '" . $controller->url_for('admission/courseset/institutes',$institute) . "', '" . $controller->url_for('admission/courseset/instcourses',$institute)."', 'delete')" ]); ?> diff --git a/app/views/admission/ruleadministration/index.php b/app/views/admission/ruleadministration/index.php index ef3fa1b..94d9f86 100644 --- a/app/views/admission/ruleadministration/index.php +++ b/app/views/admission/ruleadministration/index.php @@ -19,14 +19,14 @@ <td> <a href="<?= $controller->toggle_activation($type) ?>" role="button"> <? if ($details['active']): ?> - <?= Icon::create('checkbox-checked')->asImg([ + <?= Icon::create('checkbox-checked')->asSvg([ 'title' => sprintf( _('Die Regel "%s" ist aktiv. Klicken Sie hier, um sie zu deaktivieren.'), $details['name'] ) ]) ?> <? else: ?> - <?= Icon::create('checkbox-unchecked')->asImg([ + <?= Icon::create('checkbox-unchecked')->asSvg([ 'title' => sprintf( _('Die Regel "%s" ist inaktiv. Klicken Sie hier, um sie zu aktivieren.'), $details['name'] diff --git a/app/views/blubber/compose.php b/app/views/blubber/compose.php index 67ba605..2cdb89b 100644 --- a/app/views/blubber/compose.php +++ b/app/views/blubber/compose.php @@ -14,19 +14,19 @@ <div> <a href="#" onclick="$('.file_select_possibilities').hide(); $('.private_blubber_composer').show(); return false;"> - <?= Icon::create('group3')->asImg(50) ?> + <?= Icon::create('group3')->asSvg(50) ?> <?= _('Kontakte') ?> </a> <a href="<?= $controller->link_for('blubber/index/global') ?>"> - <?= Icon::create('globe')->asImg(50) ?> + <?= Icon::create('globe')->asSvg(50) ?> <?= _('Öffentlich') ?> </a> <? if (!$GLOBALS['perm']->have_perm('admin')) : ?> <a href="#" onclick="$('.file_select_possibilities').hide(); $('.course_blubber_composer').show(); return false;"> - <?= Icon::create('seminar')->asImg(50) ?> + <?= Icon::create('seminar')->asSvg(50) ?> <?= _('Veranstaltung') ?> </a> <? endif ?> @@ -67,10 +67,10 @@ </span> <a href="" onClick="$('#blubber_contacts').trigger('focus').select2('open'); return false;"> - <?= Icon::create('search')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('search')->asSvg(['class' => 'text-bottom']) ?> </a> <a href="" onClick="$('#blubber_contacts').val(null).trigger('change'); return false;"> - <?= Icon::create('decline')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('decline')->asSvg(['class' => 'text-bottom']) ?> </a> </div> <? endif ?> @@ -113,10 +113,10 @@ ->fireJSFunctionOnSelect('STUDIP.Blubber.Composer.vue.addUser')->render() ?> <a href="" onClick="$('input[name=search_user_id_parameter]').trigger('focus'); return false;"> - <?= Icon::create('search')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('search')->asSvg(['class' => 'text-bottom']) ?> </a> <a href="" onClick="STUDIP.Blubber.Composer.vue.clearUsers(); return false;"> - <?= Icon::create('decline')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('decline')->asSvg(['class' => 'text-bottom']) ?> </a> </div> </div> diff --git a/app/views/blubber/private_to_studygroup.php b/app/views/blubber/private_to_studygroup.php index 5e04599..6c49a40 100644 --- a/app/views/blubber/private_to_studygroup.php +++ b/app/views/blubber/private_to_studygroup.php @@ -4,9 +4,9 @@ enctype="multipart/form-data"> <div style="display: flex; justify-content: center; align-items: center"> - <?= Icon::create('blubber', Icon::ROLE_INFO)->asImg(50, ['style' => "margin-right: 50px;"]) ?> - <?= Icon::create('arr_2right', Icon::ROLE_INFO)->asImg(['style' => "margin-right: 50px;"]) ?> - <?= Icon::create('studygroup', Icon::ROLE_INFO)->asImg(50) ?> + <?= Icon::create('blubber', Icon::ROLE_INFO)->asSvg(50, ['style' => 'margin-right: 50px;']) ?> + <?= Icon::create('arr_2right', Icon::ROLE_INFO)->asSvg(['style' => 'margin-right: 50px;']) ?> + <?= Icon::create('studygroup', Icon::ROLE_INFO)->asSvg(50) ?> </div> <label> diff --git a/app/views/calendar/calendar/share_select.php b/app/views/calendar/calendar/share_select.php index 1f30a62..07de565 100644 --- a/app/views/calendar/calendar/share_select.php +++ b/app/views/calendar/calendar/share_select.php @@ -7,12 +7,12 @@ <div> <a href="<?= $controller->link_for('calendar/calendar/share') ?>" data-dialog="size=default"> - <?= Icon::create('group2')->asImg(50) ?> + <?= Icon::create('group2')->asSvg(50) ?> <?= _('Mit Nutzenden teilen') ?> </a> <a href="<?= $controller->link_for('calendar/calendar/publish') ?>" data-dialog="size=auto"> - <?= Icon::create('permalink')->asImg(50) ?> + <?= Icon::create('permalink')->asSvg(50) ?> <?= _('Link zu diesem Kalender') ?> </a> </div> diff --git a/app/views/calendar/contentbox/_termin.php b/app/views/calendar/contentbox/_termin.php index b6334e0..963116d 100644 --- a/app/views/calendar/contentbox/_termin.php +++ b/app/views/calendar/contentbox/_termin.php @@ -11,7 +11,7 @@ <header> <h1> <a href="<?= ContentBoxHelper::href($termin->getObjectId()) ?>"> - <?= Icon::create('date', Icon::ROLE_INACTIVE)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('date', Icon::ROLE_INACTIVE)->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($titles[$termin->getObjectId()] ?? $termin->getTitle()) ?> </a> </h1> @@ -26,19 +26,19 @@ <? if ($admin && $isProfile && $termin->getObjectClass() === 'CalendarDateAssignment') : ?> <a href="<?= URLHelper::getLink('dispatch.php/calendar/calendar') ?>" title="<?= _('Zum Kalender') ?>" aria-label="<?= _('Zum Kalender') ?>"> - <?= Icon::create('schedule')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('schedule')->asSvg(['class' => 'text-bottom']) ?> </a> <? if ($termin->calendar_date->isWritable($GLOBALS['user']->id)) : ?> <a href="<?= URLHelper::getLink('dispatch.php/calendar/date/edit/' . $termin->getPrimaryObjectId()) ?>" title="<?= _('Termin bearbeiten') ?>" aria-label="<?= _('Termin bearbeiten') ?>" data-dialog> - <?= Icon::create('edit')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('edit')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> <? elseif (!$course_range && in_array($termin->getObjectClass(), [CalendarCourseDate::class, CalendarCourseExDate::class])) : ?> <a href="<?= URLHelper::getLink('dispatch.php/course/dates', ['cid' => $termin->getPrimaryObjectId()]) ?>" title="<?= _('Zur Veranstaltung') ?>" aria-label="<?= _('Zur Veranstaltung') ?>"> - <?= Icon::create('seminar')->asImg(['class'=> 'text-bottom']) ?> + <?= Icon::create('seminar')->asSvg(['class'=> 'text-bottom']) ?> </a> <? endif ?> </nav> @@ -63,7 +63,7 @@ <? if (count($themen)) : ?> <? foreach ($themen as $thema) : ?> <h3> - <?= Icon::create('topic', Icon::ROLE_INFO)->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('topic', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($thema['title']) ?> </h3> <div> @@ -91,7 +91,7 @@ <? if (!$course_range && in_array($termin->getObjectClass(), [CalendarCourseDate::class, CalendarCourseExDate::class])) : ?> <div> <a href="<?= URLHelper::getLink('dispatch.php/course/dates', ['cid' => $termin->getPrimaryObjectId()]) ?>"> - <?= Icon::create('link-intern')->asImg(['class'=> 'text-bottom']) ?> + <?= Icon::create('link-intern')->asSvg(['class'=> 'text-bottom']) ?> <?= _('Zur Veranstaltung') ?> </a> </div> diff --git a/app/views/calendar/contentbox/display.php b/app/views/calendar/contentbox/display.php index 902df33..1c86a97 100644 --- a/app/views/calendar/contentbox/display.php +++ b/app/views/calendar/contentbox/display.php @@ -2,7 +2,7 @@ <article class="studip"> <header> <h1> - <?= Icon::create('schedule', 'info')->asImg() ?> + <?= Icon::create('schedule', 'info')->asSvg() ?> <?= htmlReady($title) ?> </h1> <nav> @@ -11,12 +11,12 @@ <a href="<?= URLHelper::getLink('dispatch.php/calendar/date/add') ?>" data-dialog="reload-on-close" title="<?= _('Neuen Termin anlegen') ?>" aria-label="<?= _('Neuen Termin anlegen') ?>"> - <?= Icon::create('add')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('add')->asSvg(['class' => 'text-bottom']) ?> </a> <? else: ?> <a href="<?= URLHelper::getLink("dispatch.php/course/timesrooms", ['cid' => $range_id]) ?>" title="<?= _('Neuen Termin anlegen') ?>" aria-label="<?= _('Neuen Termin anlegen') ?>"> - <?= Icon::create('admin')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('admin')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> <? endif ?> diff --git a/app/views/calendar/date/_add_edit_form.php b/app/views/calendar/date/_add_edit_form.php index 74dc955..fb5596e 100644 --- a/app/views/calendar/date/_add_edit_form.php +++ b/app/views/calendar/date/_add_edit_form.php @@ -33,7 +33,7 @@ class="validation_notes studip"> <header> <h1> - <?= Icon::create('info-circle', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom validation_notes_icon']) ?> + <?= Icon::create('info-circle', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom validation_notes_icon']) ?> <?= _('Hinweise zum Ausfüllen des Formulars') ?> </h1> </header> diff --git a/app/views/calendar/schedule/course_info.php b/app/views/calendar/schedule/course_info.php index c87e4cd..a9e0c02 100644 --- a/app/views/calendar/schedule/course_info.php +++ b/app/views/calendar/schedule/course_info.php @@ -58,12 +58,12 @@ <? if ($GLOBALS['perm']->have_studip_perm('user', $course->id)) : ?> <a href="<?= URLHelper::getLink('dispatch.php/course/overview', ['cid' => $course->id]) ?>"> <?= _('Direkt zur Veranstaltung') ?> - <?= Icon::create('link-intern')->asImg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> + <?= Icon::create('link-intern')->asSvg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> </a> <? else : ?> <a href="<?= URLHelper::getLink('dispatch.php/course/details', ['sem_id' => $course->id]) ?>"> <?= _('Direkt zur Veranstaltung') ?> - <?= Icon::create('link-intern')->asImg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> + <?= Icon::create('link-intern')->asSvg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> </a> <? endif ?> </section> diff --git a/app/views/consultation/overview/booked.php b/app/views/consultation/overview/booked.php index 69a0cd9..ebe5a35 100644 --- a/app/views/consultation/overview/booked.php +++ b/app/views/consultation/overview/booked.php @@ -46,7 +46,7 @@ </td> <td class="actions"> <a href="<?= $controller->cancel($slot->block, $slot, 1) ?>" data-dialog="size=auto"> - <?= Icon::create('trash')->asImg(tooltip2(_('Termin absagen'))) ?> + <?= Icon::create('trash')->asSvg(tooltip2(_('Termin absagen'))) ?> </a> </td> </tr> diff --git a/app/views/consultation/overview/index.php b/app/views/consultation/overview/index.php index ef7f208..63f35ba 100644 --- a/app/views/consultation/overview/index.php +++ b/app/views/consultation/overview/index.php @@ -54,14 +54,14 @@ <td class="actions"> <? if ($slot->isOccupied($GLOBALS['user']->id)): ?> <a href="<?= $controller->cancel($block, $slot) ?>" data-dialog="size=auto"> - <?= Icon::create('trash')->asImg(tooltip2(_('Termin absagen'))) ?> + <?= Icon::create('trash')->asSvg(tooltip2(_('Termin absagen'))) ?> </a> <? elseif ($slot->userMayCreateBookingForSlot()): ?> <a href="<?= $controller->book($block, $slot) ?>" data-dialog="size=auto"> - <?= Icon::create('add')->asImg(tooltip2(_('Termin reservieren'))) ?> + <?= Icon::create('add')->asSvg(tooltip2(_('Termin reservieren'))) ?> </a> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_INACTIVE)->asImg(tooltip2(_('Dieser Termin ist für Buchungen gesperrt.'))) ?> + <?= Icon::create('decline', Icon::ROLE_INACTIVE)->asSvg(tooltip2(_('Dieser Termin ist für Buchungen gesperrt.'))) ?> <? endif; ?> </td> </tr> diff --git a/app/views/consultation/overview/ungrouped.php b/app/views/consultation/overview/ungrouped.php index c9eb519..023d499 100644 --- a/app/views/consultation/overview/ungrouped.php +++ b/app/views/consultation/overview/ungrouped.php @@ -84,14 +84,14 @@ <td class="actions"> <? if ($slot->isOccupied($GLOBALS['user']->id)): ?> <a href="<?= $controller->cancel($block, $slot) ?>" data-dialog="size=auto"> - <?= Icon::create('trash')->asImg(tooltip2(_('Termin absagen'))) ?> + <?= Icon::create('trash')->asSvg(tooltip2(_('Termin absagen'))) ?> </a> <? elseif ($slot->userMayCreateBookingForSlot()): ?> <a href="<?= $controller->book($block, $slot) ?>" data-dialog="size=auto"> - <?= Icon::create('add')->asImg(tooltip2(_('Termin reservieren'))) ?> + <?= Icon::create('add')->asSvg(tooltip2(_('Termin reservieren'))) ?> </a> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_INACTIVE)->asImg(tooltip2(_('Dieser Termin ist für Buchungen gesperrt.'))) ?> + <?= Icon::create('decline', Icon::ROLE_INACTIVE)->asSvg(tooltip2(_('Dieser Termin ist für Buchungen gesperrt.'))) ?> <? endif; ?> </td> </tr> diff --git a/app/views/contents/courseware/courses_overview.php b/app/views/contents/courseware/courses_overview.php index 61fba02..b866fb2 100644 --- a/app/views/contents/courseware/courses_overview.php +++ b/app/views/contents/courseware/courses_overview.php @@ -25,7 +25,7 @@ <li class="tile <?= htmlReady($element['payload']['color'])?>"> <a href="<?= URLHelper::getLink('dispatch.php/course/courseware/?cid='.$element['range_id'].'#/structural_element/'.$element['id']) ?>"> <? if ($element->getImageUrl() === null) : ?> - <div class="preview-image default-image" style="<?= Icon::create('courseware')->asCSS(112) ?>"> + <div class="preview-image default-image" style="background-image: url(<?= Icon::create('courseware')->asImagePath() ?>); background-size: 112px" > </div> <? else : ?> <div class="preview-image" style="background-image: url(<?= htmlReady($element->getImageUrl()) ?>)" ></div> diff --git a/app/views/contents/overview/index.php b/app/views/contents/overview/index.php index 7f79113..37c81e9 100644 --- a/app/views/contents/overview/index.php +++ b/app/views/contents/overview/index.php @@ -5,7 +5,7 @@ <a href="<?= URLHelper::getLink($navigation->getURL()) ?>" class="content-item-link"> <div class="content-item-img-wrapper"> <? if ($navigation->getImage()): ?> - <?= $navigation->getImage()->asImg(64, $navigation->getLinkAttributes()) ?> + <?= $navigation->getImage()->asSvg(64, $navigation->getLinkAttributes()) ?> <? endif ?> </div> <div class="content-item-text"> diff --git a/app/views/course/basicdata/view.php b/app/views/course/basicdata/view.php index 62c0620..4b8dac3 100644 --- a/app/views/course/basicdata/view.php +++ b/app/views/course/basicdata/view.php @@ -133,12 +133,12 @@ $dialog_attr = Request::isXhr() ? ' data-dialog="size=50%"' : ''; <? if ($perm_dozent && !$dozent_is_locked): ?> <? if ($num > 0) : ?> <button class="as-link" formaction="<?= $controller->link_for('course/basicdata/priorityupfor', $course_id, $dozent['user_id'], 'dozent') ?>" <?= $dialog_attr ?>> - <?= Icon::create('arr_2up', Icon::ROLE_SORT)->asImg(['class' => 'middle']) ?> + <?= Icon::create('arr_2up', Icon::ROLE_SORT)->asSvg(['class' => 'middle']) ?> </button> <? endif; ?> <? if ($num < count($dozenten) - 1): ?> <button class="as-link" formaction="<?= $controller->link_for('course/basicdata/prioritydownfor', $course_id, $dozent['user_id'], 'dozent') ?>" <?= $dialog_attr ?>> - <?= Icon::create('arr_2down', Icon::ROLE_SORT)->asImg(['class' => 'middle']) ?> + <?= Icon::create('arr_2down', Icon::ROLE_SORT)->asSvg(['class' => 'middle']) ?> </button> <? endif; ?> <?= Icon::create('trash')->asInput([ @@ -270,12 +270,12 @@ $dialog_attr = Request::isXhr() ? ' data-dialog="size=50%"' : ''; <? if ($perm_dozent && !$tutor_is_locked): ?> <? if ($num > 0) : ?> <button class="as-link" formaction="<?= $controller->link_for('course/basicdata/priorityupfor', $course_id, $tutor['user_id'], 'tutor') ?>" <?= $dialog_attr ?>> - <?= Icon::create('arr_2up', Icon::ROLE_SORT)->asImg(['class' => 'middle']) ?> + <?= Icon::create('arr_2up', Icon::ROLE_SORT)->asSvg(['class' => 'middle']) ?> </button> <? endif; ?> <? if ($num < count($tutoren) - 1) : ?> <button class="as-link" formaction="<?= $controller->link_for('course/basicdata/prioritydownfor', $course_id, $tutor['user_id'], 'tutor') ?>" <?= $dialog_attr ?>> - <?= Icon::create('arr_2down', Icon::ROLE_SORT)->asImg(['class' => 'middle']) ?> + <?= Icon::create('arr_2down', Icon::ROLE_SORT)->asSvg(['class' => 'middle']) ?> </button> <? endif; ?> <?= Icon::create('trash')->asInput([ diff --git a/app/views/course/contentmodules/info.php b/app/views/course/contentmodules/info.php index 48323c4..97dc2b0 100644 --- a/app/views/course/contentmodules/info.php +++ b/app/views/course/contentmodules/info.php @@ -12,7 +12,7 @@ <div class="header"> <div class="image"> <? if ($metadata['icon']): ?> - <?= $metadata['icon']->copyWithRole(Icon::ROLE_INFO)->asImg(100) ?> + <?= $metadata['icon']->copyWithRole(Icon::ROLE_INFO)->asSvg(100) ?> <? endif; ?> </div> <div class="text"> diff --git a/app/views/course/dates/_date_row-exdate.php b/app/views/course/dates/_date_row-exdate.php index 2a179ef..e47c999 100644 --- a/app/views/course/dates/_date_row-exdate.php +++ b/app/views/course/dates/_date_row-exdate.php @@ -1,6 +1,6 @@ <tr id="date_<?= $date->id ?>" class="ausfall" data-termin-id="<?= htmlReady($date->id) ?>"> <td data-sort-value="<?= htmlReady($date->date) ?>" class="date_name"> - <?= Icon::create('date', Icon::ROLE_INFO)->asImg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> + <?= Icon::create('date', Icon::ROLE_INFO)->asSvg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> <?= htmlReady($date->getFullName()) ?> <?= tooltipIcon($date->content) ?> <? if (count($date->dozenten) > 0): ?> diff --git a/app/views/course/dates/_date_row.php b/app/views/course/dates/_date_row.php index 3cad99b..b45bd55 100644 --- a/app/views/course/dates/_date_row.php +++ b/app/views/course/dates/_date_row.php @@ -18,7 +18,7 @@ $dialog_url = $show_raumzeit <tr id="date_<?= $date->id ?>" <? if (!empty($is_next_date)) echo 'class="nextdate" title="' . _('Der nächste Termin') . '"'; ?> data-termin-id="<?= htmlReady($date->id) ?>"> <td data-sort-value="<?= htmlReady($date->date) ?>" class="date_name"> <a href="<?= $dialog_url ?>" data-dialog> - <?= Icon::create($icon)->asImg(Icon::SIZE_INLINE,['class' => 'text-bottom']) ?> + <?= Icon::create($icon)->asSvg(Icon::SIZE_INLINE,['class' => 'text-bottom']) ?> <?= htmlReady($date->getFullName(CourseDate::FORMAT_VERBOSE)) ?> </a> <? if (count($date->dozenten) > 0): ?> diff --git a/app/views/course/dates/_topic_li.php b/app/views/course/dates/_topic_li.php index 88e267f..9353ddb 100644 --- a/app/views/course/dates/_topic_li.php +++ b/app/views/course/dates/_topic_li.php @@ -1,11 +1,11 @@ <li data-issue_id="<?= $topic->id ?>" class="topic_<?= $date->id ?>_<?= $topic->id ?>"> <a href="<?= $controller->url_for("course/topics#{$topic->id}", ['open' => $topic->id]) ?>" class="title"> - <?= Icon::create('topic')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('topic')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($topic['title']) ?> </a> <? if ($has_access) : ?> <a href="#" onClick="STUDIP.Dates.removeTopicFromIcon.call(this); return false;"> - <?= Icon::create('trash')->asImg(['class' => 'text-bottom'] + tooltip2(_('Thema entfernen'))) ?> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom'] + tooltip2(_('Thema entfernen'))) ?> </a> <? endif ?> </li> diff --git a/app/views/course/dates/current_day_dates.php b/app/views/course/dates/current_day_dates.php index c0f92d7..9df4b09 100644 --- a/app/views/course/dates/current_day_dates.php +++ b/app/views/course/dates/current_day_dates.php @@ -12,7 +12,7 @@ <? foreach ($dates as $date): ?> <tr> <td class="date_name"> - <?= Icon::create('date')->asImg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> + <?= Icon::create('date')->asSvg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> <?= htmlReady($date->getFullName(CourseDate::FORMAT_VERBOSE)) ?> </td> <td> diff --git a/app/views/course/details/index.php b/app/views/course/details/index.php index 02a18a8..98293a2 100644 --- a/app/views/course/details/index.php +++ b/app/views/course/details/index.php @@ -340,7 +340,7 @@ <a class="module-info" href="<?= URLHelper::getLink($module['nav']->getUrl())?>"> <?= htmlReady($module['title']) ?> <? if ($module['nav']->getImage()) : ?> - <?= $module['nav']->getImage()->asImg($module['nav']->getLinkAttributes()) ?> + <?= $module['nav']->getImage()->asSvg($module['nav']->getLinkAttributes()) ?> <? endif ?> <span><?= htmlReady($module['nav']->getTitle())?></span> </a> diff --git a/app/views/course/forum/discussion_types/index.php b/app/views/course/forum/discussion_types/index.php index 8500d90..a196342 100644 --- a/app/views/course/forum/discussion_types/index.php +++ b/app/views/course/forum/discussion_types/index.php @@ -37,7 +37,7 @@ use Forum\ForumDiscussionType; <tr> <td> <?php if ($type->icon) : ?> - <?= Icon::create($type->icon, ['title' => htmlReady($type->icon)])->asImg(24) ?> + <?= Icon::create($type->icon, ['title' => htmlReady($type->icon)])->asSvg(24) ?> <?php endif; ?> </td> <td> diff --git a/app/views/course/ilias_interface/add_object.php b/app/views/course/ilias_interface/add_object.php index ddb4fed..6e015a7 100644 --- a/app/views/course/ilias_interface/add_object.php +++ b/app/views/course/ilias_interface/add_object.php @@ -85,7 +85,7 @@ <? foreach ($ilias_modules as $module_id => $module) : ?> <tr> <td> - <?= Icon::create('learnmodule')->asImg([ + <?= Icon::create('learnmodule')->asSvg([ 'title' => $module->getModuleTypeName(), ]) ?> </td> diff --git a/app/views/course/management/index.php b/app/views/course/management/index.php index c7ab4bf..06fabf7 100644 --- a/app/views/course/management/index.php +++ b/app/views/course/management/index.php @@ -5,7 +5,7 @@ <a href="<?= URLHelper::getLink($nav->getURL()) ?>"> <h3> <? if ($nav->getImage()): ?> - <?= $nav->getImage()->asImg(false, $nav->getLinkAttributes()) ?> + <?= $nav->getImage()->asSvg(false, $nav->getLinkAttributes()) ?> <? endif; ?> <?= htmlReady($nav->getTitle()) ?> </h3> diff --git a/app/views/course/statusgroups/_group.php b/app/views/course/statusgroups/_group.php index 8cc8a5a..3649e9b 100644 --- a/app/views/course/statusgroups/_group.php +++ b/app/views/course/statusgroups/_group.php @@ -20,7 +20,7 @@ <a class="no-contentbox-link" href="<?= $controller->url_for('course/statusgroups/groupinfo', $group->id) ?>" data-dialog="size=auto"> - <?= Icon::create('info-circle')->asImg([ + <?= Icon::create('info-circle')->asSvg([ 'title' => sprintf(_('Informationen zu %s'), $group->name) ]) ?> </a> @@ -137,7 +137,7 @@ 'course_id' => $course_id, 'default_subject' => $course_title.' ('.$group->name.')' ]) ?>" data-dialog="size=auto;"> - <?= Icon::create('mail')->asImg(['title' => _('Nachricht an alle nicht zugeordneten Personen schicken')]) ?> + <?= Icon::create('mail')->asSvg(['title' => _('Nachricht an alle nicht zugeordneten Personen schicken')]) ?> </a> </nav> <?php endif ?> diff --git a/app/views/course/studygroup/_members_gallery.php b/app/views/course/studygroup/_members_gallery.php index 52a81f9..0c98c26 100644 --- a/app/views/course/studygroup/_members_gallery.php +++ b/app/views/course/studygroup/_members_gallery.php @@ -15,7 +15,7 @@ <div> <a href="<?= $controller->link_for('messages/write', ['rec_uname' => $m['username']]) ?>" data-dialog="size=50%"> - <?= Icon::create('mail')->asImg(['title' => _('Nachricht schreiben')]) ?> + <?= Icon::create('mail')->asSvg(['title' => _('Nachricht schreiben')]) ?> </a> <? if ($GLOBALS['perm']->have_studip_perm('tutor', $sem_id)): ?> <?= $this->render_partial('course/studygroup/_members_options.php', compact('m')) ?> diff --git a/app/views/course/studygroup/_members_list.php b/app/views/course/studygroup/_members_list.php index c1dbc26..a8cec1e 100644 --- a/app/views/course/studygroup/_members_list.php +++ b/app/views/course/studygroup/_members_list.php @@ -51,7 +51,7 @@ <td class="actions"> <a href="<?= $controller->link_for('messages/write', ['rec_uname' => $m['username']]) ?>" data-dialog="size=50%"> - <?= Icon::create('mail')->asImg(['title' => _('Nachricht schreiben')]) ?> + <?= Icon::create('mail')->asSvg(['title' => _('Nachricht schreiben')]) ?> </a> <? if ($GLOBALS['perm']->have_studip_perm('tutor', $sem_id)) : ?> <?= $this->render_partial('course/studygroup/_members_options.php', compact('m')) ?> diff --git a/app/views/course/studygroup/_members_options.php b/app/views/course/studygroup/_members_options.php index 6c34b87..bad7242 100644 --- a/app/views/course/studygroup/_members_options.php +++ b/app/views/course/studygroup/_members_options.php @@ -1,18 +1,18 @@ <? if ($GLOBALS['perm']->have_studip_perm('dozent', $sem_id) && $GLOBALS['perm']->have_studip_perm('tutor', $sem_id, $m['user_id'])) : ?> <a href="<?= $controller->link_for('course/studygroup/edit_members/downgrade', $type, ['user' => $m['username']]) ?>" data-confirm="<?= _('Wollen Sie die Person wirklich runterstufen?') ?>"> - <?= Icon::create('arr_2down')->asImg(['title' => _('Runterstufen')]) ?> + <?= Icon::create('arr_2down')->asSvg(['title' => _('Runterstufen')]) ?> </a> <? endif ?> <? if ($GLOBALS['perm']->have_studip_perm('dozent', $sem_id) && !$GLOBALS['perm']->have_studip_perm('dozent', $sem_id, $m['user_id'])) : ?> <a href="<?= $controller->link_for('course/studygroup/edit_members/promote', $type, ['user' => $m['username']]) ?>" data-confirm="<?= _('Wollen Sie die Person wirklich hochstufen?') ?>"> - <?= Icon::create('arr_2up')->asImg(['title' => _('Hochstufen')])?> + <?= Icon::create('arr_2up')->asSvg(['title' => _('Hochstufen')])?> </a> <? endif ?> <? if ($m['user_id'] !== $GLOBALS['user']->id && $GLOBALS['perm']->have_studip_perm('dozent', $sem_id)): ?> <a href="<?= $controller->link_for('course/studygroup/edit_members/remove', ['user' => $m['username']]) ?>" data-confirm="<?= _('Möchten Sie die Person wirklich aus der Studiengruppe entfernen?') ?>"> - <?= Icon::create('trash')->asImg(['title' => _('Rauswerfen')])?> + <?= Icon::create('trash')->asSvg(['title' => _('Entfernen')])?> </a> <? endif; ?> diff --git a/app/views/course/studygroup/members.php b/app/views/course/studygroup/members.php index 503991d..060f339 100644 --- a/app/views/course/studygroup/members.php +++ b/app/views/course/studygroup/members.php @@ -88,11 +88,11 @@ </td> <td class="actions"> <a href="<?= $controller->edit_members('accept', ['user' => $p->username]) ?>"> - <?= Icon::create('accept')->asImg(['title' => _('Eintragen')]) ?> + <?= Icon::create('accept')->asSvg(['title' => _('Eintragen')]) ?> </a> <a href="<?= $controller->edit_members('deny', ['user' => $p->username]) ?>" data-confirm="<?= _('Wollen Sie die Mitgliedschaft wirklich ablehnen?') ?>"> - <?= Icon::create('trash')->asImg(['title' => _('Mitgliedschaft ablehnen')]) ?> + <?= Icon::create('trash')->asSvg(['title' => _('Mitgliedschaft ablehnen')]) ?> </a> </td> </tr> @@ -156,7 +156,7 @@ </td> <td class="actions"> <a href="<?= $controller->edit_members('cancelInvitation', ['user' => $p->user->username]) ?>" data-confirm="<?= _('Wollen Sie die Einladung wirklich löschen?') ?>"> - <?= Icon::create('trash')->asImg(['title' => _('Einladung löschen')]) ?> + <?= Icon::create('trash')->asSvg(['title' => _('Einladung löschen')]) ?> </a> </td> </tr> diff --git a/app/views/course/studygroup/widget.php b/app/views/course/studygroup/widget.php index fc0f133..cf0f787 100644 --- a/app/views/course/studygroup/widget.php +++ b/app/views/course/studygroup/widget.php @@ -3,10 +3,10 @@ <h1> <? if ($course->isStudygroup()) : ?> - <?= Icon::create('seminar', Icon::ROLE_INFO)->asimg(['class' => "text-bottom"]) ?> + <?= Icon::create('seminar', Icon::ROLE_INFO)->asSvg(['class' => "text-bottom"]) ?> <?= _('Zugehörige Veranstaltung') ?> <? else : ?> - <?= Icon::create('studygroup', Icon::ROLE_INFO)->asimg(['class' => "text-bottom"]) ?> + <?= Icon::create('studygroup', Icon::ROLE_INFO)->asSvg(['class' => "text-bottom"]) ?> <?= _('Verknüpfte Studiengruppen') ?> <? endif ?> </h1> diff --git a/app/views/course/timesrooms/_regularEvents.php b/app/views/course/timesrooms/_regularEvents.php index 62e59b2..0fd733a 100644 --- a/app/views/course/timesrooms/_regularEvents.php +++ b/app/views/course/timesrooms/_regularEvents.php @@ -42,7 +42,7 @@ tabindex="0" data-tooltip aria-label="<?= htmlReady($booking_status_message) ?>"> - <?= $booking_status_icon->asImg(['class' => 'text-bottom']) ?> + <?= $booking_status_icon->asSvg(['class' => 'text-bottom']) ?> <span class="tooltip-content"><?= $booking_status_message ?></span> </span> <a href="<?= ContentBoxHelper::href($metadate_id) ?>"> diff --git a/app/views/course/timesrooms/_roomRequest.php b/app/views/course/timesrooms/_roomRequest.php index ffa72b0..5902e5f 100644 --- a/app/views/course/timesrooms/_roomRequest.php +++ b/app/views/course/timesrooms/_roomRequest.php @@ -59,7 +59,7 @@ <a class="load-in-new-row" href="<?= $controller->link_for('course/room_requests/info/' . $rr->id) ?>" aria-expanded="false"> - <?= Icon::create('info')->asImg(['title' => _('Weitere Informationen einblenden')]) ?> + <?= Icon::create('info')->asSvg(['title' => _('Weitere Informationen einblenden')]) ?> </a> <? $params = [] ?> <? $dialog = []; ?> diff --git a/app/views/course/timesrooms/editDate.php b/app/views/course/timesrooms/editDate.php index 15c1986..f17c52a 100644 --- a/app/views/course/timesrooms/editDate.php +++ b/app/views/course/timesrooms/editDate.php @@ -82,7 +82,7 @@ ['only_bookable_rooms' => '1'] ) ?>" <?= Request::isDialog() ? 'data-dialog="size=normal"' : '' ?> title="<?= _('Nur buchbare Räume anzeigen') ?>"> - <?= Icon::create('room-request')->asImg([ + <?= Icon::create('room-request')->asSvg([ 'class' => 'text-bottom', 'style' => 'margin-left: 0.2em; margin-top: 0.6em;', ]) ?> diff --git a/app/views/course/topics/edit.php b/app/views/course/topics/edit.php index a6b897e..88b5316 100644 --- a/app/views/course/topics/edit.php +++ b/app/views/course/topics/edit.php @@ -26,7 +26,7 @@ <label> <? $folder = $topic->folders->first() ?> <? if ($folder) : ?> - <?= Icon::create('accept', Icon::ROLE_ACCEPT)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('accept', Icon::ROLE_ACCEPT)->asSvg(['class' => 'text-bottom']) ?> <?= _('Dateiordner vorhanden') ?> <? else : ?> <input type="checkbox" name="folder" id="topic_folder" value="1"> @@ -38,7 +38,7 @@ <? if ($forum_activated) : ?> <label> <? if ($topic->forum_thread_url) : ?> - <?= Icon::create('accept', Icon::ROLE_ACCEPT)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('accept', Icon::ROLE_ACCEPT)->asSvg(['class' => 'text-bottom']) ?> <?= _('Forenthema vorhanden') ?> <? else : ?> <input type="checkbox" name="forumthread" id="topic_forumthread" value="1"> @@ -52,14 +52,14 @@ <label> <input type="checkbox" name="date[<?= htmlReady($date->id) ?>]" value="1" class="text-bottom" <? if (in_array($date->id, $date_ids)) echo 'checked'; ?>> - <?= Icon::create('date', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('date', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <?= floor($date['date'] / 86400) !== floor($date['end_time'] / 86400) ? date("d.m.Y, H:i", $date['date'])." - ".date("d.m.Y, H:i", $date['end_time']) : date("d.m.Y, H:i", $date['date'])." - ".date("H:i", $date['end_time']) ?> <? if (count($date->topics) > 0) : ?> ( <? foreach ($date->topics as $key => $localtopic) : ?> <a href="<?= $controller->index(['open' => $localtopic->id]) ?>"> - <?= Icon::create('topic')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('topic')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($localtopic->title) ?> </a> <? endforeach ?> diff --git a/app/views/course/topics/index.php b/app/views/course/topics/index.php index 67a86cb..e538542 100644 --- a/app/views/course/topics/index.php +++ b/app/views/course/topics/index.php @@ -23,7 +23,7 @@ <td> <a href="#" name="<?=$topic->getId()?>" onClick="jQuery(this).closest('tr').toggleClass('open'); return false;"> <? if ($topic->paper_related): ?> - <?= Icon::create('glossary')->asImg(array_merge( + <?= Icon::create('glossary')->asSvg(array_merge( ['class' => 'text-top'], tooltip2(_('Thema behandelt eine Hausarbeit oder ein Referat')) )) ?> @@ -36,7 +36,7 @@ <? foreach ($topic->dates as $date) : ?> <li> <a href="<?= URLHelper::getLink("dispatch.php/course/dates/details/".$date->getId()) ?>" data-dialog="size=auto"> - <?= Icon::create('date', 'clickable')->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('date', 'clickable')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($date->getFullName()) ?> </a> </li> @@ -64,7 +64,7 @@ <a href="<?= URLHelper::getLink( 'dispatch.php/course/files/index/' . $folder->id ) ?>"> - <?= $folder->getTypedFolder()->getIcon('clickable')->asImg(['class' => "text-bottom"]) ?> + <?= $folder->getTypedFolder()->getIcon('clickable')->asSvg(['class' => 'text-bottom']) ?> <?= _('Dateiordner') ?> </a> </li> @@ -74,7 +74,7 @@ <? if ($forum_activated && ($link_to_thread = $topic->forum_thread_url)) : ?> <li> <a href="<?= URLHelper::getLink($link_to_thread) ?>"> - <?= Icon::create('forum', 'clickable')->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('forum', 'clickable')->asSvg(['class' => 'text-bottom']) ?> <?= _('Thema im Forum') ?> </a> </li> diff --git a/app/views/course/wiki/ask_deleting.php b/app/views/course/wiki/ask_deleting.php index 915e689..59d9145 100644 --- a/app/views/course/wiki/ask_deleting.php +++ b/app/views/course/wiki/ask_deleting.php @@ -15,7 +15,7 @@ data-confirm="<?= _('Wirklich die letzte Änderung löschen?') ?>" formaction="<?= $controller->deleteversionURL($page, ['redirect_to' => 'page']) ?>" > - <?= Icon::create('archive2')->asImg(50) ?> + <?= Icon::create('archive2')->asSvg(50) ?> <?= _('Nur die letzte Änderung löschen') ?> </button> </div> @@ -27,7 +27,7 @@ data-confirm="<?= _('Wollen Sie wirklich die komplette Seite löschen?') ?>" formaction="<?= $controller->deleteURL($page) ?>" > - <?= Icon::create('wiki')->asImg(50) ?> + <?= Icon::create('wiki')->asSvg(50) ?> <?= _('Ganze Wikiseite löschen') ?> </button> </div> diff --git a/app/views/course/wiki/blame.php b/app/views/course/wiki/blame.php index d924c17..933c425 100644 --- a/app/views/course/wiki/blame.php +++ b/app/views/course/wiki/blame.php @@ -17,7 +17,7 @@ if (trim($collect) !== '') : ?> <div class="wiki_line"> <div class="author"> - <a href="<?= URLhelper::getLink('dispatch.php/profile', ['username' => get_username($last_author)]) ?>" title="<?= htmlReady(get_fullname($last_author)) ?>"> + <a href="<?= URLHelper::getLink('dispatch.php/profile', ['username' => get_username($last_author)]) ?>" title="<?= htmlReady(get_fullname($last_author)) ?>"> <?= Avatar::getAvatar($last_author)->getImageTag(Avatar::SMALL) ?> <div class="author_name"><?= htmlReady(get_fullname($last_author)) ?></div> </a> @@ -26,7 +26,7 @@ href="<?= $controller->versiondiff(!$version || is_a($version, WikiPage::class) ? $version : $version->page, is_a($version, WikiVersion::class) ? $version->id : null) ?>" data-dialog title="<?= _('Änderungen anzeigen') ?>"> - <?= Icon::create('log')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('log')->asSvg(['class' => 'text-bottom']) ?> </a> <div class="content"> <?= wikiReady($collect) ?> diff --git a/app/views/course/wiki/history.php b/app/views/course/wiki/history.php index 81fde59..f581ce2 100644 --- a/app/views/course/wiki/history.php +++ b/app/views/course/wiki/history.php @@ -32,7 +32,7 @@ </td> <td data-sort-value="<?= htmlReady($page->user ? $page->user->getFullName() : _('unbekannt')) ?>"> <? if ($page->user) : ?> - <a href="<?= URLhelper::getLink('dispatch.php/profile', ['username' => $page->user->username]) ?>"> + <a href="<?= URLHelper::getLink('dispatch.php/profile', ['username' => $page->user->username]) ?>"> <? endif ?> <?= Avatar::getAvatar($page['user_id'])->getImageTag(Avatar::SMALL) ?> <?= htmlReady($page->user ? $page->user->getFullName() : _('unbekannt')) ?> @@ -43,7 +43,7 @@ <td data-sort-value="<?= $page->chdate ?>"><?= $page->chdate > 0 ? date('d.m.Y H:i:s', $page->chdate) : _('unbekannt') ?></td> <td class="actions"> <a href="<?= $controller->versiondiff($page) ?>" data-dialog> - <?= Icon::create('log')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('log')->asSvg(['class' => 'text-bottom']) ?> </a> </td> </tr> @@ -56,7 +56,7 @@ </td> <td> <? if ($version->user) : ?> - <a href="<?= URLhelper::getLink('dispatch.php/profile', ['username' => $version->user->username]) ?>"> + <a href="<?= URLHelper::getLink('dispatch.php/profile', ['username' => $version->user->username]) ?>"> <? endif ?> <?= Avatar::getAvatar($version['user_id'])->getImageTag(Avatar::SMALL) ?> <?= htmlReady($version->user ? $version->user->getFullName() : _('unbekannt')) ?> @@ -67,7 +67,7 @@ <td><?= $version->mkdate > 0 ? date('d.m.Y H:i:s', $version->mkdate) : _('unbekannt') ?></td> <td class="actions"> <a href="<?= $controller->versiondiff($page, $version->id) ?>" data-dialog> - <?= Icon::create('log')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('log')->asSvg(['class' => 'text-bottom']) ?> </a> </td> </tr> diff --git a/app/views/course/wiki/import.php b/app/views/course/wiki/import.php index 7c602ef..7984dd3 100644 --- a/app/views/course/wiki/import.php +++ b/app/views/course/wiki/import.php @@ -29,14 +29,14 @@ <? if ($bad_course_search): ?> <a href="<?= $controller->import() ?>" data-dialog="1"> - <?= Icon::create('decline')->asImg([ + <?= Icon::create('decline')->asSvg([ 'class' => 'text-bottom', 'title' => _('Suche zurücksetzen'), 'onclick' => "STUDIP.QuickSearch.reset('wiki_import_form', 'selected_range_id');" ]) ?> </a> <? else : ?> - <?= Icon::create('search')->asImg([ + <?= Icon::create('search')->asSvg([ 'class' => 'text-bottom', 'title' => _('Suche starten'), 'onclick' => "jQuery(this).closest('form').submit();" diff --git a/app/views/course/wiki/newpages.php b/app/views/course/wiki/newpages.php index b805645..bfc1232 100644 --- a/app/views/course/wiki/newpages.php +++ b/app/views/course/wiki/newpages.php @@ -106,7 +106,7 @@ <a href="<?= $controller->versiondiff($page, is_a($version, 'WikiVersion') ? $version->id : null) ?>" title="<?= _('Einzelne Änderung anzeigen') ?>" data-dialog> - <?= Icon::create('log')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('log')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> <? endforeach ?> diff --git a/app/views/course/wiki/search.php b/app/views/course/wiki/search.php index 0cc030d..53f20d4 100644 --- a/app/views/course/wiki/search.php +++ b/app/views/course/wiki/search.php @@ -102,7 +102,7 @@ <tr> <td colspan="3"> <a href="<?= $controller->searchpage($page_id, ['search' => Request::get('search')]) ?>"> - <?= Icon::create('add')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('add')->asSvg(['class' => 'text-bottom']) ?> <? if (count($pagedata['versions']) === 1) : ?> <?= _('Weiterer Treffer in einer älteren Version.') ?> <? else : ?> diff --git a/app/views/event_log/show.php b/app/views/event_log/show.php index a47ef48..133efdd 100644 --- a/app/views/event_log/show.php +++ b/app/views/event_log/show.php @@ -60,7 +60,7 @@ </select> <a href="<?= $controller->show(['action_id' => $action_id]) ?>"> - <?= Icon::create('decline')->asImg(['title' => _('Neue Suche')]) ?> + <?= Icon::create('decline')->asSvg(['title' => _('neue Suche')]) ?> </a> </div> </label> diff --git a/app/views/fachabschluss/abschluesse/details.php b/app/views/fachabschluss/abschluesse/details.php index f9be5fa..b475f40 100644 --- a/app/views/fachabschluss/abschluesse/details.php +++ b/app/views/fachabschluss/abschluesse/details.php @@ -14,7 +14,7 @@ <td class="actions"> <? if (MvvPerm::havePermWrite($fach)) : ?> <a data-dialog href="<?= $controller->action_link('fach/' . $fach->id) ?>"> - <?= Icon::create('edit', 'clickable', ['title' => _('Fach bearbeiten')])->asImg(); ?> + <?= Icon::create('edit', 'clickable', ['title' => _('Fach bearbeiten')])->asSvg(); ?> </a> <? endif; ?> </td> diff --git a/app/views/fachabschluss/abschluesse/index.php b/app/views/fachabschluss/abschluesse/index.php index 147078a..7e8947f 100644 --- a/app/views/fachabschluss/abschluesse/index.php +++ b/app/views/fachabschluss/abschluesse/index.php @@ -28,7 +28,7 @@ <td class="dont-hide actions" style="white-space: nowrap;"> <? if (MvvPerm::havePermWrite($abschluss)) : ?> <a href="<?=$controller->action_link('abschluss/' . $abschluss->id)?>"> - <?= Icon::create('edit', Icon::ROLE_CLICKABLE, tooltip2(_('Abschluss bearbeiten')))->asImg(); ?> + <?= Icon::create('edit', Icon::ROLE_CLICKABLE, tooltip2(_('Abschluss bearbeiten')))->asSvg(); ?> </a> <? endif; ?> <? if (MvvPerm::havePermCreate($abschluss)) : ?> @@ -43,7 +43,7 @@ 'name' => 'delete' ]); ?> <? else : ?> - <?= Icon::create('trash', Icon::ROLE_INACTIVE, tooltip2(_('Abschluss kann nicht glöscht werden')))->asImg(); ?> + <?= Icon::create('trash', Icon::ROLE_INACTIVE, tooltip2(_('Abschluss kann nicht glöscht werden')))->asSvg(); ?> <? endif; ?> <? endif; ?> </td> diff --git a/app/views/fachabschluss/faecher/details.php b/app/views/fachabschluss/faecher/details.php index ad773cd..b8abf4e 100644 --- a/app/views/fachabschluss/faecher/details.php +++ b/app/views/fachabschluss/faecher/details.php @@ -13,7 +13,7 @@ <td class="actions"> <? if (MvvPerm::havePermWrite($abschluss)) : ?> <a data-dialog href="<?= $controller->action_link('abschluss/' . $abschluss->id) ?>"> - <?= Icon::create('edit', Icon::ROLE_CLICKABLE, ['title' => _('Abschluss bearbeiten')])->asImg(); ?> + <?= Icon::create('edit', Icon::ROLE_CLICKABLE, ['title' => _('Abschluss bearbeiten')])->asSvg(); ?> </a> <? endif; ?> </td> diff --git a/app/views/fachabschluss/faecher/details_fachbereich.php b/app/views/fachabschluss/faecher/details_fachbereich.php index 6ca7dc2..dd49a25 100644 --- a/app/views/fachabschluss/faecher/details_fachbereich.php +++ b/app/views/fachabschluss/faecher/details_fachbereich.php @@ -12,7 +12,7 @@ <td class="actions"> <? if (MvvPerm::havePermWrite($fach)) : ?> <a href="<?= $controller->action_link('fach/' . $fach->id) ?>"> - <?= Icon::create('edit', Icon::ROLE_CLICKABLE, ['title' => _('Fach bearbeiten')])->asImg(); ?> + <?= Icon::create('edit', Icon::ROLE_CLICKABLE, ['title' => _('Fach bearbeiten')])->asSvg(); ?> </a> <? endif; ?> </td> diff --git a/app/views/fachabschluss/faecher/fach.php b/app/views/fachabschluss/faecher/fach.php index 08335db..08ade5f 100644 --- a/app/views/fachabschluss/faecher/fach.php +++ b/app/views/fachabschluss/faecher/fach.php @@ -70,7 +70,7 @@ <? if ($perm->haveFieldPerm('institut_id', MvvPerm::PERM_WRITE)): ?> <div class="mvv-item-list-buttons"> <a href="#" - class="mvv-item-remove"><?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Einrichtung entfernen')])->asImg(); ?></a> + class="mvv-item-remove"><?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Einrichtung entfernen')])->asSvg(); ?></a> </div> <? endif; ?> <input type="hidden" name="institut_items[]" value="<?= $fachbereich->getId() ?>"> diff --git a/app/views/fachabschluss/faecher/index.php b/app/views/fachabschluss/faecher/index.php index f2ba7a4..b42761e 100644 --- a/app/views/fachabschluss/faecher/index.php +++ b/app/views/fachabschluss/faecher/index.php @@ -27,7 +27,7 @@ <td class="dont-hide actions" style="white-space: nowrap;"> <? if (MvvPerm::havePermWrite($fach)) : ?> <a href="<?= $controller->action_link('fach/' . $fach->id) ?>"> - <?= Icon::create('edit', Icon::ROLE_CLICKABLE, ['title' => _('Fach bearbeiten')])->asImg(); ?> + <?= Icon::create('edit', Icon::ROLE_CLICKABLE, ['title' => _('Fach bearbeiten')])->asSvg(); ?> </a> <? endif; ?> <? if (MvvPerm::havePermCreate($fach)) : ?> @@ -39,7 +39,7 @@ 'name' => 'delete' ]); ?> <? else : ?> - <?= Icon::create('trash', Icon::ROLE_INACTIVE, tooltip2(_('Fach kann nicht glöscht werden')))->asImg(); ?> + <?= Icon::create('trash', Icon::ROLE_INACTIVE, tooltip2(_('Fach kann nicht glöscht werden')))->asSvg(); ?> <? endif; ?> <? endif; ?> </td> diff --git a/app/views/fachabschluss/kategorien/index.php b/app/views/fachabschluss/kategorien/index.php index 44c9bad..0f327ba 100644 --- a/app/views/fachabschluss/kategorien/index.php +++ b/app/views/fachabschluss/kategorien/index.php @@ -40,7 +40,7 @@ <td style="white-space: nowrap;" class="dont-hide actions"> <? if ($perm->havePermWrite()) : ?> <a href="<?= $controller->action_link('kategorie/' . $kategorie->id) ?>"> - <?= Icon::create('edit', Icon::ROLE_CLICKABLE, tooltip2(_('Abschluss-Kategorie bearbeiten')))->asImg(); ?> + <?= Icon::create('edit', Icon::ROLE_CLICKABLE, tooltip2(_('Abschluss-Kategorie bearbeiten')))->asSvg(); ?> </a> <? endif; ?> <? if ($perm->havePermCreate()) : ?> @@ -52,7 +52,7 @@ 'name' => 'delete' ]); ?> <? else : ?> - <?= Icon::create('trash', Icon::ROLE_INACTIVE, tooltip2(_('Löschen nicht möglich')))->asImg(); ?> + <?= Icon::create('trash', Icon::ROLE_INACTIVE, tooltip2(_('Löschen nicht möglich')))->asSvg(); ?> <? endif; ?> <? endif; ?> </td> diff --git a/app/views/file/_terms_of_use_select.php b/app/views/file/_terms_of_use_select.php index 42d1678..a4616c6 100644 --- a/app/views/file/_terms_of_use_select.php +++ b/app/views/file/_terms_of_use_select.php @@ -24,8 +24,8 @@ if (!$selected_terms_of_use_id) { aria-description="<?= htmlReady(kill_format($content_terms_of_use_entry->description)) ?>"> <label for="content_terms_of_use-<?= htmlReady($content_terms_of_use_entry->id) ?>"> - <?= Icon::create('radiobutton-unchecked')->asImg(['class' => 'arrow']) ?> - <?= Icon::create('radiobutton-checked')->asImg(['class' => 'check']) ?> + <?= Icon::create('radiobutton-unchecked')->asSvg(['class' => 'arrow']) ?> + <?= Icon::create('radiobutton-checked')->asSvg(['class' => 'check']) ?> <div class="text"> <?= htmlReady($content_terms_of_use_entry->name) ?> </div> @@ -34,7 +34,7 @@ if (!$selected_terms_of_use_id) { <? if (filter_var($content_terms_of_use_entry['icon'], FILTER_VALIDATE_URL)): ?> <img src="<?= htmlReady($content_terms_of_use_entry['icon']) ?>" width="32" height="32"> <? else : ?> - <?= Icon::create($content_terms_of_use_entry['icon'])->asImg(Icon::SIZE_LARGE) ?> + <?= Icon::create($content_terms_of_use_entry['icon'])->asSvg(Icon::SIZE_LARGE) ?> <? endif ?> <? endif ?> </div> diff --git a/app/views/file/add_files_window.php b/app/views/file/add_files_window.php index 8b963e7..bdde120 100644 --- a/app/views/file/add_files_window.php +++ b/app/views/file/add_files_window.php @@ -23,7 +23,7 @@ if ($folder_id) { <a class="important-item" data-dialog="size=medium-43" href="<?= $controller->link_for('file/add_from_library/' . $folder_id)?>"> <div class="icon"> - <?= Icon::create('literature')->asImg(50) ?> + <?= Icon::create('literature')->asSvg(50) ?> <div><?= _('Bibliothek') ?></div> </div> <div class="description"> @@ -35,29 +35,29 @@ if ($folder_id) { <? endif ?> <div> <a href="#" onclick="jQuery('.file_selector input[type=file]').first().click(); return false;"> - <?= Icon::create('computer')->asImg(50) ?> + <?= Icon::create('computer')->asSvg(50) ?> <?= _('Mein Computer') ?> </a> <a href="<?= $controller->link_for('file/add_url/' . $folder_id, array_merge($options, ['from_plugin' => ""])) ?>" data-dialog="size=medium"> - <?= Icon::create('globe')->asImg(50) ?> + <?= Icon::create('globe')->asSvg(50) ?> <?= _('Webadresse') ?> </a> <a href="<?= $controller->link_for('file/choose_file/' . Folder::findTopFolder($GLOBALS['user']->id)->getId(), array_merge($options, ['from_plugin' => ""])) ?>" data-dialog> - <?= Icon::create('files')->asImg(50) ?> + <?= Icon::create('files')->asSvg(50) ?> <?= _('Persönlicher Dateibereich') ?> </a> <a href="<?= $controller->link_for('file/choose_file_from_course/' . $folder_id, array_merge($options, ['from_plugin' => ""])) ?>" data-dialog> - <?= Icon::create('seminar')->asImg(50) ?> + <?= Icon::create('seminar')->asSvg(50) ?> <?= _('Meine Veranstaltungen') ?> </a> <? if ($range instanceof Course && $GLOBALS['perm']->have_studip_perm('tutor', $range->id) && $show_library_functions) : ?> <a href="<?= $controller->link_for('library_file/select_type/' . $folder_id) ?>" data-dialog="size=auto"> - <?= Icon::create('literature')->asImg(50) ?> + <?= Icon::create('literature')->asSvg(50) ?> <?= _('Literatur') ?> </a> <? if ($GLOBALS['LIBRARY_CATALOGS'] && !$range->getSemClass()['studygroup_mode'] && !$library_search_description) : ?> <a href="<?= $controller->link_for('file/add_from_library/' . $folder_id) ?>" data-dialog="size=medium-43"> - <?= Icon::create('literature')->asImg(50) ?> + <?= Icon::create('literature')->asSvg(50) ?> <?= _('Originaldokument aus Bibliothek') ?> </a> <? endif ?> @@ -65,7 +65,7 @@ if ($folder_id) { <? if (Config::get()->OERCAMPUS_ENABLED && $GLOBALS['perm']->have_perm(Config::get()->OERCAMPUS_PUBLIC_STATUS)) : ?> <a href="<?= $controller->link_for('oer/addfile/choose_file', array_merge($options, ['from_plugin' => ""])) ?>" data-dialog="size=800x800"> - <?= Icon::create('oer-campus')->asImg(50) ?> + <?= Icon::create('oer-campus')->asSvg(50) ?> <?= _('OER Campus') ?> </a> <? endif ?> @@ -74,7 +74,7 @@ if ($folder_id) { <? $nav = $plugin->getFileSelectNavigation() ?> <? if ($nav): ?> <a href="<?= $controller->link_for('file/choose_file/', array_merge($options, ['from_plugin' => get_class($plugin)])) ?>" data-dialog> - <?= $nav->getImage()->asImg(50) ?> + <?= $nav->getImage()->asSvg(50) ?> <?= htmlReady($nav->getTitle()) ?> </a> <? endif; ?> diff --git a/app/views/file/add_from_library.php b/app/views/file/add_from_library.php index 2f1ad54..5a8b396 100644 --- a/app/views/file/add_from_library.php +++ b/app/views/file/add_from_library.php @@ -86,9 +86,9 @@ <label for="result_<?= htmlReady($result_id) ?>"> <section class="contentbox"> <header> - <span class="title no-overflow"><?= $result->getIcon()->asImg() ?> <?= $result->getTitle('long-comma') ?></span> + <span class="title no-overflow"><?= $result->getIcon()->asSvg() ?> <?= $result->getTitle('long-comma') ?></span> <nav> - <?= Icon::create('accept', 'status-green')->asImg( + <?= Icon::create('accept', 'status-green')->asSvg( 20, ['class' => 'hidden-checkbox-checked-icon'] ) ?> @@ -156,7 +156,7 @@ <? endif ?> <? if (!empty($library_plugins)) : ?> <section class="big-help-box"> - <?= Icon::create('support')->asImg(96, ['class' => 'icon']) ?> + <?= Icon::create('support')->asSvg(96, ['class' => 'icon']) ?> <div class="text"> <strong><?= _('Passendes Dokument nicht gefunden?') ?></strong> <p><?= _('Gerne unterstützen wir Sie bei der Suche nach Dokumenten.') ?></p> diff --git a/app/views/file/choose_file.php b/app/views/file/choose_file.php index 1b59a9d..83f4b54 100644 --- a/app/views/file/choose_file.php +++ b/app/views/file/choose_file.php @@ -13,7 +13,7 @@ if (Request::get('to_folder_id')) { <div style="text-align: center; margin-bottom: 20px;"> <?= _('Kopieren nach') ?> - <?= Icon::create('folder-full', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('folder-full', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($to_folder_name) ?> </div> @@ -95,9 +95,9 @@ if (Request::get('to_folder_id')) { <a href="<?= $controller->link_for('file/choose_file/' . $subfolder->id, $options) ?>" data-dialog> <? endif ?> <? if (!empty($is_empty)): ?> - <?= Icon::create('folder-empty')->asImg(24) ?> + <?= Icon::create('folder-empty')->asSvg(24) ?> <? else: ?> - <?= Icon::create('folder-full')->asImg(24) ?> + <?= Icon::create('folder-full')->asSvg(24) ?> <? endif; ?> <? if ($subfolder->isReadable($GLOBALS['user']->id)) : ?> </a> @@ -128,11 +128,11 @@ if (Request::get('to_folder_id')) { <form action="<?= $controller->link_for('file/choose_file/' . $top_folder->id, $options) ?>" method="post" data-dialog> <input type="hidden" name="file_id" value="<?= htmlReady($file->getId()) ?>"> <a href="#" onclick="jQuery(this).closest('form').submit(); return false;"> - <?= FileManager::getIconForMimeType($file->getMimetype())->asImg(24) ?> + <?= FileManager::getIconForMimeType($file->getMimetype())->asSvg(24) ?> </a> </form> <? else: ?> - <?= FileManager::getIconForMimeType($file->getMimetype(), Icon::ROLE_INACTIVE)->asImg(24) ?> + <?= FileManager::getIconForMimeType($file->getMimetype(), Icon::ROLE_INACTIVE)->asSvg(24) ?> <? endif ?> </td> <td> diff --git a/app/views/file/choose_file_from_course.php b/app/views/file/choose_file_from_course.php index 6de5332..9fb4378 100644 --- a/app/views/file/choose_file_from_course.php +++ b/app/views/file/choose_file_from_course.php @@ -57,7 +57,7 @@ if (Request::get('range_type')) { </td> <td class="actions"> <a href="<?= $controller->link_for('file/choose_file_from_course/' . $folder_id, array_merge($options, ['course_id' => $course->id])) ?>" data-dialog> - <?= Icon::create('folder-full')->asImg(30) ?> + <?= Icon::create('folder-full')->asSvg(30) ?> </a> </td> </tr> diff --git a/app/views/file/choose_folder.php b/app/views/file/choose_folder.php index 955aa8f..1f9daa2 100644 --- a/app/views/file/choose_folder.php +++ b/app/views/file/choose_folder.php @@ -23,7 +23,7 @@ $buttonLabels = [ <div style="text-align: center; margin-bottom: 20px;"> <?= $headings[$options['copymode']] ?> - <?= Icon::create('folder-full', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('folder-full', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($top_folder_name) ?> </div> @@ -104,9 +104,9 @@ $buttonLabels = [ <!-- neu --> <button formaction="<?= $controller->action_link('choose_folder/' . $subfolder->getId()) ?>" class="undecorated" data-dialog> <? if ($subfolder->is_empty): ?> - <?= Icon::create('folder-empty')->asImg(24) ?> + <?= Icon::create('folder-empty')->asSvg(24) ?> <? else: ?> - <?= Icon::create('folder-full')->asImg(24) ?> + <?= Icon::create('folder-full')->asSvg(24) ?> <? endif; ?> </button> </td> @@ -127,9 +127,9 @@ $buttonLabels = [ <tr> <td class="document-icon" data-sort-value="0"> <? if ($subfolder->is_empty): ?> - <?= Icon::create('folder-empty', Icon::ROLE_INACTIVE)->asImg(24) ?> + <?= Icon::create('folder-empty', Icon::ROLE_INACTIVE)->asSvg(24) ?> <? else: ?> - <?= Icon::create('folder-full', Icon::ROLE_INACTIVE)->asImg(24) ?> + <?= Icon::create('folder-full', Icon::ROLE_INACTIVE)->asSvg(24) ?> <? endif ?> </td> <td> diff --git a/app/views/file/new_edit_folder_form.php b/app/views/file/new_edit_folder_form.php index c89f4c2..a563ea6 100644 --- a/app/views/file/new_edit_folder_form.php +++ b/app/views/file/new_edit_folder_form.php @@ -27,8 +27,8 @@ id="folder-type-<?= htmlReady($folder_type['class']) ?>" <? if ($folder_type['class'] === get_class($folder)) echo 'checked'; ?>> <label for="folder-type-<?= htmlReady($folder_type['class']) ?>"> - <?= Icon::create('radiobutton-unchecked')->asImg(['class' => 'arrow']) ?> - <?= Icon::create('radiobutton-checked')->asImg(['class' => 'check']) ?> + <?= Icon::create('radiobutton-unchecked')->asSvg(['class' => 'arrow']) ?> + <?= Icon::create('radiobutton-checked')->asSvg(['class' => 'check']) ?> <div class="text"> <?= htmlReady($folder_type['name']) ?> <? if ($template = $folder_type['instance']->getDescriptionTemplate()): ?> @@ -37,7 +37,7 @@ </div> <div class="icon"> <? if ($folder_type['icon']) : ?> - <?= $folder_type['icon']->asImg(32) ?> + <?= $folder_type['icon']->asSvg(32) ?> <? endif ?> </div> </label> diff --git a/app/views/file/oer_post_upload.php b/app/views/file/oer_post_upload.php index 30b8926..bbd23db 100644 --- a/app/views/file/oer_post_upload.php +++ b/app/views/file/oer_post_upload.php @@ -17,13 +17,13 @@ if (!isset($selected_oer_upload)) { <? if (0 == $selected_oer_upload) echo 'checked'; ?>> <label for="oer-upload-no"> <div class="icon"> - <?= Icon::create('decline')->asImg(32) ?> + <?= Icon::create('decline')->asSvg(32) ?> </div> <div class="text"> <?= _('Nicht für den OER-Campus bereitstellen.') ?> </div> - <?= Icon::create('arr_1down')->asImg(24, ['class' => 'arrow']) ?> - <?= Icon::create('check-circle')->asImg(32, ['class' => 'check']) ?> + <?= Icon::create('arr_1down')->asSvg(24, ['class' => 'arrow']) ?> + <?= Icon::create('check-circle')->asSvg(32, ['class' => 'check']) ?> </label> <div class="oer_upload_description"> <div class="description"> @@ -36,13 +36,13 @@ if (!isset($selected_oer_upload)) { <? if (1 == $selected_oer_upload) echo 'checked'; ?>> <label for="oer-upload-yes"> <div class="icon"> - <?= Icon::create('accept')->asImg(32) ?> + <?= Icon::create('accept')->asSvg(32) ?> </div> <div class="text"> <?= _('Jetzt für den OER-Campus bereitstellen.') ?> </div> - <?= Icon::create('arr_1down')->asImg(24, ['class' => 'arrow']) ?> - <?= Icon::create('check-circle')->asImg(32, ['class' => 'check']) ?> + <?= Icon::create('arr_1down')->asSvg(24, ['class' => 'arrow']) ?> + <?= Icon::create('check-circle')->asSvg(32, ['class' => 'check']) ?> </label> <div class="oer_upload_description"> <div class="description"> @@ -54,13 +54,13 @@ if (!isset($selected_oer_upload)) { <? if (2 == $selected_oer_upload) echo 'checked'; ?>> <label for="oer-upload-later"> <div class="icon"> - <?= Icon::create('date')->asImg(32) ?> + <?= Icon::create('date')->asSvg(32) ?> </div> <div class="text"> <?= _('Zu einem späteren Zeitpunkt für den OER-Campus bereitstellen.') ?> </div> - <?= Icon::create('arr_1down')->asImg(24, ['class' => 'arrow']) ?> - <?= Icon::create('check-circle')->asImg(32, ['class' => 'check']) ?> + <?= Icon::create('arr_1down')->asSvg(24, ['class' => 'arrow']) ?> + <?= Icon::create('check-circle')->asSvg(32, ['class' => 'check']) ?> </label> <div class="oer_upload_description"> <div class="description"> diff --git a/app/views/file/suggest_oer.php b/app/views/file/suggest_oer.php index 64f02e8..39d5892 100644 --- a/app/views/file/suggest_oer.php +++ b/app/views/file/suggest_oer.php @@ -36,7 +36,7 @@ </h1> </header> <div id="oer_preview_image"> - <?= Icon::create($icon_shape)->asimg(160) ?> + <?= Icon::create($icon_shape)->asSvg(160) ?> </div> </article> </label> diff --git a/app/views/file/unzipquestion.php b/app/views/file/unzipquestion.php index 361ae63..c3b82d1 100644 --- a/app/views/file/unzipquestion.php +++ b/app/views/file/unzipquestion.php @@ -4,7 +4,7 @@ <input type="hidden" name="file_refs[]" value="<?= htmlReady($file->getId()) ?>"> <? endforeach ?> - <?= Icon::create('unit-test', Icon::ROLE_INACTIVE)->asImg(120, ['style' => 'display: block; margin-left: auto; margin-right: auto;']) ?> + <?= Icon::create('unit-test', Icon::ROLE_INACTIVE)->asSvg(120, ['style' => 'display: block; margin-left: auto; margin-right: auto;']) ?> <?= _('Soll diese ZIP-Datei entpackt werden?') ?> diff --git a/app/views/file/upload_window.php b/app/views/file/upload_window.php index 5c2bc2e..d5b368f 100644 --- a/app/views/file/upload_window.php +++ b/app/views/file/upload_window.php @@ -6,11 +6,11 @@ <ul class="filenames clean"></ul> <div class="uploadbar uploadbar-outer"> <div class="uploadbar uploadbar-inner"> - <?= Icon::create('upload', Icon::ROLE_INFO_ALT)->asImg(30) ?> - <?= Icon::create('ufo', Icon::ROLE_INFO_ALT)->asImg(30, ['class' => 'ufo']) ?> + <?= Icon::create('upload', Icon::ROLE_INFO_ALT)->asSvg(30) ?> + <?= Icon::create('ufo', Icon::ROLE_INFO_ALT)->asSvg(30, ['class' => 'ufo']) ?> </div> - <?= Icon::create('upload')->asImg(30) ?> + <?= Icon::create('upload')->asSvg(30) ?> <span class="upload-progress"></span> </div> diff --git a/app/views/files/_fileref_tr.php b/app/views/files/_fileref_tr.php index fc486ae..a7c1156 100644 --- a/app/views/files/_fileref_tr.php +++ b/app/views/files/_fileref_tr.php @@ -21,13 +21,13 @@ if ($file->isDownloadable($GLOBALS['user']->id)) { <? endif ?> </td> <? endif ?> - <td class="document-icon" data-sort-value="<?= crc32($file->getMimeType()) ?>"> + <td class="file-icon" data-sort-value="<?= crc32($file->getMimeType()) ?>"> <? if ($file->isDownloadable($GLOBALS['user']->id)) : ?> <a href="<?= htmlReady($file->getDownloadURL()) ?>" target="_blank" rel="noopener noreferrer"> - <?= $file->getIcon(Icon::ROLE_CLICKABLE)->asImg(24) ?> + <?= $file->getIcon(Icon::ROLE_CLICKABLE)->asSvg(24) ?> </a> <? else : ?> - <?= $file->getIcon(Icon::ROLE_INACTIVE)->asImg(24) ?> + <?= $file->getIcon(Icon::ROLE_INACTIVE)->asSvg(24, ['class' => 'icon-inactive']) ?> <? endif ?> </td> <td data-sort-value="<?= htmlReady($file->getFilename()) ?>"> @@ -41,7 +41,7 @@ if ($file->isDownloadable($GLOBALS['user']->id)) { <?php $terms = $file->getTermsOfUse() ?> <? if ($terms && !empty($topFolder) && !$terms->isDownloadable($topFolder->range_id, $topFolder->range_type, false)) : ?> - <?= Icon::create('lock-locked', Icon::ROLE_INFO)->asImg(['title' => _('Das Herunterladen dieser Datei ist nur eingeschränkt möglich.')]) ?> + <?= Icon::create('lock-locked', Icon::ROLE_INFO)->asSvg(['title' => _('Das Herunterladen dieser Datei ist nur eingeschränkt möglich.')]) ?> <? endif ?> </td> <? $size = $file->getSize() ?> diff --git a/app/views/files/_folder_tr.php b/app/views/files/_folder_tr.php index 99ad224..d74c71a 100644 --- a/app/views/files/_folder_tr.php +++ b/app/views/files/_folder_tr.php @@ -31,7 +31,7 @@ if ($folder->isReadable($GLOBALS['user']->id)) { </td> <td class="document-icon" data-sort-value="<?=crc32(get_class($folder))?>"> <a href="<?= $controller->link_for($controllerpath . '/' . $folder->getId()) ?>"> - <?= $folder->getIcon('clickable')->asImg(Icon::SIZE_FILES_TABLE) ?> + <?= $folder->getIcon('clickable')->asSvg(Icon::SIZE_FILES_TABLE) ?> </a> </td> <td> diff --git a/app/views/files/configure.php b/app/views/files/configure.php index 5ab6eea..d4d50c7 100644 --- a/app/views/files/configure.php +++ b/app/views/files/configure.php @@ -1,7 +1,7 @@ <div class="file_select_possibilities"> <? foreach ($configure_urls as $url) : ?> <a href="<?= htmlReady($url['url']) ?>" data-dialog> - <?= $url['icon']->asImg(50) ?> + <?= $url['icon']->asSvg(50) ?> <?= htmlReady($url['name']) ?> </a> <? endforeach ?> diff --git a/app/views/files_dashboard/_input-group-search.php b/app/views/files_dashboard/_input-group-search.php index 258f83b..df65ddf 100644 --- a/app/views/files_dashboard/_input-group-search.php +++ b/app/views/files_dashboard/_input-group-search.php @@ -10,7 +10,7 @@ <span class="input-group-append"> <button type="submit" class="button"> - <?= Icon::create('search')->asImg(['title' => _("Suche starten")]) ?> + <?= Icon::create('search')->asSvg(['title' => _('Suche starten')]) ?> </button> <? if (!empty($query)) : ?> diff --git a/app/views/files_dashboard/_search_tr.php b/app/views/files_dashboard/_search_tr.php index 607de71..6048261 100644 --- a/app/views/files_dashboard/_search_tr.php +++ b/app/views/files_dashboard/_search_tr.php @@ -3,10 +3,10 @@ <td class="files-search-icon"> <? if ($searchResult['folder']->isFileDownloadable($searchResult['fileRef'], $user->id)) : ?> <a href="<?= htmlReady($searchResult['fileRef']->getDownloadURL('force_download')) ?>" target="_blank" rel="noopener noreferrer"> - <?= FileManager::getIconForFileRef($searchResult['fileRef'])->asImg(24) ?> + <?= FileManager::getIconForFileRef($searchResult['fileRef'])->asSvg(24) ?> </a> <? else : ?> - <?= FileManager::getIconForFileRef($searchResult['fileRef'], Icon::ROLE_INACTIVE)->asImg(24) ?> + <?= FileManager::getIconForFileRef($searchResult['fileRef'], Icon::ROLE_INACTIVE)->asSvg(24) ?> <? endif ?> </td> @@ -21,7 +21,7 @@ <? if ($searchResult['fileRef']->terms_of_use && $searchResult['fileRef']->terms_of_use->download_condition > 0) : ?> - <?= Icon::create('lock-locked', Icon::ROLE_INACTIVE)->asImg([ + <?= Icon::create('lock-locked', Icon::ROLE_INACTIVE)->asSvg([ 'class' => 'text-top', 'title' => _('Das Herunterladen dieser Datei ist nur eingeschränkt möglich.')]) ?> <? endif; ?> @@ -35,7 +35,7 @@ <? if ($searchResult['fileRef']->terms_of_use && $searchResult['fileRef']->terms_of_use->download_condition > 0) : ?> - <?= Icon::create('lock-locked', Icon::ROLE_INFO)->asImg([ + <?= Icon::create('lock-locked', Icon::ROLE_INFO)->asSvg([ 'class' => 'text-top', 'title' => _('Das Herunterladen dieser Datei ist nur eingeschränkt möglich.')]) ?> <? endif; ?> diff --git a/app/views/help_content/admin_overview.php b/app/views/help_content/admin_overview.php index 05cf2e1..fd6e9b8 100644 --- a/app/views/help_content/admin_overview.php +++ b/app/views/help_content/admin_overview.php @@ -52,10 +52,10 @@ <td class="actions"> <a href="<?= URLHelper::getURL('dispatch.php/help_content/edit/' . $help_content_id) ?>" <?= tooltip(_('Hilfe-Text bearbeiten')) ?> data-dialog="size=auto;reload-on-close"> - <?= Icon::create('edit', 'clickable')->asImg() ?></a> + <?= Icon::create('edit', 'clickable')->asSvg() ?></a> <a href="<?= URLHelper::getURL('dispatch.php/help_content/delete/' . $help_content_id) ?>" <?= tooltip(_('Hilfe-Text löschen')) ?> data-dialog="size=auto;reload-on-close"> - <?= Icon::create('trash', 'clickable')->asImg() ?></a> + <?= Icon::create('trash', 'clickable')->asSvg() ?></a> </td> </tr> <? endforeach ?> diff --git a/app/views/institute/extern/new.php b/app/views/institute/extern/new.php index 34736a9..356831a 100644 --- a/app/views/institute/extern/new.php +++ b/app/views/institute/extern/new.php @@ -10,7 +10,7 @@ <li class="content-item"> <a class="content-item-link" href="<?= $controller->edit($type_id) ?>"> <div class="content-item-img-wrapper"> - <?= Icon::create($config_type['icon'])->asImg(64) ?> + <?= Icon::create($config_type['icon'])->asSvg(64) ?> </div> <div class="content-item-text"> <p class="content-item-title"> diff --git a/app/views/login/index.php b/app/views/login/index.php index 96931e6..2488440 100644 --- a/app/views/login/index.php +++ b/app/views/login/index.php @@ -94,10 +94,10 @@ $enable_news = count($news_entries) > 0; <? if ($enable_faq && $enable_news): ?> <div id="login-infobox-button-wrapper"> <button id="hide-faq" class="selected" title="<?= _('Ankündigungen anzeigen') ?>"> - <?= Icon::create('news')->asImg(24, ['style' => 'align-self: end;']) ?> + <?= Icon::create('news')->asSvg(24, ['style' => 'align-self: end;']) ?> </button> <button id="show-faq" title="<?= _('Hinweise zum Login anzeigen')?>"> - <?= Icon::create('faq')->asImg(24, ['style' => 'align-self: end;']) ?> + <?= Icon::create('faq')->asSvg(24, ['style' => 'align-self: end;']) ?> </button> </div> diff --git a/app/views/lti/_link_user_info.php b/app/views/lti/_link_user_info.php index 568aaf8..0bdafc4 100644 --- a/app/views/lti/_link_user_info.php +++ b/app/views/lti/_link_user_info.php @@ -26,13 +26,13 @@ <p> <? if ($link->deployment->tool->terms_of_use_url) : ?> <a href="<?= htmlReady($link->deployment->tool->terms_of_use_url) ?>"> - <?= Icon::create('link-extern')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('link-extern')->asSvg(['class' => 'text-bottom']) ?> <?= _('Nutzungsbedingungen') ?> </a> <? endif ?> <? if ($link->deployment->tool->privacy_policy_url) : ?> <a href="<?= htmlReady($link->deployment->tool->privacy_policy_url) ?>"> - <?= Icon::create('link-extern')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('link-extern')->asSvg(['class' => 'text-bottom']) ?> <?= _('Datenschutzerklärung') ?> </a> <? endif ?> diff --git a/app/views/lti/_tool_info.php b/app/views/lti/_tool_info.php index fb9657e..d4248fa 100644 --- a/app/views/lti/_tool_info.php +++ b/app/views/lti/_tool_info.php @@ -19,12 +19,12 @@ <dd> <? if ($link && $link->launch_url) : ?> <a href="<?= htmlReady($link->launch_url) ?>"> - <?= Icon::create('link-extern')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('link-extern')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($link->launch_url) ?> </a> <? else : ?> <a href="<?= htmlReady($tool->launch_url) ?>"> - <?= Icon::create('link-extern')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('link-extern')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($tool->launch_url) ?> </a> <? endif ?> @@ -69,7 +69,7 @@ <ul> <li> <a href="<?= $controller->link_for('course/lti/iframe', $link->id) ?>"> - <?= Icon::create('link-extern')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('link-extern')->asSvg(['class' => 'text-bottom']) ?> <?= $controller->link_for('course/lti/iframe', $link->id) ?> </a> </li> diff --git a/app/views/lvgruppen/lvgruppen/details.php b/app/views/lvgruppen/lvgruppen/details.php index 56b34d4..d42b689 100644 --- a/app/views/lvgruppen/lvgruppen/details.php +++ b/app/views/lvgruppen/lvgruppen/details.php @@ -66,11 +66,11 @@ <span style="margin-left: 20%" onClick="jQuery('#mvv-lvgruppen-semester').find('.mvv-sem-hidden').slideToggle(); jQuery(this).find('span').toggle(); return false;"> <a href="<?= $controller->action_link('details/' . $lvgruppe->id, ['all_sem' => 1]) ?>"> <span> - <?= Icon::create('arr_1up', Icon::ROLE_CLICKABLE, ['style' => 'vertical-align:text-bottom;'])->asImg(); ?> + <?= Icon::create('arr_1up', Icon::ROLE_CLICKABLE, ['style' => 'vertical-align:text-bottom;'])->asSvg(); ?> <?= _('Alle Semester anzeigen') ?> </span> <span style="display: none;"> - <?= Icon::create('arr_1down', Icon::ROLE_CLICKABLE, ['style' => 'vertical-align:text-bottom;'])->asImg(); ?> + <?= Icon::create('arr_1down', Icon::ROLE_CLICKABLE, ['style' => 'vertical-align:text-bottom;'])->asSvg(); ?> <?= _('Nur aktuelle Semester anzeigen') ?> </span> </a> diff --git a/app/views/materialien/files/add_dokument.php b/app/views/materialien/files/add_dokument.php index bc72ce2..bf92e2e 100644 --- a/app/views/materialien/files/add_dokument.php +++ b/app/views/materialien/files/add_dokument.php @@ -37,7 +37,7 @@ <td> <div class="attachments" style="<?= (empty($documents) || !array_key_exists($key, $documents)) ? '' : 'display: none;'?>"> <span style="cursor:pointer;" onClick="$('#fileselector_<?= $language_key; ?>').toggle();$(this).toggle();"> - <?= Icon::create('add')->asImg(['title' => _('Datei hinzufügen'), 'class' => 'text-bottom']); ?> + <?= Icon::create('add')->asSvg(['title' => _('Datei hinzufügen'), 'class' => 'text-bottom']); ?> <?= _('Datei hinzufügen') ?> </span> <div id="fileselector_<?= $language_key; ?>" style="display:none;"> @@ -48,13 +48,13 @@ <span class="name"></span> <span class="size"></span> <button class="refresh_attachment as-link" data-language="<?= htmlReady($language_key) ?>"> - <?= Icon::create('refresh')->asImg([ + <?= Icon::create('refresh')->asSvg([ 'class' => 'text-bottom', 'title' => _('Datei aktualisieren'), ]) ?> </button> <button class="remove_attachment as-link"> - <?= Icon::create('trash')->asImg([ + <?= Icon::create('trash')->asSvg([ 'class' => 'text-bottom', 'title' => _('Datei löschen'), ]) ?> @@ -69,8 +69,8 @@ </div> <label id="upload_chooser" style="cursor: pointer;"> <input type="file" id="fileupload" multiple onChange="STUDIP.MVV.Document.upload_from_input(this, '<?= $language_key; ?>');" style="display: none;"> - <?= Icon::create('upload')->asImg(['title' => _('Datei hochladen'), 'class' => 'text-bottom']) ?> - <?= _("Datei hochladen") ?> + <?= Icon::create('upload')->asSvg(['title' => _('Datei hochladen'), 'class' => 'text-bottom']) ?> + <?= _('Datei hochladen') ?> </label> <br> <b><?= _('oder'); ?></b> @@ -91,13 +91,13 @@ <span class="name"><?= htmlReady($documents[$language_key]->filename) ?></span> <span class="size"><?= relsize($documents[$language_key]->file_ref->size) ?></span> <button class="refresh_attachment as-link" data-language="<?= htmlReady($language_key) ?>"> - <?= Icon::create('refresh')->asImg([ + <?= Icon::create('refresh')->asSvg([ 'class' => 'text-bottom', 'title' => _('Datei aktualisieren'), ]) ?> </button> <button class="remove_attachment as-link"> - <?= Icon::create('trash')->asImg([ + <?= Icon::create('trash')->asSvg([ 'class' => 'text-bottom', 'title' => _('Datei löschen'), ]) ?> diff --git a/app/views/materialien/files/index.php b/app/views/materialien/files/index.php index ae26c71..60f713f 100644 --- a/app/views/materialien/files/index.php +++ b/app/views/materialien/files/index.php @@ -31,7 +31,7 @@ <td class="dont-hide"> <? if ($mvv_file->getFiletypes()[0] === 'Link'): ?> <a href="<?= htmlReady($mvv_file->file_refs[0]->file_ref->file->metadata['url']); ?>" target="_blank"> - <?= Icon::create('link-extern')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('link-extern')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($mvv_file->getFilenames()[0]); ?> </a> <? else: ?> @@ -42,7 +42,7 @@ <?= Icon::create( $mvv_file->extern_visible?'visibility-visible':'visibility-invisible', Icon::ROLE_INFO - )->asImg([ + )->asSvg([ 'class' => 'text-bottom', 'title' => $mvv_file->extern_visible ? _('Sichtbar') : _('Unsichtbar') ]) ?> diff --git a/app/views/messages/_message_row.php b/app/views/messages/_message_row.php index a481aa3..4e2f019 100644 --- a/app/views/messages/_message_row.php +++ b/app/views/messages/_message_row.php @@ -9,8 +9,8 @@ <a href="<?= URLHelper::getLink('dispatch.php/messages/read/' . $message->getId() .'/' . ($received ? 'rec' : 'snd') ) ?>" data-dialog> <?= trim($message['subject']) ? htmlReady($message['subject']) : htmlReady(mila(kill_format($message['message']), 40)) ?> <div class="message-indicators"> - <span><?= $message->getNumAttachments() ? Icon::create('staple', Icon::ROLE_INFO)->asImg(['title' => _('Mit Anhang')]) : '' ?></span> - <span><?= $message->isAnswered($GLOBALS['user']->id) ? Icon::create('outbox', Icon::ROLE_INFO)->asImg(['title' => _('Beantwortet')]) : '' ?></span> + <span><?= $message->getNumAttachments() ? Icon::create('staple', Icon::ROLE_INFO)->asSvg(['title' => _('Mit Anhang')]) : '' ?></span> + <span><?= $message->isAnswered($GLOBALS['user']->id) ? Icon::create('outbox', Icon::ROLE_INFO)->asSvg(['title' => _('Beantwortet')]) : '' ?></span> </div> </a> <p class="hidden-medium-up responsive_author"> diff --git a/app/views/messages/overview.php b/app/views/messages/overview.php index 17996a6..5e9bd17 100644 --- a/app/views/messages/overview.php +++ b/app/views/messages/overview.php @@ -45,11 +45,11 @@ <tr> <td colspan="8"> <? if (Request::int("offset") > 0) : ?> - <a title="<?= _("zurück") ?>" href="<?= URLHelper::getLink("?", ['offset' => Request::int("offset") - $messageBufferCount > 0 ? Request::int("offset") - $messageBufferCount : null]) ?>"><?= Icon::create('arr_1left', 'clickable')->asImg(["class" => "text-bottom"]) ?></a> + <a title="<?= _('Zurück') ?>" href="<?= URLHelper::getLink('?', ['offset' => Request::int('offset') - $messageBufferCount > 0 ? Request::int('offset') - $messageBufferCount : null]) ?>"><?= Icon::create('arr_1left', 'clickable')->asSvg(['class' => 'text-bottom']) ?></a> <? endif ?> <? if (!empty($more)) : ?> <div style="float:right"> - <a title="<?= _("weiter") ?>" href="<?= URLHelper::getLink("?", ['offset' => Request::int("offset") + $messageBufferCount]) ?>"><?= Icon::create('arr_1right', 'clickable')->asImg(["class" => "text-bottom"]) ?></a> + <a title="<?= _("weiter") ?>" href="<?= URLHelper::getLink("?", ['offset' => Request::int("offset") + $messageBufferCount]) ?>"><?= Icon::create('arr_1right', 'clickable')->asSvg(["class" => "text-bottom"]) ?></a> </div> <? endif ?> </td> @@ -64,11 +64,11 @@ <tr> <td colspan="7"> <? if (Request::int("offset") > 0) : ?> - <a title="<?= _("zurück") ?>" href="<?= URLHelper::getLink("?", ['offset' => Request::int("offset") - $messageBufferCount > 0 ? Request::int("offset") - $messageBufferCount : null]) ?>"><?= Icon::create('arr_1left', 'clickable')->asImg(["class" => "text-bottom"]) ?></a> + <a title="<?= _('Zurück') ?>" href="<?= URLHelper::getLink('?', ['offset' => Request::int('offset') - $messageBufferCount > 0 ? Request::int('offset') - $messageBufferCount : null]) ?>"><?= Icon::create('arr_1left', 'clickable')->asSvg(['class' => 'text-bottom']) ?></a> <? endif ?> <? if (!empty($more)) : ?> <div style="float:right"> - <a title="<?= _("weiter") ?>" href="<?= URLHelper::getLink("?", ['offset' => Request::int("offset") + $messageBufferCount]) ?>"><?= Icon::create('arr_1right', 'clickable')->asImg(["class" => "text-bottom"]) ?></a> + <a title="<?= _('Weiter') ?>" href="<?= URLHelper::getLink('?', ['offset' => Request::int('offset') + $messageBufferCount]) ?>"><?= Icon::create('arr_1right', 'clickable')->asSvg(['class' => 'text-bottom']) ?></a> </div> <? endif ?> </td> @@ -90,7 +90,7 @@ <div style="display: none; background-color: rgba(255,255,255, 0.3); padding: 3px; border-radius: 5px; border: thin solid black;" id="move_handle"> - <?= Icon::create('mail')->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('mail')->asSvg(['class' => 'text-bottom']) ?> <span class="title"></span> </div> diff --git a/app/views/messages/read.php b/app/views/messages/read.php index 9e51374..85f7eab 100644 --- a/app/views/messages/read.php +++ b/app/views/messages/read.php @@ -52,9 +52,9 @@ <?= Icon::create('trash', 'clickable', ['title' => _("Schlagwort entfernen")])->asInput(["class" => 'text-bottom', "name" => 'remove_tag', "value" => $tag]) ?> </span> <? endforeach ?> - <span> - <input type="text" name="add_tag" style="width: 50px; opacity: 0.8;"> - <?= Icon::create('add', 'clickable', ['title' => _("Schlagwort hinzufügen")])->asInput(["class" => 'text-bottom']) ?> + <span class="message-tags-wrapper"> + <input type="text" name="add_tag"> + <?= Icon::create('add', 'clickable', ['title' => _('Schlagwort hinzufügen')])->asInput() ?> </span> </form> </td> @@ -67,8 +67,8 @@ <?= formatReady($message["message"]) ?> </div> <? if($attachment_folder): ?> -<h3><?= Icon::create('staple', Icon::ROLE_INACTIVE)->asImg(['class' => 'text-bottom']) ?><?= _('Anhänge') ?></h3> - <table class="default sortable-table" data-sortlist="[[2, 0]]"> + <table class="default sortable-table message-attachments" data-sortlist="[[2, 0]]"> + <caption><?= _('Anhänge') ?></caption> <?= $this->render_partial('files/_files_thead') ?> <? foreach($attachment_folder->getFiles() as $file): ?> <? if ($file->isVisible($GLOBALS['user']->id)) : ?> diff --git a/app/views/messages/write.php b/app/views/messages/write.php index 8bf05f6..f63b3c4 100644 --- a/app/views/messages/write.php +++ b/app/views/messages/write.php @@ -8,7 +8,7 @@ class="validation_notes studip"> <header> <h1> - <?= Icon::create('info-circle', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom validation_notes_icon']) ?> + <?= Icon::create('info-circle', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom validation_notes_icon']) ?> <?= _('Hinweise zum Ausfüllen des Formulars') ?> </h1> </header> @@ -36,7 +36,7 @@ <li id="template_adressee" style="display: none;" class="adressee"> <input type="hidden" name="message_to[]" value=""> <span class="visual"></span> - <a class="remove_adressee"><?= Icon::create('trash', 'clickable')->asImg(['class' => "text-bottom"]) ?></a> + <a class="remove_adressee"><?= Icon::create('trash', 'clickable')->asSvg(['class' => 'text-bottom']) ?></a> </li> <? foreach ($default_message->getRecipients() as $user) : ?> <li class="adressee"> @@ -44,7 +44,7 @@ <span class="visual"> <?= htmlReady($user['fullname']) ?> </span> - <a class="remove_adressee"><?= Icon::create('trash', 'clickable')->asImg(['class' => "text-bottom"]) ?></a> + <a class="remove_adressee"><?= Icon::create('trash', 'clickable')->asSvg(['class' => 'text-bottom']) ?></a> </li> <? endforeach ?> </ul> @@ -92,26 +92,26 @@ <a href="" onClick="STUDIP.Messages.toggleSetting('attachments'); return false;" aria-expanded="false" role="button" title="<?= _('Anhänge verwalten') ?>" aria-controls="attachments" id="toggle-attachments"> - <?= Icon::create('staple')->asImg(40) ?> + <?= Icon::create('staple')->asSvg(40) ?> <br> - <strong><?= _("Anhänge") ?></strong> + <strong><?= _('Anhänge') ?></strong> </a> </li> <? endif; ?> <li> <a href="" onClick="STUDIP.Messages.toggleSetting('tags'); return false;" aria-expanded="false" role="button" title="<?= _('Schlagworte verwalten') ?>" aria-controls="tags" id="toggle-tags"> - <?= Icon::create('star')->asImg(40) ?> + <?= Icon::create('star')->asSvg(40) ?> <br> - <strong><?= _("Schlagworte") ?></strong> + <strong><?= _('Schlagworte') ?></strong> </a> </li> <li> <a href="" onClick="STUDIP.Messages.toggleSetting('settings'); return false;" aria-expanded="false" role="button" title="<?= _('Optionen') ?>" aria-controls="settings" id="toggle-settings"> - <?= Icon::create('admin', 'clickable')->asImg(40) ?> + <?= Icon::create('admin', 'clickable')->asSvg(40) ?> <br> - <strong><?= _("Optionen") ?></strong> + <strong><?= _('Optionen') ?></strong> </a> </li> </ul> @@ -126,7 +126,7 @@ <span class="icon"></span> <span class="name"></span> <span class="size"></span> - <a class="remove_attachment"><?= Icon::create('trash', 'clickable')->asImg(['class' => "text-bottom"]) ?></a> + <a class="remove_attachment"><?= Icon::create('trash', 'clickable')->asSvg(['class' => 'text-bottom']) ?></a> </li> <? if ($default_attachments) : ?> <? foreach ($default_attachments as $a) : ?> @@ -134,7 +134,7 @@ <span class="icon"><?=$a['icon']?></span> <span class="name"><?=$a['name']?></span> <span class="size"><?=$a['size']?></span> - <a class="remove_attachment"><?= Icon::create('trash', 'clickable')->asImg(['class' => "text-bottom"]) ?></a> + <a class="remove_attachment"><?= Icon::create('trash', 'clickable')->asSvg(['class' => 'text-bottom']) ?></a> </li> <? endforeach ?> <? endif ?> @@ -147,8 +147,8 @@ </div> <label > <input type="file" id="fileupload" multiple onChange="STUDIP.Messages.upload_from_input(this);" style="display: none;"> - <?= Icon::create('upload')->asImg(['title' => _('Datei hochladen'), 'class' => 'text-bottom']) ?> - <?= _("Datei hochladen") ?> + <?= Icon::create('upload')->asSvg(['title' => _('Datei hochladen'), 'class' => 'text-bottom']) ?> + <?= _('Datei hochladen') ?> </label> <div id="upload_finished" style="display: none"><?= _("wird verarbeitet") ?></div> diff --git a/app/views/module/module/modul.php b/app/views/module/module/modul.php index 7d726aa..db40268 100644 --- a/app/views/module/module/modul.php +++ b/app/views/module/module/modul.php @@ -93,7 +93,7 @@ if ($GLOBALS['MVV_MODUL']['SPRACHE']['default'] !== $display_language) { <? if ($perm->haveFieldPerm('modul_variante', MvvPerm::PERM_WRITE)) : ?> <div class="mvv-item-list-buttons"> <a href="#" - class="mvv-item-remove"><?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Entfernen')])->asImg(); ?></a> + class="mvv-item-remove"><?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Entfernen')])->asSvg(); ?></a> </div> <? endif; ?> <input type="hidden" name="modul_item" value="<?= $modul->modul_variante->id ?>"> @@ -298,7 +298,7 @@ if ($GLOBALS['MVV_MODUL']['SPRACHE']['default'] !== $display_language) { </div> <div class="mvv-item-list-buttons"> <a href="#" - class="mvv-item-remove"><?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Entfernen')])->asImg(); ?></a> + class="mvv-item-remove"><?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Entfernen')])->asSvg(); ?></a> </div> <input type="hidden" name="responsible_item" value="<?= $modul->responsible_institute->institut_id ?>"> @@ -350,7 +350,7 @@ if ($GLOBALS['MVV_MODUL']['SPRACHE']['default'] !== $display_language) { </div> <div class="mvv-item-list-buttons"> <a href="#" class="mvv-item-remove"> - <?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Einrichtung entfernen')])->asImg(); ?> + <?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Einrichtung entfernen')])->asSvg(); ?> </a> </div> <input type="hidden" name="institutes_items[]" value="<?= $assigned_institute->institut_id ?>"> @@ -394,7 +394,7 @@ if ($GLOBALS['MVV_MODUL']['SPRACHE']['default'] !== $display_language) { <li id="language_<?= $assigned_language->lang ?>" class="drag-handle sort_items"> <div class="mvv-item-list-text"><?= htmlReady($assigned_language->getDisplayName()) ?></div> <div class="mvv-item-list-buttons"> - <a href="#" class="mvv-item-remove"><?= Icon::create('trash', 'clickable', array('title' => _('Sprache entfernen')))->asImg(); ?></a> + <a href="#" class="mvv-item-remove"><?= Icon::create('trash', 'clickable', array('title' => _('Sprache entfernen')))->asSvg(); ?></a> </div> <input type="hidden" name="language_items[]" value="<?= htmlReady($assigned_language->lang) ?>"> </li> diff --git a/app/views/module/module/module.php b/app/views/module/module/module.php index 8390976..0496141 100644 --- a/app/views/module/module/module.php +++ b/app/views/module/module/module.php @@ -15,7 +15,7 @@ <? $details_action = $details_action ?? 'details'; ?> <a class="mvv-load-in-new-row" href="<?= $controller->action_link($details_action, $modul->getId()) ?>"> <? if ($ampel_icon) : ?> - <?= $ampel_icon->asImg(['title' => $ampelstatus, 'style' => 'vertical-align: bottom;']) ?> + <?= $ampel_icon->asSvg(['title' => $ampelstatus, 'style' => 'vertical-align: bottom;']) ?> <? endif; ?> <?= htmlReady($modul->code) ?> </a> @@ -37,7 +37,7 @@ <? else : ?> <td style="white-space:nowrap; font-weight: 700; padding-left: 20px;"> <? if ($ampel_icon) : ?> - <?= $ampel_icon->asImg(['title' => $ampelstatus, 'style' => 'vertical-align: bottom;']) ?> + <?= $ampel_icon->asSvg(['title' => $ampelstatus, 'style' => 'vertical-align: bottom;']) ?> <? endif; ?> <?= htmlReady($modul->code) ?> </td> diff --git a/app/views/module/module/modulteil.php b/app/views/module/module/modulteil.php index a990ab9..a3a0a92 100644 --- a/app/views/module/module/modulteil.php +++ b/app/views/module/module/modulteil.php @@ -143,7 +143,7 @@ if ($GLOBALS['MVV_MODULTEIL']['SPRACHE']['default'] != $display_language) { <div class="mvv-item-list-text"><?= htmlReady($assigned_language->getDisplayName()) ?></div> <div class="mvv-item-list-buttons"> <a href="#" class="mvv-item-remove"> - <?= Icon::create('trash', Icon::ROLE_CLICKABLE ,['title' => _('Sprache entfernen')])->asImg(); ?> + <?= Icon::create('trash', Icon::ROLE_CLICKABLE ,['title' => _('Sprache entfernen')])->asSvg(); ?> </a> </div> <input type="hidden" name="language_items[]" value="<?= $assigned_language->lang ?>"> diff --git a/app/views/multipersonsearch/js_form.php b/app/views/multipersonsearch/js_form.php index f07fd92..1be3d50 100644 --- a/app/views/multipersonsearch/js_form.php +++ b/app/views/multipersonsearch/js_form.php @@ -11,10 +11,10 @@ <div class="search-wrapper"> <input id="<?= $name . '_searchinput'; ?>" type="text" placeholder="<?= _("Suchen"); ?>" value="" name="<?= $name . '_searchinput'; ?>" aria-label="<?= _("Suchen"); ?>" spellcheck="false"> <button id="<?= $name . '_resetsearch'; ?>" class="icon-button enter-accessible reset-search" onclick='STUDIP.MultiPersonSearch.resetSearch(); return false' title="<?= _('Suche zurücksetzen') ?>"> - <?= Icon::create('decline')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('decline')->asSvg(['class' => 'text-bottom']) ?> </button> <button class="icon-button enter-accessible search" onclick='STUDIP.MultiPersonSearch.search();return false' title="<?= _('Suche starten') ?>"> - <?= Icon::create('search')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('search')->asSvg(['class' => 'text-bottom']) ?> </button> </div> </label> diff --git a/app/views/my_courses/_deputy_bosses.php b/app/views/my_courses/_deputy_bosses.php index a1537e5..ca8392d 100644 --- a/app/views/my_courses/_deputy_bosses.php +++ b/app/views/my_courses/_deputy_bosses.php @@ -37,17 +37,17 @@ <td class="actions"> <? if ($boss->edit_about && $deputies_edit_about_enabled) : ?> <a href="<?= URLHelper::getLink('dispatch.php/profile', ['username' => $boss->boss_username]) ?>"> - <?= Icon::create('person')->asImg(['title' => _('Personenangaben bearbeiten')]) ?> + <?= Icon::create('person')->asSvg(['title' => _('Personenangaben bearbeiten')]) ?> </a> <? endif ?> <a href="<?= URLHelper::getLink( 'dispatch.php/messages/write', ['filter' => 'send_sms_to_all', 'rec_uname' => $boss->boss_username])?>" data-dialog> - <?= Icon::create('mail')->asImg(['title' => sprintf(_('Nachricht an %s senden'), $boss_fullname)]) ?> + <?= Icon::create('mail')->asSvg(['title' => sprintf(_('Nachricht an %s senden'), $boss_fullname)]) ?> </a> <a href="<?= $controller->link_for('my_courses/delete_boss/' . $boss->range_id) ?>" data-confirm="<?= sprintf(_('Wollen Sie sich wirklich als Standardvertretung von %s austragen?'), htmlReady($boss_fullname)) ?>"> - <?= Icon::create('trash')->asImg([ + <?= Icon::create('trash')->asSvg([ 'title' => sprintf(_('Mich als Standardvertretung von %s austragen'), $boss_fullname) ]) ?> </a> diff --git a/app/views/my_courses/archive.php b/app/views/my_courses/archive.php index 57d6f7d..e86537c 100644 --- a/app/views/my_courses/archive.php +++ b/app/views/my_courses/archive.php @@ -38,10 +38,10 @@ <td align="center"> <? if ($row['forumdump'] and archiv_check_perm($row['seminar_id'])) : ?> <a href="<?= URLHelper::getLink('dispatch.php/archive/forum/' . $row['seminar_id']) ?>" data-dialog> - <?= Icon::create('forum')->asImg(['title' => _('Beiträge des Forums der Veranstaltung')]) ?> + <?= Icon::create('forum')->asSvg(['title' => _('Beiträge des Forums der Veranstaltung')]) ?> </a> <? else: ?> - <?= Icon::create('forum', Icon::ROLE_INACTIVE)->asImg(['style' => 'visibility: hidden;']) ?> + <?= Icon::create('forum', Icon::ROLE_INACTIVE)->asSvg(['style' => 'visibility: hidden;']) ?> <? endif; ?> @@ -49,22 +49,22 @@ <? if(($row['archiv_file_id']) and archiv_check_perm($row['seminar_id'])): ?> <a href="<?= FileManager::getDownloadLinkForArchivedCourse($course, false) ?>"> - <?= Icon::create('file-archive')->asImg(['title' => _('Dateisammlung der Veranstaltung herunterladen')]) ?> + <?= Icon::create('file-archive')->asSvg(['title' => _('Dateisammlung der Veranstaltung herunterladen')]) ?> </a> <? elseif(($row['archiv_protected_file_id']) and archiv_check_perm($row['seminar_id'] == 'admin')): ?> <a href="<?= FileManager::getDownloadLinkForArchivedCourse($course, true) ?>"> - <?= Icon::create('file-archive')->asImg(['title' => _('Dateisammlung der Veranstaltung herunterladen')]) ?> + <?= Icon::create('file-archive')->asSvg(['title' => _('Dateisammlung der Veranstaltung herunterladen')]) ?> </a> <? else: ?> - <?= Icon::create('file-archive', Icon::ROLE_INACTIVE)->asImg(['style' => 'visibility: hidden;']) ?> + <?= Icon::create('file-archive', Icon::ROLE_INACTIVE)->asSvg(['style' => 'visibility: hidden;']) ?> <? endif; ?> <? if ($row['wikidump'] and archiv_check_perm($row['seminar_id'])) : ?> <a href="<?= URLHelper::getLink('dispatch.php/archive/wiki/' . $row['seminar_id']) ?>" data-dialog> - <?= Icon::create('wiki')->asImg(['title' => _('Beiträge des Wikis der Veranstaltung')]) ?> + <?= Icon::create('wiki')->asSvg(['title' => _('Beiträge des Wikis der Veranstaltung')]) ?> </a> <? else: ?> - <?= Icon::create('wiki', Icon::ROLE_INACTIVE)->asImg(['style' => 'visibility: hidden;']) ?> + <?= Icon::create('wiki', Icon::ROLE_INACTIVE)->asSvg(['style' => 'visibility: hidden;']) ?> <? endif; ?> </td> <td style="text-align: center"><?= $row['status'] ?></td> diff --git a/app/views/my_courses/waiting_list.php b/app/views/my_courses/waiting_list.php index b3aa7eb..3ac47ed 100644 --- a/app/views/my_courses/waiting_list.php +++ b/app/views/my_courses/waiting_list.php @@ -75,7 +75,7 @@ href="<?= $controller->link_for('course/details/index', $wait['seminar_id']) ?>" > <? $params = tooltip2(_('Veranstaltungsdetails anzeigen')) ?> - <?= Icon::create('info-circle', Icon::ROLE_INACTIVE)->asImg(['style' => 'cursor: pointer']) ?> + <?= Icon::create('info-circle', Icon::ROLE_INACTIVE)->asSvg(['style' => 'cursor: pointer']) ?> </a> </td> <td style="text-align: center"> @@ -99,11 +99,11 @@ <td style="text-align: right"> <? if ($wait['status'] === 'accepted' && $wait['admission_binding']) : ?> <a href="<?= $controller->url_for('my_courses/decline_binding') ?>"> - <?= Icon::create('door-leave', Icon::ROLE_INACTIVE)->asImg(['title' => _('Die Teilnahme ist bindend. Bitte wenden Sie sich an die Lehrenden.')]) ?> + <?= Icon::create('door-leave', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Die Teilnahme ist bindend. Bitte wenden Sie sich an die Lehrenden.')]) ?> </a> <? else : ?> <a href="<?= $controller->link_for('my_courses/decline', $wait['seminar_id'], ['cmd' => 'suppose_to_kill_admission']) ?>"> - <?= Icon::create('door-leave', Icon::ROLE_INACTIVE)->asImg(['title' => _('aus der Veranstaltung abmelden')]) ?> + <?= Icon::create('door-leave', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Aus der Veranstaltung abmelden')]) ?> </a> <? endif ?> </td> diff --git a/app/views/my_ilias_accounts/my_courses.php b/app/views/my_ilias_accounts/my_courses.php index bd381cf..c748bdf 100644 --- a/app/views/my_ilias_accounts/my_courses.php +++ b/app/views/my_ilias_accounts/my_courses.php @@ -25,7 +25,7 @@ <? if (array_key_exists($ilias_index, $courses_list) && count($courses_list[$ilias_index]) > 0) : ?> <? foreach ($courses_list[$ilias_index] as $crs_id => $course) : ?> <tr> - <td><?= Icon::create('learnmodule', Icon::ROLE_INFO)->asImg(['title' => _('ILIAS-Kurs')]) ?></td> + <td><?= Icon::create('learnmodule', Icon::ROLE_INFO)->asSvg(['title' => _('ILIAS-Kurs')]) ?></td> <td> <? if ($course['online'] || in_array($course['status'], [2, 4])) : ?> <a href="<?= URLHelper::getLink("dispatch.php/my_ilias_accounts/view_course/{$ilias_index}/{$crs_id}")?>" data-dialog=""><?= htmlReady($course['title']) ?></a> @@ -37,7 +37,7 @@ <td> <? if ($course['studip_object']) : ?> <a href="<?= URLHelper::getLink('dispatch.php/course/basicdata/view', ['cid' => $course['studip_object']]) ?>"> - <?= Icon::create('seminar')->asImg(['title' => Course::find($course['studip_object'])->Name]) ?> + <?= Icon::create('seminar')->asSvg(['title' => Course::find($course['studip_object'])->Name]) ?> </a> <? endif ?> </td> @@ -82,7 +82,7 @@ <? if (!empty($workgroups_list[$ilias_index])) : ?> <? foreach ($workgroups_list[$ilias_index] as $cat_id => $workgroup) : ?> <tr> - <td><?= Icon::create('community', Icon::ROLE_INFO)->asImg(['title' => _('ILIAS-Arbeitsbereich')]) ?></td> + <td><?= Icon::create('community', Icon::ROLE_INFO)->asSvg(['title' => _('ILIAS-Arbeitsbereich')]) ?></td> <td> <a href="<?= URLHelper::getLink("dispatch.php/my_ilias_accounts/view_workgroup/{$ilias_index}/{$cat_id}")?>" data-dialog=""><?= htmlReady($workgroup['title']) ?></a> </td> diff --git a/app/views/my_institutes/index.php b/app/views/my_institutes/index.php index e22b665..f63c244 100644 --- a/app/views/my_institutes/index.php +++ b/app/views/my_institutes/index.php @@ -62,7 +62,7 @@ URLHelper::getLink('dispatch.php/institute/overview', ['auswahl' => $instid, 'redirect_to' => $nav->getURL()]) ?>" <?= $nav->hasBadgeNumber() ? 'class="badge" data-badge-number="' . intval($nav->getBadgeNumber()) . '"' : '' ?>> - <?= $nav->getImage()->asImg($nav->getLinkAttributes()) ?> + <?= $nav->getImage()->asSvg($nav->getLinkAttributes()) ?> </a> </li> <? else: ?> @@ -78,7 +78,7 @@ <td style="text-align: left; white-space: nowrap"> <? if (Config::get()->ALLOW_SELFASSIGN_INSTITUTE && $values['perms'] === 'user') : ?> <a href="<?= $controller->decline_inst($instid) ?>"> - <?= Icon::create('door-leave')->asImg(['title' => _("aus der Einrichtung austragen")]) ?> + <?= Icon::create('door-leave')->asSvg(['title' => _('Aus der Einrichtung austragen')]) ?> </a> <? else : ?> <?= Assets::img('blank.gif', ['size' => Icon::SIZE_DEFAULT]) ?> diff --git a/app/views/my_studygroups/_course.php b/app/views/my_studygroups/_course.php index dc36804..3a854ba 100644 --- a/app/views/my_studygroups/_course.php +++ b/app/views/my_studygroups/_course.php @@ -35,7 +35,7 @@ URLHelper::getLink('dispatch.php/course/go', ['to' => $group['seminar_id'], 'redirect_to' => $nav->getURL()]) ?>" <?= $nav->hasBadgeNumber() ? 'class="badge" data-badge-number="' . intval($nav->getBadgeNumber()) . '"' : '' ?>> - <?= $nav->getImage()->asImg($nav->getLinkAttributes()) ?> + <?= $nav->getImage()->asSvg($nav->getLinkAttributes()) ?> </a> </li> <? elseif (is_string($key)) : ?> @@ -56,18 +56,18 @@ <? endif ?> <? if (!empty($adminnavigation)) : ?> <a href="<?= URLHelper::getLink($adminnavigation->getURL(), ['cid' => $group['seminar_id']]) ?>"> - <?= $adminnavigation->getImage()->asImg($adminnavigation->getLinkAttributes())?> + <?= $adminnavigation->getImage()->asSvg($adminnavigation->getLinkAttributes())?> </a> <? endif ?> <? elseif (!empty($group['binding'])) : ?> <a href="<?= URLHelper::getLink('', ['to' => $group['seminar_id'], 'cmd' => 'no_kill']) ?>"> - <?= Icon::create('door-leave', Icon::ROLE_INACTIVE)->asImg(['title' => _('Die Teilnahme ist bindend. Bitte wenden Sie sich an die Lehrenden.')]) ?> + <?= Icon::create('door-leave', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Die Teilnahme ist bindend. Bitte wenden Sie sich an die Lehrenden.')]) ?> </a> <? else : ?> <a href="<?= URLHelper::getLink("dispatch.php/my_courses/decline/{$group['seminar_id']}", ['cmd' => 'suppose_to_kill']) ?>"> - <?= Icon::create('door-leave', Icon::ROLE_INACTIVE)->asImg(['title' => _('aus der Studiengruppe abmelden')]) ?> + <?= Icon::create('door-leave', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Aus der Studiengruppe abmelden')]) ?> </a> <? endif ?> </td> diff --git a/app/views/news/display.php b/app/views/news/display.php index 5f62443..c8f271e 100644 --- a/app/views/news/display.php +++ b/app/views/news/display.php @@ -2,7 +2,7 @@ <article class="studip"> <header> <h1> - <?= Icon::create('news', 'info')->asImg() ?> + <?= Icon::create('news', 'info')->asSvg() ?> <?= _('Ankündigungen') ?> </h1> @@ -10,20 +10,20 @@ <? if ($perm): ?> <a href="<?= $controller->link_for('news/edit_news/new/' . $range); ?>" data-dialog title="<?= _('Hinzufügen') ?>" aria-label="<?= _('Hinzufügen') ?>"> - <?= Icon::create('add') ?> + <?= Icon::create('add')->asSvg() ?> </a> <? endif; ?> <? if ($perm && Config::get()->NEWS_RSS_EXPORT_ENABLE): ?> <a data-dialog="size=auto;reload-on-close" title="<?=_('RSS-Feed konfigurieren') ?>" aria-label="<?=_('RSS-Feed konfigurieren') ?>" href="<?= $controller->link_for('news/rss_config/' . $range); ?>"> - <?= Icon::create('admin') ?> + <?= Icon::create('admin')->asSvg() ?> </a> <? endif; ?> <? if ($rss_id): ?> <a href="<?= URLHelper::getLink('rss.php', ['id' => $rss_id]) ?>" title="<?= _('RSS-Feed') ?>" aria-label="<?= _('RSS-Feed') ?>"> - <?= Icon::create('rss') ?> + <?= Icon::create('rss')->asSvg() ?> </a> <? endif; ?> </nav> @@ -35,7 +35,7 @@ <header> <h1> <a href="<?= ContentBoxHelper::href($new->id, ['contentbox_type' => 'news']) ?>"> - <?= Icon::create('news') ?> + <?= Icon::create('news')->asSvg() ?> <?= htmlReady($new['topic']); ?> </a> </h1> diff --git a/app/views/oer/admin/hosts.php b/app/views/oer/admin/hosts.php index 1bce5e5..be21197 100644 --- a/app/views/oer/admin/hosts.php +++ b/app/views/oer/admin/hosts.php @@ -17,19 +17,19 @@ <tr id="host_<?= $host->getId() ?>" data-host_id="<?= $host->getId() ?>"> <td> <? if ($host->isMe()) : ?> - <?= Icon::create('home', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom', 'title' => _('Das ist Ihr Stud.IP')]) ?> + <?= Icon::create('home', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom', 'title' => _('Das ist Ihr Stud.IP')]) ?> <? endif ?> <?= htmlReady($host['name']) ?></td> <td> <a href="<?= htmlReady($host['url']) ?>" target="_blank"> - <?= Icon::create('link-extern')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('link-extern')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($host['url']) ?> </a> </td> <td> <?= $host['public_key'] ? md5($host['public_key']) : "" ?> <? if (strpos($host['public_key'], "\r") !== false) : ?> - <?= Icon::create('exclaim', Icon::ROLE_STATUS_RED)->asImg(['class' => 'text-bottom', 'title' => _('Der Key hat ein Carriage-Return Zeichen, weshalb der Hash des Public-Keys vermutlich vom Original-Hash abweicht.')]) ?> + <?= Icon::create('exclaim', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'text-bottom', 'title' => _('Der Key hat ein Carriage-Return-Zeichen, weshalb der Hash des Public-Keys vermutlich vom Original-Hash abweicht.')]) ?> <? endif ?> </td> <td class="index_server"> @@ -45,7 +45,7 @@ <?= Icon::create("checkbox-".($host['allowed_as_index_server'] ? "" : "un")."checked") ?> </a> <? else : ?> - <?= Icon::create("checkbox-unchecked", Icon::ROLE_INACTIVE)->asImg(['title' => _('Dieser Server steht nicht als Indexserver zur Verfügung.')]) ?> + <?= Icon::create("checkbox-unchecked", Icon::ROLE_INACTIVE)->asSvg(['title' => _('Dieser Server steht nicht als Indexserver zur Verfügung.')]) ?> <? endif ?> <? endif ?> </td> @@ -64,7 +64,7 @@ <? if (!$host->isMe()) : ?> <a href="<?= $controller->link_for("oer/admin/ask_for_hosts/".$host->getId()) ?>" title="<?= _('Diesen Server nach weiteren bekannten Hosts fragen.') ?>"> - <?= Icon::create('campusnavi')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('campusnavi')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> </td> diff --git a/app/views/oer/embed/_link.php b/app/views/oer/embed/_link.php index 684a388..b22ab83 100644 --- a/app/views/oer/embed/_link.php +++ b/app/views/oer/embed/_link.php @@ -1,7 +1,7 @@ <div style="text-align: right;"> <a href="<?= URLHelper::getLink("dispatch.php/oer/market/details/{$id}") ?>" title="<?= htmlReady(_('Zum OER Campus wechseln')) ?>"> - <?= Icon::create('oer-campus')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('oer-campus')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($material['name']) ?> </a> </div> diff --git a/app/views/oer/embed/standard.php b/app/views/oer/embed/standard.php index 4374c37..b5c7a4c 100644 --- a/app/views/oer/embed/standard.php +++ b/app/views/oer/embed/standard.php @@ -3,6 +3,6 @@ <? else : ?> <a href="<?= htmlReady($source_url) ?>" target="_blank"> <? endif ?> - <?= Icon::create('oer-campus')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('oer-campus')->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($material['name']) ?> </a> diff --git a/app/views/oer/market/_details_file.php b/app/views/oer/market/_details_file.php index 18f0f70..0481793 100644 --- a/app/views/oer/market/_details_file.php +++ b/app/views/oer/market/_details_file.php @@ -1,7 +1,7 @@ <? if ($file['is_folder']) : ?> <? if ($name !== "__MACOSX") : ?> <li class="folder"> - <?= Icon::create('folder-full', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('folder-full', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($name) ?> <ol> <? foreach ($file['structure'] as $name => $subfile) : ?> @@ -15,7 +15,7 @@ <div class="size" style="float: right"> <?= htmlReady(number_format($file['size'] / 1024, 2)) ?> KB </div> - <?= FileManager::getFileIcon($name, Icon::ROLE_INFO)->asImg(['class' => 'text-bottom']) ?> + <?= FileManager::getFileIcon($name, Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($name) ?> </li> <? endif ?> diff --git a/app/views/oer/market/_material_short.php b/app/views/oer/market/_material_short.php index d863b6a..ca76936 100644 --- a/app/views/oer/market/_material_short.php +++ b/app/views/oer/market/_material_short.php @@ -8,7 +8,7 @@ <a href="<?= $controller->link_for('oer/market/details', $material) ?>" target="_blank"> <header> <h1> - <?= $material->getIcon()->asImg(['class' => 'text-bottom']) ?> + <?= $material->getIcon()->asSvg(['class' => 'text-bottom']) ?> <div class="title"> <? if (strlen($material->name) > 50) : ?> <?= htmlReady(substr($material->name, 0, 50)) . ' ...' ?> diff --git a/app/views/oer/market/add_to_course.php b/app/views/oer/market/add_to_course.php index 4ac30fd..79207ae 100644 --- a/app/views/oer/market/add_to_course.php +++ b/app/views/oer/market/add_to_course.php @@ -35,7 +35,7 @@ <button type="submit" title="<?= _('Zur Veranstaltung hinzufügen') ?>" style="border: none; background: none; cursor: pointer;"> - <?= Icon::create('add')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('add')->asSvg(['class' => 'text-bottom']) ?> </button> </form> </td> diff --git a/app/views/oer/market/add_to_course_select_class.php b/app/views/oer/market/add_to_course_select_class.php index 72c092a..502548b 100644 --- a/app/views/oer/market/add_to_course_select_class.php +++ b/app/views/oer/market/add_to_course_select_class.php @@ -10,7 +10,7 @@ <? $icon = $object->oerGetIcon() ?> <? if ($icon) : ?> - <?= $icon->asImg(50) ?> + <?= $icon->asSvg(50) ?> <? endif ?> <?= htmlReady($metadata['displayname']) ?> </a> diff --git a/app/views/oer/market/details.php b/app/views/oer/market/details.php index 7a08ae4..67eba3a 100644 --- a/app/views/oer/market/details.php +++ b/app/views/oer/market/details.php @@ -180,11 +180,11 @@ title="<?= $GLOBALS['perm']->have_perm("autor") ? _('Geben Sie die erste Bewertung ab.') : _('Noch keine Bewertung abgegeben.') ?>" href="<?= $controller->link_for('oer/market/review/' . $material->getId()) ?>" data-dialog> <? endif ?> - <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asImg(50) ?> - <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asImg(50) ?> - <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asImg(50) ?> - <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asImg(50) ?> - <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asImg(50) ?> + <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asSvg(50) ?> + <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asSvg(50) ?> + <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asSvg(50) ?> + <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asSvg(50) ?> + <?= Icon::create("star", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INACTIVE)->asSvg(50) ?> <? if ($allowed_to_review) : ?> </a> <? endif ?> @@ -194,15 +194,15 @@ <? endif ?> <? $material['rating'] = round($material['rating'], 1) / 2 ?> <? $v = $material['rating'] >= 0.75 ? "" : ($material['rating'] >= 0.25 ? "-halffull" : "-empty") ?> - <?= Icon::create("star$v", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asImg(50) ?> + <?= Icon::create("star{$v}", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asSvg(50) ?> <? $v = $material['rating'] >= 1.75 ? "" : ($material['rating'] >= 1.25 ? "-halffull" : "-empty") ?> - <?= Icon::create("star$v", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asImg(50) ?> + <?= Icon::create("star{$v}", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asSvg(50) ?> <? $v = $material['rating'] >= 2.75 ? "" : ($material['rating'] >= 2.25 ? "-halffull" : "-empty") ?> - <?= Icon::create("star$v", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asImg(50) ?> + <?= Icon::create("star{$v}", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asSvg(50) ?> <? $v = $material['rating'] >= 3.75 ? "" : ($material['rating'] >= 3.25 ? "-halffull" : "-empty") ?> - <?= Icon::create("star$v", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asImg(50) ?> + <?= Icon::create("star{$v}", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asSvg(50) ?> <? $v = $material['rating'] >= 4.75 ? "" : ($material['rating'] >= 4.25 ? "-halffull" : "-empty") ?> - <?= Icon::create("star$v", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asImg(50) ?> + <?= Icon::create("star{$v}", $allowed_to_review ? Icon::ROLE_CLICKABLE : Icon::ROLE_INFO)->asSvg(50) ?> <? if ($allowed_to_review) : ?> </a> <? endif ?> @@ -260,12 +260,12 @@ <div class="comments center"> <? if (count($review->comments)) : ?> <a href="<?= $controller->link_for("oer/market/discussion/".$review->getId()) ?>"> - <?= Icon::create("comment")->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('comment')->asSvg(['class' => 'text-bottom']) ?> <?= sprintf(_('%s Kommentare dazu'), count($review->comments)) ?> </a> <? elseif ($material->isMine()) : ?> <a href="<?= $controller->link_for("oer/market/discussion/".$review->getId()) ?>"> - <?= Icon::create("comment")->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('comment')->asSvg(['class' => 'text-bottom']) ?> <?= _('Dazu einen Kommentar schreiben') ?> </a> <? endif ?> diff --git a/app/views/oer/market/discussion.php b/app/views/oer/market/discussion.php index 2e10c38..432439e 100644 --- a/app/views/oer/market/discussion.php +++ b/app/views/oer/market/discussion.php @@ -1,5 +1,5 @@ <a href="<?= $controller->link_for("oer/market/details/".$thread['context_id']) ?>"> - <?= Icon::create('arr_1left')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('arr_1left')->asSvg(['class' => 'text-bottom']) ?> <?= _('Zurück') ?> </a> diff --git a/app/views/oer/mymaterial/_material_list.php b/app/views/oer/mymaterial/_material_list.php index afb47b3..8658e6c 100644 --- a/app/views/oer/mymaterial/_material_list.php +++ b/app/views/oer/mymaterial/_material_list.php @@ -14,7 +14,7 @@ <tr> <td> <? if ($material->draft) : ?> - <?= Icon::create('lock-locked', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('lock-locked', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <? endif ?> </td> <td> @@ -24,23 +24,23 @@ </td> <td> <? if ($material->rating === null) : ?> - <?= Icon::create('star', Icon::ROLE_INFO)->asImg($starwidth) ?> - <?= Icon::create('star', Icon::ROLE_INFO)->asImg($starwidth) ?> - <?= Icon::create('star', Icon::ROLE_INFO)->asImg($starwidth) ?> - <?= Icon::create('star', Icon::ROLE_INFO)->asImg($starwidth) ?> - <?= Icon::create('star', Icon::ROLE_INFO)->asImg($starwidth) ?> + <?= Icon::create('star', Icon::ROLE_INFO)->asSvg($starwidth) ?> + <?= Icon::create('star', Icon::ROLE_INFO)->asSvg($starwidth) ?> + <?= Icon::create('star', Icon::ROLE_INFO)->asSvg($starwidth) ?> + <?= Icon::create('star', Icon::ROLE_INFO)->asSvg($starwidth) ?> + <?= Icon::create('star', Icon::ROLE_INFO)->asSvg($starwidth) ?> <? else : ?> <? $material->rating = round($material->rating, 1) / 2 ?> <? $v = $material->rating >= 0.75 ? '' : ($material->rating >= 0.25 ? '-halffull' : '-empty') ?> - <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asImg($starwidth) ?> + <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asSvg($starwidth) ?> <? $v = $material->rating >= 1.75 ? '' : ($material->rating >= 1.25 ? '-halffull' : '-empty') ?> - <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asImg($starwidth) ?> + <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asSvg($starwidth) ?> <? $v = $material->rating >= 2.75 ? '' : ($material->rating >= 2.25 ? '-halffull' : '-empty') ?> - <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asImg($starwidth) ?> + <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asSvg($starwidth) ?> <? $v = $material->rating >= 3.75 ? '' : ($material->rating >= 3.25 ? '-halffull' : '-empty') ?> - <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asImg($starwidth) ?> + <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asSvg($starwidth) ?> <? $v = $material->rating >= 4.75 ? '' : ($material->rating >= 4.25 ? '-halffull' : '-empty') ?> - <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asImg($starwidth) ?> + <?= Icon::create("star{$v}", Icon::ROLE_INFO)->asSvg($starwidth) ?> <? endif ?> </td> <td> diff --git a/app/views/oer/mymaterial/edit.php b/app/views/oer/mymaterial/edit.php index 188ea3b..77014f6 100644 --- a/app/views/oer/mymaterial/edit.php +++ b/app/views/oer/mymaterial/edit.php @@ -152,7 +152,7 @@ <?= htmlReady($user['name']) ?> </span> <? if (count($material->users) > 1) : ?> - <?= Icon::create('trash')->asImg(['class' => "text-bottom", 'title' => _('Person als Autor entfernen.')]) ?> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom', 'title' => _('Person als Autor entfernen.')]) ?> <? endif ?> </div> </label> @@ -170,7 +170,7 @@ <?= htmlReady($user ? $user->getFullName() : _('unbekannt')) ?> </span> <? if (count($material->users) > 1) : ?> - <?= Icon::create('trash')->asImg(['class' => "text-bottom", 'title' => _('Person als Autor/Autorin entfernen.')]) ?> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom', 'title' => _('Person als Autor/Autorin entfernen.')]) ?> <? endif ?> </div> </label> diff --git a/app/views/privacy/landing.php b/app/views/privacy/landing.php index 9ca20bc..a4829fd 100644 --- a/app/views/privacy/landing.php +++ b/app/views/privacy/landing.php @@ -10,7 +10,7 @@ <li> <a href="<?= $controller->link_for("privacy/index/{$user_id}/{$key}") ?>" <? if (Request::isDialog()) echo 'data-dialog="size=big"'; ?>> <h3> - <?= $row['icon']->asImg(false) ?> + <?= $row['icon']->asSvg(false) ?> <?= htmlReady($row['title']) ?> </h3> <p> diff --git a/app/views/profile_modules/index.php b/app/views/profile_modules/index.php index ae844f8..19d46cc 100644 --- a/app/views/profile_modules/index.php +++ b/app/views/profile_modules/index.php @@ -32,7 +32,7 @@ <div class="element_description"> <? if ($item['icon']): ?> - <?= $item['icon']->asImg(['class' => 'plugin_icon text-bottom']) ?> + <?= $item['icon']->asSvg(['class' => 'plugin_icon text-bottom']) ?> <? endif ?> <strong class="shortdesc"> diff --git a/app/views/public_courses/index.php b/app/views/public_courses/index.php index 8ecd0ab..19f8b7f 100644 --- a/app/views/public_courses/index.php +++ b/app/views/public_courses/index.php @@ -69,7 +69,7 @@ } ?> <a href="<?= URLHelper::getLink('dispatch.php/course/go?to='. $id . '&redirect_to=' . str_replace('?', '&', $navigation->getURL())) ?>"<?= $badge ?>> - <?= $navigation->getImage()->asImg($navigation->getLinkAttributes()) ?> + <?= $navigation->getImage()->asSvg($navigation->getLinkAttributes()) ?> </a> <? else: ?> <?= Assets::img('blank.gif', ['width' => Icon::SIZE_DEFAULT, 'height' => Icon::SIZE_DEFAULT]) ?> diff --git a/app/views/questionnaire/_answer_description_container.php b/app/views/questionnaire/_answer_description_container.php index dfdb9f8..26c45b7 100644 --- a/app/views/questionnaire/_answer_description_container.php +++ b/app/views/questionnaire/_answer_description_container.php @@ -10,7 +10,7 @@ </div> <article class="description"> <? if (isset($vote->questiondata['mandatory']) && $vote->questiondata['mandatory']) : ?> - <?= Icon::create('star', Icon::ROLE_ATTENTION)->asImg(['class' => 'text-bottom', 'alt' => '']) ?> + <?= Icon::create('star', Icon::ROLE_ATTENTION)->asSvg(['class' => 'text-bottom', 'alt' => '']) ?> <?= _('Pflichtantwort') ?> <? endif ?> <?= formatReady($vote->questiondata['description']) ?> diff --git a/app/views/questionnaire/_overview_questionnaire.php b/app/views/questionnaire/_overview_questionnaire.php index 8b45d42..23e1cc1 100644 --- a/app/views/questionnaire/_overview_questionnaire.php +++ b/app/views/questionnaire/_overview_questionnaire.php @@ -74,7 +74,7 @@ </td> <td class="actions"> <? if ($questionnaire->isRunning() && $countedAnswers) : ?> - <?= Icon::create('edit', Icon::ROLE_INACTIVE)->asImg(['title' => _('Der Fragebogen wurde gestartet und kann nicht mehr bearbeitet werden.')]) ?> + <?= Icon::create('edit', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Der Fragebogen wurde gestartet und kann nicht mehr bearbeitet werden.')]) ?> <? else : ?> <a href="<?= $controller->link_for('questionnaire/edit/' . $questionnaire->id) ?>" data-dialog="size=big" diff --git a/app/views/questionnaire/_question.php b/app/views/questionnaire/_question.php index 1ced93c..9d21f93 100644 --- a/app/views/questionnaire/_question.php +++ b/app/views/questionnaire/_question.php @@ -3,21 +3,21 @@ class="question <?= htmlReady(mb_strtolower($class)) ?>"> <legend> <div style="float: right; padding-top: 3px; padding-right: 5px;"> - <a href="#" class="move_up" title="<?= _("Frage nach oben verschieben") ?>" + <a href="#" class="move_up" title="<?= _('Frage nach oben verschieben') ?>" onClick="STUDIP.Questionnaire.moveQuestionUp.call(this); return false;"> - <?= Icon::create('arr_1up')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('arr_1up')->asSvg(['class' => 'text-bottom']) ?> </a> - <a href="#" class="move_down" title="<?= _("Frage nach unten verschieben") ?>" + <a href="#" class="move_down" title="<?= _('Frage nach unten verschieben') ?>" onClick="STUDIP.Questionnaire.moveQuestionDown.call(this); return false;"> - <?= Icon::create('arr_1down')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('arr_1down')->asSvg(['class' => 'text-bottom']) ?> </a> - <a href="#" onClick="var that = this; STUDIP.Dialog.confirm('<?= _("Wirklich löschen?") ?>', function () { jQuery(that).closest('fieldset').remove(); }); return false;" - title="<?= sprintf(_("%s löschen"), htmlReady($class::getName())) ?>"> - <?= Icon::create('trash')->asImg(['class' => 'text-bottom']) ?> + <a href="#" onClick="var that = this; STUDIP.Dialog.confirm('<?= _('Wirklich löschen?') ?>', function () { jQuery(that).closest('fieldset').remove(); }); return false;" + title="<?= sprintf(_('%s löschen'), htmlReady($class::getName())) ?>"> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom']) ?> </a> </div> <div> - <?= $class::getIcon()->asImg(['class' => 'text-bottom']) ?> + <?= $class::getIcon()->asSvg(['class' => 'text-bottom']) ?> <?= htmlReady($class::getName()) ?> </div> diff --git a/app/views/questionnaire/_widget_questionnaire.php b/app/views/questionnaire/_widget_questionnaire.php index 072e2d6..295d913 100644 --- a/app/views/questionnaire/_widget_questionnaire.php +++ b/app/views/questionnaire/_widget_questionnaire.php @@ -38,10 +38,10 @@ compact('range_type', 'range_id') ) ?>" class="questionnaire-qr" - title="<?= _("QR-Code zu diesem Fragebogen anzeigen") ?>" aria-label="<?= _("QR-Code zu diesem Fragebogen anzeigen") ?>" + title="<?= _('QR-Code zu diesem Fragebogen anzeigen') ?>" aria-label="<?= _('QR-Code zu diesem Fragebogen anzeigen') ?>" data-qr-code> <? URLHelper::setBaseURL($oldbase) ?> - <?= Icon::create('code-qr')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('code-qr')->asSvg(['class' => 'text-bottom']) ?> </a> </span> </nav> diff --git a/app/views/questionnaire/add_to_context.php b/app/views/questionnaire/add_to_context.php index 885aad5..ac80be6 100644 --- a/app/views/questionnaire/add_to_context.php +++ b/app/views/questionnaire/add_to_context.php @@ -9,13 +9,13 @@ $icons = [ <div> <a href="<?= $controller->link_for("questionnaire/edit", ['range_type' => Context::getType(), 'range_id' => Context::get()->id]) ?>" data-dialog="size=big"> - <?= Icon::create($icons[Context::getType()], Icon::ROLE_CLICKABLE)->asImg(50) ?> + <?= Icon::create($icons[Context::getType()], Icon::ROLE_CLICKABLE)->asSvg(50) ?> <?= htmlReady(Context::get()->name) ?> </a> <? foreach ($statusgruppen as $statusgruppe) : ?> - <a href="<?= $controller->link_for("questionnaire/edit", ['range_type' => "statusgruppe", 'range_id' => $statusgruppe->getId()]) ?>" + <a href="<?= $controller->link_for('questionnaire/edit', ['range_type' => 'statusgruppe', 'range_id' => $statusgruppe->getId()]) ?>" data-dialog="size=big"> - <?= Icon::create('group2', Icon::ROLE_CLICKABLE)->asImg(50) ?> + <?= Icon::create('group2', Icon::ROLE_CLICKABLE)->asSvg(50) ?> <?= htmlReady($statusgruppe->name) ?> </a> <? endforeach ?> diff --git a/app/views/questionnaire/context.php b/app/views/questionnaire/context.php index 36953a6..e1b53ac 100644 --- a/app/views/questionnaire/context.php +++ b/app/views/questionnaire/context.php @@ -5,10 +5,10 @@ > <fieldset> <legend><?= _("URL zum Fragebogen") ?></legend> - <input type="text" aria-label="<?= _("URL zum Fragebogen (nur lesbar)") ?>" readonly value="<?= htmlReady($GLOBALS['ABSOLUTE_URI_STUDIP']."dispatch.php/questionnaire/answer/".$questionnaire->getId()) ?>"> + <input type="text" aria-label="<?= _('URL zum Fragebogen (nur lesbar)') ?>" readonly value="<?= htmlReady($GLOBALS['ABSOLUTE_URI_STUDIP'].'dispatch.php/questionnaire/answer/'.$questionnaire->getId()) ?>"> <a href="<?= htmlReady($GLOBALS['ABSOLUTE_URI_STUDIP'] . "dispatch.php/questionnaire/answer/" . $questionnaire->id) ?>" data-qr-code title="<?= _('QR-Code zum Link anzeigen') ?>"> - <?= Icon::create('code-qr')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('code-qr')->asSvg(['class' => 'text-bottom']) ?> </a> </fieldset> <fieldset> @@ -38,10 +38,10 @@ <label> <input type="checkbox" name="remove_sem[]" value="<?= htmlReady($assignment['range_id']) ?>" style="display: none;"> <span> - <a href="<?= URLHelper::getLink("dispatch.php/course/go", ['to' => $course->getId()]) ?>"> + <a href="<?= URLHelper::getLink('dispatch.php/course/go', ['to' => $course->getId()]) ?>"> <?= htmlReady((Config::get()->IMPORTANT_SEMNUMBER ? $course->veranstaltungsnummer." " : "").$course->name. ' ('.$course->semester_text.')') ?> </a> - <?= Icon::create('trash')->asimg(['class' => 'text-bottom', 'title' => _('Zuweisung zur Veranstaltung aufheben.')]) ?> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom', 'title' => _('Zuweisung zur Veranstaltung aufheben.')]) ?> </span> </label> </li> @@ -63,7 +63,7 @@ <a href="<?= URLHelper::getLink("dispatch.php/course/go", ['to' => $statusgruppe->getId()]) ?>"> <?= htmlReady($statusgruppe->course['name'].": ".$statusgruppe->name) ?> </a> - <?= Icon::create('trash')->asimg(['class' => 'text-bottom', 'title' => _('Zuweisung zur Veranstaltung aufheben.')]) ?> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom', 'title' => _('Zuweisung zur Veranstaltung aufheben.')]) ?> </span> </label> </li> @@ -81,7 +81,7 @@ <label> <input type="checkbox" name="remove_inst[]" value="<?= htmlReady($assignment['range_id']) ?>" style="display: none;"> <span><?= htmlReady(Institute::find($assignment['range_id'])->name) ?></span> - <?= Icon::create('trash', 'clickable', ['title' => _("Zuweisung zur Einrichtung aufheben.")])->asImg(['class' => "text-bottom"]) ?> + <?= Icon::create('trash', 'clickable', ['title' => _('Zuweisung zur Einrichtung aufheben.')])->asSvg(['class' => 'text-bottom']) ?> </label> </li> <? endif ?> diff --git a/app/views/questionnaire/question_types/automated_data/_evaluation_part.php b/app/views/questionnaire/question_types/automated_data/_evaluation_part.php index d2b7bac..966c30d 100644 --- a/app/views/questionnaire/question_types/automated_data/_evaluation_part.php +++ b/app/views/questionnaire/question_types/automated_data/_evaluation_part.php @@ -36,7 +36,7 @@ <a href="" title="<?= _('Zeige wieder alle Ergebnisse ohne Filterung an.') ?>" onclick="STUDIP.Questionnaire.removeFilter('<?= htmlReady($question['questionnaire_id']) ?>'); return false;"> - <?= Icon::create('filter2')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('filter2')->asSvg(['class' => 'text-bottom']) ?> (<?= $percentage ?>% | <?= (int) count((array) $answerdata[$key]) ?>/<?= $countAnswers ?>) </a> <? else : ?> diff --git a/app/views/questionnaire/question_types/likert/likert_evaluation.php b/app/views/questionnaire/question_types/likert/likert_evaluation.php index f92adf9..cc3b287 100644 --- a/app/views/questionnaire/question_types/likert/likert_evaluation.php +++ b/app/views/questionnaire/question_types/likert/likert_evaluation.php @@ -104,7 +104,7 @@ $options = $vote->questiondata['options']; <?= htmlReady($hits) ?> </div> </div> - <?= Icon::create('filter2')->asImg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> + <?= Icon::create('filter2')->asSvg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> <?= round(100 * $hits / $countAnswers) ?>% </a> <? else : ?> diff --git a/app/views/questionnaire/question_types/rangescale/rangescale_evaluation.php b/app/views/questionnaire/question_types/rangescale/rangescale_evaluation.php index 7f090dd..f51d1aa 100644 --- a/app/views/questionnaire/question_types/rangescale/rangescale_evaluation.php +++ b/app/views/questionnaire/question_types/rangescale/rangescale_evaluation.php @@ -105,7 +105,7 @@ $options = range($vote->questiondata['minimum'], $vote->questiondata['maximum']) <?= htmlReady($hits) ?> </div> </div> - <?= Icon::create('filter2')->asImg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> + <?= Icon::create('filter2')->asSvg(Icon::SIZE_INLINE, ['class' => 'text-bottom']) ?> <?= round(100 * $hits / $countAnswers) ?>% </a> <? else : ?> diff --git a/app/views/questionnaire/question_types/vote/vote_evaluation.php b/app/views/questionnaire/question_types/vote/vote_evaluation.php index cd1222f..77cab48 100644 --- a/app/views/questionnaire/question_types/vote/vote_evaluation.php +++ b/app/views/questionnaire/question_types/vote/vote_evaluation.php @@ -102,7 +102,7 @@ rsort($ordered_results); <a href="" title="<?= _('Zeige wieder alle Ergebnisse ohne Filterung an.') ?>" onclick="STUDIP.Questionnaire.removeFilter('<?= htmlReady($vote['questionnaire_id']) ?>'); return false;"> - <?= Icon::create('filter2')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('filter2')->asSvg(['class' => 'text-bottom']) ?> (<?= $percentage ?>% | <?= (int) ($results[$key] ?? 0) ?>/<?= $countAnswers ?>) </a> <? else : ?> diff --git a/app/views/questionnaire/widget.php b/app/views/questionnaire/widget.php index a7bb562..fac294c 100644 --- a/app/views/questionnaire/widget.php +++ b/app/views/questionnaire/widget.php @@ -2,7 +2,7 @@ <article class="studip questionnaire_widget" id="questionnaire_area"> <header> <h1> - <?= Icon::create('evaluation', Icon::ROLE_INFO)->asimg(['class' => 'text-bottom']) ?> + <?= Icon::create('evaluation', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom']) ?> <?= _('Fragebögen') ?> </h1> <nav> @@ -10,17 +10,17 @@ <? if ($statusgruppen_ids): ?> <a href="<?= $controller->link_for('questionnaire/add_to_context') ?>" data-dialog="size=auto" title="<?= _('Fragebogen hinzufügen') ?>" aria-label="<?= _('Fragebogen hinzufügen') ?>"> - <?= Icon::create('add')->asimg(['class' => 'text-bottom']) ?> + <?= Icon::create('add')->asSvg(['class' => 'text-bottom']) ?> </a> <? else: ?> <a href="<?= $controller->link_for('questionnaire/edit', compact('range_type', 'range_id')) ?>" data-dialog title="<?= _('Fragebogen hinzufügen') ?>" aria-label="<?= _('Fragebogen hinzufügen') ?>"> - <?= Icon::create('add')->asimg(['class' => 'text-bottom']) ?> + <?= Icon::create('add')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> - <a href="<?= URLHelper::getLink("dispatch.php/questionnaire/" . ($range_type == 'course' || $range_type == 'institute' ? 'course' : ''). "overview") ?>" + <a href="<?= URLHelper::getLink('dispatch.php/questionnaire/' . ($range_type == 'course' || $range_type == 'institute' ? 'course' : ''). 'overview') ?>" title="<?= _('Fragebögen verwalten') ?>" aria-label="<?= _('Fragebögen verwalten') ?>"> - <?= Icon::create('admin')->asimg(['class' => 'text-bottom']) ?> + <?= Icon::create('admin')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> </nav> diff --git a/app/views/resources/_common/_resource_tr.php b/app/views/resources/_common/_resource_tr.php index 9b69f04..bf52a0f 100644 --- a/app/views/resources/_common/_resource_tr.php +++ b/app/views/resources/_common/_resource_tr.php @@ -112,7 +112,7 @@ </span> <? else: ?> <?= htmlReady($resource->name) ?> - <?= Icon::create('link-intern')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('link-intern')->asSvg(['class' => 'text-bottom']) ?> <? endif ?> </a> <? if (!empty($resource_tooltip)): ?> diff --git a/app/views/resources/admin/properties.php b/app/views/resources/admin/properties.php index 072817b..438ddff 100644 --- a/app/views/resources/admin/properties.php +++ b/app/views/resources/admin/properties.php @@ -37,7 +37,7 @@ <?= CSRFProtection::tokenTag() ?> <a href="<?=$controller->url_for('resources/property/edit/' . $property->id)?>" data-dialog="size=auto"> - <?= Icon::create('edit')->asImg( + <?= Icon::create('edit')->asSvg( [ 'title' => _('Bearbeiten') ] diff --git a/app/views/resources/admin/user_permissions.php b/app/views/resources/admin/user_permissions.php index 5dedeb9..48f7fa5 100644 --- a/app/views/resources/admin/user_permissions.php +++ b/app/views/resources/admin/user_permissions.php @@ -125,7 +125,7 @@ 'user_id' => $permission->user_id ] ) ?>" data-dialog> - <?= Icon::create('edit')->asImg( + <?= Icon::create('edit')->asSvg( '20px', [ 'class' => 'text-bottom', @@ -139,7 +139,7 @@ . '/' . $permission->resource_id ) ?>" data-dialog> - <?= Icon::create('log')->asImg( + <?= Icon::create('log')->asSvg( [ 'class' => 'text-bottom', 'title' => 'Liste mit Buchungen anzeigen' @@ -222,7 +222,7 @@ 'user_id' => $permission->user_id ] ) ?>" data-dialog> - <?= Icon::create('edit')->asImg( + <?= Icon::create('edit')->asSvg( [ 'class' => 'text-bottom', 'title' => _('Berechtigung bearbeiten') @@ -235,7 +235,7 @@ . '/' . $permission->resource_id ) ?>" data-dialog> - <?= Icon::create('log')->asImg( + <?= Icon::create('log')->asSvg( [ 'class' => 'text-bottom', 'title' => _('Liste mit Buchungen anzeigen') @@ -300,7 +300,7 @@ ['user_id' => $user->id] ) ?>"> <?= htmlReady($user->getFullName('full_rev')) ?> - <?= Icon::create('link-intern')->asImg( + <?= Icon::create('link-intern')->asSvg( [ 'class' => 'text-bottom' ] diff --git a/app/views/resources/booking/_add_edit_form.php b/app/views/resources/booking/_add_edit_form.php index b859a63..97f08f8 100644 --- a/app/views/resources/booking/_add_edit_form.php +++ b/app/views/resources/booking/_add_edit_form.php @@ -455,7 +455,7 @@ 'messages/write', ['rec_uname' => $booking->assigned_user->username] ) ?>" data-dialog="size=auto"> - <?= Icon::create('mail')->asImg( + <?= Icon::create('mail')->asSvg( '20px', ['class' => 'text-bottom'] ) ?> @@ -467,7 +467,7 @@ <?= _('Eine andere nutzende Person auswählen') ?> <div class="assigned-user-search-wrapper"> <?= $assigned_user_search->render() ?> - <?= Icon::create('refresh')->asImg( + <?= Icon::create('refresh')->asSvg( '20px', ['class' => 'delete-assigned-user-icon'] ) ?> </div> @@ -477,7 +477,7 @@ <?= _('Die nutzende Person zur Buchung') ?> <div class="assigned-user-search-wrapper"> <?= $assigned_user_search->render() ?> - <?= Icon::create('refresh')->asImg( + <?= Icon::create('refresh')->asSvg( '20px', ['class' => 'delete-assigned-user-icon'] ) ?> </div> @@ -498,7 +498,7 @@ 'messages/write', ['rec_uname' => $booking->booking_user->username] ) ?>" data-dialog="size=auto"> - <?= Icon::create('mail')->asImg( + <?= Icon::create('mail')->asSvg( '20px', ['class' => 'text-bottom'] ) ?> @@ -582,20 +582,20 @@ <td class="booking-list-interval-actions"> <button class="takes-place-delete takes-place-status-toggle <?= $interval->takes_place ? '' : ' invisible'; ?>" data-interval_id="<?= htmlReady($interval->id) ?>"> - <?= Icon::create('trash')->asImg( + <?= Icon::create('trash')->asSvg( [ 'class' => 'text-bottom', - 'title' => _('löschen') + 'title' => _('Löschen') ] ) ?> </button> <button class="takes-place-revive takes-place-status-toggle <?= $interval->takes_place ? ' invisible' : ''; ?>" data-interval_id="<?= htmlReady($interval->id) ?>"> - <?= Icon::create('refresh')->asImg( + <?= Icon::create('refresh')->asSvg( [ 'class' => 'text-bottom', - 'title' => _('wiederherstellen') + 'title' => _('Wiederherstellen') ] ) ?> </button> diff --git a/app/views/resources/booking/index.php b/app/views/resources/booking/index.php index d339408..3a98bb2 100644 --- a/app/views/resources/booking/index.php +++ b/app/views/resources/booking/index.php @@ -85,7 +85,7 @@ 'dispatch.php/messages/write', ['rec_uname' => $booking->booking_user->username] ) ?>" data-dialog="size=auto"> - <?= Icon::create('mail')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('mail')->asSvg(['class' => 'text-bottom']) ?> </a> <? else :?> <?= _('unbekannt') ?> @@ -133,7 +133,7 @@ 'dispatch.php/messages/write', ['rec_uname' => $booking->assigned_user->username] ) ?>" data-dialog="size=auto"> - <?= Icon::create('mail')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('mail')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> <? else : ?> diff --git a/app/views/resources/building/index.php b/app/views/resources/building/index.php index 4f46a0c..cfd874c 100644 --- a/app/views/resources/building/index.php +++ b/app/views/resources/building/index.php @@ -101,7 +101,7 @@ <li> <a href="<?= $controller->link_for('resources/room/index/' . $child->id); ?>" <?= (Request::isDialog()) ? 'data-dialog' : ''; ?>> - <?= $child->getIcon('clickable')->asImg( + <?= $child->getIcon('clickable')->asSvg( ['class' => 'text-bottom'] ) ?> <?= htmlReady($child->name); ?> diff --git a/app/views/resources/category/_add_edit_form.php b/app/views/resources/category/_add_edit_form.php index 148107a..a0a9571 100644 --- a/app/views/resources/category/_add_edit_form.php +++ b/app/views/resources/category/_add_edit_form.php @@ -143,7 +143,7 @@ </option> <? endforeach ?> </select> - <?= Icon::create('add')->asImg(['class' => 'add-action']) ?> + <?= Icon::create('add')->asSvg(['class' => 'add-action']) ?> </td> </tr> </tfoot> diff --git a/app/views/resources/category/details.php b/app/views/resources/category/details.php index 59eea31..edb9a4d 100644 --- a/app/views/resources/category/details.php +++ b/app/views/resources/category/details.php @@ -18,7 +18,7 @@ <ul class="list-unstyled"> <? foreach ($category->property_definitions as $definition): ?> <li> - <?= Icon::create('checkbox-checked')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('checkbox-checked')->asSvg(['class' => 'text-bottom']) ?> <? if ($definition->system): ?> <strong><?= htmlReady($definition) ?></strong> <? else: ?> diff --git a/app/views/resources/location/index.php b/app/views/resources/location/index.php index 162bfcd..8e6ef8c 100644 --- a/app/views/resources/location/index.php +++ b/app/views/resources/location/index.php @@ -75,7 +75,7 @@ <li> <a href="<?= $controller->link_for('resources/building/index/' . $child->id); ?>" <?= (Request::isDialog()) ? 'data-dialog' : ''; ?>> - <?= $child->getIcon('clickable')->asImg( + <?= $child->getIcon('clickable')->asSvg( ['class' => 'text-bottom'] ) ?> <?= htmlReady($child->name); ?> diff --git a/app/views/resources/messages/index.php b/app/views/resources/messages/index.php index a2e0d0d..0bd4767 100644 --- a/app/views/resources/messages/index.php +++ b/app/views/resources/messages/index.php @@ -23,7 +23,7 @@ <span class="selected-room template invisible"> <input type="hidden" name="room_ids[]"> <span></span> - <?= Icon::create('trash')->asImg( + <?= Icon::create('trash')->asSvg( [ 'class' => 'remove-icon text-bottom' ] @@ -35,7 +35,7 @@ <input type="hidden" name="room_ids[]" value="<?= htmlReady($room->id) ?>"> <span><?= htmlReady($room->name) ?></span> - <?= Icon::create('trash')->asImg( + <?= Icon::create('trash')->asSvg( [ 'class' => 'remove-icon text-bottom' ] diff --git a/app/views/resources/resource/_standard_properties_display_part.php b/app/views/resources/resource/_standard_properties_display_part.php index ada4f80..cc33af3 100644 --- a/app/views/resources/resource/_standard_properties_display_part.php +++ b/app/views/resources/resource/_standard_properties_display_part.php @@ -58,7 +58,7 @@ 'messages/write', ['rec_uname' => $user->username] ) ?>" data-dialog> - <?= Icon::create('mail')->asImg( + <?= Icon::create('mail')->asSvg( ['class' => 'text-bottom'] ) ?> </a> @@ -69,7 +69,7 @@ <a href="<?= htmlReady($property->state) ?>" target="_blank"> <?= htmlReady($property->state) ?> - <?= Icon::create('link-extern')->asImg( + <?= Icon::create('link-extern')->asSvg( ['class' => 'text-bottom'] ) ?> </a> diff --git a/app/views/resources/resource/files.php b/app/views/resources/resource/files.php index fc46b92..f78dfe8 100644 --- a/app/views/resources/resource/files.php +++ b/app/views/resources/resource/files.php @@ -6,7 +6,7 @@ <caption> <a href="<?= $controller->url_for('resources/resource/files/' . $resource->id)?>" title="<?= _('Zum Hauptordner') ?>"> - <?= Icon::create('folder-home-full', 'clickable')->asImg(30, ['class' => 'text-bottom']) ?> + <?= Icon::create('folder-home-full', 'clickable')->asSvg(30, ['class' => 'text-bottom']) ?> </a> <?= htmlReady($resource->getFullName()) ?></caption> <?= $this->render_partial('files/_files_thead') ?> diff --git a/app/views/resources/room_request/overview.php b/app/views/resources/room_request/overview.php index ecb664d..9e2d787 100644 --- a/app/views/resources/room_request/overview.php +++ b/app/views/resources/room_request/overview.php @@ -37,7 +37,7 @@ <th <? if ($sort_var === 1) printf('class="sort%s"', $sort_order) ?>> <? $sortorder = $sort_var !== 1 ? 'desc' : ($sort_order === 'asc' ? 'desc' : 'asc') ?> <a href="<?= URLHelper::getLink(sprintf('?sorting=1&sort_order=%s', $sortorder)) ?>"> - <?= Icon::create('radiobutton-checked')->asImg( + <?= Icon::create('radiobutton-checked')->asSvg( [ 'title' => _('Markierung') ] diff --git a/app/views/resources/room_request/resolve.php b/app/views/resources/room_request/resolve.php index e167a95..7c518fb 100644 --- a/app/views/resources/room_request/resolve.php +++ b/app/views/resources/room_request/resolve.php @@ -42,7 +42,7 @@ ) ?>" target="_blank" title="<?= _('Belegungsplan anzeigen') ?>"> <?= htmlReady($room_info['room']->getFullName()) ?> - <?= Icon::create('link-intern')->asImg( + <?= Icon::create('link-intern')->asSvg( [ 'class' => 'text-bottom', 'title' => '' diff --git a/app/views/resources/room_request/resolve_room_tr.php b/app/views/resources/room_request/resolve_room_tr.php index 8fb21f8..a7f003a 100644 --- a/app/views/resources/room_request/resolve_room_tr.php +++ b/app/views/resources/room_request/resolve_room_tr.php @@ -49,11 +49,11 @@ name="all_in_room" value="<?= htmlReady($room->id) ?>" <?= $room_availability_share[$room->id] <= 0.0 ? 'disabled="disabled"' : '' ?>> <? if ($room_availability_share[$room->id] >= 1.0) : ?> - <?= Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'text-bottom']) ?> <? elseif ($room_availability_share[$room->id] <= 0.0) : ?> - <?= Icon::create('decline-circle', Icon::ROLE_STATUS_RED)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('decline-circle', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'text-bottom']) ?> <? else : ?> - <?= Icon::create('exclaim-circle', Icon::ROLE_STATUS_YELLOW)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('exclaim-circle', Icon::ROLE_STATUS_YELLOW)->asSvg(['class' => 'text-bottom']) ?> <?= tooltipIcon(sprintf( _('%u von %u Terminen nicht verfügbar'), $unavailable_dates[$room->id], @@ -78,11 +78,11 @@ ? 'checked' : ''?>> <? if ($availability >= 1.0) : ?> - <?= Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'text-bottom']) ?> <? elseif ($availability <= 0.0) : ?> - <?= Icon::create('decline-circle', Icon::ROLE_STATUS_RED)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('decline-circle', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'text-bottom']) ?> <? else : ?> - <?= Icon::create('exclaim-circle', Icon::ROLE_STATUS_YELLOW)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('exclaim-circle', Icon::ROLE_STATUS_YELLOW)->asSvg(['class' => 'text-bottom']) ?> <?= tooltipIcon(sprintf( _('%u von %u Terminen nicht verfügbar'), $unavailable_metadate_dates[$room->id][$metadate_id], @@ -119,12 +119,12 @@ || (!empty($interval['booked_room']) && $interval['booked_room'] === $room->id)) ? 'checked="checked"' : ''?>> - <?= Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'text-bottom']) ?> <? else: ?> <input type="radio" name="<?= htmlReady($room_radio_name) ?>" value="1" disabled="disabled" class="text-bottom"> - <?= Icon::create('decline-circle', Icon::ROLE_STATUS_RED)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('decline-circle', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'text-bottom']) ?> <? endif ?> </td> <? $i++ ?> diff --git a/app/views/room_management/overview/index.php b/app/views/room_management/overview/index.php index 9fa41c0..ea88309 100644 --- a/app/views/room_management/overview/index.php +++ b/app/views/room_management/overview/index.php @@ -92,7 +92,7 @@ <thead> <tr> <th> - <?= Icon::create('radiobutton-checked')->asImg( + <?= Icon::create('radiobutton-checked')->asSvg( [ 'class' => 'text-bottom', 'title' => _('Markierung') diff --git a/app/views/room_management/planning/copy_bookings.php b/app/views/room_management/planning/copy_bookings.php index d704e68..0ab0bd7 100644 --- a/app/views/room_management/planning/copy_bookings.php +++ b/app/views/room_management/planning/copy_bookings.php @@ -209,7 +209,7 @@ <?= Icon::create( $data['available'] ? 'accept' : 'decline', $data['available'] ? Icon::ROLE_STATUS_GREEN : Icon::ROLE_STATUS_RED - )->asImg(['class' => 'text-bottom']) ?> + )->asSvg(['class' => 'text-bottom']) ?> </td> </tr> <? endforeach ?> diff --git a/app/views/score/index.php b/app/views/score/index.php index d404c66..b11a86a 100644 --- a/app/views/score/index.php +++ b/app/views/score/index.php @@ -55,7 +55,7 @@ <?= htmlReady($person['fullname']) ?> </a> <? foreach ($person['is_king'] as $type => $text): ?> - <?= Icon::create('crown', Icon::ROLE_SORT)->asImg(['title' => $text, 'alt' => $text, 'class' => 'text-top']) ?> + <?= Icon::create('crown', Icon::ROLE_SORT)->asSvg(['title' => $text, 'alt' => $text, 'class' => 'text-top']) ?> <? endforeach ?> </td> <td class="hidden-small-down"> @@ -68,7 +68,7 @@ $content .= sprintf( '<a href="%s">%s</a> ', URLHelper::getLink('dispatch.php/profile?username=' . $person['username']), - Icon::create('news', Icon::ROLE_CLICKABLE, ['title' => $tmp])->asImg() + Icon::create('news', Icon::ROLE_CLICKABLE, ['title' => $tmp])->asSvg() ); } else { $content .= Assets::img('blank.gif', ['width' => Icon::SIZE_DEFAULT]) . ' '; @@ -80,7 +80,7 @@ $content .= sprintf( '<a href="%s">%s</a> ', URLHelper::getLink('dispatch.php/profile?username=' . $person['username'] . '#questionnaire_area'), - Icon::create('vote', Icon::ROLE_CLICKABLE, ['title' => $tmp])->asImg() + Icon::create('vote', Icon::ROLE_CLICKABLE, ['title' => $tmp])->asSvg() ); } else { $content .= Assets::img('blank.gif', ['width' => Icon::SIZE_DEFAULT]) . ' '; @@ -92,7 +92,7 @@ $content .= sprintf( '<a href="%s">%s</a> ', URLHelper::getLink('dispatch.php/profile?username=' . $person['username'] . '#a'), - Icon::create('schedule', Icon::ROLE_CLICKABLE, ['title' => $tmp])->asImg() + Icon::create('schedule', Icon::ROLE_CLICKABLE, ['title' => $tmp])->asSvg() ); } else { $content .= Assets::img('blank.gif', ['width' => Icon::SIZE_DEFAULT]) . ' '; @@ -109,7 +109,7 @@ <? if($person['user_id'] == $GLOBALS['user']->id): ?> <a href="<?= $controller->url_for('score/unpublish') ?>"> <?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Ihren Wert von der Liste löschen')]) - ->asImg(["class" => 'text-top']) + ->asSvg(['class' => 'text-top']) ?> </a> <? endif; ?> diff --git a/app/views/search/globalsearch/index.php b/app/views/search/globalsearch/index.php index ba83a3b..6140a66 100644 --- a/app/views/search/globalsearch/index.php +++ b/app/views/search/globalsearch/index.php @@ -6,11 +6,11 @@ <span class="input-group-append"> <button type="submit" class="button" id="reset-search"> - <?= Icon::create('decline')->asImg(['title' => _('Suche zurücksetzen')]) ?> + <?= Icon::create('decline')->asSvg(['title' => _('Suche zurücksetzen')]) ?> </button> - <button type="submit" class="button seach-button" id="search-btn"> - <?= Icon::create('search')->asImg(['title' => _('Suche starten')]) ?> + <button type="submit" class="button search-button" id="search-btn"> + <?= Icon::create('search')->asSvg(['title' => _('Suche starten')]) ?> </button> </span> @@ -38,8 +38,8 @@ data-all-results="<?= _('Filter aufheben') ?>" data-searchterm="<?= htmlReady(Request::get('q')) ?>" data-category="<?= htmlReady(Request::get('category')) ?>" - data-img-add="<?= htmlReady(Icon::create('add')->asImg(['title' => _('Unterveranstaltungen anzeigen')])) ?>" - data-img-remove="<?= htmlReady(Icon::create('remove')->asImg(['title' => _('Unterveranstaltungen ausblenden')])) ?>" + data-img-add="<?= htmlReady(Icon::create('add')->asSvg(['title' => _('Unterveranstaltungen anzeigen')])) ?>" + data-img-remove="<?= htmlReady(Icon::create('remove')->asSvg(['title' => _('Unterveranstaltungen ausblenden')])) ?>" data-results-per-type="<?= Config::get()->GLOBALSEARCH_MAX_RESULT_OF_TYPE ?>" data-filters="<?= htmlReady(json_encode($filters)) ?>"> </div> diff --git a/app/views/search/module/_drill_down_list.php b/app/views/search/module/_drill_down_list.php index b8a8b67..d679f33 100644 --- a/app/views/search/module/_drill_down_list.php +++ b/app/views/search/module/_drill_down_list.php @@ -2,7 +2,7 @@ <div style="width: 100%; text-align:right;"> <a href="<?= $controller->url_for('search/module/reset_drilldown') ?>"> <?= _('Auswahl aufheben') ?> - <?= Icon::create('decline', 'clickable', ['title' => _('Auswahl aufheben')])->asImg(); ?> + <?= Icon::create('decline', 'clickable', ['title' => _('Auswahl aufheben')])->asSvg(); ?> </a> </div> <? endif; ?> @@ -24,7 +24,7 @@ <a href="<?= $controller->url_for('search/module/drilldown', ['type' => get_class($object), 'id' => $object->getId()]) ?>"> <?= htmlReady($object->getDisplayName()) . ' (' . $object->count_module . ')' ?> <? if ($object->getId() == $drill_down_id) : ?> - <?= Icon::create('accept', 'clickable', ['title' => _('Bereich ausgewählt')])->asImg(); ?> + <?= Icon::create('accept', 'clickable', ['title' => _('Bereich ausgewählt')])->asSvg(); ?> <? endif; ?> </a> </li> diff --git a/app/views/search/module/_modul.php b/app/views/search/module/_modul.php index 1ac6280..a3c155e 100644 --- a/app/views/search/module/_modul.php +++ b/app/views/search/module/_modul.php @@ -10,7 +10,7 @@ <tr class="table-header header-row" id="modul_<?= htmlReady($modul->id) ?>"> <td> <a data-dialog="size=auto" title="<?= htmlReady($modul->getDisplayName()) . ' (' . _('Vollständige Modulbeschreibung') . ')' ?>" href="<?= $controller->link_for('shared/modul/description/' . $modul->id) ?>"> - <?= Icon::create('log')->asImg(['title' => _('Vollständige Modulbeschreibung')]) ?> + <?= Icon::create('log')->asSvg(['title' => _('Vollständige Modulbeschreibung')]) ?> </a> </td> <? if (count($modul->getAssignedCoursesBySemester($selected_semester->id, $GLOBALS['user']->id))) : ?> diff --git a/app/views/search/stgtable/index.php b/app/views/search/stgtable/index.php index f9d8260..f4ed092 100644 --- a/app/views/search/stgtable/index.php +++ b/app/views/search/stgtable/index.php @@ -20,7 +20,7 @@ <? foreach ($kategorien as $kat_id => $kategorie): ?> <? if (!empty($stg[$kat_id])) : ?> <td style="text-align: center;"> - <a href="<?= $controller->action_link('studiengang', $stg[$kat_id]) ?>"><?= Icon::create('info-circle-full', 'clickable', ['title' => _('Studiengang anzeigen')])->asImg(); ?></a> + <a href="<?= $controller->action_link('studiengang', $stg[$kat_id]) ?>"><?= Icon::create('info-circle-full', 'clickable', ['title' => _('Studiengang anzeigen')])->asSvg(); ?></a> </td> <? else : ?> <td></td> diff --git a/app/views/search/studiengaenge/mehrfach.php b/app/views/search/studiengaenge/mehrfach.php index 5a081e2..29311e3 100644 --- a/app/views/search/studiengaenge/mehrfach.php +++ b/app/views/search/studiengaenge/mehrfach.php @@ -4,7 +4,7 @@ <?= _('Studiengang') ?>: <?= htmlReady($studiengang->getDisplayName()) ?> <? if (Config::get()->ENABLE_STUDYCOURSE_INFO_PAGE) : ?> <a href="<?= $controller->link_for('search/studiengaenge/info', $studiengang->id)?>" data-dialog> - <?= Icon::create('infopage2')->asImg(['title' => _('Informationen zum Studiengang')]) ?> + <?= Icon::create('infopage2')->asSvg(['title' => _('Informationen zum Studiengang')]) ?> </a> <? endif; ?> </caption> @@ -26,7 +26,7 @@ <td style="text-align: center;"> <? if (isset($fach[$teil_bezeichnung->id])) : ?> <a href="<?= $controller->link_for($verlauf_url, $fach[$teil_bezeichnung->id], $teil_bezeichnung->id, $studiengang_id ?? null) ?>"> - <?= Icon::create('info-circle-full')->asImg(['title' => _('Studienverlaufsplan anzeigen')]) ?> + <?= Icon::create('info-circle-full')->asSvg(['title' => _('Studienverlaufsplan anzeigen')]) ?> </a> <? endif; ?> </td> diff --git a/app/views/search/studiengaenge/verlauf.php b/app/views/search/studiengaenge/verlauf.php index 3046673..7416e18 100644 --- a/app/views/search/studiengaenge/verlauf.php +++ b/app/views/search/studiengaenge/verlauf.php @@ -72,7 +72,7 @@ </th> <th> <a data-dialog title="<?= sprintf(_('%s (Kommentar)'), htmlReady($abschnitt['name'])) ?>" href="<?= $controller->link_for('search/studiengaenge/kommentar', $abschnitt_id) ?>"> - <?= Icon::create('info-circle')->asImg(['title' => _('Zusatzinformationen zum Studiengangabschnitt')]) ?> + <?= Icon::create('info-circle')->asSvg(['title' => _('Zusatzinformationen zum Studiengangabschnitt')]) ?> </a> </th> <? for ($i = 1; $i <= $max_fachsemester; $i++) : ?> diff --git a/app/views/settings/categories.php b/app/views/settings/categories.php index 2bbbd50..e8003b6 100644 --- a/app/views/settings/categories.php +++ b/app/views/settings/categories.php @@ -16,22 +16,22 @@ <span> <? if ($index > 0): ?> <a href="<?= $controller->url_for('settings/categories/swap', $category->id, $last->id) ?>"> - <?= Icon::create('arr_2up', Icon::ROLE_SORT)->asImg(['class' => 'text-bottom', 'title' =>_('Kategorie nach oben verschieben')]) ?> + <?= Icon::create('arr_2up', Icon::ROLE_SORT)->asSvg(['class' => 'text-bottom', 'title' =>_('Kategorie nach oben verschieben')]) ?> </a> <? else: ?> - <?= Icon::create('arr_2up', Icon::ROLE_INACTIVE)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('arr_2up', Icon::ROLE_INACTIVE)->asSvg(['class' => 'text-bottom']) ?> <? endif; ?> <? if ($index < $count - 1): ?> <a href="<?= $controller->url_for('settings/categories/swap', $category->id, $categories[$index + 1]->id) ?>"> - <?= Icon::create('arr_2down', Icon::ROLE_SORT)->asImg(['class' => 'text-bottom', 'title' =>_('Kategorie nach unten verschieben')]) ?> + <?= Icon::create('arr_2down', Icon::ROLE_SORT)->asSvg(['class' => 'text-bottom', 'title' =>_('Kategorie nach unten verschieben')]) ?> </a> <? else: ?> - <?= Icon::create('arr_2down', Icon::ROLE_INACTIVE)->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('arr_2down', Icon::ROLE_INACTIVE)->asSvg(['class' => 'text-bottom']) ?> <? endif; ?> <a href="<?= $controller->url_for('settings/categories/delete', $category->id) ?>"> - <?= Icon::create('trash')->asImg(['class' => 'text-bottom', 'title' => _('Kategorie löschen')]) ?> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom', 'title' => _('Kategorie löschen')]) ?> </a> </span> </legend> @@ -53,7 +53,7 @@ <label> <?= _('Inhalt') ?> - <?= I18n::textarea("category-content-{$category->id}", $category->content, [ + <?= I18N::textarea("category-content-{$category->id}", $category->content, [ 'aria-label' => _('Inhalt der Kategorie:'), 'class' => 'resizable wysiwyg size-l', 'id' => "content{$index}", diff --git a/app/views/settings/messaging.php b/app/views/settings/messaging.php index 028d9f8..8f02725 100644 --- a/app/views/settings/messaging.php +++ b/app/views/settings/messaging.php @@ -81,7 +81,7 @@ <?= get_fullname($user->smsforward_rec, 'full', true) ?> </a> <a href="<?= $controller->url_for('settings/messaging/verify/forward_receiver') ?>"> - <?= Icon::create('trash', 'clickable')->asImg() ?> + <?= Icon::create('trash', 'clickable')->asSvg() ?> </a> <br> <label> diff --git a/app/views/settings/statusgruppen/index.php b/app/views/settings/statusgruppen/index.php index c51f78f..bf6eed2 100644 --- a/app/views/settings/statusgruppen/index.php +++ b/app/views/settings/statusgruppen/index.php @@ -34,11 +34,11 @@ <? if ($GLOBALS['perm']->have_studip_perm('admin', $inst_id)) : ?> <a href="<?= URLHelper::getURL('dispatch.php/institute/members', ['cid' => $inst_id, 'admin_view' => 1]) ?>"> - <?= Icon::create('link-intern')->asImg(['title' => _('Zur Einrichtung')]) ?> + <?= Icon::create('link-intern')->asSvg(['title' => _('Zur Einrichtung')]) ?> </a> <? else: ?> <a href="<?= URLHelper::getURL('dispatch.php/institute/overview', ['auswahl' => $inst_id]) ?>"> - <?= Icon::create('link-intern')->asImg(['title' => _('Zur Einrichtung')]) ?> + <?= Icon::create('link-intern')->asSvg(['title' => _('Zur Einrichtung')]) ?> </a> <? endif; ?> </nav> @@ -78,11 +78,11 @@ <nav> <? if ($GLOBALS['perm']->have_studip_perm('admin', $inst_id) && !$locked) : ?> <a href="<?= $controller->url_for('settings/statusgruppen/verify/delete/' . $role_id) ?>#<?= $role_id ?>"> - <?= Icon::create('trash')->asImg(['title' => _('Löschen')]) ?> + <?= Icon::create('trash')->asSvg(['title' => _('Löschen')]) ?> </a> <a href="<?= URLHelper::getURL('dispatch.php/admin/statusgroups', ['cid' => $inst_id]) ?>#group-<?= $role_id ?>"> - <?= Icon::create('link-intern')->asImg(['title' => _('Zur Funktion')]) ?> + <?= Icon::create('link-intern')->asSvg(['title' => _('Zur Funktion')]) ?> </a> <? endif; ?> </nav> diff --git a/app/views/settings/statusgruppen/modify.php b/app/views/settings/statusgruppen/modify.php index cea3eaf..72aeaea 100644 --- a/app/views/settings/statusgruppen/modify.php +++ b/app/views/settings/statusgruppen/modify.php @@ -32,7 +32,7 @@ $default_entries = DataFieldEntry::getDataFieldEntries([$user->user_id, $inst_id </td> <td style="text-align: right"> <a href="<?= $controller->url_for('settings/statusgruppen/default', $inst_id, $role_id, $id, true) ?>"> - <?= Icon::create('checkbox-unchecked')->asImg(['title' => _('Diese Daten von den Standarddaten übernehmen'), 'class' => 'text-top']) ?> + <?= Icon::create('checkbox-unchecked')->asSvg(['title' => _('Diese Daten von den Standarddaten übernehmen'), 'class' => 'text-top']) ?> </a> </td> <? elseif ($entry->getValue() == 'default_value'): ?> @@ -42,7 +42,7 @@ $default_entries = DataFieldEntry::getDataFieldEntries([$user->user_id, $inst_id </td> <td style="text-align:right"> <? if ($entry->isEditable() && !$locked): ?> - <a href="<?= $controller->link_for('settings/statusgruppen/default', $inst_id, $role_id, $id, false) ?>"> <?= Icon::create('checkbox-checked')->asImg(['title' => _('Diese Daten NICHT von den Standarddaten übernehmen'), 'class' => 'text-top']) ?> + <a href="<?= $controller->link_for('settings/statusgruppen/default', $inst_id, $role_id, $id, false) ?>"> <?= Icon::create('checkbox-checked')->asSvg(['title' => _('Diese Daten NICHT von den Standarddaten übernehmen'), 'class' => 'text-top']) ?> </a> <? endif; ?> </td> diff --git a/app/views/settings/statusgruppen/modify_institute.php b/app/views/settings/statusgruppen/modify_institute.php index 7faa312..24903cf 100644 --- a/app/views/settings/statusgruppen/modify_institute.php +++ b/app/views/settings/statusgruppen/modify_institute.php @@ -58,7 +58,7 @@ $entries = (array)DataFieldEntry::getDataFieldEntries([$user->user_id, $inst_id] <label> <? if ($institute['externdefault']) : ?> - <?= Icon::create('accept', 'inactive')->asImg(['class' => 'text-top']); ?> + <?= Icon::create('accept', 'inactive')->asSvg(['class' => 'text-top']); ?> <input type="hidden" name="default_institute" value="1"> <? else : ?> <input type="checkbox" id="default_institute" name="default_institute" value="1" diff --git a/app/views/settings/userdomains.php b/app/views/settings/userdomains.php index 03763fd..f423e97 100644 --- a/app/views/settings/userdomains.php +++ b/app/views/settings/userdomains.php @@ -35,7 +35,7 @@ <? if ($allow_change): ?> <input type="checkbox" name="userdomain_delete[]" value="<?= $domain->id ?>"> <? else: ?> - <?= Icon::create('accept', 'inactive')->asImg(['class' => 'text-top']) ?> + <?= Icon::create('accept', 'inactive')->asSvg(['class' => 'text-top']) ?> <? endif; ?> </td> </tr> diff --git a/app/views/shared/filter.php b/app/views/shared/filter.php index 5869859..04bab78 100644 --- a/app/views/shared/filter.php +++ b/app/views/shared/filter.php @@ -13,7 +13,7 @@ ) : ?> <div style="width: 100%; text-align: right;"> <a href="<?= $action_reset ?>"> - <?= Icon::create('refresh', 'clickable', ['title' => _('Filter zurücksetzen')])->asImg(); ?> + <?= Icon::create('refresh', 'clickable', ['title' => _('Filter zurücksetzen')])->asSvg(); ?> <?= _('Zurücksetzen') ?> </a> </div> diff --git a/app/views/shared/form_dokumente.php b/app/views/shared/form_dokumente.php index 1f3db9e..48c64ed 100644 --- a/app/views/shared/form_dokumente.php +++ b/app/views/shared/form_dokumente.php @@ -51,14 +51,14 @@ 'trash', Icon::ROLE_CLICKABLE, ['title' => _('Dokument entfernen')] - )->asImg(); ?> + )->asSvg(); ?> </a> <a href="#" class="mvv-item-edit-properties"> <?= Icon::create( 'edit', Icon::ROLE_CLICKABLE, ['title' => _('Kommentar bearbeiten')] - )->asImg(); ?> + )->asSvg(); ?> </a> </div> <fieldset class="mvv-item-document-comments" style="display: none;"> @@ -93,7 +93,7 @@ 'add', Icon::ROLE_CLICKABLE, ['title' => _('Neues Dokument anlegen')] - )->asImg(); ?> + )->asSvg(); ?> </a> </div> <div style="padding-top: 15px; width: 100%; max-width: 48em;"> diff --git a/app/views/shared/info_search.php b/app/views/shared/info_search.php index 008d549..3cdf95b 100644 --- a/app/views/shared/info_search.php +++ b/app/views/shared/info_search.php @@ -6,6 +6,6 @@ </script> <?= $search ?> <? if ($reset) : ?> - <a href="<?= $reset ?>"><?= Icon::create('refresh', 'clickable', ['title' => _('Suche zurücksetzen')])->asImg(); ?></a> + <a href="<?= $reset ?>"><?= Icon::create('refresh', 'clickable', ['title' => _('Suche zurücksetzen')])->asSvg(); ?></a> <? endif; ?> </form> diff --git a/app/views/shared/inst_chooser.php b/app/views/shared/inst_chooser.php deleted file mode 100644 index 735ed95..0000000 --- a/app/views/shared/inst_chooser.php +++ /dev/null @@ -1,25 +0,0 @@ -<? require_once dirname(__FILE__) . '/../../controllers/shared/inst_chooser.php'; ?> -<? if ($chooser_all_institutes) : ?> - <? $chooser_institutes = Shared_InstchooserController::get_institutes($parent_id, null, true); ?> -<? else : ?> - <? $chooser_institutes = Shared_InstchooserController::get_institutes($parent_id, $object_roles); ?> -<? endif; ?> -<div class="mvv-widget-right"> - <? if (!Request::isXhr()) : ?> - <script> - STUDIP.MVV.INST_CHOOSER_URL = "<?= $controller->url_for('shared/inst_chooser', ($chooser_all_institutes ? ['all' => '1'] : [])) ?>/"; - </script> - <? endif; ?> - <div class="mvv-inst-chooser"> - <span class="mvv-inst-add-button"><?= Icon::create('arr_2left', 'sort', ['title' => _('Einrichtung zuordnen')])->asImg(); ?></span> - <select name="<?= $chooser_id ?>"> - <option class="mvv-inst-chooser-empty mvv-inst-chooser-level" value="">-- <?= _('Bitte wählen') ?> --</option> - <? foreach ($chooser_institutes as $institute) : ?> - <option class="<?= $institute['kids'] ? '' : 'mvv-inst-chooser-empty' ?><?= $institute['is_object'] ? '' : ' mvv-inst-chooser-level' ?>" value="<?= $institute['object_id']; ?>" data-type="<?= $chooser_id ?>" data-item-id="<?= $institute['item_id'] ?>" data-fb="<?= $institute['fb'] ?>"> - <?= htmlReady($institute['name']); ?> - </option> - <? endforeach; ?> - </select> - <span class="mvv-inst-next-button"><?= Icon::create('arr_1down', 'clickable', ['title' => _('Ebene anzeigen')])->asImg(); ?></span> - </div> -</div> diff --git a/app/views/shared/language_chooser.php b/app/views/shared/language_chooser.php index 7777b16..ae4f65d 100644 --- a/app/views/shared/language_chooser.php +++ b/app/views/shared/language_chooser.php @@ -8,7 +8,7 @@ </option> <? endforeach; ?> </select> - <span class="mvv-inst-add-button"><?= Icon::create('arr_2up', 'clickable', ['title' => _('Sprache zuordnen')])->asImg(); ?></span> + <span class="mvv-inst-add-button"><?= Icon::create('arr_2up', 'clickable', ['title' => _('Sprache zuordnen')])->asSvg(); ?></span> </div> <?= $addition ?> </div> diff --git a/app/views/shared/version/_versionmodule.php b/app/views/shared/version/_versionmodule.php index dfd8a84..a7e4f1a 100644 --- a/app/views/shared/version/_versionmodule.php +++ b/app/views/shared/version/_versionmodule.php @@ -79,7 +79,7 @@ foreach ($abschnitte as $abschnitt) { <?= htmlReady($abschnitt_modul->getDisplayName()) ?> </a> <a data-dialog="size=auto" title="<?= htmlReady($modul['name']) . ' (' . _('Vollständige Modulbeschreibung') . ')' ?>" href="<?= URLHelper::getLink('shared/modul/description/' . $modul_id) ?>"> - <?= Icon::create('info-circle', 'clickable', [])->asImg(); ?> + <?= Icon::create('info-circle', 'clickable', [])->asSvg(); ?> </a> </td> <? endif;?> diff --git a/app/views/siteinfo/markup/uniContact.php b/app/views/siteinfo/markup/uniContact.php index c622761..18e1918 100644 --- a/app/views/siteinfo/markup/uniContact.php +++ b/app/views/siteinfo/markup/uniContact.php @@ -2,6 +2,6 @@ # Lifter010: TODO ?> <a href="mailto:<?= $contact ?>"> - <?= Icon::create('link-extern', 'clickable')->asImg() ?> + <?= Icon::create('link-extern', 'clickable')->asSvg() ?> <?= $contact ?> </a> diff --git a/app/views/start/_widget.php b/app/views/start/_widget.php index 479146e..2117877 100644 --- a/app/views/start/_widget.php +++ b/app/views/start/_widget.php @@ -20,7 +20,7 @@ <?= $key ?>="<?= htmlReady($value) ?>" <? endif ?> <? endforeach ?>> - <?= $nav->getImage() ?> + <?= $nav->getImage()->asSvg() ?> </a> <? endif ?> <?endforeach ?> @@ -28,12 +28,12 @@ <? if (isset($admin_url)): ?> <a href="<?= URLHelper::getLink($admin_url) ?>"> - <?= Icon::create('admin', Icon::ROLE_CLICKABLE, ['title' => $admin_title, 'size' => 20]) ?> + <?= Icon::create('admin', Icon::ROLE_CLICKABLE, ['title' => $admin_title])->asSvg() ?> </a> <? endif ?> <a href="<?= $controller->url_for('start/delete/' . $widget->getPluginId()) ?>"> - <?= Icon::create('decline', Icon::ROLE_CLICKABLE, ['title' => _('Entfernen'), 'size' => 20]) ?> + <?= Icon::create('decline', Icon::ROLE_CLICKABLE, ['title' => _('Entfernen')])->asSvg() ?> </a> </span> <span id="widgetName<?= $widget->getPluginId() ?>" class="widget-title"> diff --git a/app/views/studiengaenge/fachbereichestgteile/index.php b/app/views/studiengaenge/fachbereichestgteile/index.php index 0fe3cfc..fc60e5f 100644 --- a/app/views/studiengaenge/fachbereichestgteile/index.php +++ b/app/views/studiengaenge/fachbereichestgteile/index.php @@ -31,7 +31,7 @@ <td class="actions dont-hide" style="white-space: nowrap;"> <? if (MvvPerm::havePermCreate('StudiengangTeil')) : ?> <a href="<?= $controller->action_link('stgteil_fachbereich/' . $fachbereich['institut_id']) ?>"> - <?= Icon::create('file', Icon::ROLE_CLICKABLE , ['title' => _('Neuen Studiengangteil in diesem Fachbereich anlegen')])->asImg(); ?> + <?= Icon::create('file', Icon::ROLE_CLICKABLE , ['title' => _('Neuen Studiengangteil in diesem Fachbereich anlegen')])->asSvg(); ?> </a> <? endif; ?> </td> diff --git a/app/views/studiengaenge/faecher/index.php b/app/views/studiengaenge/faecher/index.php index 485d922..e3f8c3e 100644 --- a/app/views/studiengaenge/faecher/index.php +++ b/app/views/studiengaenge/faecher/index.php @@ -39,7 +39,7 @@ <td class="dont-hide actions"> <? if (MvvPerm::havePermCreate('StudiengangTeil')) : ?> <a href="<?= $controller->action_link('stgteil_fach/' . $fach->id) ?>"> - <?= Icon::create('file', Icon::ROLE_CLICKABLE ,['title' => _('Neuen Studiengangteil für gewähltes Fach anlegen')])->asImg(); ?> + <?= Icon::create('file', Icon::ROLE_CLICKABLE ,['title' => _('Neuen Studiengangteil für gewähltes Fach anlegen')])->asSvg(); ?> </a> <? endif; ?> </td> diff --git a/app/views/studiengaenge/informationen/degree.php b/app/views/studiengaenge/informationen/degree.php index be9a69f..9638f5e 100644 --- a/app/views/studiengaenge/informationen/degree.php +++ b/app/views/studiengaenge/informationen/degree.php @@ -34,7 +34,7 @@ <? if ($GLOBALS['perm']->have_perm('root', $GLOBALS['user']->id)) : ?> <a href="<?= $controller->messagehelper(['abschluss_id' => $deg->abschluss_id]) ?>" data-dialog> - <?= Icon::create('mail')->asImg( + <?= Icon::create('mail')->asSvg( ['title' => sprintf( _('Alle Studierenden mit dem Studienabschluss %s benachrichtigen.'), $deg->name) diff --git a/app/views/studiengaenge/informationen/index.php b/app/views/studiengaenge/informationen/index.php index fcdbc3b..9b2fb0b 100644 --- a/app/views/studiengaenge/informationen/index.php +++ b/app/views/studiengaenge/informationen/index.php @@ -33,7 +33,7 @@ </td> <td class="dont-hide actions"> <a href="<?= $controller->messagehelper(['fach_id' => $studycourse->fach_id]) ?>" data-dialog> - <?= Icon::create('mail')->asImg( + <?= Icon::create('mail')->asSvg( ['title' => sprintf( _('Alle Studierenden des Faches %s benachrichtigen.'), $studycourse->name) diff --git a/app/views/studiengaenge/stgteilbezeichnungen/index.php b/app/views/studiengaenge/stgteilbezeichnungen/index.php index 96bf7d0..65a415b 100644 --- a/app/views/studiengaenge/stgteilbezeichnungen/index.php +++ b/app/views/studiengaenge/stgteilbezeichnungen/index.php @@ -44,7 +44,7 @@ <? if ($perm->havePermWrite()) : ?> <a data-dialog href="<?= $controller->action_link('stgteilbezeichnung/' . $stgteilbezeichnung->id) ?>"> - <?= Icon::create('edit', Icon::ROLE_CLICKABLE ,['title' => _('Studiengangteil-Bezeichnung bearbeiten')])->asImg(); ?> + <?= Icon::create('edit', Icon::ROLE_CLICKABLE ,['title' => _('Studiengangteil-Bezeichnung bearbeiten')])->asSvg(); ?> </a> <? endif; ?> <? if ($perm->havePermCreate() && $stgteilbezeichnung->count_stgteile < 1) : ?> diff --git a/app/views/studiengaenge/studiengaenge/aufbaustg_table.php b/app/views/studiengaenge/studiengaenge/aufbaustg_table.php index 039d464..047ded2 100644 --- a/app/views/studiengaenge/studiengaenge/aufbaustg_table.php +++ b/app/views/studiengaenge/studiengaenge/aufbaustg_table.php @@ -54,7 +54,7 @@ $perm = MvvPerm::get($grund_stg); </div> <? if (trim($aufbau_stg->kommentar)) : ?> <a data-dialog="size=auto" href="<?= $controller->link_for('studiengaenge/studiengaenge/aufbaustg_info', $aufbau_stg->id) ?>"> - <?= Icon::create('info')->asImg(12, tooltip2(_('Bemerkung anzeigen'))) ?> + <?= Icon::create('info')->asSvg(12, tooltip2(_('Bemerkung anzeigen'))) ?> </a> <? endif; ?> </td> diff --git a/app/views/studiengaenge/studiengaenge/studiengaenge.php b/app/views/studiengaenge/studiengaenge/studiengaenge.php index 0aafb2a..4ae0dc3 100644 --- a/app/views/studiengaenge/studiengaenge/studiengaenge.php +++ b/app/views/studiengaenge/studiengaenge/studiengaenge.php @@ -22,7 +22,7 @@ <? $ampel_icon = $GLOBALS['MVV_STUDIENGANG']['STATUS']['values'][$studiengang->stat]['icon'] ?? null; ?> <? $ampelstatus = $GLOBALS['MVV_STUDIENGANG']['STATUS']['values'][$studiengang->stat]['name'] ?? null; ?> <? if ($ampel_icon) : ?> - <?= $ampel_icon->asImg(['title' => $ampelstatus]) ?> + <?= $ampel_icon->asSvg(['title' => $ampelstatus, 'style' => 'vertical-align: text-top;']) ?> <? endif; ?> <?= htmlReady($studiengang->name) ?> <?= (mb_strlen($studiengang->name_kurz) ? '(' . htmlReady($studiengang->name_kurz) . ')' : '') ?> <? if ($studiengang->count_dokumente) : ?> diff --git a/app/views/studiengaenge/studiengaenge/studiengang.php b/app/views/studiengaenge/studiengaenge/studiengang.php index 5afe651..4ee2c42 100644 --- a/app/views/studiengaenge/studiengaenge/studiengang.php +++ b/app/views/studiengaenge/studiengaenge/studiengang.php @@ -176,7 +176,7 @@ use Studip\Button, Studip\LinkButton; <? if ($perm->haveFieldPerm('institut_id', MvvPerm::PERM_WRITE)): ?> <div class="mvv-item-list-buttons"> <a href="#" - class="mvv-item-remove"><?= Icon::create('trash', Icon::ROLE_CLICKABLE , ['title' => _('Einrichtung entfernen')])->asImg() ?></a> + class="mvv-item-remove"><?= Icon::create('trash', Icon::ROLE_CLICKABLE , ['title' => _('Einrichtung entfernen')])->asSvg() ?></a> </div> <? endif ?> <input type="hidden" name="institut_item" value="<?= $studiengang->institut_id ?>"> @@ -242,7 +242,7 @@ use Studip\Button, Studip\LinkButton; <li id="language_<?= $assigned_language->lang ?>" class="drag-handle sort_items"> <div class="mvv-item-list-text"><?= htmlReady($assigned_language->getDisplayName()) ?></div> <div class="mvv-item-list-buttons"> - <a href="#" class="mvv-item-remove"><?= Icon::create('trash', 'clickable', array('title' => _('Sprache entfernen')))->asImg() ?></a> + <a href="#" class="mvv-item-remove"><?= Icon::create('trash', 'clickable', array('title' => _('Sprache entfernen')))->asSvg() ?></a> </div> <input type="hidden" name="language_items[]" value="<?= htmlReady($assigned_language->lang) ?>"> </li> diff --git a/app/views/studiengaenge/studiengangteile/details_grouped.php b/app/views/studiengaenge/studiengangteile/details_grouped.php index 6f10bd0..397f98d 100644 --- a/app/views/studiengaenge/studiengangteile/details_grouped.php +++ b/app/views/studiengaenge/studiengangteile/details_grouped.php @@ -13,7 +13,7 @@ <tr> <td> <? if (!empty($ampel_icon)) : ?> - <?= $ampel_icon->asImg(['title' => $ampelstatus, 'style' => 'vertical-align: text-top;']) ?> + <?= $ampel_icon->asSvg(['title' => $ampelstatus, 'style' => 'vertical-align: text-top;']) ?> <? endif; ?> <?= htmlReady($stgteil->getDisplayName()) ?> </td> diff --git a/app/views/studiengaenge/studiengangteile/stgteil.php b/app/views/studiengaenge/studiengangteile/stgteil.php index 8f3fa6e..4295aeb 100644 --- a/app/views/studiengaenge/studiengangteile/stgteil.php +++ b/app/views/studiengaenge/studiengangteile/stgteil.php @@ -52,7 +52,7 @@ use Studip\Button, Studip\LinkButton; <? if ($perm->haveFieldPerm('fach', MvvPerm::PERM_WRITE)) : ?> <div class="mvv-item-list-buttons"> <a href="#" class="mvv-item-remove"> - <?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Fach entfernen')])->asImg(); ?> + <?= Icon::create('trash', Icon::ROLE_CLICKABLE, ['title' => _('Fach entfernen')])->asSvg(); ?> </a> </div> <? endif; ?> diff --git a/app/views/studiengaenge/versionen/details_abschnitt.php b/app/views/studiengaenge/versionen/details_abschnitt.php index 63abfee..a3eaa58 100644 --- a/app/views/studiengaenge/versionen/details_abschnitt.php +++ b/app/views/studiengaenge/versionen/details_abschnitt.php @@ -36,11 +36,11 @@ <td class="dont-hide actions" style="white-space: nowrap;"> <? if (MvvPerm::haveFieldPermModul_zuordnungen($abschnitt, MvvPerm::PERM_WRITE)) : ?> <a data-dialog="" href="<?= $controller->action_link('modul_zuordnung', $assignment->id) ?>"> - <?= Icon::create('edit', Icon::ROLE_CLICKABLE , tooltip2(_('Modulzuordnung bearbeiten')))->asImg(); ?> + <?= Icon::create('edit', Icon::ROLE_CLICKABLE , tooltip2(_('Modulzuordnung bearbeiten')))->asSvg(); ?> </a> <? endif; ?> <a data-dialog="size=auto" href="<?= $controller->link_for('module/module/description', $assignment->modul_id, ['abschnitt_id' => $assignment->abschnitt_id]) ?>"> - <?= Icon::create('log', Icon::ROLE_CLICKABLE, tooltip2(_('Lokale Modulbeschreibung')))->asImg(); ?> + <?= Icon::create('log', Icon::ROLE_CLICKABLE, tooltip2(_('Lokale Modulbeschreibung')))->asSvg(); ?> </a> <? if (MvvPerm::havePermCreate($assignment)) : ?> <?= Icon::create('trash', Icon::ROLE_CLICKABLE , tooltip2(_('Modulzuordnung löschen'))) diff --git a/app/views/studiengaenge/versionen/modulteile.php b/app/views/studiengaenge/versionen/modulteile.php index 86b2c37..495da70 100644 --- a/app/views/studiengaenge/versionen/modulteile.php +++ b/app/views/studiengaenge/versionen/modulteile.php @@ -19,7 +19,7 @@ <? $perm = MvvPerm::get($assignment->abschnitt) ?> <? if ($perm->haveFieldPerm('modulteil_abschnitte')) : ?> <a data-dialog="" href="<?= $controller->action_link('modulteil_semester', $assignment->id, $modulteil->id) ?>"> - <?= Icon::create('edit', Icon::ROLE_CLICKABLE , ['title' => _('Semesterzuordnung bearbeiten')])->asImg(); ?> + <?= Icon::create('edit', Icon::ROLE_CLICKABLE , ['title' => _('Semesterzuordnung bearbeiten')])->asSvg(); ?> </a> <? endif; ?> </td> diff --git a/app/views/studiengaenge/versionen/versionen.php b/app/views/studiengaenge/versionen/versionen.php index 27a75ae..9e42873 100644 --- a/app/views/studiengaenge/versionen/versionen.php +++ b/app/views/studiengaenge/versionen/versionen.php @@ -9,7 +9,7 @@ <? $ampel_icon = $GLOBALS['MVV_STGTEILVERSION']['STATUS']['values'][$version->stat]['icon'] ?> <? $ampelstatus = $GLOBALS['MVV_STGTEILVERSION']['STATUS']['values'][$version->stat]['name'] ?> <? if ($ampel_icon) : ?> - <?= $ampel_icon->asImg(['title' => $ampelstatus]) ?> + <?= $ampel_icon->asSvg(['title' => $ampelstatus, 'style' => 'vertical-align: text-top;']) ?> <? endif; ?> <?= htmlReady($version->getDisplayName()) ?> <? if ($version->count_abschnitte) : ?> @@ -18,7 +18,7 @@ </td> <td class="dont-hide" style="text-align: center;"> <? if ($version->count_dokumente) : ?> - <?= Icon::create('staple', Icon::ROLE_INFO, ['title' => sprintf(ngettext('%s Dokument zugeordnet', '%s Dokumente zugeordnet', $version->count_dokumente), $version->count_dokumente)])->asImg(); ?> + <?= Icon::create('staple', Icon::ROLE_INFO, ['title' => sprintf(ngettext('%s Dokument zugeordnet', '%s Dokumente zugeordnet', $version->count_dokumente), $version->count_dokumente)])->asSvg(); ?> <? endif; ?> </td> <td class="dont-hide" style="white-space: nowrap; text-align: right;"> diff --git a/app/views/userfilter/filter/configure.php b/app/views/userfilter/filter/configure.php index cd170ab..c278c43 100644 --- a/app/views/userfilter/filter/configure.php +++ b/app/views/userfilter/filter/configure.php @@ -9,7 +9,7 @@ </div> <br/> <a href="#" onclick="return STUDIP.UserFilter.addConditionField('conditionfields', '<?= $controller->configure() ?>')"> - <?= Icon::create('add')->asImg(['alt' => _('Auswahlfeld hinzufügen')]) ?> + <?= Icon::create('add')->asSvg(['alt' => _('Auswahlfeld hinzufügen')]) ?> <?= _('Auswahlfeld hinzufügen') ?> </a> <br/><br/> diff --git a/app/views/vips/exam_mode/index.php b/app/views/vips/exam_mode/index.php index 50bf0a6..b5aba7f 100644 --- a/app/views/vips/exam_mode/index.php +++ b/app/views/vips/exam_mode/index.php @@ -32,7 +32,7 @@ </td> <td> <a href="<?= URLHelper::getLink($nav->getURL(), ['cid' => $course_id]) ?>"> - <?= $nav->getImage()->asImg($nav->getLinkAttributes()) ?> + <?= $nav->getImage()->asSvg($nav->getLinkAttributes()) ?> </a> </td> </tr> diff --git a/app/views/vips/exercises/ClozeTask/correct.php b/app/views/vips/exercises/ClozeTask/correct.php index 8e4aac1..867a644 100644 --- a/app/views/vips/exercises/ClozeTask/correct.php +++ b/app/views/vips/exercises/ClozeTask/correct.php @@ -15,19 +15,19 @@ <? if ($solution->id): ?> <? if ($results[$blank]['points'] == 1): ?> --><span class="correct_item math-tex"><?= htmlReady($response[$blank]) ?><!-- - --><?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_inline', 'title' => _('richtig')]) ?><!-- + --><?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_inline', 'title' => _('richtig')]) ?><!-- --></span><!-- <? elseif ($results[$blank]['points'] == 0.5): ?> --><span class="fuzzy_item math-tex"><?= htmlReady($response[$blank]) ?><!-- - --><?= Icon::create('decline', Icon::ROLE_STATUS_YELLOW)->asImg(['class' => 'correction_inline', 'title' => _('fast richtig')]) ?><!-- + --><?= Icon::create('decline', Icon::ROLE_STATUS_YELLOW)->asSvg(['class' => 'correction_inline', 'title' => _('fast richtig')]) ?><!-- --></span><!-- <? elseif (empty($edit_solution) || $results[$blank]['safe']): ?> --><span class="wrong_item math-tex"><?= htmlReady($response[$blank]) ?><!-- - --><?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_inline', 'title' => _('falsch')]) ?><!-- + --><?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_inline', 'title' => _('falsch')]) ?><!-- --></span><!-- <? else: ?> --><span class="wrong_item math-tex"><?= htmlReady($response[$blank]) ?><!-- - --><?= Icon::create('question', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_inline', 'title' => _('unbekannte Antwort')]) ?><!-- + --><?= Icon::create('question', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_inline', 'title' => _('Unbekannte Antwort')]) ?><!-- --></span><!-- <? endif ?> <? endif ?> diff --git a/app/views/vips/exercises/ClozeTask/print.php b/app/views/vips/exercises/ClozeTask/print.php index fce4bc4..4be1f4a 100644 --- a/app/views/vips/exercises/ClozeTask/print.php +++ b/app/views/vips/exercises/ClozeTask/print.php @@ -17,11 +17,11 @@ --><span class="math-tex" style="text-decoration: underline;"> <?= htmlReady($response[$blank]) ?> </span><!-- <? if ($print_correction): ?> <? if ($results[$blank]['points'] == 1): ?> - --><?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('richtig')]) ?><!-- + --><?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('richtig')]) ?><!-- <? elseif ($results[$blank]['points'] == 0.5): ?> - --><?= Icon::create('decline', Icon::ROLE_STATUS_YELLOW)->asImg(['title' => _('fast richtig')]) ?><!-- + --><?= Icon::create('decline', Icon::ROLE_STATUS_YELLOW)->asSvg(['title' => _('fast richtig')]) ?><!-- <? else: ?> - --><?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('falsch')]) ?><!-- + --><?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('falsch')]) ?><!-- <? endif ?> <? endif ?> <? elseif ($exercise->isSelect($blank)): ?> diff --git a/app/views/vips/exercises/MatchingTask/correct.php b/app/views/vips/exercises/MatchingTask/correct.php index 64faca6..d38afb6 100644 --- a/app/views/vips/exercises/MatchingTask/correct.php +++ b/app/views/vips/exercises/MatchingTask/correct.php @@ -44,9 +44,9 @@ <?= formatReady($answer['text']) ?> <? if ($exercise->isCorrectAnswer($answer, $i)): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> </div> <? endif ?> @@ -78,9 +78,9 @@ <? if ($solution->id): ?> <? if ($exercise->isCorrectAnswer($answer, -1)): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_inline', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_inline', 'title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_inline', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_inline', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> </div> diff --git a/app/views/vips/exercises/MatchingTask/print.php b/app/views/vips/exercises/MatchingTask/print.php index a9617df..123c9a6 100644 --- a/app/views/vips/exercises/MatchingTask/print.php +++ b/app/views/vips/exercises/MatchingTask/print.php @@ -44,9 +44,9 @@ <? if ($print_correction): ?> <? if ($exercise->isCorrectAnswer($answer, $i)) : ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? else : ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> </div> @@ -84,9 +84,9 @@ <? if ($solution->id && $print_correction): ?> <? if ($exercise->isCorrectAnswer($answer, -1)): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('falsch')]) ?> <? endif ?> <? endif ?> </li> diff --git a/app/views/vips/exercises/MatrixChoiceTask/correct.php b/app/views/vips/exercises/MatrixChoiceTask/correct.php index 1b4f8ba..82a87fe 100644 --- a/app/views/vips/exercises/MatrixChoiceTask/correct.php +++ b/app/views/vips/exercises/MatrixChoiceTask/correct.php @@ -18,9 +18,9 @@ <td style="white-space: nowrap;"> <? if (isset($response[$key]) && $response[$key] !== '' && $response[$key] != -1): ?> <? if ($response[$key] == $entry['choice']): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> diff --git a/app/views/vips/exercises/MatrixChoiceTask/print.php b/app/views/vips/exercises/MatrixChoiceTask/print.php index 314730f..9403d0c 100644 --- a/app/views/vips/exercises/MatrixChoiceTask/print.php +++ b/app/views/vips/exercises/MatrixChoiceTask/print.php @@ -17,9 +17,9 @@ <td style="white-space: nowrap;"> <? if (isset($response[$key]) && $response[$key] !== '' && $response[$key] != -1 && $print_correction): ?> <? if ($response[$key] == $entry['choice']): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> diff --git a/app/views/vips/exercises/MultipleChoiceTask/correct.php b/app/views/vips/exercises/MultipleChoiceTask/correct.php index 2f2a6dc..59fe5b6 100644 --- a/app/views/vips/exercises/MultipleChoiceTask/correct.php +++ b/app/views/vips/exercises/MultipleChoiceTask/correct.php @@ -20,9 +20,9 @@ <? if (isset($response[$key])): ?> <? if ((int) $response[$key] == $entry['score']): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> </div> diff --git a/app/views/vips/exercises/MultipleChoiceTask/print.php b/app/views/vips/exercises/MultipleChoiceTask/print.php index d352f17..ea2d761 100644 --- a/app/views/vips/exercises/MultipleChoiceTask/print.php +++ b/app/views/vips/exercises/MultipleChoiceTask/print.php @@ -18,9 +18,9 @@ <? if (isset($response[$key]) && $print_correction): ?> <? if ((int) $response[$key] == $entry['score']): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> </div> diff --git a/app/views/vips/exercises/SequenceTask/correct.php b/app/views/vips/exercises/SequenceTask/correct.php index 72cfba5..8093be0 100644 --- a/app/views/vips/exercises/SequenceTask/correct.php +++ b/app/views/vips/exercises/SequenceTask/correct.php @@ -37,10 +37,10 @@ <div class="correction_marker sequence"> <? if ($results[$i]['points'] == 1): ?> <span style="color: green;">}</span> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('richtig')]) ?> <? else: ?> <span style="color: red;">}</span> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('falsch')]) ?> <? endif ?> </div> <? endif ?> @@ -49,9 +49,9 @@ <?= formatReady($answer['text']) ?> <? if ($results[$i]['points'] == 1): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> </div> <? else: ?> diff --git a/app/views/vips/exercises/SequenceTask/print.php b/app/views/vips/exercises/SequenceTask/print.php index 1ccb76d..485d4d7 100644 --- a/app/views/vips/exercises/SequenceTask/print.php +++ b/app/views/vips/exercises/SequenceTask/print.php @@ -39,10 +39,10 @@ <div class="correction_marker sequence"> <? if ($results[$i]['points'] == 1): ?> <span style="color: green;">}</span> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('richtig')]) ?> <? else: ?> <span style="color: red;">}</span> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('falsch')]) ?> <? endif ?> </div> <? endif ?> @@ -52,9 +52,9 @@ <? if ($print_correction): ?> <? if ($results[$i]['points'] == 1): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> </li> diff --git a/app/views/vips/exercises/SingleChoiceTask/correct.php b/app/views/vips/exercises/SingleChoiceTask/correct.php index cecc743..a2796fb 100644 --- a/app/views/vips/exercises/SingleChoiceTask/correct.php +++ b/app/views/vips/exercises/SingleChoiceTask/correct.php @@ -28,9 +28,9 @@ <? if (isset($response[$group]) && $response[$group] === "$key"): ?> <? if ($entry['score'] == 1): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? elseif ($key != -1): ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> </div> diff --git a/app/views/vips/exercises/SingleChoiceTask/print.php b/app/views/vips/exercises/SingleChoiceTask/print.php index a61bc84..5ac9961 100644 --- a/app/views/vips/exercises/SingleChoiceTask/print.php +++ b/app/views/vips/exercises/SingleChoiceTask/print.php @@ -27,9 +27,9 @@ <? if ($print_correction): ?> <? if (isset($response[$group]) && $response[$group] === "$key"): ?> <? if ($entry['score'] == 1): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['class' => 'correction_marker', 'title' => _('richtig')]) ?> <? elseif ($key != -1): ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['class' => 'correction_marker', 'title' => _('falsch')]) ?> <? endif ?> <? endif ?> <? endif ?> diff --git a/app/views/vips/exercises/TextLineTask/correct.php b/app/views/vips/exercises/TextLineTask/correct.php index 45671d4..3457f2e 100644 --- a/app/views/vips/exercises/TextLineTask/correct.php +++ b/app/views/vips/exercises/TextLineTask/correct.php @@ -16,13 +16,13 @@ <?= htmlReady($response[0]) ?> <? if ($results[0]['points'] == 1): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('richtig')]) ?> <? elseif ($results[0]['points'] == 0.5): ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_YELLOW)->asImg(['title' => _('fast richtig')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_YELLOW)->asSvg(['title' => _('fast richtig')]) ?> <? elseif (!$edit_solution || $results[0]['safe']): ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('falsch')]) ?> <? else: ?> - <?= Icon::create('question', Icon::ROLE_STATUS_RED)->asImg(['title' => _('unbekannte Antwort')]) ?> + <?= Icon::create('question', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('Unbekannte Antwort')]) ?> <? endif ?> <? endif ?> diff --git a/app/views/vips/exercises/TextLineTask/print.php b/app/views/vips/exercises/TextLineTask/print.php index 08944d2..ba86963 100644 --- a/app/views/vips/exercises/TextLineTask/print.php +++ b/app/views/vips/exercises/TextLineTask/print.php @@ -13,11 +13,11 @@ <? if ($print_correction): ?> <? if ($results[0]['points'] == 1): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('richtig')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('richtig')]) ?> <? elseif ($results[0]['points'] == 0.5): ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_YELLOW)->asImg(['title' => _('fast richtig')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_YELLOW)->asSvg(['title' => _('fast richtig')]) ?> <? else: ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('falsch')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('falsch')]) ?> <? endif ?> <? endif ?> <? else : ?> diff --git a/app/views/vips/exercises/TextTask/correct.php b/app/views/vips/exercises/TextTask/correct.php index 69336a4..175de6c 100644 --- a/app/views/vips/exercises/TextTask/correct.php +++ b/app/views/vips/exercises/TextTask/correct.php @@ -131,7 +131,7 @@ <tr> <td> <a href="<?= htmlReady($file_ref->getDownloadURL()) ?>"> - <?= Icon::create('file')->asImg(['title' => _('Datei herunterladen')]) ?> + <?= Icon::create('file')->asSvg(['title' => _('Datei herunterladen')]) ?> <?= htmlReady($file_ref->name) ?> </a> </td> diff --git a/app/views/vips/exercises/TextTask/solve.php b/app/views/vips/exercises/TextTask/solve.php index ddafce6..62b2fa0 100644 --- a/app/views/vips/exercises/TextTask/solve.php +++ b/app/views/vips/exercises/TextTask/solve.php @@ -36,7 +36,7 @@ <a hidden download="<?= htmlReady($exercise->title) ?>.txt" target="_blank"></a> <?= Studip\Button::create(_('Antwort herunterladen'), 'download', ['class' => 'vips_file_download']) ?> <input hidden class="file_upload inline" type="file"> - <?= Studip\Button::create(_('Text in das Eingabefeld hochladen'), 'upload', ['class' => 'vips_file_upload']) ?> + <?= Studip\Button::create(_('Text in das Eingabefeld hochladen'), 'upload', ['class' => 'upload']) ?> <? else: ?> <textarea name="answer[0]" class="character_input size-l" rows="20"><?= htmlReady($answer) ?></textarea> <? endif ?> @@ -97,7 +97,7 @@ <td> <input type="hidden" name="file_ids[]" value="<?= $file_ref->id ?>"> <a href="<?= htmlReady($file_ref->getDownloadURL()) ?>"> - <?= Icon::create('file')->asImg(['title' => _('Datei herunterladen')]) ?> + <?= Icon::create('file')->asSvg(['title' => _('Datei herunterladen')]) ?> <?= htmlReady($file_ref->name) ?> </a> </td> @@ -121,7 +121,7 @@ <tfoot> <tr> <td colspan="5"> - <?= Studip\Button::create(_('Datei als Lösung hochladen'), '', ['class' => 'vips_file_upload', 'data-label' => _('%d Dateien ausgewählt')]) ?> + <?= Studip\Button::create(_('Datei als Lösung hochladen'), '', ['class' => 'upload vips_file_upload', 'data-label' => _('%d Dateien ausgewählt')]) ?> <span class="file_upload_hint" style="display: none;"><?= _('Klicken Sie auf „Speichern“, um die gewählten Dateien hochzuladen.') ?></span> <input class="file_upload attach" style="display: none;" type="file" name="upload[]" multiple> </td> diff --git a/app/views/vips/sheets/add_exercise_dialog.php b/app/views/vips/sheets/add_exercise_dialog.php index f13a08d..2858485 100644 --- a/app/views/vips/sheets/add_exercise_dialog.php +++ b/app/views/vips/sheets/add_exercise_dialog.php @@ -15,10 +15,12 @@ <div class="exercise_types"> <? foreach ($exercise_types as $type => $entry): ?> - <button class="exercise_type" name="exercise_type" value="<?= htmlReady($type) ?>" - style="<?= $type::getTypeIcon()->asCSS(40) ?>"> - <b><?= htmlReady($entry['name']) ?></b><br> - <?= htmlReady($type::getTypeDescription()) ?> + <button class="exercise_type" name="exercise_type" value="<?= htmlReady($type) ?>"> + <?= $type::getTypeIcon()->asSvg(40) ?> + <div class="exercise_type_description"> + <span class="exercise_type_name"><?= htmlReady($entry['name']) ?></span> + <span><?= htmlReady($type::getTypeDescription()) ?></span> + </div> </button> <? endforeach ?> </div> diff --git a/app/views/vips/sheets/content_bar_icons.php b/app/views/vips/sheets/content_bar_icons.php index 5d6268a..b0f98c1 100644 --- a/app/views/vips/sheets/content_bar_icons.php +++ b/app/views/vips/sheets/content_bar_icons.php @@ -1,19 +1,19 @@ <? if (isset($prev_exercise_url)): ?> <a href="<?= htmlReady($prev_exercise_url) ?>"> - <?= Icon::create('arr_1left')->asImg(24, ['title' => _('Vorige Aufgabe')]) ?> + <?= Icon::create('arr_1left')->asSvg(24, ['title' => _('Vorige Aufgabe')]) ?> </a> <? else: ?> <span> - <?= Icon::create('arr_1left', Icon::ROLE_INACTIVE)->asImg(24) ?> + <?= Icon::create('arr_1left', Icon::ROLE_INACTIVE)->asSvg(24) ?> </span> <? endif ?> <? if (isset($next_exercise_url)): ?> <a href="<?= htmlReady($next_exercise_url) ?>"> - <?= Icon::create('arr_1right')->asImg(24, ['title' => _('Nächste Aufgabe')]) ?> + <?= Icon::create('arr_1right')->asSvg(24, ['title' => _('Nächste Aufgabe')]) ?> </a> <? else: ?> <span> - <?= Icon::create('arr_1right', Icon::ROLE_INACTIVE)->asImg(24) ?> + <?= Icon::create('arr_1right', Icon::ROLE_INACTIVE)->asSvg(24) ?> </span> <? endif ?> diff --git a/app/views/vips/sheets/copy_assignment_dialog.php b/app/views/vips/sheets/copy_assignment_dialog.php index 49eecb9..f7c8209 100644 --- a/app/views/vips/sheets/copy_assignment_dialog.php +++ b/app/views/vips/sheets/copy_assignment_dialog.php @@ -67,7 +67,7 @@ <?= htmlReady($assignment['test_title']) ?> <a href="<?= $controller->link_for('vips/sheets/show_assignment', ['cid' => $course_id, 'assignment_id' => $assignment['id']]) ?>" target="_blank"> - <?= Icon::create('link-intern')->asImg(['title' => _('Vorschau anzeigen')]) ?> + <?= Icon::create('link-intern')->asSvg(['title' => _('Vorschau anzeigen')]) ?> </a> </label> </td> diff --git a/app/views/vips/sheets/copy_exercise_dialog.php b/app/views/vips/sheets/copy_exercise_dialog.php index 7eeec26..d825ce1 100644 --- a/app/views/vips/sheets/copy_exercise_dialog.php +++ b/app/views/vips/sheets/copy_exercise_dialog.php @@ -90,7 +90,7 @@ <a href="<?= $controller->link_for('vips/sheets/preview_exercise', ['assignment_id' => $exercise['assignment_id'], 'exercise_id' => $exercise['id']]) ?>" data-dialog="id=vips_preview;size=800x600" target="_blank"> - <?= Icon::create('question-circle')->asImg(['title' => _('Vorschau anzeigen')]) ?> + <?= Icon::create('question-circle')->asSvg(['title' => _('Vorschau anzeigen')]) ?> </a> </label> </td> diff --git a/app/views/vips/sheets/edit_assignment.php b/app/views/vips/sheets/edit_assignment.php index d6e1b78..5ced547 100644 --- a/app/views/vips/sheets/edit_assignment.php +++ b/app/views/vips/sheets/edit_assignment.php @@ -81,8 +81,8 @@ <section> <input id="options-toggle" class="options-toggle" type="checkbox" value="on" <?= $assignment_id ? '' : 'checked' ?>> <a class="caption" href="#" role="button" data-toggles="#options-toggle" aria-controls="options-panel" aria-expanded="<?= $assignment_id ? 'false' : 'true' ?>"> - <?= Icon::create('arr_1down')->asImg(['class' => 'toggle-open']) ?> - <?= Icon::create('arr_1right')->asImg(['class' => 'toggle-closed']) ?> + <?= Icon::create('arr_1down')->asSvg(['class' => 'toggle-open']) ?> + <?= Icon::create('arr_1right')->asSvg(['class' => 'toggle-closed']) ?> <?= _('Weitere Einstellungen') ?> </a> @@ -191,8 +191,8 @@ <div class="practice-hidden exam-hidden"> <input id="feedback-toggle" class="options-toggle" type="checkbox" value="on"> <a class="caption" href="#" role="button" data-toggles="#feedback-toggle" aria-controls="feedback-panel" aria-expanded="false"> - <?= Icon::create('arr_1down')->asImg(['class' => 'toggle-open']) ?> - <?= Icon::create('arr_1right')->asImg(['class' => 'toggle-closed']) ?> + <?= Icon::create('arr_1down')->asSvg(['class' => 'toggle-open']) ?> + <?= Icon::create('arr_1right')->asSvg(['class' => 'toggle-closed']) ?> <?= _('Automatisches Feedback') ?> </a> diff --git a/app/views/vips/sheets/edit_exercise.php b/app/views/vips/sheets/edit_exercise.php index 2bac01e..41156e1 100644 --- a/app/views/vips/sheets/edit_exercise.php +++ b/app/views/vips/sheets/edit_exercise.php @@ -75,7 +75,7 @@ <td> <input type="hidden" name="file_ids[]" value="<?= $file_ref->id ?>"> <a href="<?= htmlReady($file_ref->getDownloadURL()) ?>" <?= $file_ref->getContentDisposition() === 'inline' ? 'target="_blank"' : '' ?>> - <?= Icon::create('file')->asImg(['title' => _('Datei herunterladen')]) ?> + <?= Icon::create('file')->asSvg(['title' => _('Datei herunterladen')]) ?> <?= htmlReady($file_ref->name) ?> </a> </td> @@ -102,7 +102,7 @@ <tfoot> <tr> <td colspan="5"> - <?= Studip\Button::create(_('Dateien zur Aufgabe hochladen'), '', ['class' => 'vips_file_upload', 'data-label' => _('%d Dateien ausgewählt')]) ?> + <?= Studip\Button::create(_('Dateien zur Aufgabe hochladen'), '', ['class' => 'upload vips_file_upload', 'data-label' => _('%d Dateien ausgewählt')]) ?> <span class="file_upload_hint" style="display: none;"><?= _('Klicken Sie auf „Speichern“, um die gewählten Dateien hochzuladen.') ?></span> <?= tooltipIcon(sprintf(_('max. %g MB pro Datei'), FileManager::getUploadTypeConfig($assignment->range_id)['file_size'] / 1048576)) ?> <input class="file_upload attach" style="display: none;" type="file" name="upload[]" multiple> @@ -122,8 +122,8 @@ <input id="options-toggle" class="options-toggle" type="checkbox" value="on"> <a class="caption" href="#" role="button" data-toggles="#options-toggle" aria-controls="options-panel" aria-expanded="false"> - <?= Icon::create('arr_1down')->asImg(['class' => 'toggle-open']) ?> - <?= Icon::create('arr_1right')->asImg(['class' => 'toggle-closed']) ?> + <?= Icon::create('arr_1down')->asSvg(['class' => 'toggle-open']) ?> + <?= Icon::create('arr_1right')->asSvg(['class' => 'toggle-closed']) ?> <?= _('Weitere Einstellungen') ?> </a> diff --git a/app/views/vips/sheets/show_assignment.php b/app/views/vips/sheets/show_assignment.php index d598e51..1494b74 100644 --- a/app/views/vips/sheets/show_assignment.php +++ b/app/views/vips/sheets/show_assignment.php @@ -56,8 +56,8 @@ <form class="default width-1200" style="margin-bottom: 1.5ex;"> <input id="options-toggle" class="options-toggle" type="checkbox" value="on"> <a class="caption" href="#" role="button" data-toggles="#options-toggle" aria-controls="options-panel" aria-expanded="false"> - <?= Icon::create('arr_1down')->asImg(['class' => 'toggle-open']) ?> - <?= Icon::create('arr_1right')->asImg(['class' => 'toggle-closed']) ?> + <?= Icon::create('arr_1down')->asSvg(['class' => 'toggle-open']) ?> + <?= Icon::create('arr_1right')->asSvg(['class' => 'toggle-closed']) ?> <?= _('Teilnahmebedingungen') ?> </a> @@ -148,9 +148,9 @@ </td> <td style="text-align: center;"> <? if ($solution): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('ja')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('ja')]) ?> <? else : ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('nein')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('nein')]) ?> <? endif ?> </td> <td style="text-align: center;"> diff --git a/app/views/vips/sheets/show_exercise_link.php b/app/views/vips/sheets/show_exercise_link.php index 6f41a6a..1abc369 100644 --- a/app/views/vips/sheets/show_exercise_link.php +++ b/app/views/vips/sheets/show_exercise_link.php @@ -17,7 +17,7 @@ </div> <div class="sidebar_exercise_state"> <? if ($assignment->getSolution($solver_id, $item->task_id)): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('Aufgabe bearbeitet')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('Aufgabe bearbeitet')]) ?> <? endif ?> </div> </a> diff --git a/app/views/vips/solutions/assignment_solutions.php b/app/views/vips/solutions/assignment_solutions.php index 388574c..472d7ef 100644 --- a/app/views/vips/solutions/assignment_solutions.php +++ b/app/views/vips/solutions/assignment_solutions.php @@ -65,8 +65,8 @@ <th style="width: 1em;"></th> <th> <a href="#" class="solution-toggle"> - <?= Icon::create('arr_1right')->asImg(['class' => 'arrow_all', 'title' => _('Aufgaben aller Teilnehmenden anzeigen')]) ?> - <?= Icon::create('arr_1down')->asImg(['class' => 'arrow_all', 'title' => _('Aufgaben aller Teilnehmenden verstecken'), 'style' => 'display: none;']) ?> + <?= Icon::create('arr_1right')->asSvg(['class' => 'arrow_all', 'title' => _('Aufgaben aller Teilnehmenden anzeigen')]) ?> + <?= Icon::create('arr_1down')->asSvg(['class' => 'arrow_all', 'title' => _('Aufgaben aller Teilnehmenden verstecken'), 'style' => 'display: none;']) ?> <?= _('Teilnehmende') ?> </a> </th> @@ -108,8 +108,8 @@ <td> <a href="#" class="solution-toggle"> - <?= Icon::create('arr_1right')->asImg(['class' => 'solution-open', 'title' => _('Aufgaben anzeigen')]) ?> - <?= Icon::create('arr_1down')->asImg(['class' => 'solution-close', 'title' => _('Aufgaben verstecken')]) ?> + <?= Icon::create('arr_1right')->asSvg(['class' => 'solution-open', 'title' => _('Aufgaben anzeigen')]) ?> + <?= Icon::create('arr_1down')->asSvg(['class' => 'solution-close', 'title' => _('Aufgaben verstecken')]) ?> <?= htmlReady($solver['name']) ?> </a> diff --git a/app/views/vips/solutions/assignments_list.php b/app/views/vips/solutions/assignments_list.php index c685e9a..851fd47 100644 --- a/app/views/vips/solutions/assignments_list.php +++ b/app/views/vips/solutions/assignments_list.php @@ -109,9 +109,9 @@ <? if (!isset($ass['uncorrected_solutions'])): ?> – <? elseif ($ass['uncorrected_solutions'] == 0): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('ja')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('ja')]) ?> <? else : ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('nein')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('nein')]) ?> <? endif ?> </td> diff --git a/app/views/vips/solutions/edit_solution.php b/app/views/vips/solutions/edit_solution.php index 64bd8bb..327342f 100644 --- a/app/views/vips/solutions/edit_solution.php +++ b/app/views/vips/solutions/edit_solution.php @@ -25,10 +25,10 @@ <? /* previous solver */ ?> <? if (isset($prev_solver)): ?> <a href="<?= $controller->edit_solution(['assignment_id' => $assignment_id, 'exercise_id' => $exercise_id, 'solver_id' => $prev_solver['user_id'], 'view' => $view]) ?>"> - <?= Icon::create('arr_1left')->asImg(['title' => _('Voriger Teilnehmer / vorige Teilnehmerin')]) ?> + <?= Icon::create('arr_1left')->asSvg(['title' => _('Voriger Teilnehmer / vorige Teilnehmerin')]) ?> </a> <? else: ?> - <?= Icon::create('arr_1left', Icon::ROLE_INACTIVE)->asImg(['title' => _('Keiner der vorhergehenden Teilnehmenden hat diese Aufgabe bearbeitet')]) ?> + <?= Icon::create('arr_1left', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Keiner der vorhergehenden Teilnehmenden hat diese Aufgabe bearbeitet')]) ?> <? endif ?> <? /* overview */ ?> @@ -39,10 +39,10 @@ <? /* next solver */ ?> <? if (isset($next_solver)): ?> <a href="<?= $controller->edit_solution(['assignment_id' => $assignment_id, 'exercise_id' => $exercise_id, 'solver_id' => $next_solver['user_id'], 'view' => $view]) ?>"> - <?= Icon::create('arr_1right')->asImg(['title' => _('Nächster Teilnehmer / nächste Teilnehmerin')]) ?> + <?= Icon::create('arr_1right')->asSvg(['title' => _('Nächster Teilnehmer / nächste Teilnehmerin')]) ?> </a> <? else: ?> - <?= Icon::create('arr_1right', Icon::ROLE_INACTIVE)->asImg(['title' => _('Keiner der nachfolgenden Teilnehmenden hat diese Aufgabe bearbeitet')]) ?> + <?= Icon::create('arr_1right', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Keiner der nachfolgenden Teilnehmenden hat diese Aufgabe bearbeitet')]) ?> <? endif ?> / @@ -50,10 +50,10 @@ <? /* previous exercise */ ?> <? if (isset($prev_exercise)): ?> <a href="<?= $controller->edit_solution(['assignment_id' => $assignment_id, 'exercise_id' => $prev_exercise['id'], 'solver_id' => $solver_id, 'view' => $view]) ?>"> - <?= Icon::create('arr_1left')->asImg(['title' => _('Vorige Aufgabe')]) ?> + <?= Icon::create('arr_1left')->asSvg(['title' => _('Vorige Aufgabe')]) ?> </a> <? else: ?> - <?= Icon::create('arr_1left', Icon::ROLE_INACTIVE)->asImg(['title' => _('Die teilnehmende Person hat keine der vorhergehenden Aufgaben bearbeitet')]) ?> + <?= Icon::create('arr_1left', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Die teilnehmende Person hat keine der vorhergehenden Aufgaben bearbeitet')]) ?> <? endif ?> <? /* exercise name */ ?> @@ -62,10 +62,10 @@ <? /* next exercise */ ?> <? if (isset($next_exercise)): ?> <a href="<?= $controller->edit_solution(['assignment_id' => $assignment_id, 'exercise_id' => $next_exercise['id'], 'solver_id' => $solver_id, 'view' => $view]) ?>"> - <?= Icon::create('arr_1right')->asImg(['title' => _('Nächste Aufgabe')]) ?> + <?= Icon::create('arr_1right')->asSvg(['title' => _('Nächste Aufgabe')]) ?> </a> <? else: ?> - <?= Icon::create('arr_1right', Icon::ROLE_INACTIVE)->asImg(['title' => _('Die teilnehmende Person hat keine der nachfolgenden Aufgaben bearbeitet')]) ?> + <?= Icon::create('arr_1right', Icon::ROLE_INACTIVE)->asSvg(['title' => _('Die teilnehmende Person hat keine der nachfolgenden Aufgaben bearbeitet')]) ?> <? endif ?> </div> @@ -147,7 +147,7 @@ <td> <input type="hidden" name="file_ids[]" value="<?= htmlReady($file_ref->id) ?>"> <a href="<?= htmlReady($file_ref->getDownloadURL()) ?>"> - <?= Icon::create('file')->asImg(['title' => _('Datei herunterladen')]) ?> + <?= Icon::create('file')->asSvg(['title' => _('Datei herunterladen')]) ?> <?= htmlReady($file_ref->name) ?> </a> </td> @@ -171,7 +171,7 @@ <tfoot> <tr> <td colspan="5"> - <?= Studip\Button::create(_('Dateien zur Korrektur hochladen'), '', ['class' => 'vips_file_upload', 'data-label' => _('%d Dateien ausgewählt')]) ?> + <?= Studip\Button::create(_('Dateien zur Korrektur hochladen'), '', ['class' => 'upload vips_file_upload', 'data-label' => _('%d Dateien ausgewählt')]) ?> <span class="file_upload_hint" style="display: none;"><?= _('Klicken Sie auf „Speichern“, um die gewählten Dateien hochzuladen.') ?></span> <?= tooltipIcon(sprintf(_('max. %g MB pro Datei'), FileManager::getUploadTypeConfig($assignment->range_id)['file_size'] / 1048576)) ?> <input class="file_upload attach" style="display: none;" type="file" name="upload[]" multiple> diff --git a/app/views/vips/solutions/feedback_files_table.php b/app/views/vips/solutions/feedback_files_table.php index dff9869..8c6757c 100644 --- a/app/views/vips/solutions/feedback_files_table.php +++ b/app/views/vips/solutions/feedback_files_table.php @@ -31,7 +31,7 @@ <tr> <td> <a href="<?= htmlReady($file_ref->getDownloadURL()) ?>"> - <?= Icon::create('file')->asImg(['title' => _('Datei herunterladen')]) ?> + <?= Icon::create('file')->asSvg(['title' => _('Datei herunterladen')]) ?> <?= htmlReady($file_ref->name) ?> </a> </td> diff --git a/app/views/vips/solutions/student_assignment_solutions.php b/app/views/vips/solutions/student_assignment_solutions.php index d5b717a..b279a36 100644 --- a/app/views/vips/solutions/student_assignment_solutions.php +++ b/app/views/vips/solutions/student_assignment_solutions.php @@ -64,9 +64,9 @@ </td> <td style="text-align: center;"> <? if ($solution): ?> - <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asImg(['title' => _('ja')]) ?> + <?= Icon::create('accept', Icon::ROLE_STATUS_GREEN)->asSvg(['title' => _('ja')]) ?> <? else : ?> - <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asImg(['title' => _('nein')]) ?> + <?= Icon::create('decline', Icon::ROLE_STATUS_RED)->asSvg(['title' => _('nein')]) ?> <? endif ?> </td> <td style="text-align: center;"> diff --git a/db/migrations/6.1.13_add_themes_config.php b/db/migrations/6.1.13_add_themes_config.php new file mode 100644 index 0000000..d1b4704 --- /dev/null +++ b/db/migrations/6.1.13_add_themes_config.php @@ -0,0 +1,57 @@ +<?php + +final class AddThemesConfig extends Migration +{ + public function description() + { + return 'Add configs for Stud.IP Themes'; + } + + public function up() + { + $query = 'INSERT INTO `config` (`field`, `value`, `type`, `section`, `range`, `description`, `mkdate`, `chdate`) + VALUES (:name, :value, :type, :section, :range, :description, UNIX_TIMESTAMP(), UNIX_TIMESTAMP())'; + $statement = DBManager::get()->prepare($query); + $statement->execute([ + 'name' => 'STUDIP_THEME_LIGHT', + 'value' => '1', + 'type' => 'integer', + 'section' => 'Themes', + 'range' => 'global', + 'description' => 'Welches Theme soll im Light-Mode verwendet werden?' + ]); + $statement->execute([ + 'name' => 'STUDIP_THEME_DARK', + 'value' => '2', + 'type' => 'integer', + 'section' => 'Themes', + 'range' => 'global', + 'description' => 'Welches Theme soll im Dark-Mode verwendet werden?' + ]); + $statement->execute([ + 'name' => 'STUDIP_THEME_HIGH_CONTRAST', + 'value' => '3', + 'type' => 'integer', + 'section' => 'Themes', + 'range' => 'global', + 'description' => 'Welches Theme soll im High-Contrast-Mode verwendet werden?' + ]); + } + + public function down() + { + $query = "DELETE `config`, `config_values`, `i18n` + FROM `config` + LEFT JOIN `config_values` USING (`field`) + LEFT JOIN `i18n` + ON `table` = 'config' + AND `field` = 'value' + AND `object_id` = MD5(`config`.`field`) + WHERE `field` IN ( + 'STUDIP_THEME_LIGHT', + 'STUDIP_THEME_DARK', + 'STUDIP_THEME_HIGH_CONTRAST' + )"; + DBManager::get()->exec($query); + } +}
\ No newline at end of file diff --git a/db/migrations/6.1.14_add_themes_table.php b/db/migrations/6.1.14_add_themes_table.php new file mode 100644 index 0000000..f5ccc70 --- /dev/null +++ b/db/migrations/6.1.14_add_themes_table.php @@ -0,0 +1,76 @@ +<?php + +final class AddThemesTable extends Migration +{ + public function description() + { + return 'Create table for Stud.IP Themes'; + } + + public function up() + { + $query = "CREATE TABLE IF NOT EXISTS `themes` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `active` TINYINT(1) NOT NULL DEFAULT 0, + `name` VARCHAR(255) NOT NULL, + `origin` ENUM('system', 'custom') COLLATE latin1_bin NOT NULL, + `version` VARCHAR(50) NOT NULL, + `studip_min_version` VARCHAR(50) NOT NULL, + `studip_max_version` VARCHAR(50) NOT NULL, + `author` VARCHAR(255) NOT NULL, + `description` VARCHAR(255) NOT NULL, + `type` ENUM('light', 'dark', 'high-contrast') COLLATE latin1_bin NOT NULL, + `values` MEDIUMTEXT NOT NULL, + `mkdate` INT(11) NOT NULL, + `chdate` INT(11) NOT NULL, + PRIMARY KEY (`id`) + )"; + DBManager::get()->exec($query); + + $default_values = json_encode([ + '--color--brand-primary' => '#28497c', + '--color--brand-primary-contrast' => '#ffffff', + '--color--brand-secondary' => '#28497c', + '--color--brand-secondary-contrast' => '#ffffff', + '--color--global-background' => '#ffffff', + '--color--font-primary' => '#101010', + '--color--font-secondary' => '#3c454e', + '--color--font-inactive' => '#676767', + '--color--font-inverted' => '#ffffff', + '--color--main-navigation-item' => '#28497c', + '--color--sidebar-item' => '#28497c', + '--color--sidebar-item-hover' => '#d60000', + '--color--highlight' => '#28497c', + '--color--highlight-hover' => '#d60000', + '--color--content-link' => '#28497c', + '--color--content-link-hover' => '#d60000', + ]); + + $stmt = DBManager::get()->prepare(" + INSERT INTO `themes` + (`id`, `active`, `name`, `origin`, `version`, `studip_min_version`, `studip_max_version`, `author`, `description`, `type`, `values`, `mkdate`, `chdate`) + VALUES + (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()) + "); + + $stmt->execute([ + 1, + 1, + 'Stud.IP Light Theme', + 'system', + '1.0', + '6.1', + '6.1', + 'Ron Lucke', + 'Default Light Theme', + 'light', + $default_values, + ]); + + } + + public function down() + { + DBManager::get()->exec('DROP TABLE IF EXISTS `themes`'); + } +} diff --git a/lib/admissionrules/coursememberadmission/templates/info.php b/lib/admissionrules/coursememberadmission/templates/info.php index 9c844e3..8616aad 100644 --- a/lib/admissionrules/coursememberadmission/templates/info.php +++ b/lib/admissionrules/coursememberadmission/templates/info.php @@ -14,7 +14,7 @@ <li> <strong><?= htmlReady($course->getFullName('number-name-semester')) ?></strong> <a href="<?= URLHelper::getLink('dispatch.php/course/details/index/' . $course->id) ?>" data-dialog> - <?= Icon::create('info-circle')->asImg([ + <?= Icon::create('info-circle')->asSvg([ 'title' => _('Veranstaltungsdetails aufrufen') ]) ?> </a> diff --git a/lib/classes/Icon.php b/lib/classes/Icon.php index ad1327c..bec9bdd 100644 --- a/lib/classes/Icon.php +++ b/lib/classes/Icon.php @@ -41,6 +41,7 @@ class Icon implements JsonSerializable protected string $role; protected array $attributes = []; + private static array $svg_cache = []; /** * This is the magical Role to Color mapping. @@ -153,7 +154,7 @@ class Icon implements JsonSerializable */ public function getShape() { - return $this->shapeToPath($this->shape); + return $this->shapeToPath(); } /** @@ -197,7 +198,7 @@ class Icon implements JsonSerializable */ public function __toString() { - return $this->asImg(); + return $this->asSvg(); } public function jsonSerialize(): mixed @@ -227,6 +228,78 @@ class Icon implements JsonSerializable ); } + public function asSvg($size = self::SIZE_DEFAULT, $view_attributes = []): string + { + if (self::isStatic($this->shape)) { + return $this->asImg($size, $view_attributes); + } + + if (is_array($size)) { + [$view_attributes, $size] = [$size, $size['size'] ?? self::SIZE_DEFAULT]; + } + + $cacheKey = md5(json_encode([ + 'role' => $this->role, + 'shape' => $this->shape, + 'size' => $size, + 'attrs' => $view_attributes + ])); + + if (isset(self::$svg_cache[$cacheKey])) { + return self::$svg_cache[$cacheKey]; + } + + $path = __DIR__ . '/../../public/assets/images/icons/' . self::roleToColor($this->role) . '/' . $this->shapeToPath($this->shape) . '.svg'; + $roleClass = $this->role ? 'icon-role-' . $this->role : ''; + + $classes = trim("studip-icon $roleClass"); + if (!empty($view_attributes['class'])) { + $classes .= ' ' . $view_attributes['class']; + } + $view_attributes['class'] = $classes; + + $titleTag = ''; + if (!empty($view_attributes['title'])) { + $titleTag = '<title>' . htmlspecialchars($view_attributes['title']) . '</title>'; + unset($view_attributes['title']); // Entfernt 'title' aus den View-Attributen, da es separat hinzugefügt wird + } + + $attrString = $this->buildSvgAttributes($view_attributes); + + if (!file_exists($path)) { + return ''; + } + + $svgContent = file_get_contents($path); + + $svgContent = preg_replace('/fill="(?!none)[^"]+"/', 'fill="currentColor"', $svgContent); + + $svgContent = preg_replace('/(width|height)="[^"]+"/', '', $svgContent); + if ($size !== false) { + $svgContent = preg_replace('/<svg([^>]+)>/', '<svg$1 style="width:' . $size . 'px;height:' . $size . 'px">', $svgContent); + } + + $svgContent = preg_replace_callback('/<svg([^>]+)>/', function($matches) use ($attrString) { + return '<svg' . $matches[1] . ' ' . $attrString . '>'; + }, $svgContent); + + if (!empty($titleTag)) { + $svgContent = preg_replace('/(<svg[^>]*>)/', '$1' . $titleTag, $svgContent, 1); + } + + self::$svg_cache[$cacheKey] = $svgContent; + return $svgContent; + } + + private function buildSvgAttributes(array $attributes): string + { + $attrString = ''; + foreach ($attributes as $key => $value) { + $attrString .= sprintf(' %s="%s"', htmlspecialchars($key, ENT_QUOTES, 'UTF-8'), htmlspecialchars($value, ENT_QUOTES, 'UTF-8')); + } + return trim($attrString); + } + /** * Renders the icon inside an input html tag. * @@ -236,16 +309,27 @@ class Icon implements JsonSerializable * into the rendered output * @return String containing the html representation for the icon. */ - public function asInput($size = null, $view_attributes = []) + public function asInput($size = self::SIZE_DEFAULT, $view_attributes = []) { if (is_array($size)) { - [$view_attributes, $size] = [$size, null]; + [$view_attributes, $size] = [$size, self::SIZE_DEFAULT]; } + + $view_attributes['tabindex'] ??= '0'; + $view_attributes['role'] ??= 'button'; + + $text = isset($view_attributes['text']) ? htmlReady($view_attributes['text']) : ''; + + $svgContent = $this->asSvg($size, $view_attributes); + return sprintf( - '<input type="image" %s>', - arrayToHtmlAttributes( - $this->prepareHTMLAttributes($size, $view_attributes) - ) + '<label class="icon-button undecorated"> + <input type="submit" hidden %s> + %s%s + </label>', + arrayToHtmlAttributes($this->prepareHTMLAttributes($size, $view_attributes)), + $svgContent, + $text ); } diff --git a/lib/classes/JsonApi/RouteMap.php b/lib/classes/JsonApi/RouteMap.php index 4df0677..9393776 100644 --- a/lib/classes/JsonApi/RouteMap.php +++ b/lib/classes/JsonApi/RouteMap.php @@ -139,6 +139,7 @@ class RouteMap $this->addAuthenticatedNewsRoutes($group); $this->addAuthenticatedStockImagesRoutes($group); $this->addAuthenticatedStudyAreasRoutes($group); + $this->addAuthenticatedThemesRoutes($group); $this->addAuthenticatedUserFilterRoutes($group); $this->addAuthenticatedWikiRoutes($group); } @@ -735,6 +736,15 @@ class RouteMap $group->post('/stock-images/zip', Routes\StockImages\StockImagesZipUpload::class); } + private function addAuthenticatedThemesRoutes(RouteCollectorProxy $group): void + { + $group->get('/studip-themes', Routes\Themes\ThemesIndex::class); + $group->get('/studip-themes/{id}', Routes\Themes\ThemesShow::class); + $group->post('/studip-themes', Routes\Themes\ThemesCreate::class); + $group->patch('/studip-themes/{id}', Routes\Themes\ThemesUpdate::class); + $group->delete('/studip-themes/{id}', Routes\Themes\ThemesDelete::class); + } + private function addAuthenticatedAvatarRoutes(RouteCollectorProxy $group): void { $group->get('/{type:courses|institutes|users}/{id}/avatar', Routes\Avatar\AvatarOfRangeShow::class); diff --git a/lib/classes/JsonApi/Routes/Themes/Authority.php b/lib/classes/JsonApi/Routes/Themes/Authority.php new file mode 100644 index 0000000..9d9598d --- /dev/null +++ b/lib/classes/JsonApi/Routes/Themes/Authority.php @@ -0,0 +1,32 @@ +<?php + +namespace JsonApi\Routes\Themes; + +use User; + +class Authority +{ + public static function canIndexThemes(User $user): bool + { + return $GLOBALS['perm']->have_perm('root', $user->id); + } + public static function canShowTheme(User $user): bool + { + return self::canIndexThemes($user); + } + + public static function canDeleteTheme(User $user): bool + { + return self::canIndexThemes($user); + } + + public static function canUpdateTheme(User $user): bool + { + return self::canIndexThemes($user); + } + + public static function canCreateTheme(User $user): bool + { + return self::canIndexThemes($user); + } +}
\ No newline at end of file diff --git a/lib/classes/JsonApi/Routes/Themes/ThemesCreate.php b/lib/classes/JsonApi/Routes/Themes/ThemesCreate.php new file mode 100644 index 0000000..8fae4ff --- /dev/null +++ b/lib/classes/JsonApi/Routes/Themes/ThemesCreate.php @@ -0,0 +1,55 @@ +<?php + +namespace JsonApi\Routes\Themes; + +use JsonApi\Errors\AuthorizationFailedException; +use JsonApi\Errors\RecordNotFoundException; +use JsonApi\JsonApiController; +use JsonApi\Routes\ValidationTrait; +use JsonApi\Schemas\StockImage as ResourceSchema; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; + +class ThemesCreate extends JsonApiController +{ + use ValidationTrait; + + public function __invoke(Request $request, Response $response, $args): Response + { + $user = $this->getUser($request); + if (!Authority::canCreateTheme($user)) { + throw new AuthorizationFailedException(); + } + + $json = $this->validate($request); + $resource = $this->createResource($json, $user); + + return $this->getContentResponse($resource); + } + + protected function validateResourceDocument($json, $data) + { + if (!self::arrayHas($json, 'data')) { + return 'Missing `data` member at document´s top level.'; + } + } + + private function createResource(array $json, \User $user): \Theme + { + $theme = \Theme::build([ + 'name' => self::arrayGet($json, 'data.attributes.name', 'custom theme'), + 'origin' => 'custom', + 'version' => '1.0', + 'studip_min_version' => self::arrayGet($json, 'data.attributes.studip-min-version', '6.1'), + 'studip_max_version' => self::arrayGet($json, 'data.attributes.studip-max-version', '6.1'), + 'author' => $user->getFullname(), + 'description' => self::arrayGet($json, 'data.attributes.description', 'custom theme'), + 'type' => self::arrayGet($json, 'data.attributes.type', 'light'), + 'values' => json_encode(self::arrayGet($json, 'data.attributes.values', [])) + ]); + + $theme->store(); + + return $theme; + } +}
\ No newline at end of file diff --git a/lib/classes/JsonApi/Routes/Themes/ThemesDelete.php b/lib/classes/JsonApi/Routes/Themes/ThemesDelete.php new file mode 100644 index 0000000..d96f1b5 --- /dev/null +++ b/lib/classes/JsonApi/Routes/Themes/ThemesDelete.php @@ -0,0 +1,28 @@ +<?php + +namespace JsonApi\Routes\Themes; + +use JsonApi\Errors\AuthorizationFailedException; +use JsonApi\Errors\RecordNotFoundException; +use JsonApi\JsonApiController; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; + + +class ThemesDelete extends JsonApiController +{ + public function __invoke(Request $request, Response $response, $args): Response + { + $resource = \Theme::find($args['id']); + if (!$resource) { + throw new RecordNotFoundException(); + } + + if (!Authority::canDeleteTheme($this->getUser($request))) { + throw new AuthorizationFailedException(); + } + $resource->delete(); + + return $this->getCodeResponse(204); + } +} diff --git a/lib/classes/JsonApi/Routes/Themes/ThemesIndex.php b/lib/classes/JsonApi/Routes/Themes/ThemesIndex.php new file mode 100644 index 0000000..508b886 --- /dev/null +++ b/lib/classes/JsonApi/Routes/Themes/ThemesIndex.php @@ -0,0 +1,29 @@ +<?php + +namespace JsonApi\Routes\Themes; + +use JsonApi\Errors\AuthorizationFailedException; +use JsonApi\JsonApiController; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; + +class ThemesIndex extends JsonApiController +{ + protected $allowedPagingParameters = ['offset', 'limit']; + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function __invoke(Request $request, Response $response): Response + { + if (!Authority::canIndexThemes($this->getUser($request))) { + throw new AuthorizationFailedException(); + } + + list($offset, $limit) = $this->getOffsetAndLimit(); + $total = \Theme::countBySQL('1'); + $themes = \Theme::findBySQL("1 ORDER BY name ASC LIMIT {$offset}, {$limit}"); + + return $this->getPaginatedContentResponse($themes, $total); + } +} diff --git a/lib/classes/JsonApi/Routes/Themes/ThemesShow.php b/lib/classes/JsonApi/Routes/Themes/ThemesShow.php new file mode 100644 index 0000000..ba85e09 --- /dev/null +++ b/lib/classes/JsonApi/Routes/Themes/ThemesShow.php @@ -0,0 +1,26 @@ +<?php + +namespace JsonApi\Routes\Themes; + +use JsonApi\Errors\AuthorizationFailedException; +use JsonApi\Errors\RecordNotFoundException; +use JsonApi\JsonApiController; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; + +class ThemesShow extends JsonApiController +{ + public function __invoke(Request $request, Response $response, $args): Response + { + $resource = \Theme::find($args['id']); + if (!$resource) { + throw new RecordNotFoundException(); + } + + if (!Authority::canShowTheme($this->getUser($request), $resource)) { + throw new AuthorizationFailedException(); + } + + return $this->getContentResponse($resource); + } +}
\ No newline at end of file diff --git a/lib/classes/JsonApi/Routes/Themes/ThemesUpdate.php b/lib/classes/JsonApi/Routes/Themes/ThemesUpdate.php new file mode 100644 index 0000000..751b0d0 --- /dev/null +++ b/lib/classes/JsonApi/Routes/Themes/ThemesUpdate.php @@ -0,0 +1,86 @@ +<?php + +namespace JsonApi\Routes\Themes; + +use JsonApi\Errors\AuthorizationFailedException; +use JsonApi\Errors\RecordNotFoundException; +use JsonApi\JsonApiController; +use JsonApi\Routes\ValidationTrait; +use JsonApi\Schemas\StockImage as ResourceSchema; +use Psr\Http\Message\ResponseInterface as Response; +use Psr\Http\Message\ServerRequestInterface as Request; + +class ThemesUpdate extends JsonApiController +{ + use ValidationTrait; + + public function __invoke(Request $request, Response $response, $args): Response + { + $resource = \Theme::find($args['id']); + if (!$resource) { + throw new RecordNotFoundException(); + } + + $user = $this->getUser($request); + if (!Authority::canUpdateTheme($user)) { + throw new AuthorizationFailedException(); + } + + $json = $this->validate($request); + + if ($resource->origin === 'custom') { + $resource = $this->updateResource($resource, $json); + } + + if (self::arrayGet($json, 'data.attributes.active') === true) { + $activeThemes = \Theme::getActiveThemes(); + foreach ($activeThemes as $theme) { + if ($theme->id !== $resource->id && $theme->type === $resource->type) { + $theme->active = false; + $theme->store(); + $resource->active = true; + $resource->store(); + } + } + } + + return $this->getContentResponse($resource); + } + + protected function validateResourceDocument($json, $data) + { + if (!self::arrayHas($json, 'data')) { + return 'Missing `data` member at document´s top level.'; + } + + if (!self::arrayHas($json, 'data.id')) { + return 'Document must have an `id`.'; + } + } + + private function updateResource(\Theme $resource, array $json): \Theme + { + $attributes = [ + 'name', + 'version', + 'studip-min-version', + 'studip-max-version', + 'author', + 'description', + 'type', + 'values' + ]; + foreach ($attributes as $jsonKey) { + $sormKey = strtr($jsonKey, '-', '_'); + $val = self::arrayGet($json, 'data.attributes.' . $jsonKey, ''); + if ($val) { + $resource->$sormKey = $val; + } + } + + $resource->store(); + + return $resource; + } + +}
\ No newline at end of file diff --git a/lib/classes/JsonApi/SchemaMap.php b/lib/classes/JsonApi/SchemaMap.php index c5acad7..e460150 100644 --- a/lib/classes/JsonApi/SchemaMap.php +++ b/lib/classes/JsonApi/SchemaMap.php @@ -81,6 +81,7 @@ class SchemaMap \Modul::class => Schemas\Module::class, \Modulteil::class => Schemas\ModuleComponent::class, \StgteilAbschnitt::class => Schemas\ComponentSection::class, + \Theme::class => Schemas\Theme::class, \Courseware\Block::class => Schemas\Courseware\Block::class, \Courseware\BlockComment::class => Schemas\Courseware\BlockComment::class, diff --git a/lib/classes/JsonApi/Schemas/Theme.php b/lib/classes/JsonApi/Schemas/Theme.php new file mode 100644 index 0000000..8b8c09f --- /dev/null +++ b/lib/classes/JsonApi/Schemas/Theme.php @@ -0,0 +1,62 @@ +<?php + +namespace JsonApi\Schemas; + +use JsonApi\Schemas\SchemaProvider; +use Neomerx\JsonApi\Contracts\Schema\ContextInterface; +use Neomerx\JsonApi\Schema\Link; +use Neomerx\JsonApi\Contracts\Schema\LinkInterface; + +class Theme extends SchemaProvider +{ + public const TYPE = 'studip-themes'; + + /** + * @param \Theme $resource + */ + public function getId($resource): ?string + { + return $resource->getId(); + } + + /** + * @param \Theme $resource + */ + public function getAttributes($resource, ContextInterface $context): iterable + { + return [ + 'name' => $resource['name'], + 'active' => (bool)$resource['active'], + 'origin' => $resource['origin'], + 'studip_min_version' => $resource['studip_min_version'], + 'studip_max_version' => $resource['studip_max_version'], + 'author' => $resource['author'], + 'description' => $resource['description'], + 'type' => $resource['type'], + 'values' => empty($resource['values']) ? null : json_decode($resource['values']), + + 'mkdate' => date('c', $resource['mkdate']), + 'chdate' => date('c', $resource['chdate']), + ]; + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function getRelationships($resource, ContextInterface $context): iterable + { + return []; + } + + public function hasResourceMeta($resource): bool + { + return true; + } + + public function getResourceMeta($resource): iterable + { + return [ + 'colorKeyCategories' => $resource->getColorKeyCategories(), + ]; + } +}
\ No newline at end of file diff --git a/lib/classes/PageLayout.php b/lib/classes/PageLayout.php index c4d0f6c..94bc133 100644 --- a/lib/classes/PageLayout.php +++ b/lib/classes/PageLayout.php @@ -161,6 +161,11 @@ class PageLayout URLHelper::setBaseURL($old_base); } + + self::addHeadElement('link', [ + 'rel' => 'stylesheet', + 'href' => Assets::url('stylesheets/theme.php') + ]); } /** @@ -271,6 +276,28 @@ class PageLayout } /** + * Add CSS variables to the :root selector in the HTML HEAD section. + * + * @param array $variables Associative array of CSS variable names and values. + */ + public static function addRootStyle(array $variables) + { + if (empty($variables)) { + return; + } + + $style = ':root {' . PHP_EOL; + foreach ($variables as $name => $value) { + $style .= " --$name: $value;" . PHP_EOL; + } + $style .= '}' . PHP_EOL; + + // Add the <style> tag with the generated CSS to the head + self::addHeadElement('style', [], $style); + } + + + /** * Add a STYLE element to the HTML HEAD section. * * @param string $content element contents diff --git a/lib/classes/forms/Link.php b/lib/classes/forms/Link.php index 6f26f28..eeb0244 100644 --- a/lib/classes/forms/Link.php +++ b/lib/classes/forms/Link.php @@ -159,7 +159,7 @@ class Link extends Part '<div class="formpart"><a href="%1$s" %2$s>%3$s %4$s</a></div>', \URLHelper::getLink($this->url, [], true), arrayToHtmlAttributes($this->attributes), - $this->icon ? $this->icon->asImg(['class' => 'text-bottom']) : '', + $this->icon ? $this->icon->asSvg(['class' => 'text-bottom']) : '', htmlReady($this->label) ); } diff --git a/lib/classes/globalsearch/GlobalSearchCourses.php b/lib/classes/globalsearch/GlobalSearchCourses.php index 939203c..a02e691 100644 --- a/lib/classes/globalsearch/GlobalSearchCourses.php +++ b/lib/classes/globalsearch/GlobalSearchCourses.php @@ -185,21 +185,21 @@ class GlobalSearchCourses extends GlobalSearchModule implements GlobalSearchFull 'decline-circle', Icon::ROLE_STATUS_YELLOW, tooltip2(_('Eingeschränkter Zugang')) - )->asImg(); + )->asSvg(); break; case 2: $admission_state = Icon::create( 'decline-circle', Icon::ROLE_STATUS_RED, tooltip2(_('Kein Zugang')) - )->asImg(); + )->asSvg(); break; default: $admission_state = Icon::create( 'check-circle', Icon::ROLE_STATUS_GREEN, tooltip2(_('Uneingeschränkter Zugang')) - )->asImg(); + )->asSvg(); } } diff --git a/lib/classes/globalsearch/GlobalSearchStudygroups.php b/lib/classes/globalsearch/GlobalSearchStudygroups.php index a9f1398..74bc11f 100644 --- a/lib/classes/globalsearch/GlobalSearchStudygroups.php +++ b/lib/classes/globalsearch/GlobalSearchStudygroups.php @@ -188,21 +188,21 @@ class GlobalSearchStudygroups extends GlobalSearchModule implements GlobalSearch 'decline-circle', Icon::ROLE_STATUS_YELLOW, tooltip2(_('Eingeschränkter Zugang')) - )->asImg(); + )->asSvg(); break; case 2: $admission_state = Icon::create( 'decline-circle', Icon::ROLE_STATUS_RED, tooltip2(_('Kein Zugang')) - )->asImg(); + )->asSvg(); break; default: $admission_state = Icon::create( 'check-circle', Icon::ROLE_STATUS_GREEN, tooltip2(_('Uneingeschränkter Zugang')) - )->asImg(); + )->asSvg(); } } diff --git a/lib/classes/sidebar/CourseManagementSelectWidget.php b/lib/classes/sidebar/CourseManagementSelectWidget.php index 3973502..8f10eaa 100644 --- a/lib/classes/sidebar/CourseManagementSelectWidget.php +++ b/lib/classes/sidebar/CourseManagementSelectWidget.php @@ -19,7 +19,7 @@ class CourseManagementSelectWidget extends SelectWidget '<a href="%s" title="%s" data-dialog="size=auto">%s</a>', URLHelper::getURL('dispatch.php/course/management/order_settings', ['cid' => $this->course->id, 'from' => Request::url()]), _('Sortiereinstellungen'), - Icon::create('settings') + Icon::create('settings')->asSvg(['title' => _('Sortiereinstellungen')]) ); $this->setExtra($extra); $this->class = 'nested-select'; diff --git a/lib/classes/sidebar/LinkElement.php b/lib/classes/sidebar/LinkElement.php index f8d768b..0376a47 100644 --- a/lib/classes/sidebar/LinkElement.php +++ b/lib/classes/sidebar/LinkElement.php @@ -216,17 +216,48 @@ class LinkElement extends WidgetElement implements ArrayAccess ); } + public function renderWithIcon($icon) + { + $disabled = $this->isDisabled(); + + if ($this->as_button && !$disabled) { + return $this->renderButton($icon); + } + + if ($this->active) { + $this->addClass('active'); + } + + $attributes = (array) $this->attributes; + + if ($disabled) { + $tag = 'span'; + } else { + $tag = 'a'; + $attributes['href'] = $this->url; + } + + return sprintf( + '<%1$s %2$s>%3$s%4$s</%1$s>', + $tag, + arrayToHtmlAttributes($attributes), + $icon->asSvg(), + htmlReady($this->label) + ); + } + /** * Renders the element as a button/form. * * @return string */ - protected function renderButton() + protected function renderButton(?Icon $icon = null) { return sprintf( - '<button formaction="%s" %s>%s</button>', + '<button formaction="%s" %s>%s %s</button>', htmlReady($this->url), arrayToHtmlAttributes((array) $this->attributes), + $icon?->asSvg() ?? '', htmlReady($this->label) ); } diff --git a/lib/ilias_interface/IliasModule.php b/lib/ilias_interface/IliasModule.php index 84336ab..f792c5d 100644 --- a/lib/ilias_interface/IliasModule.php +++ b/lib/ilias_interface/IliasModule.php @@ -374,6 +374,6 @@ class IliasModule if (!$this->icon_file) { $this->icon_file = 'learnmodule'; } - return Icon::create($this->icon_file, 'inactive', [])->asImg(); + return Icon::create($this->icon_file, 'inactive', [])->asSvg(); } } diff --git a/lib/models/OERReview.php b/lib/models/OERReview.php index 4ae7fa3..09dc73f 100644 --- a/lib/models/OERReview.php +++ b/lib/models/OERReview.php @@ -204,15 +204,15 @@ class OERReview extends BlubberThread $data['thread_posting']['html'] .= "<div>"; $rating = round($this['metadata']['rating'], 1); $v = $rating >= 0.75 ? "" : ($rating >= 0.25 ? "-halffull" : "-empty"); - $data['thread_posting']['html'] .= Icon::create("star$v", "info")->asImg(25); + $data['thread_posting']['html'] .= Icon::create("star{$v}", 'info')->asSvg(25); $v = $rating >= 1.75 ? "" : ($rating >= 1.25 ? "-halffull" : "-empty"); - $data['thread_posting']['html'] .= Icon::create("star$v", "info")->asImg(25); + $data['thread_posting']['html'] .= Icon::create("star{$v}", 'info')->asSvg(25); $v = $rating >= 2.75 ? "" : ($rating >= 2.25 ? "-halffull" : "-empty"); - $data['thread_posting']['html'] .= Icon::create("star$v", "info")->asImg(25); + $data['thread_posting']['html'] .= Icon::create("star{$v}", 'info')->asSvg(25); $v = $rating >= 3.75 ? "" : ($rating >= 3.25 ? "-halffull" : "-empty"); - $data['thread_posting']['html'] .= Icon::create("star$v", "info")->asImg(25); + $data['thread_posting']['html'] .= Icon::create("star{$v}", 'info')->asSvg(25); $v = $rating >= 4.75 ? "" : ($rating >= 4.25 ? "-halffull" : "-empty"); - $data['thread_posting']['html'] .= Icon::create("star$v", "info")->asImg(25); + $data['thread_posting']['html'] .= Icon::create("star{$v}", 'info')->asSvg(25); $data['thread_posting']['html'] .= "</div>"; return $data; diff --git a/lib/models/Theme.php b/lib/models/Theme.php new file mode 100644 index 0000000..e1d93b5 --- /dev/null +++ b/lib/models/Theme.php @@ -0,0 +1,95 @@ +<?php + +/** + * Theme.php - Stud.IP Theme Model Class + * + * @author Ron Lucke <lucke@elan-ev.de> + * @license GPL2 or any later version + * + * @property string $name + * @property string $origin + * @property string $version + * @property string $studip_min_version + * @property string $studip_max_version + * @property string $author + * @property string $description + * @property \JSONArrayObject $values + * @property string $type + * @property int $mkdate database column + * @property int $chdate database column + */ + + class Theme extends SimpleORMap + { + public const COLOR_KEY_CATEGORIES = [ + 'brand' => [ + '--color--brand-primary' => '#28497c', + '--color--brand-primary-contrast' => '#ffffff', + '--color--brand-secondary' => '#28497c', + '--color--brand-secondary-contrast' => '#ffffff', + ], + 'general' => [ + '--color--global-background' => '#ffffff', + ], + 'text' => [ + '--color--font-primary' => '#101010', + '--color--font-secondary' => '#3c454e', + '--color--font-inactive' => '#676767', + '--color--font-inverted' => '#ffffff', + ], + 'navigation' => [ + '--color--main-navigation-item' => '#28497c', + ], + 'sidebar' => [ + '--color--sidebar-item' => '#28497c', + '--color--sidebar-item-hover' => '#d60000', + ], + 'content' => [ + '--color--highlight' => '#28497c', + '--color--highlight-hover' => '#d60000', + '--color--content-link' => '#28497c', + '--color--content-link-hover' => '#d60000', + ], + ]; + + protected static function configure($config = []) + { + $config['db_table'] = 'themes'; + $config['serialized_fields']['values'] = JSONArrayObject::class; + + parent::configure($config); + } + + /** + * @return static[] + */ + public static function getActiveThemes(): array + { + return [ + 'light' => self::getActiveLightTheme(), + 'dark' => self::getActiveDarkTheme(), + 'high-contrast' => self::getActiveHighContrastTheme(), + ]; + } + + public static function getActiveLightTheme(): ?static + { + return self::findOneBySQL('active = 1 AND type = "light"'); + } + + public static function getActiveDarkTheme(): ?static + { + return self::findOneBySQL('active = 1 AND type = "dark"'); + } + + public static function getActiveHighContrastTheme(): ?static + { + return self::findOneBySQL('active = 1 AND type = "high-contrast"'); + } + + public static function getcolorKeyCategories(): array + { + return self::COLOR_KEY_CATEGORIES; + } + + }
\ No newline at end of file diff --git a/lib/models/resources/ResourcePropertyDefinition.php b/lib/models/resources/ResourcePropertyDefinition.php index f878975..1e2333d 100644 --- a/lib/models/resources/ResourcePropertyDefinition.php +++ b/lib/models/resources/ResourcePropertyDefinition.php @@ -254,7 +254,7 @@ class ResourcePropertyDefinition extends SimpleORMap ), $this->__toString(), $search->render(), - Icon::create('refresh')->asImg( + Icon::create('refresh')->asSvg( [ 'class' => 'delete-assigned-user-icon enter-accessible', 'data-input-name' => $input_name, diff --git a/lib/navigation/AdminNavigation.php b/lib/navigation/AdminNavigation.php index 7e115b2..033cd88 100644 --- a/lib/navigation/AdminNavigation.php +++ b/lib/navigation/AdminNavigation.php @@ -178,6 +178,13 @@ class AdminNavigation extends Navigation ) ); $navigation->addSubNavigation( + 'layout', + new Navigation( + _('Darstellung'), + 'dispatch.php/admin/layout' + ) + ); + $navigation->addSubNavigation( 'tags', new Navigation( _('Schlagwortverwaltung'), @@ -205,7 +212,7 @@ class AdminNavigation extends Navigation $navigation->addSubNavigation('roles', new Navigation(_('Rollen'), 'dispatch.php/admin/role')); $navigation->addSubNavigation('datafields', new Navigation(_('Datenfelder'), 'dispatch.php/admin/datafields')); $navigation->addSubNavigation('configuration', new Navigation(_('Konfiguration'), 'dispatch.php/admin/configuration/configuration')); - + $navigation->addSubNavigation('coursewizardsteps', new Navigation(_('Anlegeassistent'), 'dispatch.php/admin/coursewizardsteps')); $navigation->addSubNavigation('studygroup', new Navigation(_('Studiengruppen'), 'dispatch.php/course/studygroup/globalmodules')); diff --git a/lib/navigation/Navigation.php b/lib/navigation/Navigation.php index 9f26ab6..6f4de69 100644 --- a/lib/navigation/Navigation.php +++ b/lib/navigation/Navigation.php @@ -202,7 +202,7 @@ class Navigation implements IteratorAggregate public function getImageTag() { if ($image = $this->getImage()) { - return $image->asImg($this->getLinkAttributes()); + return $image->asSvg($this->getLinkAttributes()); } else { return ''; } diff --git a/lib/statusgruppe.inc.php b/lib/statusgruppe.inc.php index a9c382c..993ae08 100644 --- a/lib/statusgruppe.inc.php +++ b/lib/statusgruppe.inc.php @@ -161,7 +161,7 @@ function get_role_data_recursive($roles, $user_or_id, $default_entries, $level = if ($role['user_there'] && $role['visible']) { $out .= '<tr><td>' - . Icon::create('arr_1right', Icon::ROLE_INFO)->asImg(Icon::SIZE_INLINE, []) + . Icon::create('arr_1right', Icon::ROLE_INFO)->asSvg(Icon::SIZE_INLINE, []) . '</td><td colspan="2"><b>'. htmlReady($new_pred) .'</b></td></tr>'; $entries = DataFieldEntry::getDataFieldEntries([$user->id, $role_id]); diff --git a/package-lock.json b/package-lock.json index 1c56c59..9a8d6dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -109,6 +109,7 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.17.0", "vue": "^3.5.13", + "vue-color": "^3.0.0", "vue-dragscroll": "^4.0.6", "vue-loader": "^17.4.2", "vue-resizable": "^2.1.7", @@ -128,25 +129,21 @@ }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@altcha/crypto": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@altcha/crypto/-/crypto-0.0.1.tgz", - "integrity": "sha512-qZMdnoD3lAyvfSUMNtC2adRi666Pxdcw9zqfMU5qBOaJWqpN9K+eqQGWqeiKDMqL0SF+EytNG4kR/Pr/99GJ6g==", "dev": true, "license": "MIT" }, "node_modules/@ampproject/remapping": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -157,9 +154,8 @@ }, "node_modules/@axe-core/playwright": { "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.7.3.tgz", - "integrity": "sha512-v2PRgAyGvop7bamrTpNJtc5b1R7giAPnMzZXrS/VDZBCY5+uwVYtCNgDvBsqp5P1QMZxUMoBN+CERJUTMjFN0A==", "dev": true, + "license": "MPL-2.0", "dependencies": { "axe-core": "^4.7.0" }, @@ -169,8 +165,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -184,8 +178,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true, "license": "MIT", "engines": { @@ -194,8 +186,6 @@ }, "node_modules/@babel/core": { "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -225,23 +215,19 @@ }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/eslint-parser": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.27.0.tgz", - "integrity": "sha512-dtnzmSjXfgL/HDgMcmsLSzyGbEosi4DrGWoCNfuI+W4IkVJw6izpTe7LtOdwAXnkDqw5yweboYCTkM2rQizCng==", "dev": true, "license": "MIT", "dependencies": { @@ -259,17 +245,14 @@ }, "node_modules/@babel/eslint-parser/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "dev": true, "license": "MIT", "dependencies": { @@ -285,8 +268,6 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "license": "MIT", "dependencies": { @@ -298,8 +279,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", "dev": true, "license": "MIT", "dependencies": { @@ -315,8 +294,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -325,8 +302,6 @@ }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "dev": true, "license": "MIT", "dependencies": { @@ -347,8 +322,6 @@ }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -357,8 +330,6 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", "dev": true, "license": "MIT", "dependencies": { @@ -375,8 +346,6 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -385,8 +354,6 @@ }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", "dev": true, "license": "MIT", "dependencies": { @@ -402,8 +369,6 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -416,8 +381,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, "license": "MIT", "dependencies": { @@ -430,8 +393,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "license": "MIT", "dependencies": { @@ -448,8 +409,6 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -461,8 +420,6 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "dev": true, "license": "MIT", "engines": { @@ -471,8 +428,6 @@ }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "dev": true, "license": "MIT", "dependencies": { @@ -489,8 +444,6 @@ }, "node_modules/@babel/helper-replace-supers": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -507,8 +460,6 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, "license": "MIT", "dependencies": { @@ -521,8 +472,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -530,8 +479,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -539,8 +486,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, "license": "MIT", "engines": { @@ -549,8 +494,6 @@ }, "node_modules/@babel/helper-wrap-function": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "dev": true, "license": "MIT", "dependencies": { @@ -564,8 +507,6 @@ }, "node_modules/@babel/helpers": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "license": "MIT", "dependencies": { @@ -578,8 +519,6 @@ }, "node_modules/@babel/parser": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "license": "MIT", "dependencies": { "@babel/types": "^7.27.0" @@ -593,8 +532,6 @@ }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", "dev": true, "license": "MIT", "dependencies": { @@ -610,8 +547,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", "dev": true, "license": "MIT", "dependencies": { @@ -626,8 +561,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", "dev": true, "license": "MIT", "dependencies": { @@ -642,8 +575,6 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", "dev": true, "license": "MIT", "dependencies": { @@ -660,8 +591,6 @@ }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", "dev": true, "license": "MIT", "dependencies": { @@ -677,9 +606,8 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -689,9 +617,8 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -701,9 +628,8 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -713,9 +639,8 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -725,9 +650,8 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -737,8 +661,6 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "dev": true, "license": "MIT", "dependencies": { @@ -753,8 +675,6 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "dev": true, "license": "MIT", "dependencies": { @@ -769,9 +689,8 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -781,9 +700,8 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -793,9 +711,8 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -808,9 +725,8 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -820,9 +736,8 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -832,9 +747,8 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -844,9 +758,8 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -856,9 +769,8 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -868,9 +780,8 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -880,9 +791,8 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -895,9 +805,8 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -910,9 +819,8 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -926,8 +834,6 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "dev": true, "license": "MIT", "dependencies": { @@ -942,8 +848,6 @@ }, "node_modules/@babel/plugin-transform-async-generator-functions": { "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "dev": true, "license": "MIT", "dependencies": { @@ -960,8 +864,6 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "dev": true, "license": "MIT", "dependencies": { @@ -978,8 +880,6 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -994,8 +894,6 @@ }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "dev": true, "license": "MIT", "dependencies": { @@ -1010,8 +908,6 @@ }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1027,8 +923,6 @@ }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1044,8 +938,6 @@ }, "node_modules/@babel/plugin-transform-classes": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "dev": true, "license": "MIT", "dependencies": { @@ -1065,8 +957,6 @@ }, "node_modules/@babel/plugin-transform-classes/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "license": "MIT", "engines": { @@ -1075,8 +965,6 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "dev": true, "license": "MIT", "dependencies": { @@ -1092,8 +980,6 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1108,8 +994,6 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "dev": true, "license": "MIT", "dependencies": { @@ -1125,8 +1009,6 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "dev": true, "license": "MIT", "dependencies": { @@ -1141,8 +1023,6 @@ }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", "dev": true, "license": "MIT", "dependencies": { @@ -1158,8 +1038,6 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "dev": true, "license": "MIT", "dependencies": { @@ -1174,8 +1052,6 @@ }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1190,8 +1066,6 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "dev": true, "license": "MIT", "dependencies": { @@ -1206,8 +1080,6 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", "dev": true, "license": "MIT", "dependencies": { @@ -1223,8 +1095,6 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "dev": true, "license": "MIT", "dependencies": { @@ -1241,8 +1111,6 @@ }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "dev": true, "license": "MIT", "dependencies": { @@ -1257,8 +1125,6 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1273,8 +1139,6 @@ }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1289,8 +1153,6 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "dev": true, "license": "MIT", "dependencies": { @@ -1305,8 +1167,6 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "dev": true, "license": "MIT", "dependencies": { @@ -1322,8 +1182,6 @@ }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1339,8 +1197,6 @@ }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "dev": true, "license": "MIT", "dependencies": { @@ -1358,8 +1214,6 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "dev": true, "license": "MIT", "dependencies": { @@ -1375,8 +1229,6 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "dev": true, "license": "MIT", "dependencies": { @@ -1392,8 +1244,6 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1408,8 +1258,6 @@ }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "dev": true, "license": "MIT", "dependencies": { @@ -1424,8 +1272,6 @@ }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1440,8 +1286,6 @@ }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", "dev": true, "license": "MIT", "dependencies": { @@ -1458,8 +1302,6 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1475,8 +1317,6 @@ }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", "dev": true, "license": "MIT", "dependencies": { @@ -1491,8 +1331,6 @@ }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", "dev": true, "license": "MIT", "dependencies": { @@ -1508,8 +1346,6 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "dev": true, "license": "MIT", "dependencies": { @@ -1524,8 +1360,6 @@ }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", "dev": true, "license": "MIT", "dependencies": { @@ -1541,8 +1375,6 @@ }, "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", "dev": true, "license": "MIT", "dependencies": { @@ -1559,8 +1391,6 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "dev": true, "license": "MIT", "dependencies": { @@ -1575,8 +1405,6 @@ }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", "dev": true, "license": "MIT", "dependencies": { @@ -1592,8 +1420,6 @@ }, "node_modules/@babel/plugin-transform-regexp-modifiers": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", "dev": true, "license": "MIT", "dependencies": { @@ -1609,8 +1435,6 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -1625,8 +1449,6 @@ }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", - "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", "dev": true, "license": "MIT", "dependencies": { @@ -1646,17 +1468,14 @@ }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", "dev": true, "license": "MIT", "dependencies": { @@ -1671,8 +1490,6 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "dev": true, "license": "MIT", "dependencies": { @@ -1688,8 +1505,6 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "dev": true, "license": "MIT", "dependencies": { @@ -1704,8 +1519,6 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1720,8 +1533,6 @@ }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", - "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", "dev": true, "license": "MIT", "dependencies": { @@ -1736,8 +1547,6 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1752,8 +1561,6 @@ }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", "dev": true, "license": "MIT", "dependencies": { @@ -1769,8 +1576,6 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", "dev": true, "license": "MIT", "dependencies": { @@ -1786,8 +1591,6 @@ }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1803,8 +1606,6 @@ }, "node_modules/@babel/preset-env": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1887,18 +1688,16 @@ }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1910,8 +1709,6 @@ }, "node_modules/@babel/register": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", - "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", "dev": true, "license": "MIT", "dependencies": { @@ -1930,8 +1727,6 @@ }, "node_modules/@babel/runtime": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "dev": true, "license": "MIT", "dependencies": { @@ -1943,15 +1738,11 @@ }, "node_modules/@babel/runtime/node_modules/regenerator-runtime": { "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "dev": true, "license": "MIT" }, "node_modules/@babel/template": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "license": "MIT", "dependencies": { @@ -1965,8 +1756,6 @@ }, "node_modules/@babel/traverse": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "dev": true, "license": "MIT", "dependencies": { @@ -1984,8 +1773,6 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "license": "MIT", "engines": { @@ -1994,8 +1781,6 @@ }, "node_modules/@babel/types": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2007,15 +1792,13 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@ckeditor/ckeditor5-adapter-ckfinder": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-43.2.0.tgz", - "integrity": "sha512-RiZXc6l05yfkkSyJRxyDAnqqUxMXHboZxooptBUweUm1ofXltyaGkFa5D4kBMS5prrAEXrdpJ9uMZPvjY2BF7g==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-upload": "43.2.0", @@ -2024,9 +1807,8 @@ }, "node_modules/@ckeditor/ckeditor5-alignment": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-43.2.0.tgz", - "integrity": "sha512-Yhh+1FmmcycBtFRX3nqULe/EiF5Y28eLEkmdus16jhfImtMFLzt344+SrcTkd2uQfC4U+yVlxmOo6/lbR1R7Qw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2036,9 +1818,8 @@ }, "node_modules/@ckeditor/ckeditor5-autoformat": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-43.2.0.tgz", - "integrity": "sha512-8b/POJT08kR9eDeZXIEiU0CKIBanusbnSku+a//63hrW2urzS3F9umKsD8Y1I/xoKGm/ew4yVtncQRaCUEE7lA==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2049,9 +1830,8 @@ }, "node_modules/@ckeditor/ckeditor5-autosave": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-43.2.0.tgz", - "integrity": "sha512-ZDpWibRaXmwsFNPE0Q3Mc93yarR+zcgiCpEW5oZh68vUdR1aL63D3GqGI3ok4EgFKsCTQWHpB1WejyUJecVcMw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-utils": "43.2.0", @@ -2061,9 +1841,8 @@ }, "node_modules/@ckeditor/ckeditor5-basic-styles": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-43.2.0.tgz", - "integrity": "sha512-v1BS3JtD+6fAPx23Sbr+IZ39RAaiIoISursInuGTWU+kJ3RDh7fByKEt4A8kia4ZfSd1b469i/4LOiikN+jfxQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-typing": "43.2.0", @@ -2073,9 +1852,8 @@ }, "node_modules/@ckeditor/ckeditor5-block-quote": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-43.2.0.tgz", - "integrity": "sha512-0T5zy3vitecSWaRd7uhxvyHLLVJUutpeJHMqupKPZaOJlgJOqa9hFOFsK2t4y8EVTtLTx5UfFzTudK449kFnBg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-enter": "43.2.0", @@ -2087,9 +1865,8 @@ }, "node_modules/@ckeditor/ckeditor5-ckbox": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-43.2.0.tgz", - "integrity": "sha512-HSjYz2fYA2iJhua3wExApBYKz6k6AuSZmm2CG/X7cYFvq44OCIuOOkjqSABcByvVAtzOUerqWhurwBXTp/QrUg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2103,9 +1880,8 @@ }, "node_modules/@ckeditor/ckeditor5-ckfinder": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-43.2.0.tgz", - "integrity": "sha512-GOMI/FTTGglQBxVIGMxQwVIDD+gCQenegjMlol2eCDsys3td5mtzp0sEYPXCHeJY8u/R28K3ySWvKlrp8YBQ0Q==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2115,9 +1891,8 @@ }, "node_modules/@ckeditor/ckeditor5-clipboard": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-43.2.0.tgz", - "integrity": "sha512-109dffphyvUEhdGDP7GIj6zEHb493QNVEY6Rbl8o9Q0Ia+AAmDGX3VWFewiFC325tWaeVW72wwXXeaCSLRpt2w==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2129,9 +1904,8 @@ }, "node_modules/@ckeditor/ckeditor5-cloud-services": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-43.2.0.tgz", - "integrity": "sha512-bcnklICj88ZNXTnjHdXt74zsxk9RBK1KXIZXKMT2K8NLZQZkppnzPICjDfFJ31BvcvYmFE3mKuVNeLnsofyezQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-utils": "43.2.0", @@ -2140,9 +1914,8 @@ }, "node_modules/@ckeditor/ckeditor5-code-block": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-43.2.0.tgz", - "integrity": "sha512-tNgqpcgigruSdbaJnl08BpOYkKs9mFA284hsTyptmxOloq/igEBvSgBfJDchUGVT0Lm78hAlcirdVKrwku5Eew==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2155,9 +1928,8 @@ }, "node_modules/@ckeditor/ckeditor5-core": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-43.2.0.tgz", - "integrity": "sha512-LLyDuNQdTC+P1E91SMAPGNTpDOLwsQK4OayO/qUS1sDxqWfv/YFxEpN/vBXEHbg5Q3LS2wW1HR6a4o/w7Wwt8w==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-engine": "43.2.0", "@ckeditor/ckeditor5-utils": "43.2.0", @@ -2167,9 +1939,8 @@ }, "node_modules/@ckeditor/ckeditor5-easy-image": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-43.2.0.tgz", - "integrity": "sha512-mRIU5GRVTwv2uMHdoP4p/Jv6lgusmOBUp7p2PkmEEyo1MBG7t+b76rMWePFfBZKmXFmdO8lATJg/SGUNK7JIyg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-upload": "43.2.0", @@ -2179,9 +1950,8 @@ }, "node_modules/@ckeditor/ckeditor5-editor-balloon": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-43.2.0.tgz", - "integrity": "sha512-KtSX8mZTHphUMn7Uf9S3lRDBJI+m5POVvvCRFYDo+AsPO6FN72hZslpseOlAVTcJ0FIYM4aiqAFg1jojeoDyqQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2193,9 +1963,8 @@ }, "node_modules/@ckeditor/ckeditor5-editor-classic": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-43.2.0.tgz", - "integrity": "sha512-D07TxNnJb0qSKe3QicNsaZh28tIXEjmrib4Gnbc2McWi7nDYoxoF1dyUygxFR4OHQ6DXfYU4VUW9EKlJ8ZfSAg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2207,9 +1976,8 @@ }, "node_modules/@ckeditor/ckeditor5-editor-decoupled": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-43.2.0.tgz", - "integrity": "sha512-2vgfOd7sqptBRu6de0qq+hwQd7BuUu1rgfbuWB/msa2zMxwKLNoWwYNFz0N9Mm7b49jaMkQYjaOYFh1zE7BEMQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2221,9 +1989,8 @@ }, "node_modules/@ckeditor/ckeditor5-editor-inline": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-43.2.0.tgz", - "integrity": "sha512-MCb5ljlr4Jp9pYtKAUhLbtOcxHuiMOOPWCrwYmpDogzBss//G2+LILqWqal3b6YUm2WSm37NorGQ+KdPmOh5ow==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2235,9 +2002,8 @@ }, "node_modules/@ckeditor/ckeditor5-editor-multi-root": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-43.2.0.tgz", - "integrity": "sha512-nQcYWsetSG2h5NZOWuHf90VTxE82KBqetO3S0emMmlUstGmVk69KMlQDxU6UZhbB5NptVsgMSG2Y9Cd8XnrO0A==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2249,9 +2015,8 @@ }, "node_modules/@ckeditor/ckeditor5-engine": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-43.2.0.tgz", - "integrity": "sha512-fTrhFe+qUFZ+mvRd6KrvDzXAdMoyE44P4640iU7aOoqnlf2Z7D9wQN7ak+ysRKuccIt9t6Tidl8pmT3BRoBGfA==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-utils": "43.2.0", "lodash-es": "4.17.21" @@ -2259,9 +2024,8 @@ }, "node_modules/@ckeditor/ckeditor5-enter": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-43.2.0.tgz", - "integrity": "sha512-uFnexEaYyOYgekrpPgbA6tCiEPEXOtr1AoATVlIzy2Kb0SfJkfUyciV8559+tK9w16zI4tgMYJrwt0ktg55EYA==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2270,9 +2034,8 @@ }, "node_modules/@ckeditor/ckeditor5-essentials": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-43.2.0.tgz", - "integrity": "sha512-Nb0utwH+j4Kqn8OBzcHYBexJAnlJUMC3jrLnVW2mqbd71HTRFozJ6/MDdX1gIUoQswhl6pVZRLmly26HEubUPQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2286,9 +2049,8 @@ }, "node_modules/@ckeditor/ckeditor5-find-and-replace": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-43.2.0.tgz", - "integrity": "sha512-MKN4rEeq/RWi+++dLBIA/b9tacEd7pnFM8mewLDsehT1RPvWPeGy2e5dN6ugi5zn3It7UcIdkCQE7GLmsLGGBA==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2299,9 +2061,8 @@ }, "node_modules/@ckeditor/ckeditor5-font": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-43.2.0.tgz", - "integrity": "sha512-3BUhy3AtB+SGiLA3ZsX3+JAhD7KmexEwfGKgrX4kDs9iMOg7xVXXHbdeJGEGV8oJc4hNgp34lt3lpFtCApBNgw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2312,9 +2073,8 @@ }, "node_modules/@ckeditor/ckeditor5-heading": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-43.2.0.tgz", - "integrity": "sha512-nGvzMYN+2SRHxe99YhFwRpqw44W2lHbFNuWp0YiV3iYSgpQPwATFFpLXvyOMXOKY4dcob2KiDcogfWVoFxmMdQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2326,9 +2086,8 @@ }, "node_modules/@ckeditor/ckeditor5-highlight": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-43.2.0.tgz", - "integrity": "sha512-9zhf80TyheMxUXXScjSstVUAZMjeDs/SCbhWYwFR/ZZN3Vyhp7kD+WhyyezueHQLyPNiLZNzer7LQ/MB3b+8Lg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2337,9 +2096,8 @@ }, "node_modules/@ckeditor/ckeditor5-horizontal-line": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-43.2.0.tgz", - "integrity": "sha512-d92LsTiOSsHEHeQbWJz5xqj+yYRbo1xiz2bix0cN1BoEsm6iEFJKUPewvh48cISdkw5RPKfDrfzbiBCDZsMlEw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2349,9 +2107,8 @@ }, "node_modules/@ckeditor/ckeditor5-html-embed": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-43.2.0.tgz", - "integrity": "sha512-F55r0UQy53cKlWWGRcYTjrYpQd86jkHEqk901uC0FJdBwpLqV6ZDxCb+w5dMQ6cUh5oYKuILeu0ZZ0KF1C+HQA==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2362,9 +2119,8 @@ }, "node_modules/@ckeditor/ckeditor5-html-support": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-43.2.0.tgz", - "integrity": "sha512-VOjT73VbtiBLy/Qsn9aWib9LhkfXZSbfAHSttIsW3Y8v2am827uf4dL2Y2pop3pcXJdoB+LVGiTFdk1mBDvAFg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2377,9 +2133,8 @@ }, "node_modules/@ckeditor/ckeditor5-image": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-43.2.0.tgz", - "integrity": "sha512-UZVd9sZ9nuG3kZUUUgXzqTkT7YSZs4wvu98NuSgBC3T6l0UlJjdf//GQa1estxNDDc+yCjRk02u+sbHW+eUY0A==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2396,9 +2151,8 @@ }, "node_modules/@ckeditor/ckeditor5-indent": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-43.2.0.tgz", - "integrity": "sha512-hzqAXOlxblaWNQ9eAGP/30kMLk+mMPES2/02B6QmI/CSYgwhXK1FVSTfZN0u6Cw94lWQ+EJr7riP2LCc85Rvfw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2409,9 +2163,8 @@ }, "node_modules/@ckeditor/ckeditor5-language": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-language/-/ckeditor5-language-43.2.0.tgz", - "integrity": "sha512-NSL9E0ROyffTHGKyIpqD27NclOXDhAFO8L9Z9kghqESNsCdOZJKKme+EK376r5gWHsiBNnKZ/5yQOUrGwATtuw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2421,9 +2174,8 @@ }, "node_modules/@ckeditor/ckeditor5-link": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-43.2.0.tgz", - "integrity": "sha512-PyU3bPyCzvNEp/7Hwx4oxuPSRN7ptaDuBe+Jhlz70PWegtANOUPvMIYlcZBB2E20Ruo0ukvrRRR0teqqFKHLug==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2438,9 +2190,8 @@ }, "node_modules/@ckeditor/ckeditor5-list": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-43.2.0.tgz", - "integrity": "sha512-HljK5Ew3fgPX/FYiK0ieuGIrjCqiNeVG825UaAeuRHkNm1QgCBF0xQ1fsaiJw7/lTXfPA5KhzD3ezEwI1qWytQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2454,9 +2205,8 @@ }, "node_modules/@ckeditor/ckeditor5-markdown-gfm": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-43.2.0.tgz", - "integrity": "sha512-TJklEGxL7tTm8OfLFAEWDsKRD4TxgSbai45CvuXNuoSnwcUWsXYhsBT8kUD2zAv8zTlh7gy3tFnuhKnLu157uQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2469,9 +2219,8 @@ }, "node_modules/@ckeditor/ckeditor5-media-embed": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-43.2.0.tgz", - "integrity": "sha512-N+MJUAC7+KPi3CaplVGLmA26W2GEFEukKxKDpjDbpBBgDgwyrJlpfFIOWIvrk+6J1QOwS4yMU+H+1aGypIgd+Q==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2486,9 +2235,8 @@ }, "node_modules/@ckeditor/ckeditor5-mention": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-43.2.0.tgz", - "integrity": "sha512-psEgMErFg6cKdEh2cM02tB/s7QJz+g5LlXCQ0k6OaNa/V7zO/qcT/pChrZ/13Mu2dgRKZqBUeeAG4aUXHN7QFQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-typing": "43.2.0", @@ -2500,9 +2248,8 @@ }, "node_modules/@ckeditor/ckeditor5-minimap": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-43.2.0.tgz", - "integrity": "sha512-rKECbba7QZtb8Kg5znYSez3y63RfX+19TvMvRwmiNw1aiNluyG04ykC0BBvejavO8Kz/EuNrliNMM3h44Og6jg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2513,9 +2260,8 @@ }, "node_modules/@ckeditor/ckeditor5-page-break": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-43.2.0.tgz", - "integrity": "sha512-ukHpucDP0hskHEV1ql9G55dFiNCamI87vuHdLvEy0x/Th89C2ITswxfQAxMbZb1W0Vg93eMKyYf8pbg+YvcjwQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2525,9 +2271,8 @@ }, "node_modules/@ckeditor/ckeditor5-paragraph": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-43.2.0.tgz", - "integrity": "sha512-Gi7Plu75rlwiV55K1V06iVdPAGOn1FKX2JPgK+eTfYe2uZeJlJWkjvkl8x32IxJxT9Z8V1yECcg/I8A0J4IdlA==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2536,9 +2281,8 @@ }, "node_modules/@ckeditor/ckeditor5-paste-from-office": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-43.2.0.tgz", - "integrity": "sha512-+jPVd79p1oyuIcW5Pq4LsxAN5ZxjtJaasx2flGi9mLMFaLxnO/JteFs0rH7BAavURrxdhvXuIosYMGfPWleGLw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2548,9 +2292,8 @@ }, "node_modules/@ckeditor/ckeditor5-remove-format": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-43.2.0.tgz", - "integrity": "sha512-BrtlTWrvg4hcbPvTck9bqIVtDfbanPYGvh+qf3NCX4USxqzAs+zz3tT105JUAY0FF0Qngcvjz6gTfTTwXom//g==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2560,9 +2303,8 @@ }, "node_modules/@ckeditor/ckeditor5-restricted-editing": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-43.2.0.tgz", - "integrity": "sha512-RKYLNbbKks0O6axiE0acYOq5IAdtRGhCC557szUSzFZsGh31LHRPxa7ZpwjKuuefUp4uI11HzFyXXBQfykdnDQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2573,9 +2315,8 @@ }, "node_modules/@ckeditor/ckeditor5-select-all": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-43.2.0.tgz", - "integrity": "sha512-wHFKg/7UsxmR6YBKZnF+4kS8m0cDe+r4IotVcnJcxDRpIuHDNlROKohdMrKdBl6I++6nwvkD3da0Dsxd9gJ8Sw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2584,9 +2325,8 @@ }, "node_modules/@ckeditor/ckeditor5-show-blocks": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-43.2.0.tgz", - "integrity": "sha512-VFXRvDRZvTX+t+lUxdK6sGPy/Lqu5h2OIYnTHykknwwySunOH1gCUjo1iVs0mrCKLwhmcp8fOeQjjdL811xcXQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2595,9 +2335,8 @@ }, "node_modules/@ckeditor/ckeditor5-source-editing": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-43.2.0.tgz", - "integrity": "sha512-b8/PGBybNp//2thS2Objsl7Q+YZ7JHhVZhqH2T27cEIkFlMOag5lfA0Rpz8ClrNxY4MDu/0ArHyjFG8TkjPkvA==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-theme-lark": "43.2.0", @@ -2608,9 +2347,8 @@ }, "node_modules/@ckeditor/ckeditor5-special-characters": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-43.2.0.tgz", - "integrity": "sha512-VHe2MHFUwxFMSo/RKDqLF18dobaIMQoGnMWqZtWi5maQ1xs/l1Mo0Ohh+tdFYCQq97lNuZ4Z3z/FravZAlqV7A==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-typing": "43.2.0", @@ -2621,9 +2359,8 @@ }, "node_modules/@ckeditor/ckeditor5-style": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-style/-/ckeditor5-style-43.2.0.tgz", - "integrity": "sha512-24Gk9iWOtiN1YaJh24QNSjafFMeidmW6NbtaldVibLKwJRFD2oNXvqccSGztj/+cv0FLK8rK1KHFYcm4WSCT3w==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-typing": "43.2.0", @@ -2635,9 +2372,8 @@ }, "node_modules/@ckeditor/ckeditor5-table": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-43.2.0.tgz", - "integrity": "sha512-sIA1Ik8shdrsy2sgDXLX7uZgPuNTEgZ0/H9/aKDX7cg8Z+vQozhElHb1H17oC5a1qoxwQF+qt8FoLgtguZ5gDQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-clipboard": "43.2.0", "@ckeditor/ckeditor5-core": "43.2.0", @@ -2651,18 +2387,16 @@ }, "node_modules/@ckeditor/ckeditor5-theme-lark": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-43.2.0.tgz", - "integrity": "sha512-K6KH0Wakzuf43XFmLN49qu1svwpb2FDP/wM+Vo+UolI3krRRxr6uTXQ9D3O8S4ckMJhwcrVRerBHtlZst0dXew==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-ui": "43.2.0" } }, "node_modules/@ckeditor/ckeditor5-typing": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-43.2.0.tgz", - "integrity": "sha512-IfuEYE9PonfxNe6RENtMIRqeN/ytX64781EVVhVl5FOebNFGKHscw+j0cCrqDGPGq7yVVvehEdCrl2xAXy+gyw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2672,9 +2406,8 @@ }, "node_modules/@ckeditor/ckeditor5-ui": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-43.2.0.tgz", - "integrity": "sha512-sGWW4tqGvs7VvZJHZG2qLYBV3+fU4yLiZcLLG6zDU+RrK6rS2cndspjyBIDj94gdFA2tEXqMkteZeEekPrtLIw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2687,9 +2420,8 @@ }, "node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2699,9 +2431,8 @@ }, "node_modules/@ckeditor/ckeditor5-undo": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-43.2.0.tgz", - "integrity": "sha512-BXApTSSicRIeKReYt3mla9IQfEpgSOFJjtC0jvHbfsVcC9xvo6B0Fxu9DhTzkXFasZtZvCdOqPCSF3oulqJGxQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2710,9 +2441,8 @@ }, "node_modules/@ckeditor/ckeditor5-upload": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-43.2.0.tgz", - "integrity": "sha512-KPyXPCFTKQxjuwmyk3vgUoXTuBJctH4U67LdarsplwszOOS0Ho89bExY3VOQ5aGB7y7mk4oOS9tSKWyt64ASIg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-utils": "43.2.0" @@ -2720,17 +2450,14 @@ }, "node_modules/@ckeditor/ckeditor5-utils": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-43.2.0.tgz", - "integrity": "sha512-0Q2Yj22+a2lcj+YHqe7JOmJANVjmDqAGOwjfYRUoZGXefb6yuEzEpzDin4rU/Msrnll1KrH+mD73HSxUgmgi1Q==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-vue": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-vue/-/ckeditor5-vue-5.1.0.tgz", - "integrity": "sha512-KEx4Tj2Irr4ZbLG8LnaKpb0Dgd8qmLmKFWeiKkQwM3RAAeYRYOCcBVB2Y168I9KA8wRosPxgOO9jbQ92yopYHA==", "dev": true, "hasInstallScript": true, "license": "GPL-2.0-or-later", @@ -2741,18 +2468,16 @@ }, "node_modules/@ckeditor/ckeditor5-watchdog": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-43.2.0.tgz", - "integrity": "sha512-hQ6+8uGJekGkPiAW6+DzhvJNXzo7SKaS+rRcI7ERm9O6CSP/vFyc77uw5Y1SDr1PlzF/bdWksEv5zqxiebQW0Q==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-widget": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-43.2.0.tgz", - "integrity": "sha512-qWyh4ZRvEmz+prHSx+oIaEIqS4jO1UcCFgmC/cuVp3jSXovBgbkSK1G8FqNdf+JHjc2hrZnfKm3Tb4N8OmEbLg==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-engine": "43.2.0", @@ -2765,9 +2490,8 @@ }, "node_modules/@ckeditor/ckeditor5-word-count": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-43.2.0.tgz", - "integrity": "sha512-gp9hHmOGStvA6wpSY4h0LwqTGYSdMRZ8/8XnUFHQ4QiKirejzmHA9K2lWL4grqCTZh5sfO7ZzaX1mx/QctpFxw==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@ckeditor/ckeditor5-core": "43.2.0", "@ckeditor/ckeditor5-ui": "43.2.0", @@ -2778,8 +2502,6 @@ }, "node_modules/@csstools/css-parser-algorithms": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", - "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -2801,8 +2523,6 @@ }, "node_modules/@csstools/css-tokenizer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", - "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -2821,8 +2541,6 @@ }, "node_modules/@csstools/media-query-list-parser": { "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", - "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -2845,18 +2563,16 @@ }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -2869,9 +2585,8 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -2881,8 +2596,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, "license": "MIT", "engines": { @@ -2891,8 +2604,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2915,15 +2626,11 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2938,8 +2645,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -2951,8 +2656,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -2964,8 +2667,6 @@ }, "node_modules/@eslint/js": { "version": "9.16.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz", - "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", "dev": true, "license": "MIT", "engines": { @@ -2974,42 +2675,37 @@ }, "node_modules/@fullcalendar/core": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-4.4.2.tgz", - "integrity": "sha512-vq7KQGuAJ1ieFG5tUqwxwUwmXYtblFOTjHaLAVHo6iEPB52mS7DS45VJfkhaQmX4+5/+BHRpg82G1qkuAINwtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@fullcalendar/daygrid": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-4.4.2.tgz", - "integrity": "sha512-axjfMhxEXHShV3r2TZjf+2niJ1C6LdAxkHKmg7mVq4jXtUQHOldU5XsjV0v2lUAt1urJBFi2zajfK8798ukL3Q==", "dev": true, + "license": "MIT", "peerDependencies": { "@fullcalendar/core": "~4.4.0" } }, "node_modules/@fullcalendar/interaction": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-4.4.2.tgz", - "integrity": "sha512-3ItpGFnxcYQT4NClqhq93QTQwOI8x3mlMf5M4DgK5avVaSzpv9g8p+opqeotK2yzpFeINps06cuQyB1h7vcv1Q==", "dev": true, + "license": "MIT", "peerDependencies": { "@fullcalendar/core": "~4.4.0" } }, "node_modules/@fullcalendar/resource-common": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@fullcalendar/resource-common/-/resource-common-4.4.2.tgz", - "integrity": "sha512-aypS0cu1pao5iRzhDkSGCSpizqDIFELcMyxZTzkzv9dozccU9wCgDK3rM6qFnSldn7CdOdGRgrUDAAvb3OmzFQ==", "dev": true, + "license": "SEE LICENSE IN LICENSE.md", "peerDependencies": { "@fullcalendar/core": "~4.4.0" } }, "node_modules/@fullcalendar/resource-daygrid": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@fullcalendar/resource-daygrid/-/resource-daygrid-4.4.2.tgz", - "integrity": "sha512-5FAVe+FqSuvbhSd3c3QFMqGySgI3pupiU3Frlr80xtwN193A3lZdzDf9SCKU3py0wY5IImv+whS4/pOIPRuZTw==", "dev": true, + "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@fullcalendar/daygrid": "~4.4.0", "@fullcalendar/resource-common": "~4.4.0" @@ -3020,9 +2716,8 @@ }, "node_modules/@fullcalendar/resource-timegrid": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@fullcalendar/resource-timegrid/-/resource-timegrid-4.4.2.tgz", - "integrity": "sha512-QI6gn8I4uYi7lIgA68k/EDLNTSiSBD3+HZUziCP7ivPx/AwrL38PY2OZVep/uDjYWG/In44Laf6SSWRdWTkOQA==", "dev": true, + "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@fullcalendar/resource-common": "~4.4.0", "@fullcalendar/resource-daygrid": "~4.4.0", @@ -3034,9 +2729,8 @@ }, "node_modules/@fullcalendar/resource-timeline": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@fullcalendar/resource-timeline/-/resource-timeline-4.4.2.tgz", - "integrity": "sha512-gCXCqfYwUJmgpSLGO+rM29VRrYiJ76dBqpZuzIDSleZoC4h+MOf+TuaTmJI3OXqjfDGQThfGoMGu8FC1rEJ2ag==", "dev": true, + "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@fullcalendar/resource-common": "~4.4.0", "@fullcalendar/timeline": "~4.4.0" @@ -3047,9 +2741,8 @@ }, "node_modules/@fullcalendar/timegrid": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-4.4.2.tgz", - "integrity": "sha512-M5an7qii8OUmI4ogY47k5pn2j/qUbLp6sa6Vo0gO182HR5pb9YtrEZnoQhnScok+I0BkDkLFzMQoiAMTjBm2PQ==", "dev": true, + "license": "MIT", "dependencies": { "@fullcalendar/daygrid": "~4.4.0" }, @@ -3059,18 +2752,14 @@ }, "node_modules/@fullcalendar/timeline": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@fullcalendar/timeline/-/timeline-4.4.3.tgz", - "integrity": "sha512-9Bt/YbslxI7/1MAF1sMCGgaxq+wwohWtcj7tdD0q0TUFoTx083XVZ+zSLiVkv5p6e9ksI1hsdIV681iw7NfDWQ==", "dev": true, + "license": "SEE LICENSE IN LICENSE.md", "peerDependencies": { "@fullcalendar/core": "~4.4.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3084,8 +2773,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3098,16 +2785,11 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -3124,8 +2806,6 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "license": "MIT", "engines": { @@ -3137,8 +2817,6 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -3150,15 +2828,11 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -3175,8 +2849,6 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3191,8 +2863,6 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3209,9 +2879,8 @@ }, "node_modules/@isaul32/ckeditor5-math": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/@isaul32/ckeditor5-math/-/ckeditor5-math-43.2.0.tgz", - "integrity": "sha512-Moa5Gnvy7SOvEk8aD4ZczBfFdp/hJL4SBym8AyOyoyurmGyiuvBZQLiGEzipKGjn+Un6MTa23ijb/6x3/GsBjw==", "dev": true, + "license": "ISC", "dependencies": { "ckeditor5": "43.2.0" }, @@ -3222,9 +2891,8 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -3238,27 +2906,24 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3273,9 +2938,8 @@ }, "node_modules/@jest/core": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -3320,9 +2984,8 @@ }, "node_modules/@jest/environment": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -3335,9 +2998,8 @@ }, "node_modules/@jest/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -3348,9 +3010,8 @@ }, "node_modules/@jest/expect-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -3360,9 +3021,8 @@ }, "node_modules/@jest/fake-timers": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -3377,9 +3037,8 @@ }, "node_modules/@jest/globals": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -3392,9 +3051,8 @@ }, "node_modules/@jest/reporters": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -3435,9 +3093,8 @@ }, "node_modules/@jest/reporters/node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -3450,9 +3107,8 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -3462,9 +3118,8 @@ }, "node_modules/@jest/source-map": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -3476,9 +3131,8 @@ }, "node_modules/@jest/test-result": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -3491,9 +3145,8 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -3506,9 +3159,8 @@ }, "node_modules/@jest/transform": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -3532,15 +3184,13 @@ }, "node_modules/@jest/transform/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jest/types": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3555,8 +3205,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "license": "MIT", "dependencies": { @@ -3570,17 +3218,14 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "license": "MIT", "engines": { @@ -3589,9 +3234,8 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -3599,14 +3243,10 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3616,14 +3256,11 @@ }, "node_modules/@mixmark-io/domino": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", - "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/@napi-rs/canvas": { "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.70.tgz", - "integrity": "sha512-nD6NGa4JbNYSZYsTnLGrqe9Kn/lCkA4ybXt8sx5ojDqZjr2i0TWAHxx/vhgfjX+i3hCdKWufxYwi7CfXqtITSA==", "dev": true, "license": "MIT", "optional": true, @@ -3643,27 +3280,8 @@ "@napi-rs/canvas-win32-x64-msvc": "0.1.70" } }, - "node_modules/@napi-rs/canvas-android-arm64": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.70.tgz", - "integrity": "sha512-I/YOuQ0wbkVYxVaYtCgN42WKTYxNqFA0gTcTrHIGG1jfpDSyZWII/uHcjOo4nzd19io6Y4+/BqP8E5hJgf9OmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@napi-rs/canvas-darwin-arm64": { "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.70.tgz", - "integrity": "sha512-4pPGyXetHIHkw2TOJHujt3mkCP8LdDu8+CT15ld9Id39c752RcI0amDHSuMLMQfAjvusA9B5kKxazwjMGjEJpQ==", "cpu": [ "arm64" ], @@ -3677,156 +3295,18 @@ "node": ">= 10" } }, - "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.70.tgz", - "integrity": "sha512-+2N6Os9LbkmDMHL+raknrUcLQhsXzc5CSXRbXws9C3pv/mjHRVszQ9dhFUUe9FjfPhCJznO6USVdwOtu7pOrzQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.70.tgz", - "integrity": "sha512-QjscX9OaKq/990sVhSMj581xuqLgiaPVMjjYvWaCmAJRkNQ004QfoSMEm3FoTqM4DRoquP8jvuEXScVJsc1rqQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.70.tgz", - "integrity": "sha512-LNakMOwwqwiHIwMpnMAbFRczQMQ7TkkMyATqFCOtUJNlE6LPP/QiUj/mlFrNbUn/hctqShJ60gWEb52ZTALbVw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.70.tgz", - "integrity": "sha512-wBTOllEYNfJCHOdZj9v8gLzZ4oY3oyPX8MSRvaxPm/s7RfEXxCyZ8OhJ5xAyicsDdbE5YBZqdmaaeP5+xKxvtg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.70.tgz", - "integrity": "sha512-GVUUPC8TuuFqHip0rxHkUqArQnlzmlXmTEBuXAWdgCv85zTCFH8nOHk/YCF5yo0Z2eOm8nOi90aWs0leJ4OE5Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.70.tgz", - "integrity": "sha512-/kvUa2lZRwGNyfznSn5t1ShWJnr/m5acSlhTV3eXECafObjl0VBuA1HJw0QrilLpb4Fe0VLywkpD1NsMoVDROQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.70.tgz", - "integrity": "sha512-aqlv8MLpycoMKRmds7JWCfVwNf1fiZxaU7JwJs9/ExjTD8lX2KjsO7CTeAj5Cl4aEuzxUWbJPUUE2Qu9cZ1vfg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "0.1.70", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.70.tgz", - "integrity": "sha512-Q9QU3WIpwBTVHk4cPfBjGHGU4U0llQYRXgJtFtYqqGNEOKVN4OT6PQ+ve63xwIPODMpZ0HHyj/KLGc9CWc3EtQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, + "license": "MIT", "dependencies": { "eslint-scope": "5.1.1" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3837,18 +3317,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3859,8 +3337,6 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, @@ -3870,9 +3346,8 @@ }, "node_modules/@playwright/test": { "version": "1.38.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.1.tgz", - "integrity": "sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright": "1.38.1" }, @@ -3885,39 +3360,20 @@ }, "node_modules/@polka/url": { "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "dev": true, "license": "MIT" }, "node_modules/@popperjs/core": { "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/@rsbuild/plugin-check-syntax": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@rsbuild/plugin-check-syntax/-/plugin-check-syntax-1.3.0.tgz", - "integrity": "sha512-lHrd6hToPFVOGWr0U/Ox7pudHWdhPSFsr2riWpjNRlUuwiXdU2SYMROaVUCrLJvYFzJyEMsFOi1w59rBQCG2HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3938,8 +3394,6 @@ }, "node_modules/@rsbuild/plugin-check-syntax/node_modules/acorn": { "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -3951,8 +3405,6 @@ }, "node_modules/@rsbuild/plugin-check-syntax/node_modules/entities": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", - "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -3964,8 +3416,6 @@ }, "node_modules/@rsbuild/plugin-check-syntax/node_modules/htmlparser2": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -3984,8 +3434,6 @@ }, "node_modules/@rsbuild/plugin-check-syntax/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -3994,15 +3442,11 @@ }, "node_modules/@rsdoctor/client": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rsdoctor/client/-/client-1.1.2.tgz", - "integrity": "sha512-AHYShNzRhpThBiYVjecipEhvyJzkdjfICp7y4E149w2wucELTz2louQomUHEI+V7SMJmMCPlno3o/HDl23NRKA==", "dev": true, "license": "MIT" }, "node_modules/@rsdoctor/core": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rsdoctor/core/-/core-1.1.2.tgz", - "integrity": "sha512-/SylDcroagJXCM5/0gEvrrDIJWeXXMcJ8fx/Ckb6L5DuriyeHoOZmoQTlJaGSQJZdWH74/wAzGJ8aLHnF23P7w==", "dev": true, "license": "MIT", "dependencies": { @@ -4025,8 +3469,6 @@ }, "node_modules/@rsdoctor/core/node_modules/axios": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", - "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dev": true, "license": "MIT", "dependencies": { @@ -4037,8 +3479,6 @@ }, "node_modules/@rsdoctor/core/node_modules/enhanced-resolve": { "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4051,8 +3491,6 @@ }, "node_modules/@rsdoctor/core/node_modules/fs-extra": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -4066,8 +3504,6 @@ }, "node_modules/@rsdoctor/core/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4079,8 +3515,6 @@ }, "node_modules/@rsdoctor/core/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4089,8 +3523,6 @@ }, "node_modules/@rsdoctor/core/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -4099,8 +3531,6 @@ }, "node_modules/@rsdoctor/graph": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rsdoctor/graph/-/graph-1.1.2.tgz", - "integrity": "sha512-U6tOsDJjzy1Nb8Xb04zepNcwR+GfIXB/N76yWnuBx/Q07c1RuUJS/P0/YkEo7CfgLq4e9HujgDlzewhANqlRYw==", "dev": true, "license": "MIT", "dependencies": { @@ -4113,8 +3543,6 @@ }, "node_modules/@rsdoctor/graph/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4123,8 +3551,6 @@ }, "node_modules/@rsdoctor/sdk": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rsdoctor/sdk/-/sdk-1.1.2.tgz", - "integrity": "sha512-aplXFM/PXbFDYbFtZF+RTHGetDbQRnoS4BQfFE37BdsTBoCOP2AaG8Y6Jg5mrCn7D9JLmqugB+zJb/OxmXTHTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4148,8 +3574,6 @@ }, "node_modules/@rsdoctor/sdk/node_modules/fs-extra": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -4163,8 +3587,6 @@ }, "node_modules/@rsdoctor/sdk/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4176,8 +3598,6 @@ }, "node_modules/@rsdoctor/sdk/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4186,8 +3606,6 @@ }, "node_modules/@rsdoctor/sdk/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -4196,8 +3614,6 @@ }, "node_modules/@rsdoctor/types": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rsdoctor/types/-/types-1.1.2.tgz", - "integrity": "sha512-DtCDXP+vzoPcnjwqycwpMuTfrPtd2+u4r/LPVkMSTotfGQC0PczwvW2B6rXtiIfEWWy3prCwXfb2fkinMh7UHg==", "dev": true, "license": "MIT", "dependencies": { @@ -4221,15 +3637,11 @@ }, "node_modules/@rsdoctor/types/node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true, "license": "MIT" }, "node_modules/@rsdoctor/types/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -4238,8 +3650,6 @@ }, "node_modules/@rsdoctor/utils": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rsdoctor/utils/-/utils-1.1.2.tgz", - "integrity": "sha512-pGPSc3HKXgNP6whQqX8HBbzrSsEmOlq/PJ0z0EpNeXeYC09u3WL0LTvoNQN/p7FldK/fS/cifCuYn+a+rdrv6w==", "dev": true, "license": "MIT", "dependencies": { @@ -4264,15 +3674,11 @@ }, "node_modules/@rsdoctor/utils/node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true, "license": "MIT" }, "node_modules/@rsdoctor/utils/node_modules/acorn": { "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -4284,8 +3690,6 @@ }, "node_modules/@rsdoctor/utils/node_modules/acorn-import-attributes": { "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4294,8 +3698,6 @@ }, "node_modules/@rsdoctor/utils/node_modules/fs-extra": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -4309,8 +3711,6 @@ }, "node_modules/@rsdoctor/utils/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4322,8 +3722,6 @@ }, "node_modules/@rsdoctor/utils/node_modules/lines-and-columns": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true, "license": "MIT", "engines": { @@ -4332,8 +3730,6 @@ }, "node_modules/@rsdoctor/utils/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -4342,8 +3738,6 @@ }, "node_modules/@rsdoctor/webpack-plugin": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@rsdoctor/webpack-plugin/-/webpack-plugin-1.1.2.tgz", - "integrity": "sha512-6GjGbRJjxAEb6vIZ8nL8bNW+P6Oz/XWSh5vUoySOIrA2iCyB6v0FILCK3YS7zOqFN1Rnh1GmyQkOMkIL00mbPg==", "dev": true, "license": "MIT", "dependencies": { @@ -4361,8 +3755,6 @@ }, "node_modules/@rsdoctor/webpack-plugin/node_modules/fs-extra": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, "license": "MIT", "dependencies": { @@ -4376,8 +3768,6 @@ }, "node_modules/@rsdoctor/webpack-plugin/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4389,8 +3779,6 @@ }, "node_modules/@rsdoctor/webpack-plugin/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -4399,39 +3787,32 @@ }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", "dev": true, "license": "MIT" }, "node_modules/@studip/pdfjs-studip": { "version": "5.3.54", - "resolved": "https://registry.npmjs.org/@studip/pdfjs-studip/-/pdfjs-studip-5.3.54.tgz", - "integrity": "sha512-soIy9BcPjLrXWt67JUyO/PHbEFRcfp8+6xntI7OODyr8geNVU3MF2HsepIeTL+OmYU36Ay87XRLm/mE+KyBWNw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4443,27 +3824,24 @@ }, "node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@trysound/sax": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10.13.0" } }, "node_modules/@types/babel__core": { "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", - "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -4474,18 +3852,16 @@ }, "node_modules/@types/babel__generator": { "version": "7.6.5", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", - "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", - "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -4493,17 +3869,14 @@ }, "node_modules/@types/babel__traverse": { "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", - "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "license": "MIT", "dependencies": { @@ -4512,8 +3885,6 @@ }, "node_modules/@types/cors": { "version": "2.8.18", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.18.tgz", - "integrity": "sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==", "dev": true, "license": "MIT", "dependencies": { @@ -4522,8 +3893,6 @@ }, "node_modules/@types/eslint": { "version": "8.56.12", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", - "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", "dev": true, "license": "MIT", "dependencies": { @@ -4533,8 +3902,6 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", "dependencies": { @@ -4544,15 +3911,11 @@ }, "node_modules/@types/estree": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "license": "MIT" }, "node_modules/@types/fs-extra": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4562,9 +3925,8 @@ }, "node_modules/@types/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimatch": "*", "@types/node": "*" @@ -4572,60 +3934,53 @@ }, "node_modules/@types/graceful-fs": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", - "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jquery": { "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.22.tgz", - "integrity": "sha512-ISQFeUK5GwRftLK4PVvKTWEVCxZ2BpaqBz0TWkIq5w4vGojxZP9+XkqgcPjxoqmPeew+HLyWthCBvK7GdF5NYA==", "dev": true, + "license": "MIT", "dependencies": { "@types/sizzle": "*" } }, "node_modules/@types/jqueryui": { "version": "1.12.18", - "resolved": "https://registry.npmjs.org/@types/jqueryui/-/jqueryui-1.12.18.tgz", - "integrity": "sha512-crlmH8kFzIiU+4aBFgvYUjykSaOTP5RDw7NqkFkcSNWFAF/SMPrr7sY1uNXDEhite/2pEwUoZlufQoy87A22LA==", "dev": true, + "license": "MIT", "dependencies": { "@types/jquery": "*" } }, "node_modules/@types/jsdom": { "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/tough-cookie": "*", @@ -4634,14 +3989,11 @@ }, "node_modules/@types/json-schema": { "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/jsonfile": { "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4650,66 +4002,52 @@ }, "node_modules/@types/lodash": { "version": "4.14.199", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", - "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimatch": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/parse5": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", "dev": true, "license": "MIT" }, "node_modules/@types/raf": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@types/sizzle": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/stack-utils": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/tapable": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-2.2.7.tgz", - "integrity": "sha512-D6QzACV9vNX3r8HQQNTOnpG+Bv1rko+yEA82wKs3O9CQ5+XW7HI7TED17/UE7+5dIxyxZIWTxKbsBeF6uKFCwA==", "dev": true, "license": "MIT", "dependencies": { @@ -4718,29 +4056,24 @@ }, "node_modules/@types/tough-cookie": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -4773,8 +4106,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4802,8 +4133,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "license": "MIT", "dependencies": { @@ -4820,8 +4149,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "license": "MIT", "dependencies": { @@ -4848,8 +4175,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, "license": "MIT", "engines": { @@ -4862,8 +4187,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -4891,8 +4214,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -4901,8 +4222,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -4917,8 +4236,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "license": "MIT", "dependencies": { @@ -4940,8 +4257,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "license": "MIT", "dependencies": { @@ -4958,8 +4273,6 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4971,15 +4284,11 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true, "license": "ISC" }, "node_modules/@vojtechlanka/vue-tags-input": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@vojtechlanka/vue-tags-input/-/vue-tags-input-3.1.1.tgz", - "integrity": "sha512-GdREECH+k2pQCKdbHHh4/IxRXje3QQ8rXzXd9/6L1kzGYXqHlG1tbRoi1qC7enph67/g2nvGaZfpqLuuW+CX3g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -4992,8 +4301,6 @@ }, "node_modules/@vue/compiler-core": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", @@ -5005,8 +4312,6 @@ }, "node_modules/@vue/compiler-dom": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", "license": "MIT", "dependencies": { "@vue/compiler-core": "3.5.13", @@ -5015,8 +4320,6 @@ }, "node_modules/@vue/compiler-sfc": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", @@ -5032,8 +4335,6 @@ }, "node_modules/@vue/compiler-ssr": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.5.13", @@ -5042,15 +4343,11 @@ }, "node_modules/@vue/devtools-api": { "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", "dev": true, "license": "MIT" }, "node_modules/@vue/eslint-config-typescript": { "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", - "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", "dev": true, "license": "MIT", "dependencies": { @@ -5074,8 +4371,6 @@ }, "node_modules/@vue/reactivity": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", "license": "MIT", "dependencies": { "@vue/shared": "3.5.13" @@ -5083,8 +4378,6 @@ }, "node_modules/@vue/runtime-core": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", "license": "MIT", "dependencies": { "@vue/reactivity": "3.5.13", @@ -5093,8 +4386,6 @@ }, "node_modules/@vue/runtime-dom": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", "license": "MIT", "dependencies": { "@vue/reactivity": "3.5.13", @@ -5105,8 +4396,6 @@ }, "node_modules/@vue/server-renderer": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", "license": "MIT", "dependencies": { "@vue/compiler-ssr": "3.5.13", @@ -5118,14 +4407,10 @@ }, "node_modules/@vue/shared": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", "license": "MIT" }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5135,29 +4420,21 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", "dependencies": { @@ -5168,15 +4445,11 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -5188,8 +4461,6 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", "dependencies": { @@ -5198,8 +4469,6 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5208,15 +4477,11 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5232,8 +4497,6 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", "dependencies": { @@ -5246,8 +4509,6 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -5259,8 +4520,6 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5274,8 +4533,6 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", "dependencies": { @@ -5285,8 +4542,6 @@ }, "node_modules/@webpack-cli/configtest": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, "license": "MIT", "engines": { @@ -5299,8 +4554,6 @@ }, "node_modules/@webpack-cli/info": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, "license": "MIT", "engines": { @@ -5313,8 +4566,6 @@ }, "node_modules/@webpack-cli/serve": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, "license": "MIT", "engines": { @@ -5332,28 +4583,21 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/abab": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", "dependencies": { @@ -5366,9 +4610,8 @@ }, "node_modules/acorn": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -5378,9 +4621,8 @@ }, "node_modules/acorn-class-fields": { "version": "0.3.7", - "resolved": "https://registry.npmjs.org/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz", - "integrity": "sha512-jdUWSFce0fuADUljmExz4TWpPkxmRW/ZCPRqeeUzbGf0vFUcpQYbyq52l75qGd0oSwwtAepeL6hgb/naRgvcKQ==", "dev": true, + "license": "MIT", "dependencies": { "acorn-private-class-elements": "^0.2.7" }, @@ -5393,9 +4635,8 @@ }, "node_modules/acorn-globals": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.1.0", "acorn-walk": "^8.0.2" @@ -5403,9 +4644,8 @@ }, "node_modules/acorn-globals/node_modules/acorn": { "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -5415,18 +4655,16 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-private-class-elements": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/acorn-private-class-elements/-/acorn-private-class-elements-0.2.7.tgz", - "integrity": "sha512-+GZH2wOKNZOBI4OOPmzpo4cs6mW297sn6fgIk1dUI08jGjhAaEwvC39mN2gJAg2lmAQJ1rBkFqKWonL3Zz6PVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.8.2" }, @@ -5436,9 +4674,8 @@ }, "node_modules/acorn-private-methods": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/acorn-private-methods/-/acorn-private-methods-0.3.3.tgz", - "integrity": "sha512-46oeEol3YFvLSah5m9hGMlNpxDBCEkdceJgf01AjqKYTK9r6HexKs2rgSbLK81pYjZZMonhftuUReGMlbbv05w==", "dev": true, + "license": "MIT", "dependencies": { "acorn-private-class-elements": "^0.2.7" }, @@ -5451,9 +4688,8 @@ }, "node_modules/acorn-stage3": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-stage3/-/acorn-stage3-4.0.0.tgz", - "integrity": "sha512-BR+LaADtA6GTB5prkNqWmlmCLYmkyW0whvSxdHhbupTaro2qBJ95fJDEiRLPUmiACGHPaYyeH9xmNJWdGfXRQw==", "dev": true, + "license": "MIT", "dependencies": { "acorn-class-fields": "^0.3.7", "acorn-private-methods": "^0.3.3", @@ -5468,9 +4704,8 @@ }, "node_modules/acorn-static-class-features": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/acorn-static-class-features/-/acorn-static-class-features-0.2.4.tgz", - "integrity": "sha512-5X4mpYq5J3pdndLmIB0+WtFd/mKWnNYpuTlTzj32wUu/PMmEGOiayQ5UrqgwdBNiaZBtDDh5kddpP7Yg2QaQYA==", "dev": true, + "license": "MIT", "dependencies": { "acorn-private-class-elements": "^0.2.7" }, @@ -5483,8 +4718,6 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { @@ -5496,8 +4729,6 @@ }, "node_modules/acorn-walk/node_modules/acorn": { "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -5509,9 +4740,8 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -5521,9 +4751,8 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5537,9 +4766,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -5554,9 +4782,8 @@ }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -5570,23 +4797,19 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/altcha": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/altcha/-/altcha-1.4.2.tgz", - "integrity": "sha512-7UcWh4tHWqP5YHo+jC8vmm+sThYUi1R9qXsiiXtmdoOiimfA0LCLccSKqYSoDmYvqq+CBV79WpQVWafKQCKHmw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5599,9 +4822,8 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -5614,17 +4836,14 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -5639,8 +4858,6 @@ }, "node_modules/ansi-styles/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5652,9 +4869,8 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5665,23 +4881,19 @@ }, "node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/argparse/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/array-back": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, "license": "MIT", "engines": { @@ -5690,17 +4902,14 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -5709,23 +4918,18 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/assert-never": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", "dev": true, "license": "MIT", "optional": true }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "license": "MIT", "engines": { @@ -5734,15 +4938,13 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/atob": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, + "license": "(MIT OR Apache-2.0)", "bin": { "atob": "bin/atob.js" }, @@ -5752,8 +4954,6 @@ }, "node_modules/autoprefixer": { "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "dev": true, "funding": [ { @@ -5790,27 +4990,24 @@ }, "node_modules/axe-core": { "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axios": { "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.14.0" } }, "node_modules/babel-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -5829,8 +5026,6 @@ }, "node_modules/babel-loader": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", - "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", "dev": true, "license": "MIT", "dependencies": { @@ -5846,8 +5041,6 @@ }, "node_modules/babel-loader/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -5863,8 +5056,6 @@ }, "node_modules/babel-loader/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -5879,8 +5070,6 @@ }, "node_modules/babel-loader/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -5895,9 +5084,8 @@ }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -5911,9 +5099,8 @@ }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -5927,18 +5114,16 @@ }, "node_modules/babel-plugin-istanbul/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -5951,8 +5136,6 @@ }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", "dev": true, "license": "MIT", "dependencies": { @@ -5966,8 +5149,6 @@ }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -5976,8 +5157,6 @@ }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5990,8 +5169,6 @@ }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6003,9 +5180,8 @@ }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -6026,9 +5202,8 @@ }, "node_modules/babel-preset-jest": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -6042,8 +5217,6 @@ }, "node_modules/babel-walk": { "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", "dev": true, "license": "MIT", "optional": true, @@ -6056,15 +5229,13 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-arraybuffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 0.6.0" @@ -6072,8 +5243,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -6088,12 +5257,11 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/base64id": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true, "license": "MIT", "engines": { @@ -6102,34 +5270,30 @@ }, "node_modules/big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/blueimp-canvas-to-blob": { "version": "3.29.0", - "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz", - "integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/blueimp-file-upload": { "version": "10.31.0", - "resolved": "https://registry.npmjs.org/blueimp-file-upload/-/blueimp-file-upload-10.31.0.tgz", - "integrity": "sha512-dGAxOf9+SsMDvZPTsIUpe0cOk57taMJYE3FocHEUebhn5BnDbu1hcWOmrP8oswIe6V61Qcm9UDuhq/Pv1t/eRw==", "dev": true, + "license": "MIT", "optionalDependencies": { "blueimp-canvas-to-blob": "3", "blueimp-load-image": "5", @@ -6141,16 +5305,14 @@ }, "node_modules/blueimp-load-image": { "version": "5.16.0", - "resolved": "https://registry.npmjs.org/blueimp-load-image/-/blueimp-load-image-5.16.0.tgz", - "integrity": "sha512-3DUSVdOtlfNRk7moRZuTwDmA3NnG8KIJuLcq3c0J7/BIr6X3Vb/EpX3kUH1joxUhmoVF4uCpDfz7wHkz8pQajA==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/blueimp-tmpl": { "version": "3.20.0", - "resolved": "https://registry.npmjs.org/blueimp-tmpl/-/blueimp-tmpl-3.20.0.tgz", - "integrity": "sha512-g6ln9L+VX8ZA4WA8mgKMethYH+5teroJ2uOkCvcthy9Y9d9LrQ42OAMn+r3ECKu9CB+xe9GOChlIUJBSxwkI6g==", "dev": true, + "license": "MIT", "optional": true, "bin": { "tmpl.js": "js/compile.js" @@ -6158,14 +5320,11 @@ }, "node_modules/blurhash": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", - "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "license": "MIT", "dependencies": { @@ -6189,8 +5348,6 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -6199,8 +5356,6 @@ }, "node_modules/body-parser/node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { @@ -6212,22 +5367,18 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6235,8 +5386,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -6248,8 +5397,6 @@ }, "node_modules/browserslist": { "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "funding": [ { @@ -6281,15 +5428,11 @@ }, "node_modules/browserslist-load-config": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserslist-load-config/-/browserslist-load-config-1.0.0.tgz", - "integrity": "sha512-jj4xzExS1hRVMUIFQSkW4l3KPni5JRxnKfYfRpirooK5S4CjY31PhqfEjCB/mfqgCxkZIxc9rcu0pyXlEpYp/Q==", "dev": true, "license": "MIT" }, "node_modules/browserslist-to-es-version": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserslist-to-es-version/-/browserslist-to-es-version-1.0.0.tgz", - "integrity": "sha512-i6dR03ClGy9ti97FSa4s0dpv01zW/t5VbvGjFfTLsrRQFsPgSeyGkCrlU7BTJuI5XDHVY5S2JgDnDsvQXifJ8w==", "dev": true, "license": "MIT", "dependencies": { @@ -6298,18 +5441,16 @@ }, "node_modules/bser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/btoa": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", "dev": true, + "license": "(MIT OR Apache-2.0)", "bin": { "btoa": "bin/btoa.js" }, @@ -6319,8 +5460,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -6336,6 +5475,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -6343,20 +5483,16 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buntis": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/buntis/-/buntis-0.2.1.tgz", - "integrity": "sha512-5wszfQlsqJmZrfxpPkO5yQcEoBAmfUYlXxXU/IM6PhPZ8DMnMMJQ9rvAHfe5WZmnB6E1IoJYylFfTaf1e2FJbQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", "engines": { @@ -6365,8 +5501,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, "dependencies": { "es-errors": "^1.3.0", @@ -6378,8 +5512,6 @@ }, "node_modules/call-bound": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -6394,26 +5526,22 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase-keys": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, "license": "MIT", "dependencies": { @@ -6431,8 +5559,6 @@ }, "node_modules/camelcase-keys/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -6444,8 +5570,6 @@ }, "node_modules/camelcase-keys/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6457,9 +5581,8 @@ }, "node_modules/caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -6469,8 +5592,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001688", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001688.tgz", - "integrity": "sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==", "dev": true, "funding": [ { @@ -6485,12 +5606,11 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/canvg": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", - "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", "dev": true, "license": "MIT", "optional": true, @@ -6510,8 +5630,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { @@ -6527,8 +5645,6 @@ }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -6540,18 +5656,16 @@ }, "node_modules/char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/character-parser": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-regex": "^1.0.3" @@ -6559,18 +5673,16 @@ }, "node_modules/charenc": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/chart.js": { "version": "2.9.4", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", - "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", "dev": true, + "license": "MIT", "dependencies": { "chartjs-color": "^2.1.0", "moment": "^2.10.2" @@ -6578,18 +5690,16 @@ }, "node_modules/chartist": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/chartist/-/chartist-0.11.4.tgz", - "integrity": "sha512-H4AimxaUD738/u9Mq8t27J4lh6STsLi4BQHt65nOtpLk3xyrBPaLiLMrHw7/WV9CmsjGA02WihjuL5qpSagLYw==", "dev": true, + "license": "MIT OR WTFPL", "engines": { "node": ">=4.6.0" } }, "node_modules/chartjs-color": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", - "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", "dev": true, + "license": "MIT", "dependencies": { "chartjs-color-string": "^0.6.0", "color-convert": "^1.9.3" @@ -6597,18 +5707,16 @@ }, "node_modules/chartjs-color-string": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", - "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "^1.0.0" } }, "node_modules/cheerio": { "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "dev": true, + "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -6627,9 +5735,8 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -6644,8 +5751,6 @@ }, "node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -6653,6 +5758,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -6671,17 +5777,14 @@ }, "node_modules/chrome-trace-event": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true, "funding": [ { @@ -6689,20 +5792,18 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ckeditor5": { "version": "43.2.0", - "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-43.2.0.tgz", - "integrity": "sha512-wtW2TICJiXoOPK2K4L1oiO+HWBS6ifVQW2k80DoQI7cDranUC0FKMNirYZZXNdK0SYH87RSLZR8hHAAdbbOPBA==", "dev": true, "license": "GPL-2.0-or-later", "dependencies": { @@ -6767,9 +5868,8 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -6781,9 +5881,8 @@ }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -6795,9 +5894,8 @@ }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -6805,63 +5903,54 @@ }, "node_modules/collect-v8-coverage": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-convert/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-parse": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", - "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "^1.0.0" } }, "node_modules/colord": { "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colorpare": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/colorpare/-/colorpare-2.2.0.tgz", - "integrity": "sha512-GVtxzF1YKkeoKgYa2PBOOS6reC/D1qewhv9se+8Nkh0zfY/JNaIuc2OdORLP8p+4GP7Z9IDYrkjz9XUak6imxQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -6871,8 +5960,6 @@ }, "node_modules/command-line-args": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "license": "MIT", "dependencies": { @@ -6887,29 +5974,24 @@ }, "node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/connect": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6924,8 +6006,6 @@ }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -6934,16 +6014,13 @@ }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/constantinople": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@babel/parser": "^7.6.0", @@ -6952,8 +6029,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", "engines": { @@ -6962,8 +6037,6 @@ }, "node_modules/cookie": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", "engines": { @@ -6972,8 +6045,6 @@ }, "node_modules/copy-webpack-plugin": { "version": "13.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.0.tgz", - "integrity": "sha512-FgR/h5a6hzJqATDGd9YG41SeDViH+0bkHn6WNXCi5zKAZkeESeSxLySSsFLHqLEVCh0E+rITmCf0dusXWYukeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7009,10 +6080,9 @@ }, "node_modules/core-js": { "version": "3.31.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", - "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "funding": { "type": "opencollective", @@ -7021,8 +6091,6 @@ }, "node_modules/core-js-compat": { "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", - "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", "dev": true, "license": "MIT", "dependencies": { @@ -7035,14 +6103,11 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "license": "MIT", "dependencies": { @@ -7055,9 +6120,8 @@ }, "node_modules/create-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -7076,14 +6140,11 @@ }, "node_modules/cropperjs": { "version": "1.5.9", - "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.9.tgz", - "integrity": "sha512-aPWlg43sLIcYN4GBXIdyvM09wNPgn1ug+vNVwV8jlb3dbgEX/B34Iw6hrjGSajkUDQBmaCi6uPOevFb7N0yUsw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -7097,18 +6158,16 @@ }, "node_modules/crypt": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/css-declaration-sorter": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "dev": true, + "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" }, @@ -7118,8 +6177,6 @@ }, "node_modules/css-functions-list": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", - "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", "dev": true, "license": "MIT", "engines": { @@ -7128,9 +6185,8 @@ }, "node_modules/css-line-break": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", - "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "utrie": "^1.0.2" @@ -7138,8 +6194,6 @@ }, "node_modules/css-loader": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, "license": "MIT", "dependencies": { @@ -7174,8 +6228,6 @@ }, "node_modules/css-minimizer-webpack-plugin": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.0.tgz", - "integrity": "sha512-niy66jxsQHqO+EYbhPuIhqRQ1mNcNVUHrMnkzzir9kFOERJUaQDDRhh7dKDz33kBpkWMF9M8Vx0QlDbc5AHOsw==", "dev": true, "license": "MIT", "dependencies": { @@ -7219,8 +6271,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/cssnano": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", - "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", "dev": true, "license": "MIT", "dependencies": { @@ -7240,8 +6290,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/cssnano-preset-default": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", - "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7285,8 +6333,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/cssnano-utils": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", - "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", "dev": true, "license": "MIT", "engines": { @@ -7298,8 +6344,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { @@ -7314,8 +6358,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-calc": { "version": "10.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", - "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", "dev": true, "license": "MIT", "dependencies": { @@ -7331,8 +6373,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-colormin": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", - "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", "dev": true, "license": "MIT", "dependencies": { @@ -7350,8 +6390,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-convert-values": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", - "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7367,8 +6405,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-discard-comments": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", - "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", "dev": true, "license": "MIT", "dependencies": { @@ -7383,8 +6419,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-discard-duplicates": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", - "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", "dev": true, "license": "MIT", "engines": { @@ -7396,8 +6430,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-discard-empty": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", - "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", "dev": true, "license": "MIT", "engines": { @@ -7409,8 +6441,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-discard-overridden": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", - "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", "dev": true, "license": "MIT", "engines": { @@ -7422,8 +6452,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-merge-longhand": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", - "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", "dev": true, "license": "MIT", "dependencies": { @@ -7439,8 +6467,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-merge-rules": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", - "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", "dev": true, "license": "MIT", "dependencies": { @@ -7458,8 +6484,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-minify-font-values": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", - "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", "dev": true, "license": "MIT", "dependencies": { @@ -7474,8 +6498,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-minify-gradients": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", - "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", "dev": true, "license": "MIT", "dependencies": { @@ -7492,8 +6514,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-minify-params": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", - "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7510,8 +6530,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-minify-selectors": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", - "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", "dev": true, "license": "MIT", "dependencies": { @@ -7527,8 +6545,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-charset": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", - "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", "dev": true, "license": "MIT", "engines": { @@ -7540,8 +6556,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-display-values": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", - "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7556,8 +6570,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-positions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", - "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7572,8 +6584,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-repeat-style": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", - "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", "dev": true, "license": "MIT", "dependencies": { @@ -7588,8 +6598,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-string": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", - "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", "dev": true, "license": "MIT", "dependencies": { @@ -7604,8 +6612,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-timing-functions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", - "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", "dev": true, "license": "MIT", "dependencies": { @@ -7620,8 +6626,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-unicode": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", - "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", "dev": true, "license": "MIT", "dependencies": { @@ -7637,8 +6641,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-url": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", - "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7653,8 +6655,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-normalize-whitespace": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", - "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7669,8 +6669,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-ordered-values": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", - "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", "dev": true, "license": "MIT", "dependencies": { @@ -7686,8 +6684,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-reduce-initial": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", - "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", "dev": true, "license": "MIT", "dependencies": { @@ -7703,8 +6699,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-reduce-transforms": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", - "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", "dev": true, "license": "MIT", "dependencies": { @@ -7719,8 +6713,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-svgo": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", - "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", "dev": true, "license": "MIT", "dependencies": { @@ -7736,8 +6728,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/postcss-unique-selectors": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", - "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", "dev": true, "license": "MIT", "dependencies": { @@ -7752,8 +6742,6 @@ }, "node_modules/css-minimizer-webpack-plugin/node_modules/stylehacks": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", - "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", "dev": true, "license": "MIT", "dependencies": { @@ -7769,9 +6757,8 @@ }, "node_modules/css-select": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -7785,16 +6772,13 @@ }, "node_modules/css-selector-parser": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", - "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", "dev": true, "license": "MIT" }, "node_modules/css-what": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -7804,9 +6788,8 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -7816,15 +6799,13 @@ }, "node_modules/cssom": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cssstyle": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, + "license": "MIT", "dependencies": { "cssom": "~0.3.6" }, @@ -7834,21 +6815,17 @@ }, "node_modules/cssstyle/node_modules/cssom": { "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/csstype": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, "node_modules/data-urls": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", @@ -7860,23 +6837,18 @@ }, "node_modules/dayjs": { "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "dev": true, "license": "MIT" }, "node_modules/debounce": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true, "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -7891,8 +6863,6 @@ }, "node_modules/decamelize": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true, "license": "MIT", "engines": { @@ -7904,8 +6874,6 @@ }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -7921,8 +6889,6 @@ }, "node_modules/decamelize-keys/node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -7931,8 +6897,6 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { @@ -7941,15 +6905,13 @@ }, "node_modules/decimal.js": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dedent": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -7961,8 +6923,6 @@ }, "node_modules/deep-eql": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "license": "MIT", "dependencies": { @@ -7974,23 +6934,19 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "license": "MIT", "engines": { @@ -7999,17 +6955,14 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "license": "MIT", "engines": { @@ -8018,8 +6971,6 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "license": "MIT", "engines": { @@ -8029,27 +6980,24 @@ }, "node_modules/detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/diff-sequences": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -8059,9 +7007,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -8071,17 +7018,14 @@ }, "node_modules/doctypes": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", "dev": true, "license": "MIT", "optional": true }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -8093,21 +7037,19 @@ }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domexception": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "dev": true, + "license": "MIT", "dependencies": { "webidl-conversions": "^7.0.0" }, @@ -8117,9 +7059,8 @@ }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -8132,24 +7073,17 @@ }, "node_modules/dommatrix": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz", - "integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==", - "deprecated": "dommatrix is no longer maintained. Please use @thednp/dommatrix.", "dev": true, "license": "MIT" }, "node_modules/dompurify": { "version": "2.5.8", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.8.tgz", - "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==", "dev": true, "license": "(MPL-2.0 OR Apache-2.0)", "optional": true }, "node_modules/domutils": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8163,9 +7097,8 @@ }, "node_modules/dotenv": { "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -8175,8 +7108,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -8189,23 +7120,18 @@ }, "node_modules/duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true, "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/easygettext": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/easygettext/-/easygettext-2.17.0.tgz", - "integrity": "sha512-QmMWIu6l83SW2QuEFd4GIDrTey0qOn0haTOMt4NdPKPHEBihAqdo9HHYRDHiPg/msZSKaye7qDOLAcqHlmfo+g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "acorn": "^7.4.0", @@ -8232,23 +7158,18 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.141", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.141.tgz", - "integrity": "sha512-qS+qH9oqVYc1ooubTiB9l904WVyM6qNYxtOEEGReoZXw3xlqeYdFr5GclNzbkAufWgwWLEPoDi3d9MoRwwIjGw==", "dev": true, "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -8258,23 +7179,19 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "license": "MIT", "engines": { @@ -8283,8 +7200,6 @@ }, "node_modules/engine.io": { "version": "6.6.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", - "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", "dev": true, "license": "MIT", "dependencies": { @@ -8304,8 +7219,6 @@ }, "node_modules/engine.io-parser": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true, "license": "MIT", "engines": { @@ -8314,8 +7227,6 @@ }, "node_modules/engine.io/node_modules/ws": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "license": "MIT", "engines": { @@ -8336,8 +7247,6 @@ }, "node_modules/enhanced-resolve": { "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "license": "MIT", "dependencies": { @@ -8350,8 +7259,7 @@ }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -8361,8 +7269,6 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { @@ -8371,8 +7277,6 @@ }, "node_modules/envinfo": { "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, "license": "MIT", "bin": { @@ -8384,17 +7288,14 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "engines": { "node": ">= 0.4" @@ -8402,8 +7303,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "engines": { "node": ">= 0.4" @@ -8411,14 +7310,11 @@ }, "node_modules/es-module-lexer": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "dependencies": { "es-errors": "^1.3.0" @@ -8429,14 +7325,11 @@ }, "node_modules/es6-promise": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -8445,15 +7338,11 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -8465,9 +7354,8 @@ }, "node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -8486,17 +7374,14 @@ }, "node_modules/escodegen/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/eslint": { "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -8551,8 +7436,6 @@ }, "node_modules/eslint-formatter-gitlab": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-gitlab/-/eslint-formatter-gitlab-5.1.0.tgz", - "integrity": "sha512-IxhrjLYzDlbFgPWEnvZlWLwPjMeyymbyo0hDHWntZ3DSAP9AP9huj15KbU+BK3OqeO3OHhbFEh2TA6sR0KZhkA==", "dev": true, "license": "MIT", "dependencies": { @@ -8568,8 +7451,6 @@ }, "node_modules/eslint-formatter-gitlab/node_modules/yaml": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "dev": true, "license": "ISC", "bin": { @@ -8581,8 +7462,6 @@ }, "node_modules/eslint-plugin-vue": { "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz", - "integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==", "dev": true, "license": "MIT", "dependencies": { @@ -8604,8 +7483,6 @@ }, "node_modules/eslint-plugin-vue/node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8620,8 +7497,6 @@ }, "node_modules/eslint-plugin-vue/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -8633,9 +7508,8 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -8646,17 +7520,14 @@ }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-webpack-plugin": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA==", "dev": true, "license": "MIT", "dependencies": { @@ -8680,8 +7551,6 @@ }, "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { @@ -8696,8 +7565,6 @@ }, "node_modules/eslint/node_modules/@eslint/js": { "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", "engines": { @@ -8706,15 +7573,11 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8730,8 +7593,6 @@ }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -8743,8 +7604,6 @@ }, "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -8753,8 +7612,6 @@ }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -8770,8 +7627,6 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -8783,9 +7638,8 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -8798,8 +7652,6 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -8811,8 +7663,6 @@ }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -8827,8 +7677,6 @@ }, "node_modules/eslint/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -8843,9 +7691,8 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -8855,8 +7702,6 @@ }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8873,8 +7718,6 @@ }, "node_modules/espree/node_modules/acorn": { "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "license": "MIT", "bin": { @@ -8886,8 +7729,6 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -8899,9 +7740,8 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -8912,9 +7752,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -8924,18 +7763,16 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -8945,50 +7782,44 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -9009,8 +7840,6 @@ }, "node_modules/exit": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -9018,9 +7847,8 @@ }, "node_modules/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -9034,8 +7862,6 @@ }, "node_modules/expose-loader": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-5.0.0.tgz", - "integrity": "sha512-BtUqYRmvx1bEY5HN6eK2I9URUZgNmN0x5UANuocaNjXSgfoDlkXt+wyEMe7i5DzDNh2BKJHPc5F4rBwEdSQX6w==", "dev": true, "license": "MIT", "engines": { @@ -9051,13 +7877,10 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "license": "MIT", "dependencies": { @@ -9073,68 +7896,57 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-uri": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } }, "node_modules/fastq": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/favico.js": { "version": "0.3.10", - "resolved": "https://registry.npmjs.org/favico.js/-/favico.js-0.3.10.tgz", - "integrity": "sha512-S5KvqAOczRjlyjQPPZPSlUEybBkfBgKosY/pzTIxkvKgigB+DkITvIEI70dxQarbv4PZ+UD77QzquCAcU/6LHQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fb-watchman": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fflate": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", "dev": true, "license": "MIT" }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -9144,14 +7956,11 @@ }, "node_modules/file-saver": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/filesize": { "version": "10.1.6", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", - "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -9160,8 +7969,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -9173,8 +7980,6 @@ }, "node_modules/finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "license": "MIT", "dependencies": { @@ -9192,8 +7997,6 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -9202,15 +8005,11 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/finalhandler/node_modules/on-finished": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "license": "MIT", "dependencies": { @@ -9222,9 +8021,8 @@ }, "node_modules/find-cache-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -9236,8 +8034,6 @@ }, "node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9249,9 +8045,8 @@ }, "node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -9262,8 +8057,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "license": "BSD-3-Clause", "bin": { @@ -9272,8 +8065,6 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", "dependencies": { @@ -9287,25 +8078,21 @@ }, "node_modules/flatted": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, "node_modules/flow-parser": { "version": "0.211.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.211.0.tgz", - "integrity": "sha512-Ftqkqisn4MA8u+1I7KGYz35y/RtLsRETsK4qrH6KkDUjxnC4mgq3CcXbckHpGyfTErqMyVhJnlJ56feEn9Cn7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/flow-remove-types": { "version": "2.211.0", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.211.0.tgz", - "integrity": "sha512-R5NA46R8/2UTbRnl2vwcZk1MyASKh60sXUM/ekMBgu/lIgAhMCQo8PMpqNEAe/Wn2Sr0siourTb8dbW/6e9aPA==", "dev": true, + "license": "MIT", "dependencies": { "flow-parser": "^0.211.0", "pirates": "^3.0.2", @@ -9321,9 +8108,8 @@ }, "node_modules/flow-remove-types/node_modules/pirates": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", - "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", "dev": true, + "license": "MIT", "dependencies": { "node-modules-regexp": "^1.0.0" }, @@ -9333,8 +8119,6 @@ }, "node_modules/focus-trap": { "version": "7.6.2", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.2.tgz", - "integrity": "sha512-9FhUxK1hVju2+AiQIDJ5Dd//9R2n2RAfJ0qfhF4IHGHgcoEUTMpbTeG/zbEuwaiYXfuAH6XE0/aCyxDdRM+W5w==", "dev": true, "license": "MIT", "dependencies": { @@ -9343,8 +8127,6 @@ }, "node_modules/focus-trap-vue": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/focus-trap-vue/-/focus-trap-vue-4.0.3.tgz", - "integrity": "sha512-cIX5rybkCAlNZ4IHYJ3nCFIsipDDljJHHjtTO2IgYWkVYg7X9ipUVdab3HzYp88kmHgMwjcB71LYnXRRsF6ZqQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -9354,8 +8136,6 @@ }, "node_modules/follow-redirects": { "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -9375,8 +8155,6 @@ }, "node_modules/foreground-child": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, "license": "ISC", "dependencies": { @@ -9392,8 +8170,6 @@ }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -9405,9 +8181,8 @@ }, "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -9419,8 +8194,6 @@ }, "node_modules/fraction.js": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "license": "MIT", "engines": { @@ -9433,9 +8206,8 @@ }, "node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -9447,16 +8219,13 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -9467,35 +8236,30 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -9518,17 +8282,14 @@ }, "node_modules/get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/get-port": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, "license": "MIT", "engines": { @@ -9540,8 +8301,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "dependencies": { "dunder-proto": "^1.0.1", @@ -9553,9 +8312,8 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9565,8 +8323,6 @@ }, "node_modules/gettext-extractor": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/gettext-extractor/-/gettext-extractor-3.8.0.tgz", - "integrity": "sha512-i/3mDQufQoJd2/EKm/B+VlaYrt3yGjVfLZu8DQpESKH29klNiW6z2S89FVCIEB85bDNgtGCeM/3A/yR1njr/Lw==", "dev": true, "license": "MIT", "dependencies": { @@ -9584,22 +8340,17 @@ }, "node_modules/gettext-extractor/node_modules/parse5": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true, "license": "MIT" }, "node_modules/gettext-extractor/node_modules/pofile": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.0.11.tgz", - "integrity": "sha512-Vy9eH1dRD9wHjYt/QqXcTz+RnX/zg53xK+KljFSX30PvdDMb2z+c6uDUeblUGqqJgz3QFsdlA0IJvHziPmWtQg==", "dev": true }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9617,9 +8368,8 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -9629,14 +8379,11 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/global-modules": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "license": "MIT", "dependencies": { @@ -9648,8 +8395,6 @@ }, "node_modules/global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "license": "MIT", "dependencies": { @@ -9663,8 +8408,6 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9676,8 +8419,6 @@ }, "node_modules/globals": { "version": "15.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.13.0.tgz", - "integrity": "sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==", "dev": true, "license": "MIT", "engines": { @@ -9689,8 +8430,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -9710,15 +8449,11 @@ }, "node_modules/globjoin": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true, "license": "MIT" }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "engines": { "node": ">= 0.4" @@ -9729,27 +8464,21 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/growly": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gzip-size": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9764,8 +8493,6 @@ }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { @@ -9774,9 +8501,8 @@ }, "node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -9786,8 +8512,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -9796,8 +8520,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "engines": { "node": ">= 0.4" @@ -9808,9 +8530,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "has-symbols": "^1.0.3" @@ -9824,15 +8545,11 @@ }, "node_modules/hash-sum": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", "dev": true, "license": "MIT" }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -9843,17 +8560,14 @@ }, "node_modules/highlight.js": { "version": "10.5.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.5.0.tgz", - "integrity": "sha512-xTmvd9HiIHR6L53TMC7TKolEj65zG1XU+Onr8oi86mYa+nLcIbxTTWkpW7CsEwv/vK7u1zb8alZIMLDqqN6KTw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -9865,8 +8579,6 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -9878,16 +8590,13 @@ }, "node_modules/hosted-git-info/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" }, @@ -9897,14 +8606,11 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/html-tags": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "license": "MIT", "engines": { @@ -9916,9 +8622,8 @@ }, "node_modules/html2canvas": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", - "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "css-line-break": "^2.1.0", @@ -9930,8 +8635,6 @@ }, "node_modules/htmlparser2": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -9940,6 +8643,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -9949,8 +8653,6 @@ }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9966,8 +8668,6 @@ }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "license": "MIT", "engines": { @@ -9976,9 +8676,8 @@ }, "node_modules/http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -9990,9 +8689,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -10003,18 +8701,16 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -10024,9 +8720,8 @@ }, "node_modules/icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -10036,8 +8731,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -10052,12 +8745,11 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -10066,21 +8758,18 @@ }, "node_modules/immediate": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/immutable": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -10094,8 +8783,6 @@ }, "node_modules/import-lazy": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, "license": "MIT", "engines": { @@ -10104,9 +8791,8 @@ }, "node_modules/import-local": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -10123,9 +8809,8 @@ }, "node_modules/import-local/node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -10135,9 +8820,8 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -10150,9 +8834,8 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -10160,28 +8843,23 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -10191,15 +8869,13 @@ }, "node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-core-module": { "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, + "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -10209,9 +8885,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -10224,9 +8899,8 @@ }, "node_modules/is-expression": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "acorn": "^7.1.1", @@ -10235,36 +8909,32 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -10274,8 +8944,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -10284,17 +8952,14 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -10303,9 +8968,8 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -10315,22 +8979,19 @@ }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-promise": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "call-bound": "^1.0.2", @@ -10347,9 +9008,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -10359,9 +9019,8 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -10371,39 +9030,34 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -10417,9 +9071,8 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -10431,9 +9084,8 @@ }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -10446,9 +9098,8 @@ }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10458,9 +9109,8 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -10472,9 +9122,8 @@ }, "node_modules/istanbul-reports": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -10485,8 +9134,6 @@ }, "node_modules/jackspeak": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -10504,9 +9151,8 @@ }, "node_modules/jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -10530,9 +9176,8 @@ }, "node_modules/jest-changed-files": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -10544,9 +9189,8 @@ }, "node_modules/jest-circus": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -10575,9 +9219,8 @@ }, "node_modules/jest-cli": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -10608,9 +9251,8 @@ }, "node_modules/jest-config": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -10653,9 +9295,8 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -10668,9 +9309,8 @@ }, "node_modules/jest-docblock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -10680,9 +9320,8 @@ }, "node_modules/jest-each": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -10696,9 +9335,8 @@ }, "node_modules/jest-environment-jsdom": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -10723,9 +9361,8 @@ }, "node_modules/jest-environment-node": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -10740,18 +9377,16 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -10774,9 +9409,8 @@ }, "node_modules/jest-haste-map/node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -10789,9 +9423,8 @@ }, "node_modules/jest-junit": { "version": "16.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", - "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mkdirp": "^1.0.4", "strip-ansi": "^6.0.1", @@ -10804,9 +9437,8 @@ }, "node_modules/jest-leak-detector": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -10817,9 +9449,8 @@ }, "node_modules/jest-matcher-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -10832,9 +9463,8 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -10852,9 +9482,8 @@ }, "node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -10866,9 +9495,8 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -10883,18 +9511,16 @@ }, "node_modules/jest-regex-util": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -10912,9 +9538,8 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -10925,9 +9550,8 @@ }, "node_modules/jest-runner": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -10957,9 +9581,8 @@ }, "node_modules/jest-runner/node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -10972,9 +9595,8 @@ }, "node_modules/jest-runner/node_modules/source-map-support": { "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -10982,9 +9604,8 @@ }, "node_modules/jest-runtime": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -11015,9 +9636,8 @@ }, "node_modules/jest-snapshot": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -11046,9 +9666,8 @@ }, "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -11063,9 +9682,8 @@ }, "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -11080,9 +9698,8 @@ }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -11092,9 +9709,8 @@ }, "node_modules/jest-watcher": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -11111,8 +9727,6 @@ }, "node_modules/jest-worker": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", "dependencies": { @@ -11126,8 +9740,6 @@ }, "node_modules/jiti": { "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, "license": "MIT", "bin": { @@ -11136,29 +9748,23 @@ }, "node_modules/jquery": { "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jquery-nestable": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/jquery-nestable/-/jquery-nestable-0.8.0.tgz", - "integrity": "sha512-YABQy43zhz7NLnZkiTEYDc03/K6kNtX+Ho+bGP2RzIYgiPpHRquxN2Ub1ucoR8dwTz4219rDnDK9djjUUt2NkA==", "dev": true }, "node_modules/jquery-ui": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.13.2.tgz", - "integrity": "sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q==", "dev": true, + "license": "MIT", "dependencies": { "jquery": ">=1.8.0 <4.0.0" } }, "node_modules/jquery-ui-timepicker-addon": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/jquery-ui-timepicker-addon/-/jquery-ui-timepicker-addon-1.6.3.tgz", - "integrity": "sha512-JvZTp1vGN1Ws9tr39VPRBC1/cOVdY/pa6a2mMcAXpEgjrsXc02xBXQthDtQsBXEqR0FbZV+GdXi/c+LDpuyk/A==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -11166,45 +9772,37 @@ }, "node_modules/jquery-ui-touch-punch": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/jquery-ui-touch-punch/-/jquery-ui-touch-punch-0.2.3.tgz", - "integrity": "sha512-Q/7aAd+SjbV0SspHO7Kuk96NJIbLwJAS0lD81U1PKcU2T5ZKayXMORH+Y5qvYLuy41xqVQbWimsRKDn1v3oI2Q==", - "dev": true + "dev": true, + "license": "Dual licensed under the MIT or GPL Version 2 licenses." }, "node_modules/jquery.qrcode": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/jquery.qrcode/-/jquery.qrcode-1.0.3.tgz", - "integrity": "sha512-NGA2IYGIgmAlE3RXk2RPRR2Pj7glBX2oQBhY5L/IH9Pb6ui2GcVqZ4XVQsDX6QoKA1jtyKpoInKmW6Ccg9C/Xw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/jquery.scrollto": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/jquery.scrollto/-/jquery.scrollto-2.1.2.tgz", - "integrity": "sha512-ONeJ429vq7bdzPcuq12K40+tV+whsp/F5aP3jMJFjLxzsQjr7lSSGPzUU0mUiSlPVNa3Aqowt7jTFxCNhkbPOw==", "dev": true, + "license": "MIT", "dependencies": { "jquery": ">=1.8" } }, "node_modules/js-stringify": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", "dev": true, "license": "MIT", "optional": true }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -11215,9 +9813,8 @@ }, "node_modules/jsdom": { "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "acorn": "^8.8.1", @@ -11260,9 +9857,8 @@ }, "node_modules/jsdom/node_modules/acorn": { "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -11272,8 +9868,6 @@ }, "node_modules/jsesc": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, "license": "MIT", "bin": { @@ -11285,15 +9879,11 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-cycle": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.5.0.tgz", - "integrity": "sha512-GOehvd5PO2FeZ5T4c+RxobeT5a1PiGpF4u9/3+UvrMU4bhnVqzJY7hm39wg8PDCqkU91fWGH8qjWR4bn+wgq9w==", "dev": true, "license": "MIT", "engines": { @@ -11302,34 +9892,28 @@ }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stream-stringify": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.0.1.tgz", - "integrity": "sha512-vuxs3G1ocFDiAQ/SX0okcZbtqXwgj1g71qE9+vrjJ2EkjKQlEFDAcUNRxRU8O+GekV4v5cM2qXP0Wyt/EMDBiQ==", "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -11352,17 +9936,14 @@ }, "node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jspdf": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.2.tgz", - "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11380,9 +9961,8 @@ }, "node_modules/jstransformer": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-promise": "^2.0.0", @@ -11391,9 +9971,8 @@ }, "node_modules/jszip": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -11403,8 +9982,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -11413,43 +9990,37 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/known-css-properties": { "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true, "license": "MIT" }, "node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -11460,18 +10031,16 @@ }, "node_modules/lie": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, + "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -11481,24 +10050,21 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loader-runner": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -11510,9 +10076,8 @@ }, "node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -11527,60 +10092,46 @@ }, "node_modules/lodash-es": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true, "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true, "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, "license": "MIT" }, "node_modules/lodash.unionby": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/lodash.unionby/-/lodash.unionby-4.8.0.tgz", - "integrity": "sha512-e60kn4GJIunNkw6v9MxRnUuLYI/Tyuanch7ozoCtk/1irJTYBj+qNTxr5B3qVflmJhwStJBv387Cb+9VOfABMg==", "dev": true, "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { @@ -11589,8 +10140,6 @@ }, "node_modules/magic-string": { "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -11598,9 +10147,8 @@ }, "node_modules/make-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -11611,26 +10159,22 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/makeerror": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -11642,9 +10186,8 @@ }, "node_modules/marked": { "version": "4.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", - "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", "dev": true, + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -11652,10 +10195,15 @@ "node": ">= 12" } }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "dev": true, + "license": "ISC" + }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "engines": { "node": ">= 0.4" @@ -11663,8 +10211,6 @@ }, "node_modules/mathml-tag-names": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, "license": "MIT", "funding": { @@ -11674,9 +10220,8 @@ }, "node_modules/md5": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -11685,8 +10230,6 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "license": "MIT", "engines": { @@ -11695,8 +10238,6 @@ }, "node_modules/meow": { "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "license": "MIT", "dependencies": { @@ -11722,8 +10263,6 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -11735,8 +10274,6 @@ }, "node_modules/meow/node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -11745,23 +10282,19 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -11774,18 +10307,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -11795,17 +10326,14 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -11814,8 +10342,6 @@ }, "node_modules/mini-css-extract-plugin": { "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", "dev": true, "license": "MIT", "dependencies": { @@ -11835,9 +10361,8 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11847,17 +10372,14 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -11871,16 +10393,13 @@ }, "node_modules/mitt": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "dev": true, "license": "MIT" }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -11890,23 +10409,19 @@ }, "node_modules/moment": { "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/mp3tag.js": { "version": "3.7.1", - "resolved": "https://registry.npmjs.org/mp3tag.js/-/mp3tag.js-3.7.1.tgz", - "integrity": "sha512-T/PcQ04526J6pez11Z8hkfFkYGyy7lqoOZMCA7PtTG0JBLfkuuc5H1KCled9CwrilqtfXBOD6Q3e1+cxItIocw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mrmime": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", "dev": true, "license": "MIT", "engines": { @@ -11915,23 +10430,19 @@ }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/multiselect": { "version": "0.9.12", - "resolved": "https://registry.npmjs.org/multiselect/-/multiselect-0.9.12.tgz", - "integrity": "sha512-JCuFC288lp9m5xNlxsgX10dhZZv+5lIQQt4kM4H8uLysbiMJTYQBi0LuYguRunCvlXlGjFvH8O/YpL8x2lu9EA==", "dev": true, + "license": "WTFPL", "dependencies": { "jquery": ">= 1.7.1" } }, "node_modules/nanoid": { "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -11948,14 +10459,11 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "license": "MIT", "engines": { @@ -11964,30 +10472,26 @@ }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-modules-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha512-JMaRS9L4wSRIR+6PTVEikTrq/lMGEZR43a48ETeilY0Q0iMwVnccMFrUM1k+tNzmYuIU0Vh710bCUqHX+/+ctQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/node-notifier": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", - "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", "dev": true, + "license": "MIT", "dependencies": { "growly": "^1.3.0", "is-wsl": "^2.2.0", @@ -11999,15 +10503,11 @@ }, "node_modules/node-releases": { "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, "node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12022,27 +10522,24 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -12052,9 +10549,8 @@ }, "node_modules/nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -12064,23 +10560,19 @@ }, "node_modules/nwsapi": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.6.tgz", - "integrity": "sha512-vSZ4miHQ4FojLjmz2+ux4B0/XA16jfwt/LBzIUftDpRd8tujHFkXjMyLwjS08fIZCzesj2z7gJukOKJwqebJAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { @@ -12092,8 +10584,6 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "license": "MIT", "dependencies": { @@ -12105,18 +10595,16 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -12129,8 +10617,6 @@ }, "node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12147,8 +10633,6 @@ }, "node_modules/opener": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, "license": "(WTFPL OR MIT)", "bin": { @@ -12157,9 +10641,8 @@ }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -12174,9 +10657,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -12189,9 +10671,8 @@ }, "node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -12201,9 +10682,8 @@ }, "node_modules/p-locate/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -12216,24 +10696,21 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -12243,9 +10720,8 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -12261,15 +10737,13 @@ }, "node_modules/parse-srcset": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parse5": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, + "license": "MIT", "dependencies": { "entities": "^4.4.0" }, @@ -12279,9 +10753,8 @@ }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", "dev": true, + "license": "MIT", "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" @@ -12292,8 +10765,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "license": "MIT", "engines": { @@ -12302,48 +10773,40 @@ }, "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -12359,8 +10822,6 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", "dev": true, "license": "ISC", "engines": { @@ -12369,8 +10830,6 @@ }, "node_modules/path-scurry/node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -12379,17 +10838,14 @@ }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pdfjs-dist": { "version": "2.16.105", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz", - "integrity": "sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12407,22 +10863,18 @@ }, "node_modules/performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -12432,17 +10884,14 @@ }, "node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pinia": { "version": "2.2.8", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.8.tgz", - "integrity": "sha512-NRTYy2g+kju5tBRe0oNlriZIbMNvma8ZJrpHsp3qudyiMEA8jMmPPKQ2QMHg0Oc4BkUyQYWagACabrwriCK9HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12468,8 +10917,6 @@ }, "node_modules/pinia/node_modules/vue-demi": { "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -12495,18 +10942,16 @@ }, "node_modules/pirates": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^3.0.0" }, @@ -12516,9 +10961,8 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -12528,9 +10972,8 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -12541,9 +10984,8 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -12556,9 +10998,8 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -12568,18 +11009,16 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/playwright": { "version": "1.38.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.1.tgz", - "integrity": "sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.38.1" }, @@ -12595,9 +11034,8 @@ }, "node_modules/playwright-core": { "version": "1.38.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.1.tgz", - "integrity": "sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -12607,14 +11045,11 @@ }, "node_modules/pofile": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.1.4.tgz", - "integrity": "sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/portal-vue": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-3.0.0.tgz", - "integrity": "sha512-9eprMxNURLx6ijbcgkWjYNcTWJYu/H8QF8nyAeBzOmk9lKCea01BW1hYBeLkgz+AestmPOvznAEOFmNuO4Adjw==", "dev": true, "license": "MIT", "engines": { @@ -12631,8 +11066,6 @@ }, "node_modules/postcss": { "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -12659,8 +11092,6 @@ }, "node_modules/postcss-loader": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", - "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12691,15 +11122,11 @@ }, "node_modules/postcss-loader/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/postcss-loader/node_modules/cosmiconfig": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { @@ -12725,8 +11152,6 @@ }, "node_modules/postcss-loader/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -12738,15 +11163,11 @@ }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", "dev": true, "license": "MIT" }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "license": "ISC", "engines": { @@ -12758,8 +11179,6 @@ }, "node_modules/postcss-modules-local-by-default": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.1.0.tgz", - "integrity": "sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12776,8 +11195,6 @@ }, "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12790,8 +11207,6 @@ }, "node_modules/postcss-modules-scope": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, "license": "ISC", "dependencies": { @@ -12806,8 +11221,6 @@ }, "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12820,9 +11233,8 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -12835,15 +11247,11 @@ }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", "dev": true, "license": "MIT" }, "node_modules/postcss-safe-parser": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "dev": true, "license": "MIT", "engines": { @@ -12859,8 +11267,6 @@ }, "node_modules/postcss-scss": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", "dev": true, "funding": [ { @@ -12876,6 +11282,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "engines": { "node": ">=12.0" }, @@ -12885,8 +11292,6 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -12899,24 +11304,21 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -12928,9 +11330,8 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12940,15 +11341,13 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/promise": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "asap": "~2.0.3" @@ -12956,9 +11355,8 @@ }, "node_modules/prompts": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -12969,21 +11367,16 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, "license": "MIT" }, "node_modules/psl": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pug": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", - "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", "dev": true, "license": "MIT", "optional": true, @@ -13000,8 +11393,6 @@ }, "node_modules/pug-attrs": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", "dev": true, "license": "MIT", "optional": true, @@ -13013,8 +11404,6 @@ }, "node_modules/pug-code-gen": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", - "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", "dev": true, "license": "MIT", "optional": true, @@ -13031,17 +11420,14 @@ }, "node_modules/pug-error": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", "dev": true, "license": "MIT", "optional": true }, "node_modules/pug-filters": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "constantinople": "^4.0.1", @@ -13053,9 +11439,8 @@ }, "node_modules/pug-lexer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "character-parser": "^2.2.0", @@ -13065,9 +11450,8 @@ }, "node_modules/pug-linker": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "pug-error": "^2.0.0", @@ -13076,9 +11460,8 @@ }, "node_modules/pug-load": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "object-assign": "^4.1.1", @@ -13087,9 +11470,8 @@ }, "node_modules/pug-parser": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "pug-error": "^2.0.0", @@ -13098,17 +11480,14 @@ }, "node_modules/pug-runtime": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", "dev": true, "license": "MIT", "optional": true }, "node_modules/pug-strip-comments": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "pug-error": "^2.0.0" @@ -13116,24 +11495,20 @@ }, "node_modules/pug-walk": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/punycode": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pure-rand": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, "funding": [ { @@ -13144,12 +11519,11 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/qs": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13164,14 +11538,11 @@ }, "node_modules/querystringify": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -13186,12 +11557,11 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", "engines": { @@ -13203,9 +11573,8 @@ }, "node_modules/raf": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "performance-now": "^2.1.0" @@ -13213,17 +11582,14 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "license": "MIT", "dependencies": { @@ -13238,8 +11604,6 @@ }, "node_modules/raw-body/node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { @@ -13251,9 +11615,8 @@ }, "node_modules/raw-loader": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -13271,9 +11634,8 @@ }, "node_modules/raw-loader/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -13289,14 +11651,11 @@ }, "node_modules/react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/read-pkg": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13314,8 +11673,6 @@ }, "node_modules/read-pkg-up": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13332,8 +11689,6 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -13349,8 +11704,6 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -13365,8 +11718,6 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -13381,8 +11732,6 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -13394,8 +11743,6 @@ }, "node_modules/read-pkg/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -13407,9 +11754,8 @@ }, "node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13422,9 +11768,8 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -13434,8 +11779,6 @@ }, "node_modules/redent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, "license": "MIT", "dependencies": { @@ -13451,8 +11794,6 @@ }, "node_modules/redent/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { @@ -13464,15 +11805,11 @@ }, "node_modules/regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true, "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, "license": "MIT", "dependencies": { @@ -13484,15 +11821,12 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/regenerator-transform": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "license": "MIT", "dependencies": { @@ -13501,8 +11835,6 @@ }, "node_modules/regexpu-core": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, "license": "MIT", "dependencies": { @@ -13519,15 +11851,11 @@ }, "node_modules/regjsgen": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "dev": true, "license": "MIT" }, "node_modules/regjsparser": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -13539,33 +11867,29 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.11.0", "path-parse": "^1.0.7", @@ -13580,9 +11904,8 @@ }, "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -13592,36 +11915,32 @@ }, "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve.exports": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -13629,9 +11948,8 @@ }, "node_modules/rgbcolor": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", - "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", "dev": true, + "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", "optional": true, "engines": { "node": ">= 0.8.15" @@ -13639,9 +11957,8 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -13654,8 +11971,6 @@ }, "node_modules/rslog": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/rslog/-/rslog-1.2.3.tgz", - "integrity": "sha512-antALPJaKBRPBU1X2q9t085K4htWDOOv/K1qhTUk7h0l1ePU/KbDqKJn19eKP0dk7PqMioeA0+fu3gyPXCsXxQ==", "dev": true, "engines": { "node": ">=14.17.6" @@ -13663,8 +11978,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -13680,26 +11993,23 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sanitize-html": { "version": "2.15.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.15.0.tgz", - "integrity": "sha512-wIjst57vJGpLyBP8ioUbg6ThwJie5SuSIjHxJg53v5Fg+kUK+AXlb7bK3RNXpp315MvwM+0OBGCV6h5pPHsVhA==", "dev": true, "license": "MIT", "dependencies": { @@ -13713,18 +12023,16 @@ }, "node_modules/sanitize-html/node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/sass": { "version": "1.69.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.0.tgz", - "integrity": "sha512-l3bbFpfTOGgQZCLU/gvm1lbsQ5mC/WnLz3djL2v4WCJBDrWm58PO+jgngcGRNnKUh6wSsdm50YaovTqskZ0xDQ==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -13739,8 +12047,6 @@ }, "node_modules/sass-loader": { "version": "16.0.4", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.4.tgz", - "integrity": "sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==", "dev": true, "license": "MIT", "dependencies": { @@ -13780,9 +12086,8 @@ }, "node_modules/saxes": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, + "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -13792,8 +12097,6 @@ }, "node_modules/schema-utils": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", "dev": true, "license": "MIT", "dependencies": { @@ -13812,8 +12115,6 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { @@ -13829,8 +12130,6 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "license": "MIT", "dependencies": { @@ -13842,21 +12141,16 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/select2": { "version": "4.0.13", - "resolved": "https://registry.npmjs.org/select2/-/select2-4.0.13.tgz", - "integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", "bin": { @@ -13868,8 +12162,6 @@ }, "node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13878,22 +12170,18 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, "license": "ISC" }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -13903,9 +12191,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -13915,23 +12202,19 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shellwords": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { @@ -13950,8 +12233,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", "dependencies": { @@ -13967,8 +12248,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { @@ -13986,8 +12265,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { @@ -14006,14 +12283,11 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sirv": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14027,23 +12301,19 @@ }, "node_modules/sisteransi": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14060,8 +12330,6 @@ }, "node_modules/socket.io": { "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", - "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", "dev": true, "license": "MIT", "dependencies": { @@ -14079,8 +12347,6 @@ }, "node_modules/socket.io-adapter": { "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "dev": true, "license": "MIT", "dependencies": { @@ -14090,8 +12356,6 @@ }, "node_modules/socket.io-adapter/node_modules/ws": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, "license": "MIT", "engines": { @@ -14112,8 +12376,6 @@ }, "node_modules/socket.io-parser": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dev": true, "license": "MIT", "dependencies": { @@ -14126,23 +12388,18 @@ }, "node_modules/sortablejs": { "version": "1.14.0", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", - "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==", "license": "MIT" }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -14150,9 +12407,8 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14160,8 +12416,6 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14171,15 +12425,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14189,22 +12439,18 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true, "license": "CC0-1.0" }, "node_modules/sprintf-js": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -14214,18 +12460,16 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/stackblur-canvas": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.6.0.tgz", - "integrity": "sha512-8S1aIA+UoF6erJYnglGPug6MaHYGo1Ot7h5fuXx4fUPvcvQfcdw2o/ppCse63+eZf8PPidSu4v1JnmEVtEDnpg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.14" @@ -14233,8 +12477,6 @@ }, "node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "license": "MIT", "engines": { @@ -14243,9 +12485,8 @@ }, "node_modules/stream-browserify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -14253,9 +12494,8 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14267,18 +12507,16 @@ }, "node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/string-length": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -14289,9 +12527,8 @@ }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14304,8 +12541,6 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -14319,9 +12554,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14332,8 +12566,6 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -14345,26 +12577,22 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, "license": "MIT", "dependencies": { @@ -14379,9 +12607,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -14391,8 +12618,6 @@ }, "node_modules/style-loader": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", - "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", "dev": true, "license": "MIT", "engines": { @@ -14408,15 +12633,11 @@ }, "node_modules/style-search": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true, "license": "ISC" }, "node_modules/stylelint": { "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, "license": "MIT", "dependencies": { @@ -14474,8 +12695,6 @@ }, "node_modules/stylelint-config-recommended": { "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", "dev": true, "license": "MIT", "engines": { @@ -14487,8 +12706,6 @@ }, "node_modules/stylelint-config-recommended-scss": { "version": "13.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz", - "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==", "dev": true, "license": "MIT", "dependencies": { @@ -14508,8 +12725,6 @@ }, "node_modules/stylelint-config-standard": { "version": "34.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", - "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14524,8 +12739,6 @@ }, "node_modules/stylelint-config-standard-scss": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.1.0.tgz", - "integrity": "sha512-5gnBgeNTgRVdchMwiFQPuBOtj9QefYtfXiddrOMJA2pI22zxt6ddI2s+e5Oh7/6QYl7QLJujGnaUR5YyGq72ow==", "dev": true, "license": "MIT", "dependencies": { @@ -14544,8 +12757,6 @@ }, "node_modules/stylelint-formatter-gitlab": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stylelint-formatter-gitlab/-/stylelint-formatter-gitlab-1.0.2.tgz", - "integrity": "sha512-Iu5NjHSp/WdhUeICuUKNi6QvpEut5KPwnrx4XU5q1GZEcAvpyqbjBq7yMAEX6850BUza45ARpsfX4yfOcnFWLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14559,8 +12770,6 @@ }, "node_modules/stylelint-scss": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.2.tgz", - "integrity": "sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14576,8 +12785,6 @@ }, "node_modules/stylelint/node_modules/@csstools/selector-specificity": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", - "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", "dev": true, "funding": [ { @@ -14599,22 +12806,16 @@ }, "node_modules/stylelint/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true, "license": "MIT" }, "node_modules/stylelint/node_modules/cosmiconfig": { "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", "dependencies": { @@ -14640,8 +12841,6 @@ }, "node_modules/stylelint/node_modules/css-tree": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "license": "MIT", "dependencies": { @@ -14654,8 +12853,6 @@ }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", "dev": true, "license": "MIT", "dependencies": { @@ -14667,8 +12864,6 @@ }, "node_modules/stylelint/node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "license": "MIT", "engines": { @@ -14677,8 +12872,6 @@ }, "node_modules/stylelint/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -14690,15 +12883,11 @@ }, "node_modules/stylelint/node_modules/mdn-data": { "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true, "license": "CC0-1.0" }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -14707,8 +12896,6 @@ }, "node_modules/stylelint/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -14720,8 +12907,6 @@ }, "node_modules/stylelint/node_modules/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -14734,8 +12919,6 @@ }, "node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14750,8 +12933,6 @@ }, "node_modules/supports-hyperlinks": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", - "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", "dev": true, "license": "MIT", "dependencies": { @@ -14767,8 +12948,6 @@ }, "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -14780,9 +12959,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14792,9 +12970,8 @@ }, "node_modules/svg-pathdata": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", - "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=12.0.0" @@ -14802,15 +12979,12 @@ }, "node_modules/svg-tags": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, "node_modules/svgo": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -14833,9 +13007,8 @@ }, "node_modules/svgo/node_modules/css-tree": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -14846,9 +13019,8 @@ }, "node_modules/svgo/node_modules/csso": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, + "license": "MIT", "dependencies": { "css-tree": "~2.2.0" }, @@ -14859,9 +13031,8 @@ }, "node_modules/svgo/node_modules/csso/node_modules/css-tree": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" @@ -14873,33 +13044,26 @@ }, "node_modules/svgo/node_modules/csso/node_modules/mdn-data": { "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/svgo/node_modules/mdn-data": { "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/symbol-tree": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tabbable": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", "dev": true, "license": "MIT" }, "node_modules/table": { "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -14915,8 +13079,6 @@ }, "node_modules/table/node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { @@ -14932,33 +13094,27 @@ }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/tablesorter": { "version": "2.31.3", - "resolved": "https://registry.npmjs.org/tablesorter/-/tablesorter-2.31.3.tgz", - "integrity": "sha512-ueEzeKiMajDcCWnUoT1dOeNEaS1OmPh9+8J0O2Sjp3TTijMygH74EA9QNJiNkLJqULyNU0RhbKY26UMUq9iurA==", "dev": true, + "license": "(MIT OR GPL-2.0)", "dependencies": { "jquery": ">=1.2.6" } }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/terser": { "version": "5.34.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", - "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14976,8 +13132,6 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", "dependencies": { @@ -15011,9 +13165,8 @@ }, "node_modules/terser/node_modules/acorn": { "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -15023,15 +13176,13 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -15043,9 +13194,8 @@ }, "node_modules/text-segmentation": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", - "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "utrie": "^1.0.2" @@ -15053,14 +13203,18 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "dev": true, + "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15076,8 +13230,6 @@ }, "node_modules/tinyglobby/node_modules/fdir": { "version": "6.4.5", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", - "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -15091,8 +13243,6 @@ }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { @@ -15104,14 +13254,11 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15123,8 +13270,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "license": "MIT", "engines": { @@ -15133,15 +13278,12 @@ }, "node_modules/token-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/totalist": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "license": "MIT", "engines": { @@ -15150,9 +13292,8 @@ }, "node_modules/tough-cookie": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -15165,18 +13306,16 @@ }, "node_modules/tough-cookie/node_modules/universalify": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -15186,8 +13325,6 @@ }, "node_modules/trim-newlines": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, "license": "MIT", "engines": { @@ -15199,8 +13336,6 @@ }, "node_modules/ts-api-utils": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "license": "MIT", "engines": { @@ -15212,8 +13347,6 @@ }, "node_modules/ts-loader": { "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, "license": "MIT", "dependencies": { @@ -15233,40 +13366,34 @@ }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/tslib": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true, "license": "0BSD" }, "node_modules/turndown": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz", - "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==", "dev": true, + "license": "MIT", "dependencies": { "@mixmark-io/domino": "^2.2.0" } }, "node_modules/turndown-plugin-gfm": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz", - "integrity": "sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -15276,18 +13403,16 @@ }, "node_modules/type-detect": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -15297,8 +13422,6 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "license": "MIT", "dependencies": { @@ -15311,8 +13434,6 @@ }, "node_modules/typescript": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -15325,8 +13446,6 @@ }, "node_modules/typescript-eslint": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.17.0.tgz", - "integrity": "sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==", "dev": true, "license": "MIT", "dependencies": { @@ -15352,8 +13471,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.17.0.tgz", - "integrity": "sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==", "dev": true, "license": "MIT", "dependencies": { @@ -15386,8 +13503,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.17.0.tgz", - "integrity": "sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -15415,8 +13530,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.17.0.tgz", - "integrity": "sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==", "dev": true, "license": "MIT", "dependencies": { @@ -15433,8 +13546,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.17.0.tgz", - "integrity": "sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==", "dev": true, "license": "MIT", "dependencies": { @@ -15461,8 +13572,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.17.0.tgz", - "integrity": "sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==", "dev": true, "license": "MIT", "engines": { @@ -15475,8 +13584,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.17.0.tgz", - "integrity": "sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -15504,8 +13611,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.17.0.tgz", - "integrity": "sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==", "dev": true, "license": "MIT", "dependencies": { @@ -15532,8 +13637,6 @@ }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { "version": "8.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.17.0.tgz", - "integrity": "sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==", "dev": true, "license": "MIT", "dependencies": { @@ -15550,8 +13653,6 @@ }, "node_modules/typescript-eslint/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -15560,8 +13661,6 @@ }, "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -15573,8 +13672,6 @@ }, "node_modules/typescript-eslint/node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -15589,8 +13686,6 @@ }, "node_modules/typical": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, "license": "MIT", "engines": { @@ -15599,8 +13694,6 @@ }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, "license": "MIT", "engines": { @@ -15609,8 +13702,6 @@ }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15623,8 +13714,6 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true, "license": "MIT", "engines": { @@ -15633,8 +13722,6 @@ }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, "license": "MIT", "engines": { @@ -15643,17 +13730,14 @@ }, "node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "license": "MIT", "engines": { @@ -15662,8 +13746,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -15693,18 +13775,16 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url-parse": { "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -15712,14 +13792,11 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "license": "MIT", "engines": { @@ -15728,9 +13805,8 @@ }, "node_modules/utrie": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", - "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "base64-arraybuffer": "^1.0.2" @@ -15738,18 +13814,16 @@ }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-to-istanbul": { "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -15761,14 +13835,11 @@ }, "node_modules/v8-to-istanbul/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -15778,14 +13849,11 @@ }, "node_modules/vanilla-colorful": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz", - "integrity": "sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "license": "MIT", "engines": { @@ -15794,14 +13862,11 @@ }, "node_modules/vlq": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/void-elements": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", "dev": true, "license": "MIT", "optional": true, @@ -15811,8 +13876,6 @@ }, "node_modules/vue": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.5.13", @@ -15830,10 +13893,21 @@ } } }, + "node_modules/vue-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vue-color/-/vue-color-3.2.0.tgz", + "integrity": "sha512-pODAZoMnKNNyjf6uimZQlTx7dXAV4YfjOfU21gKxALOki32lTxMnJ/2J4LqpXwIg1TVMjROA/1P/z16u7mIexA==", + "dev": true, + "dependencies": { + "material-colors": "^1.2.6", + "tinycolor2": "^1.6.0" + }, + "peerDependencies": { + "vue": ">=2.7.0 <4.0.0" + } + }, "node_modules/vue-dragscroll": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/vue-dragscroll/-/vue-dragscroll-4.0.6.tgz", - "integrity": "sha512-zW1k58p41yhmFhmg/JxfesUM4Srl0JfXg7xSINqffVGpHJKvnEHMK4QgF6mUVkPMTgibn976fhPYkomcXPvvFA==", "dev": true, "license": "MIT", "dependencies": { @@ -15842,8 +13916,6 @@ }, "node_modules/vue-eslint-parser": { "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, "license": "MIT", "dependencies": { @@ -15867,9 +13939,8 @@ }, "node_modules/vue-eslint-parser/node_modules/eslint-scope": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -15883,9 +13954,8 @@ }, "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -15895,17 +13965,14 @@ }, "node_modules/vue-eslint-parser/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/vue-loader": { "version": "17.4.2", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", - "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", "dev": true, "license": "MIT", "dependencies": { @@ -15927,15 +13994,11 @@ }, "node_modules/vue-resizable": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/vue-resizable/-/vue-resizable-2.1.7.tgz", - "integrity": "sha512-zEbWhRR8iXT8+nt3u8rkfrNpkPNsPkf7HteBh+AlPIsJ7rf9fyNwMqr0Q4FRzIpNIpZD5Zrr4+3+YELU0vc1Iw==", "dev": true, "license": "MIT" }, "node_modules/vue-router": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", - "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", "dev": true, "license": "MIT", "dependencies": { @@ -15950,8 +14013,6 @@ }, "node_modules/vue-select": { "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-4.0.0-beta.6.tgz", - "integrity": "sha512-K+zrNBSpwMPhAxYLTCl56gaMrWZGgayoWCLqe5rWwkB8aUbAUh7u6sXjIR7v4ckp2WKC7zEEUY27g6h1MRsIHw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -15960,8 +14021,6 @@ }, "node_modules/vue3-gettext": { "version": "3.0.0-beta.5", - "resolved": "https://registry.npmjs.org/vue3-gettext/-/vue3-gettext-3.0.0-beta.5.tgz", - "integrity": "sha512-Dn1qZrFgtaKg/9mMMypvQn+lyyHPAAylQBN4kPGqqr8oAMOJGyKg+rCLCcoyuLGLDvPGBgtawOTQ/0dFmGbDrw==", "dev": true, "license": "MIT", "dependencies": { @@ -15989,15 +14048,11 @@ }, "node_modules/vue3-gettext/node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/vue3-gettext/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { @@ -16006,8 +14061,6 @@ }, "node_modules/vue3-gettext/node_modules/cosmiconfig": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { @@ -16033,8 +14086,6 @@ }, "node_modules/vue3-gettext/node_modules/glob": { "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", "dev": true, "license": "ISC", "dependencies": { @@ -16056,8 +14107,6 @@ }, "node_modules/vue3-gettext/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -16069,8 +14118,6 @@ }, "node_modules/vue3-gettext/node_modules/minimatch": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "license": "ISC", "dependencies": { @@ -16085,8 +14132,6 @@ }, "node_modules/vue3-gettext/node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -16095,15 +14140,11 @@ }, "node_modules/vue3-gettext/node_modules/parse5": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true, "license": "MIT" }, "node_modules/vue3-gettext/node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "license": "MIT", "dependencies": { @@ -16112,8 +14153,6 @@ }, "node_modules/vuedraggable": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", - "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", "license": "MIT", "dependencies": { "sortablejs": "1.14.0" @@ -16124,8 +14163,6 @@ }, "node_modules/vuex": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", - "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16137,9 +14174,8 @@ }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, + "license": "MIT", "dependencies": { "xml-name-validator": "^4.0.0" }, @@ -16149,17 +14185,14 @@ }, "node_modules/walker": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, "node_modules/watchpack": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "license": "MIT", "dependencies": { @@ -16172,8 +14205,6 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "dev": true, "license": "MIT", "engines": { @@ -16182,17 +14213,14 @@ }, "node_modules/webidl-conversions": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/webpack": { "version": "5.97.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.0.tgz", - "integrity": "sha512-CWT8v7ShSfj7tGs4TLRtaOLmOCPWhoKEvp+eA7FVx8Xrjb3XfT0aXdxDItnRZmE8sHcH+a8ayDrJCOjXKxVFfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16238,8 +14266,6 @@ }, "node_modules/webpack-bundle-analyzer": { "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "license": "MIT", "dependencies": { @@ -16265,8 +14291,6 @@ }, "node_modules/webpack-bundle-analyzer/node_modules/acorn": { "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -16278,8 +14302,6 @@ }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "license": "MIT", "engines": { @@ -16300,8 +14322,6 @@ }, "node_modules/webpack-cli": { "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "license": "MIT", "dependencies": { @@ -16346,8 +14366,6 @@ }, "node_modules/webpack-cli/node_modules/commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "license": "MIT", "engines": { @@ -16356,8 +14374,6 @@ }, "node_modules/webpack-cli/node_modules/interpret": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "license": "MIT", "engines": { @@ -16366,8 +14382,6 @@ }, "node_modules/webpack-cli/node_modules/rechoir": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16379,9 +14393,8 @@ }, "node_modules/webpack-cli/node_modules/webpack-merge": { "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -16392,8 +14405,6 @@ }, "node_modules/webpack-merge": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "license": "MIT", "dependencies": { @@ -16407,9 +14418,8 @@ }, "node_modules/webpack-notifier": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", - "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", "dev": true, + "license": "ISC", "dependencies": { "node-notifier": "^9.0.0", "strip-ansi": "^6.0.0" @@ -16425,8 +14435,6 @@ }, "node_modules/webpack/node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -16438,8 +14446,6 @@ }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "license": "MIT", "dependencies": { @@ -16457,18 +14463,16 @@ }, "node_modules/webpack/node_modules/webpack-sources": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/whatwg-encoding": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -16478,18 +14482,16 @@ }, "node_modules/whatwg-mimetype": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/whatwg-url": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -16500,9 +14502,8 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -16515,14 +14516,11 @@ }, "node_modules/wildcard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/with": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", "dev": true, "license": "MIT", "optional": true, @@ -16538,9 +14536,8 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16556,8 +14553,6 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16574,15 +14569,13 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -16593,8 +14586,6 @@ }, "node_modules/ws": { "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", "dev": true, "license": "MIT", "engines": { @@ -16615,46 +14606,39 @@ }, "node_modules/xml": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xml-name-validator": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12" } }, "node_modules/xmlchars": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -16670,18 +14654,16 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 6944c9c..d8e5133 100644 --- a/package.json +++ b/package.json @@ -117,6 +117,7 @@ "typescript": "^5.7.2", "typescript-eslint": "^8.17.0", "vue": "^3.5.13", + "vue-color": "^3.0.0", "vue-dragscroll": "^4.0.6", "vue-loader": "^17.4.2", "vue-resizable": "^2.1.7", diff --git a/public/assets/stylesheets/theme.php b/public/assets/stylesheets/theme.php new file mode 100644 index 0000000..ba2ce14 --- /dev/null +++ b/public/assets/stylesheets/theme.php @@ -0,0 +1,37 @@ +<?php +require_once __DIR__ . '/../../../lib/bootstrap.php'; +$themes = Theme::getActiveThemes(); + +header('Content-Type: text/css'); + +if (isset($themes['light'])) { + echo ":root {" . PHP_EOL; + $values = $themes['light']['values'] ?? []; + foreach ($values as $name => $value) { + if ($value !== '') { + echo " $name: $value;" . PHP_EOL; + } + } + echo "}" . PHP_EOL; +} + +foreach ($themes as $themeName => $themeData) { + if ($themeName === 'high-contrast') { + echo "@media (prefers-contrast: more) {" . PHP_EOL; + } elseif (in_array($themeName, ['light', 'dark'])) { + echo "@media (prefers-color-scheme: $themeName) {" . PHP_EOL; + } else { + continue; + } + + echo " :root {" . PHP_EOL; + $values = $themeData['values'] ?? []; + foreach ($values as $name => $value) { + if ($value !== '') { + echo " $name: $value;" . PHP_EOL; + } + } + + echo " }" . PHP_EOL; + echo "}" . PHP_EOL; +}
\ No newline at end of file diff --git a/resources/assets/javascripts/bootstrap/inline-editing.js b/resources/assets/javascripts/bootstrap/inline-editing.js deleted file mode 100644 index 8f96f31..0000000 --- a/resources/assets/javascripts/bootstrap/inline-editing.js +++ /dev/null @@ -1,48 +0,0 @@ -jQuery( - function () { - - jQuery(document).ready( - function() { - var elements = jQuery('[data-inline-editing]'); - for (const element of elements) { - STUDIP.InlineEditing.init(element); - } - } - ); - - jQuery(document).on( - 'dialog-update', - null, - function() { - var elements = jQuery('.ui-dialog [data-inline-editing]'); - for (const element of elements) { - STUDIP.InlineEditing.init(element); - } - } - ); - - jQuery(document).on( - 'click', - '[data-inline-editing] .edit-button', - function (event) { - STUDIP.InlineEditing.activate(event.target); - } - ); - - jQuery(document).on( - 'click', - '[data-inline-editing] .save-button', - function (event) { - STUDIP.InlineEditing.save(event.target); - } - ); - - jQuery(document).on( - 'click', - '[data-inline-editing] .abort-button', - function (event) { - STUDIP.InlineEditing.abort(event.target); - } - ); - } -); diff --git a/resources/assets/javascripts/entry-base.js b/resources/assets/javascripts/entry-base.js index db3d1f6..896189e 100644 --- a/resources/assets/javascripts/entry-base.js +++ b/resources/assets/javascripts/entry-base.js @@ -68,7 +68,6 @@ import "./bootstrap/clipboard.js" import "./bootstrap/resources.js" import "./bootstrap/resource-tree-widget.js" import "./bootstrap/fullcalendar.js" -import "./bootstrap/inline-editing.js" import "./bootstrap/gradebook.js" import "./bootstrap/blubber.js" import "./bootstrap/consultations.js" diff --git a/resources/assets/javascripts/init.js b/resources/assets/javascripts/init.js index 86d1f9e..9fcfbb1 100644 --- a/resources/assets/javascripts/init.js +++ b/resources/assets/javascripts/init.js @@ -35,7 +35,6 @@ import Fullscreen from './lib/fullscreen.js'; import GlobalSearch from './lib/global_search.js'; import HeaderMagic from './lib/header_magic.js'; import i18n from './lib/i18n.js'; -import InlineEditing from './lib/inline-editing.js'; import JSONAPI, { jsonapi } from './lib/jsonapi.ts'; import JSUpdater from './lib/jsupdater.js'; import Lightbox from './lib/lightbox.js'; @@ -116,7 +115,6 @@ window.STUDIP = _.assign(window.STUDIP || {}, { GlobalSearch, HeaderMagic, i18n, - InlineEditing, jsonapi, JSONAPI, JSUpdater, diff --git a/resources/assets/javascripts/lib/course_wizard.js b/resources/assets/javascripts/lib/course_wizard.js index ebd821f..af63737 100644 --- a/resources/assets/javascripts/lib/course_wizard.js +++ b/resources/assets/javascripts/lib/course_wizard.js @@ -13,28 +13,25 @@ const CourseWizard = { addParticipatingInst: function(id, name) { // Check if already set. if ($('input[name="participating[' + id + ']"]').length == 0) { - var wrapper = $('<div>').addClass('institute'); + const wrapper = $('<div>').addClass('institute'); $('#wizard-participating') .children('div.description') .removeClass('hidden-js'); - var input = $('<input>') + const input = $('<input>') .attr('type', 'hidden') .attr('name', 'participating[' + id + ']') .attr('id', id) .attr('value', '1'); - var trash = $('<input>') - .attr('type', 'image') - .attr('src', STUDIP.ASSETS_URL + 'images/icons/blue/trash.svg') - .attr('name', 'remove_participating[' + id + ']') - .attr('value', '1') - .attr('onclick', "return STUDIP.CourseWizard.removeParticipatingInst('" + id + "')") - .addClass('text-bottom') - .css({ - width: 16, - height: 16 - }); + const trash = $('<button>') + .attr('type', 'button') + .attr('name', 'remove_participating[' + id + ']') + .attr('value', '1') + .addClass('btn-icon btn-icon--trash btn-icon--inline') + .on('click', function () { + return STUDIP.CourseWizard.removeParticipatingInst(id); + }); wrapper.append(input); - var nametext = $('<span>') + const nametext = $('<span>') .html(name) .text(); wrapper.append(nametext); @@ -72,27 +69,25 @@ const CourseWizard = { addPerson: function(id, name, inputName, elClass, elId, otherInput) { // Check if already set. if ($('input[name="' + inputName + '[' + id + ']"]').length == 0) { - var wrapper = $('<div>').addClass(elClass); + const wrapper = $('<div>').addClass(elClass); $('#' + elId) .children('div.description') .removeClass('hidden-js'); - var input = $('<input>') + const input = $('<input>') .attr('type', 'hidden') .attr('name', inputName + '[' + id + ']') .attr('id', id) .attr('value', '1'); - var trash = $('<input>') - .attr('type', 'image') - .attr('src', STUDIP.ASSETS_URL + 'images/icons/blue/trash.svg') + const trash = $('<button>') + .attr('type', 'button') .attr('name', 'remove_' + elClass + '[' + id + ']') .attr('value', '1') - .attr('onclick', "return STUDIP.CourseWizard.removePerson('" + id + "')") - .css({ - width: 16, - height: 16 + .addClass('btn-icon btn-icon--trash btn-icon--inline') + .on('click', function () { + return STUDIP.CourseWizard.removePerson(id); }); wrapper.append(input); - var nametext = $('<span>') + const nametext = $('<span>') .html(name) .text(); wrapper.append(nametext); @@ -314,13 +309,14 @@ const CourseWizard = { .attr('name', 'studyareas[]') .attr('value', items[i].id); node.children('ul').before(input); - var unassign = $('<input>') - .attr('type', 'image') + const unassign = $('<button>') + .attr('type', 'button') .attr('name', 'unassign[' + items[i].id + ']') - .attr('src', STUDIP.ASSETS_URL + 'images/icons/blue/trash.svg') - .attr('width', '16') - .height('height', '16') - .attr('onclick', "return STUDIP.CourseWizard.unassignNode('" + items[i].id + "')"); + .attr('value', '1') + .addClass('btn-icon btn-icon--trash btn-icon--inline') + .on('click', function () { + return STUDIP.CourseWizard.unassignNode(items[i].id); + }); node.children('input[name="studyareas[]"]').before(unassign); } } @@ -344,38 +340,37 @@ const CourseWizard = { * @returns {*|jQuery} */ createTreeNode: function(values, assignable, selected) { - let item = $('<li/>'); + const item = $('<li/>'); // Node in "All study areas" tree. if (assignable) { item.addClass('sem-tree-' + values.id); - var assign = $('<input>') - .attr('type', 'image') + const assign = $('<button>') + .attr('type', 'button') .attr('name', 'assign[' + values.id + ']') - .attr('src', STUDIP.ASSETS_URL + 'images/icons/yellow/arr_2left.svg') - .attr('width', '16') - .height('height', '16') + .attr('value', '1') + .addClass('btn-icon btn-icon--add btn-icon--inline') .attr('onclick', "return STUDIP.CourseWizard.assignNode('" + values.id + "')"); if (values.assignable) { item.append(assign); item.append(document.createTextNode(' ')); } if (values.has_children) { - var input = $('<input>') + const input = $('<input>') .attr('type', 'checkbox') .attr('id', values.id); - var label = $('<label>') + const label = $('<label>') .addClass('undecorated') .attr('for', values.id) .attr('onclick', "return STUDIP.CourseWizard.getTreeChildren('" + values.id + "', true)"); // Build link for opening the current node. - var link = $('div#studyareas').data('forward-url'); + let link = $('div#studyareas').data('forward-url'); if (link.indexOf('?') > -1) { link += '&open_node=' + values.id; } else { link += '?open_node=' + values.id; } - var openLink = $('<a>').attr('href', link); + const openLink = $('<a>').attr('href', link); openLink.html( $('<div/>') .text(values.name) @@ -413,17 +408,16 @@ const CourseWizard = { .html() ); if ((!values.has_children || values.assignable) && selected) { - var unassign = $('<input>') - .attr('type', 'image') - .attr('name', 'unassign[' + values.id + ']') - .attr('src', STUDIP.ASSETS_URL + 'images/icons/blue/trash.svg') - .attr('width', '16') - .height('height', '16') + const unassign = $('<button>') + .attr('type', 'button') + .attr('name', 'assiunassigngn[' + values.id + ']') + .attr('value', '1') + .addClass('btn-icon btn-icon--trash btn-icon--inline') .attr('onclick', "return STUDIP.CourseWizard.unassignNode('" + values.id + "')"); item.append(unassign); } if (values.assignable && selected) { - input = $('<input>') + const input = $('<input>') .attr('type', 'hidden') .attr('name', 'studyareas[]') .attr('value', values.id); @@ -452,7 +446,7 @@ const CourseWizard = { var items = $.parseJSON(data); CourseWizard.buildPartialTree(items, false, id); $('.sem-tree-assigned-root').removeClass('hidden-js'); - $('input[name="assign[' + id + ']"]').hide(); + $('button[name="assign[' + id + ']"]').hide(); $('svg[name="assign[' + id + ']"]').hide(); }, error: function(xhr, status, error) { @@ -471,12 +465,12 @@ const CourseWizard = { var target = $('li.sem-tree-assigned-' + id); if (target.children('ul').children('li').length > 0) { target.children('input[name="studyareas[]"]').remove(); - target.children('input[name="unassign[' + id + ']"]').remove(); + target.children('button[name="unassign[' + id + ']"]').remove(); target.children('a').remove(); } else { CourseWizard.cleanupAssignTree(target); } - $('input[name="assign[' + id + ']"]').show(); + $('button[name="assign[' + id + ']"]').show(); $('svg[name="assign[' + id + ']"]').show(); return false; }, diff --git a/resources/assets/javascripts/lib/fullcalendar.js b/resources/assets/javascripts/lib/fullcalendar.js index 350c72f..e1174bd 100644 --- a/resources/assets/javascripts/lib/fullcalendar.js +++ b/resources/assets/javascripts/lib/fullcalendar.js @@ -600,23 +600,17 @@ class Fullcalendar if (event.extendedProps.icon) { //Check if the icon is already an URL or just the name of an icon. - let icon_url = ''; + let iconUrl = ''; if (event.extendedProps.icon.includes('://')) { //The icon already is an URL. - icon_url = event.extendedProps.icon; + iconUrl = event.extendedProps.icon; } else { - //The icon is just referenced by its name. - icon_url = `${STUDIP.ASSETS_URL}images/icons/${iconColor}/${event.extendedProps.icon}.svg` + //The icon is just referenced by its name. We do not need a specific color here, background-color is currentColor. + iconUrl = `${STUDIP.ASSETS_URL}images/icons/black/${event.extendedProps.icon}.svg` } - $(eventElement).find('.fc-title').prepend( - $('<img>').attr('src', icon_url) - .css({ - verticalAlign: 'text-bottom', - marginRight: '3px', - width: 14, - height: 14 - }) - ); + const $title = $(eventElement).find('.fc-title'); + $title.addClass('has-icon'); + $title.css('--icon-url', `url('${iconUrl}')`); } }, eventSourceSuccess: function(content) { @@ -690,7 +684,7 @@ class Fullcalendar $('<a>').attr('href', url).text(renderInfo.resource.title) ); } else if ($("*[data-fullcalendar='1']").hasClass('institute-plan') && renderInfo.resource.id > 0) { - let icon = '<img class="text-bottom icon-role-clickable icon-shape-edit" width="20" height="20" src="' + STUDIP.URLHelper.getURL('assets/images/icons/blue/edit.svg') + '" alt="edit">'; + const icon = '<span class="btn-icon btn-icon--edit icon-role-clickable" aria-label="edit"></span>'; $(renderInfo.el).append( '<a href="' + STUDIP.URLHelper.getURL('dispatch.php/admin/courseplanning/rename_column/' diff --git a/resources/assets/javascripts/lib/icon-loader.ts b/resources/assets/javascripts/lib/icon-loader.ts new file mode 100644 index 0000000..3ccdbd6 --- /dev/null +++ b/resources/assets/javascripts/lib/icon-loader.ts @@ -0,0 +1,97 @@ +type CacheOption = 'off' | 'session' | 'local'; + +class IconLoader +{ + readonly #cacheKey: string = 'studip/svg-icons'; + + #baseUrl: string; + #useCache: CacheOption = 'off'; + + #cache: Map<string, string>; + #promises: Map<string, Promise<string>>; + + constructor(baseUrl: string, useCache: CacheOption = 'off') + { + this.#baseUrl = baseUrl; + this.#useCache = useCache; + + this.#cache = new Map<string, string>(this.#initialState()); + this.#promises = new Map<string, Promise<string>>(); + } + + async load(shape: string): Promise<string> + { + if (this.#cache.has(shape)) { + return this.#cache.get(shape)!; + } + + if (this.#promises.has(shape)) { + return this.#promises.get(shape)!; + } + + const url = `${this.#baseUrl}images/icons/blue/${shape}.svg`; + + const promise = (async () => { + try { + const response = await fetch(url); + if (!response.ok) { + return ''; + } + let svg = await response.text(); + + svg = svg.replace(/fill="(?!none)[^"]+"/g, 'fill="currentColor"'); + svg = svg.replace(/(width|height)="[^"]+"/g, ''); + + this.store(shape, svg); + + return svg; + } catch(error) { + console.error(`IconLoader: Fehler beim Laden von ${shape}`, error); + return ''; + } finally { + this.#promises.delete(shape); + } + })(); + + this.#promises.set(shape, promise); + + return promise; + } + + store(shape: string, svg: string): void + { + this.#cache.set(shape, svg); + + this.#getStorage()?.setItem( + this.#cacheKey, + JSON.stringify([...this.#cache]) + ) + } + + #getStorage(): Storage|null + { + if (this.#useCache === 'off') { + return null; + } + return this.#useCache === 'session' ? sessionStorage : localStorage; + } + + #initialState(): [string, string][] + { + const cached = this.#getStorage()?.getItem(this.#cacheKey); + if (!cached) { + return []; + } + + try { + return JSON.parse(cached); + } catch { + return []; + } + } +} + +const defaultLoader = new IconLoader(window.STUDIP.ASSETS_URL, 'session'); + +export default defaultLoader; +export { IconLoader }; diff --git a/resources/assets/javascripts/lib/inline-editing.js b/resources/assets/javascripts/lib/inline-editing.js deleted file mode 100644 index b1f025f..0000000 --- a/resources/assets/javascripts/lib/inline-editing.js +++ /dev/null @@ -1,138 +0,0 @@ -class InlineEditing -{ - static init(element) { - if (!element) { - return; - } - - var text = jQuery(element).text().trim(); - - var icon_path = STUDIP.ASSETS_URL + '/images/icons/blue/NAME.svg'; - var input_type = jQuery(element).data('input-type').toLowerCase(); - var input_name = jQuery(element).data('input-name'); - var icon_size = jQuery(element).data('icon-size'); - if (!icon_size) { - icon_size = '20px'; - } - - //Build the display container: - var text_container = jQuery('<span class="text"></span>'); - jQuery(text_container).text(text); - var icon_container = jQuery('<div></div>'); - var icon_element = jQuery('<img class="edit-button"></img>'); - jQuery(icon_element).attr('width', icon_size); - jQuery(icon_element).attr('height', icon_size); - jQuery(icon_element).attr('src', icon_path.replace('NAME', 'edit')); - jQuery(icon_container).append(icon_element); - var display_container = jQuery( - '<div class="display-container"></div>' - ); - jQuery(display_container).append(text_container); - jQuery(display_container).append(icon_container); - - var input_field = undefined; - var edit_icons_container = undefined; - var accept_icon = jQuery('<img class="save-button"></img>'); - jQuery(accept_icon).attr('width', icon_size); - jQuery(accept_icon).attr('height', icon_size); - jQuery(accept_icon).attr('src', icon_path.replace('NAME', 'accept')); - var abort_icon = jQuery('<img class="abort-button"></img>'); - jQuery(abort_icon).attr('width', icon_size); - jQuery(abort_icon).attr('height', icon_size); - jQuery(abort_icon).attr('src', icon_path.replace('NAME', 'decline')); - - if (input_type == 'textarea') { - input_field = jQuery('<textarea class="input-field"></textarea>'); - jQuery(input_field).attr('name', input_name); - jQuery(input_field).text(text); - edit_icons_container = jQuery('<div></div>'); - } else { - input_field = jQuery('<input class="input-field">'); - jQuery(input_field).attr('type', input_type); - jQuery(input_field).attr('name', input_name); - jQuery(input_field).val(text); - edit_icons_container = jQuery('<span></span>'); - } - jQuery(edit_icons_container).append(accept_icon); - jQuery(edit_icons_container).append(abort_icon); - - var edit_container = jQuery('<div class="edit-container invisible"></div>'); - jQuery(edit_container).append(input_field); - jQuery(edit_container).append(edit_icons_container); - - jQuery(element).empty(); - jQuery(element).append(display_container); - jQuery(element).append(edit_container); - } - - - static activate(element) { - var container = jQuery(element).parents('[data-inline-editing]'); - if (!container) { - return; - } - - jQuery(container).children('.display-container').addClass('invisible'); - jQuery(container).children('.edit-container').removeClass('invisible'); - } - - - static save(element) { - var container = jQuery(element).parents('[data-inline-editing]'); - if (!container) { - return; - } - var ajax_url = jQuery(container).data('inline-editing'); - - var text_field = jQuery(container).find('.text')[0]; - if (!text_field) { - return; - } - var input_field = jQuery(container).find('.input-field')[0]; - if (!input_field) { - return; - } - var input_name = jQuery(container).data('input-name'); - var input_value = jQuery(input_field).val(); - var data = { - quiet: 1 - }; - data[input_name] = input_value; - - jQuery.ajax( - { - url: ajax_url, - method: 'POST', - data: data - } - ).done( - function() { - jQuery(text_field).text(input_value); - jQuery(container).find('.edit-container').addClass('invisible'); - jQuery(container).find('.display-container').removeClass('invisible'); - } - ).fail( - function(data) { - jQuery(input_field).css('border-color', 'red'); - if (data) { - jQuery(container).find('.error-message').val(data); - } - } - ); - } - - - static abort(element) { - var container = jQuery(element).parents('[data-inline-editing]'); - if (!container) { - return; - } - - jQuery(container).children('.edit-container').addClass('invisible'); - jQuery(container).children('.display-container').removeClass('invisible'); - - } -} - - -export default InlineEditing; diff --git a/resources/assets/javascripts/lib/members.js b/resources/assets/javascripts/lib/members.js index 3fbdfb9..1630c71 100644 --- a/resources/assets/javascripts/lib/members.js +++ b/resources/assets/javascripts/lib/members.js @@ -1,13 +1,18 @@ const Members = { addPersonToSelection: function(userId, name) { - var target = $('#persons-to-add'), - newEl = $('<li>').html( + const target = $('#persons-to-add'); + let newEl = $('<li>').html( $('<span>') .html(name) .text() - ), - input = $('<input type="hidden" name="users[]">').val(userId), - remove = $('<img>').attr('src', STUDIP.ASSETS_URL + 'images/icons/blue/trash.svg'); + ); + let input = $('<input type="hidden" name="users[]">').val(userId); + let remove = $('<button>') + .addClass('btn-icon btn-icon--trash btn-icon--inline') + .attr('type', 'button') + .on('click', function () { + $(this).parent().remove(); + }); remove.on('click', function() { $(this) diff --git a/resources/assets/javascripts/mvv.js b/resources/assets/javascripts/mvv.js index 9191ad7..db3c6b2 100644 --- a/resources/assets/javascripts/mvv.js +++ b/resources/assets/javascripts/mvv.js @@ -177,9 +177,9 @@ STUDIP.MVV.Search = { const qs_name = qs_item.attr('id'); const target_name = qs_name.slice(0, qs_name.lastIndexOf('_')); const item_id = jQuery('#' + qs_name + '_realvalue').val(); - jQuery('<img src="' + STUDIP.ASSETS_URL - + 'images/icons/yellow/arr_2down.svg">') - .attr('alt', $gettext("hinzufügen")) + jQuery('<button>') + .addClass('btn-icon btn-icon--add') + .attr('aria-label', $gettext('hinzufügen')) .appendTo(add_button); if (item_id === '') { qs_item.siblings('.mvv-add-button').find('.mvv-add-item') diff --git a/resources/assets/javascripts/mvv_course_wizard.js b/resources/assets/javascripts/mvv_course_wizard.js index da51c57..4f5a6ee 100644 --- a/resources/assets/javascripts/mvv_course_wizard.js +++ b/resources/assets/javascripts/mvv_course_wizard.js @@ -147,12 +147,10 @@ STUDIP.MVV.CourseWizard = { const mvv_ids = values.id.split('-'); item.addClass('lvgroup-tree-' + values.id); - const assign = $('<input>') - .attr('type', 'image') + const assign = $('<button>') + .attr('type', 'button') .attr('name', 'assign[' + values.id + ']') - .attr('src', STUDIP.ASSETS_URL + 'images/icons/yellow/arr_2left.svg') - .attr('width', '16') - .height('height', '16') + .addClass('btn-icon btn-icon--add btn-icon--inline') .attr('onclick', "return STUDIP.MVV.CourseWizard.assignNode('" + values.id + "')"); if (values.assignable) { item.append(assign); diff --git a/resources/assets/stylesheets/fullcalendar.scss b/resources/assets/stylesheets/fullcalendar.scss index b9d5f40..994d761 100644 --- a/resources/assets/stylesheets/fullcalendar.scss +++ b/resources/assets/stylesheets/fullcalendar.scss @@ -176,8 +176,11 @@ html.responsive-display .fc .fc-view:not(.fc-timeGridDay-view) .fc-day-header { } } - &:checked + label::before { - @include background-icon(checkbox-checked, info_alt, 100%); + &:checked + label { + @include icon(before, checkbox-checked, $size: 100%); + &::before { + background-color: var(--color--font-inverted); + } } } } @@ -196,10 +199,16 @@ html.responsive-display .fc .fc-view:not(.fc-timeGridDay-view) .fc-day-header { right: 0; &.white { - @include background-icon(group4, info_alt, 100%); + @include icon(before, group4, $size: 100%); + &::before { + background-color: var(--color--font-inverted); + } } &.black { - @include background-icon(group4, info, 100%); + @include icon(before, group4, $size: 100%); + &::before { + background-color: var(--color--font-primary); + } } } diff --git a/resources/assets/stylesheets/highcontrast.scss b/resources/assets/stylesheets/highcontrast.scss index 7f25139..15cf554 100644 --- a/resources/assets/stylesheets/highcontrast.scss +++ b/resources/assets/stylesheets/highcontrast.scss @@ -497,11 +497,13 @@ section.course-statusgroups article header h1 a img { .js form.default.collapsable fieldset legend, form.default fieldset.collapsable legend { - @include background-icon(arr_1down, info_alt); + @include icon(before, arr_1down); + color: var(--white); } .js form.default.collapsable fieldset.collapsed legend, form.default fieldset.collapsable.collapsed legend { - @include background-icon(arr_1right, info_alt); + @include icon(before, arr_1right); + color: var(--white); } .sidebar-widget-header > div > a > img { diff --git a/resources/assets/stylesheets/mixins/colors.scss b/resources/assets/stylesheets/mixins/colors.scss index 1d94aaa..d9f897e 100644 --- a/resources/assets/stylesheets/mixins/colors.scss +++ b/resources/assets/stylesheets/mixins/colors.scss @@ -226,6 +226,7 @@ $calendar-category-255-aux: $light-gray-color-20; $color--black: #000; $color--blue-1: #28497c; $color--blue-2: #36598f; +$color--blue-3: #d0d7e3; $color--gray-1: #101010; $color--gray-2: #3c454e; $color--gray-3: #676767; @@ -234,22 +235,39 @@ $color--gray-5: #d8d8d8; $color--gray-6: #ededed; $color--gray-7: #fbfbfc; $color--green-1: #6ead10; +$color--green-2: #e2efcf; $color--red-1: #d60000; +$color--red-2: #f7cccc; $color--white: #fff; $color--yellow-1: #ffbc33; +$color--yellow-2: #fff2d6; $color--global-background: $color--white; -$color--brand-primary: $color--blue-1; -$color--brand-secondary: $color--gray-2; - $color--font-primary: $color--gray-1; $color--font-secondary: $color--gray-3; $color--font-inactive: $color--gray-3; $color--font-inverted: $color--white; +$color--brand-primary: $color--blue-1; +$color--brand-primary-contrast: $color--font-inverted; +$color--brand-secondary: $color--gray-2; +$color--brand-secondary-contrast: $color--font-inverted; + +$color--highlight: $color--blue-1; +$color--highlight-hover: $color--red-1; +$color--highlight-contrast: $color--font-inverted; + +$color--content-link: $color--blue-1; +$color--content-link-hover: $color--red-1; + +$color--sidebar-item: $color--blue-1; +$color--sidebar-item-hover: $color--gray-1; + $color--main-navigation-background: $color--gray-7; $color--main-navigation-border: $color--gray-5; +$color--main-navigation-item: $color--blue-1; +$color--main-navigation-item-inactive: $color--gray-4; $color--sidebar-marker-active: $color--gray-5; $color--sidebar-marker-active-navigation: $color--blue-1; @@ -283,6 +301,8 @@ $color--tile-title-background: $color--gray-6; $color--scrollbar-thumb: $color--gray-5; +$color--content-bar-background: $color--gray-6; + $color--content-box-border: $color--gray-6; $color--content-box-header: $color--gray-6; $color--content-box-background: $color--white; @@ -290,16 +310,16 @@ $color--content-box-background: $color--white; $color--fieldset-header: $color--gray-6; $color--fieldset-border: $color--gray-6; +$color--tabs-marker-hover: $color--gray-4; +$color--tabs-marker-active: $color--gray-3; + $color--table-header: $color--gray-6; $color--table-border: $color--gray-6; $color--table-focus: $color--gray-6; $color--table-hover: $color--gray-6; -$color--button-background: $color--white; -$color--button-border: $color--blue-1; -$color--button-focus: $color--blue-1; -$color--button-hover: $color--blue-1; $color--button-inactive-background: $color--gray-7; +$color--button-inactive-background-contrast: $color--font-inactive; $color--button-inactive-border: $color--gray-5; $color--radiobuttonset-background: $color--white; @@ -316,15 +336,27 @@ $color--shadow: $color--gray-4; $color--focus: $color--gray-4; $color--warning: $color--red-1; -$color--warning-alternative: mix($color--warning, $color--white, 20%); +$color--warning-secondary: $color--red-2; +$color--warning-contrast: $color--font-primary; +$color--warning-secondary-contrast: $color--font-primary; + $color--attention: $color--yellow-1; -$color--attention-alternative: mix($color--attention, $color--white, 20%); +$color--attention-secondary: $color--yellow-2; +$color--attention-contrast: $color--font-primary; +$color--attention-secondary-contrast: $color--font-primary; + $color--good: $color--green-1; -$color--good-alternative: mix($color--good, $color--white, 20%); +$color--good-secondary: $color--green-2; +$color--good-contrast: $color--font-inverted; +$color--good-secondary-contrast: $color--font-primary; + $color--info: $color--blue-2; -$color--info-alternative: mix($color--info, $color--white, 20%); +$color--info-secondary: $color--blue-3; +$color--info-contrast: $color--font-inverted; +$color--info-secondary-contrast: $color--font-primary; -$color-image-placeholder-background: $color--gray-6; +$color--image-placeholder-background: $color--gray-6; +$color--image-placeholder-icon: $color--gray-4; $color-header-inverted: $color--white; diff --git a/resources/assets/stylesheets/mixins/misc.scss b/resources/assets/stylesheets/mixins/misc.scss index 1fe9d08..1e4d22f 100644 --- a/resources/assets/stylesheets/mixins/misc.scss +++ b/resources/assets/stylesheets/mixins/misc.scss @@ -6,7 +6,7 @@ &::before, &::after { display: table; - content: ""; + content: ''; // Fixes Opera/contenteditable bug: // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 line-height: 0; @@ -16,7 +16,6 @@ } } - @mixin size($height, $width) { width: $width; height: $height; @@ -25,14 +24,54 @@ @include size($size, $size); } -// https://codepen.io/kennyglenn/pen/kxqWjP -@function text-contrast($color, $dark, $light, $threshold: 51) { - @return if(lightness($color) < $threshold, $light, $dark) -} - - @mixin vertical-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) { background-color: mix($midColor, $endColor, 80%); background-image: linear-gradient($startColor, $midColor $colorStop, $endColor); background-repeat: no-repeat; } + +@mixin highlight-anchor { + a:not(.button) { + color: var(--color--highlight); + + &:hover { + color: var(--color--highlight-hover); + text-decoration: none; + } + } +} + +@function luminance($value) { + @if $value <= 0.03928 { + @return $value / 12.92; + } @else { + @return (($value + 0.055) / 1.055) * (($value + 0.055) / 1.055); + } +} + +@function relative-luminance($color) { + $rgb: red($color) / 255, green($color) / 255, blue($color) / 255; + + @return luminance(nth($rgb, 1)) * 0.2126 + luminance(nth($rgb, 2)) * 0.7152 + luminance(nth($rgb, 3)) * 0.0722; +} + +@function contrast-ratio($color1, $color2) { + $luminance1: relative-luminance($color1) + 0.05; + $luminance2: relative-luminance($color2) + 0.05; + + @if $luminance1 > $luminance2 { + @return $luminance1 / $luminance2; + } @else { + @return $luminance2 / $luminance1; + } +} + +@function text-contrast($color, $dark, $light, $threshold: 4.5) { + $ratio: contrast-ratio($color, $dark); + + @if $ratio < $threshold { + @return $light; + } @else { + @return $dark; + } +} diff --git a/resources/assets/stylesheets/mixins/studip.scss b/resources/assets/stylesheets/mixins/studip.scss index d45d9f8..c71d4e3 100644 --- a/resources/assets/stylesheets/mixins/studip.scss +++ b/resources/assets/stylesheets/mixins/studip.scss @@ -85,6 +85,9 @@ @return $size; } +/** + * Deprecated mixin, use `icon` instead + */ @mixin background-icon($icon, $role: clickable, $size: $icon-size-default) { $svg: icon-path($icon, $role); @@ -104,8 +107,9 @@ } } -@mixin icon($position, $icon, $role: clickable, $size: $icon-size-default, $padding: 0, $inline: false) { +@mixin icon($position, $icon, $role: clickable, $size: $icon-size-default, $padding: 0, $inline: false, $align: text-top) { $position: $position; + $svg: icon-path($icon, $role); @if $inline { $size: $icon-size-inline; @@ -113,13 +117,14 @@ @if $position == before or $position == after { &::#{$position} { - @include background-icon($icon, $role, $size); - background-repeat: no-repeat; - content: ' '; + content: ''; display: inline-block; height: icon-size($size); - vertical-align: text-top; width: icon-size($size); + background-color: currentColor; + mask: url("#{$svg}") no-repeat center / contain; + vertical-align: $align; + @if $position == before { margin-right: $padding; @@ -137,12 +142,12 @@ display: inline-block; vertical-align: bottom; - @include background-icon($default-icon-name, $size: $icon-size-default); + @include icon(before, $default-icon-name, $size: $icon-size-default); @include hide-text; @include square($icon-size-default); &.toggled { - @include background-icon($toggled-icon-name, $size: $icon-size-default); + @include icon(before, $toggled-icon-name, $size: $icon-size-default); } } @@ -238,9 +243,8 @@ width: var(--icon-size-default); height: var(--icon-size-default); - @include background-icon($icon, $role); + @include icon(before, $icon, $role); - background-repeat: no-repeat; cursor: pointer; display: block; // vertical-align: middle; diff --git a/resources/assets/stylesheets/print.scss b/resources/assets/stylesheets/print.scss index 070ed4f..fd93a75 100644 --- a/resources/assets/stylesheets/print.scss +++ b/resources/assets/stylesheets/print.scss @@ -181,14 +181,12 @@ td.quote { a.link-intern { padding-left: 18px; - @include background-icon(intern); - background-repeat: no-repeat; + @include icon(before, intern); } a.link-extern { padding-left: 18px; - @include background-icon(link-extern); - background-repeat: no-repeat; + @include icon(before, link-extern); } .formatted-content { diff --git a/resources/assets/stylesheets/scss/actionmenu.scss b/resources/assets/stylesheets/scss/actionmenu.scss index 84183b9..1b86585 100644 --- a/resources/assets/stylesheets/scss/actionmenu.scss +++ b/resources/assets/stylesheets/scss/actionmenu.scss @@ -60,7 +60,7 @@ $action-menu-shadow: 2px 2px 0 var(--color--action-menu-shadow); display: block; position: absolute; - background: var(--base-color); + background-color: var(--color--highlight); border-radius: 50%; opacity: 1; left: 50%; @@ -100,14 +100,12 @@ $action-menu-shadow: 2px 2px 0 var(--color--action-menu-shadow); > label { margin: 0; padding: 2px 30px 2px 0; - display: block; + display: inline-flex; + align-items: center; } .action-menu-item-icon { - display: inline-block; - margin: 0 0.5em 0.25em 0; - vertical-align: middle; - + margin-right: 0.5em; width: var(--icon-size-action-menu); height: var(--icon-size-action-menu); } @@ -121,11 +119,13 @@ $action-menu-shadow: 2px 2px 0 var(--color--action-menu-shadow); } > label, - > button { - color: var(--base-color); + > button, + > a { + color: var(--color--highlight); cursor: pointer; &:hover { - color: var(--active-color); + color: var(--color--highlight-hover); + text-decoration: none; } } @@ -138,11 +138,11 @@ $action-menu-shadow: 2px 2px 0 var(--color--action-menu-shadow); &.action-menu-item-disabled { > label, > button { - color: var(--dark-gray-color-80); + color: var(--color--font-inactive); cursor: default; &:hover { - color: var(--dark-gray-color-80); + color: var(--color--font-inactive); } } } diff --git a/resources/assets/stylesheets/scss/admin-courses.scss b/resources/assets/stylesheets/scss/admin-courses.scss index c981579..0202544 100644 --- a/resources/assets/stylesheets/scss/admin-courses.scss +++ b/resources/assets/stylesheets/scss/admin-courses.scss @@ -1,40 +1,10 @@ -.button.has-notice, -.button.has-no-notice { - &::before { - display: inline-block; - height: var(--icon-size-inline); - vertical-align: sub; - width: var(--icon-size-inline); - } - &::before { - margin-right: 0.5ex; - } -} - -.button.has-notice { - &::before { - content: url("#{$image-path}/icons/blue/file-text.svg"); - } - &:hover::before { - content: url("#{$image-path}/icons/white/file-text.svg"); - } - -} -.button.has-no-notice { - &::before { - content: url("#{$image-path}/icons/blue/file.svg"); - } - &:hover::before { - content: url("#{$image-path}/icons/white/file.svg"); - } -} - .action-menu.filter { margin-left: 1em; } .action-menu.filter:not(.is-open) .action-menu-icon { - @include background-icon(settings); + @include icon(before, settings); + color: var(--color--highlight); span { display: none; } diff --git a/resources/assets/stylesheets/scss/admin.scss b/resources/assets/stylesheets/scss/admin.scss index 00f0102..af9aa5e 100644 --- a/resources/assets/stylesheets/scss/admin.scss +++ b/resources/assets/stylesheets/scss/admin.scss @@ -11,21 +11,28 @@ border-color: var(--color--tile-border-hover); } } + +$upload-icon-size: 48px; .js .drag-and-drop { - display: block; + display: flex; + flex-direction: row; + gap: 16px; margin: 0; overflow: hidden; - padding: 15px 15px 15px 80px; + padding: 15px; position: relative; text-align: left; background-color: transparent; border: solid thin transparent; - @include background-icon(upload, $size: 48px); - background-repeat: no-repeat; - background-position: 15px center; color: var(--base-color); cursor: pointer; + @include icon(before, upload, $size: $upload-icon-size); + &::before { + min-height: $upload-icon-size; + min-width: $upload-icon-size; + } + input[type=file] { border: 0; font-size: 5em; @@ -143,17 +150,21 @@ fieldset.attribute_table { } th .course-completion { - @include background-icon(radiobutton-checked); + @include icon(before, radiobutton-checked); + color: var(--color--highlight); } td .course-completion { - @include background-icon(span-empty, status-red); + @include icon(before, span-empty); + color: var(--color--warning); &[data-course-completion="1"] { - @include background-icon(span-2quarter, status-yellow); + @include icon(before, span-2quarter); + color: var(--color--attention); } &[data-course-completion="2"] { - @include background-icon(span-full, status-green); + @include icon(before, span-full); + color: var(--color--good); } &.ajaxing { diff --git a/resources/assets/stylesheets/scss/article.scss b/resources/assets/stylesheets/scss/article.scss index e674e41..cf914e3 100644 --- a/resources/assets/stylesheets/scss/article.scss +++ b/resources/assets/stylesheets/scss/article.scss @@ -43,6 +43,12 @@ article.studip { > a { display: flex; align-items: center; + color: var(--color--highlight); + + &:hover { + color: var(--color--highlight-hover); + text-decoration: none; + } } &, @@ -75,6 +81,7 @@ article.studip { } } + @include highlight-anchor; } } diff --git a/resources/assets/stylesheets/scss/buttons.scss b/resources/assets/stylesheets/scss/buttons.scss index e251512..d996199 100644 --- a/resources/assets/stylesheets/scss/buttons.scss +++ b/resources/assets/stylesheets/scss/buttons.scss @@ -1,11 +1,11 @@ @import '../mixins'; @mixin button() { - background: var(--color--button-background); - border: 1px solid var(--color--button-border); + background: var(--color--global-background); + border: 1px solid var(--color--highlight); border-radius: 4px; box-sizing: border-box; - color: var(--color--button-border); + color: var(--color--highlight); cursor: pointer; display: inline-block; font-family: $font-family-base; @@ -25,8 +25,8 @@ &:hover, &:active, &.active { - background-color: var(--color--button-focus); - color: var(--color--font-inverted); + background-color: var(--color--highlight); + color: var(--color--highlight-contrast); } &.disabled, @@ -59,32 +59,16 @@ button.button { } } -@mixin button-with-icon($icon, $role, $roleOnHover) { +@mixin button-with-icon($icon, $role: clickable, $roleOnHover: clickable) { @extend .button-with-empty-icon; - &::before { - @include background-icon($icon, $role, $icon-size-button); - } - - &:hover::before { - @include background-icon($icon, $roleOnHover, $icon-size-button); - } - - &.disabled, - &[disabled] { - &:hover::before { - @include background-icon($icon, $role, $icon-size-button); - } - } + @include icon(before, $icon, $size: $icon-size-button, $padding: 8px); } // $button-icons is a map of class names and icon names located in resources/assets/stylesheets/scss/_variables.scss @each $class, $icon in $button-icons { .button { &.#{'' + $class} { - padding-right: ($icon-size-button + 4px); - @include button-with-icon($icon, clickable, info_alt); - &.disabled, &[disabled] { - @include button-with-icon($icon, inactive, inactive); - } + padding-right: ($icon-size-button + 8px); + @include button-with-icon($icon); } } } @@ -147,3 +131,73 @@ button, } } } + +label { + &.undecorated.icon-button { + cursor: pointer; + svg { + vertical-align: middle; + } + } +} + +.btn-icon { + all: unset; + cursor: pointer; + display: inline-block; + + // $button-icons is a map of class names and icon names located in resources/assets/stylesheets/scss/_variables.scss + @each $name, $icon in $button-icons { + &--#{$name} { + @include icon(before, $icon, $align: middle); + + &.btn-icon--inline { + @include icon(before, $icon, $align: middle, $inline: true); + } + } + } +} + +button.button.btn-icon--only { + min-width: unset; + padding: 5px; + +} + +.square-button-panel { + display: flex; + flex-direction: row; + flex-wrap: wrap; + width: 100%; + justify-content: center; +} + +$square-button-size: 130px; +.square-button { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + max-height: $square-button-size; + max-width: $square-button-size; + min-width: $square-button-size; + min-height: $square-button-size; + margin: 10px; + padding: 10px; + background-color: transparent; + color: var(--color--highlight); + border: solid thin var(--color--tile-border); + cursor: pointer; + + .studip-icon { + height: 50px; + margin-bottom: 8px; + } + span { + min-width: 110px; + } + &:hover { + color: var(--color--highlight-hover); + border-color: var(--color--highlight); + } +}
\ No newline at end of file diff --git a/resources/assets/stylesheets/scss/calendar.scss b/resources/assets/stylesheets/scss/calendar.scss index 17093e2..356cb3e 100644 --- a/resources/assets/stylesheets/scss/calendar.scss +++ b/resources/assets/stylesheets/scss/calendar.scss @@ -2,11 +2,11 @@ .fc-event { background-color: #fff; - color: #000; + color: var(--color--font-primary); border-width: 1px; &:hover { - color: #000; + color: var(--color--font-primary); } &.course-color-0 { @@ -141,6 +141,20 @@ filter: #{"invert()"}; } } + + .fc-title.has-icon::before { + content: ''; + display: inline-block; + vertical-align: text-bottom; + margin-right: 3px; + width: 14px; + height: 14px; + mask-size: contain; + mask-repeat: no-repeat; + mask-position: center; + background-color: currentColor; + mask-image: var(--icon-url); + } } } diff --git a/resources/assets/stylesheets/scss/colorpicker.scss b/resources/assets/stylesheets/scss/colorpicker.scss new file mode 100644 index 0000000..8dde65c --- /dev/null +++ b/resources/assets/stylesheets/scss/colorpicker.scss @@ -0,0 +1,99 @@ +.studip-color-picker { + position: relative; + display: inline-block; + + .studip-color-picker-value { + width: 64px; + height: 24px; + display: inline-block; + vertical-align: middle; + } + + .color-picker-popup { + position: absolute; + z-index: 10; + top: 100%; + left: 0; + background: white; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + padding: 1rem; + border-radius: 8px; + min-width: 180px; + } + + .tabs { + display: flex; + margin-bottom: 1rem; + + button { + flex: 1; + padding: 0.5rem; + background: none; + border: none; + border-bottom: 2px solid transparent; + cursor: pointer; + + &.active { + border-bottom-color: var(--color--tabs-marker-active); + font-weight: bold; + } + } + } + + .palette-grid { + display: grid; + grid-template-columns: repeat(5, 0fr); + gap: 8px; + margin-bottom: 1rem; + + .color-swatch { + width: 30px; + height: 30px; + border: 1px solid transparent; + cursor: pointer; + + &.selected { + &::before { + content: ''; + display: inline-block; + position: relative; + top: -4px; + outline: 2px solid var(--color--font-inverted); + outline-offset: 10px; + } + &.inverted { + &::before { + outline: 2px solid var(--color--font-secondary); + } + } + } + &.inverted { + border: 1px solid var(--color--font-secondary); + } + } + } + + .actions { + text-align: right; + } + + /* vue color */ + .vc-chrome-picker { + background-color: unset; + background: unset; + border-radius: unset; + box-shadow: unset; + width: unset; + font-family: unset; + } + .active-color { + border-radius: unset; + } +} + + +label { + .studip-color-picker { + display: block; + } +}
\ No newline at end of file diff --git a/resources/assets/stylesheets/scss/contentbar.scss b/resources/assets/stylesheets/scss/contentbar.scss index b582ec5..46ae267 100644 --- a/resources/assets/stylesheets/scss/contentbar.scss +++ b/resources/assets/stylesheets/scss/contentbar.scss @@ -1,5 +1,5 @@ .contentbar { - background-color: var(--dark-gray-color-10); + background-color: var(--color--content-bar-background); display: flex; flex-wrap: nowrap; align-items: center; @@ -51,13 +51,7 @@ text-overflow: ellipsis; white-space: nowrap; - a { - color: var(--base-color); - text-decoration: none; - &:hover { - color: var(--active-color); - } - } + @include highlight-anchor; &.contentbar-breadcrumb-item-current { flex-shrink: 1; @@ -93,7 +87,7 @@ background-position: center; background-repeat: no-repeat; background-size: 24px; - border: solid thin var(--color--button-border); + border: solid thin var(--color--highlight); border-radius: var(--border-radius-default); cursor: pointer; display: inline-block; @@ -102,7 +96,7 @@ &.contentbar-button-menu, &.cw-ribbon-button-menu { - @include background-icon(table-of-contents); + @include icon(before, table-of-contents, $align: middle); } &.contentbar-button-zoom::before { diff --git a/resources/assets/stylesheets/scss/contents.scss b/resources/assets/stylesheets/scss/contents.scss index d3d5a33..148b6e0 100644 --- a/resources/assets/stylesheets/scss/contents.scss +++ b/resources/assets/stylesheets/scss/contents.scss @@ -14,6 +14,10 @@ padding: 5px; grid-template-columns: 42px 135px; + &:hover { + text-decoration: none; + } + .content-item-img-wrapper { margin: 0 10px 5px 5px; width: 32px; @@ -50,7 +54,7 @@ justify-content: stretch; .content-item-link { - color: var(--color--font-primary); + color: var(--color--highlight); display: grid; flex: 1; grid-template-columns: 74px auto; @@ -58,13 +62,16 @@ padding: 25px 10px 10px; transition: 0.5s; + &:hover { + text-decoration: none; + } + .content-item-img-wrapper { width: 64px; } .content-item-text { .content-item-title { - color: var(--color--brand-primary); font-size: 1.3em; width: 100%; max-width: 160px; @@ -72,6 +79,10 @@ overflow: hidden; text-overflow: ellipsis; } + + .content-item-description { + color: var(--color--font-primary); + } } } @@ -82,9 +93,10 @@ color: unset; .content-item-link { + color: var(--color--highlight-hover); .content-item-text { - .content-item-title { - color: var(--red); + .content-item-description { + color: var(--color--font-primary); } } } diff --git a/resources/assets/stylesheets/scss/courseware.scss b/resources/assets/stylesheets/scss/courseware.scss index 092a236..b2c83b6 100644 --- a/resources/assets/stylesheets/scss/courseware.scss +++ b/resources/assets/stylesheets/scss/courseware.scss @@ -8,6 +8,7 @@ @import './courseware/content-courses'; @import './courseware/dashboard'; @import './courseware/sortable'; +@import './courseware/tasks'; @import './courseware/toolbar'; @import './courseware/widgets'; @import './courseware/wizards'; @@ -20,7 +21,6 @@ @import './courseware/containers/tabs'; @import './courseware/blocks/default-block'; - @import './courseware/layouts/call-to-action'; @import './courseware/layouts/collapsible'; @import './courseware/layouts/companion'; @@ -35,3 +35,11 @@ @import './courseware/layouts/tile'; @import './courseware/layouts/tree'; @import './courseware/layouts/tree-units'; + +:root { + --color--courseware-border-default: #{$color--gray-5}; + --color--courseware-border-active: #{$color--gray-4}; + --color--courseware-background-default: #{$color--global-background}; + --color--courseware-background-highlight: #{$color--gray-6}; + --color--courseware-call-to-action-background: #{$petrol-20}; +} diff --git a/resources/assets/stylesheets/scss/courseware/blockadder.scss b/resources/assets/stylesheets/scss/courseware/blockadder.scss index 8086fe7..6f0890a 100644 --- a/resources/assets/stylesheets/scss/courseware/blockadder.scss +++ b/resources/assets/stylesheets/scss/courseware/blockadder.scss @@ -17,7 +17,7 @@ } &:hover { - border-color: var(--base-color); + border-color: var(--color--highlight-hover); .cw-sortable-handle { opacity: 1; @@ -28,24 +28,22 @@ align-items: flex-start; flex-direction: column; text-align: left; - color: var(--base-color); + color: var(--color--highlight); border: none; background-color: var(--white); - padding: 64px 10px 4px 10px; - @include background-icon(unit-test, $size: 48px); - background-position: 16px 10px; - background-repeat: no-repeat; + padding: 8px 16px 8px 16px; + @include icon(before, unit-test, $size: 48px); cursor: pointer; @each $item, $icon in $blockadder-items { &.cw-blockadder-item-#{$item} { - @include background-icon($icon, $size: 48px); + @include icon(before, $icon, $size: 48px); } } .cw-blockadder-item-title { display: inline-block; font-weight: 600; - margin-bottom: 2px; + margin: 4px 0 2px 0; } .cw-blockadder-item-description { display: inline-block; @@ -53,13 +51,14 @@ } &:hover { - color: var(--active-color); + color: var(--color--highlight-hover); } } .cw-blockadder-item-fav { height: 32px; padding: 8px; background-color: transparent; + color: var(--color--highlight); border: none; cursor: pointer; } @@ -75,28 +74,34 @@ } &:hover { - border-color: var(--base-color); + border-color: var(--color--highlight-hover); .cw-sortable-handle { opacity: 1; } } + $containeradder-icon-size: 48px; .cw-containeradder-item { + display: inline-flex; + gap: 16px; border: none; - background-color: var(--white); + background-color: var(--color--global-background); min-height: 5em; - padding: 1em 1em 1em 6em; - @include background-icon(unit-test, $size: 48px); - background-position: 16px center; - background-repeat: no-repeat; + padding: 16px; + @include icon(before, unit-test, $size: $containeradder-icon-size); text-align: left; - color: var(--base-color); + color: var(--color--highlight); cursor: pointer; + @each $item, $icon in $containeradder-items { &.cw-containeradder-item-#{$item} { - @include background-icon($icon, $size: 48px); + @include icon(before, $icon, $size: $containeradder-icon-size); + &::before { + min-width: $containeradder-icon-size; + min-height: $containeradder-icon-size; + } } } @@ -105,13 +110,13 @@ } &:hover { - color: var(--active-color); + color: var(--color--highlight-hover); } } } - +$container-style-selector-icon-size: 32px; .cw-container-style-selector { display: flex; border-bottom: solid thin var(--color--content-box-border); @@ -119,10 +124,14 @@ margin-bottom: 8px; label { + display: inline-flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; border: solid thin var(--color--tile-border); border-right: none; - padding: calc(0.5em + 32px) 1em 0.5em 1em; - color: var(--base-color); + padding: 8px 16px; + color: var(--color--highlight); text-align: center; width: 33%; background-position: center 0.5em; @@ -134,20 +143,20 @@ } &.full { - @include background-icon(column-full, $size: 32px); + @include icon(before, column-full, $size: $container-style-selector-icon-size); } &.half { - @include background-icon(column-half, $size: 32px); + @include icon(before, column-half, $size: $container-style-selector-icon-size); } &.half-center { - @include background-icon(column-half-centered, $size: 32px); + @include icon(before, column-half-centered, $size: $container-style-selector-icon-size); } &:hover { - color: var(--active-color); + color: var(--color--highlight-hover); } &.cw-container-style-selector-active { - background-color: var(--content-color-20); - border: solid thin var(--base-color); + background-color: var(--color--tile-background-active); + border: solid thin var(--color--highlight); } } input[type='radio'] { @@ -164,7 +173,7 @@ } &.sortable-ghost { - background-color: var(--active-color); + background-color: var(--color--highlight-hover); } } .cw-element-inserter-wrapper { @@ -186,40 +195,41 @@ } &:hover { - border-color: var(--base-color); + border-color: var(--color--highlight-hover); .cw-sortable-handle { opacity: 1; } } + $clipboard-item-icon-size: 48px; .cw-clipboard-item { + display: inline-flex; + flex-direction: column; width: calc(100% - 36px); - padding: 64px 10px 4px 10px; - @include background-icon(unit-test, $size: 48px); - background-position: 16px 10px; - background-repeat: no-repeat; + padding: 8px 16px; + @include icon(before, unit-test, $size: $clipboard-item-icon-size); cursor: pointer; - background-color: var(--white); + background-color: var(--color--global-background); border: none; text-align: left; - color: var(--base-color); + color: var(--color--highlight); @each $item, $icon in $blockadder-items { &.cw-clipboard-item-#{$item} { - @include background-icon($icon, $size: 48px); + @include icon(before, $icon, $size: $clipboard-item-icon-size); } } @each $item, $icon in $containeradder-items { &.cw-clipboard-item-#{$item} { - @include background-icon($icon, $size: 48px); + @include icon(before, $icon, $size: $clipboard-item-icon-size); } } .cw-clipboard-item-title { display: inline-block; font-weight: 600; - margin-bottom: 2px; + margin: 4px 0 2px 0; } .cw-clipboard-item-description { diff --git a/resources/assets/stylesheets/scss/courseware/blocks/audio.scss b/resources/assets/stylesheets/scss/courseware/blocks/audio.scss index 2ea944b..5b7dd64 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/audio.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/audio.scss @@ -4,7 +4,7 @@ flex-direction: row; flex-wrap: wrap; justify-content: space-between; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); padding: 36px; gap: 64px; } @@ -39,7 +39,7 @@ .default-cover { padding: 64px; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); } &.loading { @@ -86,14 +86,14 @@ cursor: pointer; outline: none; height: 2px; - background: var(--content-color-40); + background: var(--color--courseware-border-default); &::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; height: 16px; width: 16px; - background-color: var(--base-color); + background-color: var(--color--highlight); border-radius: 50%; border: none; } @@ -101,7 +101,7 @@ &::-moz-range-thumb { height: 16px; width: 16px; - background-color: var(--base-color); + background-color: var(--color--highlight); border-radius: 50%; border: none; } @@ -122,12 +122,12 @@ height: 28px; margin-bottom: 1em; padding-bottom: 4px; - border-bottom: solid 2px var(--content-color-40); + border-bottom: solid 2px var(--color--courseware-border-default); .cw-recorder-visualization-bar { min-height: 4px; width: calc(100% / 32); - background-color: var(--base-color); + background-color: var(--color--highlight); &.idle-bar { height: 4px !important; @@ -163,7 +163,7 @@ li { &:not(:last-child) { - border-bottom: solid thin var(--dark-gray-color-30); + border-bottom: solid thin var(--color--courseware-border-active); } .cw-playlist-item { @@ -190,7 +190,7 @@ &.default-cover { padding: 32px; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); } } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/biography.scss b/resources/assets/stylesheets/scss/courseware/blocks/biography.scss index cdc7a14..3fa874d 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/biography.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/biography.scss @@ -22,16 +22,13 @@ $goals-types: ( min-height: 200px; flex-direction: row; padding: 2em 2em 2em 1em; - border: 2px solid var(--base-color); + border: 2px solid var(--color--tile-border); .cw-block-biography-type { margin: auto 1em auto 0; - padding-top: 96px; min-width: 192px; max-width: 192px; text-align: center; - background-repeat: no-repeat; - background-position: center top; } .cw-block-biography-details { @@ -39,14 +36,13 @@ $goals-types: ( margin-top: 0; } } - } } .cw-block-biography-achievements { @each $type, $icon in $achievement-types { .cw-block-biography-achievements-type-#{$type} { - @include background-icon($icon, $size: 96px); + @include icon(before, $icon, $size: 96px); } } } @@ -54,7 +50,7 @@ $goals-types: ( .cw-block-biography-goals { @each $type, $icon in $goals-types { .cw-block-biography-goals-type-#{$type} { - @include background-icon($icon, $size: 96px); + @include icon(before, $icon, $size: 96px); } } } @@ -64,7 +60,7 @@ $goals-types: ( min-height: 140px; .cw-block-biography-personal-information-type { - @include background-icon(person2, $size: 96px); + @include icon(before, person2, $size: 96px); } .cw-block-biography-personal-information-details { diff --git a/resources/assets/stylesheets/scss/courseware/blocks/blubber.scss b/resources/assets/stylesheets/scss/courseware/blocks/blubber.scss index 385840e..c86f043 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/blubber.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/blubber.scss @@ -1,11 +1,11 @@ @use '../../../mixins.scss' as *; .cw-block-blubber-content { - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); border-top: none; .cw-blubber-thread { - background-color: var(--white); + background-color: var(--color--global-background); border: unset; width: unset; max-width: unset; @@ -19,19 +19,19 @@ overflow-y: scroll; overflow-x: hidden; scrollbar-width: thin; - scrollbar-color: var(--base-color) var(--content-color-10); + scrollbar-color: var(--color--scrollbar-thumb) var(--color--global-background); } .cw-blubber-thread-add-comment { - border-top: solid thin var(--content-color-40); + border-top: solid thin var(--color--courseware-border-default); padding-top: 1em; margin: 10px; textarea { width: calc(100% - 6px); resize: none; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); &:active { - border: solid thin var(--content-color-80); + border: solid thin var(--color--courseware-border-active); } } } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/canvas.scss b/resources/assets/stylesheets/scss/courseware/blocks/canvas.scss index decabf1..a42f96c 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/canvas.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/canvas.scss @@ -3,7 +3,7 @@ .cw-block-canvas { .cw-canvasblock-canvas { max-width: 100%; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); } .cw-canvasblock-upload-message { @@ -23,28 +23,33 @@ } .cw-canvasblock-toolbar { - border: solid thin var(--content-color-40); + display: flex; + border: solid thin var(--color--content-box-border); border-bottom: none; .cw-canvasblock-buttonset { - display: inline-block; + display: inline-flex; padding: 5px; margin-right: 0.5em; button { + display: inline-flex; + justify-content: center; + align-items: center; cursor: pointer; user-select: none; - border: solid thin var(--content-color-40); + border: solid thin var(--color--action-menu-border); height: 32px; width: 32px; - background-color: var(--white); - background-position: center; - background-repeat: no-repeat; - background-size: 24px 24px; + background-color: var(--color--global-background); + + &:not(:last-child) { + border-right: none; + } &.cw-canvasblock-color { $colors: ( - white: var(--white), + white: #ffffff, blue: #3498db, green: #2ecc71, purple: #9b59b6, @@ -53,86 +58,94 @@ orange: #f39c12, grey: #95a5a6, darkgrey: #34495e, - black: var(--black), + black: #000000, ); @each $name, $color in $colors { - &.#{'' + $name} { + &.#{'' + $name}::before { + content: ''; + width: 24px; + height: 24px; background-color: $color; } } &.selected-color { - border: solid 2px var(--black); + border: solid 2px var(--color--highlight); + width: 34px; } } &.cw-canvasblock-reset { - @include background-icon(refresh, $size: 24px); + @include icon(before, refresh, $size: 24px); } &.cw-canvasblock-size { - @include background-icon(stop); - - &.cw-canvasblock-size-small { - background-size: 8px 7px; + &::before { + content: ''; + background-color: var(--color--font-primary); + border-radius: 50%; + } + &.cw-canvasblock-size-small::before { + height: 4px; + width: 4px; } - &.cw-canvasblock-size-normal { - background-size: 16px 14px; + &.cw-canvasblock-size-normal::before { + height: 8px; + width: 8px; } - &.cw-canvasblock-size-large { - background-size: 22px 20px; + &.cw-canvasblock-size-large::before { + height: 12px; + width: 12px; } - &.cw-canvasblock-size-huge { - background-size: 26px 24px; + &.cw-canvasblock-size-huge::before { + height: 16px; + width: 16px; } &.selected-size { - border: solid 2px var(--black); + border: solid 2px var(--color--highlight); } } &.cw-canvasblock-tool { &.cw-canvasblock-tool-pen { - @include background-icon(comment); + @include icon(before, comment); } &.cw-canvasblock-tool-text { - vertical-align: top; - font-size: 22px; - color: var(--base-color); - font-weight: 600; + @include icon(before, block-typewriter); } &.selected-tool { - border: solid 2px var(--black); + border: solid 2px var(--color--highlight); } } &.cw-canvasblock-undo { - @include background-icon(arr_2left, $size: 24px); + @include icon(before, arr_2left, $size: 24px); } &.cw-canvasblock-download { - @include background-icon(download, $size: 24px); + @include icon(before, download, $size: 24px); } &.cw-canvasblock-store { - @include background-icon(upload, $size: 24px); + @include icon(before, upload, $size: 24px); } &.cw-canvasblock-show-all { - @include background-icon(group2, $size: 24px); + @include icon(before, group2, $size: 24px); &.selected-view { - border: solid 2px var(--black); + border: solid 2px var(--color--highlight); } } &.cw-canvasblock-show-own { - @include background-icon(person, $size: 24px); + @include icon(before, person, $size: 24px); &.selected-view { - border: solid 2px var(--black); + border: solid 2px var(--color--highlight); } } } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/code.scss b/resources/assets/stylesheets/scss/courseware/blocks/code.scss index ac401cf..b4895a4 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/code.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/code.scss @@ -9,7 +9,7 @@ padding: 0.5em; background: var(--dark-gray-color-5); color: black; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); } .hljs-comment, @@ -24,7 +24,7 @@ .hljs-built_in, .hljs-name, .hljs-tag { - color: var(--base-color); + color: var(--color--blue-1); font-weight: 600; } @@ -55,7 +55,7 @@ } .hljs-attr { - color: var(--active-color); + color: var(--red); font-weight: 400; } @@ -76,12 +76,12 @@ } .code-lang { - background: var(--dark-gray-color-5); - border: solid thin var(--content-color-40); + background: var(--color--courseware-background-highlight); + border: solid thin var(--color--courseware-border-default); border-top: none; padding: 5px 10px; text-align: right; - color: var(--dark-gray-color-45); + color: var(--color--font-secondary); font-family: monospace; text-transform: full-width; } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/confirm.scss b/resources/assets/stylesheets/scss/courseware/blocks/confirm.scss index 0c236fc..9d79fda 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/confirm.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/confirm.scss @@ -1,6 +1,6 @@ .cw-block-confirm { .cw-block-confirm-content { - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); padding: 1em; margin: 0; diff --git a/resources/assets/stylesheets/scss/courseware/blocks/default-block.scss b/resources/assets/stylesheets/scss/courseware/blocks/default-block.scss index 4b032ae..8935c02 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/default-block.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/default-block.scss @@ -13,14 +13,15 @@ .cw-block-header { background-color: var(--color--content-box-header); padding: 4px 10px 4px 22px; + @include highlight-anchor; .cw-block-header-toggle { - display: inline-block; + display: inline-flex; + align-items: center; width: calc(100% - 50px); } span { - color: var(--base-color); font-weight: 700; line-height: 2em; font-size: 1.1em; @@ -32,11 +33,6 @@ } } - img { - vertical-align: middle; - margin-bottom: 2px; - } - .cw-block-actions { position: relative; float: right; @@ -47,12 +43,9 @@ } } -.cw-discuss-wrapper, .cw-block-features { header{ background-color: var(--color--content-box-header); - color: var(--base-color); - font-weight: 600; padding: 0.5em; } @@ -93,27 +86,12 @@ .cw-block-title { padding: 4px; background-color: var(--color--content-box-header); - color: var(--base-color); font-weight: 700; text-align: center; border: solid thin var(--color--content-box-border); border-bottom: none; } -.cw-file-empty { - @include background-icon(file, info, 96px); - border: solid thin var(--color--content-box-border); - background-position: center 1em; - background-repeat: no-repeat; - min-height: 140px; - padding: 1em; - p { - text-align: center; - padding-top: 106px; - } -} - - .cw-block-item:not(.cw-block-item-sortable):has(.cw-default-block-deactivated) { display: none; } @@ -143,4 +121,4 @@ pointer-events: none; } } -}
\ No newline at end of file +} diff --git a/resources/assets/stylesheets/scss/courseware/blocks/dialog-cards.scss b/resources/assets/stylesheets/scss/courseware/blocks/dialog-cards.scss index dfc35b4..c0c532d 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/dialog-cards.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/dialog-cards.scss @@ -40,7 +40,7 @@ position: absolute; width: 100%; height: 100%; - color: var(--black); + color: var(--color--font-primary); text-align: center; font-weight: bold; font-size: 1.2em; @@ -54,11 +54,11 @@ } .cw-dialogcards-front-no-image { - @include background-icon(question, navigation, 150px); + @include icon(before, question, navigation, $size: 150px); } .cw-dialogcards-back-no-image { - @include background-icon(exclaim, navigation, 150px); + @include icon(before, exclaim, navigation, $size: 150px); } .cw-dialogcards-front-no-image, @@ -80,29 +80,31 @@ } .card__face--front { - @include background-icon(arr_1right); - background-color: var(--white); - background-repeat: no-repeat; - background-position: 95% 95%; + @include icon(after, arr_1right); } .card__face--back { - @include background-icon(arr_1left); - background-color: var(--white); - background-repeat: no-repeat; - background-position: 5% 95%; + @include icon(after, arr_1left); transform: rotateY(180deg); } + + .card__face--front, + .card__face--back { + background-color: var(--color--global-background); + &::after { + position: absolute; + right: 25px; + bottom: 25px; + } + } } .cw-dialogcards-navbutton { - color: transparent; + background-color: var(--color--highlight); + color: var(--color--highlight-contrast); width: 35px; height: 35px; - border-radius: 2px; - background-position: 50%; - background-repeat: no-repeat; - background-color: var(--base-color); + border-radius: var(--border-radius-default); border: none; display: block; z-index: 4; @@ -111,17 +113,18 @@ cursor: pointer; &.cw-dialogcards-prev { - @include background-icon(arr_1left, info-alt, 24px); + @include icon(before, arr_1left, $size: 24px, $align: middle, $padding: -2px); } &.cw-dialogcards-next { - @include background-icon(arr_1right, info-alt, 24px); - right: 0; + @include icon(before, arr_1right, $size: 24px, $align: middle, $padding: -2px); } &.cw-dialogcards-prev-disabled, &.cw-dialogcards-next-disabled { - background-color: var(--light-gray-color-40); + color: var(--color--button-inactive-background-contrast); + background-color: var(--color--button-inactive-background); + cursor: not-allowed; } } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/document.scss b/resources/assets/stylesheets/scss/courseware/blocks/document.scss index 0c69cda..ff6e916 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/document.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/document.scss @@ -1,11 +1,11 @@ .cw-block-document { .cw-pdf-main-container { width: calc(100% - 2px); - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); .cw-block-title { border: none; - border-bottom: solid thin var(--content-color-40); + border-bottom: solid thin var(--color--courseware-border-default); } } .cw-pdf-toolbar { @@ -15,7 +15,7 @@ justify-content: flex-start; align-items: baseline; align-content: space-around; - background-color: var(--content-color-20); + background-color: var(--color--courseware-background-highlight); padding: 4px 8px; button { @@ -24,7 +24,7 @@ padding: 4px; &.active { - background-color: var(--base-color); + background-color: var(--color--highlight); } } @@ -84,7 +84,7 @@ top: 33px; left: 22px; width: auto; - background-color: var(--content-color-20); + background-color: var(--color--courseware-background-highlight); border-top: none; padding: 6px; z-index: 2; @@ -119,8 +119,8 @@ width: 25%; min-width: 270px; align-self: stretch; - background-color: var(--white); - border-right: solid 1px var(--content-color-40); + background-color: var(--color--global-background); + border-right: solid 1px var(--color--courseware-border-default); ul.cw-pdf-toc-list, ul.cw-pdf-toc-sub-list { diff --git a/resources/assets/stylesheets/scss/courseware/blocks/files.scss b/resources/assets/stylesheets/scss/courseware/blocks/files.scss index 77ed00d..89e7884 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/files.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/files.scss @@ -2,14 +2,14 @@ // folder block .cw-block-folder-info { - border: solid thin var(--content-color-40); + border: solid thin var(--color--content-box-border); padding: 10px 10px 0 10px; overflow: hidden; border-bottom: none; } .cw-block-folder-list { - border: solid thin var(--content-color-40); + border: solid thin var(--color--content-box-border); padding: 0; list-style: none; @@ -17,7 +17,7 @@ list-style: none; &:not(:last-child) { - border-bottom: solid thin var(--content-color-40); + border-bottom: solid thin var(--color--content-box-border); } a { @@ -30,8 +30,7 @@ } .cw-block-folder-download-icon { - @include background-icon(download, $size: 24px); - background-repeat: no-repeat; + @include icon(before, download, $size: 24px); float: right; height: 24px; width: 24px; @@ -40,7 +39,7 @@ } .cw-block-folder-upload { - border: solid thin var(--content-color-40); + border: solid thin var(--color--content-box-border); padding: 1em 10px; border-top: none; @@ -52,111 +51,73 @@ // for folder and download block .cw-block-file-info { - @include background-icon(file, $size: 24px); - background-repeat: no-repeat; + @include icon(before, file, $size: 24px, $padding: 4px, $align: middle); display: block; - padding: 16px 16px 16px 40px; - background-position: 10px 16px; + padding: 16px; width: calc(100% - 56px); min-height: 20px; overflow: hidden; text-overflow: ellipsis; &.cw-block-file-icon-empty { - color: var(--black); - @include background-icon(folder-empty, info, 24px); + color: var(--color--font-primary); + @include icon(before, folder-empty, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-none { - color: var(--black); - @include background-icon(file, info, 24px); + color: var(--color--font-primary); + @include icon(before, file, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-audio { - @include background-icon(file-audio, $size: 24px); - - &.download-disabled { - @include background-icon(file-audio, info, 24px); - } + @include icon(before, file-audio, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-pic { - @include background-icon(file-pic, $size: 24px); - - &.download-disabled { - @include background-icon(file-pic, info, 24px); - } + @include icon(before, file-pic, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-video { - @include background-icon(file-video, $size: 24px); - - &.download-disabled { - @include background-icon(file-video, info, 24px); - } + @include icon(before, file-video, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-pdf { - @include background-icon(file-pdf, $size: 24px); - - &.download-disabled { - @include background-icon(file-pdf, info, 24px); - } + @include icon(before, file-pdf, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-word { - @include background-icon(file-word, $size: 24px); - - &.download-disabled { - @include background-icon(file-word, info, 24px); - } + @include icon(before, file-word, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-spreadsheet { - @include background-icon(file-excel, $size: 24px); - - &.download-disabled { - @include background-icon(file-excel, info, 24px); - } + @include icon(before, file-excel, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-text { - @include background-icon(file-text, $size: 24px); - - &.download-disabled { - @include background-icon(file-text, info, 24px); - } + @include icon(before, file-text, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-ppt { - @include background-icon(file-ppt, $size: 24px); - - &.download-disabled { - @include background-icon(file-ppt, info, 24px); - } + @include icon(before, file-ppt, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-archive { - @include background-icon(file-archive, $size: 24px); - - &.download-disabled { - @include background-icon(file-archive, info, 24px); - } + @include icon(before, file-archive, $size: 24px, $padding: 4px, $align: middle); } &.cw-block-file-icon-file { - @include background-icon(file, $size: 24px); + @include icon(before, file, $size: 24px, $padding: 4px, $align: middle); + } - &.download-disabled { - @include background-icon(file, info, 24px); - } + &.download-disabled { + color: var(--color--font-inactive); } } .cw-block-file-details { margin-top: -16px; padding-left: 40px; padding-bottom: 16px; - color: var(--dark-gray-color); + color: var(--color--font-secondar); } .cw-block-file-owner, .cw-block-file-mkdate { @@ -169,7 +130,7 @@ // download block .cw-block-download { .cw-block-download-content { - border: solid thin var(--content-color-40); + border: solid thin var(--color--content-box-border); .cw-block-download-file-item { a { @@ -177,12 +138,11 @@ } &:hover { - background-color: fade-out($dark-gray-color-75, 0.8); + background-color: var(--color--table-hover); } .cw-block-download-download-icon { - @include background-icon(download, $size: 24px); - background-repeat: no-repeat; + @include icon(before, download, $size: 24px); float: right; height: 24px; width: 24px; diff --git a/resources/assets/stylesheets/scss/courseware/blocks/gallery.scss b/resources/assets/stylesheets/scss/courseware/blocks/gallery.scss index 6bacf7a..0781b87 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/gallery.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/gallery.scss @@ -26,37 +26,29 @@ .cw-block-gallery-next { cursor: pointer; position: absolute; - background-color: fade-out($white, 0.6); + background-color: fade-out($color--global-background, 0.6); + color: var(--color--font-primary); top: 50%; height: 36px; width: 36px; - background-repeat: no-repeat; - background-position: center; margin-top: -22px; transition: 200ms ease; user-select: none; border: none; &:hover { - background-color: var(--base-color); + background-color: var(--color--highlight); + color: var(--color--highlight-contrast); } } .cw-block-gallery-prev { - @include background-icon(arr_1left, $size: 24px); - - &:hover { - @include background-icon(arr_1left, info-alt, 24px); - } + @include icon(before, arr_1left, $size: 24px, $align: middle, $padding: -4px); } .cw-block-gallery-next { right: 0; - @include background-icon(arr_1right, $size: 24px); - - &:hover { - @include background-icon(arr_1right, info-alt, 24px); - } + @include icon(before, arr_1right, $size: 24px, $align: middle, $padding: -4px); } .cw-block-gallery-file-description { diff --git a/resources/assets/stylesheets/scss/courseware/blocks/headline.scss b/resources/assets/stylesheets/scss/courseware/blocks/headline.scss index 2bfaace..5590973 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/headline.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/headline.scss @@ -11,9 +11,6 @@ $large-icon-size-px: $large-icon-size * 1px; .cw-block-headline-content { min-height: 600px; overflow: hidden; - background-position: center; - background-size: $max-content-width; - background-repeat: no-repeat; &.half { min-height: 300px; @@ -57,48 +54,26 @@ $large-icon-size-px: $large-icon-size * 1px; } &.bigicon_top { .icon-layer { - background-repeat: no-repeat; - background-position: center; + display: flex; + flex-direction: column; + align-items: center; margin-top: 8em; margin-bottom: 1em; - background-size: $big-icon-size-px; height: $big-icon-size-px; @each $icon in $icons { - &.icon-black-#{$icon} { - @include background-icon($icon, info, $big-icon-size-px); - } - &.icon-white-#{$icon} { - @include background-icon($icon, info-alt, $big-icon-size-px); - } - &.icon-studip-blue-#{$icon} { - @include background-icon($icon, $size: $big-icon-size-px); - } - &.icon-studip-red-#{$icon} { - @include background-icon($icon, status-red, $big-icon-size-px); - } - &.icon-studip-yellow-#{$icon} { - @include background-icon($icon, status-yellow, $big-icon-size-px); - } - &.icon-studip-green-#{$icon} { - @include background-icon($icon, status-green, $big-icon-size-px); - } - &.icon-studip-gray-#{$icon} { - @include background-icon($icon, inactive, $big-icon-size-px); + &.icon-name-#{$icon} { + @include icon(before, $icon, $size: $big-icon-size-px); } } &.half { height: 144px; - background-size: 144px; - background-position: center; margin-top: 2em; margin-bottom: 0; } &.quarter { height: 72px; - background-size: 72px; - background-position: center; margin-top: 1em; margin-bottom: 0; } @@ -150,37 +125,16 @@ $large-icon-size-px: $large-icon-size * 1px; min-height: $big-icon-size-px; min-width: $big-icon-size-px; margin: 0 28px 0 28px; - background-repeat: no-repeat; - background-position: left center; @each $icon in $icons { - &.icon-black-#{$icon} { - @include background-icon($icon, info, $big-icon-size-px); - } - &.icon-white-#{$icon} { - @include background-icon($icon, info-alt, $big-icon-size-px); - } - &.icon-studip-blue-#{$icon} { - @include background-icon($icon, $size: $big-icon-size-px); - } - &.icon-studip-red-#{$icon} { - @include background-icon($icon, status-red, $big-icon-size-px); - } - &.icon-studip-yellow-#{$icon} { - @include background-icon($icon, status-yellow, $big-icon-size-px); - } - &.icon-studip-green-#{$icon} { - @include background-icon($icon, status-green, $big-icon-size-px); - } - &.icon-studip-gray-#{$icon} { - @include background-icon($icon, inactive, $big-icon-size-px); + &.icon-name-#{$icon} { + @include icon(before, $icon, $size: $big-icon-size-px); } } &.quarter { min-height: $large-icon-size-px; min-width: $large-icon-size-px; - background-size: $large-icon-size-px; } } @@ -357,56 +311,29 @@ $large-icon-size-px: $large-icon-size * 1px; width: calc(50% - 96px); height: 64px; display: inline-block; - border-top: solid 4px; + border-top: solid 4px var(--cw-headline-border-color); content: ''; } - @each $name, $hex in $border-colors { - &.border-#{'' + $name}::before, - &.border-#{'' + $name}::after { - border-color: $hex; - } - } .icon-layer { - background-repeat: no-repeat; - background-position: center; - background-size: 128px; + display: inline-flex; + align-items: center; + flex-direction: column; height: 128px; width: 192px; - display: inline-block; margin: auto; @each $icon in $icons { - &.icon-black-#{$icon} { - @include background-icon($icon, info, 128px); - } - &.icon-white-#{$icon} { - @include background-icon($icon, info-alt, 128px); - } - &.icon-studip-blue-#{$icon} { - @include background-icon($icon, $size: 128px); - } - &.icon-studip-red-#{$icon} { - @include background-icon($icon, status-red, 128px); - } - &.icon-studip-yellow-#{$icon} { - @include background-icon($icon, status-yellow, 128px); - } - &.icon-studip-green-#{$icon} { - @include background-icon($icon, status-green, 128px); - } - &.icon-studip-gray-#{$icon} { - @include background-icon($icon, inactive, 128px); + &.icon-name-#{$icon} { + @include icon(before, $icon, $size: 128px); } } &.half { height: 128px; - background-size: 128px; } &.quarter { height: 64px; width: 96px; - background-size: 64px; } } &.half { @@ -425,12 +352,8 @@ $large-icon-size-px: $large-icon-size * 1px; width: calc(100% - 64px); min-height: 350px; margin: 0 auto; - border-bottom: solid 4px; - @each $name, $hex in $border-colors { - &.border-#{'' + $name} { - border-color: $hex; - } - } + border-bottom: solid 4px var(--cw-headline-border-color); + .cw-block-headline-title { h1 { border: none; @@ -504,39 +427,21 @@ $large-icon-size-px: $large-icon-size * 1px; } &.bigicon_top { .icon-layer { - background-position: center; + display: flex; + flex-direction: column; + align-items: center; height: 98px; margin-top: 2em; margin-bottom: 1em; @each $icon in $icons { - &.icon-black-#{$icon} { - @include background-icon($icon, info, 98px); - } - &.icon-white-#{$icon} { - @include background-icon($icon, info-alt, 98px); - } - &.icon-studip-blue-#{$icon} { - @include background-icon($icon, $size: 98px); - } - &.icon-studip-red-#{$icon} { - @include background-icon($icon, status-red, 98px); - } - &.icon-studip-yellow-#{$icon} { - @include background-icon($icon, status-yellow, 98px); - } - &.icon-studip-green-#{$icon} { - @include background-icon($icon, status-green, 98px); - } - &.icon-studip-gray-#{$icon} { - @include background-icon($icon, inactive, 98px); + &.icon-name-#{$icon} { + @include icon(before, $icon, $size: 98px); } } &.half { - background-size: 72px; height: 72px; - background-position: center; } } @@ -558,32 +463,16 @@ $large-icon-size-px: $large-icon-size * 1px; } } &.bigicon_before { + display: flex; + align-items: center; min-height: 300px; .icon-layer { min-height: 92px; min-width: 92px; - background-position: 0 center; + @each $icon in $icons { - &.icon-black-#{$icon} { - @include background-icon($icon, info, 92px); - } - &.icon-white-#{$icon} { - @include background-icon($icon, info-alt, 92px); - } - &.icon-studip-blue-#{$icon} { - @include background-icon($icon, $size: 92px); - } - &.icon-studip-red-#{$icon} { - @include background-icon($icon, status-red, 92px); - } - &.icon-studip-yellow-#{$icon} { - @include background-icon($icon, status-yellow, 92px); - } - &.icon-studip-green-#{$icon} { - @include background-icon($icon, status-green, 92px); - } - &.icon-studip-gray-#{$icon} { - @include background-icon($icon, inactive, 92px); + &.icon-name-#{$icon} { + @include icon(before, $icon, $size: 92px); } } } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/iframe.scss b/resources/assets/stylesheets/scss/courseware/blocks/iframe.scss index 6bba2ab..bb2c391 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/iframe.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/iframe.scss @@ -3,12 +3,12 @@ .cw-block-iframe { .cw-block-content { iframe { - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); width: calc(100% - 2px); } .cw-block-iframe-cc-data { - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); border-top: none; margin-top: -6px; padding-top: 10px; diff --git a/resources/assets/stylesheets/scss/courseware/blocks/keypoint.scss b/resources/assets/stylesheets/scss/courseware/blocks/keypoint.scss index 7e1040a..a7b8470 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/keypoint.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/keypoint.scss @@ -11,8 +11,8 @@ left: 0; height: 48px; width: 48px; - background-color: var(--white); - border: solid 4px var(--black); + background-color: var(--color--global-background); + border: solid 4px transparent; border-radius: 64px; padding: 16px; margin: 1px 0; diff --git a/resources/assets/stylesheets/scss/courseware/blocks/link.scss b/resources/assets/stylesheets/scss/courseware/blocks/link.scss index bfa286d..609c6ed 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/link.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/link.scss @@ -6,13 +6,11 @@ } .cw-link { - border: solid thin var(--content-color-40); - color: var(--base-color); - height: 20px; + border: solid thin var(--color--highlight); + color: var(--color--highlight); padding: 1em; .cw-link-title { - margin-left: 3em; &.unit { header { font-size: 16px; @@ -21,29 +19,16 @@ } &:hover { - background-color: var(--base-color); - border: solid thin var(--base-color); - color: var(--white); + background-color: var(--color--highlight); + color: var(--color--highlight-contrast); } &.internal { - @include background-icon(link-intern, $size: 28px); - background-position: 1em 50%; - background-repeat: no-repeat; - - &:hover { - @include background-icon(link-intern, info-alt, 28px); - } + @include icon(before, link-intern, $size: 28px, $align: middle, $padding: 8px); } &.external { - @include background-icon(link-extern, $size: 28px); - background-position: 1em 50%; - background-repeat: no-repeat; - - &:hover { - @include background-icon(link-extern, info-alt, 28px); - } + @include icon(before, link-extern, $size: 28px, $align: middle, $padding: 8px); .cw-link-og-image { display: inline-block; @@ -69,7 +54,7 @@ } .cw-link-og-description { - color: var(--base-color-80); + color: var(--color--font-secondary); text-align: justify; } } @@ -78,6 +63,7 @@ &.unit { height: unset; display: flex; + gap: 8px; .cw-unit-link { background-repeat: no-repeat; @@ -95,10 +81,10 @@ &:hover { background-color: unset; - border: solid thin var(--base-color); + border: solid thin var(--color--highlight); .cw-link-title { header { - color: var(--active-color); + color: var(--color--content-link-hover); } } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/lti.scss b/resources/assets/stylesheets/scss/courseware/blocks/lti.scss index 5f4a82a..9d48a67 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/lti.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/lti.scss @@ -3,16 +3,14 @@ .cw-block-lti { .cw-block-content { .cw-block-lti-content { - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); box-sizing: border-box; } .cw-block-lti-icon-tool { - @include background-icon(plugin, info, 24px); - background-repeat: no-repeat; + @include icon(before, plugin, $size: 24px, $align: middle); display: block; - padding: 16px 16px 16px 40px; - background-position: 10px center; + padding: 16px; overflow: hidden; text-overflow: ellipsis; } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/table-of-contents.scss b/resources/assets/stylesheets/scss/courseware/blocks/table-of-contents.scss index 76bc53c..fac4948 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/table-of-contents.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/table-of-contents.scss @@ -10,17 +10,17 @@ .cw-block-table-of-contents-list { padding: 0; list-style: none; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); li { &:not(:last-child) { - border-bottom: solid thin var(--dark-gray-color-30); + border-bottom: solid thin var(--color--courseware-border-active); } a { display: block; padding: 1em; } &:hover { - background-color: fade-out($dark-gray-color-75, 0.8); + background-color: var(--color--courseware-background-highlight); } } } @@ -28,14 +28,14 @@ .cw-block-table-of-contents-list-details { padding: 0; list-style: none; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); li { &:not(:last-child) { - border-bottom: solid thin var(--dark-gray-color-30); + border-bottom: solid thin var(--color--courseware-border-active); } &:hover { - background-color: fade-out($dark-gray-color-75, 0.8); + background-color: var(--color--courseware-background-highlight); } a { display: block; @@ -58,7 +58,7 @@ p, p:hover { - color: var(--black); + color: var(--color--font-primary); } } diff --git a/resources/assets/stylesheets/scss/courseware/blocks/timeline.scss b/resources/assets/stylesheets/scss/courseware/blocks/timeline.scss index 49256b7..d928786 100644 --- a/resources/assets/stylesheets/scss/courseware/blocks/timeline.scss +++ b/resources/assets/stylesheets/scss/courseware/blocks/timeline.scss @@ -21,7 +21,7 @@ content:""; width: 3px; height: 100%; - background: var(--content-color-40); + background: var(--color--courseware-border-default); left: 50%; top: 0; position: absolute; @@ -40,7 +40,7 @@ @extend %clearfix; .cw-timeline-item-icon { - background: var(--white); + background: var(--color--global-background); width: 50px; height: 50px; position: absolute; @@ -51,73 +51,28 @@ @each $name, $color in $tile-colors { &.cw-timeline-item-icon-color-#{"" + $name} { border: solid 2px $color; + color: $color; } } border-radius: 50%; - img { + .studip-icon { position: relative; top: 9px; left: 9px; - - &.charcoal { - filter: brightness(0) saturate(100%) invert(22%) sepia(29%) saturate(364%) hue-rotate(168deg) brightness(87%) contrast(79%); - } - &.royal-purple { - filter: brightness(0) saturate(100%) invert(35%) sepia(43%) saturate(658%) hue-rotate(234deg) brightness(100%) contrast(87%); - } - &.iguana-green { - filter: brightness(0) saturate(100%) invert(74%) sepia(9%) saturate(1885%) hue-rotate(76deg) brightness(86%) contrast(88%); - } - &.queen-blue { - filter: brightness(0) saturate(100%) invert(44%) sepia(10%) saturate(2086%) hue-rotate(178deg) brightness(88%) contrast(80%); - } - &.verdigris { - filter: brightness(0) saturate(100%) invert(64%) sepia(11%) saturate(4959%) hue-rotate(131deg) brightness(103%) contrast(49%); - } - &.mulberry { - filter: brightness(0) saturate(100%) invert(49%) sepia(16%) saturate(1665%) hue-rotate(271deg) brightness(88%) contrast(95%); - } - &.pumpkin { - filter: brightness(0) saturate(100%) invert(38%) sepia(86%) saturate(1993%) hue-rotate(13deg) brightness(104%) contrast(108%); - } - &.sunglow { - filter: brightness(0) saturate(100%) invert(93%) sepia(69%) saturate(6824%) hue-rotate(313deg) brightness(102%) contrast(100%); - } - &.apple-green { - filter: brightness(0) saturate(100%) invert(69%) sepia(5%) saturate(5203%) hue-rotate(42deg) brightness(100%) contrast(84%); - } - &.studip-blue { - filter: brightness(0) saturate(100%) invert(26%) sepia(19%) saturate(1783%) hue-rotate(177deg) brightness(96%) contrast(93%); - } - &.studip-lightblue { - filter: brightness(0) saturate(100%) invert(91%) sepia(12%) saturate(190%) hue-rotate(190deg) brightness(104%) contrast(89%); - } - &.studip-red { - filter: brightness(0) saturate(100%) invert(8%) sepia(95%) saturate(6904%) hue-rotate(1deg) brightness(95%) contrast(109%); - } - &.studip-green { - filter: brightness(0) saturate(100%) invert(27%) sepia(85%) saturate(1531%) hue-rotate(109deg) brightness(95%) contrast(101%); - } - &.studip-yellow { - filter: brightness(0) saturate(100%) invert(94%) sepia(14%) saturate(7314%) hue-rotate(330deg) brightness(103%) contrast(101%); - } - &.studip-gray { - filter: brightness(0) saturate(100%) invert(46%) sepia(1%) saturate(2621%) hue-rotate(169deg) brightness(87%) contrast(87%); - } } } .cw-timeline-item-content { width: 40%; - background: var(--white); + background: var(--color--global-background); padding: 20px; transition: all var(--transition-duration) ease; h3 { padding: 15px; - color: var(--white); + color: var(--color--font-inverted); margin: -20px -20px 0 -20px; font-weight: 700; min-height: 1.1em; @@ -125,7 +80,7 @@ article { min-height: 2em; - border: solid thin var(--content-color-20); + border: solid thin var(--color--courseware-border-active); border-top: none; margin: 0 -20px; padding: 15px; diff --git a/resources/assets/stylesheets/scss/courseware/comments.scss b/resources/assets/stylesheets/scss/courseware/comments.scss index cec94b0..ef989fc 100644 --- a/resources/assets/stylesheets/scss/courseware/comments.scss +++ b/resources/assets/stylesheets/scss/courseware/comments.scss @@ -23,14 +23,14 @@ .cw-structural-element-comment-create, .cw-block-feedback-create, .cw-block-comment-create { - border-top: solid thin var(--content-color-40); + border-top: solid thin var(--color--courseware-border-default); padding: 8px 1em 0 1em; textarea { width: calc(100% - 6px); resize: none; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); &:active { - border: solid thin var(--content-color-80); + border: solid thin var(--color--courseware-border-active); } } } diff --git a/resources/assets/stylesheets/scss/courseware/containers/accordion.scss b/resources/assets/stylesheets/scss/courseware/containers/accordion.scss index 5cbd2df..87e45eb 100644 --- a/resources/assets/stylesheets/scss/courseware/containers/accordion.scss +++ b/resources/assets/stylesheets/scss/courseware/containers/accordion.scss @@ -4,7 +4,7 @@ .cw-block-wrapper-active { .cw-container-accordion-block-list:empty { height: 4em; - border: dashed 2px var(--content-color-40); + border: dashed 2px var(--color--courseware-border-default); } } diff --git a/resources/assets/stylesheets/scss/courseware/containers/default-container.scss b/resources/assets/stylesheets/scss/courseware/containers/default-container.scss index 02317f9..4860b9e 100644 --- a/resources/assets/stylesheets/scss/courseware/containers/default-container.scss +++ b/resources/assets/stylesheets/scss/courseware/containers/default-container.scss @@ -21,13 +21,14 @@ background-color: var(--color--content-box-header); padding: 4px 10px 4px 22px; + @include highlight-anchor; .cw-container-header-toggle { - display: inline-block; + display: inline-flex; + align-items: center; width: calc(100% - 40px); } span { - color: var(--base-color); font-weight: 700; line-height: 2em; font-size: 16px; @@ -37,11 +38,6 @@ } } - img { - vertical-align: middle; - margin-bottom: 2px; - } - .cw-container-actions { position: relative; float: right; diff --git a/resources/assets/stylesheets/scss/courseware/containers/list.scss b/resources/assets/stylesheets/scss/courseware/containers/list.scss index 063adda..0fbf55d 100644 --- a/resources/assets/stylesheets/scss/courseware/containers/list.scss +++ b/resources/assets/stylesheets/scss/courseware/containers/list.scss @@ -8,7 +8,7 @@ .cw-container-list-block-list:empty { height: 4em; - border: dashed 2px var(--content-color-40); + border: dashed 2px var(--color--courseware-border-default); } } diff --git a/resources/assets/stylesheets/scss/courseware/containers/tabs.scss b/resources/assets/stylesheets/scss/courseware/containers/tabs.scss index 5ff8789..384faf7 100644 --- a/resources/assets/stylesheets/scss/courseware/containers/tabs.scss +++ b/resources/assets/stylesheets/scss/courseware/containers/tabs.scss @@ -13,7 +13,7 @@ .cw-container-tabs-block-list:empty { height: 4em; - border: dashed 2px var(--content-color-40); + border: dashed 2px var(--color--courseware-border-default); margin: 5px; } diff --git a/resources/assets/stylesheets/scss/courseware/dashboard.scss b/resources/assets/stylesheets/scss/courseware/dashboard.scss index a3e9dd3..3734fb1 100644 --- a/resources/assets/stylesheets/scss/courseware/dashboard.scss +++ b/resources/assets/stylesheets/scss/courseware/dashboard.scss @@ -72,7 +72,7 @@ padding: 0; .cw-activity-item { - border-bottom: solid thin var(--content-color-40); + border-bottom: solid thin var(--color--courseware-border-default); padding: 0.5em; &:last-child { diff --git a/resources/assets/stylesheets/scss/courseware/layouts/call-to-action.scss b/resources/assets/stylesheets/scss/courseware/layouts/call-to-action.scss index 2e5e3b9..f5ad9ee 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/call-to-action.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/call-to-action.scss @@ -1,19 +1,20 @@ @use '../../../mixins.scss' as *; .cw-call-to-action { - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); .action-button { width: 100%; - background-color: var(--activity-color-20); + background-color: var(--color--global-background); border: none; text-align: left; padding: 1em; cursor: pointer; - img { - margin: 0 1em; + .studip-icon { + display: inline-block; vertical-align: middle; + margin-right: 1em; } } }
\ No newline at end of file diff --git a/resources/assets/stylesheets/scss/courseware/layouts/collapsible.scss b/resources/assets/stylesheets/scss/courseware/layouts/collapsible.scss index e1acb44..15ffaed 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/collapsible.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/collapsible.scss @@ -5,27 +5,21 @@ margin-bottom: -1px; .cw-collapsible-title { - @include background-icon(arr_1right); - background-position: 6px center; - background-repeat: no-repeat; + @include icon(before, arr_1right, $align: middle, $padding: 4px); background-color: var(--color--content-box-header); - padding: 0.5em 2em; + padding: 0.5em; margin: 0; font-weight: 600; - color: var(--base-color); + color: var(--color--highlight); cursor: pointer; &.cw-collapsible-open { - @include background-icon(arr_1down); + @include icon(before, arr_1down, $align: middle, $padding: 4px); .cw-container-list-sort-mode { margin-top: 8px; } } - - img { - vertical-align: top; - } } .cw-collapsible-content.cw-collapsible-content-open { diff --git a/resources/assets/stylesheets/scss/courseware/layouts/companion.scss b/resources/assets/stylesheets/scss/courseware/layouts/companion.scss index dc80d39..229f436 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/companion.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/companion.scss @@ -19,12 +19,12 @@ $companion-types: ( max-width: calc(100% - 140px); height: 120px; z-index: 42000; - border: solid thin var(--content-color-40); - background-color: var(--white); + border: solid thin var(--color--courseware-border-default); + background-color: var(--color--global-background); background-repeat: no-repeat; background-position: 1em center; background-size: 100px; - box-shadow: 5px 5px var(--dark-gray-color-10); + box-shadow: 5px 5px var(--color--courseware-border-default); padding-left: 120px; transform: translateX(100%); transition: transform .5s ease; @@ -46,27 +46,13 @@ $companion-types: ( top: 25%; padding: 0 1em; } - - .cw-compantion-overlay-close { - @include background-icon(decline); - background-color: var(--white); - background-repeat: no-repeat; - - position: absolute; - top: 7px; - right: 7px; - height: var(--icon-size-default); - width: var(--icon-size-default); - border: none; - cursor: pointer; - } } .cw-companion-box { display: flex; height: 120px; - border: solid thin var(--content-color-40); - background-color: var(--white); + border: solid thin var(--color--courseware-border-default); + background-color: var(--color--global-background); background-repeat: no-repeat; background-position: 1em center; background-size: 100px; @@ -90,6 +76,6 @@ $companion-types: ( .cw-companion-message { margin: 0 1em 10px 0; - color: var(--black); + color: var(--color--font-primary); } } diff --git a/resources/assets/stylesheets/scss/courseware/layouts/import-zip.scss b/resources/assets/stylesheets/scss/courseware/layouts/import-zip.scss index 5ffd9a2..3b5f1eb 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/import-zip.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/import-zip.scss @@ -7,7 +7,7 @@ } .progress-bar-wrapper { width: 100%; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); .progress-bar { display: flex; @@ -16,7 +16,7 @@ color: white; text-align: center; white-space: nowrap; - background-color: var(--base-color); + background-color: var(--color--highlight); } } } diff --git a/resources/assets/stylesheets/scss/courseware/layouts/progress.scss b/resources/assets/stylesheets/scss/courseware/layouts/progress.scss index 822294f..5cf7ac6 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/progress.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/progress.scss @@ -30,7 +30,7 @@ } .cw-unit-progress-subchapter-list { - border-top: solid thin var(--content-color-40); + border-top: solid thin var(--color--courseware-border-default); padding: 0 1em 0 1em; .cw-unit-empty-info { @@ -41,7 +41,7 @@ .cw-unit-progress-item { display: block; - border-bottom: solid thin var(--content-color-40); + border-bottom: solid thin var(--color--courseware-border-default); padding: 10px 0; &:hover { @@ -60,7 +60,7 @@ .cw-unit-progress-item-value { width: 70px; - color: var(--base-color); + color: var(--color--highlight); font-size: xx-large; .cw-progress-circle { @@ -70,7 +70,7 @@ } .cw-unit-progress-item-description { - color: var(--base-color); + color: var(--color--highlight); padding: 0.5em 0 0 1em; text-overflow: ellipsis; overflow: hidden; @@ -85,7 +85,7 @@ padding: 0; width: 5em; height: 5em; - background-color: var(--dark-gray-color-10); + background-color: var(--color--courseware-background-highlight); border-radius: 50%; line-height: 5em; @@ -109,7 +109,7 @@ width: 5em; text-align: center; display: block; - color: var(--base-color); + color: var(--color--highlight); z-index: 2; } @@ -131,14 +131,14 @@ width: 5em; height: 5em; border-radius: 50%; - border: 0.45em solid var(--base-color); + border: 0.45em solid var(--color--highlight); box-sizing: border-box; } &.over50 .first50-bar { position: absolute; clip: rect(0, 5em, 5em, 2.5em); - background-color: var(--base-color); + background-color: var(--color--highlight); border-radius: 50%; width: 5em; height: 5em; diff --git a/resources/assets/stylesheets/scss/courseware/layouts/radioset.scss b/resources/assets/stylesheets/scss/courseware/layouts/radioset.scss index 673ed2b..d867fce 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/radioset.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/radioset.scss @@ -27,12 +27,13 @@ form.default .cw-radioset { width: 100%; margin: 0; cursor: pointer; - @include background-icon(radiobutton-unchecked); + @include icon(after, radiobutton-unchecked); background-position: center 104px; background-repeat: no-repeat; + color: var(--color--highlight); .label-text { - height: 48px; + height: 42px; max-width: 80%; overflow: hidden; display: grid; @@ -48,7 +49,7 @@ form.default .cw-radioset { @each $type, $icon in $radio-icons { &.#{$type} { - @include background-icon(#{$icon}, $size: 48px); + @include icon(before, #{$icon}, $size: 48px); } } } @@ -68,14 +69,15 @@ form.default .cw-radioset { } &.selected { - border-color: var(--base-color); + border-color: var(--color--highlight); + color: var(--color--highlight); background-color: var(--color--tile-background-active); label { - @include background-icon(check-circle); + @include icon(after, check-circle); .label-icon { @each $type, $icon in $radio-icons { &.#{$type} { - @include background-icon(#{$icon}, $size: 48px); + @include icon(before, #{$icon}, $size: 48px); } } } diff --git a/resources/assets/stylesheets/scss/courseware/layouts/ribbon.scss b/resources/assets/stylesheets/scss/courseware/layouts/ribbon.scss index c04407b..c256fe1 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/ribbon.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/ribbon.scss @@ -16,7 +16,7 @@ $consum_ribbon_width: calc(100% - 58px); .cw-ribbon-wrapper-consume { padding-top: 7px; padding-bottom: 15px; - background-color: var(--white); + background-color: var(--color--global-background); z-index: 42; } @@ -25,7 +25,7 @@ $consum_ribbon_width: calc(100% - 58px); height: 15px; left: 0; width: calc(100% - 1em); - background-color: var(--white); + background-color: var(--color--global-background); z-index: 40; } @@ -34,7 +34,7 @@ $consum_ribbon_width: calc(100% - 58px); top: 40px; height: 20px; width: calc(100% - 314px); - background-color: var(--white); + background-color: var(--color--global-background); z-index: 39; } @@ -43,7 +43,7 @@ $consum_ribbon_width: calc(100% - 58px); top: 108px; height: 16px; width: calc(100% - 314px); - background-color: var(--white); + background-color: var(--color--global-background); z-index: 39; } @@ -61,7 +61,7 @@ $consum_ribbon_width: calc(100% - 58px); margin-bottom: 15px; padding: 0 2em; justify-content: space-between; - background-color: var(--dark-gray-color-10); + background-color: var(--color--content-bar-background); &.cw-ribbon-sticky { position: fixed; @@ -82,33 +82,26 @@ $consum_ribbon_width: calc(100% - 58px); padding: 1px 2px; border: none; background-color: transparent; - background-repeat: no-repeat; - background-position: center; - background-size: 24px; + color: var(--color--highlight); cursor: pointer; &.cw-ribbon-button-menu { - @include background-icon(table-of-contents); + @include icon(before, table-of-contents, $align: middle); } &.cw-ribbon-button-prev { - @include background-icon(arr_1left, $size: 24px); + @include icon(before, arr_1left, $size: 24px, $align: middle); margin: 0 0.5em 0 0; } &.cw-ribbon-button-next { - @include background-icon(arr_1right, $size: 24px); - margin: 0 0.5em 0 0; - } - - &.cw-ribbon-button-prev-disabled { - @include background-icon(arr_1left, inactive, 24px); + @include icon(before, arr_1right, $size: 24px, $align: middle); margin: 0 0.5em 0 0; - cursor: default; } - &.cw-ribbon-button-next-disabled { - @include background-icon(arr_1right, inactive, 24px); + &.cw-ribbon-button-prev.disabled, + &.cw-ribbon-button-next.disabled { + color: var(--color--font-inactive); margin: 0 0.5em 0 0; cursor: default; } @@ -125,12 +118,10 @@ $consum_ribbon_width: calc(100% - 58px); display: flex; align-items: center; + @include highlight-anchor; + .contentbar-icon { margin: 0 15px 0 10px; - - img { - vertical-align: middle; - } } } @@ -160,13 +151,7 @@ $consum_ribbon_width: calc(100% - 58px); text-overflow: ellipsis; white-space: nowrap; - a { - color: var(--base-color); - text-decoration: none; - &:hover { - color: var(--active-color); - } - } + @include highlight-anchor; img { vertical-align: text-top; @@ -178,6 +163,10 @@ $consum_ribbon_width: calc(100% - 58px); &.cw-ribbon-breadcrumb-item-current { flex-shrink: 1; + + .studip-icon { + display: inline-block; + } } } } @@ -203,44 +192,43 @@ $consum_ribbon_width: calc(100% - 58px); } } - button:not(.action-menu-icon) { + button:not(.action-menu-icon):not(.button) { height: 32px; width: 32px; border-radius: var(--border-radius-default); - border: solid thin var(--color--button-border); - background-color: var(--color--button-background); + border: solid thin var(--color--highlight); + background-color: var(--color--global-background); cursor: pointer; &:hover, &:active, &.active { - background: var(--color--button-focus); + background: var(--color--highlight); color: var(--color--font-inverted); } &.cw-ribbon-button-menu { - @include background-icon(table-of-contents); - background-repeat: no-repeat; - background-position: center; + color: var(--color--highlight); + @include icon(before, table-of-contents, $align: middle); &:hover, &:active, &.active { - @include background-icon(table-of-contents, info_alt); + color: var(--color--highlight-contrast); } } } .action-menu:not(.is-open) { - border: solid thin var(--color--button-border); + border: solid thin var(--color--highlight); border-radius: var(--border-radius-default); - background-color: var(--color--button-background); + background-color: var(--color--global-background); padding: 5px; &:hover, &:active, &.active { - background: var(--color--button-focus); + background: var(--color--highlight); .action-menu-icon span { background-color: var(--color--font-inverted); @@ -260,9 +248,9 @@ $consum_ribbon_width: calc(100% - 58px); } .cw-ribbon-tools { - background-color: var(--white); - border: solid thin var(--content-color-40); - box-shadow: 2px 2px var(--dark-gray-color-30); + background-color: var(--color--global-background); + border: solid thin var(--color--courseware-border-default); + box-shadow: 2px 2px var(--color--courseware-border-default); position: absolute; right: 0; top: 0; @@ -294,18 +282,22 @@ $consum_ribbon_width: calc(100% - 58px); .cw-ribbon-tool-content { height: 100%; width: 540px; - background-color: var(--white); + background-color: var(--color--global-background); padding: 0; overflow: hidden; + a { + text-decoration: none; + } + .cw-ribbon-tool-content-nav { position: sticky; height: 100%; top: 0; - background-color: var(--white); + background-color: var(--color--global-background); margin: 0; padding: 0; - color: var(--base-color); + color: var(--color--highlight); display: flex; z-index: 43; @@ -320,11 +312,9 @@ $consum_ribbon_width: calc(100% - 58px); right: 0; top: 12px; cursor: pointer; - @include background-icon(decline, $size: 24px); - background-repeat: no-repeat; - background-size: 24px; - background-position: center right; - background-color: var(--white); + @include icon(before, decline, $size: 24px, $align: baseline); + background-color: var(--color--global-background); + color: var(--color--highlight); } > .cw-ribbon-tool-content-tablist { @@ -348,7 +338,7 @@ $consum_ribbon_width: calc(100% - 58px); > .cw-tabs-content { border: none; - border-top: solid thin var(--content-color-40); + border-top: solid thin var(--color--courseware-border-default); padding: 0; height: calc(100% - 58px); @@ -359,7 +349,7 @@ $consum_ribbon_width: calc(100% - 58px); overflow-y: auto; overflow-x: hidden; scrollbar-width: thin; - scrollbar-color: var(--color--scrollbar-thumb) var(--white); + scrollbar-color: var(--color--scrollbar-thumb) var(--color--global-background); &.cw-ribbon-tool-blockadder-tab { height: 100%; @@ -387,7 +377,7 @@ $consum_ribbon_width: calc(100% - 58px); overflow-y: auto; overflow-x: hidden; scrollbar-width: thin; - scrollbar-color: var(--base-color) var(--white); + scrollbar-color: var(--color--scrollbar-thumb) var(--color--global-background); } } } @@ -453,7 +443,7 @@ $consum_ribbon_width: calc(100% - 58px); &.contentbar-button-menu, &.cw-ribbon-button-menu { - @include background-icon(table-of-contents, $size: 24px); + @include icon(before, table-of-contents, $size: 24px, $align: middle); } &.contentbar-button-zoom::before { diff --git a/resources/assets/stylesheets/scss/courseware/layouts/tabs.scss b/resources/assets/stylesheets/scss/courseware/layouts/tabs.scss index c79f950..3d4d49c 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/tabs.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/tabs.scss @@ -11,11 +11,11 @@ border-bottom: none; button { - background-color: var(--white); + background-color: var(--color--global-background); border: none; padding: 1em 0 4px 0; margin: 0 7px 0 21px; - color: var(--base-color); + color: var(--color--highlight); cursor: pointer; text-align: center; flex-grow: 1; @@ -28,14 +28,20 @@ margin-left: -14px; width: calc(100% + 28px); content: ''; - border-bottom: solid 3px var(--dark-gray-color-75); + border-bottom: solid 3px var(--color--tabs-marker-hover); transform: scaleX(0); transition: transform var(--transition-duration) ease-in-out; } + &.is-active { + &:after { + border-bottom: solid 3px var(--color--tabs-marker-active); + } + } + &.is-active, &:hover { - color: var(--black); + color: var(--color--font-primary); &:after { transform: scaleX(1); } @@ -43,44 +49,22 @@ @each $icon in $icons { &.cw-tabs-nav-icon-text-#{$icon} { - &::before { - @include background-icon($icon); - background-repeat: no-repeat; - background-position: left bottom; - - display: inline-block; - height: var(--icon-size-inline); - width: var(--icon-size-inline); - margin-bottom: -2px; - padding-left: 4px; - content: ''; - } + @include icon(before, $icon, $padding: 4px, $align: middle); } &.is-active.cw-tabs-nav-icon-text-#{$icon}, &.cw-tabs-nav-icon-text-#{$icon}:hover { - &::before { - @include background-icon($icon, info); - } + color: var(--color--font-primary); } } + + $cw-tabs-nav-icon-solo-size: 24px; @each $icon in $icons { &.cw-tabs-nav-icon-solo-#{$icon} { - &::before { - display: inline-block; - height: 24px; - width: 24px; - content: ''; - - @include background-icon($icon, $size: 24px); - background-repeat: no-repeat; - background-position: center; - } + @include icon(before, $icon, $size: $cw-tabs-nav-icon-solo-size); } &.is-active.cw-tabs-nav-icon-solo-#{$icon}, &.cw-tabs-nav-icon-solo-#{$icon}:hover { - &::before { - @include background-icon($icon, info, 24px); - } + color: var(--color--font-primary); } } } diff --git a/resources/assets/stylesheets/scss/courseware/layouts/tile.scss b/resources/assets/stylesheets/scss/courseware/layouts/tile.scss index 022dde9..0796d96 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/tile.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/tile.scss @@ -11,7 +11,7 @@ height: 420px; width: 270px; margin: 0; - background-color: var(--base-color); + background-color: var(--color--blue-1); &:last-child { margin-right: 0; } @@ -27,18 +27,18 @@ width: 100%; background-size: 100% auto; background-repeat: no-repeat; - background-color: var(--content-color-20); + background-color: var(--color--courseware-background-highlight); background-position: center; .overlay-handle { @extend .drag-handle; - background-color: var(--white); + background-color: var(--color--global-background); background-position: center !important; height: 22px; padding: 4px 8px; margin-top: 3px; float: left; - border-left: solid thin var(--content-color-20); + border-left: solid thin var(--color--courseware-background-highlight); } @@ -86,14 +86,14 @@ .description { height: 220px; padding: 14px; - color: var(--white); + color: var(--color--font-inverted); position: relative; display: block; header { font-size: 20px; line-height: 22px; - color: var(--white); + color: var(--color--font-inverted); border: none; width: 240px; overflow: hidden; @@ -148,15 +148,17 @@ footer { display: table-cell; height: 5em; - color: var(--white); + color: var(--color--font-inverted); overflow: hidden; text-overflow: ellipsis; vertical-align: bottom; p { + display: inline-flex; margin: 0; + gap: 4px; } - img { + svg { vertical-align: text-bottom; } } @@ -171,7 +173,7 @@ a.description:visited, a.description:hover { height: 210px; - color: var(--white); + color: var(--color--font-inverted); text-decoration: unset; } } diff --git a/resources/assets/stylesheets/scss/courseware/layouts/tree-units.scss b/resources/assets/stylesheets/scss/courseware/layouts/tree-units.scss index 63288b7..3e4e5bd 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/tree-units.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/tree-units.scss @@ -1,6 +1,6 @@ .cw-tree-units { .cw-tree-unit-title { - border-bottom: solid thin var(--content-color-40); + border-bottom: solid thin var(--color--courseware-border-default); color: var(--black); font-size: 16px; } @@ -36,7 +36,7 @@ background-size: 100% auto; background-repeat: no-repeat; background-position: center; - background-color: var(--content-color-20); + background-color: var(--color--courseware-background-highlight); } .cw-tree-units-header-details { @@ -53,7 +53,7 @@ } p { margin: 0; - color: var(--black); + color: var(--color--font-primary); } } } diff --git a/resources/assets/stylesheets/scss/courseware/layouts/tree.scss b/resources/assets/stylesheets/scss/courseware/layouts/tree.scss index 4708e3a..cff1e4e 100644 --- a/resources/assets/stylesheets/scss/courseware/layouts/tree.scss +++ b/resources/assets/stylesheets/scss/courseware/layouts/tree.scss @@ -23,7 +23,7 @@ > .cw-tree-item-wrapper { display: block; - border-bottom: solid thin var(--content-color-40); + border-bottom: solid thin var(--color--courseware-border-default); margin-bottom: 12px; > .cw-sortable-handle { @@ -67,9 +67,6 @@ border-bottom: none; font-size: 14px; width: calc(100% - 20px); - background-repeat: no-repeat; - background-position-y: center; - padding-left: 18px; margin-left: 4px; margin-bottom: 0; line-height: 28px; @@ -78,7 +75,7 @@ width: calc(100% - 38px); } - @include background-icon(bullet-dot, $size: 18px); + @include icon(before, bullet-dot, $size: 18px, $align: middle, $padding: 4px); } form { display: inline; @@ -86,13 +83,6 @@ } > a.cw-tree-item-link { display: inline-block; - - &:hover { - @include background-icon(bullet-dot, attention, 18px); - } - &.cw-tree-item-link-current { - @include background-icon(bullet-dot, info, 18px); - } } } @@ -126,21 +116,20 @@ .cw-tree-item-edit-button { opacity: 0; padding: 0 4px; - vertical-align: bottom; + vertical-align: text-bottom; border: none; background-color: transparent; cursor: pointer; - img { - vertical-align: middle; - } + color: var(--color--highlight); + &:focus { opacity: 1; } } &:hover { - background-color: var(--light-gray-color-20); - color: var(--active-color); + background-color: var(--color--sidebar-hover); + color: var(--color--content-link-hover); .cw-tree-item-edit-button { opacity: 1; @@ -148,12 +137,12 @@ } &.cw-tree-item-link-current { - color: var(--black); + color: var(--color--font-primary); font-weight: 600; cursor: default; &::before { - color: var(--black); + color: var(--color--font-primary); } } @@ -168,15 +157,15 @@ height: var(--icon-size-inline); vertical-align: top; float: right; - @include background-icon(#{$icon}, $size: $icon-size-inline); + @include icon(after, #{$icon}, $size: $icon-size-inline); } &:hover .cw-tree-item-flag-#{$type} { - @include background-icon(#{$icon}, $size: $icon-size-inline); + @include icon(after, #{$icon}, $size: $icon-size-inline); } &.cw-tree-item-link-current .cw-tree-item-flag-#{$type} { - @include background-icon(#{$icon}, $size: $icon-size-inline); + @include icon(after, #{$icon}, $size: $icon-size-inline); } } } @@ -190,7 +179,7 @@ width: var(--icon-size-inline); height: var(--icon-size-inline); vertical-align: top; - @include background-icon(accept, info, $icon-size-inline); + @include icon(after, accept, $size: $icon-size-inline); } &.cw-tree-item-sequential-percentage { @@ -201,7 +190,7 @@ .cw-tree-item-ghost { opacity: 0.6; - border: dashed 2px var(--content-color-40); + border: dashed 2px var(--color--courseware-border-default); height: 28px; margin-left: 24px !important; @@ -230,4 +219,17 @@ } } } + + .cw-tree-root-list > .cw-tree-item.cw-tree-item-adder > .cw-tree-item-wrapper { + border-bottom: none; + } + .cw-tree-item-adder { + .add-element { + border: none; + cursor: pointer; + background-color: transparent; + color: var(--color--highlight); + height: 28px; + } + } } diff --git a/resources/assets/stylesheets/scss/courseware/shelf.scss b/resources/assets/stylesheets/scss/courseware/shelf.scss index fb339b5..de9796d 100644 --- a/resources/assets/stylesheets/scss/courseware/shelf.scss +++ b/resources/assets/stylesheets/scss/courseware/shelf.scss @@ -2,7 +2,7 @@ .cw-contents-overview-teaser { max-width: 782px; - background-color: var(--content-color-20); + background-color: var(--color--courseware-background-highlight); background-image: url('#{$image-path}/courseware-keyvisual-negative.svg'); background-repeat: no-repeat; background-size: 196px; @@ -54,8 +54,8 @@ .cw-unit-items { .unit-ghost { - background: var(--white); - border: dashed 2px var(--content-color-40); + background: var(--color--global-background); + border: dashed 2px var(--color--courseware-border-default); } .unit-ghost .cw-tile { opacity: 0; diff --git a/resources/assets/stylesheets/scss/courseware/sortable.scss b/resources/assets/stylesheets/scss/courseware/sortable.scss index b0edc5a..989b285 100644 --- a/resources/assets/stylesheets/scss/courseware/sortable.scss +++ b/resources/assets/stylesheets/scss/courseware/sortable.scss @@ -102,8 +102,8 @@ } .container-ghost { - background: var(--white); - border: dashed 2px var(--content-color-40); + background: var(--color--global-background); + border: dashed 2px var(--color--courseware-border-default); margin-top: -5px; margin-bottom: 15px; @@ -128,8 +128,8 @@ } .block-ghost { - background: var(--white); - border: dashed 2px var(--content-color-40); + background: var(--color--global-background); + border: dashed 2px var(--color--courseware-border-default); padding-top: 5px; padding-left: 5px; height: 100px; diff --git a/resources/assets/stylesheets/scss/courseware/structural-element.scss b/resources/assets/stylesheets/scss/courseware/structural-element.scss index 8142aac..278c0db 100644 --- a/resources/assets/stylesheets/scss/courseware/structural-element.scss +++ b/resources/assets/stylesheets/scss/courseware/structural-element.scss @@ -160,16 +160,19 @@ padding-bottom: 1em; } +$cw-placeholder-image-size: 128px; .cw-structural-element-image-preview-placeholder { + display: flex; + flex-direction: row; + justify-content: center; width: 300px; - height: 200px; + height: $cw-placeholder-image-size; margin: 0 auto; - background-color: var(--color-image-placeholder-background); - background-size: 100% auto; - background-repeat: no-repeat; - background-position: center; - @include background-icon(courseware, $size: 128px); + background-color: var(--color--image-placeholder-background); + color: var(--color--image-placeholder-icon); + @include icon(before, courseware, $size: $cw-placeholder-image-size); margin-bottom: 1em; + padding: 36px 0; } .cw-element-permissions { @@ -197,8 +200,7 @@ height: 24px; border: none; background-color: transparent; - @include background-icon(trash); - background-repeat: no-repeat; + @include icon(before, trash, $align: middle); cursor: pointer; } } diff --git a/resources/assets/stylesheets/scss/courseware/tasks.scss b/resources/assets/stylesheets/scss/courseware/tasks.scss new file mode 100644 index 0000000..67658d0 --- /dev/null +++ b/resources/assets/stylesheets/scss/courseware/tasks.scss @@ -0,0 +1,12 @@ +.cw-taskgroup-task-item-solver-info { + display: inline-flex; + gap: 8px; +} + +.cw-task-group-peer-review-processes { + margin-block-start: 3rem; +} + +.courseware-dashboard-tasks > * + * { + margin-block-start: 2rem; +}
\ No newline at end of file diff --git a/resources/assets/stylesheets/scss/courseware/toolbar.scss b/resources/assets/stylesheets/scss/courseware/toolbar.scss index 78a67e2..927dbb9 100644 --- a/resources/assets/stylesheets/scss/courseware/toolbar.scss +++ b/resources/assets/stylesheets/scss/courseware/toolbar.scss @@ -12,8 +12,8 @@ .cw-toolbar-tools { width: 270px; min-height: 100%; - border: solid thin var(--content-color-40); - background-color: var(--white); + border: solid thin var(--color--courseware-border-default); + background-color: var(--color--global-background); overflow: hidden; position: relative; padding: 0 4px; @@ -40,7 +40,7 @@ .cw-toolbar-tool-content { overflow-y: auto; scrollbar-width: thin; - scrollbar-color: var(--color--scrollbar-thumb) var(--white); + scrollbar-color: var(--color--scrollbar-thumb) var(--color--global-background); padding-right: 6px; } @@ -85,8 +85,8 @@ .cw-toolbar-button-wrapper { position: sticky; top: 0; - background-color: var(--white); - border-bottom: solid thin var(--content-color-40); + background-color: var(--color--global-background); + border-bottom: solid thin var(--color--courseware-border-default); display: flex; z-index: 31; margin: 0 0 8px -4px; @@ -97,26 +97,28 @@ margin: 0 4px 0 4px; padding: 2px 8px 0 8px; border: none; - background-color: var(--white); - background-repeat: no-repeat; - background-position: center center; + background-color: var(--color--global-background); + color: var(--color--highlight); cursor: pointer; border-bottom: solid 2px transparent; &.cw-toolbar-button-toggle { - text-align: end; + display: flex; + flex-direction: row-reverse; + align-items: center; flex-grow: 1; } &.active { - border-bottom: solid 3px var(--dark-gray-color-75); + color: var(--color--font-primary); + border-bottom: solid 3px var(--color--tabs-marker-active); } } .cw-toolbar-spacer-right { z-index: 39; flex-shrink: 0; position: relative; - background-color: var(--white); + background-color: var(--color--global-background); width: 15px; height: calc(100% + 2px); } diff --git a/resources/assets/stylesheets/scss/courseware/variables.scss b/resources/assets/stylesheets/scss/courseware/variables.scss index 248e300..c746708 100644 --- a/resources/assets/stylesheets/scss/courseware/variables.scss +++ b/resources/assets/stylesheets/scss/courseware/variables.scss @@ -33,25 +33,6 @@ $tile-colors: ( studip-gray: #636a71, ); -$icon-colors: ( - icon-white: #ffffff, - icon-black: #000000, - icon-red: #cb1800, - icon-blue: #24437c, - icon-green: #00962d, - icon-gray: #6e6e6e, - icon-yellow: #ffad00 -); -$border-colors: ( - white: #ffffff, - black: #000000, - studip-red: #cb1800, - studip-blue: #24437c, - studip-green: #00962d, - studip-gray: #6e6e6e, - studip-yellow: #ffad00 -); - $blockadder-items: ( before-after: block-comparison, blubber: blubber, diff --git a/resources/assets/stylesheets/scss/courseware/widgets.scss b/resources/assets/stylesheets/scss/courseware/widgets.scss index cef91c5..87584a9 100644 --- a/resources/assets/stylesheets/scss/courseware/widgets.scss +++ b/resources/assets/stylesheets/scss/courseware/widgets.scss @@ -1,59 +1,7 @@ .cw-action-widget { - .cw-action-widget-show-toc { - @include background-icon(table-of-contents); + @each $name, $icon in $button-icons { + &-#{$name} button { + @include icon(before, $icon); + } } - .cw-action-widget-edit { - @include background-icon(edit); - } - .cw-action-widget-sort { - @include background-icon(arr_1sort); - } - .cw-action-widget-add { - @include background-icon(add); - } - .cw-action-widget-export { - @include background-icon(export); - } - .cw-action-widget-info { - @include background-icon(info); - } - .cw-action-widget-star { - @include background-icon(star); - } - .cw-action-widget-trash { - @include background-icon(trash); - } - .cw-action-widget-oer { - @include background-icon(oer-campus); - } - .cw-action-widget-remove-lock { - @include background-icon(lock-unlocked); - } -} - -.cw-export-widget { - .cw-export-widget-export { - @include background-icon(export); - } - .cw-export-widget-export-pdf { - @include background-icon(export); - } - .cw-export-widget-oer { - @include background-icon(share); - } -} - -.cw-import-widget { - .cw-import-widget-archive { - @include background-icon(import); - } - .cw-import-widget-copy { - @include background-icon(copy); - } - .cw-import-widget-import { - @include background-icon(import); - } - .cw-action-widget-link { - @include background-icon(group); - } -} +}
\ No newline at end of file diff --git a/resources/assets/stylesheets/scss/courseware/wizards.scss b/resources/assets/stylesheets/scss/courseware/wizards.scss index 953f510..21c2ce9 100644 --- a/resources/assets/stylesheets/scss/courseware/wizards.scss +++ b/resources/assets/stylesheets/scss/courseware/wizards.scss @@ -5,17 +5,17 @@ .cw-element-selector-item { display: block; width: 100%; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); padding: 0.5em; margin-bottom: 5px; - background-color: var(--white); - color: var(--base-color); + background-color: var(--color--global-background); + color: var(--color--highlight); text-align: left; cursor: pointer; &:hover { - color: var(--white); - background-color: var(--base-color); + color: var(--color--global-background); + background-color: var(--color--highlight); } } } @@ -25,7 +25,13 @@ form.default .courseware-structural-element-selector { padding-left: 0; .courseware-structural-element-selector-item { + .studip-icon { + display: inline-block; + } + .radiobutton { + display: inline-block; + height: var(--icon-size-default); background: none; border: none; padding: 0; @@ -39,7 +45,6 @@ form.default .courseware-structural-element-selector { display: inline-block; margin-bottom: 0; text-indent: 0; - vertical-align: middle; } img { diff --git a/resources/assets/stylesheets/scss/css_tree.scss b/resources/assets/stylesheets/scss/css_tree.scss index b30adc2..2785896 100644 --- a/resources/assets/stylesheets/scss/css_tree.scss +++ b/resources/assets/stylesheets/scss/css_tree.scss @@ -52,12 +52,11 @@ $css-tree-border: 1px solid var(--light-gray-color-80); input[type=checkbox] { display: none; + label { - @include icon(before, arr_1right); + @include icon(before, arr_1right, $align: bottom); cursor: pointer; &:before { transition: transform var(--transition-duration); - vertical-align: baseline; } } ~ ul { diff --git a/resources/assets/stylesheets/scss/dashboard.scss b/resources/assets/stylesheets/scss/dashboard.scss index ccf9f22..1ef490c 100644 --- a/resources/assets/stylesheets/scss/dashboard.scss +++ b/resources/assets/stylesheets/scss/dashboard.scss @@ -148,8 +148,8 @@ form div.files-search { .button { margin: 0; line-height: 1.5; - background-color: var(--color--button-background); - color: var(--brand-color-dark); + background-color: var(--color--global-background); + color: var(--color--highlight); min-width: auto; border: 1px solid var(--light-gray-color-40); border-left: none; @@ -157,10 +157,6 @@ form div.files-search { border-top-right-radius: var(--border-radius-search); border-bottom-right-radius: var(--border-radius-search); } - - img { - vertical-align: middle; - } } } diff --git a/resources/assets/stylesheets/scss/dialog.scss b/resources/assets/stylesheets/scss/dialog.scss index efdcc0e..5aa73f2 100644 --- a/resources/assets/stylesheets/scss/dialog.scss +++ b/resources/assets/stylesheets/scss/dialog.scss @@ -14,9 +14,9 @@ } .ui-dialog-titlebar { - background: var(--brand-color-darker); + background: var(--color--info); border: 0; - color: var(--contrast-content-white); + color: var(--color--info-contrast); font-size:1.3em; font-weight: normal; @@ -27,6 +27,7 @@ .ui-dialog-titlebar-close { @include square(32px); + color: var(--color--info-contrast); background: inherit; border: 0; line-height:32px; @@ -42,18 +43,14 @@ padding: 0; } .ui-icon { - @include square($icon-size-default); - @include background-icon(decline, info_alt); - background-position: 0; - display:inline-block; margin: 0; - left: 50%; top: 50%; transform: translate(-50%, -50%); - - &:hover{ - @include background-icon(decline, info_alt); + @include square($icon-size-default); + @include icon(before, decline); + &::before { + display: block; } } } @@ -116,15 +113,15 @@ } } .ui-dialog-titlebar-wiki { - @include background-icon(question-circle, info_alt, 24px); - background-position: center; - background-repeat: no-repeat; - display: inline-block; position: absolute; - @include square(32px); margin-top: -16px; top: 50%; right: 34px; // This is ugly but hard to avoid since the close button's position on a dialog is also hardcoded + @include icon(before, question-circle, $size: 24px); + @include square(32px); + &::before { + color: var(--color--info-contrast); + } } // Centered content in dialog @@ -145,28 +142,31 @@ min-width: 30em; .ui-dialog-titlebar { - background-color: var(--yellow); - color: text-contrast($yellow, $black, $white); + background-color: var(--color--attention); + color: var(--color--attention-contrast); text-align: left; } .ui-dialog-titlebar-close { + color: var(--color--attention-contrast); background: transparent; border: 0; .ui-icon, .ui-icon:hover { - @include background-icon(decline); - background-position: 0; + @include icon(before, decline); + &::before { + display: block; + } } } .ui-dialog-content { box-sizing: border-box; - @include background-icon(question-circle-full, status-yellow); - background-position: 12px 8px; - background-repeat: no-repeat; - background-size: 32px; - padding: 15px 15px 15px 55px; + padding: 15px; max-height: 60vh; + @include icon(before, question-circle-full, $size: 32px, $align: middle, $padding: 8px); + &::before { + color: var(--color--attention); + } } .ui-dialog-buttonpane { @@ -343,7 +343,7 @@ v u e d i a l o g display: flex; } .studip-dialog-header { - background: var(--base-color) none repeat scroll 0 0; + background: var(--color--info) none repeat scroll 0 0; border-bottom: 1px solid var(--dark-gray-color-10); color: var(--white); justify-content: space-between; @@ -356,12 +356,10 @@ v u e d i a l o g } } .studip-dialog-close-button { - @include background-icon(decline, info-alt); - background-repeat: no-repeat; - background-position-y: center; - background-color: transparent; + @include icon(before, decline, $align: text-bottom); border: none; - + background-color: transparent; + color: var(--color--info-contrast); width: 22px; height: 22px; margin-right: -10px; @@ -371,7 +369,7 @@ v u e d i a l o g .studip-dialog-content { color: var(--black); position: relative; - padding: 15px; + padding: 10px 15px; overflow-y: auto; min-width: 100%; box-sizing: border-box; @@ -385,9 +383,6 @@ v u e d i a l o g &.studip-dialog-warning, &.studip-dialog-alert { .studip-dialog-content { - padding: 15px 15px 15px 62px; - background-position: 12px center; - background-repeat: no-repeat; box-sizing: border-box; display: flex; align-items: center; @@ -396,24 +391,31 @@ v u e d i a l o g &.studip-dialog-alert { .studip-dialog-header { - background: var(--active-color) none repeat scroll 0 0; + background: var(--color--warning) none repeat scroll 0 0; + .studip-dialog-close-button { + color: var(--color--warning-contrast); + } } .studip-dialog-content { - @include background-icon(question-circle-full, attention, 32px); + @include icon(before, question-circle-full, $size: 32px, $align: middle, $padding: 8px); + &::before { + color: var(--color--warning); + } } } &.studip-dialog-warning { .studip-dialog-header { color: var(--black); - background: var(--activity-color) none repeat scroll 0 0; - } - .studip-dialog-close-button { - @include background-icon(decline); - border: none; - background-color: transparent; + background: var(--color--attention) none repeat scroll 0 0; + .studip-dialog-close-button { + color: var(--color--attention-contrast); + } } .studip-dialog-content { - @include background-icon(question-circle-full, status-yellow, 32px); + @include icon(before, question-circle-full, $size: 32px, $align: middle, $padding: 8px); + &::before { + color: var(--color--attention); + } } } &.studip-dialog-with-tab { diff --git a/resources/assets/stylesheets/scss/documents.scss b/resources/assets/stylesheets/scss/documents.scss index ee5f392..07836e1 100644 --- a/resources/assets/stylesheets/scss/documents.scss +++ b/resources/assets/stylesheets/scss/documents.scss @@ -40,13 +40,11 @@ line-height: 1.5em; a { - @include background-icon(folder-parent, $size: 24px); - background-position: left center; - background-repeat: no-repeat; + @include icon(before, folder-parent, $size: 24px); padding-left: 30px; } &:first-child a { - @include background-icon(folder-empty, $size: 24px); + @include icon(before, folder-empty, $size: 24px); } } } diff --git a/resources/assets/stylesheets/scss/files.scss b/resources/assets/stylesheets/scss/files.scss index c69bd2d..d94328a 100644 --- a/resources/assets/stylesheets/scss/files.scss +++ b/resources/assets/stylesheets/scss/files.scss @@ -108,7 +108,7 @@ div.file_select_possibilities, cursor: pointer; background-color: transparent; margin: 10px; - border: thin solid var(--content-color-20); + border: thin solid var(--color--tile-border); padding: 10px; width: $width; min-width: $width; @@ -122,16 +122,24 @@ div.file_select_possibilities, justify-content: space-around; align-items: center; text-align: center; - > img { + color: var(--color--highlight); + > svg { margin-left: auto; margin-right: auto; } - button img { + button svg { display: block; margin-left: auto; margin-right: auto; } + + &:hover { + border-color: var(--color--highlight); + color: var(--color--highlight-hover); + text-decoration: none; + + } } > .important-item { @@ -169,7 +177,7 @@ div.file_select_possibilities, font-size:0.7em; cursor: pointer; - img { + svg { width: 40%; height: 40%; display: block; @@ -190,10 +198,6 @@ div.file_select_possibilities, &:checked + label { background-color: var(--brand-color-darker); color: var(--contrast-content-white); - - img { - filter: invert(100%) brightness(200%); - } } } diff --git a/resources/assets/stylesheets/scss/forms.scss b/resources/assets/stylesheets/scss/forms.scss index dbed895..1a2b9c1 100644 --- a/resources/assets/stylesheets/scss/forms.scss +++ b/resources/assets/stylesheets/scss/forms.scss @@ -43,7 +43,7 @@ form.default { box-sizing: border-box; border: 1px solid var(--light-gray-color-40); border-radius: var(--border-radius-default); - color: var(--dark-gray-color); + color: var(--color--font-primary); max-width: $max-width-m; padding: 5px; vertical-align: middle; @@ -80,11 +80,7 @@ form.default { } input[list] { - @include background-icon(arr_1down); - - background-repeat: no-repeat; - background-position: center right 4px; - padding-right: 24px + @include icon(before, arr_1down, $padding: 4px, $align: middle); } textarea:not(.size-l) + .ck-editor { @@ -216,6 +212,7 @@ form.default { padding: 10px; margin: 0 0 10px -11px; width: calc(100% + 22px); + color: var(--color--font-primary); } // Insert invisible element that corrects double padding/margin at the @@ -286,13 +283,8 @@ form.default { // Special inputs label.file-upload { - @include background-icon(upload); - - background-repeat: no-repeat; - background-position: top left; - background-size: 20px 20px; + @include icon(before, upload, $size: 20px, $padding: 4px, $align: top); cursor: pointer; - padding-left: 30px; color: var(--base-color); input[type=file] { @@ -407,16 +399,13 @@ form.default { fieldset.collapsable { > legend { box-sizing: border-box; - @include background-icon(arr_1down); - background-position: 6px center; - background-repeat: no-repeat; + @include icon(before, arr_1down, $align: middle, $padding: 4px); cursor: pointer; - padding-left: 30px; } &.collapsed { > legend { - @include background-icon(arr_1right); + @include icon(before, arr_1right, $align: middle, $padding: 4px); margin-bottom: 0; } padding-bottom: 0; @@ -570,9 +559,10 @@ form.default { display: inline; width: calc(100% - 24px); } - img.icon { + div.icon { height: 2em; - margin-top: 0.5ex; + margin-top: 1ex; + color: var(--color--highlight); } } .multiquicksearch > li { diff --git a/resources/assets/stylesheets/scss/forum.scss b/resources/assets/stylesheets/scss/forum.scss index 4c7187a6..9c5efc6 100644 --- a/resources/assets/stylesheets/scss/forum.scss +++ b/resources/assets/stylesheets/scss/forum.scss @@ -3,7 +3,7 @@ $card-max-width: 300px; .forum { hr { - border-top: 1px solid $color--divider; + border-top: 1px solid var(--color--divider); border-bottom: none; border-left: none; border-right: none; @@ -115,7 +115,7 @@ $card-max-width: 300px; &::selection, *::selection { background-color: $yellow; - color: $color--font-primary; + color: var(--color--font-primary); } } @@ -144,12 +144,12 @@ $card-max-width: 300px; .card { box-sizing: border-box; - border: solid 1px $color--content-box-border; + border: solid 1px var(--color--content-box-border); margin: 0 0 15px; min-width: auto; &__header { - background-color: $color--fieldset-header; + background-color: var(--color--fieldset-header); font-size: 16px; padding: 10px; @@ -176,7 +176,7 @@ $card-max-width: 300px; .header { display: flex; - background-color: $color--fieldset-header; + background-color: var(--color--fieldset-header); &.--sticky-top { position: sticky; @@ -221,8 +221,8 @@ $card-max-width: 300px; align-items: center; justify-content: center; background: white; - border: 1px solid $base-color; - color: $base-color; + border: 1px solid var(--color--highlight); + color: var(--color--highlight); border-radius: 5px; padding: 7px; cursor: pointer; @@ -237,7 +237,7 @@ $card-max-width: 300px; } &:disabled { - border-color: $color--button-inactive-border; + border-color: var(--color--button-inactive-border); opacity: 0.5; cursor: not-allowed; } @@ -283,7 +283,7 @@ $card-max-width: 300px; display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: 10px; - color: $color--font-primary; + color: var(--color--font-primary); padding: 0 20px; .forum-illustration { @@ -299,7 +299,7 @@ $card-max-width: 300px; } p { - color: $color--font-secondary; + color: var(--color--font-secondary); } .buttons-container { @@ -337,7 +337,7 @@ $card-max-width: 300px; p { margin-top: 5px; - color: $color--font-secondary; + color: var(--color--font-secondary); } } @@ -349,7 +349,7 @@ $card-max-width: 300px; } p { - color: $color--font-secondary; + color: var(--color--font-secondary); } .discussion-category { @@ -389,9 +389,9 @@ $card-max-width: 300px; display: flex; align-items: center; justify-content: center; - color: $color--font-secondary; + color: var(--color--font-secondary); font-size: 10px; - border: 1px solid $color--action-menu-border; + border: 1px solid var(--color--action-menu-border); padding: 1px 5px; border-radius: 4px; } @@ -413,8 +413,8 @@ $card-max-width: 300px; } .card-group { - background-color: $color--tile-background; - border: 1px solid $color--button-inactive-border; + background-color: var(--color--tile-background); + border: 1px solid var(--color--button-inactive-border); padding-top: 4px; padding-right: 4px; margin-left: 4px; @@ -428,8 +428,8 @@ $card-max-width: 300px; } .topic-card { - background-color: $color--tile-background; - border: 1px solid $color--button-inactive-border; + background-color: var(--color--tile-background); + border: 1px solid var(--color--button-inactive-border); outline: transparent; height: 100%; min-height: 180px; @@ -486,7 +486,7 @@ $card-max-width: 300px; &:hover:not(.--new-topic), &:focus:not(.--new-topic) { - background-color: $color--tile-background-hover; + background-color: var(--color--tile-background-hover); } &.--with-hover-style:hover, @@ -528,7 +528,7 @@ $card-max-width: 300px; &__text { p { - color: $color--font-primary; + color: var(--color--font-primary); } img { @@ -542,7 +542,7 @@ $card-max-width: 300px; justify-content: space-between; align-items: center; margin-bottom: 10px; - color: $color--font-secondary; + color: var(--color--font-secondary); .author-name { font-size: 14px; @@ -588,12 +588,12 @@ $card-max-width: 300px; border: none; position: relative; padding-left: 2rem; - color: $color--font-primary; + color: var(--color--font-primary); white-space: pre-line; - background-color: $color--tile-background !important; + background-color: var(--color--tile-background) !important; &:before { - color: $color--font-secondary; + color: var(--color--font-secondary); position: absolute; font-size: 4rem; width: 2rem; @@ -637,13 +637,13 @@ $card-max-width: 300px; .add-reaction-icon { width: 20px; height: auto; - fill: $color--font-secondary; + fill: var(--color--font-secondary); transition: fill 0.2s; } &:hover { .add-reaction-icon { - fill: $base-color; + fill: var(--color--highlight); } } } @@ -656,7 +656,7 @@ $card-max-width: 300px; z-index: 10; display: flex; background: white; - border: 1px solid $base-color; + border: 1px solid var(--color--highlight); border-radius: 5px; cursor: pointer; overflow: hidden; @@ -689,7 +689,7 @@ $card-max-width: 300px; } .discussion { - background-color: $color--main-navigation-background; + background-color: var(--color--main-navigation-background); &__status, &__body, @@ -708,7 +708,7 @@ $card-max-width: 300px; flex-wrap: wrap; justify-content: space-between; gap: 10px; - color: $color--font-secondary; + color: var(--color--font-secondary); } .post__author-image { @@ -736,7 +736,7 @@ $card-max-width: 300px; } &__author-name { - color: $color--font-secondary; + color: var(--color--font-secondary); font-weight: 600; } @@ -757,15 +757,15 @@ $card-max-width: 300px; padding: 3px; align-items: center; justify-content: center; - background-color: $color--tile-background; - border: 1px solid $color--action-menu-border; + background-color: var(--color--tile-background); + border: 1px solid var(--color--action-menu-border); border-radius: 4px; transition: background-color 1s ease; z-index: 1; &:hover, &:focus { - background-color: $color--tile-background-hover; + background-color: var(--color--tile-background-hover); } } @@ -821,7 +821,7 @@ $card-max-width: 300px; .user-group { &--moderators { img.user-profile { - border-color: $base-color; + border-color: var(--color--highlight); } } @@ -835,7 +835,7 @@ $card-max-width: 300px; &__title { font-size: 14px; font-weight: bold; - color: $color--font-primary; + color: var(--color--font-primary); margin: 0; } @@ -865,7 +865,7 @@ $card-max-width: 300px; &:hover, &:focus { - background-color: $color--tile-background-hover; + background-color: var(--color--tile-background-hover); } &__user { @@ -922,7 +922,7 @@ $card-max-width: 300px; } .moderator img.user-profile { - border: 2px solid $base-color; + border: 2px solid var(--color--highlight); } .remained-users { @@ -936,8 +936,8 @@ $card-max-width: 300px; &__count { cursor: pointer; font-size: 14px; - color: $color--font-secondary; - background-color: $color--fieldset-header; + color: var(--color--font-secondary); + background-color: var(--color--fieldset-header); width: 25px; height: 25px; border-radius: 100%; @@ -976,8 +976,8 @@ $card-max-width: 300px; position: absolute; display: none; background: white; - border: 1px solid $base-color; - color: $base-color; + border: 1px solid var(--color--highlight); + color: var(--color--highlight); border-radius: 5px; gap: 5px; cursor: pointer; @@ -1010,11 +1010,11 @@ $card-max-width: 300px; tr td:first-child { width: 6px; - background-color: $color--tile-title-background; + background-color: var(--color--tile-title-background); } tr:first-child td:first-child { - background-color: $base-color; + background-color: var(--color--highlight); } tr td:nth-child(2) { @@ -1022,7 +1022,7 @@ $card-max-width: 300px; } time, p { - color: $color--font-secondary; + color: var(--color--font-secondary); margin: 0; } @@ -1054,7 +1054,7 @@ $card-max-width: 300px; gap: 15px; padding: 15px; justify-content: space-between; - border: thin solid $color--button-inactive-border; + border: thin solid var(--color--button-inactive-border); max-width: calc(48em - 30px); .icon { @@ -1132,13 +1132,13 @@ $card-max-width: 300px; .option-title { font-size: 14px; - color: $base-color; + color: var(--color--font-primary); font-weight: 400; margin: 0; } p { - color: $color--font-secondary; + color: var(--color--font-secondary); margin-top: 6px; font-size: small; display: -webkit-box; @@ -1322,7 +1322,7 @@ $card-max-width: 300px; z-index: 1; } .color-font-secondary { - color: $color--font-secondary; + color: var(--color--font-secondary); } } @@ -1336,7 +1336,7 @@ $card-max-width: 300px; background: transparent; align-items: center; gap: 5px; - border: thin solid $color--divider; + border: thin solid var(--color--divider); border-radius: 5px; } @@ -1359,7 +1359,7 @@ $card-max-width: 300px; display: inline-flex; align-items: center; gap: 5px; - border: thin solid $color--divider; + border: thin solid var(--color--divider); padding: 1px 5px; border-radius: 5px; font-size: smaller; @@ -1384,7 +1384,7 @@ $card-max-width: 300px; } .search-container { - background-color: $color--tile-background; + background-color: var(--color--tile-background); padding: 30px; h1 { diff --git a/resources/assets/stylesheets/scss/fullscreen.scss b/resources/assets/stylesheets/scss/fullscreen.scss index 6897fd6..c84025f 100644 --- a/resources/assets/stylesheets/scss/fullscreen.scss +++ b/resources/assets/stylesheets/scss/fullscreen.scss @@ -9,9 +9,7 @@ cursor: pointer; height: 28px; - @include background-icon(zoom-in2); - background-position: center; - background-repeat: no-repeat; + @include icon(before, zoom-in2); text-indent: 200%; overflow: hidden; diff --git a/resources/assets/stylesheets/scss/globalsearch.scss b/resources/assets/stylesheets/scss/globalsearch.scss index 69b3b46..1e53c13 100644 --- a/resources/assets/stylesheets/scss/globalsearch.scss +++ b/resources/assets/stylesheets/scss/globalsearch.scss @@ -25,6 +25,11 @@ display: none; } + .icon-button { + margin-left: 4px; + color: var(--color--font-inverted); + } + #globalsearch-input { flex: 1; border: none; @@ -93,12 +98,10 @@ margin-left: -5px; border-radius: var(--border-radius-default); - a { - color: var(--base-color); + @include highlight-anchor; - &:hover { - color: var(--active-color); - } + article a:hover { + text-decoration: none; } section { @@ -120,6 +123,10 @@ width: 400px; background-color: var(--white); + .icon-button { + color: var(--color--highlight); + } + #globalsearch-input { background-color: var(--color--header-inverted); color: var(--color--font-primary); @@ -129,11 +136,6 @@ } } - #globalsearch-clear, - #globalsearch-icon { - filter: brightness(0) saturate(100%) invert(25%) sepia(7%) saturate(6410%) hue-rotate(181deg) brightness(95%) contrast(88%); - } - #globalsearch-list { visibility: visible; opacity: 1; @@ -270,7 +272,7 @@ margin: 20px 0 0 -32px; a { - @include background-icon(arr_1right, $size: 24px); + @include icon(before, arr_1right, $size: 24px, $align: middle); @include square(24px); display: inline-block; } diff --git a/resources/assets/stylesheets/scss/header.scss b/resources/assets/stylesheets/scss/header.scss index 7e7f3fa..05e4b68 100644 --- a/resources/assets/stylesheets/scss/header.scss +++ b/resources/assets/stylesheets/scss/header.scss @@ -6,9 +6,8 @@ margin-bottom: 10px; } #top-bar { - background-color: var(--base-color); - color: var(--contrast-content-white); - border-bottom: 1px solid var(--brand-color-darker); + background-color: var(--color--brand-primary); + color: var(--color--brand-primary-contrast); height: $bar-bottom-container-height; width: 100%; min-width: $site-width; @@ -28,7 +27,7 @@ #site-title { flex: 1; - color: var(--white); + color: var(--color--brand-primary-contrast); margin-left: 0; z-index: 1002; line-height: $bar-bottom-container-height; @@ -49,13 +48,16 @@ > li { > a { - color: var(--white); + color: var(--color--brand-primary-contrast); margin: 0 6px; text-decoration: none; &:hover { text-decoration: underline; } } + > button { + color: var(--color--brand-primary-contrast); + } } } } @@ -178,6 +180,13 @@ > ul { flex: 1 1 auto; } + + #fullscreen-on { + color: var(--color--highlight); + svg { + vertical-align: middle; + } + } } #responsive-menu, @@ -223,18 +232,19 @@ position: absolute; top: 40px; right: 0; - background: var(--white); + background: var(--color--global-background); box-shadow: 1px 1px 1px var(--dark-gray-color-60); text-align: left; white-space: nowrap; a:link, a:visited { - color: var(--base-color); + color: var(--color--highlight); } a:hover, a:active { - color: var(--active-color); + color: var(--color--highlight-hover); + text-decoration: none; } div { diff --git a/resources/assets/stylesheets/scss/helpbar.scss b/resources/assets/stylesheets/scss/helpbar.scss index fe5cca3..94f8cfd 100644 --- a/resources/assets/stylesheets/scss/helpbar.scss +++ b/resources/assets/stylesheets/scss/helpbar.scss @@ -16,6 +16,13 @@ $border-width: 4px; min-width: 32px; right: 10px; + #helpbar_icon { + color: var(--color--highlight); + &:hover { + color: var(--color--highlight-hover); + } + } + h2, h3 { border-bottom: 0; color: var(--color--font-inverted); @@ -76,6 +83,7 @@ $border-width: 4px; } .helpbar-toggler { + color: var(--color--font-inverted); margin-top: -5px; margin-right: 5px; } @@ -115,28 +123,27 @@ $border-width: 4px; padding: 0; a { - @include background-icon(play, info_alt); + @include icon(before, play, $padding: 4px, $align: middle); background-position: left; background-repeat: no-repeat; display: block; - padding-left: 24px; &.tour-paused { - @include background-icon(pause, info_alt); + @include icon(before, pause, $padding: 4px, $align: middle); } &.tour-completed { - @include background-icon(accept, info_alt); + @include icon(before, accept, $padding: 4px, $align: middle); } } } a.link-extern { - @include icon(before, link-extern, info_alt); + @include icon(before, link-extern); } a.link-intern { - @include icon(before, link-intern, info_alt); + @include icon(before, link-intern); } } diff --git a/resources/assets/stylesheets/scss/icons.scss b/resources/assets/stylesheets/scss/icons.scss new file mode 100644 index 0000000..c6d3ccc --- /dev/null +++ b/resources/assets/stylesheets/scss/icons.scss @@ -0,0 +1,26 @@ +$icon-colors: ( + accept: good, + attention: warning, + info_alt: white, + inactive: font-inactive, + new: red-1, + status-green: green-1, + status-red: red-1, + status-yellow: yellow-1, + +// This are disabled for now since they should be coloured in a different way +// clickable: blue, +// info: black, +// navigation: blue, +// sort: blue, +); + +.studip-icon { + display: inline-block; + + @each $role, $color in $icon-colors { + &.icon-role-#{$role} { + color: var(--color--#{$color}); + } + } +} diff --git a/resources/assets/stylesheets/scss/index.scss b/resources/assets/stylesheets/scss/index.scss index 15a40c4..209eb9b 100644 --- a/resources/assets/stylesheets/scss/index.scss +++ b/resources/assets/stylesheets/scss/index.scss @@ -195,18 +195,17 @@ $gap-between-boxes: calc($login-page-margin / 2); height: 36px; .login-news-nav { + background-color: transparent; + color: var(--color--highlight); margin-left: 8px; width: 48px; height: 48px; border: none; - @include background-icon('bullet-dot', $size: 28px); - background-repeat: no-repeat; - background-color: transparent; - background-position: center; + @include icon(before, 'bullet-dot', $size: 28px, $align: middle); cursor: pointer; &.active-news-bullet { - background-size: 42px; + @include icon(before, 'bullet-dot', $size: 42px, $align: middle); } } } diff --git a/resources/assets/stylesheets/scss/jquery-ui/custom.scss b/resources/assets/stylesheets/scss/jquery-ui/custom.scss index 2a7d639..62d3c73 100644 --- a/resources/assets/stylesheets/scss/jquery-ui/custom.scss +++ b/resources/assets/stylesheets/scss/jquery-ui/custom.scss @@ -38,22 +38,22 @@ .ui-widget-content { border: 1px solid #dddddd; background: var(--white); - color: #333333; + color: var(--color--font-primary); } .ui-widget-content a { - color: #333333; + color: var(--color--content-link); } .ui-widget-header { - border: 1px solid #dddddd; - background: #e9e9e9; - color: #333333; - font-weight: bold; + border: 1px solid var(--color--content-box-border); + background: var(--color--content-box-background); + color: var(--color--font-primary); + font-weight: 700; } .ui-widget-header a { - color: #333333; + color: var(--color--content-link); } /* Interaction states @@ -69,7 +69,7 @@ html .ui-button.ui-state-disabled:active { border: 1px solid #c5c5c5; background: #f6f6f6; font-weight: normal; - color: #454545; + color: var(--color--font-primary); } .ui-state-default a, @@ -79,7 +79,7 @@ a.ui-button, a:link.ui-button, a:visited.ui-button, .ui-button { - color: #454545; + color: var(--color--font-primary); text-decoration: none; } @@ -94,7 +94,7 @@ a:visited.ui-button, border: 1px solid #cccccc; background: #ededed; font-weight: normal; - color: #2b2b2b; + color: var(--color--font-primary); } .ui-state-hover a, @@ -107,7 +107,7 @@ a:visited.ui-button, .ui-state-focus a:visited, a.ui-button:hover, a.ui-button:focus { - color: #2b2b2b; + color: var(--color--font-primary); text-decoration: none; } @@ -124,7 +124,7 @@ a.ui-button:active, border: 1px solid #003eff; background: #007fff; font-weight: normal; - color: #ffffff; + color: var(--color--font-inverted); } .ui-icon-background, @@ -136,7 +136,7 @@ a.ui-button:active, .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { - color: #ffffff; + color: var(--color--font-inverted); text-decoration: none; } diff --git a/resources/assets/stylesheets/scss/jquery-ui/studip.scss b/resources/assets/stylesheets/scss/jquery-ui/studip.scss index 002eb17..3d5168d 100644 --- a/resources/assets/stylesheets/scss/jquery-ui/studip.scss +++ b/resources/assets/stylesheets/scss/jquery-ui/studip.scss @@ -172,13 +172,14 @@ textarea.ui-resizable-handle.ui-resizable-s { background-color: var(--brand-color-light); color: var(--white); } - +$schedule-icon-path: icon-path(schedule, info); .hasDatepicker, [data-date-picker], .has-date-picker, [data-datetime-picker], .has-datetime-picker { - @include background-icon(schedule); + background-image: url("#{$schedule-icon-path}"); + background-size: var(--icon-size-default); background-position: right 3px center; background-repeat: no-repeat; min-width: 12ex; @@ -187,10 +188,12 @@ textarea.ui-resizable-handle.ui-resizable-s { border-color: var(--brand-color-dark); } } +$date-icon-path: icon-path(date, info); .hasTimepicker, [data-time-picker], .has-time-picker { - @include background-icon(date); + background-image: url("#{$date-icon-path}"); + background-size: var(--icon-size-default); background-position: right 3px center; background-repeat: no-repeat; min-width: 10ex; diff --git a/resources/assets/stylesheets/scss/layouts.scss b/resources/assets/stylesheets/scss/layouts.scss index f9cb143..8be21e8 100644 --- a/resources/assets/stylesheets/scss/layouts.scss +++ b/resources/assets/stylesheets/scss/layouts.scss @@ -100,7 +100,7 @@ body#login #content-wrapper { } #main-footer { - background-color: var(--base-color); + background-color: var(--color--brand-primary); color: var(--white); display: flex; padding: 2px 0; diff --git a/resources/assets/stylesheets/scss/links.scss b/resources/assets/stylesheets/scss/links.scss index 03fe33a..bb6e0bc 100644 --- a/resources/assets/stylesheets/scss/links.scss +++ b/resources/assets/stylesheets/scss/links.scss @@ -1,10 +1,10 @@ /* --- Links ---------------------------------------------------------------- */ a, a:link, a:visited { - color: var(--base-color); + color: var(--color--content-link); text-decoration: none; - &.index { color: var(--base-gray); } - &.printhead { color: var(--base-color); } + &.index { color: var(--color--font-secondary); } + &.printhead { color: var(--black); } &.tree { color: var(--black); } &.toolbar { color: var(--brand-color-lighter); @@ -19,8 +19,8 @@ a[disabled] { } a:hover, a:active, a:hover.index, a:active.index, a:hover.tree { - color: var(--active-color); - text-decoration: none; + color: var(--color--content-link-hover); + text-decoration: underline; } a:hover.toolbar { @@ -28,16 +28,16 @@ a:hover.toolbar { } a.link-intern { - @include icon(before, link-intern, $padding: 2px, $inline: true); + @include icon(before, link-intern, $padding: 2px, $inline: true, $align: text-bottom); } a.link-extern { - @include icon(before, link-extern, $padding: 2px, $inline: true); + @include icon(before, link-extern, $padding: 2px, $inline: true, $align: text-bottom); } a.link-add { - @include icon(before, add, $padding: 2px, $inline: true); + @include icon(before, add, $padding: 2px, $inline: true, $align: text-bottom); } a.link-edit { - @include icon(before, edit, $padding: 2px, $inline: true); + @include icon(before, edit, $padding: 2px, $inline: true, $align: text-bottom); } a img { diff --git a/resources/assets/stylesheets/scss/messagebox.scss b/resources/assets/stylesheets/scss/messagebox.scss index 336eb0d..2166d88 100644 --- a/resources/assets/stylesheets/scss/messagebox.scss +++ b/resources/assets/stylesheets/scss/messagebox.scss @@ -9,6 +9,10 @@ div.messagebox { position: relative; text-align: left; + div { + margin-left: 8px; + } + &:first-child { margin-top: 0; } @@ -32,17 +36,17 @@ div.messagebox { span { display: none; } } &.close { - @include background-icon(decline); + @include icon(before, decline); } &.details { - @include background-icon(arr_eol-down); + @include icon(before, arr_eol-down); } } } &.details_hidden { .messagebox_buttons a.details { - @include background-icon(arr_eol-up); + @include icon(before, arr_eol-up); } .messagebox_details { height: 0; } } @@ -61,22 +65,65 @@ section.contentbox { } } +$messagebox-icons: ( + info: 'info', + success: 'accept', + error: 'decline', + exception: 'decline', + warning: 'exclaim', +); + // Messagebox definitions @mixin messagebox($name, $color, $background-color, $border-color: $color, $image: $name) { + $icon-name: map-get($messagebox-icons, $name); + $svg: icon-path($icon-name, clickable); + div.messagebox_#{$name} { - color: $color; - background-color: $background-color; - background-image: url("#{$image-path}/messagebox/#{$image}.png"); - background-size: 32px 32px; - border-color: $border-color; + color: $color; + background-color: $background-color; + border-color: $border-color; + position: relative; + display: flex; + align-items: center; + + // Der Kreis mit ::before + &::before { + content: ""; + width: 32px; // Größe des Kreises + height: 32px; + background-color: $border-color; // Kreisfarbe + border-radius: 50%; // Macht es rund + display: flex; + justify-content: center; + align-items: center; + position: absolute; + left: 16px; + top: 50%; + transform: translateY(-50%); + margin-right: 12px; // Platz für den Text, je nach Bedarf anpassen + } + + // Das Icon mit ::after auf dem Kreis + &::after { + content: ""; + width: 20px; // Größe des Icons + height: 20px; + mask: url("#{$svg}") no-repeat center / contain; // Maskierung mit dem Icon + background-color: $background-color; // Farbe des Icons + position: absolute; + top: 50%; + left: 32px; + transform: translate(-50%, -50%); // Zentriert das Icon im Kreis + } } -} + } + -@include messagebox(info, var(--color--black), var(--color--info-alternative), var(--color--info)); -@include messagebox(success, var(--color--black), var(--color--good-alternative), var(--color--good)); -@include messagebox(error, var(--color--black), var(--color--warning-alternative), var(--color--warning)); -@include messagebox(exception, var(--color--black), var(--color--warning-alternative), var(--color--warning)); -@include messagebox(warning, var(--color--black), var(--color--attention-alternative), var(--color--attention), advice); +@include messagebox(info, var(--color--info-secondary-contrast), var(--color--info-secondary), var(--color--info)); +@include messagebox(success, var(--color--good-secondary-contrast), var(--color--good-secondary), var(--color--good)); +@include messagebox(error, var(--color--warning-secondary-contrast), var(--color--warning-secondary), var(--color--warning)); +@include messagebox(exception, var(--color--warning-secondary-contrast), var(--color--warning-secondary), var(--color--warning)); +@include messagebox(warning, var(--color--attention-secondary-contrast), var(--color--attention-secondary), var(--color--attention), advice); // Define modal messagebox .modaloverlay { @@ -108,7 +155,7 @@ section.contentbox { max-width: 50%; width: auto; - color: #000; + color: var(--color--font-primary); border-color: var(--yellow); background-color: white; background-image: url("@{image-path}/messagebox/question.png"); diff --git a/resources/assets/stylesheets/scss/messages.scss b/resources/assets/stylesheets/scss/messages.scss index 8642fc7..7e150cd 100644 --- a/resources/assets/stylesheets/scss/messages.scss +++ b/resources/assets/stylesheets/scss/messages.scss @@ -13,13 +13,13 @@ a.message-tag { #statusbar_container { > .statusbar { - border: thin solid var(--light-gray-color); + border: thin solid var(--color--input-field-border); min-width: 100%; max-width: 100%; - background-color: var(--content-color-40); + background-color: var(--color--input-field-background); > .progress { - background-color: var(--content-color); + background-color: var(--color--highlight); width: 100%; min-width: 0; max-width: 0; @@ -27,22 +27,27 @@ a.message-tag { line-height: 20px; &.progress-error { - background-color: var(--red); + background-color: var(--color--warning); } } > .progresstext { margin-top: -20px; text-align: center; - color: var(--white); + color: var(--color--font-inverted); height: 20px; line-height: 20px; } } } -#message_metadata tr { - vertical-align: top; +#message_metadata { + svg { + color: var(--color--highlight); + } + tr { + vertical-align: top; + } } #adressees { @@ -55,15 +60,15 @@ a.message-tag { } .message_body { - background-color: var(--content-color-20); margin: 3px; padding: 10px; + background-color: var(--color--tile-background); } .responsive_author { margin: 0; font-size: 0.8em; - color: var(--base-gray); + color: var(--color--font-secondary); } form.default { @@ -89,7 +94,7 @@ form.default { .multi_person_search_link { line-height: 30px; - img { + svg { vertical-align: middle; margin-top: -2px; } @@ -116,7 +121,19 @@ ul.message-options { > div.message-indicators { float: right; margin-right: 5px; + + svg { + vertical-align: bottom; + } } } } } + +.message-attachments { + margin-top: 2em; + + .file-icon svg { + vertical-align: bottom; + } +} diff --git a/resources/assets/stylesheets/scss/mvv.scss b/resources/assets/stylesheets/scss/mvv.scss index a6c7275..69b49fc 100644 --- a/resources/assets/stylesheets/scss/mvv.scss +++ b/resources/assets/stylesheets/scss/mvv.scss @@ -377,14 +377,14 @@ select.mvv-search-select-list { } &.selected { - @include background-icon(arr_2right, inactive); + @include icon(before, arr_2right); background-position: right; background-repeat: no-repeat; cursor: pointer; font-weight: bold; &.last { - @include background-icon(accept, inactive); + @include icon(before, accept); background-position: right; background-repeat: no-repeat; } diff --git a/resources/assets/stylesheets/scss/my_courses.scss b/resources/assets/stylesheets/scss/my_courses.scss index 9d34b5c..04655f8 100644 --- a/resources/assets/stylesheets/scss/my_courses.scss +++ b/resources/assets/stylesheets/scss/my_courses.scss @@ -12,6 +12,7 @@ $icon-padding: 3px; .my-courses-navigation { + color: var(--color--highlight); list-style: none; margin: 0 0 -10px; padding: 0; @@ -27,11 +28,13 @@ $icon-padding: 3px; padding: $icon-padding; } + @include highlight-anchor; + &:last-child { margin-right: 0; } - img { + svg { vertical-align: bottom; } @@ -40,12 +43,19 @@ $icon-padding: 3px; padding-left: $icon-padding; padding-right: $icon-padding; } -} -.my-courses-navigation-important { - $border-width: 1px; - border: $border-width solid var(--red); - a { - padding: $icon-padding - $border-width; + &.my-courses-navigation-important { + $border-width: 1px; + border: $border-width solid var(--color--warning); + + a { + padding: $icon-padding - $border-width; + color: var(--color--warning); + + &:hover { + color: var(--color--warning); + } + } } } + diff --git a/resources/assets/stylesheets/scss/navigation-hoverborder.scss b/resources/assets/stylesheets/scss/navigation-hoverborder.scss index 16dc09b..8c5605f 100644 --- a/resources/assets/stylesheets/scss/navigation-hoverborder.scss +++ b/resources/assets/stylesheets/scss/navigation-hoverborder.scss @@ -28,10 +28,10 @@ body:not(.fixed) #navigation-level-1-items { > li.active { - @include border-beneath(var(--dark-gray-color-80)); + @include border-beneath(var(--color--tabs-marker-active)); } > li:not(.active) { - @include border-beneath(var(--dark-gray-color-40)); + @include border-beneath(var(--color--tabs-marker-hover)); &:not(:hover)::after { @include border-shrink; } @@ -46,7 +46,7 @@ body:not(.fixed) #navigation-level-1-items { } .overflow li:hover { - @include border-beneath(var(--dark-gray-color-40), 2px, 3px); + @include border-beneath(var(--color--tabs-marker-hover), 2px, 3px); &::after { transform: translate(0, -4px); } @@ -59,10 +59,10 @@ body:not(.fixed) #navigation-level-1-items { line-height: 25px; } &.current { - @include border-beneath(var(--dark-gray-color-80), -2px, 3px); + @include border-beneath(var(--color--tabs-marker-active), -2px, 3px); } &:not(.current) { - @include border-beneath(var(--dark-gray-color-40), -2px, 3px); + @include border-beneath(var(--color--tabs-marker-hover), -2px, 3px); &:not(:hover)::after { @include border-shrink; } diff --git a/resources/assets/stylesheets/scss/navigation.scss b/resources/assets/stylesheets/scss/navigation.scss index 3af4f97..d876a22 100644 --- a/resources/assets/stylesheets/scss/navigation.scss +++ b/resources/assets/stylesheets/scss/navigation.scss @@ -17,7 +17,7 @@ body:not(.fixed) #navigation-level-1-items { font-size: $font-size-base; } a { - color: var(--base-color); + color: var(--color--main-navigation-item-inactive); display: block; padding: 0 0; text-align: center; @@ -35,10 +35,13 @@ body:not(.fixed) #navigation-level-1-items { } } - img { + .headericon { margin: 8px 0; - @include square(32px); } + img.headericon:not(:hover) { + filter: hue-rotate(350deg) saturate(8.7%) brightness(177.3%) !important; + } + &[data-badge]:not([data-badge="0"]) { position: relative; @@ -51,8 +54,8 @@ body:not(.fixed) #navigation-level-1-items { @include square(16px); background-clip: content-box; - background-color: var(--red); - border: 3px solid var(--dark-gray-color-5); + background-color: var(--color--warning); + border: 3px solid transparent; border-radius: 50%; color: var(--white); content: attr(data-badge); @@ -78,10 +81,6 @@ body:not(.fixed) #navigation-level-1-items { } } - img { - filter: hue-rotate(350deg) saturate(8.7%) brightness(177.3%) !important; - } - // Hide all navigation item title on hover and display only the currently // hovered one .navtitle { @@ -105,9 +104,7 @@ body:not(.fixed) #navigation-level-1-items { opacity: 1; } > a { - img { - filter: hue-rotate(0deg) saturate(100%) brightness(100%) !important; - } + color: var(--color--main-navigation-item); } // Icon state: hover @@ -215,7 +212,6 @@ body.fixed { #navigation-level-1-items { background-color: var(--base-color); - list-style: none; margin: 0 0 0px -15px; padding: 0; @@ -226,9 +222,7 @@ body.fixed { // Hide menu display: none; - img { - filter: contrast(0) brightness(2); - + svg { @include square(16px); margin-right: 0.8em; } diff --git a/resources/assets/stylesheets/scss/oer.scss b/resources/assets/stylesheets/scss/oer.scss index b8732e7..1ddb46e 100644 --- a/resources/assets/stylesheets/scss/oer.scss +++ b/resources/assets/stylesheets/scss/oer.scss @@ -281,8 +281,11 @@ ul.reviews, ol.reviews { button { border-right: none; height: 35px; + color: var(--color--highlight); + &.active { - background-color: var(--base-color); + background-color: var(--color--highlight); + color: var(--color--highlight-contrast); } &.erase { background-color: white; @@ -302,7 +305,7 @@ ul.reviews, ol.reviews { button { border: thin solid var(--color--input-field-border); - background-color: var(--color--button-background); + background-color: var(--color--global-background); display: flex; align-items: center; justify-content: center; diff --git a/resources/assets/stylesheets/scss/opengraph.scss b/resources/assets/stylesheets/scss/opengraph.scss index 074a5e5..d9094d2 100644 --- a/resources/assets/stylesheets/scss/opengraph.scss +++ b/resources/assets/stylesheets/scss/opengraph.scss @@ -22,25 +22,21 @@ .switch-right { @include hide-text; @include square(var(--icon-size-default)); - background-position: center; - background-repeat: no-repeat; padding: 0; + color: var(--color--highlight); &:not([disabled]) { cursor: pointer; } - } - .switch-left { - @include background-icon(arr_1left); &[disabled] { - @include background-icon(arr_1left); + color: var(--color--font-inactive); } } + .switch-left { + @include icon(before, arr_1left); + } .switch-right { - @include background-icon(arr_1right); - &[disabled] { - @include background-icon(arr_1right); - } + @include icon(before, arr_1right); } } diff --git a/resources/assets/stylesheets/scss/pagination.scss b/resources/assets/stylesheets/scss/pagination.scss index 2f74bcc..9b34e28 100644 --- a/resources/assets/stylesheets/scss/pagination.scss +++ b/resources/assets/stylesheets/scss/pagination.scss @@ -40,19 +40,20 @@ .next { .pagination--link { @include hide-text; - background-position: center; - background-repeat: no-repeat; display: inline-block; height: 16px; width: 16px; vertical-align: top; + &::before { + color: var(--color--highlight); + } } } .prev .pagination--link { - @include background-icon(arr_1left); + @include icon(before, arr_1left, $align: middle); } .next .pagination--link { - @include background-icon(arr_1right); + @include icon(before, arr_1right, $align: middle); } } diff --git a/resources/assets/stylesheets/scss/personal-notifications.scss b/resources/assets/stylesheets/scss/personal-notifications.scss index 6ce6d27..8d80fbb 100644 --- a/resources/assets/stylesheets/scss/personal-notifications.scss +++ b/resources/assets/stylesheets/scss/personal-notifications.scss @@ -13,19 +13,14 @@ padding: 0 5px; } - img { + svg { vertical-align: middle; margin-top: -3px; - filter: brightness(0) saturate(100%) invert(26%) sepia(19%) saturate(1783%) hue-rotate(177deg) brightness(96%) contrast(93%); // #000 to #28497c } &.alert { background-color: var(--color--warning); color: var(--color--font-inverted); - - img { - filter: invert(100); // #000 to #fff - } } } @@ -172,6 +167,7 @@ flex-grow: 1; .avatar { + color: var(--color--highlight); $avatar-size: 36px; margin-right: 10px; margin-left: 0; @@ -187,40 +183,33 @@ } a:not(.mark-all-as-read) { - color: var(--brand-color-dark); + color: var(--color--highlight); display: block; padding: 0; - &:hover { color: var(--active-color); } + &:hover { + color: var(--color--highlight-hover); + text-decoration: none; + } } a.mark-all-as-read:not(.invisible), a.enable-desktop-notifications { + display: flex; + align-items: center; + justify-content: space-between; border-bottom: thin solid var(--color--action-menu-divider); - display: block; max-height: 31px; padding: 7px 7px 7px 9px; z-index: 3; } a.mark-all-as-read { - @include background-icon('accept', 'clickable'); - background-repeat: no-repeat; - background-position: right 8px center; - - &:hover { - @include background-icon('accept', 'attention'); - } - - margin: 0; + @include icon(after, 'accept', $align: middle); + color: var(--color--highlight); } a.enable-desktop-notifications { - @include background-icon('notification', 'clickable'); - background-repeat: no-repeat; - background-position: right 8px center; - - &:hover { - @include background-icon('notification', 'attention'); - } + @include icon(after, 'notification', $align: middle); + color: var(--color--highlight); } .options { @@ -228,9 +217,7 @@ background: none; cursor: pointer; height: 24px; - > img { - vertical-align: top; - } + color: var(--color--highlight); &.hidden { visibility: hidden; } } diff --git a/resources/assets/stylesheets/scss/progress_indicator.scss b/resources/assets/stylesheets/scss/progress_indicator.scss index 12ea750..cc8ece5 100644 --- a/resources/assets/stylesheets/scss/progress_indicator.scss +++ b/resources/assets/stylesheets/scss/progress_indicator.scss @@ -24,7 +24,8 @@ } @media (prefers-reduced-motion) { .progress-indicator { - @include background-icon(refresh, info, 32px); + @include icon(before, refresh, $size: 32px); + color: var(--color--font-primary); } .progress-indicator-description-default { display: block; diff --git a/resources/assets/stylesheets/scss/questionnaire.scss b/resources/assets/stylesheets/scss/questionnaire.scss index 3870355..9f6f880 100644 --- a/resources/assets/stylesheets/scss/questionnaire.scss +++ b/resources/assets/stylesheets/scss/questionnaire.scss @@ -96,6 +96,10 @@ $width: 270px; padding: 10px 10px 10px 15px; min-height: 150px; min-width: 0; + + .add_question button { + color: var(--color--highlight) + } } .inline_editing { diff --git a/resources/assets/stylesheets/scss/quicksearch.scss b/resources/assets/stylesheets/scss/quicksearch.scss index f91af93..6e8f957 100644 --- a/resources/assets/stylesheets/scss/quicksearch.scss +++ b/resources/assets/stylesheets/scss/quicksearch.scss @@ -33,21 +33,18 @@ div.quicksearch_frame { margin-top: 0 !important; } - input[type=submit] { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; + label.icon-button { + display: inline-block; + color: var(--color--highlight); width: 36px; height: 30px; - @include background-icon(search); - background-position: center; - background-repeat: no-repeat; vertical-align: middle; margin-left: -40px; - margin-top: 1px; border-left: solid thin var(--color--input-field-border); + + svg { + padding: 5px 7px; + } } } @@ -135,4 +132,4 @@ div.quicksearch_frame { } } } -} +}
\ No newline at end of file diff --git a/resources/assets/stylesheets/scss/raumzeit.scss b/resources/assets/stylesheets/scss/raumzeit.scss index 982cebc..c680b26 100644 --- a/resources/assets/stylesheets/scss/raumzeit.scss +++ b/resources/assets/stylesheets/scss/raumzeit.scss @@ -64,7 +64,7 @@ div.at_least_one_teacher { // Show visual toggle indicator header h1 a { - @include icon(before, arr_1right); + @include icon(before, arr_1right, $align: text-bottom); } &.open { @@ -77,21 +77,24 @@ div.at_least_one_teacher { article header { &.red { border-left: 3px solid var(--red); + .tooltip { + color: var(--color--warning); + } } &.yellow { border-left: 3px solid var(--activity-color); + .tooltip { + color: var(--color--attention); + } } &.green { border-left: 3px solid var(--green); + .tooltip { + color: var(--color--good); + } } - &.red .tooltip-icon { - @include icon(before, radiobutton-checked, status-red); - } - &.yellow .tooltip-icon { - @include icon(before, radiobutton-checked, status-yellow); - } - &.green .tooltip-icon { - @include icon(before, radiobutton-checked, status-green); + .tooltip-icon { + @include icon(before, radiobutton-checked); } } form.default { diff --git a/resources/assets/stylesheets/scss/report.scss b/resources/assets/stylesheets/scss/report.scss deleted file mode 100644 index d00ce06..0000000 --- a/resources/assets/stylesheets/scss/report.scss +++ /dev/null @@ -1,94 +0,0 @@ -// Alert dialog (like createQuestion) -.ui-dialog.ui-widget.ui-widget-content.report { - &-info, - &-success, - &-warning, - &-error { - min-width: 30em; - - .ui-dialog-titlebar { - font-weight: bold; - text-align: left; - } - - .ui-dialog-content { - background-position: 12px 8px; - background-repeat: no-repeat; - background-size: 32px; - box-sizing: border-box; - max-height: 60vh; - padding: 15px 15px 15px 55px; - } - - .ui-dialog-buttonpane { - text-align: center; - - .ui-dialog-buttonset { - float: none; - > * { - display: inline-block; - } - } - } - } - - &-info { - .ui-dialog-titlebar { - background-color: var(--base-color); - color: var(--white); - } - .ui-dialog-content { - background-image: url("#{$image-path}/messagebox/info.png"); - } - } - - &-success { - .ui-dialog-titlebar { - background-color: var(--dark-green); - color: var(--white); - } - - .ui-dialog-content { - background-image: url("#{$image-path}/messagebox/success.png"); - } - } - - &-warning { - .ui-dialog-titlebar { - background-color: var(--yellow); - color: black; - } - - .ui-button-icon { - .ui-icon { - .ui-icon-closethick { - @include background-icon(decline); - } - } - } - - .ui-dialog-content { - background-image: url("#{$image-path}/messagebox/advice.png"); - } - - .ui-dialog-titlebar-close { - background: transparent; - border: 0; - - .ui-icon, .ui-icon:hover { - @include background-icon(decline, info); - background-position: 0; - } - } - } - - &-error { - .ui-dialog-titlebar { - background-color: var(--red); - color: var(--white); - } - .ui-dialog-content { - background-image: url("#{$image-path}/messagebox/error.png"); - } - } -} diff --git a/resources/assets/stylesheets/scss/resources.scss b/resources/assets/stylesheets/scss/resources.scss index 517ad47..4de6f09 100644 --- a/resources/assets/stylesheets/scss/resources.scss +++ b/resources/assets/stylesheets/scss/resources.scss @@ -181,6 +181,7 @@ ul.resource-tree { select, span.selection, span.select2 { height: 30px; width: calc(100% - 2em) !important; + color: var(--color--font-primary); } } } @@ -359,22 +360,25 @@ ul.resource-tree { .request-list { a.request-marking-icon { - background-repeat: no-repeat; display: block; width: var(--icon-size-default); height: var(--icon-size-default); - @include background-icon(radiobutton-unchecked); + @include icon(before, radiobutton-unchecked); + color: var(--color--font-primary); &[data-marked="1"] { - @include background-icon(radiobutton-checked, status-red); + @include icon(before, radiobutton-checked); + color: var(--color--warning) } &[data-marked="2"] { - @include background-icon(radiobutton-checked, status-yellow); + @include icon(before, radiobutton-checked); + color: var(--color--attention); } &[data-marked="3"] { - @include background-icon(radiobutton-checked, status-green); + @include icon(before, radiobutton-checked); + color: var(--color--good); } } } diff --git a/resources/assets/stylesheets/scss/responsive.scss b/resources/assets/stylesheets/scss/responsive.scss index 97d9bc5..5c8be5a 100644 --- a/resources/assets/stylesheets/scss/responsive.scss +++ b/resources/assets/stylesheets/scss/responsive.scss @@ -45,8 +45,10 @@ $sidebarOut: -330px; .responsive-navigation-header { display: flex; padding: 2px 0; + color: var(--color--brand-primary-contrast); .menu-closed { + color: var(--color--brand-primary-contrast); cursor: pointer; transform: rotate(0deg); transition: var(--transition-duration) ease-in-out; @@ -54,8 +56,8 @@ $sidebarOut: -330px; .menu-open { cursor: pointer; + color: var(--color--brand-primary-contrast); transform: rotate(90deg); - transition: var(--transition-duration) ease-in-out; } } diff --git a/resources/assets/stylesheets/scss/root.scss b/resources/assets/stylesheets/scss/root.scss index 25521ab..24054e7 100644 --- a/resources/assets/stylesheets/scss/root.scss +++ b/resources/assets/stylesheets/scss/root.scss @@ -1,5 +1,5 @@ :root { - --text-color: #{$text-color}; + --text-color: #{$color--font-primary}; --active-color: #{$active-color}; --activity-color: #{$activity-color}; --activity-color-20: #{$activity-color-20}; @@ -134,7 +134,19 @@ --color--global-background: #{$color--global-background}; --color--brand-primary: #{$color--brand-primary}; + --color--brand-primary-contrast: #{$color--brand-primary-contrast}; --color--brand-secondary: #{$color--brand-secondary}; + --color--brand-secondary-contrast: #{$color--brand-secondary-contrast}; + + --color--highlight: #{$color--highlight}; + --color--highlight-hover: #{$color--highlight-hover}; + --color--highlight-contrast: #{$color--highlight-contrast}; + + --color--sidebar-item: #{$color--sidebar-item}; + --color--sidebar-item-hover: #{$color--sidebar-item-hover}; + + --color--content-link: #{$color--content-link}; + --color--content-link-hover: #{$color--content-link-hover}; --color--font-primary: #{$color--font-primary}; --color--font-secondary: #{$color--font-secondary}; @@ -143,6 +155,8 @@ --color--main-navigation-background: #{$color--main-navigation-background}; --color--main-navigation-border: #{$color--main-navigation-border}; + --color--main-navigation-item: #{$color--main-navigation-item}; + --color--main-navigation-item-inactive: #{$color--main-navigation-item-inactive}; --color--sidebar-marker-active: #{$color--sidebar-marker-active}; --color--sidebar-marker-active-navigation: #{$color--sidebar-marker-active-navigation}; @@ -176,6 +190,8 @@ --color--scrollbar-thumb: #{$color--scrollbar-thumb}; + --color--content-bar-background: #{$color--content-bar-background}; + --color--content-box-border: #{$color--content-box-border}; --color--content-box-header: #{$color--content-box-header}; --color--content-box-background: #{$color--content-box-background}; @@ -188,11 +204,11 @@ --color--fieldset-border: #{$color--fieldset-border}; --color--fieldset-header: #{$color--fieldset-header}; - --color--button-background: #{$color--button-background}; - --color--button-border: #{$color--button-border}; - --color--button-focus: #{$color--button-focus}; - --color--button-hover: #{$color--button-hover}; + --color--tabs-marker-hover: #{$color--tabs-marker-hover}; + --color--tabs-marker-active: #{$color--tabs-marker-active}; + --color--button-inactive-background: #{$color--button-inactive-background}; + --color--button-inactive-background-contrast: #{$color--button-inactive-background-contrast}; --color--button-inactive-border: #{$color--button-inactive-border}; --color--radiobuttonset-background: #{$color--radiobuttonset-background}; @@ -209,15 +225,27 @@ --color--focus: #{$color--focus}; --color--warning: #{$color--warning}; - --color--warning-alternative: #{$color--warning-alternative}; + --color--warning-secondary: #{$color--warning-secondary}; + --color--warning-contrast: #{$color--warning-contrast}; + --color--warning-secondary-contrast: #{$color--warning-secondary-contrast}; + --color--attention: #{$color--attention}; - --color--attention-alternative: #{$color--attention-alternative}; + --color--attention-secondary: #{$color--attention-secondary}; + --color--attention-contrast: #{$color--attention-contrast}; + --color--attention-secondary-contrast: #{$color--attention-secondary-contrast}; + --color--good: #{$color--good}; - --color--good-alternative: #{$color--good-alternative}; + --color--good-secondary: #{$color--good-secondary}; + --color--good-contrast: #{$color--good-contrast}; + --color--good-secondary-contrast: #{$color--good-secondary-contrast}; + --color--info: #{$color--info}; - --color--info-alternative: #{$color--info-alternative}; + --color--info-secondary: #{$color--info-secondary}; + --color--info-contrast: #{$color--info-contrast}; + --color--info-secondary-contrast: #{$color--info-secondary-contrast}; - --color-image-placeholder-background: #{$color-image-placeholder-background}; + --color--image-placeholder-background: #{$color--image-placeholder-background}; + --color--image-placeholder-icon: #{$color--image-placeholder-icon}; --color--header-inverted: #{$color-header-inverted}; diff --git a/resources/assets/stylesheets/scss/scroll-to-top.scss b/resources/assets/stylesheets/scss/scroll-to-top.scss index 531c1ca..1abaaf6 100644 --- a/resources/assets/stylesheets/scss/scroll-to-top.scss +++ b/resources/assets/stylesheets/scss/scroll-to-top.scss @@ -8,7 +8,8 @@ body #scroll-to-top { margin-right: $scroll-to-top-margin; margin-bottom: $scroll-to-top-margin; padding: 10px; - background: var(--base-color); + background: var(--color--highlight); + color: var(--color--highlight-contrast); border: 1px solid transparent; background-clip: padding-box; cursor: pointer; @@ -16,12 +17,9 @@ body #scroll-to-top { position: fixed; right: 0; bottom: 0; - transition: all 250ms ease-in-out; + transition: bottom 250ms ease-in-out; z-index: 1; - &:hover { - background: var(--brand-color-darker); - border-radius: 2px; - } + &.hide { bottom: calc( 0px - #{$scroll-to-top-height + $scroll-to-top-margin}); } diff --git a/resources/assets/stylesheets/scss/search.scss b/resources/assets/stylesheets/scss/search.scss index d3231ba..c843ff1 100644 --- a/resources/assets/stylesheets/scss/search.scss +++ b/resources/assets/stylesheets/scss/search.scss @@ -155,7 +155,7 @@ label.inactive-settings-category { margin: 20px 0 0 -32px; a { - @include background-icon(arr_1right, $size: 24px); + @include icon(after, arr_1right, $size: 24px, $align: middle); @include square(24px); display: inline-block; } @@ -186,7 +186,7 @@ div#div-search-input { } -.button.seach-button { +.button.search-button { border-radius: 0; } @@ -209,19 +209,7 @@ div#div-search-input { white-space: nowrap; padding: 8px; margin: 0 5px; - - &::before { - background-repeat: no-repeat; - content: " "; - float: right; - height: var(--icon-size-default); - width: var(--icon-size-default); - @include background-icon(trash); - } - - &:hover::before { - @include background-icon(trash); - } + @include icon(after, trash, $align: middle); } } } diff --git a/resources/assets/stylesheets/scss/select.scss b/resources/assets/stylesheets/scss/select.scss index a5f51b7..22c6c20 100644 --- a/resources/assets/stylesheets/scss/select.scss +++ b/resources/assets/stylesheets/scss/select.scss @@ -22,8 +22,13 @@ border-radius: var(--border-radius-default); } - .vs__actions { - align-items: end; + .vs__dropdown-option { + display: flex; + flex-direction: row; + } + + .vs__actions .studip-icon { + line-height: 10px; } &.studip-v-select-drop-up { diff --git a/resources/assets/stylesheets/scss/selects.scss b/resources/assets/stylesheets/scss/selects.scss index 3e46dd6..bba1d6d 100644 --- a/resources/assets/stylesheets/scss/selects.scss +++ b/resources/assets/stylesheets/scss/selects.scss @@ -3,6 +3,7 @@ $select-border-focus: 1px solid var(--brand-color-dark); $select-border-radius: var(--border-radius-default); $select-height-default: 32px; $select-arrow-size: 10px; +$svg: icon-path(arr_1down, info); select { // Reset appearance @@ -25,8 +26,8 @@ select { // Allow all other paddings to be overwritten but the right padding // to ensure the icon is always clearly visible padding-right: 20px; - - @include background-icon(arr_1down, $size: $select-arrow-size); + background-image: url("#{$svg}"); + background-size: icon-size($select-arrow-size); background-position: right 4px center; background-repeat: no-repeat; @@ -91,9 +92,7 @@ select { .select2-selection--single { .select2-selection__clear { - @include background-icon(decline, $size: $select-arrow-size); - background-position: right center; - background-repeat: no-repeat; + @include icon(after, decline, $size: $select-arrow-size, $align: middle); color: transparent; display: inline-block; float: none; @@ -118,16 +117,14 @@ select { .select2-selection--multiple { padding-right: ($select-arrow-size + 5px); - @include background-icon(arr_1down, $size: $select-arrow-size); - $backgroundPosition: calc($select-height-default / 2 - 4px); - background-position: right 4px top $backgroundPosition; - background-repeat: no-repeat; + @include icon(after,arr_1down, $size: $select-arrow-size, $align: super); + + .select2-selection__rendered { + width: calc(100% - $select-arrow-size); + } .select2-selection__choice__remove { - @include background-icon(decline, $size: $select-arrow-size); - background-position: right center; - background-repeat: no-repeat; - color: transparent !important; + @include icon(after, decline, $size: $select-arrow-size , $align: bottom, $padding: 4px); display: inline-block; float: none; width: ($select-arrow-size + 5px); @@ -150,9 +147,7 @@ select { } .select2-selection__arrow { - @include background-icon(arr_1down, $size: $select-arrow-size); - background-position: right 4px center; - background-repeat: no-repeat; + @include icon(after, arr_1down, $role: info, $size: $select-arrow-size , $align: bottom, $padding: 4px); b { visibility: hidden; diff --git a/resources/assets/stylesheets/scss/sidebar.scss b/resources/assets/stylesheets/scss/sidebar.scss index 0fcc32a..74f411b 100644 --- a/resources/assets/stylesheets/scss/sidebar.scss +++ b/resources/assets/stylesheets/scss/sidebar.scss @@ -52,36 +52,34 @@ $icon-size: 20px; } .sidebar-widget, .sidebar-widget-placeholder { - background-color: var(--white); + background-color: var(--color--global-background); border: none; margin: 15px 0 0; width: $sidebar-width; } .sidebar-widget-header { - background-color: var(--white); - color: var(--black); + background-color: var(--color--global-background); + color: var(--color--font-primary); font-weight: bold; padding: 4px; word-break: break-word; } .sidebar-widget-extra { - background-color: var(--white); - a { + background-color: var(--color--global-background); + a, a:link, a:visited { display: inline-block; height: $icon-size; width: $icon-size; padding: 4px; - border: solid thin var(--base-color); + color: var(--color--sidebar-item); + border: solid thin var(--color--sidebar-item); border-radius: 5px; margin-bottom: 4px; &:hover { - background-color: var(--base-color); - - img { - filter: brightness(100); - } + background-color: var(--color--sidebar-item); + color: var(--color--global-background); } } } @@ -115,15 +113,19 @@ ul.widget-list { border-left: solid 4px var(--white); > *:not(label):not(.options-radio, .options-checkbox) { - padding: 4px 0 4px 28px; + display: inline-flex; + flex-direction: row; + padding: 4px 0 4px 2px; line-height: $icon-size; + gap: 6px; + width: 100%; } .label-text { text-indent: 0; } - &:has(>button:not(.options-radio, .options-checkbox)), &:has(>a):not(:last-child) { + &:has(>button:not(.options-radio, .options-checkbox)), &:has(>a:not(:last-child, .options-radio, .options-checkbox)) { border-bottom: solid thin var(--color--sidebar-divider); } @@ -133,12 +135,13 @@ ul.widget-list { } } - &:hover:not(:has(>label)):not(:has(button.options-radio)) { + &:hover:not(:has(>label)):not(:has(.options-checkbox, .options-radio)):not(.active):has(button, a) { background-color: var(--color--sidebar-active); border-left-color: var(--color--sidebar-marker-active); a, button { - color: var(--color--font-primary); + color: var(--color--sidebar-item-hover); + text-decoration: none; } } @@ -162,6 +165,11 @@ ul.widget-list { @extend .as-link; text-align: left; width: 100%; + color: var(--color--sidebar-item); + } + + a, a:link, a:visited { + color: var(--color--sidebar-item); } &.sidebar-navigation, @@ -194,26 +202,21 @@ div#sidebar-navigation { cursor: not-allowed; font-weight: lighter; } - &.sidebar-navigation > li.active { - background-color: var(--color--sidebar-active); - border-left: solid 4px var(--color--sidebar-marker-active-navigation); - margin-left: -4px; - padding-left: 1px; - a { - color: var(--black); - padding-left: 4px; - } - } + &.sidebar-navigation > li.active, &.sidebar-views > li.active { background-color: var(--color--sidebar-active); - border-left: solid 4px var(--color--sidebar-marker-active-view); + border-left: solid 4px var(--color--sidebar-item); margin-left: -4px; padding-left: 1px; a, button { - color: var(--base-color); + color: var(--color--font-primary); padding-left: 5px; + + &:hover { + text-decoration: none; + } } } &.sidebar-navigation > li, @@ -241,7 +244,7 @@ div#sidebar-navigation { } .sidebar-widget { - background: var(--white); + background: var(--color--global-background); .widget-options { list-style: none; @@ -266,36 +269,34 @@ div#sidebar-navigation { } .options-checkbox { - background-repeat: no-repeat; - background-position: 2px center; display: block; - padding-left: 28px; + margin-left: 2px; &.options-checked { - @include background-icon(checkbox-checked); + @include icon(before, checkbox-checked, $padding: 6px, $align: middle); } &.options-unchecked { - @include background-icon(checkbox-unchecked); + @include icon(before, checkbox-unchecked, $padding: 6px, $align: middle); } &:hover { - color: var(--color--font-primary); + color: var(--color--sidebar-item-hover); + text-decoration: none; } } .options-radio { - background-repeat: no-repeat; - background-position: 2px center; display: block; - padding-left: 28px; + margin-left: 2px; &.options-checked { - @include background-icon(radiobutton-checked); + @include icon(before, radiobutton-checked, $padding: 6px, $align: middle); } &.options-unchecked { - @include background-icon(radiobutton-unchecked); + @include icon(before, radiobutton-unchecked, $padding: 6px, $align: middle); } &:hover { - color: var(--color--font-primary); + color: var(--color--sidebar-item-hover); + text-decoration: none; } } } @@ -352,10 +353,10 @@ select.sidebar-selectlist { } .submit-search { - background-color: var(--color--button-background); + background-color: var(--color--global-background); border: 1px solid var(--color--input-field-border); border-radius: 0; - color: transparent; + color: var(--color--sidebar-item); cursor: pointer; font: 0/0 a; text-shadow: none; @@ -369,10 +370,9 @@ select.sidebar-selectlist { display: inline-block; cursor: pointer; order: 2; - height: 100%; + height: var(--icon-size); box-sizing: border-box; - margin-right: 2px; - margin-left: -22px; + margin: auto 2px auto -22px; img { padding-top: 4px; diff --git a/resources/assets/stylesheets/scss/start.scss b/resources/assets/stylesheets/scss/start.scss index f052f26..792fc1b 100644 --- a/resources/assets/stylesheets/scss/start.scss +++ b/resources/assets/stylesheets/scss/start.scss @@ -36,7 +36,7 @@ float: right; white-space: nowrap; - img { + svg { vertical-align: middle; } } diff --git a/resources/assets/stylesheets/scss/studip-cke-ui.scss b/resources/assets/stylesheets/scss/studip-cke-ui.scss index 660a2e9..787c6de 100644 --- a/resources/assets/stylesheets/scss/studip-cke-ui.scss +++ b/resources/assets/stylesheets/scss/studip-cke-ui.scss @@ -1,42 +1,42 @@ @use '../mixins.scss' as *; :root { - --ck-color-base-foreground: var(--dark-gray-color-5); - --ck-color-base-background: var(--white); - --ck-color-base-border: var(--content-color-40); - --ck-color-base-action: var(--green); - --ck-color-base-focus: var(--base-color); + --ck-color-base-foreground: var(--color--tile-background); + --ck-color-base-background: var(--color--global-background); + --ck-color-base-border: var(--color--tile-border); + --ck-color-base-action: var(--color--good); + --ck-color-base-focus: var(--color--highlight); --ck-color-base-text: #000; - --ck-color-base-active: var(--base-color); - --ck-color-base-active-focus: var(--base-color); - --ck-color-base-error: var(--red); + --ck-color-base-active: var(--color--highlight); + --ck-color-base-active-focus: var(--color--highlight); + --ck-color-base-error: var(--color--warning); /* -- Buttons ------------------------------------------------------------------------------- */ - --ck-color-button-default-hover-background: var(--base-color); - --ck-color-button-default-active-background: var(--base-color); + --ck-color-button-default-hover-background: var(--color--highlight); + --ck-color-button-default-active-background: var(--color--highlight); --ck-color-button-default-active-shadow: transparent; - --ck-color-button-on-background: var(--base-color); - --ck-color-button-on-hover-background: var(--base-color); - --ck-color-button-on-active-background: var(--base-color); + --ck-color-button-on-background: var(--color--highlight); + --ck-color-button-on-hover-background: var(--color--highlight); + --ck-color-button-on-active-background: var(--color--highlight); --ck-color-button-on-active-shadow: transparent; - --ck-color-button-action-background: var(--white); - --ck-color-switch-button-on-background: var(--base-color); - --ck-color-switch-button-on-hover-background: var(--base-color); + --ck-color-button-action-background: var(--color--font-inverted); + --ck-color-switch-button-on-background: var(--color--highlight); + --ck-color-switch-button-on-hover-background: var(--color--highlight); --ck-color-split-button-hover-border: transparent; --ck-color-split-button-hover-background: transparent; /* -- Generic colors ------------------------------------------------------------------------ */ - --ck-color-focus-border: var(--base-color); + --ck-color-focus-border: var(--color--highlight); --ck-color-text: var(--ck-color-base-text); /* -- Link -------------------------------------------------------------------------------- */ - --ck-color-link-default: var(--base-color); - --ck-color-link-selected-background: var(--base-color); - --ck-color-link-fake-selection: var(--base-color); + --ck-color-link-default: var(--color--content-link); + --ck-color-link-selected-background: var(--color--content-link); + --ck-color-link-fake-selection: var(--color--content-link); /* disable border radius*/ @@ -66,7 +66,7 @@ } .ck.ck-icon, .ck.ck-icon * { - color: var(--base-color); + color: var(--color--font-primary); } .ck.ck-button.ck-on .ck.ck-icon, .ck.ck-button.ck-on .ck.ck-icon *, @@ -78,7 +78,7 @@ /* buttons */ .ck.ck-button, a.ck.ck-button { font-size: 12px; - color: var(--base-color); + color: var(--color--font-primary); } .ck.ck-button:hover { @@ -86,20 +86,16 @@ } .ck.ck-button.ck-off.ck-button-save { - @include background-icon(accept, $size: 24px); - background-position: center; - background-repeat: no-repeat; + @include icon(after, accept, $size: 24px, $align: middle); } .ck.ck-button.ck-off.ck-button-cancel { - @include background-icon(decline, $size: 24px); - background-position: center; - background-repeat: no-repeat; + @include icon(after, decline, $size: 24px, $align: middle); } .ck.ck-button.ck-off.ck-button_with-text:not(.ck-character-grid__tile):not(.ck-source-editing-button) { background-position: 5px 50%; - border: solid thin var(--base-color); + border: solid thin var(--color--font-primary); } .ck-list .ck.ck-button.ck-off.ck-button_with-text:not(.ck-character-grid__tile):not(.ck-source-editing-button) { @@ -107,18 +103,23 @@ } .ck.ck-button.ck-off.ck-button_with-text:hover { - background-color: var(--base-color); + background-color: var(--color--highlight); + color: var(--color--font-inverted); } .ck.ck-button.ck-button_with-text.ck-dropdown__button:not(.ck-disabled, .ck-on):hover { - background-color: var(--white); - color: var(--base-color); + background-color: var(--color--font-inverted); + color: var(--color--highlight); } .ck.ck-button.ck-off.ck-button_with-text.ck-disabled:hover, .ck.ck-button.ck-off.ck-button_with-text.ck-character-grid__tile:hover { background: transparent; - color: var(--black); + color: var(--color--font-primary); +} + +.ck-list__item .ck.ck-button.ck-on.ck-button_with-text { + background-color: var(--color--highlight); } .ck-list__item .ck.ck-button.ck-on.ck-button_with-text { @@ -127,7 +128,12 @@ .ck.ck-button.ck-off.ck-button_with-text:not(.ck-disabled) .ck.ck-button__label { - color: var(--base-color); + color: var(--color--font-primary); +} + +.ck.ck-button.ck-off.ck-button_with-text:not(.ck-disabled):hover .ck.ck-button__label, +.ck.ck-button.ck-on.ck-button_with-text:not(.ck-disabled) .ck.ck-button__label { + color: var(--color--font-inverted); } .ck.ck-button.ck-off.ck-button_with-text:not(.ck-disabled, .ck-dropdown__button):hover .ck.ck-button__label, @@ -146,22 +152,22 @@ } .ck.ck-button.ck-on.ck-button_with-text.ck-switchbutton { - color: var(--base-color); + color: var(--color--font-primary); } .ck.ck-button.ck-on.ck-button_with-text.ck-switchbutton:hover { - color: var(--white); + color: var(-color--font-inverted); } .ck.ck-button.ck-off.ck-button-save:hover:not(.ck-disabled) { - @include background-icon(accept, info_alt, 24px); + color: var(--color--font-inverted); } .ck.ck-button.ck-off.ck-button-save.ck-disabled { - @include background-icon(accept, inactive, 24px); + color: var(--color--font-inactive); } .ck.ck-button.ck-off.ck-button-cancel:hover { - @include background-icon(decline, info_alt, 24px); + color: var(--color--font-inverted); } .ck.ck-button.ck-off.ck-button-save svg, @@ -179,8 +185,8 @@ } .ck.ck-button.ck-button_with-text.ck-switchbutton { - color: var(--base-color); - background-color: var(--white); + color: var(--color--font-primary); + background-color: var(--color--font-inverted); } .ck.ck-button.ck-button_with-text.ck-switchbutton, @@ -194,24 +200,24 @@ .ck.ck-collapsible.ck-collapsible_collapsed .ck.ck-button.ck-button_with-text:hover .ck.ck-button__label, .ck.ck-collapsible .ck.ck-button.ck-on.ck-button_with-text:not(.ck-disabled):not(.ck-switchbutton):not(.ck-dropdown__button) .ck.ck-button__label { - color: var(--base-color); + color: var(--color--highlight); } .ck.ck-collapsible.ck-collapsible_collapsed .ck.ck-button.ck-disabled.ck-button_with-text:hover .ck.ck-button__label { - color: var(--black); + color: var(--color--font-primary); } .ck.ck-collapsible .ck.ck-icon.ck-button__icon *, .ck.ck-collapsible .ck.ck-button:hover .ck.ck-icon.ck-button__icon *, .ck.ck-collapsible .ck.ck-button.ck-on .ck.ck-icon.ck-button__icon * { - color: var(--base-color); + color: var(--color--highlight); } .ck.ck-button.ck-button_with-text.ck-switchbutton.ck-on:hover, .ck.ck-button.ck-button_with-text.ck-switchbutton:hover { - background-color: var(--white); + background-color: var(--color--font-inverted); } .ck.ck-button.ck-button_with-text.ck-switchbutton.ck-on:hover span, @@ -236,7 +242,7 @@ /* links */ .ck .ck-fake-link-selection, .ck .ck-link_selected { - color: var(--white); + color: var(--color--font-inverted); } /* input */ @@ -321,7 +327,7 @@ /* table inserter */ .ck.ck-insert-table-dropdown-grid-box.ck-on { - background: var(--base-color-20); + background: var(--color--highlight); } /* tooltips */ diff --git a/resources/assets/stylesheets/scss/studip-selection.scss b/resources/assets/stylesheets/scss/studip-selection.scss index 6b94041..2000c7d 100644 --- a/resources/assets/stylesheets/scss/studip-selection.scss +++ b/resources/assets/stylesheets/scss/studip-selection.scss @@ -16,14 +16,14 @@ } li:not(.empty-placeholder) { - color: var(--base-color); + color: var(--color--highlight); cursor: pointer; margin: 1px 0; padding-right: 0.5em; } li.empty-placeholder { - color: fade-out($text-color, 0.3); + color: var(--color--font-secondary); &:not(:only-child) { display: none; @@ -50,11 +50,11 @@ } .studip-selection-selected .studip-selection-label { - @include icon(before, radiobutton-checked); + @include icon(before, radiobutton-checked, $align: bottom); } .studip-selection-selectable .studip-selection-label { - @include icon(before, radiobutton-unchecked); + @include icon(before, radiobutton-unchecked, $align: bottom); } .studip-selection-image + .studip-selection-label { @@ -65,15 +65,15 @@ .studip-selection-selected li:hover { .studip-selection-image, - .studip-selection-label::before { - @include background-icon(remove-circle-full); + .studip-selection-label { + @include icon(before, remove-circle-full, $align: bottom); } } .studip-selection-selectable li:hover { .studip-selection-image, - .studip-selection-label::before { - @include background-icon(add-circle-full); + .studip-selection-label { + @include icon(before, add-circle-full, $align: bottom); } } @@ -98,7 +98,7 @@ } .studip-selection-label { - color: var(--active-color); + color: var(--color--highlight-hover); } } } diff --git a/resources/assets/stylesheets/scss/system-notifications.scss b/resources/assets/stylesheets/scss/system-notifications.scss index b17cce5..b1fbed1 100644 --- a/resources/assets/stylesheets/scss/system-notifications.scss +++ b/resources/assets/stylesheets/scss/system-notifications.scss @@ -110,11 +110,8 @@ height: 20px; width: 20px; - img, svg { + svg { cursor: pointer; - position: absolute; - right: 10px; - top: 10px; } } @@ -171,30 +168,31 @@ } -.system-notification-exception { - background-color: var(--color--warning); - color: var(--color--white); - - .system-notification-timeout { - background-color: var(--color--warning-alternative); - } -} +.system-notification-exception, .system-notification-error { background-color: var(--color--warning); - color: var(--color--white); + color: var(--color--warning-contrast); + + .studip-icon { + color: var(--color--warning-contrast); + } .system-notification-timeout { - background-color: var(--color--warning-alternative); + background-color: var(--color--warning-secondary); } } .system-notification-warning { background-color: var(--color--attention); - color: var(--color--black); + color: var(--color--attention-contrast); + + .studip-icon { + color: var(--color--attention-contrast); + } .system-notification-timeout { - background-color: var(--color--attention-alternative); + background-color: var(--color--attention-secondary); } a:not(.system-notification-message) { @@ -211,16 +209,26 @@ .system-notification-success { background-color: var(--color--good); + color: var(--color--good-contrast); + + .studip-icon { + color: var(--color--good-contrast); + } .system-notification-timeout { - background-color: var(--color--good-alternative); + background-color: var(--color--good-secondary); } } .system-notification-info { background-color: var(--color--info); + color: var(--color--info-contrast); + + .studip-icon { + color: var(--color--info-contrast); + } .system-notification-timeout { - background-color: var(--color--info-alternative); + background-color: var(--color--info-secondary); } } diff --git a/resources/assets/stylesheets/scss/table_of_contents.scss b/resources/assets/stylesheets/scss/table_of_contents.scss index ef8077c..dcb7a30 100644 --- a/resources/assets/stylesheets/scss/table_of_contents.scss +++ b/resources/assets/stylesheets/scss/table_of_contents.scss @@ -21,7 +21,7 @@ ul.numberedchapters { position: absolute; right: -10px; top: -11px; - background-color: var(--white); + background-color: var(--color--global-background); border: 1px solid var(--content-color-40); margin: 11px 11px 10px; box-shadow: 2px 2px var(--dark-gray-color-30); @@ -46,11 +46,9 @@ ul.numberedchapters { right: 0; top: 12px; cursor: pointer; - @include background-icon(decline, $size: 24px); - background-repeat: no-repeat; - background-size: 24px; - background-position: center right; - background-color: var(--white); + color: var(--color--highlight); + background-color: var(--color--global-background); + @include icon(after, decline, $size: 24px, $align: middle, $padding: -4px); } &.cw-ribbon-slide-enter-active, diff --git a/resources/assets/stylesheets/scss/tables.scss b/resources/assets/stylesheets/scss/tables.scss index 9423b50..ec461cd 100644 --- a/resources/assets/stylesheets/scss/tables.scss +++ b/resources/assets/stylesheets/scss/tables.scss @@ -105,28 +105,34 @@ td.tree-indent { } .toggle-indicator { - color: var(--black); + color: var(--color--font-primary); font-weight: bold; a { background: left center no-repeat; - @include background-icon(arr_1down); - color: var(--black); + @include icon(before, arr_1down, $align: middle, $padding: -4px); + color: var(--color--font-primary); cursor: pointer; display: block; + &::before { + color: var(--color--highlight); + } } } .empty .toggle-indicator a { - @include background-icon(arr_1right, inactive); + @include icon(before, arr_1right, $align: middle, $padding: -4px); + ::before { + color: var(--color--font-inactive); + } } .collapsed .toggle-indicator a { - @include background-icon(arr_1right); + @include icon(before, arr_1right, $align: middle, $padding: -4px); } - td.label-cell, .toggle-indicator a, .empty .toggle-indicator { + td.label-cell, .empty .toggle-indicator { padding-left: 20px; } @@ -258,14 +264,21 @@ tr.sortable { .tablesorter-header-inner { display: inline-block; } + &::after { + color: var(--color--highlight); + } } th.sortasc { - @include icon('after', 'arr_1up', 'clickable', $icon-size-inline); + @include icon('after', 'arr_1up', $size: $icon-size-inline, $align: top, $padding: 2px); } th.sortdesc { - @include icon('after', 'arr_1down', 'clickable', $icon-size-inline); + @include icon('after', 'arr_1down', $size: $icon-size-inline, $align: top, $padding: 2px); + } + + th { + @include highlight-anchor; } } @@ -393,17 +406,11 @@ table.tree { padding-left: 5px; &.open { - @include background-icon(arr_1down); - background-position: left center; - background-repeat: no-repeat; - padding-left: 20px; + @include icon(before, arr_1down); } &.closed { - @include background-icon(arr_1right); - background-position: left center; - background-repeat: no-repeat; - padding-left: 20px; + @include icon(before, arr_1right); } } } @@ -609,15 +616,18 @@ table.default { float: right; text-align: right; white-space: nowrap; + color: var(--color--highlight); img, svg, input[type="image"] { vertical-align: middle; } + @include highlight-anchor; } > caption .actions { font-size: $font-size-base; border-left: 1px solid var(--color--table-border); + color: var(--color--font-primary); margin-bottom: -2px; padding-left: 0.5em; input[type=text] { @@ -630,6 +640,16 @@ table.default { float: none; } + th.actions { + color: var(--color--font-primary); + } + + td.actions:has(>svg) { + display: flex; + flex-direction: row-reverse; + gap: 4px; + } + > caption { .caption-container { display: flex; @@ -637,9 +657,17 @@ table.default { justify-content: space-between; margin-bottom: 5px; - img.text-bottom { + .files-home { + display: inline-flex; + gap: 8px; + } + + svg { vertical-align: middle; - margin: -4px 8px 0 0; + margin-top: -4px; + } + span > a { + margin-left: 2px; } } @@ -659,7 +687,7 @@ table.default { > tbody.toggleable { &.toggled { .toggle-switch { - @include background-icon(arr_1right); + @include icon(before, arr_1right); } tr:not(:first-child) { @@ -669,7 +697,7 @@ table.default { .toggle-switch { @include hide-text; - @include background-icon(arr_1down); + @include icon(before, arr_1down); display: inline-block; height: $icon-size-inline; text-align: center; @@ -742,11 +770,10 @@ article.studip > section > table.default:last-child { table.withdetails { > tbody > tr:not(.details) > td:first-child { - @include background-icon(arr_1right); - background-repeat: no-repeat; - background-position: 2px center; - padding-left: 20px; - + @include icon(before, arr_1right, $align: bottom); + &::before { + color: var(--color--highlight); + } > a { margin-left: -20px; padding-left: 20px; @@ -755,10 +782,13 @@ table.withdetails { > tbody > tr.open > td { background-color: var(--color--table-header); + &::before { + color: var(--color--highlight); + } } > tbody > tr.open > td:first-child { - @include background-icon(arr_1down); + @include icon(before, arr_1down, $align: bottom); } tr.details { @@ -794,15 +824,9 @@ table.withdetails { } @mixin sortable-dreieck($direction) { + @include icon(after, 'arr_1#{$direction}', $size: $icon-size-inline); &::after { - background-repeat: no-repeat; - content: ' '; - display: inline-block; - height: $icon-size-inline; - margin-left: 0; - @include background-icon('arr_1#{$direction}', clickable, $icon-size-inline); - vertical-align: text-bottom; - width: $icon-size-inline; + color: var('--color--highlight'); } } @@ -811,19 +835,19 @@ table.withdetails { .tablesorter-header:not(.sorter-false) { white-space: nowrap; - color: var(--base-color); + color: var(--color--highlight); &:hover { - color: var(--active-color); + color: var(--color--highlight-hover); cursor: pointer; } - &.tablesorter-headerDesc:hover .tablesorter-header-inner::after { - @include background-icon(arr_1down, status-red, $icon-size-inline); + &.tablesorter-headerDesc:hover .tablesorter-header-inner { + @include icon(after, arr_1down, $size: $icon-size-inline); } - &.tablesorter-headerAsc:hover .tablesorter-header-inner::after { - @include background-icon(arr_1up, status-red, $icon-size-inline); + &.tablesorter-headerAsc:hover .tablesorter-header-inner { + @include icon(after, arr_1up, $size: $icon-size-inline); } } @@ -930,7 +954,7 @@ table.show-tree { a:hover { background-color: var(--color--table-header) !important; - color: var(--base-color) !important; + color: var(--color--content-link-hover) !important; } } diff --git a/resources/assets/stylesheets/scss/tabs.scss b/resources/assets/stylesheets/scss/tabs.scss index 77179e5..914da5f 100644 --- a/resources/assets/stylesheets/scss/tabs.scss +++ b/resources/assets/stylesheets/scss/tabs.scss @@ -38,10 +38,10 @@ div.clear margin-right: 0; } &.current { - color: var(--base-color); + color: var(--color--main-navigation-item); } &:hover { - color: var(--base-color); + color: var(--color--main-navigation-item); padding-top: 0; } @@ -49,17 +49,25 @@ div.clear padding-top: 0; line-height: 25px; a, span.quiet { - color: var(--base-color); + color: var(--color--main-navigation-item); + + &:hover { + text-decoration: none; + } } } } a, span.quiet { - color: var(--black); + color: var(--color--font-primary); float: left; display: block; padding: 5px 8px; white-space: nowrap; + + &:hover { + text-decoration: none; + } } } diff --git a/resources/assets/stylesheets/scss/themes.scss b/resources/assets/stylesheets/scss/themes.scss new file mode 100644 index 0000000..ba618e1 --- /dev/null +++ b/resources/assets/stylesheets/scss/themes.scss @@ -0,0 +1,249 @@ +.theme-settings-app-wrapper { + .theme-list { + max-width: 1660px; + + h2 { + margin-top: 0; + } + + .theme-categories { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); + gap: 15px; + + .theme-category { + .theme-list { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); + gap: 15px; + padding: 0; + margin: 0; + list-style: none; + + li { + display: flex; + flex-direction: column; + justify-content: space-between; + border: 1px solid var(--color--tile-border); + border-left: 8px solid var(--color--tile-marker-inactive); + background: var(--color--tile-background); + padding: 0.5rem; + + &.active { + border-left-color: var(--color--tile-marker-active); + } + + &.theme-add { + border-left: 1px solid var(--color--tile-border); + + button { + width: 100%; + height: 100%; + background: var(--color--tile-background); + border: none; + color: var(--color--font-primary); + font-size: 1.1rem; + cursor: pointer; + color: var(--color--highlight); + + .studip-icon { + display: inline-block; + vertical-align: top; + margin-right: 5px; + } + } + } + + .theme-info { + display: flex; + justify-content: space-between; + align-items: flex-start; + + .theme-meta { + flex: 1; + + .theme-name { + margin: 0; + font-size: 1.1rem; + } + + .theme-description { + margin: 0.25rem 0 0 0; + font-size: 0.9rem; + color: var(--color--text-muted); + } + } + + .theme-colors { + display: flex; + gap: 4px; + + .theme-color { + width: 14px; + height: 48px; + } + } + } + + .theme-actions { + display: flex; + justify-content: flex-end; + gap: 0.5rem; + margin-top: 2rem; + + button.button { + margin: 0; + } + } + } + } + } + + .themes-footer { + grid-column: 1 / -1; + display: flex; + justify-content: center; + margin-top: 2rem; + } + + .json-upload { + margin-top: 2rem; + + input { + margin-bottom: 1rem; + } + + button { + padding: 0.5rem 1rem; + } + } + } + } +} +.theme-editor { + .color-group { + margin-bottom: 2rem; + + .group-title { + font-size: 1.2rem; + margin-bottom: 0.5rem; + border-bottom: 1px solid var(--color--divider); + padding-bottom: 0.2rem; + } + + .color-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + gap: 1rem; + + .color-entry { + display: flex; + flex-direction: row; + justify-content: flex-start; + min-height: 150px; + background: var(--color--tile-background); + border: 1px solid var(--color--tile-border); + + .color-entry-color { + border: 1px solid var(--color--tile-border); + width: 50px; + margin: 10px; + } + .color-entry-content { + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 0.5rem; + flex-grow: 1; + + .color-entry-text { + .color-entry-hex { + font-weight: 700; + } + } + + .color-entry-buttons { + display: flex; + justify-content: end; + button.button.btn-icon--only { + margin: 0 8px 0 0; + } + } + } + } + } + } + .new-color-entry { + input { + margin-right: 8px; + } + + button { + margin-left: 8px; + } + } +} + +.theme-upload { + display: flex; + flex-direction: column; + width: 540px; + border: solid thin var(--color--tile-border); + background: var(--color--global-background); + margin: 0 auto; + padding: 1em; + .theme-upload-title h3 { + margin: 0; + font-size: 1.1rem; + } +} +.theme-upload-actions { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-top: 30px; + + .visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; + } + .file-dropzone-wrapper { + width: 100%; + padding: 5px; + border: thin solid var(--color--tile-border); + border-radius: var(--border-radius-default); + background: var(--color--tile-background); + cursor: pointer; + + .file-dropzone { + display: inline-flex; + width: calc(100% - 60px); + gap: 20px; + padding: 30px; + border: thin solid transparent; + color: var(--color--highlight); + border-radius: var(--border-radius-default); + + &:hover { + border: thin dashed var(--color--tile-border); + } + + .studip-icon { + flex-shrink: 0; + } + + span { + max-width: 14em; + padding: 7px 0; + } + } + } +} diff --git a/resources/assets/stylesheets/scss/tree.scss b/resources/assets/stylesheets/scss/tree.scss index 1d700f9..af1c8ec 100644 --- a/resources/assets/stylesheets/scss/tree.scss +++ b/resources/assets/stylesheets/scss/tree.scss @@ -19,6 +19,15 @@ $tree-outline: 1px solid var(--light-gray-color-40); .contentbar-wrapper-right { display: inherit; + button, + a { + color: var(--color--highlight); + + &:hover { + color: var(--color--highlight-hover); + } + } + .action-menu { button { top: -2px; @@ -77,7 +86,7 @@ $tree-outline: 1px solid var(--light-gray-color-40); button { background: transparent; border: 0; - color: var(--base-color); + color: var(--color--highlight); cursor: pointer; padding: 0; diff --git a/resources/assets/stylesheets/scss/typography.scss b/resources/assets/stylesheets/scss/typography.scss index 5268145..d3a70a8 100644 --- a/resources/assets/stylesheets/scss/typography.scss +++ b/resources/assets/stylesheets/scss/typography.scss @@ -8,7 +8,7 @@ body { font-family: $font-family-base; font-size: $font-size-base; line-height: $line-height-base; - color: $text-color; + color: var(--color--font-primary); } // Reset fonts for relevant elements @@ -33,7 +33,7 @@ h1, h2, h3, h4, h5, h6 { font-family: $headings-font-family; font-weight: $headings-font-weight; line-height: $headings-line-height; - color: $headings-color; + color: var(--color--font-primary); } h1 { diff --git a/resources/assets/stylesheets/scss/variables.scss b/resources/assets/stylesheets/scss/variables.scss index 551bb0a..4e7e36f 100644 --- a/resources/assets/stylesheets/scss/variables.scss +++ b/resources/assets/stylesheets/scss/variables.scss @@ -2,7 +2,7 @@ @import '../mixins/colors'; // Typography -$text-color: #000; +$text-color: var(--color--font-primary); $font-family-base: "Lato", sans-serif; @@ -81,15 +81,21 @@ $grid-gap: 0; // Buttons $button-icons: ( accept: accept, - cancel: decline, - edit: edit, - move-up: arr_1up, - move-down: arr_1down, add: add, - trash: trash, - download: download, - search: search, arr_left: arr_1left, arr_right: arr_1right, + cancel: decline, + date: date, + delete: trash, + edit: edit, + move-down: arr_1down, + move-up: arr_1up, + play: play, refresh: refresh, -); + search: search, + sidebar-toggle: sidebar3, + trash: trash, + upload: upload, + has-notice: file-text, + has-no-notice: file, +);
\ No newline at end of file diff --git a/resources/assets/stylesheets/scss/vips.scss b/resources/assets/stylesheets/scss/vips.scss index f11afda..ea092af 100644 --- a/resources/assets/stylesheets/scss/vips.scss +++ b/resources/assets/stylesheets/scss/vips.scss @@ -36,18 +36,6 @@ form.default { } } -button.vips_file_upload { - @include background-icon(upload); - background-position: 0.5em center; - background-repeat: no-repeat; - background-size: var(--icon-size-inline); - padding-left: 30px; - - &:hover { - @include background-icon(upload, info_alt); - } -} - progress.assignment { appearance: none; background: var(--light-gray-color-20); @@ -157,6 +145,9 @@ progress.assignment { } .exercise_type { + display: flex; + flex-direction: row; + gap: 16px; background-color: transparent; background-position: 0.5em center; background-repeat: no-repeat; @@ -165,7 +156,7 @@ progress.assignment { cursor: pointer; margin-top: 1.5ex; min-height: 50px; - padding: 4px 4px 4px 56px; + padding: 8px; text-align: left; width: 342px; @@ -173,6 +164,15 @@ progress.assignment { border: 1px solid var(--brand-color-dark); color: var(--active-color); } + + .exercise_type_description { + display: flex; + flex-direction: column; + + .exercise_type_name { + font-weight: bold; + } + } } .exercise .points { diff --git a/resources/assets/stylesheets/scss/wiki.scss b/resources/assets/stylesheets/scss/wiki.scss index 3d1c1ff..f03ce6f 100644 --- a/resources/assets/stylesheets/scss/wiki.scss +++ b/resources/assets/stylesheets/scss/wiki.scss @@ -49,12 +49,7 @@ body#wiki #main_content { } a.wiki-restricted { - $icon-size: 12px; - @include background-icon(lock-locked, info, $icon-size); - background-position: left center; - background-repeat: no-repeat; - - padding-left: $icon-size; + @include icon(before, lock-locked, $size: 12px, $padding: 12px); } .wiki-empty-background { @@ -156,13 +151,19 @@ a.wiki-restricted { .wiki_added { background-color: var(--content-color-20); border: 1px solid var(--content-color-40); - @include background-icon(add, inactive); + @include icon(before, add); + &::before { + color: var(--color--font-inactive); + } } .wiki_erased { background-color: var(--white); border: 1px solid var(--light-gray-color-40); - @include background-icon(remove, inactive); + @include icon(before, remove); + &::before { + color: var(--color--font-inactive); + } } .wiki_added + div, .wiki_erased + div { diff --git a/resources/assets/stylesheets/scss/wizard.scss b/resources/assets/stylesheets/scss/wizard.scss index 9663f98..8c869c2 100644 --- a/resources/assets/stylesheets/scss/wizard.scss +++ b/resources/assets/stylesheets/scss/wizard.scss @@ -9,13 +9,12 @@ margin-top: 38px; flex-shrink: 0; - img { + .studip-icon { margin: auto; - display: block; } p { - margin: 15px; + margin: 15px 0; } .wizard-requirements { @@ -30,14 +29,17 @@ list-style: none; button { + display: inline-flex; + align-items: center; + gap: 4px; padding: 2px 0; background-color: transparent; border: none; - color: var(--base-color); + color: var(--color--highlight); cursor: pointer; &:hover { - color: var(--red); + color: var(--color--highlight--hover); } } @@ -68,34 +70,40 @@ display: inline-block; position: relative; margin-right: 60px; - border: solid 2px var(--base-color); + border: solid 2px var(--color--highlight); button { + display: inline-flex; + justify-content: center; padding: 6px 0; height: 36px; width: 36px; cursor: pointer; background: no-repeat; border: none; + color: var(--color--highlight); } &.valid { - background-color: var(--base-color); + background-color: var(--color--highlight); + button { + color: var(--color--highlight-contrast); + } } &.invalid { - background-color: white; + background-color: var(--color--global-background); } &.optional { - border: dashed thin var(--base-color); + border: dashed thin var(--color--highlight); } &::before { position: absolute; content: ""; width: 62px; - border: solid thin var(--base-color); + border: solid thin var(--color--highlight); top: 50%; transform: translateY(-50%); left: 100%; @@ -106,7 +114,7 @@ content: ""; width: 38px; height: 3px; - background: var(--base-color); + background: var(--color--highlight); top: 44px; left: -1px; } @@ -132,10 +140,10 @@ max-height: 475px; overflow-y: auto; scrollbar-width: thin; - scrollbar-color: var(--base-color) var(--dark-gray-color-5); + scrollbar-color: var(--color--highlight) var(--dark-gray-color-5); .wizard-required { - color: var(--red); + color: var(--color--warning); } textarea { diff --git a/resources/assets/stylesheets/studip.scss b/resources/assets/stylesheets/studip.scss index 97422e1..d923f64 100644 --- a/resources/assets/stylesheets/studip.scss +++ b/resources/assets/stylesheets/studip.scss @@ -53,6 +53,7 @@ @import "scss/headings"; @import "scss/helpbar"; @import "scss/i18n"; +@import "scss/icons"; @import "scss/ilias-interface"; @import "scss/index"; @import "scss/fullscreen"; @@ -80,7 +81,6 @@ @import "scss/questionnaire"; @import "scss/quicksearch"; @import "scss/raumzeit"; -@import "scss/report"; @import "scss/responsive"; @import "scss/resources"; @import "scss/sidebar"; @@ -104,6 +104,7 @@ @import "scss/talk-bubble"; @import "scss/tooltip"; @import "scss/tfa"; +@import "scss/themes"; @import "scss/tour"; @import "scss/tree"; @import "scss/typography"; @@ -380,8 +381,8 @@ td.index_box_cell { a { box-sizing: border-box; - background-color: var(--content-color-20); - border: 1px solid var(--dark-gray-color-30); + background-color: var(--color--tile-background); + border: 1px solid var(--color--tile-border); display: block; height: 11em; margin: 0 0 1em; @@ -390,15 +391,16 @@ td.index_box_cell { position: relative; &:hover { - background-color: var(--content-color-10); - border-color: var(--dark-gray-color-45); + background-color: var(--color--tile-background-hover); + border-color: var(--color--tile-border-hover); + text-decoration: none; p { - color: var(--black); + color: var(--color--font-primary); } } } - img { + svg { height: calc(100% - 20px); position: absolute; top: 10px; @@ -416,25 +418,25 @@ td.index_box_cell { padding: 0; } p { - color: var(--dark-gray-color-80); + color: var(--color--font-secondary); } } /* --- general style classes ------------------------------------------------ */ .arrow_down { background: transparent top left no-repeat !important; - @include background-icon(arr_1down); + @include icon(before, arr_1down); } .arrow_right { background: transparent top left no-repeat !important; - @include background-icon(arr_1right); + @include icon(before, arr_1right); } h1:hover, h2:hover, h3:hover, h4:hover { .arrow_down { - @include background-icon(arr_1down, attention); + @include icon(before, arr_1down, attention); } .arrow_right { - @include background-icon(arr_1right, attention); + @include icon(before, arr_1right, attention); } } @@ -643,10 +645,11 @@ input.allow-plaintext-toggle { position: absolute; transform: translateY(-50%); - @include background-icon(visibility-invisible); + @include icon($position: before, $icon: visibility-invisible, $padding: 6px); + color: var(--color--font-primary); &.password-is-hidden { - @include background-icon(visibility-checked); + @include icon($position: before, $icon: visibility-checked, $padding: 6px); } } } diff --git a/resources/vue/apps/ThemeSettings.vue b/resources/vue/apps/ThemeSettings.vue new file mode 100644 index 0000000..a69fe89 --- /dev/null +++ b/resources/vue/apps/ThemeSettings.vue @@ -0,0 +1,52 @@ +<template> + <div class="theme-settings-app-wrapper"> + <ThemeEditor + v-if="selectedTheme" + :theme="selectedTheme" + @back="clearSelection" + /> + + <ThemeList + v-else + :themes="themes" + @select="selectTheme" + @activate="activateTheme" + @add="addTheme" + /> + </div> +</template> + +<script setup> +import { computed, ref } from 'vue'; +import { useStore } from 'vuex'; +import ThemeList from '@/vue/components/theme/ThemeList.vue'; +import ThemeEditor from '@/vue/components/theme/ThemeEditor.vue'; + + +const store = useStore(); +const themes = computed(() => store.getters['studip-themes/all']); +const selectedTheme = ref(null); + +const selectTheme = (theme) => { + selectedTheme.value = theme; +}; + +const activateTheme = (theme) => { + store.dispatch('theme-settings-module/activateTheme', {theme: theme}).then(() => { + window.location.reload(); + }); +}; + +const addTheme = () => { + store.dispatch('theme-settings-module/addTheme').then((theme) => { + selectTheme(theme); + }); +}; + +const clearSelection = () => { + selectedTheme.value = null; +}; + +store.dispatch('users/loadById', { id: store.getters['theme-settings-module/userId'] }); +store.dispatch('studip-themes/loadAll', {options: {}}); +</script> diff --git a/resources/vue/components/ContentModulesEditTiles.vue b/resources/vue/components/ContentModulesEditTiles.vue index 5867eba..fc2b2ee 100644 --- a/resources/vue/components/ContentModulesEditTiles.vue +++ b/resources/vue/components/ContentModulesEditTiles.vue @@ -21,7 +21,7 @@ <div> <a class="upper_part dragarea" :href="getDescriptionURL(element)" data-dialog> <div> - <img :src="element.icon" width="40" height="40" v-if="element.icon" /> + <StudipIcon v-if="element.icon" :shape="element.icon.shape" :size="40" /> </div> <div> <h3>{{ element.displayname }}</h3> @@ -118,7 +118,7 @@ <div> <a class="upper_part" :href="getDescriptionURL(module)" data-dialog> <div> - <img :src="module.icon" width="40" height="40" v-if="module.icon" /> + <StudipIcon v-if="module.icon" :shape="module.icon.shape" :size="40" /> </div> <div> <h3>{{ module.displayname }}</h3> @@ -182,7 +182,7 @@ export default { } .inactive-modules { margin-top: 1em; - border-top: solid thin var(--content-color-40); + border-top: solid thin var(--color--tile-border); padding-top: 1em; } .studip-grid-element { @@ -205,7 +205,7 @@ export default { } &.sortable-ghost { - border: dashed 2px var(--content-color-40); + border: dashed 2px var(--color--tile-border); margin: 0; * { opacity: 0; @@ -244,8 +244,11 @@ export default { min-height: 150px; width: 100%; - > .upper_part { + > a.upper_part { display: flex; + color: var(--color--highlight); + height: 100%; + > :first-child { padding: 10px 5px 10px 15px; } @@ -254,7 +257,14 @@ export default { h3 { margin-top: 0; - color: var(--base-color); + color: var(--color--highlight); + } + } + &:hover { + color: var(--color--highlight-hover); + text-decoration: none; + h3 { + color: var(--color--highlight-hover); } } } diff --git a/resources/vue/components/ContentmodulesEditTable.vue b/resources/vue/components/ContentmodulesEditTable.vue index 85b89a3..58fe01d 100644 --- a/resources/vue/components/ContentmodulesEditTable.vue +++ b/resources/vue/components/ContentmodulesEditTable.vue @@ -55,7 +55,7 @@ :href="getDescriptionURL(element)" data-dialog > - <img :src="element.icon" width="20" height="20" v-if="element.icon" class="text-bottom" /> + <StudipIcon v-if="element.icon" :shape="element.icon.shape" :size="20" /> {{ element.displayname }} </a> </td> @@ -110,7 +110,7 @@ </td> <td> <a class="upper_part" :href="getDescriptionURL(module)" data-dialog> - <img :src="module.icon" width="20" height="20" v-if="module.icon" class="text-bottom" /> + <StudipIcon v-if="module.icon" :shape="module.icon.shape" :size="20" /> {{ module.displayname }} </a> </td> @@ -152,6 +152,17 @@ table.admin_contentmodules > tbody > tr { } > td { height: 31px; //to make all rows equally high + + a { + display: flex; + flex-direction: row; + gap: 10px; + color: var(--color--content-link); + + &:hover { + color: var(--color--content-link-hover); + } + } } } </style> diff --git a/resources/vue/components/FilesTable.vue b/resources/vue/components/FilesTable.vue index 85e237a..2bc83ce 100644 --- a/resources/vue/components/FilesTable.vue +++ b/resources/vue/components/FilesTable.vue @@ -6,10 +6,9 @@ <caption> <div class="caption-container"> <div v-if="breadcrumbs && !table_title"> - <a v-if="breadcrumbs[0]" :href="breadcrumbs[0].url" :title="$gettext('Zum Hauptordner')"> + <a v-if="breadcrumbs[0]" :href="breadcrumbs[0].url" :title="$gettext('Zum Hauptordner')" class="files-home"> <studip-icon shape="folder-home-full" role="clickable" - class="text-bottom" :size="30"></studip-icon> <span v-if="breadcrumbs.length === 1"> {{ breadcrumbs[0].name }} diff --git a/resources/vue/components/StudipDialog.vue b/resources/vue/components/StudipDialog.vue index 77edd1b..8d56668 100644 --- a/resources/vue/components/StudipDialog.vue +++ b/resources/vue/components/StudipDialog.vue @@ -1,7 +1,7 @@ <template> <Teleport to="body"> <focus-trap v-model="trap"> - <div class="studip-dialog" @keydown.esc="closeDialog" :style="{zIndex: zIndex}"> + <div class="studip-dialog" @keydown.esc="closeDialog" :style="{ zIndex: zIndex }"> <transition name="dialog-fade"> <div class="studip-dialog-backdrop" v-if="true"> <vue-resizeable @@ -30,7 +30,7 @@ :class="[ { 'studip-dialog-warning': question, 'studip-dialog-alert': alert }, 'studip-dialog-body', - $attrs.class + $attrs.class, ]" role="dialog" aria-modal="true" @@ -38,14 +38,14 @@ :aria-describedby="dialogDescId" ref="dialog" > - <header - class="studip-dialog-header" - > - <span :id="dialogTitleId" - class="studip-dialog-title" - :title="dialogTitle" - role="heading" - aria-level="2"> + <header class="studip-dialog-header"> + <span + :id="dialogTitleId" + class="studip-dialog-title" + :title="dialogTitle" + role="heading" + aria-level="2" + > {{ dialogTitle }} </span> <slot name="dialogHeader"></slot> @@ -54,8 +54,7 @@ :title="$gettext('Schließen')" class="studip-dialog-close-button" @click="closeDialog" - > - </button> + ></button> </header> <section :id="dialogDescId" @@ -125,32 +124,32 @@ export default { props: { height: { type: [String, Number], - default: 300 + default: 300, }, width: { type: [String, Number], - default: 450 + default: 450, }, title: String, confirmText: String, closeText: String, confirmShow: { type: Boolean, - default: true + default: true, }, confirmDisabled: { type: Boolean, - default: false + default: false, }, confirmClass: String, - closeClass: String, + closeClass: [String, Boolean], question: String, alert: String, message: String, defaultFocus: { type: Boolean, - default: true - } + default: true, + }, }, data() { const dialogId = uuid++; @@ -166,8 +165,8 @@ export default { minH: 100, left: 0, top: 0, - dragSelector: ".studip-dialog-header", - handlers: ["r", "rb", "b", "lb", "l", "lt", "t", "rt"], + dragSelector: '.studip-dialog-header', + handlers: ['r', 'rb', 'b', 'lb', 'l', 'lt', 't', 'rt'], fit: false, footerHeight: 68, @@ -189,7 +188,7 @@ export default { button = {}; button.text = this.confirmText; button.class = this.confirmClass; - button.disabled = this.confirmDisabled + button.disabled = this.confirmDisabled; } return button; @@ -209,8 +208,10 @@ export default { if (this.closeText) { button = {}; button.text = this.closeText; - if (this.closeClass) { + if (typeof this.closeClass === 'string') { button.class = this.closeClass; + } else if (this.closeClass === false) { + // keine Klasse setzen } else { button.class = 'cancel'; } @@ -231,14 +232,14 @@ export default { return ''; }, dialogWidth() { - return this.currentWidth ? (this.currentWidth - dialogPadding * 4) + 'px' : 'unset'; + return this.currentWidth ? this.currentWidth - dialogPadding * 4 + 'px' : 'unset'; }, dialogHeight() { - return this.currentHeight ? (this.currentHeight - dialogPadding * 4) + 'px' : 'unset'; + return this.currentHeight ? this.currentHeight - dialogPadding * 4 + 'px' : 'unset'; }, contentHeight() { return this.currentHeight ? this.currentHeight - this.footerHeight + 'px' : 'unset'; - } + }, }, methods: { closeDialog() { @@ -272,25 +273,21 @@ export default { if (el) { el.blur(); } - } + }, }, mounted() { if (this.defaultFocus) { - this.$nextTick() - .then(() => { - this.$refs.buttonB.focus(); - }); + this.$nextTick().then(() => { + this.$refs.buttonB.focus(); + }); } }, created() { - const maxZIndex = Array.from(document.querySelectorAll('.studip-dialog')).reduce( - (acc, el) => { - const style = getComputedStyle(el); - return Math.max(acc, Number.parseInt(style.zIndex, 10)); - }, - 1000 - ); + const maxZIndex = Array.from(document.querySelectorAll('.studip-dialog')).reduce((acc, el) => { + const style = getComputedStyle(el); + return Math.max(acc, Number.parseInt(style.zIndex, 10)); + }, 1000); this.zIndex = maxZIndex + 1; - } + }, }; </script> diff --git a/resources/vue/components/StudipFileChooser.vue b/resources/vue/components/StudipFileChooser.vue index 37dc208..1e7c322 100644 --- a/resources/vue/components/StudipFileChooser.vue +++ b/resources/vue/components/StudipFileChooser.vue @@ -132,7 +132,7 @@ export default { } span { box-sizing: border-box; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); border-left: none; display: inline-block; font-size: 14px; diff --git a/resources/vue/components/StudipIcon.vue b/resources/vue/components/StudipIcon.vue index 5248ff9..ddd55c3 100644 --- a/resources/vue/components/StudipIcon.vue +++ b/resources/vue/components/StudipIcon.vue @@ -1,118 +1,80 @@ <template> - <input - v-if="name" + <div + v-if="!name" v-bind="$attrs" - type="image" - :name="name" - :src="url" - :style="{ width: realSize + 'px', height: realSize + 'px' }" + v-html="svgContent" :role="ariaRole" :class="cssClass" - :alt="$attrs.alt ?? ''" - /> - <img v-else - v-bind="$attrs" - :src="url" - :style="{ width: realSize + 'px', height: realSize + 'px' }" - :role="ariaRole" - :class="cssClass" - :alt="$attrs.alt ?? ''" + :style="computedStyle" /> + + <label v-else class="icon-button undecorated"> + <input type="submit" hidden v-bind="$attrs"> + <div v-html="svgContent" :role="ariaRole" :class="cssClass" :style="computedStyle" /> + <span v-if="text">{{ text }}</span> + </label> </template> <script lang="ts"> import { defineComponent } from 'vue'; - -function getCSSVariableValue(property: string): number { - const value = getComputedStyle(document.body).getPropertyValue(property); - return parseInt(value, 10); -} - -const defaultIconSize: number = getCSSVariableValue('--icon-size-default'); -const inlineIconSize: number = getCSSVariableValue('--icon-size-inline'); +import iconLoader from "../../assets/javascripts/lib/icon-loader"; export default defineComponent({ name: 'studip-icon', props: { - ariaRole: { - type: String, - required: false, - }, - name: { - type: String, - required: false, - }, - role: { - type: String, - required: false, - default: 'clickable', - }, - shape: { - type: String, - required: true, - }, - size: { - type: Number, - required: false, - default: defaultIconSize, - }, - inline: { - type: Boolean, - default: false - } + ariaRole: { type: String, required: false }, + name: { type: String, required: false }, + role: { type: String, required: false, default: 'clickable' }, + shape: { type: String, required: true }, + size: { type: Number, required: false, default: null }, + inline: { type: Boolean, default: false }, + text: { type: String, required: false } + }, + data() { + return { svgContent: '' }; }, computed: { - realSize(): number | undefined { - if (this.inline) { - return inlineIconSize; - } - return Number(this.size) !== defaultIconSize ? this.size : undefined; - }, - url(): string { - if (this.shape.indexOf('http') === 0) { - return this.shape; - } - var path = this.shape.split('+').reverse().join('/'); - return `${window.STUDIP.ASSETS_URL}images/icons/${this.color}/${path}.svg`; - }, color(): string { - switch (this.role) { - case 'info': - return 'black'; - - case 'inactive': - return 'grey'; - - case 'accept': - case 'status-green': - return 'green'; - - case 'attention': - case 'new': - case 'status-red': - return 'red'; - - case 'info_alt': - return 'white'; + const roleColors: Record<string, string> = { + accept: 'green', + attention: 'red', + clickable: 'blue', + info: 'black', + info_alt: 'white', + inactive: 'grey', + navigation: 'blue', + new: 'red', + sort: 'blue', + 'status-green': 'green', + 'status-red': 'red', + 'status-yellow': 'yellow', + }; - case 'status-yellow': - return 'yellow'; - - case 'sort': - case 'clickable': - case 'navigation': - default: - return 'blue'; - } + return roleColors[this.role] ?? 'blue'; }, - cssClass(): Array<string> { + cssClass(): string[] { return [ 'studip-icon', this.inline ? 'studip-icon-inline' : '', `icon-role-${this.role}`, - `icon-shape-${this.shape}`, + `icon-shape-${this.shape}` ]; + }, + computedStyle(): Record<string, string> { + return this.size + ? { width: `${this.size}px`, height: `${this.size}px` } + : {}; // Falls size nicht gesetzt ist, greift CSS mit --icon-size-default } }, + watch: { + shape: { + immediate: true, + handler(shape) { + iconLoader.load(shape).then((svg: string) => { + this.svgContent = svg; + }); + } + } + } }); </script> diff --git a/resources/vue/components/StudipModalLeave.vue b/resources/vue/components/StudipModalLeave.vue new file mode 100644 index 0000000..1e1f4f5 --- /dev/null +++ b/resources/vue/components/StudipModalLeave.vue @@ -0,0 +1,94 @@ +<template> + <StudipDialog + v-if="showModal" + width="600" + height="200" + @confirm="confirmLeave" + @close="cancelLeave" + :closeClass="false" + :closeText="$gettext('Auf Seite bleiben')" + :confirmText="$gettext('Seite verlassen')" + :title="$gettext('Ungespeicherte Änderungen')" + :question="$gettext('Es gibt ungespeicherte Änderungen. Möchten Sie die Seite wirklich verlassen?')" + > + <template #dialogButtons> + <button v-if="props.onSave" class="button" @click="saveAndLeave"> + {{ $gettext('Speichern & Verlassen') }} + </button> + </template> + </StudipDialog> +</template> + +<script setup> +import { ref, onMounted, onUnmounted } from 'vue'; +import StudipDialog from './StudipDialog.vue'; + +const props = defineProps({ + hasUnsavedChanges: { + type: Boolean, + required: true, + }, + onSave: { + type: Function, + required: false, + }, +}); + +const showModal = ref(false); +const pendingHref = ref(null); + +function onClick(e) { + const link = e.target.closest('a[href]'); + if (!link || link.target === '_blank') { + return; + } + + const href = link.href; + + if (props.hasUnsavedChanges) { + e.preventDefault(); + pendingHref.value = href; + showModal.value = true; + } +} + +function confirmLeave() { + window.removeEventListener('beforeunload', onBeforeUnload); + showModal.value = false; + window.location.href = pendingHref.value; +} + +function cancelLeave() { + showModal.value = false; + pendingHref.value = null; +} + +function onBeforeUnload(e) { + if (props.hasUnsavedChanges) { + e.preventDefault(); + e.returnValue = ''; + return ''; + } +} +async function saveAndLeave() { + if (typeof props.onSave === 'function') { + try { + await props.onSave(); + window.removeEventListener('beforeunload', onBeforeUnload); + window.location.href = pendingHref.value; + } catch (e) { + console.error('Speichern fehlgeschlagen:', e); + } + } +} + +onMounted(() => { + document.addEventListener('click', onClick); + window.addEventListener('beforeunload', onBeforeUnload); +}); + +onUnmounted(() => { + document.removeEventListener('click', onClick); + window.removeEventListener('beforeunload', onBeforeUnload); +}); +</script> diff --git a/resources/vue/components/StudipSquareButton.vue b/resources/vue/components/StudipSquareButton.vue index 42434dd..e1bcb66 100644 --- a/resources/vue/components/StudipSquareButton.vue +++ b/resources/vue/components/StudipSquareButton.vue @@ -23,33 +23,4 @@ export default { }, }, }; -</script> -<style scoped lang="scss"> -$size: 130px; -.square-button { - display: flex; - flex-direction: column; - justify-content: flex-start; - max-height: $size; - max-width: $size; - min-width: $size; - min-height: $size; - margin: 10px; - padding: 10px; - background-color: transparent; - border: solid thin var(--content-color-40); - cursor: pointer; - - img { - height: 50px; - margin: 0 auto 8px auto; - } - span { - color: var(--base-color); - min-width: 110px; - } - &:hover span { - color: var(--red); - } -} -</style> +</script>
\ No newline at end of file diff --git a/resources/vue/components/avatar/AvatarApp.vue b/resources/vue/components/avatar/AvatarApp.vue index 1067e42..cf86ef4 100644 --- a/resources/vue/components/avatar/AvatarApp.vue +++ b/resources/vue/components/avatar/AvatarApp.vue @@ -370,13 +370,6 @@ export default { height: 500px; margin-bottom: 1em; } -.square-button-panel { - display: flex; - flex-direction: row; - flex-wrap: wrap; - width: 100%; - justify-content: center; -} .cropper-actions-wrapper { max-width: 500px; diff --git a/resources/vue/components/colorPicker/ColorPicker.vue b/resources/vue/components/colorPicker/ColorPicker.vue new file mode 100644 index 0000000..3da8ed6 --- /dev/null +++ b/resources/vue/components/colorPicker/ColorPicker.vue @@ -0,0 +1,92 @@ +<template> + <div class="studip-color-picker" ref="wrapper"> + <span v-if="withColor" class="studip-color-picker-value" :style="{ backgroundColor: selectedColor }"></span> + <button class="button btn-icon--only" @click="togglePicker" :disabled="disabled"> + <StudipIcon shape="group4" /> + </button> + + <div v-if="isOpen" class="color-picker-popup"> + <div class="tabs"> + <button :class="{ active: tab === 'palette' }" @click="tab = 'palette'"> + {{ $gettext('Palette') }} + </button> + <button :class="{ active: tab === 'spectrum' }" @click="tab = 'spectrum'"> + {{ $gettext('Spektrum') }} + </button> + </div> + + <div v-show="tab === 'palette'" class="palette-grid"> + <button + v-for="color in colors" + :key="color" + class="color-swatch" + :class="{ selected: selectedColor === color, inverted: color === '#ffffff' }" + :style="{ backgroundColor: color }" + :aria-label="color" + @click="selectedColor = color" + @dblclick="selectedColor = color; confirmSelection()" + /> + </div> + + <div v-show="tab === 'spectrum'" class="spectrum"> + <ChromePicker v-model="selectedColor" :formats="['hex', 'rgb', 'hsl']" :disableAlpha="true" /> + </div> + + <div class="actions"> + <button class="button" @click="confirmSelection">{{ $gettext('Wählen') }}</button> + </div> + </div> + </div> +</template> + +<script setup> +import { ref, watch, onMounted, onBeforeUnmount } from 'vue'; +import 'vue-color/style.css'; +import { ChromePicker } from 'vue-color'; +import colors from './colorPalette'; +import StudipIcon from '../StudipIcon.vue'; + +const props = defineProps({ + modelValue: { type: String, required: true }, + disabled: { type: Boolean, default: false }, + withColor: { type: Boolean, default: false }, +}); +const emit = defineEmits(['update:modelValue']); + +const wrapper = ref(null); +const isOpen = ref(false); +const tab = ref('palette'); + +const selectedColor = ref(props.modelValue); + +watch( + () => props.modelValue, + (val) => { + if (val !== selectedColor.value) { + selectedColor.value = val; + } + } +); + +const confirmSelection = () => { + emit('update:modelValue', selectedColor.value); + isOpen.value = false; +}; + +const togglePicker = () => { + isOpen.value = !isOpen.value; +}; + +const handleClickOutside = (event) => { + if (wrapper.value && !wrapper.value.contains(event.target)) { + isOpen.value = false; + } +}; + +onMounted(() => document.addEventListener('click', handleClickOutside)); +onBeforeUnmount(() => document.removeEventListener('click', handleClickOutside)); +</script> + +<style lang="scss"> +@import '../../../assets/stylesheets/scss/colorpicker.scss'; +</style> diff --git a/resources/vue/components/colorPicker/colorPalette.ts b/resources/vue/components/colorPicker/colorPalette.ts new file mode 100644 index 0000000..f6a4239 --- /dev/null +++ b/resources/vue/components/colorPicker/colorPalette.ts @@ -0,0 +1,13 @@ +export default [ + '#28497c', '#536d96', '#7e92b0', '#a9b6cb', '#d4dbe5', + '#682c8b', '#8656a2', '#a480b9', '#c2aad0', '#e0d4e7', + '#af2d7b', '#bf5796', '#cf81b0', '#dfabca', '#efd5e4', + '#d60000', '#de3333', '#e76666', '#ef9999', '#f7cccc', + '#f26e00', '#f58b33', '#f7a866', '#fac599', '#fce2cc', + '#ffbd33', '#ffca5c', '#ffd785', '#ffe4ad', '#fff2d6', + '#6ead10', '#8bbd40', '#a8ce70', '#c5dea0', '#e2efcf', + '#008512', '#339d41', '#66b570', '#99cea0', '#cce6cf', + '#129c94', '#41afaa', '#70c3bf', '#a0d7d4', '#cfebe9', + '#a85d45', '#b97d6a', '#ca9e8f', '#dcbeb4', '#edded9', + '#000000', '#101010', '#676767', '#d8d8d8', '#ffffff', +];
\ No newline at end of file diff --git a/resources/vue/components/courseware/blocks/CoursewareCanvasBlock.vue b/resources/vue/components/courseware/blocks/CoursewareCanvasBlock.vue index ae460bb..e5fb23c 100644 --- a/resources/vue/components/courseware/blocks/CoursewareCanvasBlock.vue +++ b/resources/vue/components/courseware/blocks/CoursewareCanvasBlock.vue @@ -69,7 +69,6 @@ :title="$gettext('Textwerkzeug')" @click="setTool('text')" > - T </button> </div> </div> diff --git a/resources/vue/components/courseware/blocks/CoursewareHeadlineBlock.vue b/resources/vue/components/courseware/blocks/CoursewareHeadlineBlock.vue index 8f6be0e..bfce0d4 100644 --- a/resources/vue/components/courseware/blocks/CoursewareHeadlineBlock.vue +++ b/resources/vue/components/courseware/blocks/CoursewareHeadlineBlock.vue @@ -15,16 +15,24 @@ :class="[currentStyle, currentHeight, hasGradient ? currentGradient : '']" :style="headlineStyle" > - <div class="cw-block-headline-iconbox" :class="['border-' + currentIconColor, currentHeight]"> + <div + class="cw-block-headline-iconbox" + :class="[currentHeight]" + :style="{ '--cw-headline-border-color': currentTextColor }" + > <div class="icon-layer" - :class="['icon-' + currentIconColor + '-' + currentIcon, currentHeight]" + :class="['icon-name-' + currentIcon, currentHeight]" + :style="textStyle" ></div> </div> <div class="cw-block-headline-textbox" - :class="['border-' + currentIconColor, currentHeight]" - :style="currentStyle === 'ribbon' ? headlineTextboxStyle.rgba : {}" + :class="[currentHeight]" + :style="{ + ...(currentStyle === 'ribbon' ? headlineTextboxStyle.rgba : {}), + '--cw-headline-border-color': currentTextColor, + }" > <div class="cw-block-headline-title" @@ -173,39 +181,6 @@ </template> </studip-select> </label> - <label> - {{ $gettext('Icon-Farbe') }} - <studip-select - :options="iconColors" - label="name" - :reduce="(iconColor) => iconColor.class" - :clearable="false" - v-model="currentIconColor" - > - <template #open-indicator="{ selectAttributes }"> - <span v-bind="selectAttributes" - ><studip-icon shape="arr_1down" :size="10" - /></span> - </template> - <template #no-options> - {{ $gettext('Es steht keine Auswahl zur Verfügung.') }} - </template> - <template #selected-option="option"> - <span - class="vs__option-color" - :style="{ 'background-color': option.hex }" - ></span - ><span>{{ option.name }}</span> - </template> - <template #option="option"> - <span - class="vs__option-color" - :style="{ 'background-color': option.hex }" - ></span - ><span>{{ option.name }}</span> - </template> - </studip-select> - </label> </template> </form> </courseware-tab> @@ -360,7 +335,6 @@ export default { currentTextColor: '', currentTextBackgroundColor: '', currentIcon: '', - currentIconColor: '', currentBackgroundType: '', currentBackgroundImageId: '', currentBackgroundImageType: '', @@ -409,9 +383,6 @@ export default { icon() { return this.block?.attributes?.payload?.icon; }, - iconColor() { - return this.block?.attributes?.payload?.icon_color; - }, backgroundImageId() { return this.block?.attributes?.payload?.background_image_id; }, @@ -433,9 +404,6 @@ export default { colors() { return this.mixinColors; }, - iconColors() { - return this.mixinColors.filter((color) => color.icon && color.class !== 'studip-lightblue'); - }, textStyle() { let style = {}; style.color = this.currentTextColor; @@ -508,7 +476,6 @@ export default { this.currentTextColor = this.textColor; this.currentTextBackgroundColor = this.textBackgroundColor; this.currentIcon = this.icon; - this.currentIconColor = this.iconColor; this.currentBackgroundType = this.backgroundType; this.currentBackgroundImageId = this.backgroundImageId; this.currentBackgroundImageType = this.backgroundImageType ?? 'file-refs'; @@ -579,7 +546,6 @@ export default { attributes.payload.text_color = this.currentTextColor; attributes.payload.text_background_color = this.currentTextBackgroundColor; attributes.payload.icon = this.currentIcon; - attributes.payload.icon_color = this.currentIconColor; attributes.payload.background_type = this.currentBackgroundType; attributes.payload.background_color = ''; attributes.payload.gradient = ''; @@ -603,45 +569,6 @@ export default { containerId: this.block.relationships.container.data.id, }); }, - calcComplement(color) { - const RGB = this.calcRGB(color); - - return '#' + this.compToHex(255 - RGB.r) + this.compToHex(255 - RGB.g) + this.compToHex(255 - RGB.b); - }, - calcIconColor(color) { - const RGB = this.calcRGB(color); - - return (RGB.r + RGB.g + RGB.b) / 3 > 129 ? 'black' : 'white'; - }, - calcRGB(color) { - color = color.slice(1); // remove # - let val = parseInt(color, 16); - let r = val >> 16; - let g = (val >> 8) & 0x00ff; - let b = val & 0x0000ff; - - if (g > 255) { - g = 255; - } else if (g < 0) { - g = 0; - } - if (b > 255) { - b = 255; - } else if (b < 0) { - b = 0; - } - - return { r: r, g: g, b: b }; - }, - compToHex(comp) { - let hex = comp.toString(16); - return hex.length === 1 ? '0' + hex : hex; - }, - hexToRgbA(hex, a) { - const RGB = this.calcRGB(hex); - - return 'rgba(' + RGB.r + ',' + RGB.g + ',' + RGB.b + ',' + a + ')'; - }, onSelectStockImage(stockImage) { this.updateCurrentBackgroundImage({ id: stockImage.id, diff --git a/resources/vue/components/courseware/blocks/CoursewareKeyPointBlock.vue b/resources/vue/components/courseware/blocks/CoursewareKeyPointBlock.vue index 642de56..1c0e9ce 100644 --- a/resources/vue/components/courseware/blocks/CoursewareKeyPointBlock.vue +++ b/resources/vue/components/courseware/blocks/CoursewareKeyPointBlock.vue @@ -10,11 +10,11 @@ @closeEdit="initCurrentData" > <template #content> - <div class="cw-keypoint-content" :class="['cw-keypoint-' + currentColor]"> - <div class="cw-keypoint-icon-wrapper"> - <StudipIcon v-if="currentIcon" :size="48" :shape="currentIcon" role="info" class="cw-keypoint-icon" /> + <div class="cw-keypoint-content"> + <div class="cw-keypoint-icon-wrapper" :style="{ borderColor: currentHexColor }"> + <StudipIcon v-if="currentIcon" :size="48" :shape="currentIcon" role="info" class="cw-keypoint-icon" :style="{ color: currentHexColor }"/> </div> - <p class="cw-keypoint-sentence">{{ currentText }}</p> + <p class="cw-keypoint-sentence" :style="{ backgroundColor: getRgbaFromHex(currentHexColor, 0.2) }">{{ currentText }}</p> </div> </template> <template v-if="canEdit" #edit> @@ -36,7 +36,7 @@ :options="colors" label="name" :clearable="false" - :reduce="(option) => option.icon" + :reduce="(option) => option.class" v-model="currentColor" > <template #open-indicator="{ selectAttributes }"> @@ -160,6 +160,9 @@ export default { return 'clickable'; } }, + currentHexColor() { + return this.colors.find((color) => color.class === this.currentColor)?.hex ?? '#000000'; + }, }, methods: { ...mapActions({ diff --git a/resources/vue/components/courseware/structural-element/CoursewareRootContent.vue b/resources/vue/components/courseware/structural-element/CoursewareRootContent.vue index bc68338..0f9befc 100644 --- a/resources/vue/components/courseware/structural-element/CoursewareRootContent.vue +++ b/resources/vue/components/courseware/structural-element/CoursewareRootContent.vue @@ -223,7 +223,7 @@ export default { } h1, p { - color: #fff; + color: var(--color--font-inverted); margin-right: 2em; } } diff --git a/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue b/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue index 560ecba..f3cc2ea 100644 --- a/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue +++ b/resources/vue/components/courseware/structural-element/CoursewareStructuralElement.vue @@ -15,7 +15,7 @@ </router-link> <div v-else - class="cw-ribbon-button cw-ribbon-button-prev-disabled" + class="cw-ribbon-button cw-ribbon-button-prev disabled" :title="$gettext('Keine vorherige Seite')" /> <router-link v-if="nextElement" :to="'/structural_element/' + nextElement.id"> @@ -23,7 +23,7 @@ </router-link> <div v-else - class="cw-ribbon-button cw-ribbon-button-next-disabled" + class="cw-ribbon-button cw-ribbon-button-next disabled" :title="$gettext('Keine nächste Seite')" /> </template> @@ -52,6 +52,7 @@ v-if="complete" shape="accept" role="info" + :inline="true" :title="$gettext('Diese Seite wurde von Ihnen vollständig bearbeitet')" /> <span @@ -98,6 +99,7 @@ :items="menuItems" class="cw-ribbon-action-menu" :context="structuralElement.attributes.title" + :collapseAt="1" @editCurrentElement="menuAction('editCurrentElement')" @addElement="menuAction('addElement')" @exportElement="menuAction('exportElement')" diff --git a/resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogAddChooser.vue b/resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogAddChooser.vue index 35a8c7e..af295ed 100644 --- a/resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogAddChooser.vue +++ b/resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogAddChooser.vue @@ -80,13 +80,4 @@ export default { }, }, }; -</script> -<style scoped lang="scss"> -.square-button-panel { - display: flex; - flex-direction: row; - flex-wrap: wrap; - width: 100%; - justify-content: center; -} -</style> +</script>
\ No newline at end of file diff --git a/resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogExportChooser.vue b/resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogExportChooser.vue index c10fcb6..181a87a 100644 --- a/resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogExportChooser.vue +++ b/resources/vue/components/courseware/structural-element/CoursewareStructuralElementDialogExportChooser.vue @@ -107,13 +107,4 @@ export default { }, }, }; -</script> -<style scoped lang="scss"> -.square-button-panel { - display: flex; - flex-direction: row; - flex-wrap: wrap; - width: 100%; - justify-content: center; -} -</style> +</script>
\ No newline at end of file diff --git a/resources/vue/components/courseware/structural-element/CoursewareToolsContents.vue b/resources/vue/components/courseware/structural-element/CoursewareToolsContents.vue index 432695e..cd236b7 100644 --- a/resources/vue/components/courseware/structural-element/CoursewareToolsContents.vue +++ b/resources/vue/components/courseware/structural-element/CoursewareToolsContents.vue @@ -96,7 +96,7 @@ export default { background-size: 100% auto; background-repeat: no-repeat; background-position: center; - background-color: var(--content-color-20); + background-color: var(--color--courseware-background-highlight); } .cw-tools-contents-header-details { @@ -113,7 +113,7 @@ export default { } p { margin: 0; - color: var(--black); + color: var(--color--font-primary); } } } @@ -121,7 +121,7 @@ export default { .root-is-current { .cw-tools-contents-header-details { header { - color: var(--black); + color: var(--color--font-primary); font-weight: 600; } } @@ -129,7 +129,7 @@ export default { .root-is-hidden { .cw-tools-contents-header-details { header { - color: var(--black); + color: var(--color--font-primary); } } } diff --git a/resources/vue/components/courseware/structural-element/CoursewareToolsUnitsItem.vue b/resources/vue/components/courseware/structural-element/CoursewareToolsUnitsItem.vue index d577262..f8e7678 100644 --- a/resources/vue/components/courseware/structural-element/CoursewareToolsUnitsItem.vue +++ b/resources/vue/components/courseware/structural-element/CoursewareToolsUnitsItem.vue @@ -78,7 +78,7 @@ export default { background-size: 100% auto; background-repeat: no-repeat; background-position: center; - background-color: var(--content-color-20); + background-color: var(--color--courseware-background-highlight); } .cw-tools-units-item-header-details { @@ -99,7 +99,7 @@ export default { } p { margin: 0; - color: var(--black); + color: var(--color--font-primary); } } } diff --git a/resources/vue/components/courseware/structural-element/CoursewareTreeItemAdder.vue b/resources/vue/components/courseware/structural-element/CoursewareTreeItemAdder.vue index fc9ca44..1bd4c6f 100644 --- a/resources/vue/components/courseware/structural-element/CoursewareTreeItemAdder.vue +++ b/resources/vue/components/courseware/structural-element/CoursewareTreeItemAdder.vue @@ -101,20 +101,3 @@ export default { }, }; </script> - -<style scoped lang="scss"> -.cw-tree-root-list > .cw-tree-item.cw-tree-item-adder > .cw-tree-item-wrapper { - border-bottom: none; -} -.cw-tree-item-adder { - .add-element { - border: none; - cursor: pointer; - background-color: transparent; - height: 28px; - img { - vertical-align: middle; - } - } -} -</style> diff --git a/resources/vue/components/courseware/tasks/CoursewareDashboardTasks.vue b/resources/vue/components/courseware/tasks/CoursewareDashboardTasks.vue index 09227a9..ce9ae48 100644 --- a/resources/vue/components/courseware/tasks/CoursewareDashboardTasks.vue +++ b/resources/vue/components/courseware/tasks/CoursewareDashboardTasks.vue @@ -11,10 +11,4 @@ import ProcessesList from './peer-review/ProcessesList.vue'; export default { components: { ProcessesList, TasksList }, }; -</script> - -<style scoped> -.courseware-dashboard-tasks > * + * { - margin-block-start: 2rem; -} -</style> +</script>
\ No newline at end of file diff --git a/resources/vue/components/courseware/tasks/TaskGroup.vue b/resources/vue/components/courseware/tasks/TaskGroup.vue index a10a884..9b74eb3 100644 --- a/resources/vue/components/courseware/tasks/TaskGroup.vue +++ b/resources/vue/components/courseware/tasks/TaskGroup.vue @@ -67,9 +67,3 @@ export default { }, }; </script> - -<style scoped> -.cw-task-group-peer-review-processes { - margin-block-start: 3rem; -} -</style> diff --git a/resources/vue/components/courseware/tasks/TaskGroupTaskItem.vue b/resources/vue/components/courseware/tasks/TaskGroupTaskItem.vue index eed19cc..31e8efb 100644 --- a/resources/vue/components/courseware/tasks/TaskGroupTaskItem.vue +++ b/resources/vue/components/courseware/tasks/TaskGroupTaskItem.vue @@ -11,7 +11,7 @@ <span class="sr-only">{{ status.description }}</span> </td> <td> - <span v-if="user"> + <span v-if="user" class="cw-taskgroup-task-item-solver-info"> <studip-icon shape="person2" role="info" aria-hidden="true" :title="$gettext('Teilnehmende Person')" /> <span class="sr-only">{{ $gettext('Teilnehmende Person') }}</span> {{ user.attributes['formatted-name'] }} diff --git a/resources/vue/components/courseware/toolbar/CoursewareContainerAdderItem.vue b/resources/vue/components/courseware/toolbar/CoursewareContainerAdderItem.vue index 950c42f..d18894b 100644 --- a/resources/vue/components/courseware/toolbar/CoursewareContainerAdderItem.vue +++ b/resources/vue/components/courseware/toolbar/CoursewareContainerAdderItem.vue @@ -2,12 +2,14 @@ <div class="cw-containeradder-item-wrapper"> <span class="cw-sortable-handle cw-sortable-handle-containeradder"></span> <button class="cw-containeradder-item" :class="['cw-containeradder-item-' + type]" @click.prevent="addNewContainer"> - <header class="cw-containeradder-item-title"> - {{ title }} - </header> - <p class="cw-containeradder-item-description"> - {{ description }} - </p> + <div class="cw-containeradder-item-content"> + <header class="cw-containeradder-item-title"> + {{ title }} + </header> + <p class="cw-containeradder-item-description"> + {{ description }} + </p> + </div> </button> </div> </template> diff --git a/resources/vue/components/courseware/toolbar/CoursewareToolbarBlocks.vue b/resources/vue/components/courseware/toolbar/CoursewareToolbarBlocks.vue index ab42e4b..30531aa 100644 --- a/resources/vue/components/courseware/toolbar/CoursewareToolbarBlocks.vue +++ b/resources/vue/components/courseware/toolbar/CoursewareToolbarBlocks.vue @@ -23,7 +23,7 @@ </button> <button type="submit" - class="button seach-button" + class="button search-button" :title="$gettext('Suche starten')" @click="loadSearch" > diff --git a/resources/vue/components/courseware/unit/CoursewareShelfDialogAddChooser.vue b/resources/vue/components/courseware/unit/CoursewareShelfDialogAddChooser.vue index 8e03ffd..b882e28 100644 --- a/resources/vue/components/courseware/unit/CoursewareShelfDialogAddChooser.vue +++ b/resources/vue/components/courseware/unit/CoursewareShelfDialogAddChooser.vue @@ -79,13 +79,4 @@ export default { }, }, }; -</script> -<style scoped lang="scss"> -.square-button-panel { - display: flex; - flex-direction: row; - flex-wrap: wrap; - width: 100%; - justify-content: center; -} -</style> +</script>
\ No newline at end of file diff --git a/resources/vue/components/courseware/widgets/CoursewareExportWidget.vue b/resources/vue/components/courseware/widgets/CoursewareExportWidget.vue deleted file mode 100644 index b31ee20..0000000 --- a/resources/vue/components/courseware/widgets/CoursewareExportWidget.vue +++ /dev/null @@ -1,95 +0,0 @@ -<template> - <sidebar-widget :title="$gettext('Export')" v-if="structuralElement"> - <template #content> - <ul class="widget-list widget-links cw-export-widget" v-if="structuralElement"> - <li v-if="showExportArchiv" class="cw-export-widget-export"> - <button @click="exportElement"> - {{ $gettext('Seiten exportieren') }} - </button> - </li> - <li v-if="showExportPdf" class="cw-export-widget-export-pdf"> - <button @click="pdfElement"> - {{ $gettext('PDF-Dokument erstellen') }} - </button> - </li> - <li v-if="showOer" class="cw-export-widget-oer"> - <button @click="oerElement"> - {{ $gettext('Auf OER Campus veröffentlichen') }} - </button> - </li> - <li v-if="!showExportArchiv && !showExportPdf && !showOer"> - {{ $gettext('Keine Exportoptionen verfügbar') }} - </li> - </ul> - </template> - </sidebar-widget> -</template> - -<script> -import SidebarWidget from '../../SidebarWidget.vue'; -import CoursewareExport from '@/vue/mixins/courseware/export.js'; -import { mapActions, mapGetters } from 'vuex'; - -export default { - name: 'courseware-export-widget', - props: ['structuralElement', 'canVisit'], - components: { - SidebarWidget - }, - mixins: [CoursewareExport], - computed: { - ...mapGetters({ - context: 'context', - oerCampusEnabled: 'oerCampusEnabled', - userIsTeacher: 'userIsTeacher', - }), - canEdit() { - if (!this.structuralElement) { - return false; - } - return this.structuralElement.attributes['can-edit']; - }, - showExportArchiv() { - if (this.context.type === 'users') { - return true; - } - - return this.canEdit; - }, - showExportPdf() { - if (this.context.type === 'users') { - return true; - } - - return this.canVisit; - }, - showOer() { - if (!this.oerCampusEnabled) { - return false; - } - - if (this.context.type === 'users') { - return true; - } - - return this.userIsTeacher && this.canVisit; - } - }, - methods: { - ...mapActions({ - showElementExportDialog: 'showElementExportDialog', - showElementPdfExportDialog: 'showElementPdfExportDialog', - showElementOerDialog: 'showElementOerDialog', - }), - exportElement() { - this.showElementExportDialog(true); - }, - pdfElement() { - this.showElementPdfExportDialog(true); - }, - oerElement() { - this.showElementOerDialog(true); - } - }, -}; -</script> diff --git a/resources/vue/components/courseware/widgets/CoursewareImportWidget.vue b/resources/vue/components/courseware/widgets/CoursewareImportWidget.vue deleted file mode 100644 index c0bfd5b..0000000 --- a/resources/vue/components/courseware/widgets/CoursewareImportWidget.vue +++ /dev/null @@ -1,60 +0,0 @@ -<template> - <sidebar-widget :title="$gettext('Import')"> - <template #content> - <ul class="widget-list widget-links cw-import-widget"> - <li class="cw-import-widget-archive"> - <button @click="importElements"> - {{ $gettext('Seiten importieren') }} - </button> - </li> - <li class="cw-import-widget-copy"> - <button @click="copyElements"> - {{ $gettext('Seiten kopieren') }} - </button> - </li> - <li v-if="inCourseContext && userIsTeacher" class="cw-action-widget-link"> - <button @click="linkElement"> - {{ $gettext('Seiten verknüpfen') }} - </button> - </li> - </ul> - </template> - </sidebar-widget> -</template> - -<script> -import SidebarWidget from '../../SidebarWidget.vue'; -import { mapActions, mapGetters } from 'vuex'; - -export default { - name: 'courseware-import-widget', - components: { - SidebarWidget, - }, - computed: { - ...mapGetters({ - context: 'context', - userIsTeacher: 'userIsTeacher', - }), - inCourseContext() { - return this.context.type === 'courses'; - } - }, - methods: { - ...mapActions({ - showElementImportDialog: 'showElementImportDialog', - showElementCopyDialog: 'showElementCopyDialog', - showElementLinkDialog: 'showElementLinkDialog', - }), - importElements() { - this.showElementImportDialog(true); - }, - copyElements() { - this.showElementCopyDialog(true); - }, - linkElement() { - this.showElementLinkDialog(true); - }, - }, -} -</script>
\ No newline at end of file diff --git a/resources/vue/components/courseware/widgets/CoursewareTasksActionWidget.vue b/resources/vue/components/courseware/widgets/CoursewareTasksActionWidget.vue index 3ba8865..d4efd99 100644 --- a/resources/vue/components/courseware/widgets/CoursewareTasksActionWidget.vue +++ b/resources/vue/components/courseware/widgets/CoursewareTasksActionWidget.vue @@ -3,17 +3,17 @@ <template #content> <ul class="widget-list widget-links cw-action-widget"> <template v-if="taskGroup"> - <li v-if="isBeforeEndDate" class="cw-action-widget-task-groups-deadline"> + <li v-if="isBeforeEndDate" class="cw-action-widget-date"> <button @click="modifyDeadline(taskGroup)"> {{ $gettext('Bearbeitungszeit verlängern') }} </button> </li> - <li v-if="isBeforeEndDate" class="cw-action-widget-task-groups-add-solvers"> + <li v-if="isBeforeEndDate" class="cw-action-widget-add"> <button @click="addSolvers(taskGroup)"> {{ $gettext('Teilnehmende hinzufügen') }} </button> </li> - <li class="cw-action-widget-task-groups-delete"> + <li class="cw-action-widget-delete"> <button @click="deleteTaskGroup(taskGroup)"> {{ $gettext('Aufgabe löschen') }} </button> @@ -24,7 +24,7 @@ {{ $gettext('Aufgabe verteilen') }} </button> </li> - <li v-if="taskGroup && !hasPeerReviewProcesses" class="cw-action-widget-add"> + <li v-if="taskGroup && !hasPeerReviewProcesses" class="cw-action-widget-play"> <button @click="$emit('add-peer-review-process')"> {{ $gettext('Peer-Review-Verfahren aktivieren') }} </button> @@ -60,19 +60,4 @@ export default { }), }, }; -</script> - -<style scoped> -.cw-action-widget-task-groups-add-solvers { - background-image: url('../images/icons/blue/add.svg'); - background-size: 20px; -} -.cw-action-widget-task-groups-deadline { - background-image: url('../images/icons/blue/date.svg'); - background-size: 20px; -} -.cw-action-widget-task-groups-delete { - background-image: url('../images/icons/blue/trash.svg'); - background-size: 20px; -} -</style> +</script>
\ No newline at end of file diff --git a/resources/vue/components/file-chooser/FileChooserBox.vue b/resources/vue/components/file-chooser/FileChooserBox.vue index ac11cca..a505cf4 100644 --- a/resources/vue/components/file-chooser/FileChooserBox.vue +++ b/resources/vue/components/file-chooser/FileChooserBox.vue @@ -187,15 +187,16 @@ export default { flex-direction: row; position: sticky; top: 0; - background-color: var(--content-color-20); + background-color: var(--color--courseware-background-highlight); padding: 0.5em 1em; - border: solid thin var(--content-color-40); + border: solid thin var(--color--courseware-border-default); margin-bottom: 1em; .file-chooser-breadcrumb { flex-grow: 1; } .toggle-view { + color: var(--color--highlight); width: 20px; height: 20px; border: none; @@ -208,7 +209,7 @@ export default { flex-direction: column; justify-content: space-between; overflow-y: scroll; - height: calc(100% - 36px); + height: calc(100% - 42px); } } .file-chooser-items { @@ -219,6 +220,7 @@ export default { .file-chooser-item { display: flex; + align-items: center; flex-direction: column; width: 104px; min-height: 104px; @@ -228,10 +230,12 @@ export default { margin: 0 4px 4px 4px; padding: 4px; cursor: pointer; + color: var(--color--font-primary); &.selected { - background-color: var(--activity-color-20); - border: solid thin var(--base-color); + background-color: var(--color--tile-background-active); + border: solid thin var(--color--tile-border-focus); + color: var(--color--highlight); font-weight: 700; } &.disabled { diff --git a/resources/vue/components/file-chooser/FileChooserBreadcrumb.vue b/resources/vue/components/file-chooser/FileChooserBreadcrumb.vue index 1b6e43a..fd2299a 100644 --- a/resources/vue/components/file-chooser/FileChooserBreadcrumb.vue +++ b/resources/vue/components/file-chooser/FileChooserBreadcrumb.vue @@ -76,9 +76,9 @@ export default { margin: 0; li { list-style: none; - a img { - vertical-align: text-bottom; - } + display: inline-flex; + gap: 4px; + font-size: var(--icon-size-inline); span { padding: 0 4px 0 0; } diff --git a/resources/vue/components/file-chooser/FileChooserDialog.vue b/resources/vue/components/file-chooser/FileChooserDialog.vue index 49bff43..3260adf 100644 --- a/resources/vue/components/file-chooser/FileChooserDialog.vue +++ b/resources/vue/components/file-chooser/FileChooserDialog.vue @@ -15,23 +15,31 @@ <div class="file-chooser-content"> <ul class="file-chooser-folder-selector"> <li v-if="courseId && allowCourseFolders" class="file-chooser-tree-item"> - <a - href="#" - @click.prevent="setFolder('courses')" - :class="{ selected: coursesRootFolderSelected }" - > - <studip-icon shape="seminar" /> - <span>{{ $gettext('Diese Veranstaltung') }}</span> - </a> + <div class="file-chooser-tree-item-content"> + <a + href="#" + @click.prevent="setFolder('courses')" + :class="{ selected: coursesRootFolderSelected }" + > + <studip-icon shape="seminar" /> + <span>{{ $gettext('Diese Veranstaltung') }}</span> + </a> + </div> <ul class="file-chooser-tree file-chooser-tree-first-level"> <file-chooser-tree v-for="child in coursesTree.children" :key="child.id" :folder="child" /> </ul> </li> <li v-if="userId && allowUserFolders" class="file-chooser-tree-item"> - <a href="#" @click.prevent="setFolder('users')" :class="{ selected: usersRootFolderSelected }"> - <studip-icon shape="content" /> - <span>{{ $gettext('Arbeitsplatz') }}</span> - </a> + <div class="file-chooser-tree-item-content"> + <a + href="#" + @click.prevent="setFolder('users')" + :class="{ selected: usersRootFolderSelected }" + > + <studip-icon shape="content" /> + <span>{{ $gettext('Arbeitsplatz') }}</span> + </a> + </div> <ul class="file-chooser-tree file-chooser-tree-first-level"> <file-chooser-tree v-for="child in usersTree.children" :key="child.id" :folder="child" /> </ul> @@ -280,7 +288,6 @@ export default { } } - @media (max-width: 580px) { .file-chooser-content .file-chooser-folder-selector { display: none; @@ -292,5 +299,4 @@ export default { max-width: 130px; } } - </style> diff --git a/resources/vue/components/file-chooser/FileChooserToolbar.vue b/resources/vue/components/file-chooser/FileChooserToolbar.vue index f86f214..5b81f98 100644 --- a/resources/vue/components/file-chooser/FileChooserToolbar.vue +++ b/resources/vue/components/file-chooser/FileChooserToolbar.vue @@ -181,7 +181,7 @@ export default { display: flex; flex-direction: row; flex-wrap: wrap; - border-top: solid thin var(--content-color-40); + border-top: solid thin var(--color--action-menu-divider); &.with-table { border: none; @@ -204,19 +204,16 @@ export default { input { flex-grow: 1; padding: 4px; - border: solid thin var(--content-color-40); + border: solid thin var(--color--input-field-border); border-radius: 0; } button { - border: solid thin var(--base-color); + border: solid thin var(--color--input-field-border); + color: var(--color--highlight); background-color: transparent; height: 30px; width: 30px; cursor: pointer; - - img { - vertical-align: middle; - } } } } diff --git a/resources/vue/components/file-chooser/FileChooserTree.vue b/resources/vue/components/file-chooser/FileChooserTree.vue index b3e2d52..e21ba8e 100644 --- a/resources/vue/components/file-chooser/FileChooserTree.vue +++ b/resources/vue/components/file-chooser/FileChooserTree.vue @@ -1,20 +1,22 @@ <template v-if="folderIsReadable"> <li class="file-chooser-tree-item"> - <span class="folder-toggle"> - <a - v-if="hasSubfolders" - herf="#" - @click.prevent="toggleSubfolders" - :title="unfold ? $gettext('Ordner zuklappen') : $gettext('Ordner aufklappen')" - > - <studip-icon :shape="unfold ? 'arr_1down' : 'arr_1right'" /> + <div class="file-chooser-tree-item-content"> + <span class="folder-toggle"> + <a + v-if="hasSubfolders" + herf="#" + @click.prevent="toggleSubfolders" + :title="unfold ? $gettext('Ordner zuklappen') : $gettext('Ordner aufklappen')" + > + <studip-icon :shape="unfold ? 'arr_1down' : 'arr_1right'" /> + </a> + </span> + <a href="#" @click.prevent="selectFolder" :class="{ selected: isSelected }"> + <studip-icon :shape="folderIcon" /> + <span>{{ folder.attributes.name }}</span> </a> - </span> - <a href="#" @click.prevent="selectFolder" :class="{ selected: isSelected }"> - <studip-icon :shape="folderIcon" /> - <span>{{ folder.attributes.name }}</span> - </a> - <ul v-if="unfold" class="file-chooser-tree"> + </div> + <ul v-if="unfold" class="file-chooser-tree file-chooser-tree-item-subfolders"> <li v-for="child in folder.children" :key="child.id" class="file-chooser-tree-item"> <file-chooser-tree :folder="child" /> </li> @@ -68,31 +70,40 @@ export default { <style lang="scss"> .file-chooser-tree { - padding-left: 18px; + padding-left: 22px; &.file-chooser-tree-first-level { padding-left: 0; } } .file-chooser-tree-item { list-style: none; - padding: 2px 0 0 0; - .folder-toggle { - width: 16px; - } - a.selected { - font-weight: 700; - } - img { - vertical-align: middle; - } - span { - width: calc(100% - 46px); - display: inline-block; - overflow: hidden; - text-overflow: ellipsis; - height: 16px; - white-space: nowrap; - vertical-align: sub; + padding: 2px 0; + + .file-chooser-tree-item-content { + display: flex; + .folder-toggle { + width: 22px; + min-width: 22px; + } + > a { + display: inline-flex; + gap: 4px; + width: calc(100% - 26px); + &.selected { + font-weight: 700; + } + } + svg { + vertical-align: middle; + } + span { + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + height: 20px; + white-space: nowrap; + vertical-align: sub; + } } } </style> diff --git a/resources/vue/components/my-courses/ColorPicker.vue b/resources/vue/components/my-courses/ColorPicker.vue index d2354c9..74c379e 100644 --- a/resources/vue/components/my-courses/ColorPicker.vue +++ b/resources/vue/components/my-courses/ColorPicker.vue @@ -93,9 +93,12 @@ export default { } .color-selected { - @include mixins.background-icon(accept, info, 32px); - background-position: center; - background-repeat: no-repeat; + @include mixins.icon(after, accept, $size: 32px); + &::after { + display: block; + margin: auto; + height: 100%; + } } } </style> diff --git a/resources/vue/components/responsive/ResponsiveContentBar.vue b/resources/vue/components/responsive/ResponsiveContentBar.vue index b9a5d3a..7ca11aa 100644 --- a/resources/vue/components/responsive/ResponsiveContentBar.vue +++ b/resources/vue/components/responsive/ResponsiveContentBar.vue @@ -179,11 +179,7 @@ export default { event.preventDefault(); this.toggleSidebar(); }) - const sidebarIcon = document.createElement('img'); - sidebarIcon.src = STUDIP.ASSETS_URL + '/images/icons/blue/sidebar3.svg'; - sidebarIcon.height = 24; - sidebarIcon.width = 24; - button.appendChild(sidebarIcon); + button.classList.add('btn-icon btn-icon--sidebar-toggle'); return button; } diff --git a/resources/vue/components/theme/ThemeAddCopyDialog.vue b/resources/vue/components/theme/ThemeAddCopyDialog.vue new file mode 100644 index 0000000..3990229 --- /dev/null +++ b/resources/vue/components/theme/ThemeAddCopyDialog.vue @@ -0,0 +1,73 @@ +<template> + <StudipDialog + v-if="displayThemeAddCopyDialog" + :title="$gettext('Theme duplizieren')" + :closeText="$gettext('Schließen')" + closeClass="cancel" + :confirmText="$gettext('Duplizieren')" + confirmClass="accept" + height="240" + width="400" + @close="closeDialog" + @confirm="copyTheme" + > + <template #dialogContent> + <form class="default"> + <label> + {{ $gettext('Theme') }} + <StudipSelect + v-model="theme" + :options="props.themes" + :label="$gettext('Theme auswählen')" + :clearable="false" + > + <template #open-indicator="{ selectAttributes }"> + <span v-bind="selectAttributes"><studip-icon shape="arr_1down" :size="10" /></span> + </template> + <template #no-options> + {{ $gettext('Es steht keine Auswahl zur Verfügung.') }} + </template> + <template #selected-option="option"> + <span>{{ option.attributes.name }}</span> + </template> + <template #option="option"> + <span>{{ option.attributes.name }}</span> + </template> + </StudipSelect> + </label> + </form> + </template> + </StudipDialog> +</template> +<script setup> +import {computed, getCurrentInstance, ref} from 'vue'; +import StudipDialog from '../StudipDialog.vue'; +import StudipSelect from '../StudipSelect.vue'; +import { useStore } from 'vuex'; + +const { proxy } = getCurrentInstance(); + +const store = useStore(); +const props = defineProps({ + themes: { + type: Array, + required: true, + }, +}); +const theme = ref(''); + +const displayThemeAddCopyDialog = computed(() => store.getters['theme-settings-module/showThemeAddCopyDialog']); +const showThemeAddCopyDialog = (show) => { + store.dispatch('theme-settings-module/setShowThemeAddCopyDialog', show); +}; +const closeDialog = () => { + showThemeAddCopyDialog(false); +}; + +const copyTheme = async () => { + const newTheme = theme.value; + newTheme.attributes.name = `${newTheme.attributes.name} (${proxy.$gettext('Kopie')})`; + await store.dispatch('theme-settings-module/createThemeFromData', { theme: newTheme }); + closeDialog(); +}; +</script> diff --git a/resources/vue/components/theme/ThemeAddDialog.vue b/resources/vue/components/theme/ThemeAddDialog.vue new file mode 100644 index 0000000..9836009 --- /dev/null +++ b/resources/vue/components/theme/ThemeAddDialog.vue @@ -0,0 +1,60 @@ +<template> + <StudipDialog + v-if="displayThemeAddDialog" + :title="$gettext('Theme hinzufügen')" + :closeText="$gettext('Schließen')" + closeClass="cancel" + height="320" + width="680" + @close="showThemeAddDialog(false)" + > + <template v-slot:dialogContent> + <div class="square-button-panel"> + <StudipSquareButton + icon="add" + :title="$gettext('Neu erstellen')" + @click="showThemeAddNewDialog(true)" + /> + <StudipSquareButton + icon="import" + :title="$gettext('Aus Datei importieren')" + @click="showThemeAddImportDialog(true)" + /> + <StudipSquareButton + icon="copy" + :title="$gettext('Duplizieren')" + @click="showThemeAddCopyDialog(true)" + /> + </div> + </template> + </StudipDialog> +</template> + +<script setup> +import { computed } from 'vue'; +import StudipDialog from '../StudipDialog.vue'; +import StudipSquareButton from '../StudipSquareButton.vue'; +import { useStore } from 'vuex'; + +const emit = defineEmits(['add']); + +const store = useStore(); + +const displayThemeAddDialog = computed(() => store.getters['theme-settings-module/showThemeAddDialog']); + +const showThemeAddDialog = (show) => { + store.dispatch('theme-settings-module/setShowThemeAddDialog', show); +}; +const showThemeAddNewDialog = () => { + store.dispatch('theme-settings-module/setShowThemeAddDialog', false); + emit('add'); +}; +const showThemeAddImportDialog = () => { + store.dispatch('theme-settings-module/setShowThemeAddDialog', false); + store.dispatch('theme-settings-module/setShowThemeAddImportDialog', true); +}; +const showThemeAddCopyDialog = () => { + store.dispatch('theme-settings-module/setShowThemeAddDialog', false); + store.dispatch('theme-settings-module/setShowThemeAddCopyDialog', true); +}; +</script> diff --git a/resources/vue/components/theme/ThemeAddImportDialog.vue b/resources/vue/components/theme/ThemeAddImportDialog.vue new file mode 100644 index 0000000..c975612 --- /dev/null +++ b/resources/vue/components/theme/ThemeAddImportDialog.vue @@ -0,0 +1,125 @@ +<template> + <StudipDialog + v-if="displayThemeAddImportDialog" + :title="$gettext('Theme importieren')" + :closeText="$gettext('Schließen')" + :confirmText="$gettext('Importieren')" + closeClass="cancel" + :confirmDisabled="!hasErrors" + confirmClass="upload" + height="500" + width="400" + @close="closeDialog" + @confirm="createThemeFromFile" + > + <template v-slot:dialogContent> + <StudipMessageBox v-if="fileError" :type="'error'" :hideClose="true"> + {{ fileError }} + </StudipMessageBox> + <div class="theme-upload-actions"> + <input type="file" ref="fileInput" @change="handleFileUpload" accept=".json" class="visually-hidden" /> + <div class="file-dropzone-wrapper" @click="triggerFileInput"> + <div class="file-dropzone" :class="{ 'has-file': fileSelected }"> + <StudipIcon :shape="fileName ? 'file' : 'upload'" :size="48" /> + <span>{{ + fileName ? fileName : $gettext('Theme-Datei auswählen oder via Drag and Drop hinzufügen') + }}</span> + </div> + </div> + </div> + </template> + </StudipDialog> +</template> + +<script setup> +import { computed, getCurrentInstance, ref } from 'vue'; +import StudipDialog from '../StudipDialog.vue'; +import StudipMessageBox from '../StudipMessageBox.vue'; +import { useStore } from 'vuex'; + +const { proxy } = getCurrentInstance() +const store = useStore(); +const displayThemeAddImportDialog = computed(() => store.getters['theme-settings-module/showThemeAddImportDialog']); +const hasErrors = computed(() => !fileError.value && fileSelected.value && jsonData.value); + +const showThemeAddImportDialog = (show) => { + store.dispatch('theme-settings-module/setShowThemeAddImportDialog', show); +}; +const fileInput = ref(null); +const fileSelected = ref(false); +const fileName = ref(''); +const jsonData = ref(null); +const fileError = ref(null); + +const triggerFileInput = () => { + fileInput.value?.click(); +}; + +const isValidThemeData = (data) => { + if (typeof data !== 'object' || data === null) return false; + if (typeof data.name !== 'string' || data.name.trim() === '') return false; + if (data.description && typeof data.description !== 'string') return false; + if (data.type && !['light', 'dark', 'high-contrast'].includes(data.type)) return false; + if (typeof data.values !== 'object' || data.values === null || Array.isArray(data.values)) return false; + return true; +}; +const handleFileUpload = (event) => { + fileSelected.value = false; + jsonData.value = null; + fileError.value = null; + fileName.value = ''; + + const file = event.target.files[0]; + if (file && file.type === 'application/json') { + fileName.value = file.name; + const reader = new FileReader(); + reader.onload = () => { + try { + const parsed = JSON.parse(reader.result); + if (isValidThemeData(parsed)) { + jsonData.value = parsed; + fileSelected.value = true; + } else { + fileError.value = proxy.$gettext('Die JSON-Datei enthält keine gültigen Themendaten.'); + } + } catch { + fileError.value = proxy.$gettext('Ungültiges JSON-Format.'); + } + }; + reader.readAsText(file); + } else { + fileError.value = proxy.$gettext('Bitte laden Sie eine gültige .json-Datei hoch.'); + } +}; +const createThemeFromFile = async () => { + if (jsonData.value) { + const newTheme = { + attributes: { + name: jsonData.value.name, + description: jsonData.value.description || '', + type: jsonData.value.type || 'light', + values: jsonData.value.values, + }, + }; + + await store.dispatch('theme-settings-module/createThemeFromData', { theme: newTheme }); + fileSelected.value = false; + jsonData.value = null; + fileName.value = ''; + showThemeAddImportDialog(false); + } +}; + +const closeDialog = () => { + removeFile(); + showThemeAddImportDialog(false); +}; + +const removeFile = () => { + fileInput.value.value = ''; + fileSelected.value = false; + fileName.value = ''; + jsonData.value = null; + fileError.value = null; +}; +</script> diff --git a/resources/vue/components/theme/ThemeDeleteDialog.vue b/resources/vue/components/theme/ThemeDeleteDialog.vue new file mode 100644 index 0000000..b27b844 --- /dev/null +++ b/resources/vue/components/theme/ThemeDeleteDialog.vue @@ -0,0 +1,14 @@ +<template> + <StudipDialog + title="$gettext('Theme löschen')" + :closeText="$gettext('Schließen')" + closeClass="cancel" + > + + + </StudipDialog> +</template> + +<script setup> +defineEmits(['close', 'confirm']); +</script> diff --git a/resources/vue/components/theme/ThemeEditor.vue b/resources/vue/components/theme/ThemeEditor.vue new file mode 100644 index 0000000..b3b4257 --- /dev/null +++ b/resources/vue/components/theme/ThemeEditor.vue @@ -0,0 +1,308 @@ +<template> + <section class="theme-editor"> + <ContentBar isContentBar icon="colorpicker"> + <template #breadcrumb-list> + {{ editableName }} + </template> + <template v-if="hasChanges && !isDisabled" #buttons-right> + <button class="button accept" @click="storeChanges"> + {{ $gettext('Speichern') }} + </button> + <button class="button cancel" @click="resetColors"> + {{ $gettext('Zurücksetzen') }} + </button> + </template> + <template #info-text> + {{ editableDescription }} + </template> + <template #menu> + <StudipActionMenu + :items="menuItems" + context="Theme Editor" + :collapseAt="1" + @deleteTheme="displayDeleteDialog" + @exportTheme="exportTheme" + /> + </template> + </ContentBar> + <div class="theme-editor-header"> + <form class="default collapsable"> + <fieldset class="collapsed"> + <legend>{{ $gettext('Metadaten') }}</legend> + + <label> + {{ $gettext('Name') }} + <input type="text" v-model="editableName" :disabled="isDisabled" /> + </label> + + <label> + {{ $gettext('Beschreibung') }} + <input type="text" v-model="editableDescription" :disabled="isDisabled" /> + </label> + </fieldset> + </form> + </div> + + <div class="color-group" v-for="(group, groupName) in editableColors" :key="groupName"> + <h3 class="group-title">{{ getReadableGroupName(groupName) }}</h3> + <div class="color-grid"> + <div v-for="(hex, name) in group" :key="name" class="color-entry"> + <div class="color-entry-color" :style="{ backgroundColor: editableColors[groupName][name] }"></div> + <div class="color-entry-content"> + <div class="color-entry-text"> + <p class="color-entry-name">{{ name }}</p> + <p class="color-entry-hex">{{ editableColors[groupName][name] }}</p> + </div> + <div class="color-entry-buttons"> + <ColorPicker v-model="editableColors[groupName][name]" :disabled="isDisabled" /> + <button + class="button btn-icon--only" + @click="deleteColor(groupName, name)" + :disabled="isDisabled" + > + <StudipIcon shape="trash" /> + </button> + </div> + </div> + </div> + </div> + </div> + + <form class="default" v-if="Object.keys(editableColors).length > 0 && !isDisabled" @submit.prevent> + <fieldset class="color-entry new-color-entry collapsable collapsed" > + <legend>{{ $gettext('Benutzerdefinierte Farbe') }}</legend> + <label>{{ $gettext('Farbgruppe') }} + <input type="text" v-model="newCustomKey" /> + </label> + <label>{{ $gettext('Farbwert') }} + <ColorPicker v-model="newCustomValue" :with-color="true"/> + </label> + <button + class="button add" + @click.prevent="addCustomColor" + :disabled="!newCustomKey || !newCustomValue || keyExists" + > + {{ $gettext('Hinzufügen') }} + </button> + <small v-if="keyExists" style="color: red">{{ $gettext('Dieser Key existiert bereits.') }}</small> + </fieldset> + </form> + </section> + <StudipDialog + v-if="showDeleteDialog" + :title="$gettext('Theme löschen')" + :question=" + $gettext( + 'Möchten Sie das Theme %{ ThemeTitle } wirklich löschen?', + { ThemeTitle: props.theme.attributes.name }, + true + ) + " + height="200" + @confirm="executeDelete" + @close="showDeleteDialog = false" + /> + <StudipModalLeave :has-unsaved-changes="hasChanges" :on-save="storeChanges" /> +</template> + +<script setup> +import { computed, getCurrentInstance, ref, watch } from 'vue'; +import { useStore } from 'vuex'; +import ColorPicker from '../colorPicker/ColorPicker.vue'; +import StudipIcon from '../StudipIcon.vue'; +import ContentBar from '../ContentBar.vue'; +import StudipActionMenu from '../StudipActionMenu.vue'; +import StudipDialog from '../StudipDialog.vue'; +import StudipModalLeave from '../StudipModalLeave.vue'; + +const props = defineProps({ + theme: { + type: Object, + required: true, + }, +}); +const emit = defineEmits(['back']); +const store = useStore(); +const { proxy } = getCurrentInstance(); + +const editableColors = ref({}); +const originalColors = ref({}); +const editableName = ref(''); +const originalName = ref(''); +const editingName = ref(false); + +const editableType = ref(''); +const originalType = ref(''); + +const editableDescription = ref(''); +const originalDescription = ref(''); +const editingDescription = ref(false); + +const showDeleteDialog = ref(false); + +const menuItems = [ + { + id: 1, + label: proxy.$gettext('Exportieren'), + icon: 'export', + emit: 'exportTheme', + }, + { + id: 2, + label: proxy.$gettext('Löschen'), + icon: 'trash', + emit: 'deleteTheme', + }, +]; + +const isDisabled = computed(() => props.theme.attributes.origin === 'system'); + +const hasChanges = computed(() => { + if (isDisabled.value) return false; + + return ( + JSON.stringify(editableColors.value) !== originalColors.value || + editableName.value !== originalName.value || + editableType.value !== originalType.value || + editableDescription.value !== originalDescription.value + ); +}); + +const newCustomKey = ref(''); +const newCustomValue = ref('#000000'); +const keyExists = computed(() => { + const key = newCustomKey.value.trim(); + if (!key) return false; + + return Object.values(editableColors.value).some((group) => key in group); +}); + +const addCustomColor = () => { + const key = newCustomKey.value.trim(); + const value = newCustomValue.value; + + if (!key || !value || keyExists.value) return; + + const targetGroup = + Object.entries(props.theme.meta.colorKeyCategories || {}).find(([keys]) => key in keys)?.[0] || + 'custom'; + + if (!editableColors.value[targetGroup]) { + editableColors.value[targetGroup] = {}; + } + + editableColors.value[targetGroup][key] = value; + + newCustomKey.value = ''; + newCustomValue.value = '#000000'; +}; + +const deleteColor = (groupName, key) => { + if (isDisabled.value) return; + + if (editableColors.value[groupName]) { + delete editableColors.value[groupName][key]; + + if (Object.keys(editableColors.value[groupName]).length === 0) { + delete editableColors.value[groupName]; + } + } +}; + +const resetColors = () => { + const themeColors = props.theme.attributes.values || {}; + const defaultColorKeys = props.theme.meta.colorKeyCategories || {}; + editableColors.value = {}; + + Object.keys(defaultColorKeys).forEach((groupName) => { + editableColors.value[groupName] = Object.keys(defaultColorKeys[groupName]).reduce((acc, key) => { + acc[key] = themeColors[key] || defaultColorKeys[groupName][key]; + return acc; + }, {}); + }); + + Object.keys(themeColors).forEach((key) => { + if (!Object.values(editableColors.value).some((group) => key in group)) { + editableColors.value['custom'] = editableColors.value['custom'] || {}; + editableColors.value['custom'][key] = themeColors[key]; + } + }); + + originalColors.value = JSON.stringify(editableColors.value); + editableName.value = props.theme.attributes.name; + originalName.value = props.theme.attributes.name; + editableType.value = props.theme.attributes.type; + originalType.value = props.theme.attributes.type; + editableDescription.value = props.theme.attributes.description || ''; + originalDescription.value = props.theme.attributes.description || ''; + editingName.value = false; + editingDescription.value = false; +}; + +const storeChanges = async () => { + const updatedColors = Object.values(editableColors.value).reduce((acc, group) => { + Object.assign(acc, group); + return acc; + }, {}); + + const updatedTheme = { + ...props.theme, + attributes: { + ...props.theme.attributes, + values: updatedColors, + name: editableName.value, + // type: editableType.value, + type: 'light', // Temporarily set to 'light' until dark mode is implemented + description: editableDescription.value, + }, + }; + + await store.dispatch('theme-settings-module/updateTheme', { theme: updatedTheme }); + resetColors(); +}; + +const displayDeleteDialog = () => { + showDeleteDialog.value = true; +}; +const executeDelete = () => { + if (isDisabled.value) return; + const id = props.theme.id; + store.dispatch('theme-settings-module/deleteTheme', { id }).then(() => { + emit('back'); + }); +}; + +const exportTheme = () => { + const themeData = { + name: props.theme.attributes.name, + description: props.theme.attributes.description || '', + author: props.theme.attributes.author || '', + version: props.theme.attributes.version || '1.0', + type: props.theme.attributes.type || 'light', + values: props.theme.attributes.values || {}, + studip_min_version: props.theme.attributes.studip_min_version || '6.1', + studip_max_version: props.theme.attributes.studip_max_version || '7.0', + }; + + const blob = new Blob([JSON.stringify(themeData, null, 2)], { type: 'application/json' }); + const link = document.createElement('a'); + link.href = URL.createObjectURL(blob); + link.download = `${props.theme.attributes.name || 'theme'}.json`; + link.click(); +}; + +const getReadableGroupName = (groupName) => { + const groupNames = { + brand: proxy.$gettext('Basisfarbe'), + general: proxy.$gettext('Allgemein'), + text: proxy.$gettext('Text'), + navigation: proxy.$gettext('Navigation'), + sidebar: proxy.$gettext('Seitenleiste'), + content: proxy.$gettext('Inhalt'), + custom: proxy.$gettext('Benutzerdefiniert'), + }; + return groupNames[groupName] || groupName.charAt(0).toUpperCase() + groupName.slice(1); +}; + +watch(() => props.theme, resetColors, { immediate: true }); +</script> diff --git a/resources/vue/components/theme/ThemeExport.vue b/resources/vue/components/theme/ThemeExport.vue new file mode 100644 index 0000000..18d29e8 --- /dev/null +++ b/resources/vue/components/theme/ThemeExport.vue @@ -0,0 +1,44 @@ +<template> + <div class="theme-export"> + <button class="button" @click="exportTheme" :disabled="!theme"> + {{ $gettext('Exportieren') }} + </button> + </div> + </template> + + <script setup> + + const props = defineProps({ + theme: { + type: Object, + required: true, + }, + }); + + const exportTheme = () => { + const themeData = { + name: props.theme.attributes.name, + description: props.theme.attributes.description || '', + author: props.theme.attributes.author || '', + version: props.theme.attributes.version || '1.0', + type: props.theme.attributes.type || 'light', + values: props.theme.attributes.values || {}, + studip_min_version: props.theme.attributes.studip_min_version || '6.1', + studip_max_version: props.theme.attributes.studip_max_version || '7.0', + }; + + const blob = new Blob([JSON.stringify(themeData, null, 2)], { type: 'application/json' }); + const link = document.createElement('a'); + link.href = URL.createObjectURL(blob); + link.download = `${props.theme.attributes.name || 'theme'}.json`; + link.click(); + }; + </script> + + <style scoped> + .theme-export button { + padding: 0.5rem 1rem; + margin-top: 2rem; + } + </style> +
\ No newline at end of file diff --git a/resources/vue/components/theme/ThemeList.vue b/resources/vue/components/theme/ThemeList.vue new file mode 100644 index 0000000..7fe58ca --- /dev/null +++ b/resources/vue/components/theme/ThemeList.vue @@ -0,0 +1,91 @@ +<template> + <div class="theme-list"> + <h2>{{ $gettext('Farbeinstellungen') }}</h2> + <div class="theme-categories"> + <div class="theme-category"> + <ul class="theme-list"> + <li + v-for="theme in filteredThemes('light')" + :key="theme.id" + :class="{ active: theme.attributes.active }" + > + <div class="theme-info"> + <div class="theme-meta"> + <strong class="theme-name">{{ theme.attributes.name }}</strong> + <p class="theme-description">{{ theme.attributes.description }}</p> + </div> + <div class="theme-colors"> + <div + v-for="color in colorKeys" + :key="color" + class="theme-color" + :title="theme.attributes.values?.[color]" + :style="{ backgroundColor: theme.attributes.values?.[color] || 'transparent' }" + /> + </div> + </div> + <div class="theme-actions"> + <button class="button" @click="$emit('select', theme)"> + {{ $gettext('Bearbeiten') }} + </button> + <button + v-if="!theme.attributes.active" + class="button" + @click="$emit('activate', theme)" + > + {{ $gettext('Aktivieren') }} + </button> + </div> + </li> + <li class="theme-add"> + <button @click="showThemeAddDialog(true)"> + <StudipIcon shape="add" :size="24" /> + {{ $gettext('Neues Theme hinzufügen') }} + </button> + </li> + </ul> + </div> + </div> + <ThemeAddDialog @add="$emit('add')"/> + <ThemeAddImportDialog /> + <ThemeAddCopyDialog :themes="filteredThemes('light')" /> + </div> +</template> + +<script setup> +import StudipIcon from '../StudipIcon.vue'; +import ThemeAddDialog from './ThemeAddDialog.vue'; +import ThemeAddImportDialog from './ThemeAddImportDialog.vue'; +import ThemeAddCopyDialog from './ThemeAddCopyDialog.vue'; +import { useStore } from 'vuex'; + +const props = defineProps({ + themes: { + type: Array, + required: true, + }, +}); + +defineEmits(['add', 'select', 'activate']); + +const store = useStore(); + +const colorKeys = [ + '--color--brand-primary', + '--color--main-navigation-item', + '--color--sidebar-item', + '--color--highlight', + '--color--content-link', +]; + +const filteredThemes = (type) => { + return props.themes + .filter((theme) => theme.attributes.type === type) + .sort((a, b) => Number(b.attributes.active) - Number(a.attributes.active)); +}; + +const showThemeAddDialog = (show) => { + store.dispatch('theme-settings-module/setShowThemeAddDialog', show); +}; + +</script> diff --git a/resources/vue/mixins/courseware/colors.js b/resources/vue/mixins/courseware/colors.js index 870ae7c..dffb981 100644 --- a/resources/vue/mixins/courseware/colors.js +++ b/resources/vue/mixins/courseware/colors.js @@ -144,6 +144,22 @@ const colorMixin = { return colors; } }, + methods: { + getRgbaFromHex(hex, alpha = 1) { + hex = hex.replace(/^#/, ''); + + if (hex.length === 3) { + hex = hex.split('').map(x => x + x).join(''); + } + + const r = parseInt(hex.slice(0, 2), 16); + const g = parseInt(hex.slice(2, 4), 16); + const b = parseInt(hex.slice(4, 6), 16); + + return `rgba(${r}, ${g}, ${b}, ${alpha})`; + } + + } }; export default colorMixin;
\ No newline at end of file diff --git a/resources/vue/store/theme-settings.module.js b/resources/vue/store/theme-settings.module.js new file mode 100644 index 0000000..a0ae074 --- /dev/null +++ b/resources/vue/store/theme-settings.module.js @@ -0,0 +1,124 @@ +const getDefaultState = () => { + return { + httpClient: null, + userId: null, + + showThemeAddDialog: false, + showThemeAddImportDialog: false, + showThemeAddCopyDialog: false, + }; +}; + +const initialState = getDefaultState(); + +const getters = { + + httpClient(state) { + return state.httpClient; + }, + userId(state) { + return state.userId; + }, + showThemeAddDialog(state) { + return state.showThemeAddDialog; + }, + showThemeAddImportDialog(state) { + return state.showThemeAddImportDialog; + }, + showThemeAddCopyDialog(state) { + return state.showThemeAddCopyDialog; + }, +}; + +export const state = { ...initialState }; + + +export const actions = { + // setters + setHttpClient({ commit }, httpClient) { + commit('setHttpClient', httpClient); + }, + setUserId({ commit }, userId) { + commit('setUserId', userId); + }, + + setShowThemeAddDialog({ commit }, show) { + commit('setShowThemeAddDialog', show); + }, + setShowThemeAddImportDialog({ commit }, show) { + commit('setShowThemeAddImportDialog', show); + }, + setShowThemeAddCopyDialog({ commit }, show) { + commit('setShowThemeAddCopyDialog', show); + }, + + // actions + async updateTheme({ dispatch }, { theme }) { + await dispatch('studip-themes/update', theme, { root: true }); + + return dispatch( + 'studip-themes/loadById', + { id: theme.id }, + { root: true } + ); + }, + + async activateTheme({ dispatch }, { theme }) { + const activeTheme = { + id: theme.id, + attributes: { + active: true, + } + }; + await dispatch('studip-themes/update', activeTheme, { root: true }); + + return true; + }, + + async addTheme({ dispatch, rootGetters }) { + await dispatch('studip-themes/create', {}, { root: true }); + const created = rootGetters['studip-themes/lastCreated']; + + await dispatch( + 'studip-themes/loadById', + { id: created.id }, + { root: true } + ); + + return created; + }, + + createThemeFromData( { dispatch }, { theme }) { + dispatch('studip-themes/create', theme, { root: true }); + }, + + deleteTheme({ dispatch }, data) { + return dispatch('studip-themes/delete', data, { root: true }); + }, +} +export const mutations = { + setHttpClient(state, httpClient) { + state.httpClient = httpClient; + }, + setUserId(state, data) { + state.userId = data; + }, + + setShowThemeAddDialog(state, show) { + state.showThemeAddDialog = show; + }, + setShowThemeAddImportDialog(state, show) { + state.showThemeAddImportDialog = show; + }, + setShowThemeAddCopyDialog(state, show) { + state.showThemeAddCopyDialog = show; + }, +}; + +export default { + namespaced: true, + state, + actions, + mutations, + getters, +}; diff --git a/templates/admin/topLinks.php b/templates/admin/topLinks.php index 1fc7970..a97ef75 100644 --- a/templates/admin/topLinks.php +++ b/templates/admin/topLinks.php @@ -17,23 +17,23 @@ <div style="width: 70%; margin: 10px; margin-left: auto; margin-right: auto;text-align: center;" id="admin_top_links"> <? if (isset($last_one)) : ?> <div style="float: left;"> - <a href="<?= URLHelper::getLink("?#admin_top_links", ['cid' => $adminList[$last_one]['Seminar_id']]) ?>" title="<?= htmlReady($adminList[$last_one]['Name']) ?>"> - <?= Icon::create('arr_1left')->asImg(['class' => 'text-bottom']) ?> + <a href="<?= URLHelper::getLink('?#admin_top_links', ['cid' => $adminList[$last_one]['Seminar_id']]) ?>" title="<?= htmlReady($adminList[$last_one]['Name']) ?>"> + <?= Icon::create('arr_1left')->asSvg(['class' => 'text-bottom']) ?> <?= _("zurück") ?> </a> </div> <? endif ?> <? if (isset($next_one)) : ?> <div style="float: right;"> - <a href="<?= URLHelper::getLink("?#admin_top_links", ['cid' => $adminList[$next_one]['Seminar_id']]) ?>" title="<?= htmlReady($adminList[$next_one]['Name']) ?>"> + <a href="<?= URLHelper::getLink('?#admin_top_links', ['cid' => $adminList[$next_one]['Seminar_id']]) ?>" title="<?= htmlReady($adminList[$next_one]['Name']) ?>"> <?= _("vor") ?> - <?= Icon::create('arr_1right')->asImg(['class' => 'text-bottom']) ?> + <?= Icon::create('arr_1right')->asSvg(['class' => 'text-bottom']) ?> </a> </div> <? endif ?> <div> - <a href="<?= URLHelper::getLink("adminarea_start.php", ['list' => "TRUE"]) ?>"> - <?= Icon::create('arr_1up')->asImg(['class' => 'text-bottom']) ?> + <a href="<?= URLHelper::getLink('adminarea_start.php', ['list' => 'TRUE']) ?>"> + <?= Icon::create('arr_1up')->asSvg(['class' => 'text-bottom']) ?> <?= _("Liste") ?> </a> </div> diff --git a/templates/blubber/coursegroup_context.php b/templates/blubber/coursegroup_context.php index c258ca5..78c4627 100644 --- a/templates/blubber/coursegroup_context.php +++ b/templates/blubber/coursegroup_context.php @@ -35,8 +35,8 @@ <? if ($thread->statusgruppe->hasFolder()) : ?> <? $folder = $thread->statusgruppe->getFolder() ?> <div> - <a href="<?= URLHelper::getLink("dispatch.php/course/files/index/".$folder->getId(), ['cid' => $course->getId()]) ?>"> - <?= $folder->getIcon("clickable")->asImg(25, ['class' => "text-bottom"]) ?> + <a href="<?= URLHelper::getLink('dispatch.php/course/files/index/'.$folder->getId(), ['cid' => $course->getId()]) ?>"> + <?= $folder->getIcon('clickable')->asSvg(25, ['class' => 'text-bottom']) ?> <?= htmlReady($folder->name) ?> </a> </div> diff --git a/templates/blubber/disable-notifications.php b/templates/blubber/disable-notifications.php index d80fa7a..f7900dd 100644 --- a/templates/blubber/disable-notifications.php +++ b/templates/blubber/disable-notifications.php @@ -3,11 +3,11 @@ <a href="#" onClick="STUDIP.Blubber.followunfollow('<?= htmlReady($thread->id) ?>'); return false;" class="followunfollow<?= $unfollowed ? " unfollowed" : "" ?>" - title="<?= _("Benachrichtigungen für diese Konversation abstellen.") ?>" + title="<?= _('Benachrichtigungen für diese Konversation abstellen.') ?>" data-thread_id="<?= htmlReady($thread->id) ?>"> - <?= Icon::create('decline')->asImg(['class' => 'follow text-bottom']) ?> - <?= Icon::create('notification2')->asImg(['class' => 'unfollow text-bottom']) ?> - <?= _("Benachrichtigungen aktiviert") ?> + <?= Icon::create('decline')->asSvg(['class' => 'follow text-bottom']) ?> + <?= Icon::create('notification2')->asSvg(['class' => 'unfollow text-bottom']) ?> + <?= _('Benachrichtigungen aktiviert') ?> </a> </div> <? endif ?> diff --git a/templates/blubber/global_context.php b/templates/blubber/global_context.php index 0045592..e41e0f0 100644 --- a/templates/blubber/global_context.php +++ b/templates/blubber/global_context.php @@ -10,8 +10,8 @@ aria-pressed="<?= $unfollowed ? 'false' : 'true' ?>" role="button" data-thread_id="global"> - <?= Icon::create('decline')->asImg(['class' => 'follow text-bottom']) ?> - <?= Icon::create('notification2')->asImg(['class' => 'unfollow text-bottom']) ?> - <?= _("Benachrichtigungen aktiviert") ?> + <?= Icon::create('decline')->asSvg(['class' => 'follow text-bottom']) ?> + <?= Icon::create('notification2')->asSvg(['class' => 'unfollow text-bottom']) ?> + <?= _('Benachrichtigungen aktiviert') ?> </a> </div> diff --git a/templates/blubber/private_context.php b/templates/blubber/private_context.php index 164a20a..a943ba3 100644 --- a/templates/blubber/private_context.php +++ b/templates/blubber/private_context.php @@ -1,7 +1,7 @@ <div class="blubber_private_info indented"> <div class="icon"> - <?= Icon::create('group3', Icon::ROLE_INFO)->asImg(50, ['title' => _('Dies ist ein privater Blubber.')]) ?> + <?= Icon::create('group3', Icon::ROLE_INFO)->asSvg(50, ['title' => _('Dies ist ein privater Blubber.')]) ?> </div> <ul class="clean members"> @@ -13,20 +13,20 @@ <? $user = User::find($mention['user_id']) ?> <? if ($user) : ?> <? if ($user->getId() !== $GLOBALS['user']->id && count($mentions) > 2) : ?> - <a class="float_right" href="<?= URLHelper::getLink("dispatch.php/blubber/write_to/" . $user->getId()) ?>" data-dialog title="<?= _("Anblubbern") ?>"> - <?= Icon::create('blubber')->asImg(['class' => 'text-bottom']) ?> + <a class="float_right" href="<?= URLHelper::getLink('dispatch.php/blubber/write_to/' . $user->getId()) ?>" data-dialog title="<?= _('Anblubbern') ?>"> + <?= Icon::create('blubber')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> <? if ($user->getId() === $GLOBALS['user']->id) : ?> <a class="float_right" href="<?= URLHelper::getLink("dispatch.php/blubber/leave_private/".$thread->getId()) ?>" data-dialog="size=auto" - title="<?= _("Gruppe verlassen") ?>" - data-confirm="<?= _("Private Konversation wirklich verlassen?") ?>"> - <?= Icon::create('door-leave')->asImg(['class' => 'text-bottom']) ?> + title="<?= _('Gruppe verlassen') ?>" + data-confirm="<?= _('Private Konversation wirklich verlassen?') ?>"> + <?= Icon::create('door-leave')->asSvg(['class' => 'text-bottom']) ?> </a> <? endif ?> - <a href="<?= URLHelper::getLink("dispatch.php/profile", ['username' => $user['username']]) ?>"> + <a href="<?= URLHelper::getLink('dispatch.php/profile', ['username' => $user['username']]) ?>"> <? endif ?> <?= Avatar::getAvatar($mention['user_id'])->getImageTag(Avatar::SMALL) ?> @@ -38,8 +38,8 @@ </li> <? endforeach ?> <li> - <a href="<?= URLHelper::getLink("dispatch.php/blubber/add_member_to_private/".$thread->getId()) ?>" data-dialog="width=600;height=300"> - <?= Icon::create('add')->asImg(25, ['class' => 'text-bottom']) ?> + <a href="<?= URLHelper::getLink('dispatch.php/blubber/add_member_to_private/'.$thread->getId()) ?>" data-dialog="width=600;height=300"> + <?= Icon::create('add')->asSvg(25, ['class' => 'text-bottom']) ?> </a> </li> </ul> diff --git a/templates/blubber/public_context.php b/templates/blubber/public_context.php index 7d77c25..ea0f643 100644 --- a/templates/blubber/public_context.php +++ b/templates/blubber/public_context.php @@ -3,12 +3,12 @@ <? if ($thread['user_id'] === $GLOBALS['user']->id || $GLOBALS['perm']->have_perm("root")) : ?> <div class="center blubber-edit-icons"> - <a href="<?= URLHelper::getLink("dispatch.php/blubber/compose/".$thread->getId()) ?>" + <a href="<?= URLHelper::getLink('dispatch.php/blubber/compose/'.$thread->getId()) ?>" data-dialog title="<?= _('Blubber bearbeiten') ?>"> - <?= Icon::create('edit')->asImg(30) ?> + <?= Icon::create('edit')->asSvg(30) ?> </a> - <form action="<?= URLHelper::getLink("dispatch.php/blubber/delete/".$thread->getId()) ?>" + <form action="<?= URLHelper::getLink('dispatch.php/blubber/delete/'.$thread->getId()) ?>" method="post" data-confirm="<?= _('Wirklich löschen?') ?>"> <?= CSRFProtection::tokenTag() ?> diff --git a/templates/contact/header-groups.php b/templates/contact/header-groups.php index ae7d262..48776be 100644 --- a/templates/contact/header-groups.php +++ b/templates/contact/header-groups.php @@ -32,7 +32,7 @@ </a> <? if ($filter == $group_id): ?> <a href="<?= URLHelper::getLink('dispatch.php/messages/write?', compact('group_id')) ?>"> - <?= Icon::create('mail')->asImg(['title' => _('Nachricht an alle Personen dieser Gruppe schicken')]) ?> + <?= Icon::create('mail')->asSvg(['title' => _('Nachricht an alle Personen dieser Gruppe schicken')]) ?> </a> <? endif; ?> </td> diff --git a/templates/contentbar/contentbar.php b/templates/contentbar/contentbar.php index a4632ca..34dab2a 100644 --- a/templates/contentbar/contentbar.php +++ b/templates/contentbar/contentbar.php @@ -14,10 +14,10 @@ <div class="contentbar-wrapper-left"> <nav class="contentbar-breadcrumb"> <? if ($toc->isActive()): ?> - <?= $icon->asImg(24, ['class' => 'text-bottom contentbar-icon']) ?> + <?= $icon->asSvg(24, ['class' => 'text-bottom contentbar-icon']) ?> <? else: ?> <a href="<?= $toc->getUrl() ?>" title="<?= htmlReady($toc->getTitle()) ?>" class="contentbar-icon"> - <?= $icon->asImg(24, ['class' => 'text-bottom']) ?> + <?= $icon->asSvg(24, ['class' => 'text-bottom']) ?> </a> <? endif ?> <?= $breadcrumbs->render() ?> diff --git a/templates/forms/form.php b/templates/forms/form.php index 93dd491..9937aa1 100644 --- a/templates/forms/form.php +++ b/templates/forms/form.php @@ -55,7 +55,7 @@ $form_id = md5(uniqid()); v-if="STUDIPFORM_REQUIRED.length > 0 || STUDIPFORM_VALIDATIONNOTES.length > 0"> <header> <h1> - <?= Icon::create('info-circle', Icon::ROLE_INFO)->asImg(['class' => 'text-bottom validation_notes_icon']) ?> + <?= Icon::create('info-circle', Icon::ROLE_INFO)->asSvg(['class' => 'text-bottom validation_notes_icon']) ?> <?= _('Hinweise zum Ausfüllen des Formulars') ?> </h1> </header> diff --git a/templates/header-navigation-item.php b/templates/header-navigation-item.php index 9fc875d..511b803 100644 --- a/templates/header-navigation-item.php +++ b/templates/header-navigation-item.php @@ -17,7 +17,7 @@ $attr_str = arrayToHtmlAttributes($attributes); <li id="nav_<?= $path ?>"<? if ($nav->isActive()) : ?> class="active"<? endif ?>> <a href="<?= URLHelper::getLink($nav->getURL(), $link_params) ?>" <?= $attr_str ?>> - <?= $nav->getImage()->asImg(['class' => 'headericon original', 'title' => null]) ?> + <?= $nav->getImage()->asSvg(32, ['class' => 'headericon original', 'title' => null]) ?> <div class="navtitle"><?= htmlReady($nav->getTitle()) ?></div> </a> </li> diff --git a/templates/header.php b/templates/header.php index 49c560a..75b349c 100644 --- a/templates/header.php +++ b/templates/header.php @@ -140,7 +140,7 @@ if ($navigation) { aria-expanded="false" > <span class="count" aria-hidden="true"><?= count($notifications) ?></span> - <?= Icon::create('notification2', Icon::ROLE_INFO) ?> + <?= Icon::create('notification2', Icon::ROLE_INFO)->asSvg() ?> </button> <input type="checkbox" id="notification_checkbox"> <div class="list below" id="notification_list"> @@ -179,11 +179,11 @@ if ($navigation) { <input type="hidden" name="user_config_submitted" value="1"> <div id="contrast"> <? if (!empty($_SESSION['contrast'])): ?> - <?= Icon::create('accessibility', Icon::ROLE_INFO_ALT)->asImg(24) ?> + <?= Icon::create('accessibility', Icon::ROLE_INFO_ALT)->asSvg(24) ?> <button class="as-link" name="unset_contrast"><?= _('Normalen Kontrast aktivieren') ?></button> <?= tooltipIcon(_('Aktiviert standardmäßige, nicht barrierefreie Kontraste.'), false, false, true); ?> <? else: ?> - <?= Icon::create('accessibility', Icon::ROLE_INFO_ALT)->asImg(24) ?> + <?= Icon::create('accessibility', Icon::ROLE_INFO_ALT)->asSvg(24) ?> <button class="as-link" name="set_contrast"><?= _('Hohen Kontrast aktivieren') ?></button> <?= tooltipIcon(_('Aktiviert einen hohen Kontrast gemäß WCAG 2.1. Diese Einstellung wird nach dem Login übernommen. Sie können sie in Ihren persönlichen Einstellungen ändern.'), false, false, true); ?> @@ -197,13 +197,13 @@ if ($navigation) { <li id="responsive-toggle-fullscreen"> <button class="styleless" id="fullscreen-off" title="<?= _('Kompakte Navigation ausschalten') ?>"> - <?= Icon::create('screen-standard', Icon::ROLE_INFO_ALT)->asImg(24) ?> + <?= Icon::create('screen-standard', Icon::ROLE_INFO_ALT)->asSvg(24) ?> </button> </li> <li id="responsive-toggle-focusmode"> <button class="styleless consuming_mode_trigger" id="focusmode-on" title="<?= _('Vollbild aktivieren') ?>"> - <?= Icon::create('screen-full', Icon::ROLE_INFO_ALT)->asImg(24) ?> + <?= Icon::create('screen-full', Icon::ROLE_INFO_ALT)->asSvg(24) ?> </button> </li> </ul> @@ -226,7 +226,7 @@ if ($navigation) { <input type="checkbox" id="header-sink"> <label for="header-sink"> <a class="canvasready" href="#"> - <?= Icon::create('action', 'navigation')->asImg(28, [ + <?= Icon::create('action', 'navigation')->asSvg(28, [ 'class' => 'headericon original', 'title' => '', 'alt' => '', diff --git a/templates/helpbar/helpbar.php b/templates/helpbar/helpbar.php index 6f8efbb..79d4bdf 100644 --- a/templates/helpbar/helpbar.php +++ b/templates/helpbar/helpbar.php @@ -9,7 +9,7 @@ <a id="helpbar_icon" href="#" class="helpbar-toggler" data-toggles=".helpbar" role="button" title="<?= _('Hilfelasche anzeigen/verstecken') ?>" aria-controls="helpbar-content" aria-expanded="<?= $open ? 'true' : 'false' ?>"> - <?= Icon::create('question-circle')->asImg(24, ['alt' => '']) ?> + <?= Icon::create('question-circle')->asSvg(24, ['alt' => '']) ?> </a> <div class="helpbar" id="helpbar-content" <? if (!$open) echo 'style="display: none"'; ?>> @@ -18,28 +18,28 @@ <a href="#" class="helpbar-toggler" data-toggles=".helpbar" aria-hidden="true" role="button" title="<?= _('Hilfelasche verstecken') ?>" aria-controls="helpbar-content" aria-expanded="<?= $open ? 'true' : 'false' ?>"> - <?= Icon::create('decline-circle', Icon::ROLE_INFO_ALT)->asImg(24, ['alt' => '']) ?> + <?= Icon::create('decline-circle', Icon::ROLE_INFO_ALT)->asSvg(24, ['alt' => '']) ?> </a> </h2> <ul class="helpbar-widgets"> <? foreach ($widgets as $index => $widget): ?> <li> <? if ($widget->icon): ?> - <?= is_string($widget->icon) ? Assets::img($widget->icon, ['class' => 'helpbar-widget-icon']) : $widget->icon->asImg(['class' => 'helpbar-widget-icon', 'alt' => '']) ?> + <?= is_string($widget->icon) ? Assets::img($widget->icon, ['class' => 'helpbar-widget-icon']) : $widget->icon->asSvg(['class' => 'helpbar-widget-icon', 'alt' => '']) ?> <? endif; ?> <?= $widget->render(['base_class' => 'helpbar'])?> <div class="helpbar-widget-admin-icons"> <? if ($widget->edit_link): ?> <a href="<?=$widget->edit_link?>" data-dialog="size=auto;reload-on-close"> - <?= Icon::create('edit', 'info_alt')->asImg(['title' => _('Hilfe-Text bearbeiten'), 'alt' => '']) ?></a> + <?= Icon::create('edit', 'info_alt')->asSvg(['title' => _('Hilfe-Text bearbeiten'), 'alt' => '']) ?></a> <? endif; ?> <? if ($widget->delete_link): ?> <a href="<?=$widget->delete_link?>" data-dialog="size=auto;reload-on-close"> - <?= Icon::create('trash', 'info_alt')->asImg(['title' => _('Hilfe-Text löschen'), 'alt' => '']) ?></a> + <?= Icon::create('trash', 'info_alt')->asSvg(['title' => _('Hilfe-Text löschen'), 'alt' => '']) ?></a> <? endif; ?> <? if ($widget->add_link): ?> <a href="<?=$widget->add_link?>" data-dialog="size=auto;reload-on-close"> - <?= Icon::create('add', 'info_alt')->asImg(['title' => _('Neuer Hilfe-Text'), 'alt' => '']) ?></a> + <?= Icon::create('add', 'info_alt')->asSvg(['title' => _('Neuer Hilfe-Text'), 'alt' => '']) ?></a> <? endif; ?> </div> </li> diff --git a/templates/layouts/base.php b/templates/layouts/base.php index 8ae32ce..be6b0be 100644 --- a/templates/layouts/base.php +++ b/templates/layouts/base.php @@ -97,7 +97,7 @@ $lang_attr = str_replace('_', '-', $_SESSION['_language']); <h1 class="sr-only"><?= htmlReady(PageLayout::getTitle()) ?></h1> <? if (PageLayout::isFullscreenModeAllowed()): ?> <button hidden class="fullscreen-toggle unfullscreen" aria-label="<?= _('Vollbildmodus verlassen') ?>" title="<?= _('Vollbildmodus verlassen') ?>"> - <?= Icon::create('zoom-out2')->asImg(24) ?> + <?= Icon::create('zoom-out2')->asSvg(24) ?> </button> <? endif; ?> <?= implode(PageLayout::getMessages(QuestionBox::class)) ?> @@ -113,7 +113,7 @@ $lang_attr = str_replace('_', '-', $_SESSION['_language']); <!-- End main content --> <a id="scroll-to-top" class="hide" tabindex="0" title="<?= _('Zurück zum Seitenanfang') ?>"> - <?= Icon::create('arr_1up', 'info_alt')->asImg(24, ['class' => '']) ?> + <?= Icon::create('arr_1up', 'info_alt')->asSvg(24, ['class' => '']) ?> </a> <?= $this->render_partial('footer', ['link_params' => $header_template->link_params ?? null]); ?> diff --git a/templates/mail/notification_html.php b/templates/mail/notification_html.php index 81a38f3..2325ca0 100644 --- a/templates/mail/notification_html.php +++ b/templates/mail/notification_html.php @@ -154,7 +154,7 @@ <a href="<?= URLHelper::getLink($module['url'], ['sso' => $sso]) ?>"><?= htmlReady($module['text']) ?></a> </td> <td> - <a href="<?= URLHelper::getLink($module['url'], ['sso' => $sso]) ?>"><?= $module['icon']->asImg(['title' => $module['text']]) ?></a> + <a href="<?= URLHelper::getLink($module['url'], ['sso' => $sso]) ?>"><?= $module['icon']->asSvg(['title' => $module['text']]) ?></a> </td> </tr> <? endforeach ?> diff --git a/templates/multipersonsearch/link.php b/templates/multipersonsearch/link.php index daed91a..446c30d 100644 --- a/templates/multipersonsearch/link.php +++ b/templates/multipersonsearch/link.php @@ -1,7 +1,7 @@ <a href="<?= URLHelper::getLink('dispatch.php/multipersonsearch/no_js_form/?name=' . $name); ?>" class="multi_person_search_link" data-dialog="width=720;height=490;id=mp-search" data-dialogname="<?= $name; ?>" title="<?= htmlReady($title) ?>" data-js-form="<?= URLHelper::getLink('dispatch.php/multipersonsearch/js_form/' . $name); ?>"> <? if (!empty($linkIconPath)) { - print $linkIconPath->asImg(['class' => 'action-menu-item-icon']); + print $linkIconPath->asSvg(20, ['class' => 'action-menu-item-icon']); } if (!empty($linkIconPath) && !empty($linkText)) { print " "; diff --git a/templates/online/user.php b/templates/online/user.php index 9517447..2bba643 100644 --- a/templates/online/user.php +++ b/templates/online/user.php @@ -7,7 +7,7 @@ <? if (!$is_buddy) : ?> <a href="<?= URLHelper::getLink('online.php', ['cmd' => 'add_user', 'add_uname' => $tmp_online_uname]) ?>"> - <?= Icon::create('arr_2left', Icon::ROLE_SORT)->asImg([ + <?= Icon::create('arr_2left', Icon::ROLE_SORT)->asSvg([ 'title' => _('zu den Buddies hinzufügen'), 'style' => 'padding-right: 0.33em;', 'class' => 'middle', @@ -29,7 +29,7 @@ <?= htmlReady($fullname) ?> </a> <? foreach (StudipKing::is_king($tmp_user_id, TRUE) as $type => $text) : ?> - <?= Icon::create('crown', Icon::ROLE_SORT)->asImg(['title' => $text, 'class' => 'text-bottom']) ?> + <?= Icon::create('crown', Icon::ROLE_SORT)->asSvg(['title' => $text, 'class' => 'text-bottom']) ?> <? endforeach ?> </td> @@ -38,25 +38,25 @@ </td> <td width="3%" align="center"> - <? if (class_exists("Blubber")) : ?> + <? if (class_exists('Blubber')) : ?> <a href="<?= URLHelper::getLink('dispatch.php/course/streams/global', ['mention' => $tmp_online_uname]) ?>"> - <?= Icon::create('blubber')->asImg(['title' => _("Blubber diesen Nutzer an"), 'class' => 'text-bottom']) ?> + <?= Icon::create('blubber')->asSvg(['title' => _('Blubber diesen Nutzer an'), 'class' => 'text-bottom']) ?> </a> <? endif ?> </td> <td width="3%" align="center"> <a href="<?= URLHelper::getLink('dispatch.php/messages/write', ['rec_uname' => $tmp_online_uname]) ?>"> - <?= Icon::create('mail')->asImg(['title' => _('Nachricht an Benutzer verschicken'), 'class' => 'text-bottom']) ?> + <?= Icon::create('mail')->asSvg(['title' => _('Nachricht an Benutzer verschicken'), 'class' => 'text-bottom']) ?> </a> </td> <td width="3%" align="center"> <? if ($is_buddy) : ?> - <a href="<?= URLHelper::getLink("online.php", - ["cmd" => "delete_user", - "delete_uname" => $tmp_online_uname]) ?>"> - <?= Icon::create('trash')->asImg(['title' => _('aus der Buddy-Liste entfernen'), 'class' => 'text-bottom']) ?> + <a href="<?= URLHelper::getLink('online.php', + ['cmd' => 'delete_user', + 'delete_uname' => $tmp_online_uname]) ?>"> + <?= Icon::create('trash')->asSvg(['title' => _('aus der Buddy-Liste entfernen'), 'class' => 'text-bottom']) ?> </a> <? else : ?> diff --git a/templates/personal_notifications/notification.php b/templates/personal_notifications/notification.php index ad93758..b45fc58 100644 --- a/templates/personal_notifications/notification.php +++ b/templates/personal_notifications/notification.php @@ -3,7 +3,7 @@ <a class="content" href="<?= URLHelper::getLink('dispatch.php/jsupdater/mark_notification_read/' . $notification['personal_notification_id']) ?>"<?= $notification['dialog'] ? ' data-dialog' : '' ?>> <? if ($notification['avatar']): ?> <? if (filter_var($notification['avatar'], FILTER_VALIDATE_URL)): ?> - <div class="avatar" style="background-image: url(<?= $notification['avatar'] ?>);"></div> + <div class="avatar" style="background-color: currentColor; mask: url(<?= $notification['avatar'] ?>) no-repeat center / contain;;"></div> <? else: ?> <div class="html-emoji"> <?= $notification['avatar'] ?> @@ -14,7 +14,7 @@ <?= htmlReady($notification['text']) ?> </a> <button class="options mark_as_read"> - <?= Icon::create('decline')->asImg(14, ['title' => _('Als gelesen markieren')]) ?> + <?= Icon::create('decline')->asSvg(16, ['title' => _('Als gelesen markieren')]) ?> </button> </div> <? if ($notification->more_unseen > 0): ?> diff --git a/templates/quicksearch/inputfield.php b/templates/quicksearch/inputfield.php index 6f2cb3f..9419dcd 100644 --- a/templates/quicksearch/inputfield.php +++ b/templates/quicksearch/inputfield.php @@ -19,7 +19,7 @@ placeholder="<?= $beschriftung && !$defaultID ? htmlReady($beschriftung) : '' ?>"> <? if ($withButton): ?> <? if ($box_align !== 'left'): ?> - <input type="submit" value="<?= _('Suche starten') ?>" name="<?= htmlReady($search_button_name) ?>"> + <?= Icon::create('search')->asInput(['type' => 'submit', 'value' => _('Suche starten'), 'name' => htmlReady($search_button_name)]) ?> <? endif; ?> </div> <? endif ?> diff --git a/templates/shared/action-menu-single.php b/templates/shared/action-menu-single.php index dbe38c1..9fdd5d3 100644 --- a/templates/shared/action-menu-single.php +++ b/templates/shared/action-menu-single.php @@ -15,7 +15,7 @@ <? if ($action['disabled']): ?> <label class="undecorated action-menu-item-disabled" aria-disabled="true" <?= arrayToHtmlAttributes($action['attributes'] + ['title' => $action['label']]) ?>> <? if ($action['icon']): ?> - <?= $action['icon']->asImg(['class' => 'action-menu-item-icon']) ?> + <?= $action['icon']->asSvg(['class' => 'action-menu-item-icon']) ?> <? else: ?> <?= htmlReady($action['label']) ?> <? endif ?> @@ -23,7 +23,7 @@ <? elseif ($action['type'] === 'link'): ?> <a href="<?= htmlReady($action['link']) ?>" <?= arrayToHtmlAttributes($action['attributes'] + ['title' => $action['label']]) ?>> <? if ($action['icon']): ?> - <?= $action['icon']->asImg(['class' => 'action-menu-item-icon']) ?> + <?= $action['icon']->asSvg(['class' => 'action-menu-item-icon']) ?> <? else: ?> <?= htmlReady($action['label']) ?> <? endif ?> diff --git a/templates/shared/action-menu.php b/templates/shared/action-menu.php index 14b99b5..43714aa 100644 --- a/templates/shared/action-menu.php +++ b/templates/shared/action-menu.php @@ -37,7 +37,7 @@ <? if ($action['disabled']): ?> <label class="undecorated" aria-disabled="true" <?= arrayToHtmlAttributes($action['attributes']) ?>> <? if ($action['icon']): ?> - <?= $action['icon']->asImg(false, ['class' => 'action-menu-item-icon']) ?> + <?= $action['icon']->asSvg(false, ['class' => 'action-menu-item-icon']) ?> <? else: ?> <span class="action-menu-no-icon"></span> <? endif ?> @@ -47,7 +47,7 @@ <? elseif ($action['type'] === 'link'): ?> <a href="<?= htmlReady($action['link']) ?>" <?= arrayToHtmlAttributes($action['attributes']) ?>> <? if ($action['icon']): ?> - <?= $action['icon']->asImg(false, ['class' => 'action-menu-item-icon']) ?> + <?= $action['icon']->asSvg(false, ['class' => 'action-menu-item-icon']) ?> <? else: ?> <span class="action-menu-no-icon"></span> <? endif ?> diff --git a/templates/shared/content_box.php b/templates/shared/content_box.php index c31f467..2c5b0f0 100644 --- a/templates/shared/content_box.php +++ b/templates/shared/content_box.php @@ -11,7 +11,7 @@ <? if (isset($admin_url)): ?> <nav> <a href="<?= URLHelper::getLink($admin_url) ?>" title="<?= htmlReady($admin_title) ?>"> - <?= Icon::create('admin')->asImg(tooltip2(htmlReady($admin_title))) ?> + <?= Icon::create('admin')->asSvg(tooltip2(htmlReady($admin_title))) ?> </a> </nav> <? endif; ?> diff --git a/templates/shared/index_box.php b/templates/shared/index_box.php index 3430056..98ef9c5 100644 --- a/templates/shared/index_box.php +++ b/templates/shared/index_box.php @@ -20,8 +20,8 @@ <td class="table_header_bold" style="text-align: right;"> <? if (isset($admin_url)): ?> <a href="<?= URLHelper::getLink($admin_url) ?>" title="<?= htmlReady($admin_title ?? _('Administration')) ?>"> - <?= Icon::create('admin', Icon::ROLE_INFO_ALT)->asImg([ - 'alt' => $admin_title ?? ('Administration'), + <?= Icon::create('admin', Icon::ROLE_INFO_ALT)->asSvg([ + 'alt' => $admin_title ?? _('Administration'), ]) ?> </a> <? endif ?> diff --git a/templates/sidebar/list-widget.php b/templates/sidebar/list-widget.php index 5aed188..49279e5 100644 --- a/templates/sidebar/list-widget.php +++ b/templates/sidebar/list-widget.php @@ -7,9 +7,12 @@ <? $icon = $icon->copyWithRole(Icon::ROLE_INACTIVE) ?> <? endif ?> <li id="<?= htmlReady($index) ?>" - <?= isset($icon) ? 'style="' . $icon->asCSS() .'"' : '' ?> <?= !empty($element->active) ? 'class="active"' : '' ?>> - <?= $element->render() ?> + <? if (isset($icon)): ?> + <?= $element->renderWithIcon($icon) ?> + <? else: ?> + <?= $element->render() ?> + <? endif ?> </li> <? endforeach; ?> </ul> diff --git a/templates/sidebar/resource-tree-widget.php b/templates/sidebar/resource-tree-widget.php index 890971b..e20ee41 100644 --- a/templates/sidebar/resource-tree-widget.php +++ b/templates/sidebar/resource-tree-widget.php @@ -21,7 +21,7 @@ <? if ($resource_path && !in_array($resource->id, $resource_path)): ?> <a href="<?= $link ?>"> <? endif; ?> - <?= Icon::create('arr_1right')->asImg([ + <?= Icon::create('arr_1right')->asSvg([ 'class' => in_array($resource->id, $resource_path) || (!$resource_path && $resource->level < $max_open_depth) ? 'rotated' : '', @@ -42,7 +42,7 @@ <?= $selected ? 'class="selected-resource"' : '' ?>> - <?= $resource->getIcon($selected ? Icon::ROLE_INFO_ALT : Icon::ROLE_CLICKABLE)->asImg([ + <?= $resource->getIcon($selected ? Icon::ROLE_INFO_ALT : Icon::ROLE_CLICKABLE)->asSvg([ 'class' => 'text-bottom' ]) ?> <?= htmlReady($resource->name) ?> diff --git a/templates/sidebar/resources_individual_booking_plan_sidebar.php b/templates/sidebar/resources_individual_booking_plan_sidebar.php index 8ba630d..50c4438 100644 --- a/templates/sidebar/resources_individual_booking_plan_sidebar.php +++ b/templates/sidebar/resources_individual_booking_plan_sidebar.php @@ -11,7 +11,7 @@ <input type="color" value="#000000" class="big-colour-input"> </div> <? endfor ?> - <?= Icon::create('print')->asImg(Icon::SIZE_LARGE, [ + <?= Icon::create('print')->asSvg(Icon::SIZE_LARGE, [ 'class' => 'text-bottom print-action', 'title' => _('Individuelle Druckansicht drucken'), 'onclick' => 'javascript:window.print();' diff --git a/templates/sidebar/room-clipboard-item.php b/templates/sidebar/room-clipboard-item.php index 45633a0..40b5146 100644 --- a/templates/sidebar/room-clipboard-item.php +++ b/templates/sidebar/room-clipboard-item.php @@ -33,13 +33,13 @@ if (!$item) { <td class="item-name"><?= htmlReady($item['name'] ?? '') ?></td> <td class="actions"> <a href="<?= Room::getLinkForAction('show', (!empty($item) ? $item['range_id'] : 'RANGE_ID')) ?>" data-dialog> - <?= Icon::create('info-circle')->asImg([ + <?= Icon::create('info-circle')->asSvg([ 'title' => _('Rauminformationen'), 'class' => 'text-bottom' ])?> </a> <a href="<?= Room::getLinkForAction('semester_plan', (!empty($item) ? $item['range_id'] : 'RANGE_ID')) ?>" target="_blank"> - <?= Icon::create('timetable')->asImg([ + <?= Icon::create('timetable')->asSvg([ 'title' => _('Semesterbelegung'), 'class' => 'text-bottom' ])?> diff --git a/templates/sidebar/room-search-criteria-templates.php b/templates/sidebar/room-search-criteria-templates.php index d084fa4..09e980b 100644 --- a/templates/sidebar/room-search-criteria-templates.php +++ b/templates/sidebar/room-search-criteria-templates.php @@ -16,7 +16,7 @@ </label> </li> <li class="template invisible" data-template-type="range"> - <?= Icon::create('trash')->asImg( + <?= Icon::create('trash')->asSvg( [ 'class' => 'text-bottom remove-icon', 'aria-label' => _('Kriterium entfernen'), @@ -38,7 +38,7 @@ </label> </li> <li class="template invisible" data-template-type="num"> - <?= Icon::create('trash')->asImg( + <?= Icon::create('trash')->asSvg( [ 'class' => 'text-bottom remove-icon', 'aria-label' => _('Kriterium entfernen'), @@ -51,7 +51,7 @@ </label> </li> <li class="template invisible" data-template-type="select"> - <?= Icon::create('trash')->asImg(['class' => 'text-bottom remove-icon']) ?> + <?= Icon::create('trash')->asSvg(['class' => 'text-bottom remove-icon']) ?> <label class="undecorated"> <span></span> <select class="room-search-widget_criteria-list_input"> @@ -60,7 +60,7 @@ </li> <li class="template invisible" data-template-type="other"> - <?= Icon::create('trash')->asImg( + <?= Icon::create('trash')->asSvg( [ 'class' => 'text-bottom remove-icon', 'aria-label' => _('Kriterium entfernen'), diff --git a/templates/sidebar/room-search-tree-widget.php b/templates/sidebar/room-search-tree-widget.php index 008b1bc..13bd204 100644 --- a/templates/sidebar/room-search-tree-widget.php +++ b/templates/sidebar/room-search-tree-widget.php @@ -8,7 +8,7 @@ <li <?= ((!$resource_path && $resource->level > $max_open_depth) || $hide) ? 'style="display: none;"' : ''; ?> > <? if (count($resource->children)): ?> - <?= Icon::create('arr_1right')->asImg( + <?= Icon::create('arr_1right')->asSvg( [ 'class' => implode( ' ', @@ -38,7 +38,7 @@ <? endif ?> <span id="<?= $search_object; ?>" style="cursor: pointer;"> - <?= $resource->getIcon()->asImg( + <?= $resource->getIcon()->asSvg( [ 'class' => 'text-bottom' ] diff --git a/templates/start/contents.php b/templates/start/contents.php index bb5697f..c0bbcc6 100644 --- a/templates/start/contents.php +++ b/templates/start/contents.php @@ -6,7 +6,7 @@ <a href="<?= URLHelper::getLink($navigation->getURL()) ?>" class="content-item-link"> <div class="content-item-img-wrapper"> <? if ($navigation->getImage()): ?> - <?= $navigation->getImage()->asImg(32, $navigation->getLinkAttributes()) ?> + <?= $navigation->getImage()->asSvg(32, $navigation->getLinkAttributes()) ?> <? endif ?> </div> <div class="content-item-text"> diff --git a/templates/tabs.php b/templates/tabs.php index 24597cb..fa7ca27 100644 --- a/templates/tabs.php +++ b/templates/tabs.php @@ -23,14 +23,14 @@ foreach (Navigation::getItem("/")->getSubNavigation() as $path => $nav) { ?> <a href="<?= URLHelper::getLink($nav->getURL()) ?>" <?= arrayToHtmlAttributes($attr) ?>> <? if ($image = $nav->getImage()) : ?> - <?= $image->asImg(['class' => "tab-icon", 'title' => $nav->getTitle() ? $nav->getTitle() : $nav->getDescription()]) ?> + <?= $image->asSvg(['class' => "tab-icon", 'title' => $nav->getTitle() ? $nav->getTitle() : $nav->getDescription()]) ?> <? endif ?> <span title="<?= $nav->getDescription() ? htmlReady($nav->getDescription()) : htmlReady($nav->getTitle())?>" class="tab-title"><?= htmlReady($nav->getTitle()) ?></span> </a> <? else: ?> <span class="quiet tab-title"> <? if ($image = $nav->getImage()) : ?> - <?= $image->asImg(['class' => "tab-icon", 'title' => $nav->getTitle()]) ?> + <?= $image->asSvg(['class' => "tab-icon", 'title' => $nav->getTitle()]) ?> <? endif ?> <?= htmlReady($nav->getTitle()) ?> </span> @@ -47,7 +47,7 @@ foreach (Navigation::getItem("/")->getSubNavigation() as $path => $nav) { <div id="non-responsive-toggle-fullscreen"> <button class="styleless" id="fullscreen-on" title="<?= _('Kompakte Navigation aktivieren') ?>"> - <?= Icon::create('screen-compact')->asImg(24) ?> + <?= Icon::create('screen-compact')->asSvg(24) ?> </button> </div> <? endif ?> diff --git a/templates/toc/_toc-item-list.php b/templates/toc/_toc-item-list.php index 3e2ee0d..82cad85 100644 --- a/templates/toc/_toc-item-list.php +++ b/templates/toc/_toc-item-list.php @@ -4,7 +4,7 @@ <a class="navigate" href="<?= htmlReady($item->getURL()) ?>"> <? endif ?> <? if ($item->getIcon()) : ?> - <?= $item->getIcon()->copyWithRole(Icon::ROLE_INFO)->asImg(24) ?> + <?= $item->getIcon()->copyWithRole(Icon::ROLE_INFO)->asSvg(24) ?> <? endif ?> <?= htmlReady($item->getTitle()) ?> <? if (!$item->isActive()) : ?> diff --git a/templates/toc/generic-toc-list.php b/templates/toc/generic-toc-list.php index 475ceaa..0894e5f 100644 --- a/templates/toc/generic-toc-list.php +++ b/templates/toc/generic-toc-list.php @@ -3,7 +3,7 @@ <header id="toc_header"> <h1 id="toc_h1"><?= sprintf(_('Inhalt (%u Elemente)'), htmlReady($root->countAllChildren())) ?></h1> <label for="cb-toc" class="check-box enter-accessible" title="<?= _('Schließen')?>" tabindex="0"> - <?= Icon::create('decline')->asImg(24) ?> + <?= Icon::create('decline')->asSvg(24) ?> </label> </header> <section> diff --git a/templates/userfilter/display.php b/templates/userfilter/display.php index 189f6cd..2aba04f 100644 --- a/templates/userfilter/display.php +++ b/templates/userfilter/display.php @@ -17,7 +17,7 @@ if ($filter->show_user_count) { $fieldText .= ' (' . sprintf(ngettext('Eine Person', '%s Personen', $user_count), $user_count); if ($user_count === 0) { $fieldText .= ' ' . Icon::create('exclaim-circle', Icon::ROLE_ATTENTION) - ->asImg(['title' => _('Niemand erfüllt diese Bedingung.')]); + ->asSvg(['title' => _('Niemand erfüllt diese Bedingung.')]); } $fieldText .= ')'; } diff --git a/tests/unit/lib/classes/IconClassTest.php b/tests/unit/lib/classes/IconClassTest.php index 01a3a1b..bc7ad7f 100644 --- a/tests/unit/lib/classes/IconClassTest.php +++ b/tests/unit/lib/classes/IconClassTest.php @@ -23,156 +23,47 @@ class IconClassTest extends \Codeception\Test\Unit Assets::set_assets_url($this->memo_assets_url); } - public function testIconCreateAsImg() - { - $this->assertEquals( - '<img src="images/icons/blue/vote.svg" alt="" class="studip-icon icon-role-clickable icon-shape-vote">', - Icon::create('vote')->asImg() - ); - } - - public function testIconCreateAsImgWithAddition() - { - $this->assertEquals( - '<img src="images/icons/blue/vote.svg" alt="" class="studip-icon icon-role-clickable icon-shape-vote">', - Icon::create('vote')->asImg() - ); - } - - public function testIconCreateAsImgWithSize() - { - $this->assertEquals( - '<img style="width:100px;height:100px" src="images/icons/blue/vote.svg" alt="" class="studip-icon icon-role-clickable icon-shape-vote">', - Icon::create('vote')->asImg(100) - ); - } - - public function testIconCreateAsImgWithTitle() - { - $this->assertEquals( - '<img title="Mit Anhang" style="width:24px;height:24px" src="images/icons/blue/vote.svg" class="studip-icon icon-role-clickable icon-shape-vote">', - Icon::create('vote')->asImg(24, ['title' => 'Mit Anhang']) - ); - } - - public function testIconCreateAsImgWithHspace() - { - $this->assertEquals( - '<img hspace="3" src="images/icons/blue/arr_2left.svg" alt="" class="studip-icon icon-role-clickable icon-shape-arr_2left">', - Icon::create('arr_2left')->asImg(['hspace' => 3]) - ); - } - - public function testIconCreateAsImgWithClass() - { - $this->assertEquals( - '<img class="text-bottom studip-icon icon-role-info icon-shape-staple" style="width:24px;height:24px" src="images/icons/black/staple.svg" alt="">', - Icon::create('staple', Icon::ROLE_INFO)->asImg(24, ['class' => 'text-bottom']) - ); - } - - public function testIconCreateAsImgWithClassAndTitle() - { - $this->assertEquals( - '<img class="text-bottom studip-icon icon-role-new icon-shape-upload" title="Datei hochladen" style="width:24px;height:24px" src="images/icons/red/upload.svg">', - Icon::create('upload', Icon::ROLE_NEW, ['title' => 'Datei hochladen']) - ->asImg(24, ['class' => 'text-bottom']) - ); - } - - public function testIconCreateAsInput() - { - $this->assertEquals( - '<input type="image" class="text-bottom studip-icon icon-role-clickable icon-shape-upload" style="width:24px;height:24px" src="images/icons/blue/upload.svg" alt="">', - Icon::create('upload')->asInput(24, ['class' => 'text-bottom']) - ); - } - - public function testIconIsImmutable() - { - $icon = Icon::create('upload', attributes: ['title' => 'a title']); - $copy = $icon->copyWithRole(Icon::ROLE_CLICKABLE); - - $this->assertNotSame($icon, $copy); - } - - public function testIconCopyWithRole() - { - $icon = Icon::create('upload', attributes: ['title' => 'a title']); - $copy = $icon->copyWithRole(Icon::ROLE_INFO); - - $this->assertEquals($icon->getShape(), $copy->getShape()); - $this->assertNotEquals($icon->getRole(), $copy->getRole()); - $this->assertEquals($icon->getAttributes(), $copy->getAttributes()); - } - - public function testIconCopyWithShape() - { - $icon = Icon::create('upload', attributes: ['title' => 'a title']); - $copy = $icon->copyWithShape('staple'); - - $this->assertNotEquals($icon->getShape(), $copy->getShape()); - $this->assertEquals($icon->getRole(), $copy->getRole()); - $this->assertEquals($icon->getAttributes(), $copy->getAttributes()); - } - - public function testIconCopyWithAttributes() - { - $icon = Icon::create('upload', Icon::ROLE_CLICKABLE, ['title' => 'a title']); - $copy = $icon->copyWithAttributes(['title' => 'another title']); - - $this->assertEquals($icon->getShape(), $copy->getShape()); - $this->assertEquals($icon->getRole(), $copy->getRole()); - $this->assertNotEquals($icon->getAttributes(), $copy->getAttributes()); - } - - public function testStaticIcon() - { - $icon = Icon::create('https://i.imgur.com/kpTtTh.gif'); - $this->assertEquals($icon->asImagePath(), 'https://i.imgur.com/kpTtTh.gif'); - } - - public function testIconCreateAsCSSWithSize() - { - $this->assertEquals( - 'background-image:url(images/icons/blue/vote.svg);background-size:17px 17px;', - Icon::create('vote')->asCSS(17) - ); - } - - public function testIconCreateAsImagePath() - { - $this->assertEquals( - 'images/icons/blue/vote.svg', - Icon::create('vote')->asImagePath() - ); - } - - public function testIconCreateAsImgWithoutSize() - { - $this->assertEquals( - '<img src="images/icons/blue/vote.svg" alt="" class="studip-icon icon-role-clickable icon-shape-vote">', - Icon::create('vote')->asImg(false) - ); - } - - public function testIconCreateAsInputWithoutSize() - { - $this->assertEquals( - '<input type="image" src="images/icons/blue/upload.svg" alt="" class="studip-icon icon-role-clickable icon-shape-upload">', - Icon::create('upload')->asInput(false) - ); - } - - public function testIconCreateRemovedExtras() - { - $this->assertEquals( - '<img src="images/icons/blue/vote.svg" alt="" class="studip-icon icon-role-clickable icon-shape-vote">', - Icon::create('add/vote')->asImg(false) - ); - $this->assertEquals( - '<img src="images/icons/blue/vote.svg" alt="" class="studip-icon icon-role-clickable icon-shape-vote">', - Icon::create('vote+add')->asImg(false) - ); - } + public function testIconIsImmutable() + { + $icon = Icon::create('upload', attributes: ['title' => 'a title']); + $copy = $icon->copyWithRole(Icon::ROLE_CLICKABLE); + + $this->assertNotSame($icon, $copy); + } + + public function testIconCopyWithRole() + { + $icon = Icon::create('upload', attributes: ['title' => 'a title']); + $copy = $icon->copyWithRole(Icon::ROLE_INFO); + + $this->assertEquals($icon->getShape(), $copy->getShape()); + $this->assertNotEquals($icon->getRole(), $copy->getRole()); + $this->assertEquals($icon->getAttributes(), $copy->getAttributes()); + } + + public function testIconCopyWithShape() + { + $icon = Icon::create('upload', attributes: ['title' => 'a title']); + $copy = $icon->copyWithShape('staple'); + + $this->assertNotEquals($icon->getShape(), $copy->getShape()); + $this->assertEquals($icon->getRole(), $copy->getRole()); + $this->assertEquals($icon->getAttributes(), $copy->getAttributes()); + } + + public function testIconCopyWithAttributes() + { + $icon = Icon::create('upload', Icon::ROLE_CLICKABLE, ['title' => 'a title']); + $copy = $icon->copyWithAttributes(['title' => 'another title']); + + $this->assertEquals($icon->getShape(), $copy->getShape()); + $this->assertEquals($icon->getRole(), $copy->getRole()); + $this->assertNotEquals($icon->getAttributes(), $copy->getAttributes()); + } + + public function testStaticIcon() + { + $icon = Icon::create('https://i.imgur.com/kpTtTh.gif'); + $this->assertEquals($icon->asImagePath(), 'https://i.imgur.com/kpTtTh.gif'); + } } |
