Merge branch 'master' into build/bump-qt

This commit is contained in:
Bruno Alexandre Rosa 2026-02-10 13:37:03 -03:00 committed by GitHub
commit a6eee23852
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 440 additions and 463 deletions

View file

@ -31,7 +31,7 @@ jobs:
dot -V dot -V
- name: Install Doxygen - name: Install Doxygen
uses: ssciwr/doxygen-install@v1 uses: ssciwr/doxygen-install@v2
with: with:
version: "1.14.0" version: "1.14.0"

View file

@ -268,9 +268,6 @@ SettingsCache::SettingsCache()
picDownload = settings->value("personal/picturedownload", true).toBool(); picDownload = settings->value("personal/picturedownload", true).toBool();
showStatusBar = settings->value("personal/showStatusBar", false).toBool(); showStatusBar = settings->value("personal/showStatusBar", false).toBool();
mainWindowGeometry = settings->value("interface/main_window_geometry").toByteArray();
tokenDialogGeometry = settings->value("interface/token_dialog_geometry").toByteArray();
setsDialogGeometry = settings->value("interface/sets_dialog_geometry").toByteArray();
notificationsEnabled = settings->value("interface/notificationsenabled", true).toBool(); notificationsEnabled = settings->value("interface/notificationsenabled", true).toBool();
spectatorNotificationsEnabled = settings->value("interface/specnotificationsenabled", false).toBool(); spectatorNotificationsEnabled = settings->value("interface/specnotificationsenabled", false).toBool();
buddyConnectNotificationsEnabled = settings->value("interface/buddyconnectnotificationsenabled", true).toBool(); buddyConnectNotificationsEnabled = settings->value("interface/buddyconnectnotificationsenabled", true).toBool();
@ -280,7 +277,6 @@ SettingsCache::SettingsCache()
doNotDeleteArrowsInSubPhases = settings->value("interface/doNotDeleteArrowsInSubPhases", true).toBool(); doNotDeleteArrowsInSubPhases = settings->value("interface/doNotDeleteArrowsInSubPhases", true).toBool();
startingHandSize = settings->value("interface/startinghandsize", 7).toInt(); startingHandSize = settings->value("interface/startinghandsize", 7).toInt();
annotateTokens = settings->value("interface/annotatetokens", false).toBool(); annotateTokens = settings->value("interface/annotatetokens", false).toBool();
tabGameSplitterSizes = settings->value("interface/tabgame_splittersizes").toByteArray();
knownMissingFeatures = settings->value("interface/knownmissingfeatures", "").toString(); knownMissingFeatures = settings->value("interface/knownmissingfeatures", "").toString();
useTearOffMenus = settings->value("interface/usetearoffmenus", true).toBool(); useTearOffMenus = settings->value("interface/usetearoffmenus", true).toBool();
cardViewInitialRowsMax = settings->value("interface/cardViewInitialRowsMax", 14).toInt(); cardViewInitialRowsMax = settings->value("interface/cardViewInitialRowsMax", 14).toInt();
@ -713,12 +709,6 @@ void SettingsCache::setAnnotateTokens(QT_STATE_CHANGED_T _annotateTokens)
settings->setValue("interface/annotatetokens", annotateTokens); settings->setValue("interface/annotatetokens", annotateTokens);
} }
void SettingsCache::setTabGameSplitterSizes(const QByteArray &_tabGameSplitterSizes)
{
tabGameSplitterSizes = _tabGameSplitterSizes;
settings->setValue("interface/tabgame_splittersizes", tabGameSplitterSizes);
}
void SettingsCache::setShowShortcuts(QT_STATE_CHANGED_T _showShortcuts) void SettingsCache::setShowShortcuts(QT_STATE_CHANGED_T _showShortcuts)
{ {
showShortcuts = static_cast<bool>(_showShortcuts); showShortcuts = static_cast<bool>(_showShortcuts);
@ -1090,24 +1080,6 @@ void SettingsCache::setIgnoreUnregisteredUserMessages(QT_STATE_CHANGED_T _ignore
settings->setValue("chat/ignore_unregistered_messages", ignoreUnregisteredUserMessages); settings->setValue("chat/ignore_unregistered_messages", ignoreUnregisteredUserMessages);
} }
void SettingsCache::setMainWindowGeometry(const QByteArray &_mainWindowGeometry)
{
mainWindowGeometry = _mainWindowGeometry;
settings->setValue("interface/main_window_geometry", mainWindowGeometry);
}
void SettingsCache::setTokenDialogGeometry(const QByteArray &_tokenDialogGeometry)
{
tokenDialogGeometry = _tokenDialogGeometry;
settings->setValue("interface/token_dialog_geometry", tokenDialogGeometry);
}
void SettingsCache::setSetsDialogGeometry(const QByteArray &_setsDialogGeometry)
{
setsDialogGeometry = _setsDialogGeometry;
settings->setValue("interface/sets_dialog_geometry", setsDialogGeometry);
}
void SettingsCache::setPixmapCacheSize(const int _pixmapCacheSize) void SettingsCache::setPixmapCacheSize(const int _pixmapCacheSize)
{ {
pixmapCacheSize = _pixmapCacheSize; pixmapCacheSize = _pixmapCacheSize;

View file

@ -205,9 +205,6 @@ private:
DebugSettings *debugSettings; DebugSettings *debugSettings;
CardCounterSettings *cardCounterSettings; CardCounterSettings *cardCounterSettings;
QByteArray mainWindowGeometry;
QByteArray tokenDialogGeometry;
QByteArray setsDialogGeometry;
QString lang; QString lang;
QString deckPath, filtersPath, replaysPath, picsPath, redirectCachePath, customPicsPath, cardDatabasePath, QString deckPath, filtersPath, replaysPath, picsPath, redirectCachePath, customPicsPath, cardDatabasePath,
customCardDatabasePath, themesPath, spoilerDatabasePath, tokenDatabasePath, themeName, homeTabBackgroundSource; customCardDatabasePath, themesPath, spoilerDatabasePath, tokenDatabasePath, themeName, homeTabBackgroundSource;
@ -238,7 +235,6 @@ private:
bool doNotDeleteArrowsInSubPhases; bool doNotDeleteArrowsInSubPhases;
int startingHandSize; int startingHandSize;
bool annotateTokens; bool annotateTokens;
QByteArray tabGameSplitterSizes;
bool showShortcuts; bool showShortcuts;
bool showGameSelectorFilterToolbar; bool showGameSelectorFilterToolbar;
bool displayCardNames; bool displayCardNames;
@ -345,18 +341,6 @@ public:
QString getSettingsPath(); QString getSettingsPath();
[[nodiscard]] QString getCachePath() const; [[nodiscard]] QString getCachePath() const;
[[nodiscard]] QString getNetworkCachePath() const; [[nodiscard]] QString getNetworkCachePath() const;
[[nodiscard]] const QByteArray &getMainWindowGeometry() const
{
return mainWindowGeometry;
}
[[nodiscard]] const QByteArray &getTokenDialogGeometry() const
{
return tokenDialogGeometry;
}
[[nodiscard]] const QByteArray &getSetsDialogGeometry() const
{
return setsDialogGeometry;
}
[[nodiscard]] QString getLang() const [[nodiscard]] QString getLang() const
{ {
return lang; return lang;
@ -555,10 +539,6 @@ public:
{ {
return annotateTokens; return annotateTokens;
} }
[[nodiscard]] QByteArray getTabGameSplitterSizes() const
{
return tabGameSplitterSizes;
}
[[nodiscard]] bool getShowShortcuts() const [[nodiscard]] bool getShowShortcuts() const
{ {
return showShortcuts; return showShortcuts;
@ -995,9 +975,6 @@ public:
public slots: public slots:
void setDownloadSpoilerStatus(bool _spoilerStatus); void setDownloadSpoilerStatus(bool _spoilerStatus);
void setMainWindowGeometry(const QByteArray &_mainWindowGeometry);
void setTokenDialogGeometry(const QByteArray &_tokenDialog);
void setSetsDialogGeometry(const QByteArray &_setsDialog);
void setLang(const QString &_lang); void setLang(const QString &_lang);
void setShowTipsOnStartup(bool _showTipsOnStartup); void setShowTipsOnStartup(bool _showTipsOnStartup);
void setSeenTips(const QList<int> &_seenTips); void setSeenTips(const QList<int> &_seenTips);
@ -1034,7 +1011,6 @@ public slots:
void setDoNotDeleteArrowsInSubPhases(QT_STATE_CHANGED_T _doNotDeleteArrowsInSubPhases); void setDoNotDeleteArrowsInSubPhases(QT_STATE_CHANGED_T _doNotDeleteArrowsInSubPhases);
void setStartingHandSize(int _startingHandSize); void setStartingHandSize(int _startingHandSize);
void setAnnotateTokens(QT_STATE_CHANGED_T _annotateTokens); void setAnnotateTokens(QT_STATE_CHANGED_T _annotateTokens);
void setTabGameSplitterSizes(const QByteArray &_tabGameSplitterSizes);
void setShowShortcuts(QT_STATE_CHANGED_T _showShortcuts); void setShowShortcuts(QT_STATE_CHANGED_T _showShortcuts);
void setShowGameSelectorFilterToolbar(QT_STATE_CHANGED_T _showGameSelectorFilterToolbar); void setShowGameSelectorFilterToolbar(QT_STATE_CHANGED_T _showGameSelectorFilterToolbar);
void setDisplayCardNames(QT_STATE_CHANGED_T _displayCardNames); void setDisplayCardNames(QT_STATE_CHANGED_T _displayCardNames);

View file

@ -146,13 +146,13 @@ DlgCreateToken::DlgCreateToken(const QStringList &_predefinedTokens, QWidget *pa
setWindowTitle(tr("Create token")); setWindowTitle(tr("Create token"));
resize(600, 500); resize(600, 500);
restoreGeometry(SettingsCache::instance().getTokenDialogGeometry()); restoreGeometry(SettingsCache::instance().layouts().getTokenDialogGeometry());
} }
void DlgCreateToken::closeEvent(QCloseEvent *event) void DlgCreateToken::closeEvent(QCloseEvent *event)
{ {
event->accept(); event->accept();
SettingsCache::instance().setTokenDialogGeometry(saveGeometry()); SettingsCache::instance().layouts().setTokenDialogGeometry(saveGeometry());
} }
void DlgCreateToken::faceDownCheckBoxToggled(bool checked) void DlgCreateToken::faceDownCheckBoxToggled(bool checked)
@ -225,13 +225,13 @@ void DlgCreateToken::actChooseTokenFromDeck(bool checked)
void DlgCreateToken::actOk() void DlgCreateToken::actOk()
{ {
SettingsCache::instance().setTokenDialogGeometry(saveGeometry()); SettingsCache::instance().layouts().setTokenDialogGeometry(saveGeometry());
accept(); accept();
} }
void DlgCreateToken::actReject() void DlgCreateToken::actReject()
{ {
SettingsCache::instance().setTokenDialogGeometry(saveGeometry()); SettingsCache::instance().layouts().setTokenDialogGeometry(saveGeometry());
reject(); reject();
} }

View file

@ -189,11 +189,11 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent)
setWindowTitle(tr("Manage sets")); setWindowTitle(tr("Manage sets"));
setMinimumSize(800, 500); setMinimumSize(800, 500);
auto &geometry = SettingsCache::instance().getSetsDialogGeometry(); auto geometry = SettingsCache::instance().layouts().getSetsDialogGeometry();
if (!geometry.isEmpty()) { if (!geometry.isEmpty()) {
restoreGeometry(geometry); restoreGeometry(geometry);
} }
auto &headerState = SettingsCache::instance().layouts().getSetsDialogHeaderState(); auto headerState = SettingsCache::instance().layouts().getSetsDialogHeaderState();
if (!headerState.isEmpty()) { if (!headerState.isEmpty()) {
view->header()->restoreState(headerState); view->header()->restoreState(headerState);
view->header()->setSortIndicator(SORT_RESET, Qt::DescendingOrder); view->header()->setSortIndicator(SORT_RESET, Qt::DescendingOrder);
@ -209,7 +209,7 @@ WndSets::~WndSets()
void WndSets::closeEvent(QCloseEvent * /*ev*/) void WndSets::closeEvent(QCloseEvent * /*ev*/)
{ {
SettingsCache::instance().setSetsDialogGeometry(saveGeometry()); SettingsCache::instance().layouts().setSetsDialogGeometry(saveGeometry());
} }
void WndSets::saveHeaderState() void WndSets::saveHeaderState()

View file

@ -75,7 +75,7 @@ AbstractTabDeckEditor::AbstractTabDeckEditor(TabSupervisor *_tabSupervisor) : Ta
&AbstractTabDeckEditor::refreshShortcuts); &AbstractTabDeckEditor::refreshShortcuts);
} }
void AbstractTabDeckEditor::registerDockWidget(QMenu *_viewMenu, QDockWidget *widget) void AbstractTabDeckEditor::registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize)
{ {
QMenu *menu = _viewMenu->addMenu(QString()); QMenu *menu = _viewMenu->addMenu(QString());
@ -102,7 +102,7 @@ void AbstractTabDeckEditor::registerDockWidget(QMenu *_viewMenu, QDockWidget *wi
connect(filter, &VisibilityChangeListener::visibilityChanged, aVisible, connect(filter, &VisibilityChangeListener::visibilityChanged, aVisible,
[aVisible](bool visible) { aVisible->setChecked(visible); }); [aVisible](bool visible) { aVisible->setChecked(visible); });
dockToActions.insert(widget, {menu, aVisible, aFloating}); dockToActions.insert(widget, {menu, aVisible, aFloating, defaultSize});
} }
/** /**

View file

@ -274,13 +274,14 @@ protected:
QMenu *menu; ///< The menu containing the actions QMenu *menu; ///< The menu containing the actions
QAction *aVisible; ///< The menu action that toggles visibility QAction *aVisible; ///< The menu action that toggles visibility
QAction *aFloating; ///< The menu action that toggles floating QAction *aFloating; ///< The menu action that toggles floating
QSize defaultSize; ///< The default size of the dock
}; };
/** /**
* @brief registers a QDockWidget as a managed dock widget. Creates the associated actions and menu, adds them to * @brief registers a QDockWidget as a managed dock widget. Creates the associated actions and menu, adds them to
* the viewMenu, and connects those actions to the tab's slots. * the viewMenu, and connects those actions to the tab's slots.
*/ */
void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget); void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize);
/** @brief Confirms deck open action based on settings and modified state. /** @brief Confirms deck open action based on settings and modified state.
* @param openInSameTabIfBlank Whether to reuse same tab if blank. * @param openInSameTabIfBlank Whether to reuse same tab if blank.

View file

@ -54,11 +54,11 @@ void TabDeckEditor::createMenus()
viewMenu = new QMenu(this); viewMenu = new QMenu(this);
registerDockWidget(viewMenu, cardDatabaseDockWidget); registerDockWidget(viewMenu, cardDatabaseDockWidget, {500, 500});
registerDockWidget(viewMenu, cardInfoDockWidget); registerDockWidget(viewMenu, cardInfoDockWidget, {250, 500});
registerDockWidget(viewMenu, deckDockWidget); registerDockWidget(viewMenu, deckDockWidget, {250, 360});
registerDockWidget(viewMenu, filterDockWidget); registerDockWidget(viewMenu, filterDockWidget, {250, 250});
registerDockWidget(viewMenu, printingSelectorDockWidget); registerDockWidget(viewMenu, printingSelectorDockWidget, {525, 250});
connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this, connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this,
[this](bool enabled) { dockToActions[printingSelectorDockWidget].menu->setEnabled(!enabled); }); [this](bool enabled) { dockToActions[printingSelectorDockWidget].menu->setEnabled(!enabled); });
@ -136,7 +136,7 @@ void TabDeckEditor::loadLayout()
{ {
LayoutsSettings &layouts = SettingsCache::instance().layouts(); LayoutsSettings &layouts = SettingsCache::instance().layouts();
auto &layoutState = layouts.getDeckEditorLayoutState(); auto layoutState = layouts.getDeckEditorLayoutState();
if (layoutState.isNull()) if (layoutState.isNull())
restartLayout(); restartLayout();
else { else {
@ -144,20 +144,14 @@ void TabDeckEditor::loadLayout()
restoreGeometry(layouts.getDeckEditorGeometry()); restoreGeometry(layouts.getDeckEditorGeometry());
} }
cardDatabaseDockWidget->setMinimumSize(layouts.getDeckEditorCardDatabaseSize()); for (auto it = dockToActions.constKeyValueBegin(); it != dockToActions.constKeyValueEnd(); ++it) {
cardDatabaseDockWidget->setMaximumSize(layouts.getDeckEditorCardDatabaseSize()); auto dockWidget = it->first;
auto actions = it->second;
cardInfoDockWidget->setMinimumSize(layouts.getDeckEditorCardSize()); QSize size = layouts.getDeckEditorWidgetSize(dockWidget->objectName(), actions.defaultSize);
cardInfoDockWidget->setMaximumSize(layouts.getDeckEditorCardSize()); dockWidget->setMinimumSize(size);
dockWidget->setMaximumSize(size);
filterDockWidget->setMinimumSize(layouts.getDeckEditorFilterSize()); }
filterDockWidget->setMaximumSize(layouts.getDeckEditorFilterSize());
deckDockWidget->setMinimumSize(layouts.getDeckEditorDeckSize());
deckDockWidget->setMaximumSize(layouts.getDeckEditorDeckSize());
printingSelectorDockWidget->setMinimumSize(layouts.getDeckEditorPrintingSelectorSize());
printingSelectorDockWidget->setMaximumSize(layouts.getDeckEditorPrintingSelectorSize());
QTimer::singleShot(100, this, &TabDeckEditor::freeDocksSize); QTimer::singleShot(100, this, &TabDeckEditor::freeDocksSize);
} }
@ -190,12 +184,9 @@ void TabDeckEditor::restartLayout()
/** @brief Frees dock sizes to allow flexible resizing. */ /** @brief Frees dock sizes to allow flexible resizing. */
void TabDeckEditor::freeDocksSize() void TabDeckEditor::freeDocksSize()
{ {
const QSize minSize(100, 100);
const QSize maxSize(5000, 5000);
for (auto dockWidget : dockToActions.keys()) { for (auto dockWidget : dockToActions.keys()) {
dockWidget->setMinimumSize(minSize); dockWidget->setMinimumSize(100, 100);
dockWidget->setMaximumSize(maxSize); dockWidget->setMaximumSize(5000, 5000);
} }
} }
@ -211,11 +202,10 @@ bool TabDeckEditor::eventFilter(QObject *o, QEvent *e)
LayoutsSettings &layouts = SettingsCache::instance().layouts(); LayoutsSettings &layouts = SettingsCache::instance().layouts();
layouts.setDeckEditorLayoutState(saveState()); layouts.setDeckEditorLayoutState(saveState());
layouts.setDeckEditorGeometry(saveGeometry()); layouts.setDeckEditorGeometry(saveGeometry());
layouts.setDeckEditorCardDatabaseSize(cardDatabaseDockWidget->size());
layouts.setDeckEditorCardSize(cardInfoDockWidget->size()); for (auto dockWidget : dockToActions.keys()) {
layouts.setDeckEditorFilterSize(filterDockWidget->size()); layouts.setDeckEditorWidgetSize(dockWidget->objectName(), dockWidget->size());
layouts.setDeckEditorDeckSize(deckDockWidget->size()); }
layouts.setDeckEditorPrintingSelectorSize(printingSelectorDockWidget->size());
} }
return false; return false;
} }

View file

@ -1034,12 +1034,12 @@ void TabGame::createViewMenuItems()
{ {
viewMenu = new QMenu(this); viewMenu = new QMenu(this);
registerDockWidget(viewMenu, cardInfoDock); registerDockWidget(viewMenu, cardInfoDock, {250, 360});
registerDockWidget(viewMenu, messageLayoutDock); registerDockWidget(viewMenu, messageLayoutDock, {250, 200});
registerDockWidget(viewMenu, playerListDock); registerDockWidget(viewMenu, playerListDock, {250, 50});
if (replayDock) { if (replayDock) {
registerDockWidget(viewMenu, replayDock); registerDockWidget(viewMenu, replayDock, {900, 100});
} }
viewMenu->addSeparator(); viewMenu->addSeparator();
@ -1051,7 +1051,7 @@ void TabGame::createViewMenuItems()
addTabMenu(viewMenu); addTabMenu(viewMenu);
} }
void TabGame::registerDockWidget(QMenu *_viewMenu, QDockWidget *widget) void TabGame::registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize)
{ {
QMenu *menu = _viewMenu->addMenu(QString()); QMenu *menu = _viewMenu->addMenu(QString());
@ -1078,7 +1078,7 @@ void TabGame::registerDockWidget(QMenu *_viewMenu, QDockWidget *widget)
connect(filter, &VisibilityChangeListener::visibilityChanged, aVisible, connect(filter, &VisibilityChangeListener::visibilityChanged, aVisible,
[aVisible](bool visible) { aVisible->setChecked(visible); }); [aVisible](bool visible) { aVisible->setChecked(visible); });
dockToActions.insert(widget, {menu, aVisible, aFloating}); dockToActions.insert(widget, {menu, aVisible, aFloating, defaultSize});
} }
void TabGame::loadLayout() void TabGame::loadLayout()
@ -1088,24 +1088,27 @@ void TabGame::loadLayout()
restoreGeometry(layouts.getReplayPlayAreaGeometry()); restoreGeometry(layouts.getReplayPlayAreaGeometry());
restoreState(layouts.getReplayPlayAreaLayoutState()); restoreState(layouts.getReplayPlayAreaLayoutState());
cardInfoDock->setMinimumSize(layouts.getReplayCardInfoSize()); for (auto it = dockToActions.constKeyValueBegin(); it != dockToActions.constKeyValueEnd(); ++it) {
cardInfoDock->setMaximumSize(layouts.getReplayCardInfoSize()); auto dockWidget = it->first;
messageLayoutDock->setMinimumSize(layouts.getReplayMessageLayoutSize()); auto actions = it->second;
messageLayoutDock->setMaximumSize(layouts.getReplayMessageLayoutSize());
playerListDock->setMinimumSize(layouts.getReplayPlayerListSize()); QSize size = layouts.getReplayPlayAreaWidgetSize(dockWidget->objectName(), actions.defaultSize);
playerListDock->setMaximumSize(layouts.getReplayPlayerListSize()); dockWidget->setMinimumSize(size);
replayDock->setMinimumSize(layouts.getReplayReplaySize()); dockWidget->setMaximumSize(size);
replayDock->setMaximumSize(layouts.getReplayReplaySize()); }
} else { } else {
restoreGeometry(layouts.getGamePlayAreaGeometry()); restoreGeometry(layouts.getGamePlayAreaGeometry());
restoreState(layouts.getGamePlayAreaLayoutState()); restoreState(layouts.getGamePlayAreaLayoutState());
cardInfoDock->setMinimumSize(layouts.getGameCardInfoSize()); for (auto it = dockToActions.constKeyValueBegin(); it != dockToActions.constKeyValueEnd(); ++it) {
cardInfoDock->setMaximumSize(layouts.getGameCardInfoSize()); auto dockWidget = it->first;
messageLayoutDock->setMinimumSize(layouts.getGameMessageLayoutSize()); auto actions = it->second;
messageLayoutDock->setMaximumSize(layouts.getGameMessageLayoutSize());
playerListDock->setMinimumSize(layouts.getGamePlayerListSize()); QSize size = layouts.getGamePlayAreaWidgetSize(dockWidget->objectName(), actions.defaultSize);
playerListDock->setMaximumSize(layouts.getGamePlayerListSize()); dockWidget->setMinimumSize(size);
dockWidget->setMaximumSize(size);
}
} }
QTimer::singleShot(100, this, &TabGame::freeDocksSize); QTimer::singleShot(100, this, &TabGame::freeDocksSize);
@ -1113,18 +1116,9 @@ void TabGame::loadLayout()
void TabGame::freeDocksSize() void TabGame::freeDocksSize()
{ {
cardInfoDock->setMinimumSize(100, 100); for (auto dockWidget : dockToActions.keys()) {
cardInfoDock->setMaximumSize(5000, 5000); dockWidget->setMinimumSize(100, 100);
dockWidget->setMaximumSize(5000, 5000);
messageLayoutDock->setMinimumSize(100, 100);
messageLayoutDock->setMaximumSize(5000, 5000);
playerListDock->setMinimumSize(100, 100);
playerListDock->setMaximumSize(5000, 5000);
if (replayDock) {
replayDock->setMinimumSize(100, 100);
replayDock->setMaximumSize(5000, 5000);
} }
} }
@ -1342,16 +1336,17 @@ void TabGame::hideEvent(QHideEvent *event)
if (replayDock) { if (replayDock) {
layouts.setReplayPlayAreaState(saveState()); layouts.setReplayPlayAreaState(saveState());
layouts.setReplayPlayAreaGeometry(saveGeometry()); layouts.setReplayPlayAreaGeometry(saveGeometry());
layouts.setReplayCardInfoSize(cardInfoDock->size());
layouts.setReplayMessageLayoutSize(messageLayoutDock->size()); for (auto dockWidget : dockToActions.keys()) {
layouts.setReplayPlayerListSize(playerListDock->size()); layouts.setReplayPlayAreaWidgetSize(dockWidget->objectName(), dockWidget->size());
layouts.setReplayReplaySize(replayDock->size()); }
} else { } else {
layouts.setGamePlayAreaState(saveState()); layouts.setGamePlayAreaState(saveState());
layouts.setGamePlayAreaGeometry(saveGeometry()); layouts.setGamePlayAreaGeometry(saveGeometry());
layouts.setGameCardInfoSize(cardInfoDock->size());
layouts.setGameMessageLayoutSize(messageLayoutDock->size()); for (auto dockWidget : dockToActions.keys()) {
layouts.setGamePlayerListSize(playerListDock->size()); layouts.setGamePlayAreaWidgetSize(dockWidget->objectName(), dockWidget->size());
}
} }
Tab::hideEvent(event); Tab::hideEvent(event);

View file

@ -94,6 +94,7 @@ private:
QMenu *menu; QMenu *menu;
QAction *aVisible; QAction *aVisible;
QAction *aFloating; QAction *aFloating;
QSize defaultSize;
}; };
QMap<QDockWidget *, DockActions> dockToActions; QMap<QDockWidget *, DockActions> dockToActions;
@ -117,7 +118,7 @@ private:
void createMenuItems(); void createMenuItems();
void createReplayMenuItems(); void createReplayMenuItems();
void createViewMenuItems(); void createViewMenuItems();
void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget); void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize);
void createCardInfoDock(bool bReplay = false); void createCardInfoDock(bool bReplay = false);
void createPlayerListDock(bool bReplay = false); void createPlayerListDock(bool bReplay = false);
void createMessageDock(bool bReplay = false); void createMessageDock(bool bReplay = false);

View file

@ -97,10 +97,10 @@ void TabDeckEditorVisual::createMenus()
viewMenu = new QMenu(this); viewMenu = new QMenu(this);
registerDockWidget(viewMenu, cardInfoDockWidget); registerDockWidget(viewMenu, cardInfoDockWidget, {250, 500});
registerDockWidget(viewMenu, deckDockWidget); registerDockWidget(viewMenu, deckDockWidget, {250, 360});
registerDockWidget(viewMenu, filterDockWidget); registerDockWidget(viewMenu, filterDockWidget, {250, 250});
registerDockWidget(viewMenu, printingSelectorDockWidget); registerDockWidget(viewMenu, printingSelectorDockWidget, {525, 250});
viewMenu->addSeparator(); viewMenu->addSeparator();
@ -249,17 +249,10 @@ void TabDeckEditorVisual::showPrintingSelector()
/** @brief Set size restrictions for free floating dock widgets. */ /** @brief Set size restrictions for free floating dock widgets. */
void TabDeckEditorVisual::freeDocksSize() void TabDeckEditorVisual::freeDocksSize()
{ {
deckDockWidget->setMinimumSize(100, 100); for (auto dockWidget : dockToActions.keys()) {
deckDockWidget->setMaximumSize(5000, 5000); dockWidget->setMinimumSize(100, 100);
dockWidget->setMaximumSize(5000, 5000);
cardInfoDockWidget->setMinimumSize(100, 100); }
cardInfoDockWidget->setMaximumSize(5000, 5000);
filterDockWidget->setMinimumSize(100, 100);
filterDockWidget->setMaximumSize(5000, 5000);
printingSelectorDockWidget->setMinimumSize(100, 100);
printingSelectorDockWidget->setMaximumSize(5000, 5000);
} }
/** @brief Refreshes keyboard shortcuts for this tab from settings. */ /** @brief Refreshes keyboard shortcuts for this tab from settings. */
@ -273,25 +266,22 @@ void TabDeckEditorVisual::refreshShortcuts()
void TabDeckEditorVisual::loadLayout() void TabDeckEditorVisual::loadLayout()
{ {
LayoutsSettings &layouts = SettingsCache::instance().layouts(); LayoutsSettings &layouts = SettingsCache::instance().layouts();
auto &layoutState = layouts.getDeckEditorLayoutState(); auto layoutState = layouts.getVisualDeckEditorLayoutState();
if (layoutState.isNull()) { if (layoutState.isNull()) {
restartLayout(); restartLayout();
} else { } else {
restoreState(layoutState); restoreState(layoutState);
restoreGeometry(layouts.getDeckEditorGeometry()); restoreGeometry(layouts.getVisualDeckEditorGeometry());
} }
cardInfoDockWidget->setMinimumSize(layouts.getDeckEditorCardSize()); for (auto it = dockToActions.constKeyValueBegin(); it != dockToActions.constKeyValueEnd(); ++it) {
cardInfoDockWidget->setMaximumSize(layouts.getDeckEditorCardSize()); auto dockWidget = it->first;
auto actions = it->second;
filterDockWidget->setMinimumSize(layouts.getDeckEditorFilterSize()); QSize size = layouts.getVisualDeckEditorWidgetSize(dockWidget->objectName(), actions.defaultSize);
filterDockWidget->setMaximumSize(layouts.getDeckEditorFilterSize()); dockWidget->setMinimumSize(size);
dockWidget->setMaximumSize(size);
deckDockWidget->setMinimumSize(layouts.getDeckEditorDeckSize()); }
deckDockWidget->setMaximumSize(layouts.getDeckEditorDeckSize());
printingSelectorDockWidget->setMinimumSize(layouts.getDeckEditorPrintingSelectorSize());
printingSelectorDockWidget->setMaximumSize(layouts.getDeckEditorPrintingSelectorSize());
QTimer::singleShot(100, this, &TabDeckEditorVisual::freeDocksSize); QTimer::singleShot(100, this, &TabDeckEditorVisual::freeDocksSize);
} }
@ -354,12 +344,12 @@ bool TabDeckEditorVisual::eventFilter(QObject *o, QEvent *e)
{ {
if (o == this && e->type() == QEvent::Hide) { if (o == this && e->type() == QEvent::Hide) {
LayoutsSettings &layouts = SettingsCache::instance().layouts(); LayoutsSettings &layouts = SettingsCache::instance().layouts();
layouts.setDeckEditorLayoutState(saveState()); layouts.setVisualDeckEditorLayoutState(saveState());
layouts.setDeckEditorGeometry(saveGeometry()); layouts.setVisualDeckEditorGeometry(saveGeometry());
layouts.setDeckEditorCardSize(cardInfoDockWidget->size());
layouts.setDeckEditorFilterSize(filterDockWidget->size()); for (auto dockWidget : dockToActions.keys()) {
layouts.setDeckEditorDeckSize(deckDockWidget->size()); layouts.setVisualDeckEditorWidgetSize(dockWidget->objectName(), dockWidget->size());
layouts.setDeckEditorPrintingSelectorSize(printingSelectorDockWidget->size()); }
} }
return false; return false;
} }

View file

@ -7,6 +7,8 @@
VisualDeckDisplayOptionsWidget::VisualDeckDisplayOptionsWidget(QWidget *parent) : QWidget(parent) VisualDeckDisplayOptionsWidget::VisualDeckDisplayOptionsWidget(QWidget *parent) : QWidget(parent)
{ {
groupAndSortLayout = new QHBoxLayout(this); groupAndSortLayout = new QHBoxLayout(this);
groupAndSortLayout->setContentsMargins(0, 0, 0, 0);
groupAndSortLayout->setSpacing(3);
groupAndSortLayout->setAlignment(Qt::AlignLeft); groupAndSortLayout->setAlignment(Qt::AlignLeft);
this->setLayout(groupAndSortLayout); this->setLayout(groupAndSortLayout);

View file

@ -161,6 +161,7 @@ void VisualDeckEditorWidget::initializeDisplayOptionsAndSearchWidget()
displayOptionsAndSearch = new QWidget(this); displayOptionsAndSearch = new QWidget(this);
displayOptionsAndSearchLayout = new QHBoxLayout(displayOptionsAndSearch); displayOptionsAndSearchLayout = new QHBoxLayout(displayOptionsAndSearch);
displayOptionsAndSearchLayout->setContentsMargins(0, 0, 0, 0);
displayOptionsAndSearchLayout->setAlignment(Qt::AlignLeft); displayOptionsAndSearchLayout->setAlignment(Qt::AlignLeft);
displayOptionsAndSearch->setLayout(displayOptionsAndSearchLayout); displayOptionsAndSearch->setLayout(displayOptionsAndSearchLayout);

View file

@ -879,7 +879,7 @@ MainWindow::MainWindow(QWidget *parent)
retranslateUi(); retranslateUi();
if (!restoreGeometry(SettingsCache::instance().getMainWindowGeometry())) { if (!restoreGeometry(SettingsCache::instance().layouts().getMainWindowGeometry())) {
setWindowState(Qt::WindowMaximized); setWindowState(Qt::WindowMaximized);
} }
aFullScreen->setChecked(static_cast<bool>(windowState() & Qt::WindowFullScreen)); aFullScreen->setChecked(static_cast<bool>(windowState() & Qt::WindowFullScreen));
@ -1098,7 +1098,7 @@ void MainWindow::closeEvent(QCloseEvent *event)
tip->close(); tip->close();
event->accept(); event->accept();
SettingsCache::instance().setMainWindowGeometry(saveGeometry()); SettingsCache::instance().layouts().setMainWindowGeometry(saveGeometry());
tabSupervisor->deleteLater(); tabSupervisor->deleteLater();
} }

View file

@ -340,6 +340,9 @@ bool DeckListModel::removeRows(int row, int count, const QModelIndex &parent)
emitRecursiveUpdates(parent); emitRecursiveUpdates(parent);
} }
deckList->refreshDeckHash();
emit deckHashChanged();
return true; return true;
} }
@ -448,8 +451,6 @@ QModelIndex DeckListModel::addCard(const ExactCard &card, const QString &zoneNam
cardNode->setCardSetShortName(cardSetName); cardNode->setCardSetShortName(cardSetName);
cardNode->setCardCollectorNumber(printingInfo.getProperty("num")); cardNode->setCardCollectorNumber(printingInfo.getProperty("num"));
cardNode->setCardProviderId(printingInfo.getProperty("uuid")); cardNode->setCardProviderId(printingInfo.getProperty("uuid"));
deckList->refreshDeckHash();
emit deckHashChanged();
// Emit dataChanged for the amount column since we modified it // Emit dataChanged for the amount column since we modified it
QModelIndex cardIndex = nodeToIndex(cardNode); QModelIndex cardIndex = nodeToIndex(cardNode);
QModelIndex amountIndex = cardIndex.sibling(cardIndex.row(), DeckListModelColumns::CARD_AMOUNT); QModelIndex amountIndex = cardIndex.sibling(cardIndex.row(), DeckListModelColumns::CARD_AMOUNT);
@ -458,6 +459,10 @@ QModelIndex DeckListModel::addCard(const ExactCard &card, const QString &zoneNam
sort(lastKnownColumn, lastKnownOrder); sort(lastKnownColumn, lastKnownOrder);
refreshCardFormatLegalities(); refreshCardFormatLegalities();
emitRecursiveUpdates(parentIndex); emitRecursiveUpdates(parentIndex);
deckList->refreshDeckHash();
emit deckHashChanged();
auto index = nodeToIndex(cardNode); auto index = nodeToIndex(cardNode);
if (cardNodeAdded) { if (cardNodeAdded) {

View file

@ -1,218 +1,193 @@
#include "layouts_settings.h" #include "layouts_settings.h"
const static QString STATE_PROP = "state";
const static QString GEOMETRY_PROP = "geometry";
const static QString SIZE_PROP = "widgetSize";
const static QString GROUP_MAIN_WINDOW = "mainWindow";
const static QString GROUP_DECK_EDITOR = "deckEditor";
const static QString GROUP_VISUAL_DECK_EDITOR = "visualDeckEditor";
const static QString GROUP_DECK_EDITOR_DB = "deckEditorDb";
const static QString GROUP_SETS_DIALOG = "setsDialog";
const static QString GROUP_TOKEN_DIALOG = "tokenDialog";
const static QString GROUP_GAME_PLAY_AREA = "gamePlayArea";
const static QString GROUP_REPLAY_PLAY_AREA = "replayPlayArea";
LayoutsSettings::LayoutsSettings(const QString &settingPath, QObject *parent) LayoutsSettings::LayoutsSettings(const QString &settingPath, QObject *parent)
: SettingsManager(settingPath + "layouts.ini", "layouts", QString(), parent) : SettingsManager(settingPath + "layouts.ini", QString(), QString(), parent)
{ {
} }
const QByteArray LayoutsSettings::getDeckEditorLayoutState() void LayoutsSettings::setMainWindowGeometry(const QByteArray &value)
{ {
return getValue("layouts/deckEditor_state").toByteArray(); setValue(value, GEOMETRY_PROP, GROUP_MAIN_WINDOW);
}
QByteArray LayoutsSettings::getMainWindowGeometry()
{
return getValue(GEOMETRY_PROP, GROUP_MAIN_WINDOW).toByteArray();
}
QByteArray LayoutsSettings::getDeckEditorLayoutState()
{
return getValue(STATE_PROP, GROUP_DECK_EDITOR).toByteArray();
} }
void LayoutsSettings::setDeckEditorLayoutState(const QByteArray &value) void LayoutsSettings::setDeckEditorLayoutState(const QByteArray &value)
{ {
setValue(value, "layouts/deckEditor_state"); setValue(value, STATE_PROP, GROUP_DECK_EDITOR);
} }
const QByteArray LayoutsSettings::getDeckEditorGeometry() QByteArray LayoutsSettings::getDeckEditorGeometry()
{ {
return getValue("layouts/deckEditor_geometry").toByteArray(); return getValue(GEOMETRY_PROP, GROUP_DECK_EDITOR).toByteArray();
} }
void LayoutsSettings::setDeckEditorGeometry(const QByteArray &value) void LayoutsSettings::setDeckEditorGeometry(const QByteArray &value)
{ {
setValue(value, "layouts/deckEditor_geometry"); setValue(value, GEOMETRY_PROP, GROUP_DECK_EDITOR);
} }
QSize LayoutsSettings::getDeckEditorCardDatabaseSize() void LayoutsSettings::setDeckEditorWidgetSize(const QString &widgetName, const QSize &value)
{ {
QVariant previous = getValue("layouts/deckEditor_CardDatabaseSize"); setValue(value, widgetName, GROUP_DECK_EDITOR, SIZE_PROP);
return previous == QVariant() ? QSize(500, 500) : previous.toSize();
} }
void LayoutsSettings::setDeckEditorCardDatabaseSize(const QSize &value) QSize LayoutsSettings::getDeckEditorWidgetSize(const QString &widgetName, const QSize &defaultValue)
{ {
setValue(value, "layouts/deckEditor_CardDatabaseSize"); QVariant previous = getValue(widgetName, GROUP_DECK_EDITOR, SIZE_PROP);
return previous == QVariant() ? defaultValue : previous.toSize();
} }
QSize LayoutsSettings::getDeckEditorCardSize() QByteArray LayoutsSettings::getVisualDeckEditorLayoutState()
{ {
QVariant previous = getValue("layouts/deckEditor_CardSize"); return getValue(STATE_PROP, GROUP_VISUAL_DECK_EDITOR).toByteArray();
return previous == QVariant() ? QSize(250, 500) : previous.toSize();
} }
void LayoutsSettings::setDeckEditorCardSize(const QSize &value) void LayoutsSettings::setVisualDeckEditorLayoutState(const QByteArray &value)
{ {
setValue(value, "layouts/deckEditor_CardSize"); setValue(value, STATE_PROP, GROUP_VISUAL_DECK_EDITOR);
} }
QSize LayoutsSettings::getDeckEditorDeckSize() QByteArray LayoutsSettings::getVisualDeckEditorGeometry()
{ {
QVariant previous = getValue("layouts/deckEditor_DeckSize"); return getValue(GEOMETRY_PROP, GROUP_VISUAL_DECK_EDITOR).toByteArray();
return previous == QVariant() ? QSize(250, 360) : previous.toSize();
} }
void LayoutsSettings::setDeckEditorDeckSize(const QSize &value) void LayoutsSettings::setVisualDeckEditorGeometry(const QByteArray &value)
{ {
setValue(value, "layouts/deckEditor_DeckSize"); setValue(value, GEOMETRY_PROP, GROUP_VISUAL_DECK_EDITOR);
} }
QSize LayoutsSettings::getDeckEditorPrintingSelectorSize() void LayoutsSettings::setVisualDeckEditorWidgetSize(const QString &widgetName, const QSize &value)
{ {
QVariant previous = getValue("layouts/deckEditor_PrintingSelectorSize"); setValue(value, widgetName, GROUP_VISUAL_DECK_EDITOR, SIZE_PROP);
return previous == QVariant() ? QSize(525, 250) : previous.toSize();
} }
void LayoutsSettings::setDeckEditorPrintingSelectorSize(const QSize &value) QSize LayoutsSettings::getVisualDeckEditorWidgetSize(const QString &widgetName, const QSize &defaultValue)
{ {
setValue(value, "layouts/deckEditor_PrintingSelectorSize"); QVariant previous = getValue(widgetName, GROUP_VISUAL_DECK_EDITOR, SIZE_PROP);
return previous == QVariant() ? defaultValue : previous.toSize();
} }
QSize LayoutsSettings::getDeckEditorFilterSize() QByteArray LayoutsSettings::getDeckEditorDbHeaderState()
{ {
QVariant previous = getValue("layouts/deckEditor_FilterSize"); return getValue(STATE_PROP, GROUP_DECK_EDITOR_DB, "header").toByteArray();
return previous == QVariant() ? QSize(250, 250) : previous.toSize();
}
void LayoutsSettings::setDeckEditorFilterSize(const QSize &value)
{
setValue(value, "layouts/deckEditor_FilterSize");
}
const QByteArray LayoutsSettings::getDeckEditorDbHeaderState()
{
return getValue("layouts/deckEditorDbHeader_state").toByteArray();
} }
void LayoutsSettings::setDeckEditorDbHeaderState(const QByteArray &value) void LayoutsSettings::setDeckEditorDbHeaderState(const QByteArray &value)
{ {
setValue(value, "layouts/deckEditorDbHeader_state"); setValue(value, STATE_PROP, GROUP_DECK_EDITOR_DB, "header");
} }
const QByteArray LayoutsSettings::getSetsDialogHeaderState() QByteArray LayoutsSettings::getSetsDialogHeaderState()
{ {
return getValue("layouts/setsDialogHeader_state").toByteArray(); return getValue(STATE_PROP, GROUP_SETS_DIALOG, "header").toByteArray();
} }
void LayoutsSettings::setSetsDialogHeaderState(const QByteArray &value) void LayoutsSettings::setSetsDialogHeaderState(const QByteArray &value)
{ {
setValue(value, "layouts/setsDialogHeader_state"); setValue(value, STATE_PROP, GROUP_SETS_DIALOG, "header");
}
void LayoutsSettings::setSetsDialogGeometry(const QByteArray &value)
{
setValue(value, GEOMETRY_PROP, GROUP_SETS_DIALOG);
}
QByteArray LayoutsSettings::getSetsDialogGeometry()
{
return getValue(GEOMETRY_PROP, GROUP_SETS_DIALOG).toByteArray();
}
void LayoutsSettings::setTokenDialogGeometry(const QByteArray &value)
{
setValue(value, GEOMETRY_PROP, GROUP_TOKEN_DIALOG);
}
QByteArray LayoutsSettings::getTokenDialogGeometry()
{
return getValue(GEOMETRY_PROP, GROUP_TOKEN_DIALOG).toByteArray();
} }
void LayoutsSettings::setGamePlayAreaGeometry(const QByteArray &value) void LayoutsSettings::setGamePlayAreaGeometry(const QByteArray &value)
{ {
setValue(value, "layouts/gameplayarea_geometry"); setValue(value, GEOMETRY_PROP, GROUP_GAME_PLAY_AREA);
} }
void LayoutsSettings::setGamePlayAreaState(const QByteArray &value) void LayoutsSettings::setGamePlayAreaState(const QByteArray &value)
{ {
setValue(value, "layouts/gameplayarea_state"); setValue(value, STATE_PROP, GROUP_GAME_PLAY_AREA);
} }
const QByteArray LayoutsSettings::getGamePlayAreaLayoutState() QByteArray LayoutsSettings::getGamePlayAreaLayoutState()
{ {
return getValue("layouts/gameplayarea_state").toByteArray(); return getValue(STATE_PROP, GROUP_GAME_PLAY_AREA).toByteArray();
} }
const QByteArray LayoutsSettings::getGamePlayAreaGeometry() QByteArray LayoutsSettings::getGamePlayAreaGeometry()
{ {
return getValue("layouts/gameplayarea_geometry").toByteArray(); return getValue(GEOMETRY_PROP, GROUP_GAME_PLAY_AREA).toByteArray();
} }
const QSize LayoutsSettings::getGameCardInfoSize() void LayoutsSettings::setGamePlayAreaWidgetSize(const QString &widgetName, const QSize &value)
{ {
QVariant previous = getValue("layouts/gameplayarea_CardInfoSize"); setValue(value, widgetName, GROUP_GAME_PLAY_AREA, SIZE_PROP);
return previous == QVariant() ? QSize(250, 360) : previous.toSize();
} }
void LayoutsSettings::setGameCardInfoSize(const QSize &value) QSize LayoutsSettings::getGamePlayAreaWidgetSize(const QString &widgetName, const QSize &defaultValue)
{ {
setValue(value, "layouts/gameplayarea_CardInfoSize"); QVariant previous = getValue(widgetName, GROUP_GAME_PLAY_AREA, SIZE_PROP);
} return previous == QVariant() ? defaultValue : previous.toSize();
const QSize LayoutsSettings::getGameMessageLayoutSize()
{
QVariant previous = getValue("layouts/gameplayarea_MessageLayoutSize");
return previous == QVariant() ? QSize(250, 250) : previous.toSize();
}
void LayoutsSettings::setGameMessageLayoutSize(const QSize &value)
{
setValue(value, "layouts/gameplayarea_MessageLayoutSize");
}
const QSize LayoutsSettings::getGamePlayerListSize()
{
QVariant previous = getValue("layouts/gameplayarea_PlayerListSize");
return previous == QVariant() ? QSize(250, 50) : previous.toSize();
}
void LayoutsSettings::setGamePlayerListSize(const QSize &value)
{
setValue(value, "layouts/gameplayarea_PlayerListSize");
} }
void LayoutsSettings::setReplayPlayAreaGeometry(const QByteArray &value) void LayoutsSettings::setReplayPlayAreaGeometry(const QByteArray &value)
{ {
setValue(value, "layouts/replayplayarea_geometry"); setValue(value, GEOMETRY_PROP, GROUP_REPLAY_PLAY_AREA);
} }
void LayoutsSettings::setReplayPlayAreaState(const QByteArray &value) void LayoutsSettings::setReplayPlayAreaState(const QByteArray &value)
{ {
setValue(value, "layouts/replayplayarea_state"); setValue(value, STATE_PROP, GROUP_REPLAY_PLAY_AREA);
} }
const QByteArray LayoutsSettings::getReplayPlayAreaLayoutState() QByteArray LayoutsSettings::getReplayPlayAreaLayoutState()
{ {
return getValue("layouts/replayplayarea_state").toByteArray(); return getValue(STATE_PROP, GROUP_REPLAY_PLAY_AREA).toByteArray();
} }
const QByteArray LayoutsSettings::getReplayPlayAreaGeometry() QByteArray LayoutsSettings::getReplayPlayAreaGeometry()
{ {
return getValue("layouts/replayplayarea_geometry").toByteArray(); return getValue(GEOMETRY_PROP, GROUP_REPLAY_PLAY_AREA).toByteArray();
} }
const QSize LayoutsSettings::getReplayCardInfoSize() void LayoutsSettings::setReplayPlayAreaWidgetSize(const QString &widgetName, const QSize &value)
{ {
QVariant previous = getValue("layouts/replayplayarea_CardInfoSize"); setValue(value, widgetName, GROUP_REPLAY_PLAY_AREA, SIZE_PROP);
return previous == QVariant() ? QSize(250, 360) : previous.toSize();
} }
void LayoutsSettings::setReplayCardInfoSize(const QSize &value) QSize LayoutsSettings::getReplayPlayAreaWidgetSize(const QString &widgetName, const QSize &defaultValue)
{ {
setValue(value, "layouts/replayplayarea_CardInfoSize"); QVariant previous = getValue(widgetName, GROUP_REPLAY_PLAY_AREA, SIZE_PROP);
} return previous == QVariant() ? defaultValue : previous.toSize();
const QSize LayoutsSettings::getReplayMessageLayoutSize()
{
QVariant previous = getValue("layouts/replayplayarea_MessageLayoutSize");
return previous == QVariant() ? QSize(250, 200) : previous.toSize();
}
void LayoutsSettings::setReplayMessageLayoutSize(const QSize &value)
{
setValue(value, "layouts/replayplayarea_MessageLayoutSize");
}
const QSize LayoutsSettings::getReplayPlayerListSize()
{
QVariant previous = getValue("layouts/replayplayarea_PlayerListSize");
return previous == QVariant() ? QSize(250, 50) : previous.toSize();
}
void LayoutsSettings::setReplayPlayerListSize(const QSize &value)
{
setValue(value, "layouts/replayplayarea_PlayerListSize");
}
const QSize LayoutsSettings::getReplayReplaySize()
{
QVariant previous = getValue("layouts/replayplayarea_ReplaySize");
return previous == QVariant() ? QSize(900, 100) : previous.toSize();
}
void LayoutsSettings::setReplayReplaySize(const QSize &value)
{
setValue(value, "layouts/replayplayarea_ReplaySize");
} }

View file

@ -17,51 +17,51 @@ class LayoutsSettings : public SettingsManager
friend class SettingsCache; friend class SettingsCache;
public: public:
void setMainWindowGeometry(const QByteArray &value);
void setDeckEditorLayoutState(const QByteArray &value); void setDeckEditorLayoutState(const QByteArray &value);
void setDeckEditorGeometry(const QByteArray &value); void setDeckEditorGeometry(const QByteArray &value);
void setDeckEditorCardDatabaseSize(const QSize &value); void setDeckEditorWidgetSize(const QString &widgetName, const QSize &value);
void setDeckEditorCardSize(const QSize &value);
void setDeckEditorDeckSize(const QSize &value); void setVisualDeckEditorLayoutState(const QByteArray &value);
void setDeckEditorPrintingSelectorSize(const QSize &value); void setVisualDeckEditorGeometry(const QByteArray &value);
void setDeckEditorFilterSize(const QSize &value); void setVisualDeckEditorWidgetSize(const QString &widgetName, const QSize &value);
void setDeckEditorDbHeaderState(const QByteArray &value); void setDeckEditorDbHeaderState(const QByteArray &value);
void setSetsDialogHeaderState(const QByteArray &value); void setSetsDialogHeaderState(const QByteArray &value);
void setSetsDialogGeometry(const QByteArray &value);
void setTokenDialogGeometry(const QByteArray &value);
void setGamePlayAreaGeometry(const QByteArray &value); void setGamePlayAreaGeometry(const QByteArray &value);
void setGamePlayAreaState(const QByteArray &value); void setGamePlayAreaState(const QByteArray &value);
void setGameCardInfoSize(const QSize &value); void setGamePlayAreaWidgetSize(const QString &widgetName, const QSize &value);
void setGameMessageLayoutSize(const QSize &value);
void setGamePlayerListSize(const QSize &value);
void setReplayPlayAreaGeometry(const QByteArray &value); void setReplayPlayAreaGeometry(const QByteArray &value);
void setReplayPlayAreaState(const QByteArray &value); void setReplayPlayAreaState(const QByteArray &value);
void setReplayCardInfoSize(const QSize &value); void setReplayPlayAreaWidgetSize(const QString &widgetName, const QSize &value);
void setReplayMessageLayoutSize(const QSize &value);
void setReplayPlayerListSize(const QSize &value);
void setReplayReplaySize(const QSize &value);
const QByteArray getDeckEditorLayoutState(); QByteArray getMainWindowGeometry();
const QByteArray getDeckEditorGeometry();
QSize getDeckEditorCardDatabaseSize();
QSize getDeckEditorCardSize();
QSize getDeckEditorDeckSize();
QSize getDeckEditorPrintingSelectorSize();
QSize getDeckEditorFilterSize();
const QByteArray getDeckEditorDbHeaderState();
const QByteArray getSetsDialogHeaderState();
const QByteArray getGamePlayAreaLayoutState(); QByteArray getDeckEditorLayoutState();
const QByteArray getGamePlayAreaGeometry(); QByteArray getDeckEditorGeometry();
const QSize getGameCardInfoSize(); QSize getDeckEditorWidgetSize(const QString &widgetName, const QSize &defaultValue = {});
const QSize getGameMessageLayoutSize();
const QSize getGamePlayerListSize();
const QByteArray getReplayPlayAreaLayoutState(); QByteArray getVisualDeckEditorLayoutState();
const QByteArray getReplayPlayAreaGeometry(); QByteArray getVisualDeckEditorGeometry();
const QSize getReplayCardInfoSize(); QSize getVisualDeckEditorWidgetSize(const QString &widgetName, const QSize &defaultValue = {});
const QSize getReplayMessageLayoutSize();
const QSize getReplayPlayerListSize(); QByteArray getDeckEditorDbHeaderState();
const QSize getReplayReplaySize(); QByteArray getSetsDialogHeaderState();
QByteArray getSetsDialogGeometry();
QByteArray getTokenDialogGeometry();
QByteArray getGamePlayAreaLayoutState();
QByteArray getGamePlayAreaGeometry();
QSize getGamePlayAreaWidgetSize(const QString &widgetName, const QSize &defaultValue = {});
QByteArray getReplayPlayAreaLayoutState();
QByteArray getReplayPlayAreaGeometry();
QSize getReplayPlayAreaWidgetSize(const QString &widgetName, const QSize &defaultValue = {});
signals: signals:
public slots: public slots:

View file

@ -1,6 +1,5 @@
#include "oracleimporter.h" #include "oracleimporter.h"
#include "client/settings/cache_settings.h"
#include "libcockatrice/interfaces/noop_card_preference_provider.h" #include "libcockatrice/interfaces/noop_card_preference_provider.h"
#include "libcockatrice/interfaces/noop_card_set_priority_controller.h" #include "libcockatrice/interfaces/noop_card_set_priority_controller.h"
#include "parsehelpers.h" #include "parsehelpers.h"

View file

@ -21,7 +21,14 @@ OracleWizard::OracleWizard(QWidget *parent) : QWizard(parent)
// define a dummy context that will be used where needed // define a dummy context that will be used where needed
QString dummy = QT_TRANSLATE_NOOP("i18n", "English"); QString dummy = QT_TRANSLATE_NOOP("i18n", "English");
settings = new QSettings(SettingsCache::instance().getSettingsPath() + "global.ini", QSettings::IniFormat, this); QString oracleSettingsFile = SettingsCache::instance().getSettingsPath() + "oracle.ini";
settings = new QSettings(oracleSettingsFile, QSettings::IniFormat, this);
// We moved the oracle-specific settings from global.ini to a separate oracle.ini after 2.10
if (!QFile::exists(oracleSettingsFile)) {
migrateOracleSettings();
}
connect(&SettingsCache::instance(), &SettingsCache::langChanged, this, &OracleWizard::updateLanguage); connect(&SettingsCache::instance(), &SettingsCache::langChanged, this, &OracleWizard::updateLanguage);
importer = new OracleImporter(this); importer = new OracleImporter(this);
@ -50,6 +57,26 @@ OracleWizard::OracleWizard(QWidget *parent) : QWizard(parent)
retranslateUi(); retranslateUi();
} }
/**
* Migrates the oracle-specific settings from global.ini to oracle.ini
*/
void OracleWizard::migrateOracleSettings()
{
QString filePath = SettingsCache::instance().getSettingsPath() + "global.ini";
auto globalSettings = QSettings(filePath, QSettings::IniFormat, this);
auto tryMigrateValue = [this, &globalSettings](const QString &name) {
QVariant variant = globalSettings.value(name);
if (variant.isValid()) {
settings->setValue(name, variant.toString());
}
};
tryMigrateValue("allsetsurl");
tryMigrateValue("tokensurl");
tryMigrateValue("spoilersurl");
}
void OracleWizard::updateLanguage() void OracleWizard::updateLanguage()
{ {
qApp->removeTranslator(translator); qApp->removeTranslator(translator);

View file

@ -75,6 +75,8 @@ private:
QString cardSourceUrl; QString cardSourceUrl;
QString cardSourceVersion; QString cardSourceVersion;
void migrateOracleSettings();
protected: protected:
void changeEvent(QEvent *event) override; void changeEvent(QEvent *event) override;
}; };

View file

@ -172,7 +172,7 @@
<message> <message>
<location filename="src/pages.cpp" line="726"/> <location filename="src/pages.cpp" line="726"/>
<source>spoiler</source> <source>spoiler</source>
<translation type="unfinished"/> <translation>spoiler</translation>
</message> </message>
<message> <message>
<location filename="src/pages.cpp" line="731"/> <location filename="src/pages.cpp" line="731"/>
@ -192,7 +192,7 @@
<message> <message>
<location filename="src/pages.cpp" line="735"/> <location filename="src/pages.cpp" line="735"/>
<source>Local file:</source> <source>Local file:</source>
<translation type="unfinished"/> <translation>Fichier local:</translation>
</message> </message>
<message> <message>
<location filename="src/pages.cpp" line="736"/> <location filename="src/pages.cpp" line="736"/>
@ -202,7 +202,7 @@
<message> <message>
<location filename="src/pages.cpp" line="737"/> <location filename="src/pages.cpp" line="737"/>
<source>Choose file...</source> <source>Choose file...</source>
<translation type="unfinished"/> <translation>Choisissez un fichier...</translation>
</message> </message>
<message> <message>
<location filename="src/pages.cpp" line="739"/> <location filename="src/pages.cpp" line="739"/>
@ -230,7 +230,7 @@
<message> <message>
<location filename="src/pages.cpp" line="681"/> <location filename="src/pages.cpp" line="681"/>
<source>tokens</source> <source>tokens</source>
<translation type="unfinished"/> <translation>jetons</translation>
</message> </message>
<message> <message>
<location filename="src/pages.cpp" line="686"/> <location filename="src/pages.cpp" line="686"/>
@ -250,7 +250,7 @@
<message> <message>
<location filename="src/pages.cpp" line="690"/> <location filename="src/pages.cpp" line="690"/>
<source>Local file:</source> <source>Local file:</source>
<translation type="unfinished"/> <translation>Ficher local:</translation>
</message> </message>
<message> <message>
<location filename="src/pages.cpp" line="691"/> <location filename="src/pages.cpp" line="691"/>
@ -260,7 +260,7 @@
<message> <message>
<location filename="src/pages.cpp" line="692"/> <location filename="src/pages.cpp" line="692"/>
<source>Choose file...</source> <source>Choose file...</source>
<translation type="unfinished"/> <translation>Choisissez un ficher...</translation>
</message> </message>
<message> <message>
<location filename="src/pages.cpp" line="694"/> <location filename="src/pages.cpp" line="694"/>
@ -391,12 +391,12 @@
<message> <message>
<location filename="src/pagetemplates.cpp" line="72"/> <location filename="src/pagetemplates.cpp" line="72"/>
<source>Load %1 file</source> <source>Load %1 file</source>
<translation type="unfinished"/> <translation>Chargez le fichier %1</translation>
</message> </message>
<message> <message>
<location filename="src/pagetemplates.cpp" line="82"/> <location filename="src/pagetemplates.cpp" line="82"/>
<source>%1 file (%1)</source> <source>%1 file (%1)</source>
<translation type="unfinished"/> <translation>fichier %1 (%1)</translation>
</message> </message>
<message> <message>
<location filename="src/pagetemplates.cpp" line="111"/> <location filename="src/pagetemplates.cpp" line="111"/>
@ -420,12 +420,12 @@
<message> <message>
<location filename="src/pagetemplates.cpp" line="129"/> <location filename="src/pagetemplates.cpp" line="129"/>
<source>Please choose a file.</source> <source>Please choose a file.</source>
<translation type="unfinished"/> <translation>Merci de choisir un fichier.</translation>
</message> </message>
<message> <message>
<location filename="src/pagetemplates.cpp" line="134"/> <location filename="src/pagetemplates.cpp" line="134"/>
<source>Cannot open file &apos;%1&apos;.</source> <source>Cannot open file &apos;%1&apos;.</source>
<translation type="unfinished"/> <translation>Le fichier &apos;%1&apos; ne peut pas être ouvert.</translation>
</message> </message>
<message> <message>
<location filename="src/pagetemplates.cpp" line="159"/> <location filename="src/pagetemplates.cpp" line="159"/>

View file

@ -4866,9 +4866,9 @@
} }
}, },
"node_modules/@types/estree": { "node_modules/@types/estree": {
"version": "1.0.7", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
}, },
"node_modules/@types/express": { "node_modules/@types/express": {
"version": "4.17.14", "version": "4.17.14",
@ -5641,9 +5641,9 @@
} }
}, },
"node_modules/acorn": { "node_modules/acorn": {
"version": "8.14.1", "version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@ -5671,6 +5671,17 @@
"node": ">=0.4.0" "node": ">=0.4.0"
} }
}, },
"node_modules/acorn-import-phases": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
"integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
"engines": {
"node": ">=10.13.0"
},
"peerDependencies": {
"acorn": "^8.14.0"
}
},
"node_modules/acorn-jsx": { "node_modules/acorn-jsx": {
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@ -6344,6 +6355,14 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
}, },
"node_modules/baseline-browser-mapping": {
"version": "2.9.19",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
"integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
"bin": {
"baseline-browser-mapping": "dist/cli.js"
}
},
"node_modules/batch": { "node_modules/batch": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@ -6481,9 +6500,9 @@
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
}, },
"node_modules/browserslist": { "node_modules/browserslist": {
"version": "4.24.5", "version": "4.28.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
"integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -6499,10 +6518,11 @@
} }
], ],
"dependencies": { "dependencies": {
"caniuse-lite": "^1.0.30001716", "baseline-browser-mapping": "^2.9.0",
"electron-to-chromium": "^1.5.149", "caniuse-lite": "^1.0.30001759",
"node-releases": "^2.0.19", "electron-to-chromium": "^1.5.263",
"update-browserslist-db": "^1.1.3" "node-releases": "^2.0.27",
"update-browserslist-db": "^1.2.0"
}, },
"bin": { "bin": {
"browserslist": "cli.js" "browserslist": "cli.js"
@ -6609,9 +6629,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001718", "version": "1.0.30001769",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz",
"integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -7849,9 +7869,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.5.155", "version": "1.5.286",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
"integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==" "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="
}, },
"node_modules/emittery": { "node_modules/emittery": {
"version": "0.8.1", "version": "0.8.1",
@ -7886,12 +7906,12 @@
} }
}, },
"node_modules/enhanced-resolve": { "node_modules/enhanced-resolve": {
"version": "5.18.1", "version": "5.19.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
"integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.4", "graceful-fs": "^4.2.4",
"tapable": "^2.2.0" "tapable": "^2.3.0"
}, },
"engines": { "engines": {
"node": ">=10.13.0" "node": ">=10.13.0"
@ -8002,9 +8022,9 @@
} }
}, },
"node_modules/es-module-lexer": { "node_modules/es-module-lexer": {
"version": "1.7.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
"integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="
}, },
"node_modules/es-shim-unscopables": { "node_modules/es-shim-unscopables": {
"version": "1.0.0", "version": "1.0.0",
@ -14383,11 +14403,15 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
}, },
"node_modules/loader-runner": { "node_modules/loader-runner": {
"version": "4.3.0", "version": "4.3.1",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==",
"engines": { "engines": {
"node": ">=6.11.5" "node": ">=6.11.5"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
} }
}, },
"node_modules/loader-utils": { "node_modules/loader-utils": {
@ -14815,9 +14839,9 @@
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="
}, },
"node_modules/node-releases": { "node_modules/node-releases": {
"version": "2.0.19", "version": "2.0.27",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="
}, },
"node_modules/normalize-path": { "node_modules/normalize-path": {
"version": "3.0.0", "version": "3.0.0",
@ -18747,11 +18771,15 @@
} }
}, },
"node_modules/tapable": { "node_modules/tapable": {
"version": "2.2.1", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
"engines": { "engines": {
"node": ">=6" "node": ">=6"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
} }
}, },
"node_modules/temp-dir": { "node_modules/temp-dir": {
@ -18823,9 +18851,9 @@
} }
}, },
"node_modules/terser-webpack-plugin": { "node_modules/terser-webpack-plugin": {
"version": "5.3.14", "version": "5.3.16",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
"integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
"dependencies": { "dependencies": {
"@jridgewell/trace-mapping": "^0.3.25", "@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5", "jest-worker": "^27.4.5",
@ -19208,9 +19236,9 @@
} }
}, },
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.1.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
"integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -19367,9 +19395,9 @@
} }
}, },
"node_modules/watchpack": { "node_modules/watchpack": {
"version": "2.4.4", "version": "2.5.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
"integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
"dependencies": { "dependencies": {
"glob-to-regexp": "^0.4.1", "glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2" "graceful-fs": "^4.1.2"
@ -19395,34 +19423,35 @@
} }
}, },
"node_modules/webpack": { "node_modules/webpack": {
"version": "5.99.9", "version": "5.105.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
"integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
"dependencies": { "dependencies": {
"@types/eslint-scope": "^3.7.7", "@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.6", "@types/estree": "^1.0.8",
"@types/json-schema": "^7.0.15", "@types/json-schema": "^7.0.15",
"@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1",
"acorn": "^8.14.0", "acorn": "^8.15.0",
"browserslist": "^4.24.0", "acorn-import-phases": "^1.0.3",
"browserslist": "^4.28.1",
"chrome-trace-event": "^1.0.2", "chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.17.1", "enhanced-resolve": "^5.19.0",
"es-module-lexer": "^1.2.1", "es-module-lexer": "^2.0.0",
"eslint-scope": "5.1.1", "eslint-scope": "5.1.1",
"events": "^3.2.0", "events": "^3.2.0",
"glob-to-regexp": "^0.4.1", "glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11", "graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1", "json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0", "loader-runner": "^4.3.1",
"mime-types": "^2.1.27", "mime-types": "^2.1.27",
"neo-async": "^2.6.2", "neo-async": "^2.6.2",
"schema-utils": "^4.3.2", "schema-utils": "^4.3.3",
"tapable": "^2.1.1", "tapable": "^2.3.0",
"terser-webpack-plugin": "^5.3.11", "terser-webpack-plugin": "^5.3.16",
"watchpack": "^2.4.1", "watchpack": "^2.5.1",
"webpack-sources": "^3.2.3" "webpack-sources": "^3.3.3"
}, },
"bin": { "bin": {
"webpack": "bin/webpack.js" "webpack": "bin/webpack.js"
@ -19670,9 +19699,9 @@
} }
}, },
"node_modules/webpack-sources": { "node_modules/webpack-sources": {
"version": "3.2.3", "version": "3.3.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
"engines": { "engines": {
"node": ">=10.13.0" "node": ">=10.13.0"
} }
@ -19709,9 +19738,9 @@
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
}, },
"node_modules/webpack/node_modules/schema-utils": { "node_modules/webpack/node_modules/schema-utils": {
"version": "4.3.2", "version": "4.3.3",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
"integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"dependencies": { "dependencies": {
"@types/json-schema": "^7.0.9", "@types/json-schema": "^7.0.9",
"ajv": "^8.9.0", "ajv": "^8.9.0",
@ -23591,9 +23620,9 @@
} }
}, },
"@types/estree": { "@types/estree": {
"version": "1.0.7", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
}, },
"@types/express": { "@types/express": {
"version": "4.17.14", "version": "4.17.14",
@ -24245,9 +24274,9 @@
} }
}, },
"acorn": { "acorn": {
"version": "8.14.1", "version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==" "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="
}, },
"acorn-globals": { "acorn-globals": {
"version": "6.0.0", "version": "6.0.0",
@ -24265,6 +24294,11 @@
} }
} }
}, },
"acorn-import-phases": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
"integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ=="
},
"acorn-jsx": { "acorn-jsx": {
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@ -24752,6 +24786,11 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
}, },
"baseline-browser-mapping": {
"version": "2.9.19",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
"integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg=="
},
"batch": { "batch": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@ -24869,14 +24908,15 @@
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
}, },
"browserslist": { "browserslist": {
"version": "4.24.5", "version": "4.28.1",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
"integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"requires": { "requires": {
"caniuse-lite": "^1.0.30001716", "baseline-browser-mapping": "^2.9.0",
"electron-to-chromium": "^1.5.149", "caniuse-lite": "^1.0.30001759",
"node-releases": "^2.0.19", "electron-to-chromium": "^1.5.263",
"update-browserslist-db": "^1.1.3" "node-releases": "^2.0.27",
"update-browserslist-db": "^1.2.0"
} }
}, },
"bser": { "bser": {
@ -24950,9 +24990,9 @@
} }
}, },
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30001718", "version": "1.0.30001769",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz",
"integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==" "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg=="
}, },
"case-sensitive-paths-webpack-plugin": { "case-sensitive-paths-webpack-plugin": {
"version": "2.4.0", "version": "2.4.0",
@ -25843,9 +25883,9 @@
} }
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.5.155", "version": "1.5.286",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
"integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==" "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="
}, },
"emittery": { "emittery": {
"version": "0.8.1", "version": "0.8.1",
@ -25868,12 +25908,12 @@
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="
}, },
"enhanced-resolve": { "enhanced-resolve": {
"version": "5.18.1", "version": "5.19.0",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
"integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
"requires": { "requires": {
"graceful-fs": "^4.2.4", "graceful-fs": "^4.2.4",
"tapable": "^2.2.0" "tapable": "^2.3.0"
} }
}, },
"entities": { "entities": {
@ -25963,9 +26003,9 @@
} }
}, },
"es-module-lexer": { "es-module-lexer": {
"version": "1.7.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
"integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="
}, },
"es-shim-unscopables": { "es-shim-unscopables": {
"version": "1.0.0", "version": "1.0.0",
@ -30636,9 +30676,9 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
}, },
"loader-runner": { "loader-runner": {
"version": "4.3.0", "version": "4.3.1",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q=="
}, },
"loader-utils": { "loader-utils": {
"version": "2.0.4", "version": "2.0.4",
@ -30953,9 +30993,9 @@
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="
}, },
"node-releases": { "node-releases": {
"version": "2.0.19", "version": "2.0.27",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="
}, },
"normalize-path": { "normalize-path": {
"version": "3.0.0", "version": "3.0.0",
@ -33582,9 +33622,9 @@
} }
}, },
"tapable": { "tapable": {
"version": "2.2.1", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg=="
}, },
"temp-dir": { "temp-dir": {
"version": "2.0.0", "version": "2.0.0",
@ -33637,9 +33677,9 @@
} }
}, },
"terser-webpack-plugin": { "terser-webpack-plugin": {
"version": "5.3.14", "version": "5.3.16",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
"integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
"requires": { "requires": {
"@jridgewell/trace-mapping": "^0.3.25", "@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5", "jest-worker": "^27.4.5",
@ -33910,9 +33950,9 @@
"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
}, },
"update-browserslist-db": { "update-browserslist-db": {
"version": "1.1.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
"integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
"requires": { "requires": {
"escalade": "^3.2.0", "escalade": "^3.2.0",
"picocolors": "^1.1.1" "picocolors": "^1.1.1"
@ -34023,9 +34063,9 @@
} }
}, },
"watchpack": { "watchpack": {
"version": "2.4.4", "version": "2.5.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
"integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
"requires": { "requires": {
"glob-to-regexp": "^0.4.1", "glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2" "graceful-fs": "^4.1.2"
@ -34045,34 +34085,35 @@
"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
}, },
"webpack": { "webpack": {
"version": "5.99.9", "version": "5.105.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
"integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
"requires": { "requires": {
"@types/eslint-scope": "^3.7.7", "@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.6", "@types/estree": "^1.0.8",
"@types/json-schema": "^7.0.15", "@types/json-schema": "^7.0.15",
"@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1",
"acorn": "^8.14.0", "acorn": "^8.15.0",
"browserslist": "^4.24.0", "acorn-import-phases": "^1.0.3",
"browserslist": "^4.28.1",
"chrome-trace-event": "^1.0.2", "chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.17.1", "enhanced-resolve": "^5.19.0",
"es-module-lexer": "^1.2.1", "es-module-lexer": "^2.0.0",
"eslint-scope": "5.1.1", "eslint-scope": "5.1.1",
"events": "^3.2.0", "events": "^3.2.0",
"glob-to-regexp": "^0.4.1", "glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11", "graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1", "json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0", "loader-runner": "^4.3.1",
"mime-types": "^2.1.27", "mime-types": "^2.1.27",
"neo-async": "^2.6.2", "neo-async": "^2.6.2",
"schema-utils": "^4.3.2", "schema-utils": "^4.3.3",
"tapable": "^2.1.1", "tapable": "^2.3.0",
"terser-webpack-plugin": "^5.3.11", "terser-webpack-plugin": "^5.3.16",
"watchpack": "^2.4.1", "watchpack": "^2.5.1",
"webpack-sources": "^3.2.3" "webpack-sources": "^3.3.3"
}, },
"dependencies": { "dependencies": {
"ajv": { "ajv": {
@ -34100,9 +34141,9 @@
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
}, },
"schema-utils": { "schema-utils": {
"version": "4.3.2", "version": "4.3.3",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
"integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"requires": { "requires": {
"@types/json-schema": "^7.0.9", "@types/json-schema": "^7.0.9",
"ajv": "^8.9.0", "ajv": "^8.9.0",
@ -34265,9 +34306,9 @@
} }
}, },
"webpack-sources": { "webpack-sources": {
"version": "3.2.3", "version": "3.3.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg=="
}, },
"websocket-driver": { "websocket-driver": {
"version": "0.7.4", "version": "0.7.4",