From 51797ec4e311fecd9d4c9ab097745df2fd88db14 Mon Sep 17 00:00:00 2001 From: Ivan Bochkarev Date: Wed, 16 Sep 2026 08:47:59 +0600 Subject: [PATCH 1/4] feat(vue): centralize PrimeVue theme via VueTools useTheme (#701 Part B) Resolve the active PrimeVue theme from the VueTools `vuetools.theme` system setting instead of hardcoding Aura in every manager entry. - Add `primevueTheme.js` helper: spreads `getActiveTheme()` and forces `darkModeSelector: 'none'` so manager chrome stays light. Works for both aura `{ theme: { preset } }` and modx `{ theme: ModxManagerTheme }`. - Migrate all 11 entries + main.js off the hardcoded Aura preset to the helper; externalize `@vuetools/useTheme` in vite.config.js. - Make `formStyles.js` runtime inject a no-op under the Modx preset (Modx owns control height/density); keep it for Aura. - Theme-aware CSS: alias `--ms3-accent-primary` to `--p-primary-color`, use `--p-modx-space-panel` (with fallbacks) for mt-3/mb-3, and widen select/multiselect filters to 100% in main.css. - Add `severity="success"` to primary Save buttons in dialog footers across order, settings, and catalog grids (fine on Aura too). - Tighten the VueTools import-map check in 3 manager controllers to also require `vuetools/theme`; bump VueTools resolver to 1.2.0-pl and update the `ms3_vuetools_required` lexicon (ru+en) to mention >= 1.2.0. --- assets/components/minishop3/css/mgr/main.css | 6 +++-- .../minishop3/controllers/manager.class.php | 4 ++- .../controllers/resource_create.class.php | 4 ++- .../controllers/resource_update.class.php | 4 ++- .../minishop3/lexicon/en/default.inc.php | 2 +- .../minishop3/lexicon/ru/default.inc.php | 2 +- vueManager/src/components/ActionsEditor.vue | 1 + .../src/components/CategoryOptionsTab.vue | 1 + vueManager/src/components/CustomersGrid.vue | 2 ++ vueManager/src/components/DeliveriesGrid.vue | 2 +- .../src/components/ExtraFieldsManager.vue | 1 + .../src/components/GridFieldsConfig.vue | 3 ++- vueManager/src/components/LinksGrid.vue | 2 +- vueManager/src/components/ModelFieldsGrid.vue | 4 +-- .../src/components/NotificationsGrid.vue | 2 +- .../src/components/OptionGroupsGrid.vue | 2 +- vueManager/src/components/OptionsGrid.vue | 2 +- vueManager/src/components/PaymentsGrid.vue | 2 +- vueManager/src/components/StatusesGrid.vue | 2 +- vueManager/src/components/VendorsGrid.vue | 2 +- .../order/OrderAddProductDialog.vue | 1 + .../components/order/OrderFormActionsBar.vue | 1 + .../src/components/order/OrderShipmentTab.vue | 1 + vueManager/src/entries/api-test.js | 10 +++---- vueManager/src/entries/category-options.js | 11 +++----- vueManager/src/entries/category-products.js | 10 +++---- vueManager/src/entries/customers.js | 10 +++---- vueManager/src/entries/help.js | 12 +++------ vueManager/src/entries/notifications.js | 10 +++---- vueManager/src/entries/order.js | 10 +++---- vueManager/src/entries/orders.js | 10 +++---- vueManager/src/entries/product-tabs.js | 10 +++---- vueManager/src/entries/settings.js | 10 +++---- vueManager/src/entries/utilities.js | 10 +++---- vueManager/src/main.js | 13 +++------ vueManager/src/scss/_variables.scss | 6 ++--- vueManager/src/scss/primevue.scss | 4 +-- vueManager/src/utils/formStyles.js | 7 +++++ vueManager/src/utils/primevueTheme.js | 27 +++++++++++++++++++ vueManager/vite.config.js | 1 + 40 files changed, 112 insertions(+), 112 deletions(-) create mode 100644 vueManager/src/utils/primevueTheme.js diff --git a/assets/components/minishop3/css/mgr/main.css b/assets/components/minishop3/css/mgr/main.css index 1aa2a2c09..501821e6e 100644 --- a/assets/components/minishop3/css/mgr/main.css +++ b/assets/components/minishop3/css/mgr/main.css @@ -494,6 +494,8 @@ a.x-menu-item .x-menu-item-text .icon { box-sizing: border-box !important; } -.p-select-filter { - width: 90% !important; +/* Select filter must fill IconField (was 90% — left a dead strip and misaligned search icon). */ +.p-select-overlay .p-select-filter, +.p-multiselect-overlay .p-multiselect-filter { + width: 100% !important; } diff --git a/core/components/minishop3/controllers/manager.class.php b/core/components/minishop3/controllers/manager.class.php index b1bf86746..e7610c581 100644 --- a/core/components/minishop3/controllers/manager.class.php +++ b/core/components/minishop3/controllers/manager.class.php @@ -118,7 +118,9 @@ protected function registerVueCoreCheck() if (importMap) { try { var mapContent = JSON.parse(importMap.textContent); - hasVueCore = mapContent.imports && mapContent.imports.vue; + hasVueCore = mapContent.imports + && mapContent.imports.vue + && mapContent.imports['vuetools/theme']; } catch (e) { hasVueCore = false; } diff --git a/core/components/minishop3/controllers/resource_create.class.php b/core/components/minishop3/controllers/resource_create.class.php index 58e2f90fa..1fedad858 100644 --- a/core/components/minishop3/controllers/resource_create.class.php +++ b/core/components/minishop3/controllers/resource_create.class.php @@ -94,7 +94,9 @@ protected function registerVueCoreCheck() if (importMap) { try { var mapContent = JSON.parse(importMap.textContent); - hasVueCore = mapContent.imports && mapContent.imports.vue; + hasVueCore = mapContent.imports + && mapContent.imports.vue + && mapContent.imports['vuetools/theme']; } catch (e) { hasVueCore = false; } diff --git a/core/components/minishop3/controllers/resource_update.class.php b/core/components/minishop3/controllers/resource_update.class.php index d7db2e535..4b6a0d3b3 100644 --- a/core/components/minishop3/controllers/resource_update.class.php +++ b/core/components/minishop3/controllers/resource_update.class.php @@ -98,7 +98,9 @@ protected function registerVueCoreCheck() if (importMap) { try { var mapContent = JSON.parse(importMap.textContent); - hasVueCore = mapContent.imports && mapContent.imports.vue; + hasVueCore = mapContent.imports + && mapContent.imports.vue + && mapContent.imports['vuetools/theme']; } catch (e) { hasVueCore = false; } diff --git a/core/components/minishop3/lexicon/en/default.inc.php b/core/components/minishop3/lexicon/en/default.inc.php index e6c65ed78..d2301f84e 100644 --- a/core/components/minishop3/lexicon/en/default.inc.php +++ b/core/components/minishop3/lexicon/en/default.inc.php @@ -294,7 +294,7 @@ $_lang['ms3_help_desc'] = 'Useful links and information'; $_lang['ms3_error'] = 'Error'; -$_lang['ms3_vuetools_required'] = 'VueTools package is required for MiniShop3. Please install it via Package Manager.'; +$_lang['ms3_vuetools_required'] = 'VueTools package (>= 1.2.0) is required for MiniShop3. Please install it via Package Manager.'; $_lang['ms3_mgr_order_recalc_invalid_mode'] = 'Invalid order cost recalculation mode.'; $_lang['ms3_mgr_order_recalc_manual_delivery_missing'] = 'Manual delivery cost (manual_delivery_cost) is required in manual mode.'; diff --git a/core/components/minishop3/lexicon/ru/default.inc.php b/core/components/minishop3/lexicon/ru/default.inc.php index 8791f7eaf..a1f2ef212 100644 --- a/core/components/minishop3/lexicon/ru/default.inc.php +++ b/core/components/minishop3/lexicon/ru/default.inc.php @@ -294,7 +294,7 @@ $_lang['ms3_help_desc'] = 'Полезные ссылки и информация'; $_lang['ms3_error'] = 'Ошибка'; -$_lang['ms3_vuetools_required'] = 'Для работы MiniShop3 требуется пакет VueTools. Установите его через Менеджер пакетов.'; +$_lang['ms3_vuetools_required'] = 'Для работы MiniShop3 требуется пакет VueTools (>= 1.2.0). Установите его через Менеджер пакетов.'; $_lang['ms3_mgr_order_recalc_invalid_mode'] = 'Недопустимый режим пересчёта стоимости заказа.'; $_lang['ms3_mgr_order_recalc_manual_delivery_missing'] = 'В режиме manual обязательно укажите manual_delivery_cost (стоимость доставки).'; diff --git a/vueManager/src/components/ActionsEditor.vue b/vueManager/src/components/ActionsEditor.vue index 04ad1726f..eef456c08 100644 --- a/vueManager/src/components/ActionsEditor.vue +++ b/vueManager/src/components/ActionsEditor.vue @@ -370,6 +370,7 @@ function closeDialog() {