Recent Activities
This page shows what are we working on.
-
head
-
1.0.11
-
Version 1.0.11 17c28e
-
Use text color for Heading when set in the Text component 0335a1
-
Added font-size field and source button to WYSIWYG editor dfc235
-
Improve grid component styles on 640px-768px screen sizes fe4e91
-
Added Feature Left/Right layouts to Grid component b1b27c
-
Use banner text color for headings inside banner if set eb8b24
-
-
head
-
Remove unused code 6292c3
-
Do not close accordion when multipleCollapsible is used b1b4a7
-
LazyAsync 9e0a37
-
Removed redundant 'contentUpdated' dead1b
-
Faster DOM traversal after contentUpdated event 9c2d61
-
Simplify quotedScope from prev commit 37a7b7
-
Improve scope binding match logic
minicart_content should not match x_minicart_content;
minicart.content should not match minicart_content 5e9bca -
Speculation rules: fixed not working exclude rules c78263
-
Added missing destructor to pagebuilderCarousel 81d228
-
Do not close dropdownDialog when dragging the slider inside eed793
-
Do not include requirejs-config if it's empty b4fbfe
-
Defer requirejs-config as all other scripts are deferred too 861179
-
Preload image from category-view block if main image is not found de4258
-
-
2.31.4
-
Version 2.31.4 53d648
-
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
-
-
head
-
BCB homepage: Added FAQ a0bfde
-
Add focused search styles. d80f88
-
BCB homepage: added new sections 875068
-
BCB homepage: added ECI and full-width banner d40cfa
-
Top navigation added. 8fa9a3
-
Remove color from menu links dec081
-
Clone currency and store switchers in header slideout menu for improved functionality de36e3
-
Enhance header and newsletter styles for improved layout and responsiveness in header slideout menu. b63dd0
-
Installer. Update header slideout menu styles. 825795
-
Update footer top content HTML to enhance newsletter section styling.
Don't set font familiy for header in Page Builder ba0b81 -
BCB homepage WIP b228af
-
Basic navpro slideout styles 75ac0e
-
Refactor header slideout menu and newsletter styles for improved layout and consistency 3b42ff
-
Header slideout menu... d4f174
-
Listing styles for the list mode and old price update. cbff61
-
Update README.md to clarify usage of `with-bottom-divider` CSS class and provide detailed instructions 1b9ea5
-
Pagination and make with-bottom-divider general. 37ea17
-
Added list banner 5 config; updated installer, moved it to json a43985
-
Add new layout configuration and remove easybanner references; update footer content and styles 87165b
-
Refactor easybanner configuration and installer for product listing banners 8b1d0d
-
Installer. Listing grid banner added. 914c01
-
Add swatches variables and layout styles d59581
-
Update positioning for filter title and content in layered navigation 8cbd21
-
Add image dimensions for product listings and related widgets in view.xml 6985cd
-
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.2.0
-
Version 1.2.0 634a46
-
Merge pull request #63 from breezefront/feat/build-page-from-screenshot
Build a Content Builder page from a screenshot 680ede -
fix(vision): close the second round of review points on #63
The one that mattered: `options['brief']` skipped the fix from the previous
commit entirely. It leaves the history untouched by design, so an
alternating conversation that ended on a user turn got our prompt appended
after it — the exact pair Anthropic answers 400 to, reachable from REST
where the caller supplies both a brief and a history. The prompt is now
folded into a trailing user turn instead of following it, which keeps that
turn's words rather than dropping them. The class docblock claimed "a
history that already alternates keeps alternating"; it does now.
`testSendsTheHistoryFollowedByTheGeneratedPrompt` was pinning the broken
shape — two user turns, asserted as correct — so its history now ends on
an assistant turn and the folding case has tests of its own.
The block hid itself for every reason a build could fail except the two
the controller actually enforces. A role holding `Magento_Cms::page` but
not `Swissup_BreezeAi::index` or `Magento_Cms::save` saw a working-looking
button whose every click came back as the login page, which the modal can
only report as an expired session.
Also from the review: the modal kept the previous brief when reopened, so
it would have ridden the next screenshot unseen; an in-flight FileReader
could re-arm a screenshot the admin had already removed, now invalidated
by a token that `clearScreenshot()` moves on; the drop zone gained
`role="button"` and the brief and model controls gained real labels, since
a placeholder is not one and the select had no accessible name at all.
A warning-free build no longer redirects on its own. The draft is saved by
then but the CMS form behind the modal is not — this request never touched
it — so a title or URL key typed before opening the modal was silently
lost. The editor is offered as a link in both outcomes.
635 unit, 18 integration, 30 e2e green.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 3072d9 -
fix(vision): answer the three points Copilot raised on #63
The docs described a cap the code stopped using. `BuildFromScreenshot`
reads `post_max_size`, and its own comment explains why `getMaxFileSize()`
is the wrong ceiling for a base64 string in a text field — the doc still
named `getMaxFileSize()`, which is exactly the sort of mismatch someone
debugging a 413 would be misled by.
The drop zone carries `tabindex="0"` but only answered to a click, so it
could be tabbed to and not opened. Enter and Space now trigger the picker,
with the same guard the click handler needs: the remove control sits
inside the zone and answers to both keys, and swallowing them there would
leave it dead to the keyboard.
`getVisionModels()` is asked for four times while one CMS page form
renders — `canShow`, `getConfigJson`, and `getSelectedModelId` from inside
it — and each ask loads every model to read its metadata. Memoized for the
life of the block, which is one request.
631 tests green; 29 e2e, the new keyboard case among them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 2e6454 -
test(e2e): assert the selection contract the wizard actually posts
33d5e97 replaced the all_selected flag with Magento's own mass-action
contract — one of selected or excluded, plus the grid namespace and the
filters that were on screen — and updated SaveTest, but the Playwright spec
kept asserting the flag that no longer exists. Red on master since then.
The assertion now names what the fix was for: the filters travel with the
selection, which is what stops an exclude-mode Select All from widening past
the rows the grid was showing. f34845 -
test(e2e): cover the build-from-screenshot modal
The one surface unit tests cannot reach. It exists because of a bug that got
all the way to review: the file input is a child of the drop zone, so the
synthetic click jQuery sends it bubbles back into the zone's own handler and
recurses until the stack blows — the picker never opens and only drag and drop
works. "clicking the drop zone opens the file picker" is the guard for that.
Also covers the pre-flight refusal of a non-image, that the refusal sends no
request, the preview and remove cycle, and that a reopened modal carries none
of the previous run's state.
Stops short of pressing Build draft: that would spend a real provider call.
Skips itself where the control legitimately hides — no Content Builder, or no
configured model that reads images. 10934b -
test(mcp): list build_page among the tools the server exposes
McpTest asserts a hardcoded tool list written when the MCP endpoint shipped
with four tools. build_page joined the skill pool in 1bf01f6, and every skill
in the pool is exposed as a tool, so the integration suite has been red since
then. Nothing about the server changed — only what the test expects. f8588c -
feat(vision): build a Content Builder page from a screenshot
PR #55 landed the whole image path — MessageInterface::getImages(),
ImageBuilder, ImageValidator, VisionSupport, per-provider encoding — and
nothing used it. Every caller of build_page passed an empty history, and no
UI produced an images list. This gives the admin a way in.
A button in the Content Builder fieldset of the CMS page form opens a modal:
attach a screenshot, optionally type a brief, pick a vision-capable model.
The file is read with FileReader and posted as a data URI inside
history[0].images — nothing is written to disk. Controller/Adminhtml/Page/Build
runs the skill, saves the result through DraftWriter, and answers with the URL
of the editor the admin reviews it in.
Synchronous rather than an option on the bulk wizard: a reference screenshot
is a per-page input, and one screenshot over N pages produces N near-identical
layouts. GenerateService, ImageBuilder, ImageValidator, AiRequest, Message and
all three providers are used exactly as PR #55 built them, unchanged.
BuildPage now lifts images off the user turns they arrived on and puts them on
the prompt turn it builds, consuming the last user turn as the brief. That
fixes an existing fault: Model\Provider\Claude passes the message list through
unmerged and Anthropic refuses two user turns in a row, so the old
array_merge($history, [prompt]) answered 400 whenever the lastUserMessage()
fallback was the thing being used.
PromptBuilder gains a conditional Reference design block. Two of its five
rules carry the weight: without the band-per-row line the model answers with a
flat component list and the row-wrapping rule loses to the picture, and
without the ignore-brand-and-colours line it copies the screenshot's hex
values into every colour prop and the draft clashes with the merchant's theme.
Verified end to end against gpt-4o-mini on a real storefront screenshot:
six row-wrapped bands, no validator repairs, draft readable in the editor.
With a brief added, the structure holds and the copy follows the brief rather
than transcribing the screenshot.
540 -> 621 unit tests, all green. 9d8854 -
test(mcp): list build_page among the tools the server exposes
McpTest asserts a hardcoded tool list written when the MCP endpoint shipped
with four tools. build_page joined the skill pool in 1bf01f6, and every skill
in the pool is exposed as a tool, so the integration suite has been red since
then. Nothing about the server changed — only what the test expects. 60d8c7 -
feat(vision): build a Content Builder page from a screenshot
PR #55 landed the whole image path — MessageInterface::getImages(),
ImageBuilder, ImageValidator, VisionSupport, per-provider encoding — and
nothing used it. Every caller of build_page passed an empty history, and no
UI produced an images list. This gives the admin a way in.
A button in the Content Builder fieldset of the CMS page form opens a modal:
attach a screenshot, optionally type a brief, pick a vision-capable model.
The file is read with FileReader and posted as a data URI inside
history[0].images — nothing is written to disk. Controller/Adminhtml/Page/Build
runs the skill, saves the result through DraftWriter, and answers with the URL
of the editor the admin reviews it in.
Synchronous rather than an option on the bulk wizard: a reference screenshot
is a per-page input, and one screenshot over N pages produces N near-identical
layouts. GenerateService, ImageBuilder, ImageValidator, AiRequest, Message and
all three providers are used exactly as PR #55 built them, unchanged.
BuildPage now lifts images off the user turns they arrived on and puts them on
the prompt turn it builds, consuming the last user turn as the brief. That
fixes an existing fault: Model\Provider\Claude passes the message list through
unmerged and Anthropic refuses two user turns in a row, so the old
array_merge($history, [prompt]) answered 400 whenever the lastUserMessage()
fallback was the thing being used.
PromptBuilder gains a conditional Reference design block. Two of its five
rules carry the weight: without the band-per-row line the model answers with a
flat component list and the row-wrapping rule loses to the picture, and
without the ignore-brand-and-colours line it copies the screenshot's hex
values into every colour prop and the draft clashes with the merchant's theme.
Verified end to end against gpt-4o-mini on a real storefront screenshot:
six row-wrapped bands, no validator repairs, draft readable in the editor.
With a brief added, the structure holds and the copy follows the brief rather
than transcribing the screenshot.
540 -> 621 unit tests, all green. c53c71
-
-
1.1.2
-
Version 1.1.2
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 3bc1cd -
Merge pull request #60 from breezefront/fix/bulk-selection-scope
fix(bulk): scope a run to what the grid was actually showing 49b5f5 -
fix(bulk): scope a run to what the grid was actually showing
A client selected one product and the wizard queued a run over all 714.
The submit path decided "everything is selected" from the grid
excludeMode flag, and core turns that flag on by itself as soon as the
checked rows cover the rows the grid currently holds - filtering down to
a single product and ticking it is indistinguishable from pressing Select
All. The server then made it worse: the all_selected branch loaded the
entity collection with no filters at all, so even a deliberate select-all
meant the whole catalogue rather than the filtered set. Either fault
alone produces the wrong count.
Both go away by speaking Magento's own mass-action contract. The wizard
now posts selected or excluded alongside the grid namespace, filters and
search, exactly as Magento_Ui/js/grid/massactions does, and
BulkEntityIdResolver runs the collection through MassAction\Filter. An
exclude-mode selection resolves against the filters that were on screen,
so the accidental flag can no longer widen the scope.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 33d5e9
-
-
head
-
1.19.3
-
1.19.2
-
head
-
1.4.5
-
Version 1.4.5 e34213
-