Compare commits

..

1 Commits

Author SHA1 Message Date
dependabot[bot]
b395ef555a Bump react-router and react-router-dom in /webclient
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) to 6.30.3 and updates ancestor dependency [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom). These dependencies need to be updated together.


Updates `react-router` from 6.4.2 to 6.30.3
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/react-router@6.30.3/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@6.30.3/packages/react-router)

Updates `react-router-dom` from 6.4.2 to 6.30.3
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.30.3/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 6.30.3
  dependency-type: indirect
- dependency-name: react-router-dom
  dependency-version: 6.30.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 02:49:13 +00:00
16 changed files with 327 additions and 503 deletions

View File

@@ -39,34 +39,6 @@ CardGroupDisplayWidget::CardGroupDisplayWidget(QWidget *parent,
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &CardGroupDisplayWidget::onCardRemoval);
}
// Just here so it can get overwritten in subclasses.
void CardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
}
// =====================================================================================================================
// User Interaction
// =====================================================================================================================
void CardGroupDisplayWidget::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
if (selectionModel) {
selectionModel->clearSelection();
}
}
void CardGroupDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
{
emit cardClicked(event, card);
}
void CardGroupDisplayWidget::onHover(const ExactCard &card)
{
emit cardHovered(card);
}
void CardGroupDisplayWidget::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
auto proxyModel = qobject_cast<QAbstractProxyModel *>(selectionModel->model());
@@ -104,9 +76,15 @@ void CardGroupDisplayWidget::onSelectionChanged(const QItemSelection &selected,
}
}
// =====================================================================================================================
// Display Widget Management
// =====================================================================================================================
void CardGroupDisplayWidget::clearAllDisplayWidgets()
{
for (auto idx : indexToWidgetMap.keys()) {
auto displayWidget = indexToWidgetMap.value(idx);
removeFromLayout(displayWidget);
indexToWidgetMap.remove(idx);
delete displayWidget;
}
}
QWidget *CardGroupDisplayWidget::constructWidgetForIndex(QPersistentModelIndex index)
{
@@ -156,20 +134,6 @@ void CardGroupDisplayWidget::updateCardDisplays()
}
}
void CardGroupDisplayWidget::clearAllDisplayWidgets()
{
for (auto idx : indexToWidgetMap.keys()) {
auto displayWidget = indexToWidgetMap.value(idx);
removeFromLayout(displayWidget);
indexToWidgetMap.remove(idx);
delete displayWidget;
}
}
// =====================================================================================================================
// DeckListModel Signal Responses
// =====================================================================================================================
void CardGroupDisplayWidget::onCardAddition(const QModelIndex &parent, int first, int last)
{
if (!trackedIndex.isValid()) {
@@ -214,4 +178,27 @@ void CardGroupDisplayWidget::onActiveSortCriteriaChanged(QStringList _activeSort
clearAllDisplayWidgets();
updateCardDisplays();
}
void CardGroupDisplayWidget::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
if (selectionModel) {
selectionModel->clearSelection();
}
}
void CardGroupDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
{
emit cardClicked(event, card);
}
void CardGroupDisplayWidget::onHover(const ExactCard &card)
{
emit cardHovered(card);
}
void CardGroupDisplayWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
}

View File

@@ -23,7 +23,6 @@ DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent,
displayType(_displayType), bannerOpacity(bannerOpacity), subBannerOpacity(subBannerOpacity),
cardSizeWidget(_cardSizeWidget)
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layout = new QVBoxLayout(this);
setLayout(layout);
@@ -47,20 +46,6 @@ DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent,
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &DeckCardZoneDisplayWidget::onCategoryRemoval);
}
// =====================================================================================================================
// User Interaction
// =====================================================================================================================
void DeckCardZoneDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
{
emit cardClicked(event, card, zoneName);
}
void DeckCardZoneDisplayWidget::onHover(const ExactCard &card)
{
emit cardHovered(card);
}
void DeckCardZoneDisplayWidget::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
for (auto &range : selected) {
@@ -84,9 +69,17 @@ void DeckCardZoneDisplayWidget::onSelectionChanged(const QItemSelection &selecte
}
}
// =====================================================================================================================
// Display Widget Management
// =====================================================================================================================
void DeckCardZoneDisplayWidget::cleanupInvalidCardGroup(CardGroupDisplayWidget *displayWidget)
{
cardGroupLayout->removeWidget(displayWidget);
displayWidget->setParent(nullptr);
for (auto idx : indexToWidgetMap.keys()) {
if (!idx.isValid()) {
indexToWidgetMap.remove(idx);
}
}
delete displayWidget;
}
void DeckCardZoneDisplayWidget::constructAppropriateWidget(QPersistentModelIndex index)
{
@@ -148,45 +141,6 @@ void DeckCardZoneDisplayWidget::displayCards()
}
}
void DeckCardZoneDisplayWidget::refreshDisplayType(const DisplayType &_displayType)
{
displayType = _displayType;
QLayoutItem *item;
while ((item = cardGroupLayout->takeAt(0)) != nullptr) {
if (item->widget()) {
item->widget()->deleteLater();
} else if (item->layout()) {
item->layout()->deleteLater();
}
delete item;
}
indexToWidgetMap.clear();
// We gotta wait for all the deleteLater's to finish so we fire after the next event cycle
auto timer = new QTimer(this);
timer->setSingleShot(true);
connect(timer, &QTimer::timeout, this, [this]() { displayCards(); });
timer->start();
}
void DeckCardZoneDisplayWidget::cleanupInvalidCardGroup(CardGroupDisplayWidget *displayWidget)
{
cardGroupLayout->removeWidget(displayWidget);
displayWidget->setParent(nullptr);
for (auto idx : indexToWidgetMap.keys()) {
if (!idx.isValid()) {
indexToWidgetMap.remove(idx);
}
}
delete displayWidget;
}
// =====================================================================================================================
// DeckListModel Signal Responses
// =====================================================================================================================
void DeckCardZoneDisplayWidget::onCategoryAddition(const QModelIndex &parent, int first, int last)
{
if (!trackedIndex.isValid()) {
@@ -219,6 +173,48 @@ void DeckCardZoneDisplayWidget::onCategoryRemoval(const QModelIndex &parent, int
}
}
void DeckCardZoneDisplayWidget::resizeEvent(QResizeEvent *event)
{
QWidget::resizeEvent(event);
for (QObject *child : layout->children()) {
QWidget *widget = qobject_cast<QWidget *>(child);
if (widget) {
widget->setMaximumWidth(width());
}
}
}
void DeckCardZoneDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
{
emit cardClicked(event, card, zoneName);
}
void DeckCardZoneDisplayWidget::onHover(const ExactCard &card)
{
emit cardHovered(card);
}
void DeckCardZoneDisplayWidget::refreshDisplayType(const DisplayType &_displayType)
{
displayType = _displayType;
QLayoutItem *item;
while ((item = cardGroupLayout->takeAt(0)) != nullptr) {
if (item->widget()) {
item->widget()->deleteLater();
} else if (item->layout()) {
item->layout()->deleteLater();
}
delete item;
}
indexToWidgetMap.clear();
// We gotta wait for all the deleteLater's to finish so we fire after the next event cycle
auto timer = new QTimer(this);
timer->setSingleShot(true);
connect(timer, &QTimer::timeout, this, [this]() { displayCards(); });
timer->start();
}
void DeckCardZoneDisplayWidget::onActiveGroupCriteriaChanged(QString _activeGroupCriteria)
{
activeGroupCriteria = _activeGroupCriteria;

View File

@@ -40,6 +40,7 @@ public:
QPersistentModelIndex trackedIndex;
QString zoneName;
void addCardsToOverlapWidget();
void resizeEvent(QResizeEvent *event) override;
public slots:
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);

View File

@@ -459,15 +459,12 @@ void DeckEditorDeckDockWidget::syncBannerCardComboBoxSelectionWithDeck()
}
}
void DeckEditorDeckDockWidget::setSelectedIndex(const QModelIndex &newCardIndex, bool preserveWidgetFocus)
void DeckEditorDeckDockWidget::setSelectedIndex(const QModelIndex &newCardIndex)
{
deckView->clearSelection();
deckView->setCurrentIndex(newCardIndex);
recursiveExpand(newCardIndex);
if (!preserveWidgetFocus) {
deckView->setFocus(Qt::FocusReason::MouseFocusReason);
}
deckView->setFocus(Qt::FocusReason::MouseFocusReason);
}
void DeckEditorDeckDockWidget::syncDisplayWidgetsToModel()

View File

@@ -100,7 +100,7 @@ private slots:
void writeComments();
void writeBannerCard(int);
void applyActiveGroupCriteria();
void setSelectedIndex(const QModelIndex &newCardIndex, bool preserveWidgetFocus);
void setSelectedIndex(const QModelIndex &newCardIndex);
void updateHash();
void refreshShortcuts();
void updateShowBannerCardComboBox(bool visible);

View File

@@ -182,7 +182,7 @@ QModelIndex DeckStateManager::addCard(const ExactCard &card, const QString &zone
QModelIndex idx = modifyDeck(reason, [&card, &zone](auto model) { return model->addCard(card, zone); });
if (idx.isValid()) {
emit focusIndexChanged(idx, true);
emit focusIndexChanged(idx);
}
return idx;
@@ -208,7 +208,7 @@ QModelIndex DeckStateManager::decrementCard(const ExactCard &card, const QString
}
if (idx.isValid()) {
emit focusIndexChanged(idx, true);
emit focusIndexChanged(idx);
}
return idx;

View File

@@ -290,9 +290,8 @@ signals:
/**
* The selected card on any views connected to this deck should be changed to this index.
* @param index The model index
* @param preserveWidgetFocus Whether to keep the widget focus unchanged
*/
void focusIndexChanged(QModelIndex index, bool preserveWidgetFocus);
void focusIndexChanged(QModelIndex index);
};
#endif // COCKATRICE_DECK_STATE_MANAGER_H

View File

@@ -198,7 +198,7 @@ void CardAmountWidget::addPrinting(const QString &zone)
});
if (newCardIndex.isValid()) {
emit deckStateManager->focusIndexChanged(newCardIndex, false);
emit deckStateManager->focusIndexChanged(newCardIndex);
}
}

View File

@@ -38,36 +38,6 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent,
mainLayout->setContentsMargins(9, 0, 9, 5);
mainLayout->setSpacing(0);
initializeDisplayOptionsAndSearchWidget();
initializeScrollAreaAndZoneContainer();
cardSizeWidget = new CardSizeWidget(this, nullptr, SettingsCache::instance().getVisualDeckEditorCardSize());
connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance(),
&SettingsCache::setVisualDeckEditorCardSize);
mainLayout->addWidget(displayOptionsAndSearch);
mainLayout->addWidget(scrollArea);
mainLayout->addWidget(cardSizeWidget);
connectDeckListModel();
constructZoneWidgetsFromDeckListModel();
if (selectionModel) {
connect(selectionModel, &QItemSelectionModel::selectionChanged, this,
&VisualDeckEditorWidget::onSelectionChanged);
}
retranslateUi();
}
// =====================================================================================================================
// Constructor helpers
// =====================================================================================================================
void VisualDeckEditorWidget::initializeSearchBarAndCompleter()
{
searchBar = new QLineEdit(this);
connect(searchBar, &QLineEdit::returnPressed, this, [=, this]() {
if (!searchBar->hasFocus())
@@ -139,10 +109,12 @@ void VisualDeckEditorWidget::initializeSearchBarAndCompleter()
emit cardAdditionRequested(card);
}
});
}
void VisualDeckEditorWidget::initializeDisplayOptionsWidget()
{
displayOptionsAndSearch = new QWidget(this);
displayOptionsAndSearchLayout = new QHBoxLayout(displayOptionsAndSearch);
displayOptionsAndSearchLayout->setAlignment(Qt::AlignLeft);
displayOptionsAndSearch->setLayout(displayOptionsAndSearchLayout);
displayOptionsWidget = new VisualDeckDisplayOptionsWidget(this);
connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::displayTypeChanged, this,
&VisualDeckEditorWidget::displayTypeChanged);
@@ -150,26 +122,11 @@ void VisualDeckEditorWidget::initializeDisplayOptionsWidget()
&VisualDeckEditorWidget::activeGroupCriteriaChanged);
connect(displayOptionsWidget, &VisualDeckDisplayOptionsWidget::sortCriteriaChanged, this,
&VisualDeckEditorWidget::activeSortCriteriaChanged);
}
void VisualDeckEditorWidget::initializeDisplayOptionsAndSearchWidget()
{
initializeSearchBarAndCompleter();
initializeDisplayOptionsWidget();
displayOptionsAndSearch = new QWidget(this);
displayOptionsAndSearchLayout = new QHBoxLayout(displayOptionsAndSearch);
displayOptionsAndSearchLayout->setAlignment(Qt::AlignLeft);
displayOptionsAndSearch->setLayout(displayOptionsAndSearchLayout);
displayOptionsAndSearchLayout->addWidget(displayOptionsWidget);
displayOptionsAndSearchLayout->addWidget(searchBar);
displayOptionsAndSearchLayout->addWidget(searchPushButton);
}
void VisualDeckEditorWidget::initializeScrollAreaAndZoneContainer()
{
scrollArea = new QScrollArea(this);
scrollArea->setWidgetResizable(true);
scrollArea->setMinimumSize(0, 0);
@@ -179,19 +136,31 @@ void VisualDeckEditorWidget::initializeScrollAreaAndZoneContainer()
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
zoneContainer = new QWidget(scrollArea);
zoneContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
zoneContainerLayout = new QVBoxLayout(zoneContainer);
zoneContainer->setLayout(zoneContainerLayout);
scrollArea->addScrollBarWidget(zoneContainer, Qt::AlignHCenter);
scrollArea->setWidget(zoneContainer);
}
void VisualDeckEditorWidget::connectDeckListModel()
{
cardSizeWidget = new CardSizeWidget(this, nullptr, SettingsCache::instance().getVisualDeckEditorCardSize());
connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance(),
&SettingsCache::setVisualDeckEditorCardSize);
mainLayout->addWidget(displayOptionsAndSearch);
mainLayout->addWidget(scrollArea);
mainLayout->addWidget(cardSizeWidget);
connect(deckListModel, &DeckListModel::modelReset, this, &VisualDeckEditorWidget::decklistModelReset);
connect(deckListModel, &DeckListModel::dataChanged, this, &VisualDeckEditorWidget::decklistDataChanged);
connect(deckListModel, &QAbstractItemModel::rowsInserted, this, &VisualDeckEditorWidget::onCardAddition);
connect(deckListModel, &QAbstractItemModel::rowsRemoved, this, &VisualDeckEditorWidget::onCardRemoval);
constructZoneWidgetsFromDeckListModel();
if (selectionModel) {
connect(selectionModel, &QItemSelectionModel::selectionChanged, this,
&VisualDeckEditorWidget::onSelectionChanged);
}
retranslateUi();
}
void VisualDeckEditorWidget::retranslateUi()
@@ -202,9 +171,96 @@ void VisualDeckEditorWidget::retranslateUi()
"preferred printing to the deck on pressing enter"));
}
// =====================================================================================================================
// Display Widget Management
// =====================================================================================================================
void VisualDeckEditorWidget::setSelectionModel(QItemSelectionModel *model)
{
if (selectionModel == model) {
return;
}
if (selectionModel) {
// TODO: Possibly disconnect old ones?
}
selectionModel = model;
if (selectionModel) {
connect(selectionModel, &QItemSelectionModel::selectionChanged, this,
&VisualDeckEditorWidget::onSelectionChanged);
}
}
void VisualDeckEditorWidget::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
for (auto &range : selected) {
for (int row = range.top(); row <= range.bottom(); ++row) {
QModelIndex idx = range.model()->index(row, 0, range.parent());
auto it = indexToWidgetMap.find(QPersistentModelIndex(idx));
if (it != indexToWidgetMap.end()) {
// it.value()->setHighlighted(true);
}
}
}
for (auto &range : deselected) {
for (int row = range.top(); row <= range.bottom(); ++row) {
QModelIndex idx = range.model()->index(row, 0, range.parent());
auto it = indexToWidgetMap.find(QPersistentModelIndex(idx));
if (it != indexToWidgetMap.end()) {
// it.value()->setHighlighted(false);
}
}
}
}
void VisualDeckEditorWidget::clearAllDisplayWidgets()
{
for (auto idx : indexToWidgetMap.keys()) {
auto displayWidget = indexToWidgetMap.value(idx);
zoneContainerLayout->removeWidget(displayWidget);
indexToWidgetMap.remove(idx);
delete displayWidget;
}
}
void VisualDeckEditorWidget::cleanupInvalidZones(DeckCardZoneDisplayWidget *displayWidget)
{
zoneContainerLayout->removeWidget(displayWidget);
for (auto idx : indexToWidgetMap.keys()) {
if (!idx.isValid()) {
indexToWidgetMap.remove(idx);
}
}
delete displayWidget;
}
void VisualDeckEditorWidget::onCardAddition(const QModelIndex &parent, int first, int last)
{
if (parent == deckListModel->getRoot()) {
for (int i = first; i <= last; i++) {
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 0, deckListModel->getRoot()));
if (indexToWidgetMap.contains(index)) {
continue;
}
constructZoneWidgetForIndex(index);
}
}
}
void VisualDeckEditorWidget::onCardRemoval(const QModelIndex &parent, int first, int last)
{
Q_UNUSED(parent);
Q_UNUSED(first);
Q_UNUSED(last);
for (const QPersistentModelIndex &idx : indexToWidgetMap.keys()) {
if (!idx.isValid()) {
zoneContainerLayout->removeWidget(indexToWidgetMap.value(idx));
indexToWidgetMap.value(idx)->deleteLater();
indexToWidgetMap.remove(idx);
}
}
}
void VisualDeckEditorWidget::constructZoneWidgetForIndex(QPersistentModelIndex persistent)
{
@@ -256,58 +312,10 @@ void VisualDeckEditorWidget::updateZoneWidgets()
{
}
void VisualDeckEditorWidget::clearAllDisplayWidgets()
void VisualDeckEditorWidget::resizeEvent(QResizeEvent *event)
{
for (auto idx : indexToWidgetMap.keys()) {
auto displayWidget = indexToWidgetMap.value(idx);
zoneContainerLayout->removeWidget(displayWidget);
indexToWidgetMap.remove(idx);
delete displayWidget;
}
}
void VisualDeckEditorWidget::cleanupInvalidZones(DeckCardZoneDisplayWidget *displayWidget)
{
zoneContainerLayout->removeWidget(displayWidget);
for (auto idx : indexToWidgetMap.keys()) {
if (!idx.isValid()) {
indexToWidgetMap.remove(idx);
}
}
delete displayWidget;
}
// =====================================================================================================================
// DeckModel Signals Management
// =====================================================================================================================
void VisualDeckEditorWidget::onCardAddition(const QModelIndex &parent, int first, int last)
{
if (parent == deckListModel->getRoot()) {
for (int i = first; i <= last; i++) {
QPersistentModelIndex index = QPersistentModelIndex(deckListModel->index(i, 0, deckListModel->getRoot()));
if (indexToWidgetMap.contains(index)) {
continue;
}
constructZoneWidgetForIndex(index);
}
}
}
void VisualDeckEditorWidget::onCardRemoval(const QModelIndex &parent, int first, int last)
{
Q_UNUSED(parent);
Q_UNUSED(first);
Q_UNUSED(last);
for (const QPersistentModelIndex &idx : indexToWidgetMap.keys()) {
if (!idx.isValid()) {
zoneContainerLayout->removeWidget(indexToWidgetMap.value(idx));
indexToWidgetMap.value(idx)->deleteLater();
indexToWidgetMap.remove(idx);
}
}
QWidget::resizeEvent(event);
zoneContainer->setMaximumWidth(scrollArea->viewport()->width());
}
void VisualDeckEditorWidget::decklistModelReset()
@@ -326,17 +334,6 @@ void VisualDeckEditorWidget::decklistDataChanged(QModelIndex topLeft, QModelInde
updateZoneWidgets();
}
// =====================================================================================================================
// User Interaction
// =====================================================================================================================
void VisualDeckEditorWidget::onCardClick(QMouseEvent *event,
CardInfoPictureWithTextOverlayWidget *instance,
QString zoneName)
{
emit cardClicked(event, instance, zoneName);
}
void VisualDeckEditorWidget::onHover(const ExactCard &hoveredCard)
{
// If user has any card selected, ignore hover
@@ -351,43 +348,9 @@ void VisualDeckEditorWidget::onHover(const ExactCard &hoveredCard)
// highlightHoveredCard(hoveredCard);
}
void VisualDeckEditorWidget::setSelectionModel(QItemSelectionModel *model)
void VisualDeckEditorWidget::onCardClick(QMouseEvent *event,
CardInfoPictureWithTextOverlayWidget *instance,
QString zoneName)
{
if (selectionModel == model) {
return;
}
if (selectionModel) {
// TODO: Possibly disconnect old ones?
}
selectionModel = model;
if (selectionModel) {
connect(selectionModel, &QItemSelectionModel::selectionChanged, this,
&VisualDeckEditorWidget::onSelectionChanged);
}
}
void VisualDeckEditorWidget::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
for (auto &range : selected) {
for (int row = range.top(); row <= range.bottom(); ++row) {
QModelIndex idx = range.model()->index(row, 0, range.parent());
auto it = indexToWidgetMap.find(QPersistentModelIndex(idx));
if (it != indexToWidgetMap.end()) {
// it.value()->setHighlighted(true);
}
}
}
for (auto &range : deselected) {
for (int row = range.top(); row <= range.bottom(); ++row) {
QModelIndex idx = range.model()->index(row, 0, range.parent());
auto it = indexToWidgetMap.find(QPersistentModelIndex(idx));
if (it != indexToWidgetMap.end()) {
// it.value()->setHighlighted(false);
}
}
}
emit cardClicked(event, instance, zoneName);
}

View File

@@ -39,6 +39,7 @@ public:
explicit VisualDeckEditorWidget(QWidget *parent, DeckListModel *deckListModel, QItemSelectionModel *selectionModel);
void retranslateUi();
void clearAllDisplayWidgets();
void resizeEvent(QResizeEvent *event) override;
void setDeckList(const DeckList &_deckListModel);
@@ -69,13 +70,6 @@ signals:
void cardAdditionRequested(const ExactCard &card);
void displayTypeChanged(DisplayType displayType);
protected:
void initializeSearchBarAndCompleter();
void initializeDisplayOptionsWidget();
void initializeDisplayOptionsAndSearchWidget();
void initializeScrollAreaAndZoneContainer();
void connectDeckListModel();
protected slots:
void onHover(const ExactCard &hoveredCard);
void onCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
@@ -97,6 +91,7 @@ private:
QWidget *zoneContainer;
QVBoxLayout *zoneContainerLayout;
// OverlapControlWidget *overlapControlWidget;
QWidget *container;
QHash<QPersistentModelIndex, QWidget *> indexToWidgetMap;
};

View File

@@ -1,17 +1,9 @@
@page user_reference User Reference
# Deck Management
- @subpage search_syntax_help
- @subpage deck_search_syntax_help
- @subpage creating_decks
- @subpage importing_decks
- @subpage editing_decks
- @subpage exporting_decks
# Release Channels
- @subpage beta_release
# Syntax Help
- @subpage search_syntax_help
- @subpage deck_search_syntax_help

View File

@@ -1,54 +0,0 @@
@page beta_release Beta Release
The beta version of Cockatrice features all the newest features before they make their way into the latest stable
release.
It allows us to test these features ahead of time and you to give feedback on them.
We release new betas very frequently and usually release a follow-up beta with a fix within a day or two if we break
anything. In contrast, stable releases are released much less frequently but ensured to be stable.
# What to Expect from the Beta
Using the beta and giving feedback on it helps us improve Cockatrice a lot.
We do not perform any automatic data collection so your voluntary feedback is the only way for us to get a sense of what
you enjoy, expect, or would like to change.
We highly appreciate your active participation and feedback.
That being said, some words of warning should be issued:
The beta release may contain unfinished features, bugs, or performance issues.
It is intended for testing and feedback and may be less stable than the default release.
We recommend using the beta only if you are comfortable encountering issues and helping us improve Cockatrice.
# Switching to the Beta
To switch to the Beta, navigate to your settings, using the Tab "Cockatrice → Settings" or Ctrl + Shift + P (default
shortcut).
Within the settings, in the first tab 'General', the first section 'Personal Settings' contains the setting 'Release
Channel'.
\image html release_channel_beta.png
Switch this to 'Beta'.
Afterwards, close your settings, and use the 'Help' tab to search for a client update. You should be prompted to install
the beta version.
# Switching back to Stable
Follow the same steps as above, but set Release Channel to 'Default'.
# Giving Feedback
If you encounter a bug or unexpected behavior while using the beta, please report it on:
- GitHub: https://github.com/Cockatrice/Cockatrice/issues
- Discord: https://discord.gg/4hNswvHeFd in #beta-testing
When reporting issues, please include:
- Your operating system
- The beta version number (found in 'Help → About Cockatrice')
- Steps to reproduce the problem, if possible

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

View File

@@ -2,22 +2,22 @@
<context>
<name>IntroPage</name>
<message>
<location filename="src/pages.cpp" line="127"/>
<location filename="src/oraclewizard.cpp" line="215"/>
<source>Introduction</source>
<translation>Einführung</translation>
</message>
<message>
<location filename="src/pages.cpp" line="128"/>
<location filename="src/oraclewizard.cpp" line="216"/>
<source>This wizard will import the list of sets, cards, and tokens that will be used by Cockatrice.</source>
<translation>Dieser Assistent wird eine Liste aller Editionen, Karten und Spielsteine importieren, die von Cockatrice genutzt werden.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="130"/>
<location filename="src/oraclewizard.cpp" line="218"/>
<source>Interface language:</source>
<translation>Interfacesprache:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="131"/>
<location filename="src/oraclewizard.cpp" line="219"/>
<source>Version:</source>
<translation>Version:</translation>
</message>
@@ -25,134 +25,134 @@
<context>
<name>LoadSetsPage</name>
<message>
<location filename="src/pages.cpp" line="200"/>
<location filename="src/oraclewizard.cpp" line="288"/>
<source>Source selection</source>
<translation>Quellenauswahl</translation>
</message>
<message>
<location filename="src/pages.cpp" line="201"/>
<location filename="src/oraclewizard.cpp" line="289"/>
<source>Please specify a compatible source for the list of sets and cards. You can specify a URL address that will be downloaded or use an existing file from your computer.</source>
<translation>Bitte geben Sie eine kompatible Quelle für die Liste der Editionen und Karten an. Sie können eine URL-Adresse zum Herunterladen angeben oder eine existierende Datei von Ihrem Computer verwenden.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="205"/>
<location filename="src/oraclewizard.cpp" line="293"/>
<source>Download URL:</source>
<translation>Download URL:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="206"/>
<location filename="src/oraclewizard.cpp" line="294"/>
<source>Local file:</source>
<translation>Lokale Datei:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="207"/>
<location filename="src/oraclewizard.cpp" line="295"/>
<source>Restore default URL</source>
<translation>Standard-URL wiederherstellen</translation>
</message>
<message>
<location filename="src/pages.cpp" line="208"/>
<location filename="src/oraclewizard.cpp" line="296"/>
<source>Choose file...</source>
<translation>Datei auswählen...</translation>
</message>
<message>
<location filename="src/pages.cpp" line="218"/>
<location filename="src/oraclewizard.cpp" line="306"/>
<source>Load sets file</source>
<translation>Editionsdatei wird geladen</translation>
</message>
<message>
<location filename="src/pages.cpp" line="228"/>
<location filename="src/oraclewizard.cpp" line="316"/>
<source>Sets file (%1)</source>
<oldsource>Sets JSON file (%1)</oldsource>
<translation>Sets Datei (%1)</translation>
</message>
<message>
<location filename="src/pages.cpp" line="258"/>
<location filename="src/pages.cpp" line="277"/>
<location filename="src/pages.cpp" line="282"/>
<location filename="src/pages.cpp" line="354"/>
<location filename="src/pages.cpp" line="485"/>
<location filename="src/pages.cpp" line="498"/>
<location filename="src/pages.cpp" line="519"/>
<location filename="src/oraclewizard.cpp" line="346"/>
<location filename="src/oraclewizard.cpp" line="365"/>
<location filename="src/oraclewizard.cpp" line="370"/>
<location filename="src/oraclewizard.cpp" line="438"/>
<location filename="src/oraclewizard.cpp" line="569"/>
<location filename="src/oraclewizard.cpp" line="582"/>
<location filename="src/oraclewizard.cpp" line="603"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="src/pages.cpp" line="258"/>
<location filename="src/oraclewizard.cpp" line="346"/>
<source>The provided URL is not valid.</source>
<translation>Die eingegebene URL ist nicht gültig.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="262"/>
<location filename="src/oraclewizard.cpp" line="350"/>
<source>Downloading (0MB)</source>
<translation>Herunterladen (0MB)</translation>
</message>
<message>
<location filename="src/pages.cpp" line="277"/>
<location filename="src/oraclewizard.cpp" line="365"/>
<source>Please choose a file.</source>
<translation>Bitte wähle eine Datei aus.</translation>
<translation>Bitte wählen Sie eine Datei.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="282"/>
<location filename="src/oraclewizard.cpp" line="370"/>
<source>Cannot open file &apos;%1&apos;.</source>
<translation>Datei &apos;%1&apos; kann nicht geöffnet werden.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="345"/>
<location filename="src/oraclewizard.cpp" line="429"/>
<source>Downloading (%1MB)</source>
<translation>Herunterladen (%1MB)</translation>
</message>
<message>
<location filename="src/pages.cpp" line="354"/>
<location filename="src/oraclewizard.cpp" line="438"/>
<source>Network error: %1.</source>
<translation>Netzwerkfehler: %1.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="392"/>
<location filename="src/oraclewizard.cpp" line="476"/>
<source>Parsing file</source>
<translation>Datei wird verarbeitet</translation>
</message>
<message>
<location filename="src/pages.cpp" line="414"/>
<location filename="src/oraclewizard.cpp" line="498"/>
<source>Xz extraction failed.</source>
<translation>Fehler beim Extrahieren der xz Datei.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="421"/>
<location filename="src/oraclewizard.cpp" line="505"/>
<source>Sorry, this version of Oracle does not support xz compressed files.</source>
<translation>Es tut uns Leid, diese Version von Oracle unterstützt keine xz komprimierten Dateien.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="441"/>
<location filename="src/oraclewizard.cpp" line="525"/>
<source>Failed to open Zip archive: %1.</source>
<translation>Fehler beim Öffnen des Zip Archivs: %1.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="446"/>
<location filename="src/oraclewizard.cpp" line="530"/>
<source>Zip extraction failed: the Zip archive doesn&apos;t contain exactly one file.</source>
<translation>Fehler beim Extrahieren: Das Zip Archiv enthält mehr als eine Datei.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="454"/>
<location filename="src/oraclewizard.cpp" line="538"/>
<source>Zip extraction failed: %1.</source>
<translation>Fehler beim Extrahieren: %1.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="462"/>
<location filename="src/oraclewizard.cpp" line="546"/>
<source>Sorry, this version of Oracle does not support zipped files.</source>
<translation>Es tut uns Leid, diese Version von Oracle unterstützt keine Zip Archive.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="485"/>
<location filename="src/oraclewizard.cpp" line="569"/>
<source>Failed to interpret downloaded data.</source>
<translation>Interpretation der heruntergeladenen Daten fehlgeschlagen.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="498"/>
<location filename="src/oraclewizard.cpp" line="582"/>
<source>Do you want to download the uncompressed file instead?</source>
<translation>Möchten Sie stattdessen die unkomprimierte Datei herunterladen?</translation>
</message>
<message>
<location filename="src/pages.cpp" line="520"/>
<location filename="src/oraclewizard.cpp" line="604"/>
<source>The file was retrieved successfully, but it does not contain any sets data.</source>
<translation>Die Datei wurde erfolgreich abgerufen, sie enthält aber keine Editionsdaten.</translation>
</message>
@@ -160,57 +160,42 @@
<context>
<name>LoadSpoilersPage</name>
<message>
<location filename="src/pages.cpp" line="716"/>
<location filename="src/oraclewizard.cpp" line="790"/>
<source>Save spoiler database</source>
<translation>Speichere Spoilerdatenbank</translation>
</message>
<message>
<location filename="src/pages.cpp" line="721"/>
<location filename="src/oraclewizard.cpp" line="795"/>
<source>XML; spoiler database (*.xml)</source>
<translation>XML; Spoilerdatenbank (*.xml)</translation>
</message>
<message>
<location filename="src/pages.cpp" line="726"/>
<source>spoiler</source>
<translation>Spoiler</translation>
</message>
<message>
<location filename="src/pages.cpp" line="731"/>
<location filename="src/oraclewizard.cpp" line="800"/>
<source>Spoilers import</source>
<translation>Spoilerimport</translation>
</message>
<message>
<location filename="src/pages.cpp" line="732"/>
<location filename="src/oraclewizard.cpp" line="801"/>
<source>Please specify a compatible source for spoiler data.</source>
<translation>Bitte geben Sie eine kompatible Quelle für Spoilerdaten an.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="734"/>
<location filename="src/oraclewizard.cpp" line="803"/>
<source>Download URL:</source>
<translation>Download URL:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="735"/>
<source>Local file:</source>
<translation>Lokale Datei:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="736"/>
<location filename="src/oraclewizard.cpp" line="804"/>
<source>Restore default URL</source>
<translation>Standard-URL wiederherstellen</translation>
</message>
<message>
<location filename="src/pages.cpp" line="737"/>
<source>Choose file...</source>
<translation>Datei auswählen...</translation>
</message>
<message>
<location filename="src/pages.cpp" line="739"/>
<location filename="src/oraclewizard.cpp" line="805"/>
<source>The spoiler database will be saved at the following location:</source>
<translation>Die Spoilerdatenbank wird in folgendem Pfad gespeichert:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="741"/>
<location filename="src/oraclewizard.cpp" line="807"/>
<source>Save to a custom path (not recommended)</source>
<translation>Speichere in benutzerdefiniertem Pfad (nicht empfohlen)</translation>
</message>
@@ -218,57 +203,42 @@
<context>
<name>LoadTokensPage</name>
<message>
<location filename="src/pages.cpp" line="671"/>
<location filename="src/oraclewizard.cpp" line="753"/>
<source>Save token database</source>
<translation>Speichere Spielsteindatenbank</translation>
</message>
<message>
<location filename="src/pages.cpp" line="676"/>
<location filename="src/oraclewizard.cpp" line="758"/>
<source>XML; token database (*.xml)</source>
<translation>XML; Spielsteindatenbank (*.xml)</translation>
</message>
<message>
<location filename="src/pages.cpp" line="681"/>
<source>tokens</source>
<translation>Spielsteine</translation>
</message>
<message>
<location filename="src/pages.cpp" line="686"/>
<location filename="src/oraclewizard.cpp" line="763"/>
<source>Tokens import</source>
<translation>Spielsteinimport</translation>
</message>
<message>
<location filename="src/pages.cpp" line="687"/>
<location filename="src/oraclewizard.cpp" line="764"/>
<source>Please specify a compatible source for token data.</source>
<translation>Bitte geben Sie eine kompatible Quelle für Spielsteindaten an.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="689"/>
<location filename="src/oraclewizard.cpp" line="766"/>
<source>Download URL:</source>
<translation>Download URL:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="690"/>
<source>Local file:</source>
<translation>Lokale Datei:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="691"/>
<location filename="src/oraclewizard.cpp" line="767"/>
<source>Restore default URL</source>
<translation>Standard-URL wiederherstellen</translation>
</message>
<message>
<location filename="src/pages.cpp" line="692"/>
<source>Choose file...</source>
<translation>Datei auswählen...</translation>
</message>
<message>
<location filename="src/pages.cpp" line="694"/>
<location filename="src/oraclewizard.cpp" line="768"/>
<source>The token database will be saved at the following location:</source>
<translation>Die Spielsteindatenbank wird in folgendem Pfad gespeichert:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="696"/>
<location filename="src/oraclewizard.cpp" line="770"/>
<source>Save to a custom path (not recommended)</source>
<translation>Speichere in benutzerdefiniertem Pfad (nicht empfohlen)</translation>
</message>
@@ -276,7 +246,7 @@
<context>
<name>OracleImporter</name>
<message>
<location filename="src/oracleimporter.cpp" line="541"/>
<location filename="src/oracleimporter.cpp" line="466"/>
<source>Dummy set containing tokens</source>
<translation>Platzhalter Edition mit Spielsteinen</translation>
</message>
@@ -284,7 +254,7 @@
<context>
<name>OracleWizard</name>
<message>
<location filename="src/oraclewizard.cpp" line="70"/>
<location filename="src/oraclewizard.cpp" line="106"/>
<source>Oracle Importer</source>
<translation>Oracle Importer</translation>
</message>
@@ -292,22 +262,22 @@
<context>
<name>OutroPage</name>
<message>
<location filename="src/pages.cpp" line="136"/>
<location filename="src/oraclewizard.cpp" line="224"/>
<source>Finished</source>
<translation>Fertig</translation>
</message>
<message>
<location filename="src/pages.cpp" line="137"/>
<location filename="src/oraclewizard.cpp" line="225"/>
<source>The wizard has finished.</source>
<translation>Der Wizard ist fertig.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="138"/>
<location filename="src/oraclewizard.cpp" line="226"/>
<source>You can now start using Cockatrice with the newly updated cards.</source>
<translation>Sie können nun Cockatrice mit den aktuellen Karten verwenden.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="139"/>
<location filename="src/oraclewizard.cpp" line="227"/>
<source>If the card databases don&apos;t reload automatically, restart the Cockatrice client.</source>
<translation>Falls die Datenbanken nicht automatisch neu geladen werden, starten Sie bitte Cockatrice neu.</translation>
</message>
@@ -315,73 +285,73 @@
<context>
<name>SaveSetsPage</name>
<message>
<location filename="src/pages.cpp" line="563"/>
<location filename="src/pages.cpp" line="638"/>
<location filename="src/oraclewizard.cpp" line="646"/>
<location filename="src/oraclewizard.cpp" line="720"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="src/pages.cpp" line="563"/>
<location filename="src/oraclewizard.cpp" line="646"/>
<source>No set has been imported.</source>
<translation>Es wurden keine Editionen importiert.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="574"/>
<location filename="src/oraclewizard.cpp" line="656"/>
<source>Sets imported</source>
<translation>Editionen wurden importiert</translation>
</message>
<message>
<location filename="src/pages.cpp" line="576"/>
<location filename="src/oraclewizard.cpp" line="658"/>
<source>A cockatrice database file of %1 MB has been downloaded.</source>
<translation>Eine Cockatrice-Datenbankdatei der Größe %1 MB wurde heruntergeladen.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="579"/>
<location filename="src/oraclewizard.cpp" line="661"/>
<source>The following sets have been found:</source>
<translation>Die folgenden Sets wurden gefunden:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="582"/>
<location filename="src/oraclewizard.cpp" line="664"/>
<source>Press &quot;Save&quot; to store the imported cards in the Cockatrice database.</source>
<translation>Drücken Sie &quot;Speichern&quot;, um die importierten Karten in der Datenbank zu speichern.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="583"/>
<location filename="src/oraclewizard.cpp" line="665"/>
<source>The card database will be saved at the following location:</source>
<translation>Die Kartendatenbank wird in folgendem Pfad gespeichert:</translation>
</message>
<message>
<location filename="src/pages.cpp" line="585"/>
<location filename="src/oraclewizard.cpp" line="667"/>
<source>Save to a custom path (not recommended)</source>
<translation>Speichere in benutzerdefiniertem Pfad (nicht empfohlen)</translation>
</message>
<message>
<location filename="src/pages.cpp" line="587"/>
<location filename="src/oraclewizard.cpp" line="669"/>
<source>&amp;Save</source>
<translation>&amp;Speichern</translation>
</message>
<message>
<location filename="src/pages.cpp" line="593"/>
<location filename="src/oraclewizard.cpp" line="675"/>
<source>Import finished: %1 cards.</source>
<translation>Importieren abgeschlossen: %1 Karten.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="596"/>
<location filename="src/oraclewizard.cpp" line="678"/>
<source>%1: %2 cards imported</source>
<translation>%1: %2 Karten importiert.</translation>
</message>
<message>
<location filename="src/pages.cpp" line="605"/>
<location filename="src/oraclewizard.cpp" line="687"/>
<source>Save card database</source>
<translation>Kartendatenbank speichern</translation>
</message>
<message>
<location filename="src/pages.cpp" line="606"/>
<location filename="src/oraclewizard.cpp" line="688"/>
<source>XML; card database (*.xml)</source>
<translation>XML; Kartendatenbank (*.xml)</translation>
</message>
<message>
<location filename="src/pages.cpp" line="638"/>
<location filename="src/oraclewizard.cpp" line="720"/>
<source>The file could not be saved to %1</source>
<translation>Die Datei konnte nicht gespeichert werden:
%1 </translation>
@@ -390,56 +360,34 @@
<context>
<name>SimpleDownloadFilePage</name>
<message>
<location filename="src/pagetemplates.cpp" line="72"/>
<source>Load %1 file</source>
<translation>Lade %1 Datei</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="82"/>
<source>%1 file (%1)</source>
<translation>%1 Datei (%1)</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="111"/>
<location filename="src/pagetemplates.cpp" line="129"/>
<location filename="src/pagetemplates.cpp" line="134"/>
<location filename="src/pagetemplates.cpp" line="168"/>
<location filename="src/pagetemplates.cpp" line="224"/>
<location filename="src/pagetemplates.cpp" line="73"/>
<location filename="src/pagetemplates.cpp" line="113"/>
<location filename="src/pagetemplates.cpp" line="169"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="111"/>
<location filename="src/pagetemplates.cpp" line="73"/>
<source>The provided URL is not valid: </source>
<translation>Die bereitgestellte URL ist nicht gültig:</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="115"/>
<location filename="src/pagetemplates.cpp" line="77"/>
<source>Downloading (0MB)</source>
<translation>Herunterladen (0MB)</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="129"/>
<source>Please choose a file.</source>
<translation>Bitte wähle eine Datei aus.</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="134"/>
<source>Cannot open file &apos;%1&apos;.</source>
<translation>Datei &apos;%1&apos; kann nicht geöffnet werden.</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="159"/>
<location filename="src/pagetemplates.cpp" line="104"/>
<source>Downloading (%1MB)</source>
<translation>Herunterladen (%1MB)</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="168"/>
<location filename="src/pagetemplates.cpp" line="113"/>
<source>Network error: %1.</source>
<translation>Netzwerkfehler: %1.</translation>
</message>
<message>
<location filename="src/pagetemplates.cpp" line="224"/>
<location filename="src/pagetemplates.cpp" line="169"/>
<source>The file could not be saved to %1</source>
<translation>Die Datei konnte nicht in %1 gespeichert werden</translation>
</message>
@@ -588,7 +536,7 @@
<context>
<name>i18n</name>
<message>
<location filename="src/oraclewizard.cpp" line="22"/>
<location filename="src/oraclewizard.cpp" line="58"/>
<source>English</source>
<translation>Deutsch (German)</translation>
</message>

View File

@@ -29,7 +29,7 @@
"react-final-form-listeners": "^1.0.3",
"react-i18next": "^12.0.0",
"react-redux": "^8.0.4",
"react-router-dom": "^6.2.2",
"react-router-dom": "^6.30.3",
"react-scripts": "5.0.1",
"react-virtualized-auto-sizer": "^1.0.6",
"react-window": "^1.8.6",
@@ -4233,11 +4233,11 @@
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
},
"node_modules/@remix-run/router": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz",
"integrity": "sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ==",
"version": "1.23.2",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz",
"integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==",
"engines": {
"node": ">=14"
"node": ">=14.0.0"
}
},
"node_modules/@rollup/plugin-babel": {
@@ -17113,29 +17113,29 @@
}
},
"node_modules/react-router": {
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.2.tgz",
"integrity": "sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==",
"version": "6.30.3",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz",
"integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==",
"dependencies": {
"@remix-run/router": "1.0.2"
"@remix-run/router": "1.23.2"
},
"engines": {
"node": ">=14"
"node": ">=14.0.0"
},
"peerDependencies": {
"react": ">=16.8"
}
},
"node_modules/react-router-dom": {
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.2.tgz",
"integrity": "sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==",
"version": "6.30.3",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz",
"integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==",
"dependencies": {
"@remix-run/router": "1.0.2",
"react-router": "6.4.2"
"@remix-run/router": "1.23.2",
"react-router": "6.30.3"
},
"engines": {
"node": ">=14"
"node": ">=14.0.0"
},
"peerDependencies": {
"react": ">=16.8",
@@ -23141,9 +23141,9 @@
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
},
"@remix-run/router": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz",
"integrity": "sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ=="
"version": "1.23.2",
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz",
"integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w=="
},
"@rollup/plugin-babel": {
"version": "5.3.1",
@@ -32382,20 +32382,20 @@
"integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A=="
},
"react-router": {
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.2.tgz",
"integrity": "sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==",
"version": "6.30.3",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz",
"integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==",
"requires": {
"@remix-run/router": "1.0.2"
"@remix-run/router": "1.23.2"
}
},
"react-router-dom": {
"version": "6.4.2",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.2.tgz",
"integrity": "sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==",
"version": "6.30.3",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz",
"integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==",
"requires": {
"@remix-run/router": "1.0.2",
"react-router": "6.4.2"
"@remix-run/router": "1.23.2",
"react-router": "6.30.3"
}
},
"react-scripts": {

View File

@@ -38,7 +38,7 @@
"react-final-form-listeners": "^1.0.3",
"react-i18next": "^12.0.0",
"react-redux": "^8.0.4",
"react-router-dom": "^6.2.2",
"react-router-dom": "^6.30.3",
"react-scripts": "5.0.1",
"react-virtualized-auto-sizer": "^1.0.6",
"react-window": "^1.8.6",