Changelog
Version 1.0.0-beta.4
April 16, 2026
- Fixed GraphQL coercion errors on save: JS client still sent removed
autoPublish/publicationTitlefields toSaveBreezeThemeEditorValuesafter they were dropped from the schema in beta.3 — closes #15. - Fixed
StoreManagerInterfaceregression introduced during css-var shim cleanup: dependency was accidentally made nullable again, silently breaking thestores → websites → defaultscope inheritance chain. - Removed
css_varbackward-compat shims (breaking): all installed Breeze themes usepropertyexclusively. Removed fromCssVariableBuilder,AbstractConfigResolver,PaletteProvider,PaletteResolver,SavePaletteValue,SaveBreezeThemeEditorPaletteValueInputGraphQL schema, and JS panel handlers (settings-editor.js,css-preview-manager.js). - Removed dead GraphQL input fields:
autoPublish/publicationTitlefromSaveBreezeThemeEditorValuesInputandnotifyUsersfromPublishBreezeThemeEditorInput— never read by any resolver. - Removed 10 speculative Collection query-builder methods (
Value,Status,Changelog) — all access goes through SearchCriteria API. - Eliminated
window.breezeThemeEditorConfigglobal: split into two AMD closure singletons —config-manager.js(static readonly config) andscope-manager.js(runtime scope/theme state). 14 JS files migrated. - Added
ResolverAclGuardrailTest— security guardrail enforcing all 22 GraphQL resolvers implementBreezeResolverInterface; addedSECURITY NOTEtoAclAuthorization::beforeResolve()explaining the silent-bypass risk. - Extracted
CssGenerator::EMPTY_CSS_OUTPUTconstant andhasRealCssContent()static method — replaced 4 hardcoded:root {}\nliterals across 4 files. - Extracted
StatusCode::draftUserId()/draftUserIdForSave()static helpers — removed 7+ inline ternary duplications across resolvers and services. - Extracted
PublishService::applySnapshot()private helper and unifiedsaveChangelog/saveChangelogFromOldinto a single method. - Extracted
ValueRepository::toRow(),AdminUserLoader::buildUserData(),ConfigProvider::mergeById()private helpers to eliminate code duplication. - Added per-request memoisation to
ThemeResolver::loadTheme()— eliminates redundant DB queries ingetThemeInfo,hasParentTheme,getParentThemeId,buildThemeHierarchy. - Removed empty
FrontendPageUrlProviderclass and itsdi.xmlpreference entry — parentPageUrlProviderworks identically for frontend context. - Removed deprecated
hexToRgb/rgbToHexwrapper methods frompalette-manager.js,.permission-noticeCSS block, and no-op tooltip stub from_utilities.less. - Applied DRY refactoring across JS panel handlers: extracted
_handleFieldAction(base.js),_applyConfig(settings-editor.js),_traverseScopes(scope-selector.js),_extractErrorMessage(action-executor.js); removedpreview-manager.js_injectCSSduplicate.
Version 1.0.0-beta.3
April 8, 2026
- Fixed critical bug: scope chain was broken on production when
StoreManagerInterfacewas missing fromValueInheritanceResolverDI wiring — store view values were not inheriting from default/website scope correctly. - Fixed iframe proxy URL being incorrectly saved as the frontend page URL.
- Fixed URL restoration to use
FrontNameResolverfor admin path detection. - Fixed category and product page URLs to use URL rewrites in page selector.
- Fixed
uencencoding for iframe URL path param to survive Cloudflare. - Fixed panel accordion sections with no rendered fields now hidden correctly.
- Fixed CSS scope passed to
CssManager.initto prevent null mode on default scope. - Fixed admin category URL fallback using cascading category lookup.
- Introduced
configManageras single source of truth forscope/scopeId/themeId. - Introduced
publication-statesingleton as single source of truth for current status. - Extracted URL restoration logic into dedicated
url-restorationAMD module. - Unified
panel/css-managerandeditor/css-managerinto a single stateless module. - Removed unused PHP methods across 8 classes (dead code cleanup).
Version 1.0.0-beta.2
March 19, 2026
- Added multi-scope support (Default / Website / Store View) with full inheritance chain.
- Added color palette system with palette picker and opacity (hex8) support.
- Added font palette system with role-based font assignments.
- Added
font_pickerfield type with local font support. - Added
spacingfield type (4-sided padding/margin control). - Added
repeaterfield type for dynamic lists. - Added
HEADINGfield type for section separators. - Added live search in settings panel.
- Added publication selector with rollback, discard, and Live badge.
- Added scope selector with URL and cookie persistence (F5 restore).
- Added Phosphor Icons support for navigation and config sections.
- Added Content Builder integration.
- Added Toastify notifications.
- Added
inheritParentflag for theme config inheritance control. - Added Import/Export support.
- Added Preset system (quick theme switching, Light/Dark modes).
- Moved Theme Editor menu to Swissup > Breeze.
- Fixed import/export key mismatch (
importedCount/skippedCount). - Fixed validation service type mismatch on import.
- Fixed dead observer
SetThemePreviewCookie— moved to frontend context. - Fixed invalid URI schema in
etc/frontend/di.xml.
Version 1.0.0-beta.1
February 26, 2026
- Initial beta release.
- Live preview with instant CSS variable updates.
- Draft/Publish workflow with publication history and rollback.
- Admin-based authentication (no separate token endpoint).
- 14 field types: color, text, textarea, number, range, select, toggle, code, color_scheme, social_links, icon_set_picker, image_upload.
- Theme inheritance via
settings.jsonwith parent config merging. - GraphQL API for all editor operations.
- Multi-store architecture foundation.