spree_storefront 5.2.5 → 5.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spree/cart_methods.rb +4 -2
  3. data/app/controllers/spree/account/orders_controller.rb +1 -1
  4. data/app/controllers/spree/addresses_controller.rb +2 -2
  5. data/app/controllers/spree/checkout_controller.rb +14 -8
  6. data/app/controllers/spree/line_items_controller.rb +3 -3
  7. data/app/controllers/spree/order_status_controller.rb +1 -1
  8. data/app/controllers/spree/orders_controller.rb +3 -3
  9. data/app/controllers/spree/store_controller.rb +2 -1
  10. data/app/helpers/spree/canonical_url_helper.rb +27 -0
  11. data/app/helpers/spree/checkout_analytics_helper.rb +1 -4
  12. data/app/helpers/spree/checkout_helper.rb +3 -1
  13. data/app/helpers/spree/products_helper.rb +1 -1
  14. data/app/views/spree/checkout/_line_items.html.erb +3 -5
  15. data/app/views/themes/default/spree/page_sections/_footer.html.erb +6 -6
  16. data/app/views/themes/default/spree/page_sections/_header.html.erb +5 -2
  17. data/app/views/themes/default/spree/products/_quantity_selector.html.erb +6 -4
  18. data/app/views/themes/default/spree/products/_swiper.html.erb +2 -2
  19. data/app/views/themes/default/spree/products/_variant_options.html.erb +6 -2
  20. data/app/views/themes/default/spree/products/_variant_picker.html.erb +5 -3
  21. data/app/views/themes/default/spree/shared/_custom_head.html.erb +7 -0
  22. data/app/views/themes/default/spree/shared/_line_item_options.html.erb +1 -1
  23. data/app/views/themes/default/spree/shared/_search.html.erb +1 -1
  24. data/config/locales/en.yml +2 -0
  25. data/lib/generators/spree/storefront/install/templates/application.css +1 -4
  26. data/lib/spree/storefront.rb +0 -1
  27. metadata +6 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc8589dcfb75063c9c8730ad1f2f0912b4b167faf52bb7ddf2b6483967d8c66e
4
- data.tar.gz: 23134df31cfed598ed91bcec9501b9c3c019b4bd73c3ddf5ea7579e9e2043215
3
+ metadata.gz: c186ef5bda630498c3468d11a61144b479179026bb2178d341b1b10d85ede273
4
+ data.tar.gz: a83841e5ed48fb94a94511b5b6bf849b56ddbea3ed2ba3039e3b7854e17f52fc
5
5
  SHA512:
6
- metadata.gz: 1e94f62c94ff8d7ae85c11ac84753a40ba2d523fc83087b7db3eb9bf0bcc2606e789f39b5d681c6baee4729785d6d67e693bdfef45c7c54fe967634ea02ef993
7
- data.tar.gz: f24717be8ef70ae6414fc76dd1c7acc7cdfe705a303966a71a14be3549e7d42e5a3ece3fc3925a29cfb3e7f5b65cba9793d83c1be894af45d6694153eb9df75a
6
+ metadata.gz: 169a0eead13f4e94330d83d93a30e5b66734d8d0a83b40365c24588649c02e040859a611636e1e90c11a119295fcac06f263b4ff89a6529b7795ff89872393ca
7
+ data.tar.gz: 793f3e4698d50a1f271225ac10cd2f2033774a3bf38bcfb76a8493bdb4c9ba9eec123a5e6d82ae2ec23fc10db6185a911dd1821b279c4795614cafd2bbdaee5b
@@ -39,12 +39,14 @@ module Spree
39
39
  {
40
40
  variant: [
41
41
  :images,
42
+ :prices,
43
+ { stock_items: :stock_location },
42
44
  { option_values: [:option_type] },
43
45
  {
44
46
  product: [
45
- :variants,
46
47
  :variant_images,
47
- { master: :images }
48
+ { master: :images },
49
+ { variants: :images }
48
50
  ]
49
51
  }
50
52
  ]
@@ -26,7 +26,7 @@ module Spree
26
26
  end
27
27
 
28
28
  def order_finder
29
- Spree::Dependencies.completed_order_finder.constantize
29
+ Spree.completed_order_finder
30
30
  end
31
31
 
32
32
  def load_order_details
@@ -92,11 +92,11 @@ module Spree
92
92
  end
93
93
 
94
94
  def create_service
95
- Spree::Dependencies.address_create_service.constantize
95
+ Spree.address_create_service
96
96
  end
97
97
 
98
98
  def update_service
99
- Spree::Dependencies.address_update_service.constantize
99
+ Spree.address_update_service
100
100
  end
101
101
 
102
102
  def load_and_authorize_address
@@ -196,8 +196,14 @@ module Spree
196
196
 
197
197
  # completed orders shouldn't be updated anymore
198
198
  unless @order.completed?
199
- @order.assign_attributes(order_tracking_params)
200
- @order.update_columns(order_tracking_params)
199
+ tracking_params = order_tracking_params
200
+ changed_params = tracking_params.reject { |key, value| @order.public_send(key) == value }
201
+
202
+ if changed_params.any?
203
+ @order.assign_attributes(changed_params)
204
+ @order.update_columns(changed_params)
205
+ end
206
+
201
207
  @order.associate_user!(try_spree_current_user) if try_spree_current_user && @order.user.nil?
202
208
  end
203
209
  @current_order = @order # for compatibility with the rest of storefront, analytics, etc
@@ -342,7 +348,7 @@ module Spree
342
348
  packages = @order.shipments.map(&:to_package)
343
349
  @differentiator = Spree::Stock::Differentiator.new(@order, packages)
344
350
  @differentiator.missing.each do |variant, quantity|
345
- Spree::Dependencies.cart_remove_item_service.constantize.call(order: @order, variant: variant, quantity: quantity)
351
+ Spree.cart_remove_item_service.call(order: @order, variant: variant, quantity: quantity)
346
352
  end
347
353
  end
348
354
  end
@@ -365,19 +371,19 @@ module Spree
365
371
  end
366
372
 
367
373
  def add_store_credit_service
368
- Spree::Dependencies.checkout_add_store_credit_service.constantize
374
+ Spree.checkout_add_store_credit_service
369
375
  end
370
376
 
371
377
  def remove_store_credit_service
372
- Spree::Dependencies.checkout_remove_store_credit_service.constantize
378
+ Spree.checkout_remove_store_credit_service
373
379
  end
374
380
 
375
381
  def remove_line_item_service
376
- Spree::Dependencies.cart_remove_line_item_service.constantize
382
+ Spree.cart_remove_line_item_service
377
383
  end
378
384
 
379
385
  def coupon_handler
380
- Spree::Dependencies.coupon_handler.constantize
386
+ Spree.coupon_handler
381
387
  end
382
388
 
383
389
  def accurate_title
@@ -387,7 +393,7 @@ module Spree
387
393
  def remove_expired_gift_card
388
394
  return unless @order.gift_card.present? && @order.gift_card.expired?
389
395
 
390
- Spree::Dependencies.gift_card_remove_service.constantize.call(order: @order)
396
+ Spree.gift_card_remove_service.call(order: @order)
391
397
  end
392
398
  end
393
399
  end
@@ -89,15 +89,15 @@ module Spree
89
89
  end
90
90
 
91
91
  def cart_add_item_service
92
- Spree::Dependencies.cart_add_item_service.constantize
92
+ Spree.cart_add_item_service
93
93
  end
94
94
 
95
95
  def cart_remove_line_item_service
96
- Spree::Dependencies.cart_remove_line_item_service.constantize
96
+ Spree.cart_remove_line_item_service
97
97
  end
98
98
 
99
99
  def cart_set_item_quantity_service
100
- Spree::Dependencies.cart_set_item_quantity_service.constantize
100
+ Spree.cart_set_item_quantity_service
101
101
  end
102
102
  end
103
103
  end
@@ -26,7 +26,7 @@ module Spree
26
26
  end
27
27
 
28
28
  def order_finder
29
- Spree::Dependencies.completed_order_finder.constantize
29
+ Spree.completed_order_finder
30
30
  end
31
31
  end
32
32
  end
@@ -81,15 +81,15 @@ module Spree
81
81
  end
82
82
 
83
83
  def cart_remove_out_of_stock_items_service
84
- Spree::Dependencies.cart_remove_out_of_stock_items_service.constantize
84
+ Spree.cart_remove_out_of_stock_items_service
85
85
  end
86
86
 
87
87
  def cart_update_service
88
- Spree::Dependencies.cart_update_service.constantize
88
+ Spree.cart_update_service
89
89
  end
90
90
 
91
91
  def complete_order_finder
92
- Spree::Dependencies.completed_order_finder.constantize
92
+ Spree.completed_order_finder
93
93
  end
94
94
 
95
95
  def remove_out_of_stock_items
@@ -15,6 +15,7 @@ module Spree
15
15
  helper 'spree/base'
16
16
  helper 'spree/locale'
17
17
  helper 'spree/storefront_locale'
18
+ helper 'spree/canonical_url'
18
19
  helper 'spree/currency'
19
20
  helper 'spree/addresses'
20
21
  helper 'spree/wishlist'
@@ -124,7 +125,7 @@ module Spree
124
125
  end
125
126
 
126
127
  def storefront_products_finder
127
- @storefront_products_finder ||= Spree::Dependencies.products_finder.constantize
128
+ @storefront_products_finder ||= Spree.products_finder
128
129
  end
129
130
 
130
131
  def storefront_products_scope
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module CanonicalUrlHelper
3
+ # Generates a canonical link tag for the current page
4
+ #
5
+ # @param host [String] The host/domain to use (defaults to current store's domain)
6
+ # @return [ActiveSupport::SafeBuffer] The canonical link tag HTML
7
+ def canonical_tag(host = nil)
8
+ tag.link(href: canonical_href(host), rel: :canonical)
9
+ end
10
+
11
+ # Returns the full canonical URL for the current request
12
+ #
13
+ # @param host [String] The host/domain to use (defaults to request host)
14
+ # @return [String] The full canonical URL
15
+ def canonical_href(host = nil)
16
+ host ||= request.host
17
+ "#{request.protocol}#{host}#{canonical_path}"
18
+ end
19
+
20
+ # Returns the canonical path for the current request (without query parameters)
21
+ #
22
+ # @return [String] The canonical path
23
+ def canonical_path
24
+ request.path.presence || '/'
25
+ end
26
+ end
27
+ end
@@ -19,12 +19,9 @@ module Spree
19
19
  end
20
20
 
21
21
  def order_tracking_params
22
- tracking_params = {
22
+ {
23
23
  last_ip_address: request.remote_ip,
24
24
  }
25
-
26
- tracking_params[:ahoy_visit_id] = current_visit.id if @order.respond_to?(:ahoy_visit) && defined?(current_visit) && current_visit&.id
27
- tracking_params
28
25
  end
29
26
 
30
27
  def track_checkout_started
@@ -49,7 +49,9 @@ module Spree
49
49
  end
50
50
 
51
51
  def quick_checkout_enabled?(order)
52
- order.quick_checkout_available?
52
+ Rails.cache.fetch("#{order.cache_key_with_version}/quick-checkout-enabled") do
53
+ order.quick_checkout_available?
54
+ end
53
55
  end
54
56
 
55
57
  def can_use_store_credit_on_checkout?(order)
@@ -147,7 +147,7 @@ module Spree
147
147
  return Spree::Taxon.none if product.main_taxon.blank?
148
148
 
149
149
  # using find_all as we already iterate over the taxons in #product_json_ld_breadcrumbs
150
- product.main_taxon.self_and_ancestors.find_all { |taxon| taxon.depth != 0 }
150
+ product.main_taxon.self_and_ancestors.includes(:translations).find_all { |taxon| taxon.depth != 0 }
151
151
  end
152
152
 
153
153
  # Generates the JSON-LD elements for a list of products.
@@ -1,7 +1,5 @@
1
1
  <%= turbo_frame_tag :checkout_line_items, id: 'line_items', target: '_top' do %>
2
- <% cache spree_storefront_base_cache_scope.call(order.line_items.cache_key_with_version) do %>
3
- <div class="overflow-y-auto line-items flex flex-col gap-5 pt-5 md:pt-0" data-checkout-summary-target="line_items">
4
- <%= render collection: order.line_items, partial: 'spree/checkout/line_item', cached: spree_storefront_base_cache_scope %>
5
- </div>
6
- <% end %>
2
+ <div class="overflow-y-auto line-items flex flex-col gap-5 pt-5 md:pt-0" data-checkout-summary-target="line_items">
3
+ <%= render collection: order.line_items, partial: 'spree/checkout/line_item', cached: spree_storefront_base_cache_scope %>
4
+ </div>
7
5
  <% end %>
@@ -12,9 +12,9 @@
12
12
  </div>
13
13
  <div class="grid grid-cols-1 lg:grid-cols-4 grow w-full">
14
14
  <% section.blocks.includes(:links).each do |block| %>
15
- <div class="flex-grow gap-1 flex flex-col py-6 md:py-0 border-b md:border-none border-default lg:mb-6">
15
+ <nav class="flex-grow gap-1 flex flex-col py-6 md:py-0 border-b md:border-none border-default lg:mb-6" aria-label="<%= block.preferred_label %>">
16
16
  <div <%= block_attributes(block) %>>
17
- <h3 class="text-sm py-2"><%= block.preferred_label %></h3>
17
+ <div class="text-sm py-2"><%= block.preferred_label %></div>
18
18
  <ul class="uppercase text-sm tracking-wider !leading-4 flex flex-col gap-1">
19
19
  <% block.links.each do |link| %>
20
20
  <li class='py-2'>
@@ -25,12 +25,12 @@
25
25
  <% end %>
26
26
  </ul>
27
27
  </div>
28
- </div>
28
+ </nav>
29
29
  <% end %>
30
30
  </div>
31
- <div class="flex-grow gap-4 flex flex-col justify-between lg:w-60">
31
+ <nav class="flex-grow gap-4 flex flex-col justify-between lg:w-60" aria-label="<%= Spree.t(:follow_us) %>">
32
32
  <div class="gap-1 flex flex-col py-6 md:py-0">
33
- <h3 class="text-sm py-2"><%= Spree.t(:follow_us) %></h3>
33
+ <div class="text-sm py-2"><%= Spree.t(:follow_us) %></div>
34
34
  <div class="flex flex-wrap gap-2 max-w-48 py-2">
35
35
  <% cache spree_storefront_base_cache_scope.call(current_store) do %>
36
36
  <% Spree::Store::SUPPORTED_SOCIAL_NETWORKS.each do |media| %>
@@ -44,7 +44,7 @@
44
44
  <% end %>
45
45
  </div>
46
46
  </div>
47
- </div>
47
+ </nav>
48
48
  </div>
49
49
  <div class="flex justify-end w-full"></div>
50
50
  </div>
@@ -103,11 +103,12 @@
103
103
  <% if show_account_pane? %>
104
104
  <button
105
105
  data-action='click->slideover-account#toggle click@window->slideover-account#hide click->toggle-menu#hide touch->toggle-menu#hide'
106
+ aria-label='Open account panel'
106
107
  >
107
108
  <%= render 'spree/shared/icons/account', color: section.preferred_text_color, section: section %>
108
109
  </button>
109
110
  <% else %>
110
- <%= link_to spree.account_path do %>
111
+ <%= link_to spree.account_path, 'aria-label': 'Open account panel' do %>
111
112
  <%= render 'spree/shared/icons/account', color: section.preferred_text_color, section: section %>
112
113
  <% end %>
113
114
  <% end %>
@@ -117,12 +118,13 @@
117
118
  <button
118
119
  type="submit"
119
120
  id="wishlist-icon"
121
+ aria-label='Open wishlist'
120
122
  class="flex items-end">
121
123
  <%= render 'spree/shared/wishlist_icon', wishlist: current_wishlist, background_color: section.preferred_background_color %>
122
124
  </button>
123
125
  <% end %>
124
126
  <% else %>
125
- <%= link_to spree.account_wishlist_path, id: "wishlist-icon" do %>
127
+ <%= link_to spree.account_wishlist_path, id: "wishlist-icon", 'aria-label': 'Open wishlist' do %>
126
128
  <%= render 'spree/shared/wishlist_icon', background_color: section.preferred_background_color %>
127
129
  <% end %>
128
130
  <% end %>
@@ -141,6 +143,7 @@
141
143
  data-toggle-menu-target='toggleable'
142
144
  role='dialog'
143
145
  aria-modal='true'
146
+ aria-label='Mobile menu'
144
147
  >
145
148
  <div
146
149
  class='flex justify-between flex-col lg:hidden w-full transition-transform has-[.currency-and-locale-modal:not(.hidden)]:transform-none body header--mobile-menu'
@@ -5,19 +5,21 @@
5
5
  <%= button_tag class: 'decrease-quantity',
6
6
  type: 'button',
7
7
  data: { action: 'click->quantity-picker#decrease',
8
- 'quantity-picker-target': 'decrease' } do %>
8
+ 'quantity-picker-target': 'decrease' },
9
+ aria: { label: Spree.t('storefront.products.decrease_quantity') } do %>
9
10
  <%= render 'spree/shared/icons/minus' %>
10
11
  <% end %>
11
12
  <%= number_field_tag :quantity, 1,
12
13
  min: 1,
13
14
  max: selected_variant&.backorderable? ? nil : selected_variant&.total_on_hand,
14
15
  class: 'quantity-input',
15
- 'aria-label': 'Quantity',
16
- data: { 'quantity-picker-target': 'quantity' } %>
16
+ data: { 'quantity-picker-target': 'quantity' },
17
+ aria: { label: Spree.t(:quantity) } %>
17
18
  <%= button_tag class: 'increase-quantity',
18
19
  type: 'button',
19
20
  data: { action: 'click->quantity-picker#increase',
20
- 'quantity-picker-target': 'increase' } do %>
21
+ 'quantity-picker-target': 'increase' },
22
+ aria: { label: Spree.t('storefront.products.increase_quantity') } do %>
21
23
  <%= render 'spree/shared/icons/plus' %>
22
24
  <% end %>
23
25
  </div>
@@ -75,10 +75,10 @@
75
75
  <% end %>
76
76
  </div>
77
77
  </div>
78
- <%= button_tag class: "absolute p-2 bg-white rounded-full z-10 border border-accent left-0 disabled:hidden hover:border-primary ml-2 lg:ml-0 swiper-custom-button-prev-#{section.id} block #{arrows_on_top ? '' : 'md:hidden'} top-(--top) lg:top-(--desktop-top)", aria: { hidden: true }, style: "--top: calc(#{theme_setting('product_listing_image_height_mobile')}px/2); --desktop-top: calc(#{theme_setting('product_listing_image_height')}px/2); transform: translate(-50%, -50%);" do %>
78
+ <%= button_tag class: "absolute p-2 bg-white rounded-full z-10 border border-accent left-0 disabled:hidden hover:border-primary ml-2 lg:ml-0 swiper-custom-button-prev-#{section.id} block #{arrows_on_top ? '' : 'md:hidden'} top-(--top) lg:top-(--desktop-top)", style: "--top: calc(#{theme_setting('product_listing_image_height_mobile')}px/2); --desktop-top: calc(#{theme_setting('product_listing_image_height')}px/2); transform: translate(-50%, -50%);" do %>
79
79
  <%= render 'spree/shared/icons/chevron' %>
80
80
  <% end %>
81
- <%= button_tag class: "absolute p-2 bg-white rounded-full z-10 border border-accent right-0 disabled:hidden hover:border-primary mr-2 lg:mr-0 swiper-custom-button-next-#{section.id} block #{arrows_on_top ? '' : 'md:hidden'} top-(--top) lg:top-(--desktop-top)", aria: { hidden: true }, style: "--top: calc(#{theme_setting('product_listing_image_height_mobile')}px/2); --desktop-top: calc(#{theme_setting('product_listing_image_height')}px/2); transform: translate(50%, -50%);" do %>
81
+ <%= button_tag class: "absolute p-2 bg-white rounded-full z-10 border border-accent right-0 disabled:hidden hover:border-primary mr-2 lg:mr-0 swiper-custom-button-next-#{section.id} block #{arrows_on_top ? '' : 'md:hidden'} top-(--top) lg:top-(--desktop-top)", style: "--top: calc(#{theme_setting('product_listing_image_height_mobile')}px/2); --desktop-top: calc(#{theme_setting('product_listing_image_height')}px/2); transform: translate(50%, -50%);" do %>
82
82
  <%= render 'spree/shared/icons/chevron_right' %>
83
83
  <% end %>
84
84
  </div>
@@ -32,8 +32,8 @@
32
32
  <% end %>
33
33
  <% end %>
34
34
  <% if option_type.color? %>
35
- <li>
36
- <label class="cursor-pointer">
35
+ <li role="option" aria-label="<%= value.presentation %>">
36
+ <label class="cursor-pointer" aria-label="<%= value.presentation %>">
37
37
  <%= radio_button_tag option_type.presentation, value.name, selected_option == value,
38
38
  name: option_type.presentation,
39
39
  id: "product-option-#{product.id}-#{position}-#{index}",
@@ -56,10 +56,14 @@
56
56
  option_id: option_type.id
57
57
  },
58
58
  name: option_type.presentation,
59
+ role: 'menuitemradio',
60
+ aria: { label: value.presentation },
59
61
  id: "product-option-#{product.id}-#{position}-#{index}"
60
62
  %>
61
63
  <label
62
64
  for='product-option-<%= product.id %>-<%= position %>-<%= index %>'
65
+ role="menuitem"
66
+ aria-label="<%= value.presentation %>"
63
67
  class='text-sm cursor-pointer flex items-center justify-between px-4 py-2.5 hover:bg-accent focus:outline-hidden focus:bg-accent transition duration-150 ease-in-out <%= option_disabled ? "opacity-50 cursor-not-allowed" : "hover:bg-accent" %>'
64
68
  >
65
69
  <p><%=h value.presentation %></p>
@@ -7,19 +7,20 @@
7
7
  <%= option_type_colors_preview_styles(option_type).html_safe %>
8
8
  <fieldset data-option-id="<%= option_type.id %>" class="flex flex-col gap-y-2">
9
9
  <span class="text-sm leading-4 uppercase tracking-widest"><%= option_type.presentation %>: <%= selected_option.presentation %></span>
10
- <ul class="flex items-center flex-wrap gap-1">
10
+ <ul class="flex items-center flex-wrap gap-1" role="listbox" aria-label="<%= option_type.presentation %>">
11
11
  <%= render 'spree/products/variant_options', product: product, option_type: option_type, position: index, selected_variant: selected_variant, options_param_name: options_param_name %>
12
12
  </ul>
13
13
  </fieldset>
14
14
  <% else %>
15
15
  <fieldset data-option-id="<%= option_type.id %>">
16
- <div data-controller="dropdown" class="relative mb-2">
16
+ <div data-controller="dropdown" class="relative mb-2" role="group" aria-label="<%= option_type.presentation %>">
17
17
  <div class="flex items-center justify-between">
18
18
  <button
19
19
  data-action="click->dropdown#toggle click@window->dropdown#hide"
20
20
  type='button'
21
21
  class='text-sm uppercase tracking-widest flex gap-2 items-center border border-default py-2 px-4 rounded-input dropdown-button'
22
- data-dropdown-target="button">
22
+ data-dropdown-target="button"
23
+ aria-label="<%= selected_option ? option_type.presentation+":"+selected_option.presentation : Spree.t('storefront.variant_picker.please_choose', option_type: option_type.presentation) %>">
23
24
  <legend class="mr-2" id="option-<%= option_type.id %>-value">
24
25
  <% if selected_option %>
25
26
  <%= option_type.presentation %>: <span class="option-value-text"><%= selected_option.presentation %></span>
@@ -37,6 +38,7 @@
37
38
  data-transition-leave="transition ease-in"
38
39
  data-transition-leave-from="opacity-100 translate-y-0"
39
40
  data-transition-leave-to="opacity-0 translate-y-1"
41
+ role="menu"
40
42
  class="hidden absolute top-11 left-0 z-[9999] flex w-screen max-w-max shadow-xs">
41
43
  <div class="bg-background border-default border overflow-hidden w-72">
42
44
  <%= render 'spree/products/variant_options', product: product, option_type: option_type, position: index, selected_variant: selected_variant, options_param_name: options_param_name %>
@@ -0,0 +1,7 @@
1
+ <link rel="preconnect" href="https://esm.sh" crossorigin>
2
+ <link rel="dns-prefetch" href="https://esm.sh">
3
+
4
+ <link rel="preload" href="https://esm.sh/swiper@11.2.2/swiper-bundle.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
5
+ <noscript><link rel="stylesheet" href="https://esm.sh/swiper@11.2.2/swiper-bundle.min.css"></noscript>
6
+ <link rel="preload" href="https://esm.sh/flag-icons@7.3.2/css/flag-icons.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
7
+ <noscript><link rel="stylesheet" href="https://esm.sh/flag-icons@7.3.2/css/flag-icons.min.css"></noscript>
@@ -1,4 +1,4 @@
1
- <% options = line_item.variant.option_values.includes(:option_type) %>
1
+ <% options = line_item.variant.option_values %>
2
2
 
3
3
  <% options.select { |ov| ov.option_type.color? }.each do |option| %>
4
4
  <div>
@@ -1,4 +1,4 @@
1
- <div id="search-suggestions" role="dialog" aria-modal="true">
1
+ <div id="search-suggestions" role="dialog" aria-label="Search suggestions" aria-modal="true">
2
2
  <div class='w-full flex flex-col border-b border-default' data-controller="search-suggestions" data-show-class="h-screen min-h-screen" data-search-suggestions-url-value="<%= spree.search_suggestions_path %>">
3
3
  <div class='hidden lg:flex justify-center w-full mt-4 mb-3' id="header-logo">
4
4
  <%= render 'spree/shared/logo', logo: logo, height: logo_height %>
@@ -59,6 +59,8 @@ en:
59
59
  join: Email me about new products, sales, and more. You can unsubscribe at any time.
60
60
  status: You are currently %{status} to the newsletters.
61
61
  products:
62
+ decrease_quantity: Decrease quantity
63
+ increase_quantity: Increase quantity
62
64
  pinch_to_zoom_html: Pinch to<br>zoom
63
65
  primary_image: primary image
64
66
  secondary_image: secondary image
@@ -1,6 +1,3 @@
1
- @import url('https://esm.sh/swiper@11.2.2/swiper-bundle.min.css');
2
- @import url('https://esm.sh/flag-icons@7.3.2/css/flag-icons.min.css');
3
-
4
1
  @import 'tailwindcss';
5
2
  @plugin "@tailwindcss/typography";
6
3
  @plugin "@tailwindcss/forms";
@@ -135,7 +132,7 @@ html {
135
132
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
136
133
  }
137
134
 
138
- body .section-header {
135
+ body:not(.inside-page-builder) > div.section-header {
139
136
  @apply sticky top-0 z-50;
140
137
  }
141
138
 
@@ -1,7 +1,6 @@
1
1
  require 'spree_core'
2
2
 
3
3
  require 'active_link_to'
4
- require 'canonical-rails'
5
4
  require 'heroicon'
6
5
  require 'importmap-rails'
7
6
  require 'local_time'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_storefront
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.5
4
+ version: 5.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vendo Connect Inc.
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 5.2.5
18
+ version: 5.2.6
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 5.2.5
25
+ version: 5.2.6
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: active_link_to
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -37,20 +37,6 @@ dependencies:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
- - !ruby/object:Gem::Dependency
41
- name: canonical-rails
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: 0.2.14
47
- type: :runtime
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: 0.2.14
54
40
  - !ruby/object:Gem::Dependency
55
41
  name: heroicon
56
42
  requirement: !ruby/object:Gem::Requirement
@@ -225,6 +211,7 @@ files:
225
211
  - app/controllers/spree/wishlists_controller.rb
226
212
  - app/finders/spree/storefront/variant_finder.rb
227
213
  - app/helpers/spree/analytics_helper.rb
214
+ - app/helpers/spree/canonical_url_helper.rb
228
215
  - app/helpers/spree/cart_helper.rb
229
216
  - app/helpers/spree/checkout_analytics_helper.rb
230
217
  - app/helpers/spree/checkout_helper.rb
@@ -570,9 +557,9 @@ licenses:
570
557
  - AGPL-3.0-or-later
571
558
  metadata:
572
559
  bug_tracker_uri: https://github.com/spree/spree/issues
573
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.2.5
560
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.2.6
574
561
  documentation_uri: https://docs.spreecommerce.org/
575
- source_code_uri: https://github.com/spree/spree/tree/v5.2.5
562
+ source_code_uri: https://github.com/spree/spree/tree/v5.2.6
576
563
  rdoc_options: []
577
564
  require_paths:
578
565
  - lib