ba_spree 1.0.0

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 (160) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +673 -0
  3. data/README.md +150 -0
  4. data/app/assets/config/manifest.js +1 -0
  5. data/app/assets/javascripts/ba_spree/admin_overrides/query_builder_controller.js +505 -0
  6. data/app/assets/javascripts/ba_spree/storefront/ba_spree_local_time.js +9 -0
  7. data/app/assets/stylesheets/spree/admin/custom.scss +40 -0
  8. data/app/controllers/ba_spree/checkout_controller_decorator.rb +111 -0
  9. data/app/controllers/ba_spree/store_controller_decorator.rb +55 -0
  10. data/app/controllers/concerns/ba_spree/theme_concern_decorator.rb +16 -0
  11. data/app/controllers/spree/admin/assets_controller_decorator.rb +48 -0
  12. data/app/controllers/spree/admin/products_controller_decorator.rb +25 -0
  13. data/app/controllers/spree/admin/promotion_rules_controller_decorator.rb +30 -0
  14. data/app/controllers/spree/admin/users_controller_decorator.rb +34 -0
  15. data/app/controllers/spree/contacts_controller_decorator.rb +23 -0
  16. data/app/controllers/spree/digital_links_controller.rb +61 -0
  17. data/app/controllers/spree/orders_controller_decorator.rb +24 -0
  18. data/app/decorators/ba_spree/product_pricing_decorator.rb +65 -0
  19. data/app/decorators/spree/current_decorator.rb +17 -0
  20. data/app/decorators/spree/money_decorator.rb +51 -0
  21. data/app/decorators/spree/order_email_subscriber_decorator.rb +64 -0
  22. data/app/decorators/spree/page_sections/featured_posts_decorator.rb +17 -0
  23. data/app/helpers/currency_rounding_helper.rb +10 -0
  24. data/app/helpers/spree/admin/filter_params_preservation.rb +130 -0
  25. data/app/helpers/spree/admin/navigation_helper_decorator.rb +23 -0
  26. data/app/helpers/spree/admin/promotion_rules_helper_decorator.rb +33 -0
  27. data/app/helpers/spree/admin/table_helper_decorator.rb +40 -0
  28. data/app/helpers/spree/base_helper_decorator.rb +63 -0
  29. data/app/helpers/spree/checkout_analytics_helper_decorator.rb +32 -0
  30. data/app/javascript/ba_spree/controllers/disable_when_hidden_controller.js +70 -0
  31. data/app/javascript/ba_spree/index.js +11 -0
  32. data/app/javascript/spree/admin/controllers/calendar_range_controller.js +61 -0
  33. data/app/javascript/spree/admin/controllers/slug_form_controller.js +17 -0
  34. data/app/models/ba_spree/address_decorator.rb +43 -0
  35. data/app/models/ba_spree/adjustment_decorator.rb +13 -0
  36. data/app/models/ba_spree/order_decorator.rb +95 -0
  37. data/app/models/ba_spree/order_updater_decorator.rb +33 -0
  38. data/app/models/ba_spree/payment_method_decorator.rb +10 -0
  39. data/app/models/ba_spree/product_decorator.rb +44 -0
  40. data/app/models/ba_spree/store_decorator.rb +23 -0
  41. data/app/models/ba_spree/variant_decorator.rb +49 -0
  42. data/app/models/concerns/spree/adjustment_source_decorator.rb +66 -0
  43. data/app/models/concerns/spree/product_property_metafields.rb +52 -0
  44. data/app/models/spree/adjustable/adjuster/promotion_decorator.rb +16 -0
  45. data/app/models/spree/admin/table/filter_decorator.rb +52 -0
  46. data/app/models/spree/admin/table/filter_group_decorator.rb +64 -0
  47. data/app/models/spree/asset_decorator.rb +102 -0
  48. data/app/models/spree/contact_decorator.rb +22 -0
  49. data/app/models/spree/digital_link_decorator.rb +9 -0
  50. data/app/models/spree/export_decorator.rb +34 -0
  51. data/app/models/spree/line_item_destroy_callback_decorator.rb +30 -0
  52. data/app/models/spree/metafield_definition_decorator.rb +34 -0
  53. data/app/models/spree/option_type_decorator.rb +22 -0
  54. data/app/models/spree/option_value_decorator.rb +19 -0
  55. data/app/models/spree/option_value_variant_decorator.rb +30 -0
  56. data/app/models/spree/order/address_book_decorator.rb +14 -0
  57. data/app/models/spree/order_merger_decorator.rb +29 -0
  58. data/app/models/spree/price_rules/customer_group_rule_decorator.rb +18 -0
  59. data/app/models/spree/price_rules/user_rule_decorator.rb +25 -0
  60. data/app/models/spree/price_rules/volume_rule_decorator.rb +25 -0
  61. data/app/models/spree/price_rules/zone_rule_decorator.rb +25 -0
  62. data/app/models/spree/pricing/batch_resolver.rb +96 -0
  63. data/app/models/spree/promotion_handler/cart_decorator.rb +51 -0
  64. data/app/models/spree/stock/packer_decorator.rb +61 -0
  65. data/app/models/spree/stock/prioritizer_decorator.rb +27 -0
  66. data/app/models/spree/tax_rate_decorator.rb +93 -0
  67. data/app/models/spree/taxon_decorator.rb +42 -0
  68. data/app/models/spree/user_bill_address_sync_decorator.rb +33 -0
  69. data/app/overrides/add_ba_spree_storefront_javascript_importmap_tags.rb +8 -0
  70. data/app/overrides/add_cache_to_product_listing_page.rb +41 -0
  71. data/app/overrides/add_class_to_login_link.rb +6 -0
  72. data/app/overrides/add_confirm_state_to_checkout_content_block.rb.rb +30 -0
  73. data/app/overrides/add_promotions_nav.rb +8 -0
  74. data/app/overrides/add_turbo_frame_to_admin_order_line_item_edit_link.rb +23 -0
  75. data/app/overrides/add_turbo_frame_to_promotion_action_edit_link.rb +20 -0
  76. data/app/overrides/add_turbo_stream_format_to_cart_path_in_cart_pane.rb +8 -0
  77. data/app/overrides/ba_spree_local_time_add_custom_javascript_import_map_tags.rb +8 -0
  78. data/app/overrides/disable_hidden_bill_address_fields_on_payment.rb +15 -0
  79. data/app/overrides/disable_turbo_on_user_registration_form.rb +18 -0
  80. data/app/overrides/fix_coupon_apply_button_layout.rb +7 -0
  81. data/app/overrides/hide_gift_cards_and_store_credits_from_account_nav.rb +11 -0
  82. data/app/overrides/hide_shipping_message_for_digital_only_orders.rb +15 -0
  83. data/app/overrides/localize_apply_button_text.rb +6 -0
  84. data/app/overrides/localize_newsletter_button_text.rb +6 -0
  85. data/app/overrides/replace_announcement_bar_text.rb +6 -0
  86. data/app/overrides/replace_button_edit_checkout.rb +10 -0
  87. data/app/overrides/replace_checkout_delivery_info.rb +6 -0
  88. data/app/overrides/replace_checkout_pay_button_with_dynamic_label.rb +14 -0
  89. data/app/overrides/replace_variant_not_available_button.rb +19 -0
  90. data/app/overrides/set_logo_width_height_in_admin_store_basic_form.rb +12 -0
  91. data/app/overrides/show_breadcrumbs_on_taxon_page.rb +30 -0
  92. data/app/overrides/show_individual_adjustments_in_order_details.rb +18 -0
  93. data/app/overrides/show_only_selected_payment_method_on_confirm.rb +29 -0
  94. data/app/overrides/spree/admin/preserve_filter_params_across_table_forms.rb +64 -0
  95. data/app/overrides/spree/admin/promotion_rules/_promotion_rule/set_turbo_frame_on_edit_link.html.erb.deface +11 -0
  96. data/app/overrides/spree/admin/stores/add_special_instruction_message_settings.rb +17 -0
  97. data/app/overrides/use_absolute_time_for_order_header_completed_at.rb +15 -0
  98. data/app/presenters/spree/mega_nav_presenter_decorator.rb +26 -0
  99. data/app/services/ba_spree/setup_service.rb +144 -0
  100. data/app/services/spree/assets/position_normalizer.rb +67 -0
  101. data/app/services/spree/products/duplicator_decorator.rb +39 -0
  102. data/app/services/spree/products/prepare_nested_attributes_decorator.rb +58 -0
  103. data/app/views/spree/addresses/edit.html.erb +64 -0
  104. data/app/views/spree/admin/orders/_order.html.erb +32 -0
  105. data/app/views/spree/admin/orders/_summary.html.erb +122 -0
  106. data/app/views/spree/admin/shared/_custom_head.html.erb +56 -0
  107. data/app/views/spree/admin/shared/sidebar/_promotions_nav.html.erb +55 -0
  108. data/app/views/spree/admin/stores/_special_instruction_message_settings.html.erb +14 -0
  109. data/app/views/spree/checkout/_accept_marketing_checkbox.html.erb +40 -0
  110. data/app/views/spree/checkout/_address.html.erb +135 -0
  111. data/app/views/spree/checkout/_confirm.html.erb +25 -0
  112. data/app/views/spree/checkout/_line_item.html.erb +26 -0
  113. data/app/views/spree/checkout/_payment_method_confirm.html.erb +8 -0
  114. data/app/views/spree/checkout/_payment_methods.html.erb +88 -0
  115. data/app/views/spree/checkout/_summary.html.erb +146 -0
  116. data/app/views/spree/shared/_purchased_items_table.html.erb +60 -0
  117. data/app/views/spree/shared/_purchased_items_table.text.erb +24 -0
  118. data/app/views/themes/default/spree/orders/_empty.html.erb +14 -0
  119. data/app/views/themes/default/spree/orders/_summary.html.erb +87 -0
  120. data/app/views/themes/default/spree/orders/edit.turbo_stream.erb +10 -0
  121. data/app/views/themes/default/spree/page_sections/_featured_taxons.html.erb +38 -0
  122. data/app/views/themes/default/spree/page_sections/_header.html.erb +124 -0
  123. data/app/views/themes/default/spree/page_sections/_newsletter.html.erb +4 -0
  124. data/app/views/themes/default/spree/page_sections/_post_details.html.erb +22 -0
  125. data/app/views/themes/default/spree/page_sections/_product_details.html.erb +88 -0
  126. data/app/views/themes/default/spree/page_sections/_product_grid.html.erb +58 -0
  127. data/app/views/themes/default/spree/page_sections/nav/_desktop.html.erb +94 -0
  128. data/app/views/themes/default/spree/page_sections/nav/_mobile.html.erb +148 -0
  129. data/app/views/themes/default/spree/posts/_post.html.erb +16 -0
  130. data/app/views/themes/default/spree/products/_description.html.erb +7 -0
  131. data/app/views/themes/default/spree/products/_details.html.erb +65 -0
  132. data/app/views/themes/default/spree/products/_json_ld_variant.html.erb +15 -0
  133. data/app/views/themes/default/spree/products/_price.html.erb +76 -0
  134. data/app/views/themes/default/spree/products/_swiper.html.erb +90 -0
  135. data/app/views/themes/default/spree/shared/_account_pane.html.erb +18 -0
  136. data/app/views/themes/default/spree/shared/_cart_icon.html.erb +19 -0
  137. data/app/views/themes/default/spree/shared/_line_item_options.html.erb +9 -0
  138. data/app/views/themes/default/spree/shared/_logo.html.erb +39 -0
  139. data/app/views/themes/default/spree/shared/_nav_taxon_square_image.html.erb +8 -0
  140. data/app/views/themes/default/spree/shared/_order_shipment.html.erb +79 -0
  141. data/app/views/themes/default/spree/shared/_search.html.erb +33 -0
  142. data/app/views/themes/default/spree/shared/icons/_cart.html.erb +6 -0
  143. data/app/views/themes/default/spree/shared/icons/_cart_48.html.erb +8 -0
  144. data/app/views/themes/default/spree/shared/icons/_heart.html.erb +15 -0
  145. data/config/importmap.rb +12 -0
  146. data/config/initializers/admin_navigation.rb +43 -0
  147. data/config/initializers/spree.rb +6 -0
  148. data/config/initializers/spree_admin_label_i18n_alias.rb +52 -0
  149. data/config/initializers/spree_admin_tables.rb +57 -0
  150. data/config/initializers/spree_permitted_attributes.rb +1 -0
  151. data/config/locales/en.yml +15 -0
  152. data/config/locales/ja.yml +18 -0
  153. data/config/locales/spree.en.yml +4 -0
  154. data/config/locales/spree.ja.yml +3493 -0
  155. data/lib/ba_spree/engine.rb +41 -0
  156. data/lib/ba_spree/spree_events_dedup_patch.rb +44 -0
  157. data/lib/ba_spree/version.rb +3 -0
  158. data/lib/ba_spree.rb +20 -0
  159. data/lib/generators/ba_spree/install/install_generator.rb +85 -0
  160. metadata +594 -0
@@ -0,0 +1,148 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/page_sections/nav/_mobile.html.erb %>
2
+ <%# reason: モバイルメニューに nav_taxon_square_image を追加し settings_modal を eager 読み込みに変更している %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/cdbd620ff4b0a09724ff5c060eb90ef002539222 %>
4
+ <div class="bg-background border-default border-t overflow-x-hidden h-full w-screen overflow-y-hidden">
5
+ <div class="h-full flex transform has-[.currency-and-locale-modal:not(.hidden)]:transform-none relative transition-transform duration-300" data-controller="mobile-nav">
6
+ <div class="w-screen shrink-0 flex flex-col h-full grow-0">
7
+ <div class="flex-grow overflow-y-scroll">
8
+ <% if section.blocks.any? %>
9
+ <% section.blocks.each do |block| %>
10
+ <% presenter = Spree::MegaNavPresenter.new(block) %>
11
+ <% presenter.instance_variable_set(:@max_columns, 1000) %>
12
+ <% main_link = presenter.main_link %>
13
+ <% next unless main_link.present? %>
14
+
15
+ <% if presenter.columns.any? %>
16
+ <button
17
+ data-action="click->mobile-nav#openSubmenu touch->mobile-nav#openSubmenu"
18
+ data-title="<%= main_link.label.downcase.strip %>"
19
+ class='text-base text-left tracking-widest p-4 w-full uppercase border-default border-b flex justify-between items-center header--nav-link'>
20
+ <span class="flex items-start text-left">
21
+ <%= render('spree/shared/nav_taxon_square_image', taxon: main_link.linkable) %>
22
+ <%= main_link.label %>
23
+ </span>
24
+ <%= render 'spree/shared/icons/chevron_right', size: 12 %>
25
+ <template>
26
+ <button data-action="click->mobile-nav#closeSubmenu touch->mobile-nav#closeSubmenu" class='flex gap-2 items-center text-base font-medium text-left tracking-widest p-4 w-full uppercase border-default border-b header--mega-nav-close-submenu bg-background sticky top-0'>
27
+ <%= render 'spree/shared/icons/chevron', size: 12 %>
28
+ <span class="flex items-start text-left">
29
+ <%= render('spree/shared/nav_taxon_square_image', taxon: main_link.linkable) %>
30
+ <%= main_link.label %>
31
+ </span>
32
+ </button>
33
+ <div class="p-4 pt-0 w-full gap-2 flex flex-col">
34
+ <% if block.try(:featured_taxon) %>
35
+ <% cache spree_storefront_base_cache_scope.call(block.featured_taxon) do %>
36
+ <% if block.featured_taxon.image.attached? && block.featured_taxon.image.variable? %>
37
+ <%= link_to spree_storefront_resource_url(block.featured_taxon), class: "flex w-full pt-4" do %>
38
+ <%= spree_image_tag(block.featured_taxon.image, width: 140, height: 140, class: 'h-auto aspect-1 w-2/5 max-w-[140px]', loading: :lazy, alt: block.featured_taxon.name) %>
39
+ <span class="bg-accent w-full flex items-center justify-center header--mega-nav-featured-taxon-title text-sm tracking-widest font-semibold uppercase">
40
+ <%= Spree.t(:explore_taxon, taxon_name: block.featured_taxon.name) %>
41
+ </span>
42
+ <% end %>
43
+ <% end %>
44
+ <% end %>
45
+ <% end %>
46
+ <% presenter.columns.each do |column| %>
47
+ <div
48
+ data-controller='toggle'
49
+ data-toggle-class='hidden'
50
+ class="w-full flex flex-col gap-2">
51
+ <% unless presenter.columns.size == 1 %>
52
+ <button
53
+ type="button"
54
+ class="text-base font-semibold tracking-widest uppercase w-full inline-flex justify-between py-3"
55
+ data-action='click->toggle#toggle touch->toggle#toggle'>
56
+ <span class="flex items-start text-left">
57
+ <%= render('spree/shared/nav_taxon_square_image', taxon: column.view_all_linkable) %>
58
+ <%= column.title %>
59
+ </span>
60
+ <span data-toggle-target='toggleable'>
61
+ <%= render 'spree/shared/icons/chevron_down' %>
62
+ </span>
63
+ <span data-toggle-target='toggleable' class="hidden rotate-180">
64
+ <%= render 'spree/shared/icons/chevron_down' %>
65
+ </span>
66
+ </button>
67
+ <% end %>
68
+ <div
69
+ class="<%= class_names(hidden: presenter.columns.size != 1) %>"
70
+ data-toggle-target='toggleable'>
71
+ <% column.links.each do |link| %>
72
+ <%= page_builder_link_to link, data: { title: link.label.downcase.strip }, class: "block text-base py-3 w-full uppercase header--nav-link", target: link.open_in_new_tab.presence && "_blank", rel: link.open_in_new_tab.presence && "noopener noreferrer" do %>
73
+ <span class="flex items-start text-left">
74
+ <%= render('spree/shared/nav_taxon_square_image', taxon: link.linkable) %>
75
+ <%= link.label %>
76
+ </span>
77
+ <% end %>
78
+ <% end %>
79
+ </div>
80
+ </div>
81
+ <% end %>
82
+ </div>
83
+ </template>
84
+ </button>
85
+ <% else %>
86
+ <%= page_builder_link_to main_link, data: { title: main_link.label.downcase.strip }, class: "block text-base tracking-widest p-4 w-full uppercase border-default border-b header--nav-link", target: main_link.open_in_new_tab.presence && "_blank", rel: main_link.open_in_new_tab.presence && "noopener noreferrer" do %>
87
+ <span><%= main_link.label %></span>
88
+ <% end %>
89
+ <% end %>
90
+ <% end %>
91
+ <% else %>
92
+ <% section.links.each do |link| %>
93
+ <%= page_builder_link_to link, data: { title: link.label.downcase.strip }, class: "block text-base tracking-widest p-4 w-full uppercase border-default border-b header--nav-link", target: link.open_in_new_tab.presence && "_blank", rel: link.open_in_new_tab.presence && "noopener noreferrer" do %>
94
+ <span><%= link.label %></span>
95
+ <% end %>
96
+ <% end %>
97
+ <% end %>
98
+ </div>
99
+ <div class='p-4 bg-accent'>
100
+ <% if try_spree_current_user %>
101
+ <%= link_to spree.account_path, class: 'btn-secondary gap-2 flex justify-center items-center w-full' do %>
102
+ <span><%= Spree.t(:my_account) %></span>
103
+ <%= render 'spree/shared/icons/account' %>
104
+ <% end %>
105
+
106
+ <% if defined?(spree_logout_path) %>
107
+ <%= link_to spree_logout_path, method: :delete, data: { turbo_method: :delete }, class: 'btn-secondary gap-2 flex justify-center items-center w-full mt-2' do %>
108
+ <%= Spree.t(:sign_out) %>
109
+ <% end %>
110
+ <% end %>
111
+ <% else %>
112
+ <button
113
+ id='mobile-menu'
114
+ data-action='click->slideover-account#toggle click@window->slideover-account#hide click->toggle-menu#hide touch->toggle-menu#hide'
115
+ class='btn-secondary gap-2 flex justify-center items-center w-full'>
116
+ <span><%= Spree.t(:my_account) %></span>
117
+ <%= render 'spree/shared/icons/account' %>
118
+ </button>
119
+ <% end %>
120
+
121
+ <% if should_render_currency_dropdown? || should_render_locale_dropdown? %>
122
+ <div class="flex mt-4 justify-end">
123
+ <div data-controller="modal" data-modal-disable-backdrop="true">
124
+ <%= button_tag class: 'flex gap-2 items-center', data: {action: 'modal#open'} do %>
125
+ <% if should_render_currency_dropdown? %>
126
+ <span>
127
+ <%= "#{current_currency} (#{currency_money(current_currency).symbol})" %>
128
+ </span>
129
+ <% end %>
130
+ <% if should_render_locale_dropdown? %>
131
+ <span class="uppercase <%= should_render_currency_dropdown?.presence && "border-l pl-2" %> flex items-center gap-1">
132
+ <% country_code = current_locale.to_s.split("-").last %>
133
+ <%= svg_country_icon(country_code) %>
134
+ <span ><%= country_code %></span>
135
+ </span>
136
+ <% end %>
137
+ <% end %>
138
+ <%= turbo_frame_tag :settings_modal, src: spree.settings_path, loading: :eager %>
139
+ </div>
140
+ </div>
141
+ <% end %>
142
+ </div>
143
+ </div>
144
+ <% if section.blocks.any? %>
145
+ <div class="w-screen shrink-0 relative overflow-y-scroll" data-mobile-nav-target="submenuContainer"></div>
146
+ <% end %>
147
+ </div>
148
+ </div>
@@ -0,0 +1,16 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/posts/_post.html.erb %>
2
+ <%# reason: 投稿カードを swiper スライドから通常ブロックに変更し、日時を local_date 表示にしている %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/cdbd620ff4b0a09724ff5c060eb90ef002539222 %>
4
+ <div id="<%= dom_id(post) %>">
5
+ <%= link_to spree.post_path(post), class: 'block hover:opacity-70 transition-opacity' do %>
6
+ <div class="h-[200px] w-full bg-gray-100">
7
+ <% if post.image.attached? && post.image.variable? %>
8
+ <%= spree_image_tag(post.image, width: 400, height: 200, class: 'h-full w-full object-cover object-center', loading: :lazy, alt: post.title) %>
9
+ <% end %>
10
+ </div>
11
+
12
+ <h1 class="uppercase text-lg font-medium mt-4"><%= post.title %></h1>
13
+ <div class="mt-2 text-sm"><%= local_date(post.published_at) %></div>
14
+ <div class="mt-4"><%= post.shortened_description %></div>
15
+ <% end %>
16
+ </div>
@@ -0,0 +1,7 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/products/_description.html.erb %>
2
+ <%# reason: 商品説明を常に全文表示にする(read more / Read less トグルと truncate を撤去) %>
3
+ <% if product.storefront_description.present? %>
4
+ <div class="prose product-description text-sm">
5
+ <%= raw(product.storefront_description) %>
6
+ </div>
7
+ <% end %>
@@ -0,0 +1,65 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/products/_details.html.erb %>
2
+ <%# reason: 商品説明の read more を無効化し、商品プロパティの取得・並び順を独自実装に置き換えたコピー上書き %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/cdbd620ff4b0a09724ff5c060eb90ef002539222 %>
4
+ <% cache spree_base_cache_scope.call(product) do %>
5
+ <% if product.storefront_description.present? %>
6
+ <% description_text = strip_tags(product.storefront_description) %>
7
+ <div data-controller="read-more" class="py-4 flex flex-col gap-4" data-read-more-more-text-value="<%= Spree.t(:read_more) %>" data-read-more-less-text-value="Read less">
8
+ <div class="prose product-description text-sm">
9
+ <%= raw(product.storefront_description) %>
10
+ </div>
11
+ <%
12
+ =begin%>
13
+ <% if description_text.size > 250 %>
14
+ <%= button_tag Spree.t(:read_more), data: { action: "read-more#toggle" }, class: "font-bold underline text-sm" %>
15
+ <% end %>
16
+ <%
17
+ =end%>
18
+ </div>
19
+ <% end %>
20
+
21
+ <div class="st-accordion" data-controller="accordion">
22
+ <% short_description = product.property_metafield_value('short_description') %>
23
+
24
+ <% if short_description.present? %>
25
+ <div class="product-property py-4 border-b border-default">
26
+ <%= link_to '#property_details', class: 'text-sm uppercase tracking-widest inline-flex w-full justify-between !border-b-transparent', data: { action: 'accordion#toggle' } do %>
27
+ <%= Spree.t(:details) %>
28
+ <%= render 'spree/shared/icons/chevron_down' %>
29
+ <% end %>
30
+ <div class="text-sm st-accordion__content" data-accordion-id="property_details">
31
+ <div class="pt-4"><%= product.description %></div>
32
+ </div>
33
+ </div>
34
+ <% end %>
35
+
36
+ <% shipping_policy = current_store.customer_shipping_policy %>
37
+ <% if shipping_policy.present? %>
38
+ <div class="product-property py-4 border-b border-default">
39
+ <%= link_to "#property_shipping_policy", class: 'text-sm uppercase tracking-widest inline-flex w-full justify-between !border-b-transparent', data: { action: 'accordion#toggle' } do %>
40
+ <%= Spree.t(:shipping_policy) %>
41
+ <%= render 'spree/shared/icons/chevron_down' %>
42
+ <% end %>
43
+ <div class="text-sm st-accordion__content" data-accordion-id="property_shipping_policy">
44
+ <div class="pt-4"><%= shipping_policy %></div>
45
+ </div>
46
+ </div>
47
+ <% end %>
48
+
49
+ <%# ProductProperty -> metafields 移行(Spree 5.4 の Property 削除対応)。
50
+ フロント表示対象(namespace=properties かつ display_on=both)の metafield を表示。
51
+ short_description は上で「詳細」として別表示済みのため、ここでは除外して二重表示を防ぐ。 %>
52
+ <% product.front_end_property_metafields.reject { |mf| mf.key == 'short_description' }.each do |metafield| %>
53
+ <div class="product-property py-4 border-b border-default">
54
+
55
+ <%= link_to "#property_#{metafield.id}", class: 'text-sm uppercase tracking-widest inline-flex w-full justify-between !border-b-transparent', data: { action: 'accordion#toggle' } do %>
56
+ <%= metafield.name %>
57
+ <%= render 'spree/shared/icons/chevron_down' %>
58
+ <% end %>
59
+ <div class="text-sm st-accordion__content" data-accordion-id="property_<%= metafield.id %>">
60
+ <div class="pt-4"><%= simple_format(metafield.value) %></div>
61
+ </div>
62
+ </div>
63
+ <% end %>
64
+ </div>
65
+ <% end %>
@@ -0,0 +1,15 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/products/_json_ld_variant.html.erb %>
2
+ <%# reason: JSON-LD の variant 配列出力で末尾以外にカンマを付与して有効な JSON にしている %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/69b4884768f21e2ed68e82521538a8a7b8736b09 %>
4
+ <% cache ["json-ld-variant", spree_base_cache_scope, variant.cache_key_with_version] do %>
5
+ {
6
+ "@type": "Offer",
7
+ <% if variant.sku.present? %>
8
+ "sku": <%= variant.sku.to_json.html_safe %>,
9
+ <% end %>
10
+ "availability": "http://schema.org/<%= variant.available? ? 'InStock' : 'OutOfStock' %>",
11
+ "price": <%= variant.amount_in(current_currency).to_json.html_safe %>,
12
+ "priceCurrency": <%= current_currency.to_json.html_safe %>,
13
+ "url": <%= spree.product_url(product, variant_id: variant.id, host: current_store.url_or_custom_domain).to_json.html_safe %>
14
+ }<%= ',' if defined?(variant_iteration) && !variant_iteration.last? %>
15
+ <% end %>
@@ -0,0 +1,76 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/products/_price.html.erb %>
2
+ <%# reason: 価格表示の From 表記を「〜」に変更し、税込み表示 (show_tax_included) ラベルを追加している %>
3
+ <%# Spree 5.3 追従: price_in → pricing context 経由の価格取得(pricing_context_for_variant / price_for) %>
4
+ <%# @see https://github.com/be-agile/giga-repeat/commit/8426d0be020a6751c7d476e265e716d1973048d4 %>
5
+ <% use_variant ||= false %>
6
+ <% sold_out ||= !product.available? %>
7
+ <% price_class ||= ''%>
8
+ <% price_container_class ||= '' %>
9
+ <% selected_variant ||= nil %>
10
+ <% show_tax_included ||= false %>
11
+ <div class="<%= price_class %>">
12
+ <div class="flex flex-col gap-3 <%= price_container_class %>">
13
+ <%
14
+ if use_variant
15
+ target = selected_variant
16
+ sold_out = selected_variant.nil?
17
+ if sold_out
18
+ target = @variant_from_options
19
+ sold_out = @variant_from_options.nil?
20
+ end
21
+ else
22
+ target = product
23
+ sold_out = !product.available?
24
+ end
25
+
26
+ target ||= product
27
+
28
+ # Spree 5.3 追従: price_in → pricing context 経由(default_variant / price_for)
29
+ variant_for_context = target.is_a?(Spree::Product) ? target.default_variant : target
30
+ pricing_context = pricing_context_for_variant(variant_for_context)
31
+ price = variant_for_context.price_for(pricing_context)
32
+ money_price = price.display_amount
33
+
34
+ if target.is_a?(Spree::Product) && !use_variant && product.price_varies?(current_currency)
35
+ price = target.lowest_price(current_currency)
36
+ money_price = price.display_amount
37
+ money_price = "#{money_price} 〜"
38
+ end
39
+
40
+ # 税込み表示用のロジック
41
+ tax_label = ''
42
+ if show_tax_included && product.tax_category.present?
43
+ tax_rates = Spree::TaxRate.for_tax_category(product.tax_category).included_in_price
44
+ if tax_rates.any?
45
+ tax_label = " #{Spree.t(:tax_included)}"
46
+ end
47
+ end
48
+ %>
49
+ <div>
50
+ <% if price.compare_at_amount.present? && price.compare_at_amount > price.amount %>
51
+ <span class="hidden">
52
+ <%= Spree.t(:regular_price) %>
53
+ </span>
54
+ <p class="inline pr-2 opacity-50 line-through">
55
+ <%= price.display_compare_at_amount %><%= tax_label %>
56
+ </p>
57
+ <span class="hidden pr-2">
58
+ <%= Spree.t(:sale_price) %>
59
+ </span>
60
+ <p class="inline text-danger">
61
+ <%= money_price %><%= tax_label %>
62
+ </p>
63
+ <% else %>
64
+ <span class="hidden">
65
+ <%= Spree.t(:regular_price) %>
66
+ </span>
67
+
68
+ <% if price&.amount.nil? %>
69
+ <span class="uppercase"><%= Spree.t(:not_available) %></span>
70
+ <% else %>
71
+ <p><%= money_price %><%= tax_label %></p>
72
+ <% end %>
73
+ <% end %>
74
+ </div>
75
+ </div>
76
+ </div>
@@ -0,0 +1,90 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/products/_swiper.html.erb %>
2
+ <%# reason: 商品カルーセルのブレークポイント別表示数 (1024px:6 等) を変更したコピー上書き %>
3
+ <%# Spree 5.3 追従: prev/next ボタンから aria: { hidden: true } を削除 %>
4
+ <%# @see https://github.com/be-agile/giga-repeat/commit/cdbd620ff4b0a09724ff5c060eb90ef002539222 %>
5
+ <% desktop_slides ||= 4 %>
6
+ <% slides_per_view ||= desktop_slides %>
7
+ <% arrows_on_top ||= false %>
8
+ <% pagination ||= 'bottom' %>
9
+ <% layout ||= 'swiper' %>
10
+ <% heading ||= nil %>
11
+
12
+ <% heading_size = case section.try(:preferred_heading_size)
13
+ when 'small'
14
+ 'text-base font-medium'
15
+ when 'medium'
16
+ 'text-lg lg:text-xl font-medium'
17
+ when 'large'
18
+ 'text-xl lg:text-2xl font-medium'
19
+ else
20
+ heading_class || ''
21
+ end %>
22
+
23
+ <% heading_alignment = case section.try(:preferred_heading_alignment)
24
+ when 'left'
25
+ 'text-left'
26
+ when 'center'
27
+ 'text-center'
28
+ when 'right'
29
+ 'text-right'
30
+ else
31
+ ''
32
+ end %>
33
+
34
+ <% if heading.present? %>
35
+ <h3 class='<%= "#{heading_size} font-medium uppercase #{heading_alignment}" %> pb-8'>
36
+ <%= heading %>
37
+ </h3>
38
+ <% end %>
39
+
40
+ <div class='flex h-full relative'>
41
+ <div class='swiper-container overflow-hidden flex-1 pr-8 lg:pr-0 -mx-4 lg:mx-0 flex flex-col <%= pagination == 'bottom' ? 'lg:flex-col lg:justify-between lg:h-full' : 'lg:flex-col-reverse' %>' data-controller='carousel' data-carousel-options-value='{
42
+ "slidesPerView": 2,
43
+ "centeredSlides": false,
44
+ "spaceBetween": 16,
45
+ "grabCursor": true,
46
+ "breakpoints": {
47
+ "1024": {
48
+ "slidesPerView": 6,
49
+ "spaceBetween": 24
50
+ },
51
+ "768": {
52
+ "slidesPerView": 4,
53
+ "spaceBetween": 24
54
+ }
55
+ },
56
+ "navigation": {
57
+ "nextEl": ".swiper-custom-button-next-<%= section.id %>",
58
+ "prevEl": ".swiper-custom-button-prev-<%= section.id %>"
59
+ }
60
+ }'>
61
+ <div class='swiper-wrapper px-4 lg:px-0 h-auto'>
62
+ <%= render 'spree/shared/products', products: products %>
63
+ </div>
64
+ <div class='-mr-8 lg:mr-0 flex <%= arrows_on_top ? 'hidden' : '' %> <%= pagination == 'bottom' ? 'justify-end lg:mt-6' : 'justify-between lg:mb-8 items-end' %> <%= section.try(:heading_alignment) == 'right' && pagination != 'bottom' ? 'lg:flex-row-reverse' : '' %>'>
65
+ <div class="mt-8 mx-4 lg:m-0 lg:shrink-0 gap-2 w-full flex <%= arrows_on_top ? 'md:hidden' : '' %> items-center <%= section.try(:layout) == 'swiper' && section.try(:show_more_button) ? 'justify-between' : 'lg:w-auto justify-end' %>">
66
+ <% if section.try(:preferred_layout) == 'swiper' && section.try(:preferred_show_more_button) %>
67
+ <%= link_to section.try(:preferred_show_all_button_link), class: "#{section.try(:preferred_button_style) == 'primary' ? 'btn-primary' : 'btn-secondary'} w-full lg:w-72 block text-center", data: { turbo_frame: '_top' } do %>
68
+ <%= section.button_text %>
69
+ <% end %>
70
+ <% end %>
71
+ <% unless arrows_on_top %>
72
+ <div class='justify-center items-center gap-4 md:flex hidden'>
73
+ <%= button_tag class: "swiper-custom-button-prev-#{section.id} disabled:opacity-50" do %>
74
+ <%= render 'spree/shared/icons/chevron' %>
75
+ <% end %>
76
+ <%= button_tag class: "swiper-custom-button-next-#{section.id} disabled:opacity-50" do %>
77
+ <%= render 'spree/shared/icons/chevron_right' %>
78
+ <% end %>
79
+ </div>
80
+ <% end %>
81
+ </div>
82
+ </div>
83
+ <%= 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 %>
84
+ <%= render 'spree/shared/icons/chevron' %>
85
+ <% end %>
86
+ <%= 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 %>
87
+ <%= render 'spree/shared/icons/chevron_right' %>
88
+ <% end %>
89
+ </div>
90
+ </div>
@@ -0,0 +1,18 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/_account_pane.html.erb %>
2
+ <%# reason: アカウントスライドオーバーに overflow-auto を追加するなど軽微な表示調整をしたコピー上書き %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/cdbd620ff4b0a09724ff5c060eb90ef002539222 %>
4
+ <div id='account-pane' data-turbo-permanent data-slideover-account-target='overlay' class='fixed inset-0 flex flex-row-reverse z-50 transition-opacity hidden'>
5
+ <div class='fixed inset-0'>
6
+ <div data-action='click->slideover-account#toggle' class='absolute inset-0 bg-background opacity-75'></div>
7
+ </div>
8
+ <div id='slideover-account' data-slideover-account-target='menu' class='relative overflow-auto sidebar-pane flex-1 !flex flex-col w-full bg-background text-text md:border-l border-default transition ease-in-out duration-300 translate-x-full'>
9
+ <div class='p-4 gap-4 flex-shrink-0 flex items-center justify-between border-b border-default z-50'>
10
+ <button data-action='slideover-account#toggle' class='flex items-center justify-center rounded-full focus:outline-none focus:bg-background' aria-label='Close account sidebar'>
11
+ <%= render 'spree/shared/icons/cross' %>
12
+ </button>
13
+ <span class='text-xl font-medium uppercase leading-loose'><%= Spree.t(:account) %></span>
14
+ <span></span>
15
+ </div>
16
+ <%= turbo_frame_tag "login", src: spree_login_path, loading: "lazy" %>
17
+ </div>
18
+ </div>
@@ -0,0 +1,19 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/_cart_icon.html.erb %>
2
+ <%# reason: カートアイコンに title 属性とカウンター位置の調整を加えたコピー上書き %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/issues/920 %>
4
+ <% item_count ||= current_order&.item_count %>
5
+
6
+ <%= turbo_frame_tag "cart-icon-#{item_count}", target: '_top' do %>
7
+ <%= link_to spree.cart_path,
8
+ class: 'relative block w-6',
9
+ id: "cart-pane-link",
10
+ title: Spree.t('storefront.cart.items_in_cart'),
11
+ data: { action: 'click->slideover#toggle click@window->slideover#hide' },
12
+ onclick: 'event.preventDefault()' do %>
13
+ <%= render 'spree/shared/icons/cart' %>
14
+ <span class='cart-counter w-full text-[10px] font-extrabold absolute text-center' style='top: -10px; left: 50%; transform: translateX(-50%);'>
15
+ <%= item_count if item_count&.positive? %>
16
+ </span>
17
+ <span class='sr-only'><%= Spree.t('storefront.cart.items_in_cart') %></span>
18
+ <% end %>
19
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/_line_item_options.html.erb %>
2
+ <%# reason: オプション表示を色見本付きの詳細表示から options_text の簡易表示に置き換えている %>
3
+ <%# Spree 5.3 追従: 本家の変更(option_values.includes(:option_type) 削除)は本独自実装に該当箇所が無いため版上げのみ %>
4
+ <%# @see https://github.com/be-agile/giga-repeat/issues/859 %>
5
+ <% if line_item.variant.options_text.present? %>
6
+ <div class="px-2 text-sm line-clamp-2">
7
+ <%= line_item.variant.options_text %>
8
+ </div>
9
+ <% end %>
@@ -0,0 +1,39 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/_logo.html.erb %>
2
+ <%# reason: ロゴが未添付のときストアロゴにフォールバックする条件と、既定 logo_css に object-contain を設定している %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/d0f0ce224dd5696b38676f2fe4dc1e52743f115a %>
4
+ <% logo = current_store.logo unless logo&.attached? %>
5
+ <% height ||= 64 %>
6
+ <% logo_css ||= 'object-contain' %>
7
+
8
+ <%= link_to spree.root_path, id: 'site-logo' do %>
9
+ <% if logo.present? && logo.attached? && logo.variable? %>
10
+ <% aspect_ratio = spree_asset_aspect_ratio(logo) %>
11
+ <% logo_style = "aspect-ratio: #{aspect_ratio};" %>
12
+ <% if aspect_ratio.to_f > 10 %>
13
+ <% mobile_class = "h-[16px]" %>
14
+ <% desktop_class = "md:h-[32px]" %>
15
+ <% elsif aspect_ratio.to_f > 5 %>
16
+ <% mobile_class = "h-[25px]" %>
17
+ <% desktop_class = "md:h-[32px]" %>
18
+ <% elsif aspect_ratio.to_f < 3 %>
19
+ <% mobile_class = "h-[32px]" %>
20
+ <% desktop_class = "md:h-[64px]" %>
21
+ <% else %>
22
+ <% mobile_class = "h-[32px]" %>
23
+ <% end %>
24
+ <% if defined?(height) && height > 0 %>
25
+ <% logo_style += "--desktop-height: #{height}px;" %>
26
+ <% cdn_height = height %>
27
+ <% desktop_class = "custom-desktop-height" %>
28
+ <% elsif aspect_ratio.to_f < 3 %>
29
+ <% cdn_height = 64 %>
30
+ <% else %>
31
+ <% cdn_height = 32 %>
32
+ <% end %>
33
+ <% img_class = "w-auto #{mobile_class} #{desktop_class} #{logo_css}" %>
34
+ <% variant_options = spree_image_variant_options(resize_to_fit: [nil, cdn_height * 3]) %>
35
+ <%= image_tag main_app.cdn_image_url(logo.variant(variant_options)), class: img_class, alt: current_store.name + " logo", style: logo_style, height: cdn_height %>
36
+ <% else %>
37
+ <h1 class='text-lg text-center uppercase'><%= current_store.name %></h1>
38
+ <% end %>
39
+ <% end %>
@@ -0,0 +1,8 @@
1
+ <% cache ['nav_taxon_square_image', taxon.cache_key_with_version] do %>
2
+ <% if taxon.present? && taxon.class.name == 'Spree::Taxon' && taxon.square_image&.attached? && taxon.square_image.variable? %>
3
+ <% img_class ||= 'mr-1' %>
4
+ <% width ||= 25 %>
5
+ <% height ||= 25 %>
6
+ <%= spree_image_tag(taxon.square_image, class: img_class, width: width, height: height, loading: :lazy) %>
7
+ <% end %>
8
+ <% end %>
@@ -0,0 +1,79 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/_order_shipment.html.erb %>
2
+ <%# reason: 配送追跡リンクを tracking_url_for_shipment ベースに変更し、発送後の案内文を追加している %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/b27d2f2b8c7a6c585333d4b74edafb9fe11a2aa0 %>
4
+ <li class="border border-accent mb-4">
5
+ <div class="p-4 lg:p-6">
6
+ <div class="flex flex-col lg:flex-row lg:gap-6 gap-4">
7
+ <% ship_address = shipment.address || shipment.order.ship_address %>
8
+ <% if shipment.order.requires_ship_address? && ship_address.present? %>
9
+ <div class="text-sm lg:w-1/2">
10
+ <div class="tracking-widest uppercase mb-1">
11
+ <%= Spree.t(:delivery_address) %>
12
+ </div>
13
+ <div class="!leading-[1.375rem] text-neutral-800">
14
+ <%= render "spree/shared/address",
15
+ address: ship_address %>
16
+ </div>
17
+ </div>
18
+ <% end %>
19
+ <div class="text-sm lg:w-1/2 lg:flex justify-between">
20
+ <div>
21
+ <div class="tracking-widest uppercase mb-1">
22
+ <%= Spree.t(:shipping_method) %>
23
+ </div>
24
+ <div class="!leading-[1.375rem] text-neutral-800">
25
+ <% if shipment.shipping_method.present? %>
26
+ <%= shipment.shipping_method.name %>
27
+ <% else %>
28
+ <%= Spree.t("shipment_states.canceled") %>
29
+ <% end %>
30
+ <br>
31
+ <% if shipment.stock_location.present? %>
32
+ <%= Spree.t(:shipped_from) %>
33
+ <%= shipment.stock_location.name %>
34
+ <% end %>
35
+ </div>
36
+ </div>
37
+ <% unless shipment.digital? %>
38
+ <div class="mt-4 lg:-mt-2 lg:-mr-2">
39
+ <% tracking_url = tracking_url_for_shipment(shipment) %>
40
+ <% if shipment.shipped? && shipment.tracked? && tracking_url.present? %>
41
+ <%= link_to Spree.t(:track_items),
42
+ tracking_url,
43
+ class: "!px-3 !py-1 block btn-primary !leading-6 text-sm text-center",
44
+ target: :_blank %>
45
+ <% else %>
46
+ <button
47
+ class="
48
+ !px-3 !py-1 block btn-primary !leading-6 text-sm text-center
49
+ "
50
+ disabled
51
+ ><%= Spree.t(:track_items) %></button>
52
+ <div class="text-xs text-neutral pt-2">※発送後、配送状況を確認できます</div>
53
+ <% end %>
54
+ </div>
55
+ <% end %>
56
+ </div>
57
+ </div>
58
+ <% if shipment.canceled? && shipment.shipped_at.nil? %>
59
+ <div class="alert-warning text-sm uppercase mt-3 px-3 py-2">
60
+ <strong><%= Spree.t(:shipment) %>
61
+ <%= Spree.t("shipment_states.canceled") %></strong>.
62
+ <%= Spree.t(:shipment_refunded_message) %>
63
+ </div>
64
+ <% elsif (!shipment.tracked? || !shipment.shipped?) && !shipment.digital? %>
65
+ <div class="text-sm uppercase text-center bg-neutral-100 mt-3 px-3 py-2">
66
+ <%= Spree.t(:no_tracking_present) %>
67
+ </div>
68
+ <% end %>
69
+ </div>
70
+
71
+ <hr class="border-accent mx-4">
72
+
73
+ <div class="grid grid-cols-1 gap-4 lg:gap-6 p-4 lg:p-6">
74
+ <%= render partial: "spree/shared/order_line_item",
75
+ collection: shipment.inventory_units,
76
+ as: :inventory_unit,
77
+ cached: spree_storefront_base_cache_scope %>
78
+ </div>
79
+ </li>
@@ -0,0 +1,33 @@
1
+ <%# @gem-override spree_storefront-5.3.6/app/views/themes/default/spree/shared/_search.html.erb %>
2
+ <%# reason: 検索オーバーレイからヘッダーロゴ表示を除くなどレイアウトを調整したコピー上書き %>
3
+ <%# @see https://github.com/be-agile/giga-repeat/commit/cdbd620ff4b0a09724ff5c060eb90ef002539222 %>
4
+ <%# Spree 5.3 追従: 検索候補 dialog に aria-label を i18n 対応で付与 %>
5
+ <div id="search-suggestions" role="dialog" aria-label="<%= Spree.t(:search) %>" aria-modal="true">
6
+ <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 %>">
7
+ <%= form_with url: spree.search_path, method: :get, local: true do %>
8
+ <div class='page-container bg-background flex w-full my-2 lg:mb-3 animate-fadeIn'>
9
+ <%= button_tag class: 'items-center justify-center pr-4', type: :button, data: { action: "click->search-suggestions#hide touch->search-suggestions#hide" } do %>
10
+ <span class='sr-only'><%= Spree.t(:close) %></span>
11
+ <%= render 'spree/shared/icons/close', color: 'black' %>
12
+ <% end %>
13
+
14
+ <div class='relative mx-auto w-full md:w-1/2' data-controller='clear-input'>
15
+ <%= button_tag type: 'submit', class: 'absolute left-2 top-2' do %>
16
+ <%= render 'spree/shared/icons/search' %>
17
+ <% end %>
18
+
19
+ <%= text_field_tag :q, params[:q], class: 'p-2 lg:text-sm !leading-6 pl-10 !h-auto bg-accent w-full uppercase pr-14 focus:outline-none text-input', placeholder: Spree.t(:search), data: { search_suggestions_target: 'input', clear_input_target: 'input' } %>
20
+ <%= button_tag class: 'hidden text-sm font-semibold absolute top-2 right-2 uppercase h-6 tracking-widest', data: { clear_input_target: 'button', action: 'click->clear-input#clear touch->clear-input#clear click->search-suggestions#clear touch->search-suggestions#clear' } do %>
21
+ <%= Spree.t(:clear) %>
22
+ <% end %>
23
+ </div>
24
+ </div>
25
+ <% end %>
26
+ <div id="search-suggestions-content" class="flex-grow hidden" data-show-class="animate-fadeIn"></div>
27
+ </div>
28
+
29
+ <!-- rendering search flyover skeleton -->
30
+ <template id="loading">
31
+ <%= render 'spree/search/suggestions' %>
32
+ </template>
33
+ </div>