Recent Activities

This page shows what are we working on.

breezefront / module-breeze-magezon-pagebuilder

4 days ago success

breezefront / module-breeze-theme-editor

6 days ago success
  • head
    • Refactor: Clean up ValueService - remove unused methods 787e58

    • Refactor: Remove all deprecated methods from ValueRepository, migrate to ValueService a03197

    • Remove deprecated PublicationRepository methods (getLatest, getLegacyList) 947b1f

    • Refactor: migrate changelog repo API to SearchCriteria, remove deprecated methods 055aa5

    • Refactor: remove legacy saveValue/saveValues, migrate to ValueInterface + save/saveMultiple, update di.xml and repo factories 0f1d31

    • Refactor ValueRepository to use proper Repository Pattern 813245

    • fix: replace self-closing SVG path tags in toolbar templates 8f6d10

    • refactor: extract value inheritance logic to dedicated resolver

      Implement Single Responsibility Principle for value management:

      **New ValueInheritanceResolver:**
      - Add resolveAllValues() for full theme hierarchy merge
      - Add resolveSingleValue() for single field with fallback
      - Add isValueInherited() helper method
      - Add getInheritedFromTheme() to track inheritance source

      **ValueRepository refactoring:**
      - Remove inheritance methods (moved to resolver)
      - Keep only pure CRUD operations
      - Add getValuesByTheme() for single theme values
      - Add getSingleValue() for single field fetch
      - Simplify deleteValues() to support optional sectionCodes
      - Remove StatusProvider, ThemeResolver, ConfigProvider dependencies
      - Add buildValuesQuery() DRY helper method
      - Reduced from 420 to 280 lines (-33%)

      **Updated 14 files to use new architecture:**
      - CompareProvider: inject StatusProvider, use getValuesByTheme()
      - PublishService: use getValuesByTheme() for draft values
      - ImportExportService: use getValuesByTheme() instead of wrappers
      - Values resolver: inject ValueInheritanceResolver
      - Config resolver: inject ValueInheritanceResolver
      - ResetToDefaults: extend AbstractSaveMutation, use getValuesByTheme()
      - ApplyPreset: extend AbstractSaveMutation, use getValuesByTheme()
      - CopyFromStore: extend AbstractSaveMutation, use getValuesByTheme()

      **Bug fixes:**
      - Fix explode() whitespace issues in formatPresetSettings()
      - Fix consistent '.' delimiter usage across all files

      Benefits:
      - Clear separation of concerns (CRUD vs business logic)
      - Easier to test inheritance independently
      - Follows repository pattern best practices
      - Eliminated all getDraftValues/getPublishedValues wrapper methods

      Tested:
      ✅ breezeThemeEditorConfig with inheritance
      ✅ saveBreezeThemeEditorValue mutation
      ✅ breezeThemeEditorCompare query 0aaee9

    • refactor: eliminate mutation code duplication with AbstractSaveMutation

      Extract common input processing logic to base class:
      - Add AbstractSaveMutation with prepareBaseParams()
      - Update SaveValue and SaveValues to extend base
      - Remove 31 duplicated lines (phpcpd 0.52% → 0%)
      - Reduce mutation classes by ~25% lines each 57368a

    • feat: implement full theme inheritance system

      Add complete theme inheritance with config and value merging:

      **ValueRepository:**
      - Add getValueWithInheritance() for single value lookup
      - Add getAllValuesWithInheritance() for full value merge
      - Add getValueFromTheme() private method for specific theme
      - Values cascade from child → parent → grandparent → default

      **ConfigProvider:**
      - Add getConfigurationWithInheritance() for merged configs
      - Add deepMerge() for recursive config merging
      - Add mergeSections() to merge sections by ID
      - Add mergeSettings() to merge settings by ID
      - Configs merge from oldest ancestor → child (child overrides)

      **Config Resolver:**
      - Use getConfigurationWithInheritance() instead of getConfiguration()
      - Use getAllValuesWithInheritance() instead of direct queries
      - Support inheritance for both DRAFT and PUBLISHED statuses

      **Testing:**
      - Created settings. json for Swissup/breeze-blank (parent theme)
      - Verified config merge (10 sections from both themes)
      - Verified value inheritance (parent value used when child empty)
      - Verified value override (child value overrides parent)

      Theme hierarchy now fully functional: child themes inherit and
      can override all settings from parent themes recursively. 6ccaaa

    • feat: add theme hierarchy and metadata support

      - Replace DesignInterface with ScopeConfig for theme detection
      - Add recursive theme hierarchy resolution with caching
      - Extract theme metadata (name, code, path, parentId)
      - Update GraphQL schema with extended metadata fields
      - Fix 'Incorrect theme identification key' error

      Prepares for full theme inheritance (child/parent/grandparent). 06e03c

    • feat(graphql): add Import/Export mutations

      Complete MVP with import/export functionality:
      - ExportSettings mutation - export settings to JSON
      - ImportSettings mutation - import settings from JSON with validation
      - Support for DRAFT and PUBLISHED status
      - Update schema resolver paths to Mutation namespace

      Allows users to:
      - Backup theme settings as JSON
      - Transfer settings between environments
      - Share preset configurations 00a850

    • feat(graphql): add Import/Export mutations

      Complete MVP with import/export functionality:
      - Export settings to JSON
      - Import settings from JSON with validation
      - Support for DRAFT and PUBLISHED status 0423e6

    • refactor: reorganize Model layer structure

      Move classes into subdirectories by responsibility:
      - Providers (read-only) → Model/Provider/
      - Services (business logic) → Model/Service/
      - Utilities (helpers) → Model/Utility/
      - Validators → Model/Validator/
      - Resolvers split into Query/Mutation

      Rename Manager classes to Services for consistency.
      Update all namespaces, imports, and GraphQL schema paths. 255576

    • Toolbar colors redesign according Figma 85d9b5

    • feat(graphql): add CopyFromStore mutation e6fccc

    • feat: add ResetToDefaults mutation

      - Reset fields to default values from theme configuration
      - Support filtering by sectionCodes and fieldCodes
      - Uses ConfigProvider::getAllDefaults() to get default values
      - Can reset to DRAFT or PUBLISHED status
      - Returns count of reset fields and updated values list f77dc3

    • feat: add Rollback and ApplyPreset mutations

      Rollback:
      - Rollback to previous publication
      - Creates new publication with isRollback=true
      - Copies values from target publication to published status

      ApplyPreset:
      - Apply preset values to draft or published
      - Support overwriteExisting flag
      - PresetManager converts flat preset format to sectionCode/fieldCode/value
      - Auto-detect themeId from storeId

      Presets:
      - Parse flat preset format from JSON
      - Build setting-to-section mapping
      - Return structured preset data with all settings 7325e8

    • feat: add preset support with auto-detect themeId

      - Add PresetManager::getPresetValues() - converts flat preset settings to sectionCode/fieldCode/value format
      - Add PresetManager::buildSettingSectionMap() - maps setting codes to section codes
      - Update Presets resolver to use PresetManager and auto-detect themeId from storeId
      - Support flat preset format from JSON: {"primary_color": "#007bff"} 1d0316

    • feat: Breeze Theme Editor - Core functionality

      Implemented:
      - Value management (save single/multiple, draft/published)
      - Publish workflow with changelog tracking
      - Discard draft changes
      - Publication history with detailed changelog
      - Compare draft vs published changes
      - Optional themeId auto-detect from storeId

      Working queries:
      - breezeThemeEditorConfig
      - breezeThemeEditorValues
      - breezeThemeEditorCompare
      - breezeThemeEditorPublications
      - breezeThemeEditorPublication
      - breezeThemeEditorStatuses
      - breezeThemeEditorPresets

      Working mutations:
      - saveBreezeThemeEditorValue
      - saveBreezeThemeEditorValues
      - publishBreezeThemeEditor
      - discardBreezeThemeEditorDraft

      Modified:
      - CompareProvider: compare only draft keys, empty draft = no changes
      - PublishManager: delete old values before saving new published
      - ValueRepository: optional userId filter, delete methods
      - schema.graphqls: themeId optional everywhere e6dd83

    • feat: GraphQL API with secure token authentication

      Add complete GraphQL API for theme editor with:
      - Token-based auth storing user metadata in cache
      - Auto theme detection by store ID
      - Support for both app/design and vendor themes
      - Config and Values resolvers
      - TokenManager for admin user tokens d83c91

    • Fix PHPStan error: add return statement in apply() method 543af2

    • Add business logic managers and providers

      - ValueManager: save/discard/reset/copy operations
      - CompareProvider: compare draft vs published changes
      - PublishManager: publish drafts and rollback functionality
      - PresetManager: apply theme presets
      - ValidationProvider: validate field values by type
      - ImportExportManager: export/import settings as JSON 3b2885

    • Add core data providers

      - StatusProvider: cached status mapping (code <-> ID) with 24h cache
      - ConfigProvider: read and parse theme settings. json from theme directory
      - ValueRepository: CRUD operations for theme values table
      - All use ValueInterface constants instead of magic strings
      - Proper exception handling and caching strategies 62bdaa

    • fix typo d94704

    • Add repository pattern implementation for all entities

      - Add Repository interfaces (Status, Publication, Changelog)
      - Implement repositories with instance caching
      - Add CRUD operations with proper exception handling
      - Add specialized methods (getByCode, getLatest, saveMultiple, deleteByPublicationId)
      - Repository pattern provides data access abstraction layer 994575

    • Add entity models and collections for all database tables

      - Add Data Interfaces with constants (Status, Value, Publication, Changelog)
      - Add Models implementing interfaces
      - Add Resource Models for database operations
      - Add Collections with filtering methods using interface constants
      - All collections use constants instead of magic strings
      - Add joinAdminUser() to Publication collection for user data cf3145

    • feat(db): add Breeze Theme Editor schema and initial data patch

      - Add etc/db_schema.xml defining 4 main tables:
      * breeze_theme_editor_status (status system: draft, published, etc)
      * breeze_theme_editor_value (settings storage with JSON values, user+store+status+section+setting granularity)
      * breeze_theme_editor_publication (publish/version/rollback history with titles and meta)
      * breeze_theme_editor_changelog (detailed per-setting change log per publication)

      - All tables include necessary indexes, constraints, validation (CHECK), foreign keys.

      - Add Setup/Patch/Data/InitThemeEditorStatus.php DataPatch:
      * Inserts default statuses: draft and published.
      * Idempotent: won't duplicate statuses on repeated upgrades.

      Ready for setup:upgrade and setup:db-data:upgrade — after run,
      all Breeze Theme Editor tables are created and initial statuses are present.

      Next step: API integration, UI save/load, GraphQL support. f9faa3

    • feat(theme-editor): add live CSS preview with CssPreviewManager

      Add CssPreviewManager module:
      - Create <style id='bte-live-preview'> in iframe head for live updates
      - setVariable(varName, value, format) for dynamic CSS variable updates
      - Format conversion: HEX → RGB (Breeze format: '255, 255, 255')
      - Support 3-char (#FFF) and 6-char (#FFFFFF) HEX format
      - getChanges() to track all modifications
      - reset() and resetVariable() for undo
      - load(settings) for restoring saved state
      - Helper methods: hexToRgb(), rgbToHex()

      Update panel.js:
      - Initialize CssPreviewManager on panel create (500ms delay for iframe)
      - Replace slideUp/slideDown with CSS transition (Cash.js compatible)
      - Connect color picker to live preview via data-css-var
      - Connect range slider to live preview
      - Connect font picker to live preview
      - Update Reset button to use CssPreviewManager. reset()
      - Update Save button to get CssPreviewManager.getChanges()

      Update _theme-editor-panel.less:
      - Add max-height: 0 and transition for accordion animation
      - Active state: max-height: 2000px for smooth expand

      Update panel.html:
      - Add data-css-var='--brand-color' to Primary Color
      - Add data-css-var='--info-color' to Secondary Color
      - Add data-css-var='--base-bg' to Background Color
      - Add data-css-var='--link-color' to Link Color
      - Add data-css-var='--headings-color' to Heading Color
      - Add data-css-var='font-family' to Font Family selector
      - Add data-css-var='font-size' to Font Size slider
      - Add data-css-var='--container-max-width' to Container Width
      - Add data-css-var='--sidebar-width' to Sidebar Width
      - Add data-css-var='--spacing-scale' to Spacing Scale
      - Add data-format attribute (color-rgb, size, number)

      Live preview now works! Changing colors/sizes updates iframe in real-time.
      Changes tracked in memory, ready for backend save implementation.

      Accordion uses CSS transitions instead of jQuery UI slideUp/slideDown.
      All controls are declarative via data-css-var attributes.

      Next: Backend AJAX save functionality. f0e581

    • refactor(navigation): move panel initialization to navigation widget

      - Add panelWidgets config option to navigation widget
      - Add _initializePanel() method for lazy panel initialization
      - Initialize panel widgets on first panel show (not on page load)
      - Track initialization state with data('panel-initialized')
      - Remove panel initialization from toolbar.js

      This moves panel management responsibility to navigation widget where it
      logically belongs. Makes adding new panels easier (just add to panelWidgets).

      Navigation now owns: tab switching + panel show/hide + panel initialization
      Toolbar now owns: component initialization (doesn't know about panels) 6d55db

    • feat(toolbar-toggle): hide panels when hiding toolbar

      - Add panelsSelector option (#bte-panels-container)
      - Hide all panels when toolbar is hidden
      - Deactivate all navigation tabs when toolbar is hidden
      - Reset --bte-sidebar-width to 0px when hiding toolbar
      - Keep panels closed when showing toolbar (user opens manually)

      When user hides toolbar, sidebar panels are also closed and content
      returns to full width. When toolbar is shown again, panels stay closed
      until user clicks navigation tab. ca1c49

    • fix(device-frame): restore body class manipulation methods

      - Add addBodyClass() method for adding classes to iframe body
      - Add removeBodyClass() method for removing classes from iframe body
      - Add toggleBodyClass() method for toggling classes on iframe body
      - Add getWindow() helper to access iframe window object
      - Add getDocument() helper to access iframe document object

      These methods are required by highlight-toggle and other components
      that need to manipulate iframe body classes.

      Fixes: Uncaught TypeError: DeviceFrame.toggleBodyClass is not a function b68154

    • feat(navigation): add sidebar panel management with content push

      Add navigation panel system:
      - Navigation tabs now toggle sidebar panels (Theme Editor, Content Builder)
      - Clicking active tab hides the panel (toggle behavior)
      - Panels start hidden by default (no auto-activation)

      Add sidebar push layout:
      - Introduce --bte-sidebar-width CSS variable (0px → 360px)
      - Body and iframe shift right when panel opens (push instead of overlay)
      - Desktop mode: iframe width = calc(100% - sidebar width)
      - Tablet/Mobile: centered iframe, sidebar overlay (no push)

      Update device-frame.js:
      - Change iframe from centered (left: 50%) to left-aligned with sidebar offset
      - Exclude #bte-panels-container from iframe content migration
      - Add left transition for smooth animation
      - Desktop: adjust for sidebar, Tablet/Mobile: keep centered

      Update navigation.js:
      - Add setActive() and deactivate() methods for panel control
      - Add panel show/hide logic with body class (bte-panel-active)
      - Add events: navigationChanged, panelShown, panelHidden
      - Add methods: getActiveId(), hasActive(), setItemEnabled()

      Add panels structure:
      - Create #bte-panels-container in toolbar.html
      - Add placeholder panels (theme-editor-panel, content-builder-panel)
      - Import _panels.less for panel styles

      Update toolbar.phtml config:
      - Add panelSelector and panelId to navigation items
      - Change badge from string to object {type, text}
      - Set all tabs to active: false (no default active)

      Update _utilities.less:
      - Add --bte-sidebar-width: 0px to :root
      - Add margin-left: var(--bte-sidebar-width) to body
      - Add responsive override (mobile: margin-left: 0 ! important)

      This creates a VSCode-like sidebar behavior where panels push content
      instead of overlaying, and can be toggled on/off by clicking nav tabs.

      Prepares for Theme Editor Panel implementation (next step). 91afd3

    • refactor(styles): rename LESS variables to @bte-toolbar-* namespace

      - Rename all @breeze-toolbar-* variables to @bte-toolbar-*
      - Keep -toolbar- suffix for semantic clarity (bte = module, toolbar = component)
      - Rename mixins: .breeze-* → . bte-*
      - Update all references across 11 LESS files
      - Reorganize _variables. less with clear section comments
      - No functional changes, pure refactoring for better namespace

      Namespace structure:
      - @bte-toolbar-* = Breeze Theme Editor Toolbar variables
      - . bte-toolbar-*() = Toolbar-specific mixins
      - . bte-*() = General utility mixins

      Total changes: 123 replacements across 11 files 5dfb87

    • fix: prevent duplicate toolbar and nested iframe on page navigation

      - Add iframe detection in toolbar. js to skip initialization inside iframe
      - Always initialize toolbar in top window (window.top. document. body)
      - Add initialization guard to prevent duplicate toolbar creation
      - Improve device-frame. js iframe check inside init() method
      - Filter out toolbar elements when moving content to iframe
      - Add navigation state protection in page-selector.js to prevent double-clicks
      - Clean up existing frames before creating new ones
      - Add detailed console logs for debugging

      Fixes issue where toolbar was duplicated and iframe nested when navigating
      between pages using page selector.

      Affected files:
      - view/frontend/web/js/toolbar. js
      - view/frontend/web/js/toolbar/device-frame.js
      - view/frontend/web/js/toolbar/page-selector.js 9e4f3d

    • feat: improve toolbar dropdown animation with auto height support and better accessibility 3591bb

    • feat: add store scope selector to toolbar, unify dropdown logic and migrate to DRY CSS 1ec75e

    • feat: implement page selector dropdown for quick navigation 61d485

    • feat: add DeviceFrame API for iframe body class management 97897f

    • refactor: extract device-switcher styles with improved active state 795595

    • feat: implement iframe-based device preview with adaptive toolbar 16d1d9

    • feat: add responsive toolbar with viewport detection and device preview 3dfc35

    • refactor: extract toolbar HTML to template-based architecture 1c6129

    • Fix Magento coding standard error: Escape unescaped output in enabled_with_link.phtml 2d119d

    • feat: add dynamic toolbar height management and compact toggle positioning 17c312

    • feat: add frontend toolbar for Breeze Theme Editor 2a01c7

    • feat: implement Breeze Theme Editor admin configuration bb0744

    • Create LICENSE 7867f9

    • Create .gitignore fd48ca

    • Create README.md 530b13

    • Create module.xml c5d020

    • Create registration.php b30271

    • Create composer.json 13acd2

breezefront / breeze-evolution

1 week ago success

breezefront / theme-frontend-breeze-evolution

1 week ago success

breezefront / module-breeze-ulmod-bundle-item

1 week ago success

breezefront / module-breeze-landofcoder-estimate-shipping-rate

1 week ago error

breezefront / module-breeze-amasty-rewards

1 week ago error

breezefront / module-breeze-stape-gtm

1 week ago success

breezefront / module-breeze-amasty-ga4

1 week ago success

breezefront / module-breeze-bss-simple-detail-configurable

1 week ago error