Recent Activities
This page shows what are we working on.
-
1.0.13
-
Version 1.0.13 99f37c
-
Merge pull request #29 from breezefront/feature/color-background-gradient
feat: COLOR_BACKGROUND field type with gradient support c2fd43 -
style: drop closing slash on void input tags (Magento Coding Standard)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> a84957 -
feat: add COLOR_BACKGROUND field type with gradient support
Implements the COLOR_BACKGROUND field type (issue #22) — a color field that
accepts either a solid color or a CSS gradient, analogous to Shopify's
`color_background` setting. Enables gradient backgrounds for elements exposed
as CSS variables (e.g. footer `--footer-bg`).
Backend:
- CssValueFormatter: formatColorBackground() passes gradients through with
comment-escaping, delegates solid values to the color pipeline; getComment
handles the new type.
- ValidationService: accepts gradient / palette-ref / solid-hex values.
- SectionFormatter + CssVariableBuilder: treat color_background like color for
format resolution and palette-var emission; gradients pass through untouched.
- schema.graphqls: COLOR_BACKGROUND enum value.
Frontend (Alpine/Tailwind theme editor, adminhtml):
- gradient-utils: pure parse/serialize/detect + stop manipulation
(paren-aware split so var()/rgb() stops survive), plus presets.
- color-background renderer: gradient swatch vs solid, reuses the color
renderer for solid; own compiled-template slot.
- color-background handler: two-tab popup (Solid Pickr + palette / Gradient
editor), preset swatches, draggable stops, position input, linear/radial,
angle slider, per-stop Pickr; commits raw CSS gradient.
- _gradient-picker.less styles; registered in field-renderer / field-handlers.
Tests: PHPUnit (formatter/validation/section/cssvar) + Jest
(gradient-utils, renderer, handler) — all green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> b5a3ef
-
-
1.0.12
-
Merge pull request #28 from breezefront/fix/framework-version-requirement
fix: correct magento/framework version constraint bfd0fb -
fix: correct magento/framework version constraint
magento/framework and magento/module-graph-ql use their own package
versioning (100.x-103.x), not the Magento product version (2.4.x). The
`^2.4` constraint matched no published version, so composer failed to
resolve on any recent release.
Magento 2.4.4-2.4.9 ship magento/framework 103.0.x and
magento/module-graph-ql 100.4.x, so use `^103.0` and `^100.4`.
Fixes #27
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> e8b697
-
-
1.1.46
-
Version 1.1.46 b9a4bf
-
Merge pull request #20 from swissup/fix/breeze-scope-virtual-node-grid
Fix knowledge base grid not rendering on Breeze < 2.31.3 8fdf7f -
Fix knowledge base grid not rendering on Breeze < 2.31.3
The homepage listing renders its child ui components (categoriesList,
paging, sizes) through a `scope:` binding placed on virtual (comment)
nodes:
<!-- ko scope: categoriesList -->...<!-- /ko -->
Breeze versions before 2.31.3 apply that binding without checking the
node type. `applyComponents()` calls `$(el).component(index)` on the
comment node, cash's `.data()` runs against an element with no data
store and throws:
TypeError: Unable to process binding "scope: ...categoriesList"
Cannot read properties of undefined
(reading 'component:knowledge-base-listing_categories_list')
The parent component (search bar) still renders because its scope
binding sits on a real <div>; every child grid crashes, so categories,
paging and page-size controls never appear. Breeze 2.31.3 later guarded
the virtual node (swissup/breeze e35ed274), but stores on older Breeze
stay broken.
Wrap the three child scope bindings in real <div> elements so the grid
renders regardless of the installed Breeze version. This mirrors the
stock Magento_Ui pattern (scope is always bound to a real element) and
is a no-op on patched Breeze.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> 10a3bf -
Make data providers static for PHPUnit 12 compatibility
PHPUnit 12 invokes @dataProvider methods statically; non-static
providers now get 0 args and throw ArgumentCountError. None of the
six providers touched here use $this, so making them static is a
behavior-neutral change compatible with both PHPUnit 10.5 (current)
and 12/13.
Verified: full module suite (118 tests, 184 assertions) green under
PHPUnit 10.5.47.
Closes #18
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> ab7b6b -
Add JS unit tests for listing cache and paging sizes
Cover the two frontend regressions fixed in ead4b7d and c08e84c:
- loadCategories()/loadFaqs() memoization keyed by page and size
- getPageSizes() always keeps the active page size selectable
Components are AMD modules, so tests load them through a minimal
define() shim with mocked dependencies (Jest, no Magento runtime
needed). Wired into CI as a separate js-unit job.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> 5207d3 -
Keep active page size in sizes options to avoid extra reload
getPageSizes() filters options by totalRecords, so the initial
pageSize (9) was missing from the list on small datasets. Knockout's
value binding then reset the select to the first option (3), which
triggered a second pair of GraphQL requests on every page load.
Always include the currently active page size in the options.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> c08e84 -
Fix categories pagination ignoring page changes
The categories memoization cache added in 3a2b32a keyed nothing, so
the first response (whatever pageSize was active at init) was served
for every subsequent currentPage/pageSize change. Key the cache by
currentPage and pageSize, same as the FAQs cache.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> ead4b7
-
-
1.1.45
-
Version 1.1.45 c9ecc6
-
ci: generate factory stubs via temp file instead of eval
Magento coding standard forbids eval(). Write the stub class to a
temporary file and require it — same behavior, phpcs-clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> c943a5 -
ci: allow magento composer plugins and stub factories in unit tests
- composer blocked magento/composer-dependency-version-audit-plugin via
allow-plugins config; allow magento/* plugins in the CI environment
- outside of a Magento installation the generated *Factory classes do
not exist, so tests mocking them failed; register an autoloader in
the standalone bootstrap that evals minimal factory stubs on demand
Verified in a container replicating the CI environment:
118/118 tests pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> 5c9e28 -
ci: install Magento packages from Mage-OS mirror
composer install failed in CI because magento/* packages require
repo.magento.com authentication. Use the public Mage-OS mirror
instead.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> 0dc99f -
Fix doubled separator line between FAQ items on knowledge base pages
FAQ items draw their own bottom border now, while the template still
renders a .content-border-bottom divider after each item, which is
also styled on knowledge base pages. Hide the redundant divider
inside the FAQ list.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> cbbd62 -
Make embedded FAQ listing themeable via CSS custom properties
- Expose border, spacing, colors and typography of FAQ items as
--kb-faq-* custom properties with previous values as fallbacks
- Show FAQ answer (.faq-content-html) by default, overridable via
--kb-faq-answer__display
- Remove dead .sliceFAQ / .panel-content rules — no template renders
these classes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> 52178d -
Fix FAQ listing styles not applied when widget is embedded on non-KB pages
The .faq-common block was nested inside the .knowledge_base-index-index
body-class selector, so none of its styles applied when the Listing
widget was inserted on catalog category or CMS pages. Moved it to a
standalone .swissup-knowledge-base-container scope.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> d6e5fc -
ci: add GitHub Actions workflow for unit tests on PHP 8.1/8.2/8.3
- .github/workflows/tests.yml: runs phpunit on push and pull_request
against PHP 8.1, 8.2, 8.3 matrix (mirrors module-logger pattern)
- tests/bootstrap.php: falls back to vendor/autoload.php when Magento
dev bootstrap is absent (standalone CI environment)
- phpunit.xml.dist: switch bootstrap path to tests/bootstrap.php
- composer.json: add require-dev (phpunit ^10.5, magento/framework,
magento/module-store, magento/module-ui) and autoload-dev PSR-4 map f98260
-
-
head
-
Improve cache key for js block f390bf
-
Update third-party JS libraries
- underscore 1.13.6 -> 1.13.8
- knockout 3.5.1 -> 3.5.3
- js.cookie 3.0.1 -> 3.0.8
- dayjs 1.11.7 -> 1.11.21
- panzoom 4.5.1 -> 4.6.2
- swiped-events 1.1.7 -> 1.2.0
- tabbable 6.1.1 -> 6.5.0
- focus-trap 7.3.1 -> 8.2.2
- scrollyfills 1.0.3 -> 1.0.4
- lite-yt-embed: 0.3.4 1d4f5d -
Use view transition when prefers-reduced-motion is not set to `reduce` c4ed65
-
Remove useless comment 80489b
-
Fixed empty pages in Instagram Browser when view transition is enabled
Closes https://github.com/breezefront/theme-frontend-breeze-evolution/issues/23 1c3432 -
fix(scroll-reveal): guard optional BreezeThemeEditor lookup with module-enabled check
class_exists(BreezeThemeEditor::class) only reflects composer autoload
availability, not whether Swissup_BreezeThemeEditor is actually
enabled. When it's disabled, di.xml preferences aren't loaded, so
ObjectManager::get(BreezeThemeEditor::class) fatals trying to
instantiate the bare ValueRepositoryInterface it depends on
(fixes #100).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> e52077
-
-
2.31.3
-
Version 2.31.3 dc91f2
-
Merge pull request #99 from breezefront/fix/scope-binding-on-virtual-elements
Fix scope binding crash on virtual elements b5ca92 -
Use existing isVirtualElement() helper instead of nodeType check
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> 47929a -
Fix scope binding crash on virtual elements
Commit af420909 added an already-mounted check to applyComponents()
that calls $(el).component(). When the scope binding is used on a
virtual element (<!-- ko scope: ... -->), el is a comment node and
cash's data() fails reading node.dataset, breaking the whole render
(e.g. Swissup_KnowledgeBase listing page).
Only run the check for element nodes; components are never mounted
on comment nodes anyway.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> e35ed2
-
-
1.1.5
-
1.1.4
-
head
-
layout and styles for category view, product toolbar, shop by button 08fd27
-
Add layered navigation styles and update imports 944ff1
-
Keep working on prodcut listing and category page. 411088
-
Keep working on product listing toolbar. ebcfac
-
Working on product listing and toolbar look. 1ab39d
-
Add Cooper* font 132906
-
Add listing item styles and variables e725b5
-
Product lisnting in progress - grey bg and border radius. 4e7c35
-
Add new variable files for colors, typography, header, footer, icons, navigation, popover, minisearch, and gradient ba122c
-
Refactor footer and newsletter styles for improved consistency and responsiveness d831e4
-
Footer top newsletter - some updates. 452ca5
-
Add footer top content block and styles for newsletter integration (WIP) 128131
-
Footer bottom. 8d58ea
-
Add footer content block and styles for enhanced footer layout 4d6b1b
-
Header. Hide menu on medium screens. Update search look on monile. e0146d
-
Installer. Add navigation slideout menu a89fd5
-
Add EasySlide functionality for header panel with custom slides and styles e55b0b
-
Add minisearch layout and styles to enhance search functionality 5c5aec
-
Update config.xml and LESS files for theme adjustments and styling improvements of search field 09f88d
-
Add Lexend font and related styles to the theme 0100e8
-
Create config.xml a78b04
-
Create installer.xml 073f18
-
Create view.xml baa3b6
-
Create theme.xml 440a18
-
Create registration.php 119b4f
-
Create README.md 2a5862
-
Create composer.json 16ec29
-
-
1.19.1
-
1.19.0
-
1.0.11
-
Merge pull request #41 from breezefront/fix/translate-source-language-prompt
fix(translate): translate from source language + module-logger dev logging (1.0.11) e7a8f5 -
Version 1.0.11
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> dca39c -
fix(translate): translate from the selected source language, not just to target
Bulk translation only told the model the TARGET language ("Translate to German"),
never the source. Weak models (e.g. gpt-4o-mini) then left many words in the
source language when translating Danish→German — option titles and values on the
target store came out as a Danish/German mix, while English→German looked clean.
- Pass the Source Store View through to the Translate skill (source_store_id) so
the prompt is "translate from <source> to <target>".
- Strengthen the prompt: instruct the model to translate EVERY word and leave
nothing in the source language, while preserving numbers/SKUs/HTML.
- Applies to EAV attributes, custom option titles/values, and media labels.
Optional query/response logging now goes through swissup/module-logger
(require-dev), gated by the BREEZEAI_TRANSLATE_DEBUG constant — a no-op unless
that module is installed and the constant is set.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> 520ff4 -
test(translate): drop error-silencing @ on mkdir in media scope test
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> 78d334
-
-
1.0.10
-
Version 1.0.10
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> 300ae5 -
test(translate): integration guard for media translation vs option scope
Reproduces the bug where translating media gallery labels corrupts the custom
option titles of other store views. Creates a product with a media image plus a
drop-down custom option carrying source-store title overrides, runs
MediaTranslator for the gallery label, and asserts the option titles are
unchanged in every store. Fails on the full-save implementation, passes with the
direct target-store media write.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> 5236d5 -
fix(translate): write media labels to target store without full product save
MediaTranslator persisted translated media gallery labels / video metadata with
a full ProductRepository::save() of the product loaded at the target store. That
full save re-processes the product's custom options through Magento core, and
saving a product loaded at a non-default store propagates its option/value titles
into other store views — silently overwriting the SOURCE store's custom option
titles. Symptom: after a bulk translation that includes media fields (image /
gallery labels, video), the source (e.g. Danish) store view shows English custom
options, while the target store is translated correctly.
Write the translated label / video metadata directly into the target store's
rows of catalog_product_entity_media_gallery_value and
catalog_product_entity_media_gallery_value_video (update-or-insert, inheriting
position/disabled and provider/url/metadata from the default-store row). No
ProductRepository::save(), so custom options and other stores are untouched —
the media counterpart of the 1.0.9 OptionTranslator fix.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> 6f808f
-
-
head
-
Improve recent products widget styles in sidebar 3d94fb
-
Revert "Move testimonials below category description"
This reverts commit 046f5bb650b031b250b05a0009b5ec2edc27a619. 66ab0d -
Move testimonials below category description 046f5b
-
Use `apollo-` prefix for custom quote icon 7f3938
-
Prevent zoom om mobile devices when focusing quantity field 0de256
-
Limit upsell and related products to 6 items on the product page 94dd46
-
Added BLB installation: Testimonials widget on category pages 60339b
-
Testimonials and BCB slider styles bb8fa5
-
Fixed qty overlap with actions in minicart on small screens, see #16 96cd74
-
Enabled mobile slider layout for columns and grid 77cb58
-
Created separate mobile slider 8880b4
-
Sync products widget styles with product list. Closes #13 241874
-
-
3.1.2