Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
70ea11e
fix: json ld encode
tblivet May 22, 2026
63902e8
Merge pull request #1018 from tblivet/fix/json-ld-escape
tblivet May 27, 2026
022d96e
Pass isMainAccount to Hummingbird displayCustomerAccount hook
Codencode May 29, 2026
a81d520
Remove duplicate IDs from Hummingbird customer account module links
Codencode May 30, 2026
4f617fd
Improve rich text link accessibility in Hummingbird theme
Codencode May 29, 2026
ace34a0
Refine rich text link accessibility styles
Codencode Jun 1, 2026
1254760
Refine rich text link accessibility styles
Codencode Jun 2, 2026
85597ba
Add required attribute to date field in Hummingbird form template
Codencode May 29, 2026
2ea9bc0
Add dedicated account link classes for module selectors
Codencode Jun 2, 2026
23e19d8
Merge pull request #1028 from Codencode/improve/rich-text-link-access…
tblivet Jun 3, 2026
084832e
Merge pull request #1027 from Codencode/fix/hummingbird-date-field-re…
tblivet Jun 3, 2026
f1b4974
Turn payment information title into a real heading
Codencode Jun 5, 2026
e778fb3
Use server side structured data if available
Hlavtox Jun 5, 2026
20a2da8
Update comments for structured data rendering
Hlavtox Jun 8, 2026
69e4c68
Improve social follow link accessibility
Codencode Jun 8, 2026
bb85c05
Improve order detail page heading hierarchy and table accessibility
Codencode Jun 5, 2026
d81235b
Merge pull request #1040 from Codencode/fix-social-follow-aria-label
tblivet Jun 8, 2026
6e91cd7
Merge pull request #1039 from Codencode/fix/hummingbird-payment-infor…
Codencode Jun 8, 2026
92b74df
fix: remove product_without_taxes block
tblivet Jun 9, 2026
23c6feb
fix: manufacturer links
tblivet Jun 9, 2026
06208c9
Merge pull request #1038 from Codencode/fix/hummingbird-order-detail-…
Codencode Jun 9, 2026
30c390b
fix: product taxless price
tblivet Jun 9, 2026
ec7be4f
Merge pull request #1033 from Codencode/fix-1032-hummingbird-displayc…
tblivet Jun 10, 2026
2812b95
Fix mobile menu aria label
Codencode May 28, 2026
ce6a86a
Merge pull request #1037 from Hlavtox/add-server-side-structured-data
Hlavtox Jun 11, 2026
47fd41f
Merge pull request #1024 from Codencode/fix/ps-mainmenu-mobile-aria-l…
tblivet Jun 11, 2026
aa8a6d0
Merge pull request #1042 from tblivet/fix/brand-link-404
tblivet Jun 11, 2026
b5c990b
Merge pull request #1041 from tblivet/fix/tax-condition
tblivet Jun 11, 2026
0faacde
feat: improve password policy
tblivet Jun 11, 2026
60f5183
Merge pull request #1044 from tblivet/fix/password-policy
tblivet Jun 16, 2026
d45a1bf
fix: scrolling issue
tblivet Jun 16, 2026
30b81c2
Improve product thumbnails list markup accessibility
Codencode Jun 16, 2026
1bce549
Merge pull request #1045 from tblivet/fix/scrolling-issue
tblivet Jun 16, 2026
ed63f8b
Fix inline stylesheet rendering with nofilter
Maofree Jun 17, 2026
c37a86b
Fix product thumbnail active selector after list markup change
Codencode Jun 17, 2026
878a5b8
Merge pull request #1047 from Maofree/patch-1
tblivet Jun 18, 2026
4566838
Use data-ps-ref for product thumbnail selector and width fix
Codencode Jun 18, 2026
4cce952
Merge pull request #1046 from Codencode/fix-product-thumbnails-list-m…
Codencode Jun 18, 2026
a4b6ebc
fix: paste trigger search + debounce
tblivet Jun 19, 2026
491ea4e
chore: update readme
tblivet Jun 22, 2026
2f8d867
chore: update package lock
tblivet Jun 22, 2026
098156d
Fix duplicate product manufacturer block name in product page
Codencode Jun 22, 2026
ebff8c6
Fix product variants legend markup in Hummingbird
Codencode Jun 23, 2026
51bbde3
Add subcategories hook
Hlavtox Jun 23, 2026
a6c24da
Add a hook to display content under cart summary
Hlavtox Jun 23, 2026
1acf8f2
Merge pull request #1049 from tblivet/fix/issue-974-searchbar-paste
tblivet Jun 23, 2026
1e4fd7e
Merge pull request #1053 from Hlavtox/subcategory-hook
tblivet Jun 23, 2026
cab92c8
Fix product variant spacing with attributes wrapper
Codencode Jun 23, 2026
52a9841
fix: search event listener
tblivet Jun 24, 2026
80042b6
Restore product variant legend margin reset
Codencode Jun 24, 2026
3d20b0a
Merge pull request #1052 from Codencode/fix/hummingbird-product-manuf…
tblivet Jun 24, 2026
f7cab85
Merge pull request #1054 from Codencode/fix/hummingbird-product-varia…
tblivet Jun 24, 2026
3ca6c15
Merge pull request #1056 from tblivet/fix/searcheventlistener
tblivet Jun 24, 2026
682198a
Update templates/checkout/cart.tpl
Hlavtox Jun 24, 2026
fcb50cb
Merge pull request #1055 from Hlavtox/add-cart-contact
tblivet Jun 24, 2026
888bc3a
chore: update readme
tblivet Jun 26, 2026
238dd26
Merge pull request #1051 from tblivet/chore/prepare-release
tblivet Jun 26, 2026
4ddea4e
Add alt text to product customization images
boo-code Jul 5, 2026
ebb2753
Debounce the scroll-padding resize handler to avoid forced reflow
boo-code Jul 5, 2026
d395370
Mark the redundant payment-option logo as decorative
boo-code Jul 5, 2026
6e5fd9d
Label the birthday date fields as an accessible group
boo-code Jul 5, 2026
d9a4c48
Fix unbalanced markup in the customer order templates
boo-code Jul 5, 2026
b090a86
Render the form field attr attributes in the form fields partial
boo-code Jul 5, 2026
e3f51de
Merge pull request #1061 from boo-code/fix/order-account-markup
kpodemski Jul 6, 2026
d7e894e
fix: back params issue
tblivet Jul 6, 2026
b77d368
Merge pull request #1064 from tblivet/fix/customersignin-auth-link
tblivet Jul 6, 2026
a6081b1
Render radio attribute groups as buttons on the product page
boo-code Jul 7, 2026
e584501
Guide visitors from the search no-results page instead of dead-ending
boo-code Jul 7, 2026
0c165bc
Include the visible label in the product card details link accessible…
boo-code Jul 7, 2026
7d8bade
Fix blurry product cover image below the lg breakpoint
boo-code Jul 7, 2026
395e3e4
Merge pull request #1057 from boo-code/fix/customization-image-alt
tblivet Jul 8, 2026
02d44ca
Replace outer nav element with div in pagination template
Codencode Jul 6, 2026
9e4c7ff
Merge pull request #1058 from boo-code/fix/scrollpadding-resize-debounce
tblivet Jul 9, 2026
7ad248b
Merge pull request #1059 from boo-code/fix/birthday-field-a11y-label
tblivet Jul 9, 2026
e4408f9
Merge remote-tracking branch 'upstream/2.x' into feat/render-form-fie…
boo-code Jul 9, 2026
f84328b
Render attr on all single-element fields via a shared capture
boo-code Jul 9, 2026
e6b0f57
Merge remote-tracking branch 'upstream/2.x' into feat/variant-radio-b…
boo-code Jul 9, 2026
c6c003b
Use a uniform gap between variant radio buttons
boo-code Jul 9, 2026
ad8be27
Merge pull request #1065 from Codencode/fix/remove-nested-nav-pagination
tblivet Jul 9, 2026
7106222
Merge pull request #1063 from boo-code/feat/render-form-field-attr
tblivet Jul 9, 2026
9d7460e
feat: handle image properly
tblivet Jul 9, 2026
b2461b6
feat: improve image format
tblivet Jul 10, 2026
86b3e64
Move the product-card aria-label to the Shop.Theme.Actions domain
boo-code Jul 13, 2026
f2f27c7
Refine the search no-results copy and drop the unstyled tips class
boo-code Jul 13, 2026
246d33f
Merge pull request #1075 from tblivet/fix/brand-image
Hlavtox Jul 13, 2026
2b24aae
Merge pull request #1077 from tblivet/feat/image-format-fitment
tblivet Jul 13, 2026
a153d97
Merge pull request #1073 from boo-code/fix/product-cover-image-sizes-…
tblivet Jul 13, 2026
0ab6863
Merge pull request #1060 from boo-code/fix/payment-logo-alt
tblivet Jul 13, 2026
2d916be
Merge pull request #1071 from boo-code/a11y/product-card-see-details-…
tblivet Jul 13, 2026
252f9b3
Merge pull request #1069 from boo-code/feat/search-no-results-guidance
tblivet Jul 13, 2026
8d49e72
Merge pull request #1067 from boo-code/feat/variant-radio-buttons
tblivet Jul 13, 2026
d7adbd4
chore: release update
tblivet Jul 13, 2026
0f29e2f
Support an optional id prefix in the form fields partial
boo-code Jul 13, 2026
3b30b6e
Merge pull request #1062 from boo-code/feat/form-fields-id-prefix
Quetzacoalt91 Jul 14, 2026
440d4f9
Merge pull request #1079 from tblivet/chore/release
Quetzacoalt91 Jul 14, 2026
0d02551
Format the B2B tax-excluded price with the currency
boo-code Jul 14, 2026
9d3b16b
Add sticky position to account menu sidebar
mgielecinski Jul 28, 2026
f64dae2
Merge pull request #1086 from mgielecinski/add-sticky-position-to-acc…
tblivet Jul 30, 2026
c1465f7
Merge pull request #1080 from boo-code/fix/b2b-price-without-vat-form…
tblivet Jul 30, 2026
56783dd
Add useful links in store details
mgielecinski Aug 4, 2026
d0a43c0
feat: update breadcrumb
tblivet Aug 10, 2026
c9e3308
fix: remove unused code
tblivet Aug 10, 2026
fdcca66
Fix wording
mgielecinski Aug 10, 2026
5c48eb3
Use new image feature
Hlavtox Aug 11, 2026
c822962
Merge pull request #1088 from mgielecinski/clickable-elements-in-the-…
tblivet Aug 17, 2026
5783eab
feat: a11y semantics
tblivet Aug 17, 2026
6411137
Merge pull request #1090 from tblivet/feat/breadcrumb-update
kpodemski Aug 25, 2026
7c7e145
Merge pull request #1092 from tblivet/feat/fix-semantic
kpodemski Aug 25, 2026
111d878
Respect the country tax label setting on the product page
boo-code Sep 1, 2026
1c7e606
Stop nesting form elements in the checkout address step
boo-code Sep 5, 2026
cfd1a95
Mark the reassurance icons as decorative
boo-code Sep 7, 2026
731f0fd
Render the order product line hook on every order product line
boo-code Sep 9, 2026
8b1a560
docs: add QA testing checklist
tblivet Sep 9, 2026
e1f3fbc
feat: refinements
tblivet Sep 9, 2026
bbd31df
Merge pull request #1087 from Hlavtox/use-new-image-feature
Hlavtox Sep 14, 2026
e651fe7
fix: review
tblivet Sep 15, 2026
bcb0dbb
fix: product list rating error
tblivet Sep 16, 2026
fb2cc29
Update modules/blockreassurance/views/templates/hook/displayBlock.tpl
tblivet Sep 17, 2026
9a49671
Update modules/blockreassurance/views/templates/hook/displayBlockProd…
tblivet Sep 17, 2026
90d3e56
Update modules/blockreassurance/views/templates/hook/displayBlockWhit…
tblivet Sep 17, 2026
0101ff2
Merge pull request #1102 from boo-code/fix/reassurance-icons-decorati…
tblivet Sep 18, 2026
a3cdc9c
Merge pull request #1105 from boo-code/feat/order-product-line-hook-2…
tblivet Sep 18, 2026
9f9bdd5
Find the form validation submit control with querySelector again
boo-code Sep 21, 2026
c1105fd
Submit the guest order tracking form with POST
boo-code Sep 1, 2026
d389aae
Keep the order lookup in the guest account transformation form
boo-code Sep 21, 2026
30fc55a
fix: qa review
tblivet Sep 21, 2026
d2d21b4
Merge pull request #1097 from boo-code/fix/guest-tracking-form-post-1…
tblivet Sep 21, 2026
ddd4668
fix: header stamps
tblivet Sep 21, 2026
eaa3080
Render the product tax infos block only when it has something to show
boo-code Sep 21, 2026
719536f
Merge pull request #1107 from tblivet/fix/product-list-rating-error
tblivet Sep 22, 2026
f8aeb4d
Merge pull request #1098 from boo-code/fix/tax-label-setting-on-produ…
tblivet Sep 22, 2026
0998a99
Merge pull request #1099 from boo-code/fix/checkout-address-form-nest…
tblivet Sep 22, 2026
e24b9a4
feat: review
tblivet Sep 23, 2026
375cbcd
chore: update nodejs and caniuse-lite
tblivet Sep 24, 2026
01a3336
Merge pull request #1112 from tblivet/feat/update-deps
tblivet Sep 24, 2026
7b9c18a
chore: update
tblivet Sep 24, 2026
d220f6b
Merge pull request #1104 from tblivet/feat/qa-docs
tblivet Sep 24, 2026
9a290ed
chore: prepare release
tblivet Sep 24, 2026
0fb7cef
Merge pull request #1113 from tblivet/chore/release-2.1.1
tblivet Sep 24, 2026
91c3737
Merge remote-tracking branch 'upstream/2.x' into chore/merge-2.x-into…
tblivet Sep 24, 2026
1f80ade
fix: drop @types/jquery re-added by the 2.x merge
tblivet Sep 24, 2026
93a0267
fix: remove dev files for security
tblivet Sep 24, 2026
82922cb
Merge pull request #1116 from tblivet/fix/files-security-qa
tblivet Sep 24, 2026
238ecf4
chore: prepare release
tblivet Sep 24, 2026
4e52b64
Merge pull request #1117 from tblivet/chore/release-2.1.2
tblivet Sep 24, 2026
84b5429
Merge remote-tracking branch 'upstream/2.x' into chore/merge-2.x-into…
tblivet Oct 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ runs:
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version: 20
node-version-file: .nvmrc

- name: Install dependencies
run: npm ci
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,6 @@ ai-prompt.md
chat-history.md
scratchpad.md
.ai-history/

# Hummingbird QA seed: per-shop record of what --undo must restore
docs/qa/.seed-state.json
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v20.19.4
v24.21.0
6 changes: 6 additions & 0 deletions CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,9 @@ When asked to write or modify code, you MUST follow these rules:
9. **Keep it modular (SRP):** Separate logic into cohesive components.
10. **Smarty variables:** Ensure proper escaping for Smarty variables
(e.g., `{$variable|escape:'html':'UTF-8'}`).
11. **QA checklist sync:** `docs/qa/testing-checklist.md` lists what to test in
the theme, and every list in it is derived from a file in the repository.
When you change hook assignments in `config/theme.yml`, add or remove a
module override under `modules/`, add a page or partial under `templates/`,
or change the breakpoints, you MUST update that file in the same change. Its
section 9 maps each list back to its source.
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Follow the [README.md](README.md) for detailed setup and build instructions.
[Set up your Git for contributing](https://build.prestashop-project.org/howtos/misc/set-up-your-git-for-contributing/)
2. Use an editor that supports .editorconfig.<br>
[Download an EditorConfig plugin](http://editorconfig.org/#download).
3. Make sure you have [Node.js v20](https://nodejs.org/en/download/) installed.
3. Make sure you have [Node.js v24](https://nodejs.org/en/download/) installed.
4. If using AI tools to write code, make sure your agent has read the
[`CONTEXT.md`](README.md#🤖-ai-assisted-development) file.

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

![CI](https://github.com/PrestaShop/hummingbird/actions/workflows/lint.yml/badge.svg)
![Docker Ready](https://img.shields.io/badge/docker-ready-blue.svg)
![Node.js v20](https://img.shields.io/badge/node.js-20.x-blue.svg)
![Node.js v24](https://img.shields.io/badge/node.js-24.x-blue.svg)
![License](https://img.shields.io/badge/license-AFL%203.0-lightgray.svg)

Hummingbird is a modern theme for PrestaShop. See the
Expand All @@ -15,7 +15,7 @@ supported by each branch.
| ----------- | ---------- | ------ |
| `develop` | `~10.0.0` | Next major |
| `2.x` | `~9.2.0` | Maintained |
| `2.1.0` | `~9.2.0` | Released |
| `2.1.x` | `~9.2.0` | Released |
| `2.0.0` | `~9.1.0` | Released |

> [!NOTE]
Expand All @@ -33,8 +33,8 @@ supported by each branch.

To work on Hummingbird, you'll need:

- Node.js **v20.x**.
- npm **v8**.
- Node.js **v24.x**.
- npm **v11**.

## 📑 Table of Contents

Expand Down
7 changes: 6 additions & 1 deletion config/theme.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: hummingbird
display_name: Hummingbird
version: 2.1.0
version: 2.1.2
author:
name: "PrestaShop Team and Contributors"
email: "pub@prestashop.com"
Expand Down Expand Up @@ -219,6 +219,11 @@ global_settings:
width: 2000
height: 400
scope: [categories]
manufacturer_product_page:
width: 98
height: 98
scope: [manufacturers]
image_fitment: bound

theme_settings:
rtl_generation: false
Expand Down
520 changes: 520 additions & 0 deletions docs/qa/testing-checklist.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@

<span class="reassurance__image">
{if $block['custom_icon']}
<img {if $block['is_svg']}class="svg img-fluid invisible" {/if}src="{$block['custom_icon']}">
<img class="{if $block['is_svg']}svg invisible{/if} img-fluid" src="{$block['custom_icon']}" alt="">
{elseif $block['icon']}
<img class="svg img-fluid invisible" src="{$block['icon']}">
<img class="svg img-fluid invisible" src="{$block['icon']}" alt="">
{/if}
</span>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@

<span class="reassurance__image">
{if $block['custom_icon']}
<img {if $block['is_svg']}class="svg img-fluid invisible" {/if}src="{$block['custom_icon']}">
<img class="{if $block['is_svg']}svg invisible{/if} img-fluid" src="{$block['custom_icon']}" alt="">
{elseif $block['icon']}
<img class="svg img-fluid invisible" src="{$block['icon']}">
<img class="svg img-fluid invisible" src="{$block['icon']}" alt="">
{/if}
</span>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@

<span class="reassurance__image">
{if $block['custom_icon']}
<img {if $block['is_svg']}class="svg img-fluid invisible" {/if}src="{$block['custom_icon']}">
<img class="{if $block['is_svg']}svg invisible{/if} img-fluid" src="{$block['custom_icon']}" alt="">
{elseif $block['icon']}
<img class="svg img-fluid invisible" src="{$block['icon']}">
<img class="svg img-fluid invisible" src="{$block['icon']}" alt="">
{/if}
</span>

Expand Down
15 changes: 8 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"name": "hummingbird",
"version": "2.1.0",
"version": "2.1.2",
"description": "Hummingbird development theme for PrestaShop",
"engines": {
"node": ">= 20"
"node": ">= 24"
},
"main": "index.js",
"scripts": {
Expand Down
55 changes: 55 additions & 0 deletions src/js/form-validation.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/**
* For the full copyright and license information, please view the
* LICENSE.md file that was distributed with this source code.
*/
import selectorsMap from '@constants/selectors-map';
import initFormValidation from './form-validation';

const setUp = (markup: string) => {
document.body.innerHTML = markup;

window.Theme = {
...window.Theme,
selectors: selectorsMap,
};

initFormValidation();
};

describe('Form validation', () => {
it('binds the submit button nested inside the form', () => {
setUp(`
<form id="f" data-ps-action="form-validation">
<input name="a" required>
<button type="submit" data-ps-action="form-validation-submit">Send</button>
</form>
`);

const form = document.querySelector('#f') as HTMLFormElement;
const button = document.querySelector('button') as HTMLButtonElement;
button.click();

expect(form.classList.contains('was-validated')).toBe(true);
});

it('binds a link marked as the submit control', () => {
// WHY: CONTEXT.md documents data-ps-action="form-validation-submit" for buttons and links,
// and a link is not a listed form control, so this is what form.elements would miss.
setUp(`
<form id="f" data-ps-action="form-validation">
<input name="a" required>
<a href="#" data-ps-action="form-validation-submit">Send</a>
</form>
`);

const form = document.querySelector('#f') as HTMLFormElement;
const link = document.querySelector('a') as HTMLAnchorElement;
link.click();

expect(form.classList.contains('was-validated')).toBe(true);
});

it('does not throw when the form has no submit button', () => {
expect(() => setUp('<form id="f" data-ps-action="form-validation"></form>')).not.toThrow();
});
});
Loading
Loading