spree_admin 5.1.8 → 5.2.0.rc1

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 (596) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/spree/admin/application.scss +5 -2
  3. data/app/assets/stylesheets/spree/admin/components/_alerts.scss +26 -8
  4. data/app/assets/stylesheets/spree/admin/components/_badges.scss +4 -3
  5. data/app/assets/stylesheets/spree/admin/components/_bulk_panel.scss +11 -26
  6. data/app/assets/stylesheets/spree/admin/components/_buttons.scss +9 -18
  7. data/app/assets/stylesheets/spree/admin/components/_cards.scss +45 -24
  8. data/app/assets/stylesheets/spree/admin/components/_dialogs.scss +204 -0
  9. data/app/assets/stylesheets/spree/admin/components/_dropdowns.scss +39 -13
  10. data/app/assets/stylesheets/spree/admin/components/_filters.scss +28 -10
  11. data/app/assets/stylesheets/spree/admin/components/_main.scss +36 -17
  12. data/app/assets/stylesheets/spree/admin/components/_media_form.scss +11 -3
  13. data/app/assets/stylesheets/spree/admin/components/_modals.scss +1 -1
  14. data/app/assets/stylesheets/spree/admin/components/_navigation.scss +0 -1
  15. data/app/assets/stylesheets/spree/admin/components/_search_picker.scss +0 -8
  16. data/app/assets/stylesheets/spree/admin/components/_sortable_tree.scss +2 -1
  17. data/app/assets/stylesheets/spree/admin/components/_tables.scss +20 -26
  18. data/app/assets/stylesheets/spree/admin/components/_tooltips.scss +20 -0
  19. data/app/assets/stylesheets/spree/admin/components/_variants_form.scss +3 -3
  20. data/app/assets/stylesheets/spree/admin/components/_wizard.scss +27 -0
  21. data/app/assets/stylesheets/spree/admin/global/_variables.scss +61 -43
  22. data/app/assets/stylesheets/spree/admin/plugins/_trix_custom.scss +5 -0
  23. data/app/assets/stylesheets/spree/admin/plugins/tom-select.scss +1 -1
  24. data/app/assets/stylesheets/spree/admin/plugins/uppy_fixes.scss +52 -3
  25. data/app/assets/stylesheets/spree/admin/shared/_base.scss +18 -17
  26. data/app/assets/stylesheets/spree/admin/shared/_forms.scss +7 -4
  27. data/app/assets/stylesheets/spree/admin/views/_page_builder.scss +12 -12
  28. data/app/controllers/concerns/spree/admin/page_builder_concern.rb +4 -4
  29. data/app/controllers/concerns/spree/admin/settings_concern.rb +23 -0
  30. data/app/controllers/spree/admin/admin_users_controller.rb +21 -6
  31. data/app/controllers/spree/admin/assets_controller.rb +3 -5
  32. data/app/controllers/spree/admin/base_controller.rb +2 -1
  33. data/app/controllers/spree/admin/custom_domains_controller.rb +1 -1
  34. data/app/controllers/spree/admin/errors_controller.rb +17 -3
  35. data/app/controllers/spree/admin/exports_controller.rb +7 -1
  36. data/app/controllers/spree/admin/gift_cards_controller.rb +5 -11
  37. data/app/controllers/spree/admin/import_mappings_controller.rb +15 -0
  38. data/app/controllers/spree/admin/import_rows_controller.rb +7 -0
  39. data/app/controllers/spree/admin/imports_controller.rb +66 -0
  40. data/app/controllers/spree/admin/invitations_controller.rb +3 -4
  41. data/app/controllers/spree/admin/json_previews_controller.rb +24 -0
  42. data/app/controllers/spree/admin/metafield_definitions_controller.rb +27 -0
  43. data/app/controllers/spree/admin/metafields_controller.rb +39 -0
  44. data/app/controllers/spree/admin/newsletter_subscribers_controller.rb +8 -0
  45. data/app/controllers/spree/admin/oauth_applications_controller.rb +2 -2
  46. data/app/controllers/spree/admin/orders/user_controller.rb +16 -10
  47. data/app/controllers/spree/admin/orders_controller.rb +17 -3
  48. data/app/controllers/spree/admin/page_blocks_controller.rb +2 -1
  49. data/app/controllers/spree/admin/page_links_controller.rb +9 -1
  50. data/app/controllers/spree/admin/pages_controller.rb +1 -9
  51. data/app/controllers/spree/admin/payment_methods_controller.rb +1 -1
  52. data/app/controllers/spree/admin/policies_controller.rb +28 -0
  53. data/app/controllers/spree/admin/products_controller.rb +8 -5
  54. data/app/controllers/spree/admin/profile_controller.rb +2 -0
  55. data/app/controllers/spree/admin/refund_reasons_controller.rb +1 -1
  56. data/app/controllers/spree/admin/reimbursement_types_controller.rb +1 -1
  57. data/app/controllers/spree/admin/resource_controller.rb +60 -1
  58. data/app/controllers/spree/admin/return_authorization_reasons_controller.rb +1 -1
  59. data/app/controllers/spree/admin/return_authorizations_controller.rb +3 -0
  60. data/app/controllers/spree/admin/roles_controller.rb +1 -2
  61. data/app/controllers/spree/admin/shipping_categories_controller.rb +1 -1
  62. data/app/controllers/spree/admin/shipping_methods_controller.rb +2 -2
  63. data/app/controllers/spree/admin/stock_locations_controller.rb +2 -2
  64. data/app/controllers/spree/admin/store_credits_controller.rb +6 -0
  65. data/app/controllers/spree/admin/storefront_controller.rb +1 -1
  66. data/app/controllers/spree/admin/stores_controller.rb +8 -2
  67. data/app/controllers/spree/admin/tax_categories_controller.rb +1 -1
  68. data/app/controllers/spree/admin/tax_rates_controller.rb +2 -2
  69. data/app/controllers/spree/admin/translations_controller.rb +13 -58
  70. data/app/controllers/spree/admin/users_controller.rb +4 -0
  71. data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +2 -3
  72. data/app/controllers/spree/admin/zones_controller.rb +1 -1
  73. data/app/helpers/spree/admin/assets_helper.rb +42 -0
  74. data/app/helpers/spree/admin/base_helper.rb +58 -11
  75. data/app/helpers/spree/admin/bulk_operations_helper.rb +14 -12
  76. data/app/helpers/spree/admin/dialog_helper.rb +21 -0
  77. data/app/helpers/spree/admin/drawer_helper.rb +21 -0
  78. data/app/helpers/spree/admin/dropdown_helper.rb +32 -0
  79. data/app/helpers/spree/admin/json_preview_helper.rb +75 -0
  80. data/app/helpers/spree/admin/metafields_helper.rb +29 -0
  81. data/app/helpers/spree/admin/navigation_helper.rb +55 -23
  82. data/app/helpers/spree/admin/orders_filters_helper.rb +26 -17
  83. data/app/helpers/spree/admin/page_builder_helper.rb +3 -8
  84. data/app/helpers/spree/admin/payments_helper.rb +2 -0
  85. data/app/helpers/spree/admin/products_helper.rb +0 -12
  86. data/app/helpers/spree/admin/translations_helper.rb +11 -4
  87. data/app/helpers/spree/admin/turbo_helper.rb +17 -4
  88. data/app/javascript/spree/admin/application.js +23 -5
  89. data/app/javascript/spree/admin/controllers/active_storage_upload_controller.js +41 -7
  90. data/app/javascript/spree/admin/controllers/admin_controller.js +0 -9
  91. data/app/javascript/spree/admin/controllers/auto_scroll_controller.js +33 -0
  92. data/app/javascript/spree/admin/controllers/codemirror_controller.js +45 -0
  93. data/app/javascript/spree/admin/controllers/highlight_controller.js +17 -0
  94. data/app/javascript/spree/admin/controllers/import_form_controller.js +27 -0
  95. data/app/javascript/spree/admin/controllers/sortable_auto_submit_controller.js +10 -0
  96. data/app/javascript/spree/admin/controllers/stock_transfer_controller.js +6 -5
  97. data/app/javascript/spree/admin/controllers/tabs_controller.js +21 -0
  98. data/app/javascript/spree/admin/controllers/tooltip_controller.js +136 -0
  99. data/app/javascript/spree/admin/controllers/turbo_submit_button_controller.js +14 -0
  100. data/app/javascript/spree/admin/helpers/bootstrap.js +5 -3
  101. data/app/models/spree/admin/form_builder.rb +250 -0
  102. data/app/views/layouts/spree/admin.html.erb +6 -2
  103. data/app/views/layouts/spree/admin_settings.html.erb +36 -0
  104. data/app/views/layouts/spree/admin_wizard.html.erb +34 -0
  105. data/app/views/layouts/spree/minimal.html.erb +2 -1
  106. data/app/views/layouts/spree/page_builder.html.erb +3 -2
  107. data/app/views/spree/admin/admin_users/_admin_user.html.erb +2 -2
  108. data/app/views/spree/admin/admin_users/_form.html.erb +3 -12
  109. data/app/views/spree/admin/admin_users/edit.html.erb +4 -7
  110. data/app/views/spree/admin/admin_users/index.html.erb +3 -3
  111. data/app/views/spree/admin/admin_users/show.html.erb +4 -4
  112. data/app/views/spree/admin/assets/create.turbo_stream.erb +1 -1
  113. data/app/views/spree/admin/assets/destroy.turbo_stream.erb +1 -1
  114. data/app/views/spree/admin/assets/edit.html.erb +16 -21
  115. data/app/views/spree/admin/assets/update.turbo_stream.erb +2 -2
  116. data/app/views/spree/admin/classifications/_classification.html.erb +5 -4
  117. data/app/views/spree/admin/classifications/create.turbo_stream.erb +1 -1
  118. data/app/views/spree/admin/classifications/index.html.erb +2 -2
  119. data/app/views/spree/admin/coupon_codes/_filters.html.erb +41 -0
  120. data/app/views/spree/admin/coupon_codes/_table_header.html.erb +0 -0
  121. data/app/views/spree/admin/coupon_codes/_table_row.html.erb +8 -0
  122. data/app/views/spree/admin/coupon_codes/index.html.erb +1 -58
  123. data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +4 -4
  124. data/app/views/spree/admin/custom_domains/edit.html.erb +1 -14
  125. data/app/views/spree/admin/custom_domains/new.html.erb +1 -14
  126. data/app/views/spree/admin/customer_returns/_filters.html.erb +11 -0
  127. data/app/views/spree/admin/customer_returns/_table_header.html.erb +8 -0
  128. data/app/views/spree/admin/customer_returns/{_customer_return.html.erb → _table_row.html.erb} +1 -1
  129. data/app/views/spree/admin/customer_returns/index.html.erb +1 -36
  130. data/app/views/spree/admin/dashboard/_setup_progress.html.erb +1 -1
  131. data/app/views/spree/admin/dashboard/_setup_tasks.html.erb +8 -10
  132. data/app/views/spree/admin/dashboard/_store_preview.html.erb +5 -5
  133. data/app/views/spree/admin/dashboard/_top_products.html.erb +3 -3
  134. data/app/views/spree/admin/dashboard/_updater.html.erb +1 -1
  135. data/app/views/spree/admin/dashboard/analytics.html.erb +37 -39
  136. data/app/views/spree/admin/dashboard/getting_started.html.erb +1 -1
  137. data/app/views/spree/admin/dashboard/setup_tasks/_add_products.html.erb +2 -2
  138. data/app/views/spree/admin/dashboard/show.html.erb +1 -1
  139. data/app/views/spree/admin/digital_assets/_digital_asset.html.erb +9 -10
  140. data/app/views/spree/admin/digital_assets/_form.html.erb +3 -8
  141. data/app/views/spree/admin/digital_assets/_table.html.erb +12 -13
  142. data/app/views/spree/admin/digital_assets/create.turbo_stream.erb +1 -1
  143. data/app/views/spree/admin/digital_assets/edit.html.erb +8 -10
  144. data/app/views/spree/admin/digital_assets/index.html.erb +8 -9
  145. data/app/views/spree/admin/digital_assets/new.html.erb +8 -10
  146. data/app/views/spree/admin/digital_assets/update.turbo_stream.erb +1 -1
  147. data/app/views/spree/admin/errors/403.html.erb +14 -0
  148. data/app/views/spree/admin/errors/404.html.erb +14 -0
  149. data/app/views/spree/admin/errors/422.html.erb +14 -0
  150. data/app/views/spree/admin/errors/500.html.erb +14 -0
  151. data/app/views/spree/admin/errors/503.html.erb +14 -0
  152. data/app/views/spree/admin/exports/_export.html.erb +1 -1
  153. data/app/views/spree/admin/exports/create.turbo_stream.erb +4 -1
  154. data/app/views/spree/admin/exports/index.html.erb +5 -5
  155. data/app/views/spree/admin/exports/new.html.erb +33 -28
  156. data/app/views/spree/admin/gift_card_batches/_form.html.erb +5 -20
  157. data/app/views/spree/admin/gift_card_batches/new.html.erb +1 -15
  158. data/app/views/spree/admin/gift_cards/_filters.html.erb +3 -4
  159. data/app/views/spree/admin/gift_cards/_form.html.erb +16 -26
  160. data/app/views/spree/admin/gift_cards/_gift_card.html.erb +1 -1
  161. data/app/views/spree/admin/gift_cards/_list.html.erb +7 -7
  162. data/app/views/spree/admin/gift_cards/_table_filter_dropdown.html.erb +13 -13
  163. data/app/views/spree/admin/gift_cards/index.html.erb +14 -11
  164. data/app/views/spree/admin/gift_cards/new.html.erb +1 -30
  165. data/app/views/spree/admin/gift_cards/show.html.erb +5 -5
  166. data/app/views/spree/admin/import_mappings/update.turbo_stream.erb +15 -0
  167. data/app/views/spree/admin/import_rows/_variant.html.erb +1 -0
  168. data/app/views/spree/admin/import_rows/show.html.erb +32 -0
  169. data/app/views/spree/admin/imports/_footer.html.erb +15 -0
  170. data/app/views/spree/admin/imports/_loader.html.erb +14 -0
  171. data/app/views/spree/admin/imports/_mapping.html.erb +12 -0
  172. data/app/views/spree/admin/imports/_mapping_footer.html.erb +20 -0
  173. data/app/views/spree/admin/imports/_mapping_form.html.erb +11 -0
  174. data/app/views/spree/admin/imports/_mapping_icon.html.erb +6 -0
  175. data/app/views/spree/admin/imports/_row.html.erb +35 -0
  176. data/app/views/spree/admin/imports/new.html.erb +26 -0
  177. data/app/views/spree/admin/imports/show.html.erb +57 -0
  178. data/app/views/spree/admin/invitations/_invitation.html.erb +13 -13
  179. data/app/views/spree/admin/invitations/create.turbo_stream.erb +1 -1
  180. data/app/views/spree/admin/invitations/index.html.erb +15 -17
  181. data/app/views/spree/admin/invitations/new.html.erb +15 -26
  182. data/app/views/spree/admin/json_previews/show.html.erb +37 -0
  183. data/app/views/spree/admin/line_items/new.html.erb +6 -6
  184. data/app/views/spree/admin/metafield_definitions/_filters.html.erb +18 -0
  185. data/app/views/spree/admin/metafield_definitions/_form.html.erb +44 -0
  186. data/app/views/spree/admin/metafield_definitions/_table_header.html.erb +11 -0
  187. data/app/views/spree/admin/metafield_definitions/_table_row.html.erb +22 -0
  188. data/app/views/spree/admin/metafield_definitions/edit.html.erb +1 -0
  189. data/app/views/spree/admin/metafield_definitions/index.html.erb +9 -0
  190. data/app/views/spree/admin/metafield_definitions/new.html.erb +1 -0
  191. data/app/views/spree/admin/metafield_definitions/update.turbo_stream.erb +1 -0
  192. data/app/views/spree/admin/metafields/edit.html.erb +43 -0
  193. data/app/views/spree/admin/metafields/types/_boolean.html.erb +4 -0
  194. data/app/views/spree/admin/metafields/types/_json.html.erb +4 -0
  195. data/app/views/spree/admin/metafields/types/_long_text.html.erb +1 -0
  196. data/app/views/spree/admin/metafields/types/_number.html.erb +1 -0
  197. data/app/views/spree/admin/metafields/types/_rich_text.html.erb +3 -0
  198. data/app/views/spree/admin/metafields/types/_short_text.html.erb +1 -0
  199. data/app/views/spree/admin/metafields/update.turbo_stream.erb +1 -0
  200. data/app/views/spree/admin/newsletter_subscribers/_filters.html.erb +41 -0
  201. data/app/views/spree/admin/newsletter_subscribers/_table_header.html.erb +8 -0
  202. data/app/views/spree/admin/newsletter_subscribers/_table_row.html.erb +36 -0
  203. data/app/views/spree/admin/newsletter_subscribers/index.html.erb +9 -0
  204. data/app/views/spree/admin/oauth_applications/_form.html.erb +5 -10
  205. data/app/views/spree/admin/oauth_applications/_table_header.html.erb +7 -0
  206. data/app/views/spree/admin/oauth_applications/_table_row.html.erb +34 -0
  207. data/app/views/spree/admin/oauth_applications/create.turbo_stream.erb +20 -30
  208. data/app/views/spree/admin/oauth_applications/edit.html.erb +1 -18
  209. data/app/views/spree/admin/oauth_applications/index.html.erb +4 -60
  210. data/app/views/spree/admin/oauth_applications/new.html.erb +1 -24
  211. data/app/views/spree/admin/option_types/{_filter.html.erb → _filters.html.erb} +1 -1
  212. data/app/views/spree/admin/option_types/_form.html.erb +8 -30
  213. data/app/views/spree/admin/option_types/_table_header.html.erb +19 -0
  214. data/app/views/spree/admin/option_types/{_option_type.html.erb → _table_row.html.erb} +1 -1
  215. data/app/views/spree/admin/option_types/edit.html.erb +0 -3
  216. data/app/views/spree/admin/option_types/index.html.erb +3 -42
  217. data/app/views/spree/admin/orders/_customer.html.erb +17 -21
  218. data/app/views/spree/admin/orders/_customer_returns.html.erb +4 -4
  219. data/app/views/spree/admin/orders/_filters.html.erb +49 -48
  220. data/app/views/spree/admin/orders/_form.html.erb +12 -0
  221. data/app/views/spree/admin/orders/_header.html.erb +2 -7
  222. data/app/views/spree/admin/orders/_line_item.html.erb +6 -11
  223. data/app/views/spree/admin/orders/_line_items.html.erb +39 -47
  224. data/app/views/spree/admin/orders/_list.html.erb +7 -7
  225. data/app/views/spree/admin/orders/_order.html.erb +1 -1
  226. data/app/views/spree/admin/orders/_payments.html.erb +2 -2
  227. data/app/views/spree/admin/orders/_refunds.html.erb +7 -9
  228. data/app/views/spree/admin/orders/_return_authorizations.html.erb +5 -5
  229. data/app/views/spree/admin/orders/_risk_analysis.html.erb +1 -1
  230. data/app/views/spree/admin/orders/_shipment.html.erb +7 -6
  231. data/app/views/spree/admin/orders/_shipment_manifest_item.html.erb +1 -1
  232. data/app/views/spree/admin/orders/_shipments.html.erb +1 -1
  233. data/app/views/spree/admin/orders/_summary.html.erb +14 -7
  234. data/app/views/spree/admin/orders/_table_filter_dropdown.html.erb +6 -6
  235. data/app/views/spree/admin/orders/_tax_lines.html.erb +1 -1
  236. data/app/views/spree/admin/orders/billing_address/_form.html.erb +4 -2
  237. data/app/views/spree/admin/orders/billing_address/create.turbo_stream.erb +22 -24
  238. data/app/views/spree/admin/orders/billing_address/edit.html.erb +29 -31
  239. data/app/views/spree/admin/orders/billing_address/new.html.erb +22 -24
  240. data/app/views/spree/admin/orders/billing_address/update.turbo_stream.erb +22 -24
  241. data/app/views/spree/admin/orders/contact_information/edit.html.erb +10 -12
  242. data/app/views/spree/admin/orders/customer_returns/_customer_return.html.erb +7 -12
  243. data/app/views/spree/admin/orders/customer_returns/_reimbursements_table.html.erb +5 -5
  244. data/app/views/spree/admin/orders/customer_returns/_return_item_decision.html.erb +6 -6
  245. data/app/views/spree/admin/orders/customer_returns/_return_item_selection.html.erb +6 -6
  246. data/app/views/spree/admin/orders/customer_returns/new.html.erb +2 -6
  247. data/app/views/spree/admin/orders/index.html.erb +7 -3
  248. data/app/views/spree/admin/orders/new.html.erb +22 -0
  249. data/app/views/spree/admin/orders/return_authorizations/_form.html.erb +14 -28
  250. data/app/views/spree/admin/orders/return_authorizations/_return_authorization.html.erb +1 -1
  251. data/app/views/spree/admin/orders/return_authorizations/show.html.erb +14 -14
  252. data/app/views/spree/admin/orders/shipping_address/_form.html.erb +4 -2
  253. data/app/views/spree/admin/orders/shipping_address/create.turbo_stream.erb +8 -10
  254. data/app/views/spree/admin/orders/shipping_address/edit.html.erb +8 -10
  255. data/app/views/spree/admin/orders/shipping_address/new.html.erb +8 -10
  256. data/app/views/spree/admin/orders/shipping_address/update.turbo_stream.erb +8 -10
  257. data/app/views/spree/admin/orders/user/edit.html.erb +1 -1
  258. data/app/views/spree/admin/orders/user/new.html.erb +1 -1
  259. data/app/views/spree/admin/page_blocks/edit.html.erb +6 -9
  260. data/app/views/spree/admin/page_blocks/forms/_image.html.erb +4 -1
  261. data/app/views/spree/admin/page_blocks/forms/_metafields.html.erb +35 -0
  262. data/app/views/spree/admin/page_blocks/forms/products/_description.html.erb +0 -0
  263. data/app/views/spree/admin/page_builder/_add_block.html.erb +8 -6
  264. data/app/views/spree/admin/page_builder/_header.html.erb +29 -22
  265. data/app/views/spree/admin/page_builder/_pages_dropdown.html.erb +6 -6
  266. data/app/views/spree/admin/page_builder/_sidebar.html.erb +5 -5
  267. data/app/views/spree/admin/page_builder/_sidebar_colors.html.erb +71 -69
  268. data/app/views/spree/admin/page_builder/_sidebar_fonts.html.erb +62 -61
  269. data/app/views/spree/admin/page_builder/_sidebar_section.html.erb +4 -6
  270. data/app/views/spree/admin/page_builder/_sidebar_sections.html.erb +12 -2
  271. data/app/views/spree/admin/page_builder/_sidebar_sections_toolbar.html.erb +59 -57
  272. data/app/views/spree/admin/page_links/_form.html.erb +3 -3
  273. data/app/views/spree/admin/page_links/_linkable_type_dropdown.html.erb +3 -3
  274. data/app/views/spree/admin/page_links/create.turbo_stream.erb +10 -4
  275. data/app/views/spree/admin/page_links/destroy.turbo_stream.erb +13 -9
  276. data/app/views/spree/admin/page_links/edit.html.erb +26 -13
  277. data/app/views/spree/admin/page_links/update.turbo_stream.erb +11 -5
  278. data/app/views/spree/admin/page_sections/edit.html.erb +5 -8
  279. data/app/views/spree/admin/page_sections/forms/_breadcrumbs.html.erb +0 -0
  280. data/app/views/spree/admin/page_sections/forms/_image_with_text.html.erb +2 -5
  281. data/app/views/spree/admin/pages/_form.html.erb +1 -4
  282. data/app/views/spree/admin/pages/_table_header.html.erb +6 -0
  283. data/app/views/spree/admin/pages/_table_row.html.erb +28 -0
  284. data/app/views/spree/admin/pages/edit.html.erb +9 -11
  285. data/app/views/spree/admin/pages/{_filters.html.erb → filters.html.erb} +1 -1
  286. data/app/views/spree/admin/pages/index.html.erb +1 -24
  287. data/app/views/spree/admin/pages/new.html.erb +1 -17
  288. data/app/views/spree/admin/payment_methods/_available_payment_method.html.erb +1 -1
  289. data/app/views/spree/admin/payment_methods/_form.html.erb +4 -24
  290. data/app/views/spree/admin/payment_methods/_payment_method.html.erb +5 -2
  291. data/app/views/spree/admin/payment_methods/index.html.erb +17 -19
  292. data/app/views/spree/admin/payments/_payment.html.erb +16 -16
  293. data/app/views/spree/admin/payments/source_views/_gateway.html.erb +3 -3
  294. data/app/views/spree/admin/payments/source_views/_storecredit.html.erb +7 -7
  295. data/app/views/spree/admin/policies/_filters.html.erb +8 -0
  296. data/app/views/spree/admin/policies/_form.html.erb +7 -0
  297. data/app/views/spree/admin/policies/_table_header.html.erb +8 -0
  298. data/app/views/spree/admin/policies/_table_row.html.erb +20 -0
  299. data/app/views/spree/admin/policies/edit.html.erb +2 -0
  300. data/app/views/spree/admin/policies/index.html.erb +9 -0
  301. data/app/views/spree/admin/policies/new.html.erb +1 -0
  302. data/app/views/spree/admin/policies/update.turbo_stream.erb +1 -0
  303. data/app/views/spree/admin/post_categories/_form.html.erb +2 -11
  304. data/app/views/spree/admin/post_categories/_table_header.html.erb +5 -0
  305. data/app/views/spree/admin/post_categories/{_post_category.html.erb → _table_row.html.erb} +3 -3
  306. data/app/views/spree/admin/post_categories/edit.html.erb +1 -14
  307. data/app/views/spree/admin/post_categories/index.html.erb +1 -20
  308. data/app/views/spree/admin/post_categories/new.html.erb +1 -14
  309. data/app/views/spree/admin/posts/_form.html.erb +21 -43
  310. data/app/views/spree/admin/posts/_table_header.html.erb +7 -0
  311. data/app/views/spree/admin/posts/{_post.html.erb → _table_row.html.erb} +2 -2
  312. data/app/views/spree/admin/posts/filters.html.erb +29 -0
  313. data/app/views/spree/admin/posts/index.html.erb +1 -24
  314. data/app/views/spree/admin/products/_bulk_operations.html.erb +6 -16
  315. data/app/views/spree/admin/products/_filters.html.erb +31 -38
  316. data/app/views/spree/admin/products/_form.html.erb +3 -2
  317. data/app/views/spree/admin/products/_list.html.erb +1 -1
  318. data/app/views/spree/admin/products/_product.html.erb +1 -1
  319. data/app/views/spree/admin/products/_table_filter_dropdown.html.erb +6 -6
  320. data/app/views/spree/admin/products/bulk_modal.html.erb +13 -15
  321. data/app/views/spree/admin/products/edit.html.erb +0 -1
  322. data/app/views/spree/admin/products/form/_base.html.erb +1 -5
  323. data/app/views/spree/admin/products/form/_properties.html.erb +2 -2
  324. data/app/views/spree/admin/products/form/_shipping.html.erb +1 -5
  325. data/app/views/spree/admin/products/form/_tax.html.erb +1 -5
  326. data/app/views/spree/admin/products/form/_variants.html.erb +1 -1
  327. data/app/views/spree/admin/products/index.html.erb +7 -2
  328. data/app/views/spree/admin/promotion_actions/_promotion_action.html.erb +7 -7
  329. data/app/views/spree/admin/promotion_actions/forms/_create_line_items.html.erb +4 -4
  330. data/app/views/spree/admin/promotion_actions/new.html.erb +29 -35
  331. data/app/views/spree/admin/promotion_rules/_promotion_rule.html.erb +8 -8
  332. data/app/views/spree/admin/promotion_rules/forms/_item_total.html.erb +1 -1
  333. data/app/views/spree/admin/promotion_rules/new.html.erb +30 -36
  334. data/app/views/spree/admin/promotions/_actions.html.erb +4 -8
  335. data/app/views/spree/admin/promotions/_filters.html.erb +5 -9
  336. data/app/views/spree/admin/promotions/_form.html.erb +36 -0
  337. data/app/views/spree/admin/promotions/_rules.html.erb +4 -8
  338. data/app/views/spree/admin/promotions/_sidebar.html.erb +4 -4
  339. data/app/views/spree/admin/promotions/_table_filter_dropdown.html.erb +7 -7
  340. data/app/views/spree/admin/promotions/_table_header.html.erb +7 -0
  341. data/app/views/spree/admin/promotions/{_promotion.html.erb → _table_row.html.erb} +2 -5
  342. data/app/views/spree/admin/promotions/edit.html.erb +1 -1
  343. data/app/views/spree/admin/promotions/form/_kind.html.erb +52 -48
  344. data/app/views/spree/admin/promotions/form/_settings.html.erb +2 -8
  345. data/app/views/spree/admin/promotions/index.html.erb +1 -26
  346. data/app/views/spree/admin/promotions/new.html.erb +1 -57
  347. data/app/views/spree/admin/properties/_filters.html.erb +5 -0
  348. data/app/views/spree/admin/properties/_form.html.erb +8 -22
  349. data/app/views/spree/admin/properties/_table_header.html.erb +9 -0
  350. data/app/views/spree/admin/properties/{_property.html.erb → _table_row.html.erb} +2 -2
  351. data/app/views/spree/admin/properties/edit.html.erb +1 -21
  352. data/app/views/spree/admin/properties/index.html.erb +3 -38
  353. data/app/views/spree/admin/properties/new.html.erb +1 -18
  354. data/app/views/spree/admin/refund_reasons/_form.html.erb +1 -0
  355. data/app/views/spree/admin/refund_reasons/_table_header.html.erb +6 -0
  356. data/app/views/spree/admin/refund_reasons/_table_row.html.erb +14 -0
  357. data/app/views/spree/admin/refund_reasons/edit.html.erb +1 -3
  358. data/app/views/spree/admin/refund_reasons/index.html.erb +1 -36
  359. data/app/views/spree/admin/refund_reasons/new.html.erb +1 -4
  360. data/app/views/spree/admin/refunds/_form.html.erb +1 -5
  361. data/app/views/spree/admin/refunds/edit.html.erb +9 -11
  362. data/app/views/spree/admin/reimbursement_types/_form.html.erb +10 -31
  363. data/app/views/spree/admin/reimbursement_types/_table_header.html.erb +7 -0
  364. data/app/views/spree/admin/reimbursement_types/_table_row.html.erb +17 -0
  365. data/app/views/spree/admin/reimbursement_types/edit.html.erb +1 -14
  366. data/app/views/spree/admin/reimbursement_types/index.html.erb +1 -40
  367. data/app/views/spree/admin/reimbursement_types/new.html.erb +1 -14
  368. data/app/views/spree/admin/reimbursements/edit.html.erb +9 -9
  369. data/app/views/spree/admin/reimbursements/show.html.erb +12 -12
  370. data/app/views/spree/admin/reports/_report.html.erb +1 -1
  371. data/app/views/spree/admin/reports/index.html.erb +2 -2
  372. data/app/views/spree/admin/reports/new.html.erb +2 -1
  373. data/app/views/spree/admin/return_authorization_reasons/_form.html.erb +1 -0
  374. data/app/views/spree/admin/return_authorization_reasons/_table_header.html.erb +5 -0
  375. data/app/views/spree/admin/return_authorization_reasons/_table_row.html.erb +18 -0
  376. data/app/views/spree/admin/return_authorization_reasons/edit.html.erb +1 -3
  377. data/app/views/spree/admin/return_authorization_reasons/index.html.erb +1 -39
  378. data/app/views/spree/admin/return_authorization_reasons/new.html.erb +1 -4
  379. data/app/views/spree/admin/return_authorizations/_list.html.erb +3 -3
  380. data/app/views/spree/admin/return_authorizations/_table_header.html.erb +6 -0
  381. data/app/views/spree/admin/return_authorizations/{_return_authorization.html.erb → _table_row.html.erb} +1 -1
  382. data/app/views/spree/admin/return_authorizations/{_filters.html.erb → filters.html.erb} +7 -12
  383. data/app/views/spree/admin/return_authorizations/index.html.erb +1 -10
  384. data/app/views/spree/admin/roles/_form.html.erb +4 -5
  385. data/app/views/spree/admin/roles/edit.html.erb +1 -15
  386. data/app/views/spree/admin/roles/index.html.erb +4 -4
  387. data/app/views/spree/admin/roles/new.html.erb +1 -18
  388. data/app/views/spree/admin/shared/_alerts.html.erb +3 -1
  389. data/app/views/spree/admin/shared/_back_to_dashboard.html.erb +1 -0
  390. data/app/views/spree/admin/shared/_breadcrumbs.html.erb +1 -1
  391. data/app/views/spree/admin/shared/_bulk_modal.html.erb +13 -19
  392. data/app/views/spree/admin/shared/_calendar_range_picker.html.erb +6 -7
  393. data/app/views/spree/admin/shared/_close_bulk_modal.turbo_stream.erb +4 -1
  394. data/app/views/spree/admin/shared/_content_header.html.erb +20 -38
  395. data/app/views/spree/admin/shared/_dialog.html.erb +4 -0
  396. data/app/views/spree/admin/shared/_drawer.html.erb +4 -0
  397. data/app/views/spree/admin/shared/_edit_resource.html.erb +17 -0
  398. data/app/views/spree/admin/shared/_export_modal.html.erb +3 -0
  399. data/app/views/spree/admin/shared/_filters_button.html.erb +2 -2
  400. data/app/views/spree/admin/shared/_head.html.erb +1 -1
  401. data/app/views/spree/admin/shared/_header.html.erb +2 -5
  402. data/app/views/spree/admin/shared/_index_table.html.erb +34 -0
  403. data/app/views/spree/admin/shared/_index_table_options.html.erb +5 -7
  404. data/app/views/spree/admin/{variants/form → shared}/_media_asset.html.erb +3 -5
  405. data/app/views/spree/admin/{variants/form/_media.html.erb → shared/_media_form.html.erb} +2 -2
  406. data/app/views/spree/admin/shared/_multi_product_picker.html.erb +7 -7
  407. data/app/views/spree/admin/shared/_new_item_dropdown.html.erb +8 -10
  408. data/app/views/spree/admin/shared/_new_resource.html.erb +18 -0
  409. data/app/views/spree/admin/shared/_no_resource_found.html.erb +1 -1
  410. data/app/views/spree/admin/shared/_page_alerts.html.erb +5 -0
  411. data/app/views/spree/admin/shared/_page_section_image.html.erb +6 -0
  412. data/app/views/spree/admin/shared/_page_tabs.html.erb +9 -0
  413. data/app/views/spree/admin/shared/_refunds.html.erb +6 -8
  414. data/app/views/spree/admin/shared/_seo.html.erb +3 -8
  415. data/app/views/spree/admin/shared/_team_nav.html.erb +1 -3
  416. data/app/views/spree/admin/shared/_user.html.erb +2 -1
  417. data/app/views/spree/admin/shared/_user_dropdown.html.erb +7 -9
  418. data/app/views/spree/admin/shared/named_types/_edit.html.erb +1 -14
  419. data/app/views/spree/admin/shared/named_types/_form.html.erb +2 -11
  420. data/app/views/spree/admin/shared/named_types/_new.html.erb +1 -14
  421. data/app/views/spree/admin/shared/sidebar/_customers_nav.html.erb +8 -0
  422. data/app/views/spree/admin/shared/sidebar/_enterprise_edition_notice.html.erb +1 -1
  423. data/app/views/spree/admin/shared/sidebar/_products_nav.html.erb +1 -1
  424. data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +8 -9
  425. data/app/views/spree/admin/shared/sidebar/_store_nav.html.erb +16 -14
  426. data/app/views/spree/admin/shared/sidebar/_vendors_nav.html.erb +5 -2
  427. data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +7 -7
  428. data/app/views/spree/admin/shipping_categories/_form.html.erb +1 -5
  429. data/app/views/spree/admin/shipping_categories/_table_header.html.erb +4 -0
  430. data/app/views/spree/admin/shipping_categories/_table_row.html.erb +8 -0
  431. data/app/views/spree/admin/shipping_categories/edit.html.erb +1 -14
  432. data/app/views/spree/admin/shipping_categories/index.html.erb +3 -30
  433. data/app/views/spree/admin/shipping_categories/new.html.erb +1 -14
  434. data/app/views/spree/admin/shipping_methods/_table_header.html.erb +8 -0
  435. data/app/views/spree/admin/shipping_methods/{_shipping_method.html.erb → _table_row.html.erb} +1 -1
  436. data/app/views/spree/admin/shipping_methods/form/_display.html.erb +2 -2
  437. data/app/views/spree/admin/shipping_methods/form/_tax_category.html.erb +1 -4
  438. data/app/views/spree/admin/shipping_methods/form/_tracking_url.html.erb +1 -1
  439. data/app/views/spree/admin/shipping_methods/index.html.erb +3 -26
  440. data/app/views/spree/admin/stock_items/_filters.html.erb +12 -21
  441. data/app/views/spree/admin/stock_items/_table_header.html.erb +9 -0
  442. data/app/views/spree/admin/stock_items/{_stock_item.html.erb → _table_row.html.erb} +1 -1
  443. data/app/views/spree/admin/stock_items/index.html.erb +1 -27
  444. data/app/views/spree/admin/stock_locations/_form.html.erb +3 -15
  445. data/app/views/spree/admin/stock_locations/_table_header.html.erb +9 -0
  446. data/app/views/spree/admin/stock_locations/{_stock_location.html.erb → _table_row.html.erb} +7 -6
  447. data/app/views/spree/admin/stock_locations/edit.html.erb +1 -14
  448. data/app/views/spree/admin/stock_locations/index.html.erb +3 -26
  449. data/app/views/spree/admin/stock_locations/new.html.erb +1 -14
  450. data/app/views/spree/admin/stock_transfers/_filters.html.erb +25 -33
  451. data/app/views/spree/admin/stock_transfers/_new_variant_modal.html.erb +22 -26
  452. data/app/views/spree/admin/stock_transfers/_table_header.html.erb +9 -0
  453. data/app/views/spree/admin/stock_transfers/{_stock_transfer.html.erb → _table_row.html.erb} +2 -2
  454. data/app/views/spree/admin/stock_transfers/index.html.erb +1 -26
  455. data/app/views/spree/admin/stock_transfers/new.html.erb +5 -6
  456. data/app/views/spree/admin/stock_transfers/show.html.erb +3 -3
  457. data/app/views/spree/admin/store_credit_categories/_form.html.erb +1 -5
  458. data/app/views/spree/admin/store_credit_categories/index.html.erb +3 -3
  459. data/app/views/spree/admin/store_credit_events/_store_credit_event.html.erb +1 -1
  460. data/app/views/spree/admin/store_credits/_form.html.erb +3 -16
  461. data/app/views/spree/admin/store_credits/_list.html.erb +7 -7
  462. data/app/views/spree/admin/store_credits/_store_credit.html.erb +2 -2
  463. data/app/views/spree/admin/store_credits/show.html.erb +6 -6
  464. data/app/views/spree/admin/storefront/edit.html.erb +10 -53
  465. data/app/views/spree/admin/stores/edit.html.erb +10 -6
  466. data/app/views/spree/admin/stores/form/_basic.html.erb +65 -158
  467. data/app/views/spree/admin/stores/form/_checkout.html.erb +35 -51
  468. data/app/views/spree/admin/stores/form/_checkout_links.html.erb +28 -0
  469. data/app/views/spree/admin/stores/form/_emails.html.erb +33 -64
  470. data/app/views/spree/admin/stores/form/_policies.html.erb +55 -71
  471. data/app/views/spree/admin/stores/new.html.erb +119 -129
  472. data/app/views/spree/admin/tax_categories/_form.html.erb +4 -17
  473. data/app/views/spree/admin/tax_categories/_table_header.html.erb +7 -0
  474. data/app/views/spree/admin/tax_categories/{_tax_category.html.erb → _table_row.html.erb} +1 -1
  475. data/app/views/spree/admin/tax_categories/edit.html.erb +1 -14
  476. data/app/views/spree/admin/tax_categories/index.html.erb +3 -24
  477. data/app/views/spree/admin/tax_categories/new.html.erb +1 -14
  478. data/app/views/spree/admin/tax_rates/_form.html.erb +6 -26
  479. data/app/views/spree/admin/tax_rates/_table_header.html.erb +9 -0
  480. data/app/views/spree/admin/tax_rates/{_tax_rate.html.erb → _table_row.html.erb} +1 -1
  481. data/app/views/spree/admin/tax_rates/edit.html.erb +1 -14
  482. data/app/views/spree/admin/tax_rates/index.html.erb +3 -26
  483. data/app/views/spree/admin/tax_rates/new.html.erb +1 -14
  484. data/app/views/spree/admin/taxonomies/_form.html.erb +5 -0
  485. data/app/views/spree/admin/taxonomies/_table_header.html.erb +6 -0
  486. data/app/views/spree/admin/taxonomies/{_taxonomy.html.erb → _table_row.html.erb} +3 -3
  487. data/app/views/spree/admin/taxonomies/edit.html.erb +1 -25
  488. data/app/views/spree/admin/taxonomies/filters.html.erb +6 -0
  489. data/app/views/spree/admin/taxonomies/index.html.erb +3 -34
  490. data/app/views/spree/admin/taxonomies/new.html.erb +1 -23
  491. data/app/views/spree/admin/taxons/_form.html.erb +6 -30
  492. data/app/views/spree/admin/taxons/_rule_form.html.erb +2 -1
  493. data/app/views/spree/admin/taxons/_rules_form.html.erb +1 -1
  494. data/app/views/spree/admin/taxons/edit.html.erb +0 -1
  495. data/app/views/spree/admin/themes/_theme.html.erb +9 -8
  496. data/app/views/spree/admin/themes/index.html.erb +14 -16
  497. data/app/views/spree/admin/translations/edit.html.erb +34 -49
  498. data/app/views/spree/admin/translations/policies/_form.html.erb +12 -0
  499. data/app/views/spree/admin/translations/products/_form.html.erb +2 -0
  500. data/app/views/spree/admin/translations/translation_rows/_permalink_field_row.html.erb +11 -20
  501. data/app/views/spree/admin/translations/translation_rows/_rich_textarea_row.html.erb +1 -11
  502. data/app/views/spree/admin/translations/translation_rows/_text_field_row.html.erb +1 -5
  503. data/app/views/spree/admin/translations/translation_rows/_textarea_row.html.erb +2 -9
  504. data/app/views/spree/admin/translations/translation_rows/_tinymce_row.html.erb +4 -11
  505. data/app/views/spree/admin/translations/update.turbo_stream.erb +1 -0
  506. data/app/views/spree/admin/users/_filters.html.erb +50 -66
  507. data/app/views/spree/admin/users/_form.html.erb +3 -36
  508. data/app/views/spree/admin/users/_form_fields.html.erb +15 -0
  509. data/app/views/spree/admin/users/_last_order.html.erb +3 -2
  510. data/app/views/spree/admin/users/_lifetime_stats.html.erb +1 -1
  511. data/app/views/spree/admin/users/_tabs.html.erb +31 -31
  512. data/app/views/spree/admin/users/_user.html.erb +1 -1
  513. data/app/views/spree/admin/users/bulk_modal.html.erb +11 -13
  514. data/app/views/spree/admin/users/edit.html.erb +1 -1
  515. data/app/views/spree/admin/users/index.html.erb +53 -55
  516. data/app/views/spree/admin/users/new.html.erb +1 -18
  517. data/app/views/spree/admin/variants/_variant.html.erb +1 -1
  518. data/app/views/spree/admin/variants/edit.html.erb +1 -1
  519. data/app/views/spree/admin/variants/form/_basic.html.erb +4 -17
  520. data/app/views/spree/admin/variants/form/_dimensions.html.erb +4 -18
  521. data/app/views/spree/admin/variants/form/_inventory.html.erb +6 -12
  522. data/app/views/spree/admin/variants/form/_pricing.html.erb +3 -3
  523. data/app/views/spree/admin/webhook_events/_webhook_event.html.erb +1 -1
  524. data/app/views/spree/admin/webhooks_subscribers/_form.html.erb +57 -73
  525. data/app/views/spree/admin/webhooks_subscribers/_table_header.html.erb +7 -0
  526. data/app/views/spree/admin/webhooks_subscribers/{_webhooks_subscriber.html.erb → _table_row.html.erb} +3 -3
  527. data/app/views/spree/admin/webhooks_subscribers/edit.html.erb +1 -9
  528. data/app/views/spree/admin/webhooks_subscribers/index.html.erb +1 -23
  529. data/app/views/spree/admin/webhooks_subscribers/new.html.erb +1 -11
  530. data/app/views/spree/admin/webhooks_subscribers/show.html.erb +8 -8
  531. data/app/views/spree/admin/zones/_form.html.erb +8 -28
  532. data/app/views/spree/admin/zones/_table_header.html.erb +8 -0
  533. data/app/views/spree/admin/zones/_table_row.html.erb +8 -0
  534. data/app/views/spree/admin/zones/edit.html.erb +1 -14
  535. data/app/views/spree/admin/zones/index.html.erb +3 -35
  536. data/app/views/spree/admin/zones/new.html.erb +1 -14
  537. data/config/importmap.rb +31 -1
  538. data/config/initializers/assets.rb +3 -1
  539. data/config/locales/en.yml +32 -3
  540. data/config/routes.rb +27 -4
  541. data/lib/generators/spree/admin/scaffold/scaffold_generator.rb +51 -0
  542. data/lib/generators/spree/admin/scaffold/templates/controller.rb.tt +11 -0
  543. data/lib/generators/spree/admin/scaffold/templates/views/_filters.html.erb.tt +13 -0
  544. data/lib/generators/spree/admin/scaffold/templates/views/_form.html.erb.tt +5 -0
  545. data/lib/generators/spree/admin/scaffold/templates/views/_table_header.html.erb.tt +5 -0
  546. data/lib/generators/spree/admin/scaffold/templates/views/_table_row.html.erb.tt +9 -0
  547. data/lib/generators/spree/admin/scaffold/templates/views/edit.html.erb.tt +1 -0
  548. data/lib/generators/spree/admin/scaffold/templates/views/index.html.erb.tt +9 -0
  549. data/lib/generators/spree/admin/scaffold/templates/views/new.html.erb.tt +1 -0
  550. data/lib/spree/admin/engine.rb +13 -9
  551. data/lib/spree/admin/runtime_configuration.rb +3 -0
  552. data/lib/spree/admin/testing_support/capybara_utils.rb +19 -0
  553. data/lib/spree/admin.rb +1 -3
  554. data/vendor/javascript/@codemirror--autocomplete.js +4 -0
  555. data/vendor/javascript/@codemirror--commands.js +4 -0
  556. data/vendor/javascript/@codemirror--lang-json.js +4 -0
  557. data/vendor/javascript/@codemirror--language.js +4 -0
  558. data/vendor/javascript/@codemirror--lint.js +4 -0
  559. data/vendor/javascript/@codemirror--search.js +4 -0
  560. data/vendor/javascript/@codemirror--state.js +4 -0
  561. data/vendor/javascript/@codemirror--view.js +4 -0
  562. data/vendor/javascript/@floating-ui--core.js +4 -0
  563. data/vendor/javascript/@floating-ui--dom.js +12 -0
  564. data/vendor/javascript/@floating-ui--utils--dom.js +4 -0
  565. data/vendor/javascript/@floating-ui--utils.js +4 -0
  566. data/vendor/javascript/@highlightjs--cdn-assets--es--core.min.js.js +308 -0
  567. data/vendor/javascript/@highlightjs--cdn-assets--es--languages--json.min.js.js +10 -0
  568. data/vendor/javascript/@lezer--common.js +4 -0
  569. data/vendor/javascript/@lezer--highlight.js +4 -0
  570. data/vendor/javascript/@lezer--json.js +4 -0
  571. data/vendor/javascript/@lezer--lr.js +4 -0
  572. data/vendor/javascript/@marijn--find-cluster-break.js +4 -0
  573. data/vendor/javascript/@stimulus-components--dialog.js +4 -0
  574. data/vendor/javascript/@stimulus-components--dropdown.js +4 -0
  575. data/vendor/javascript/codemirror.js +4 -0
  576. data/vendor/javascript/crelt.js +4 -0
  577. data/vendor/javascript/stimulus-use.js +2 -2
  578. data/vendor/javascript/style-mod.js +4 -0
  579. data/vendor/javascript/w3c-keyname.js +4 -0
  580. metadata +209 -69
  581. data/app/assets/stylesheets/spree/admin/plugins/flatfile.scss +0 -4
  582. data/app/helpers/spree/admin/session_assets_helper.rb +0 -24
  583. data/app/javascript/spree/admin/controllers/bootstrap_tabs_controller.js +0 -9
  584. data/app/javascript/spree/admin/controllers/enable_button_controller.js +0 -29
  585. data/app/views/spree/admin/coupon_codes/_coupon_code.html.erb +0 -8
  586. data/app/views/spree/admin/errors/forbidden.html.erb +0 -13
  587. data/app/views/spree/admin/gift_cards/index.csv.erb +0 -22
  588. data/app/views/spree/admin/orders/user/create.turbo_stream.erb +0 -12
  589. data/app/views/spree/admin/orders/user/update.turbo_stream.erb +0 -5
  590. data/app/views/spree/admin/pages/_page.html.erb +0 -26
  591. data/app/views/spree/admin/posts/_filters.html.erb +0 -36
  592. data/app/views/spree/admin/stores/create.turbo_stream.erb +0 -5
  593. data/app/views/spree/admin/translations/_translations_unavailable.html.erb +0 -8
  594. data/app/views/spree/admin/users/index.csv.erb +0 -43
  595. /data/app/views/spree/admin/page_blocks/forms/{_buy_buttons.html.erb → products/_buy_buttons.html.erb} +0 -0
  596. /data/app/views/spree/admin/page_blocks/forms/{_quantity_selector.html.erb → products/_quantity_selector.html.erb} +0 -0
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class CustomDomainsController < ResourceController
4
- add_breadcrumb Spree.t(:domains), :admin_custom_domains_path
4
+ include Spree::Admin::SettingsConcern
5
5
 
6
6
  protected
7
7
 
@@ -1,10 +1,24 @@
1
1
  module Spree
2
2
  module Admin
3
- class ErrorsController < BaseController
3
+ class ErrorsController < Spree::Admin::BaseController
4
4
  skip_before_action :authorize_admin
5
5
 
6
- def forbidden
7
- render status: 403
6
+ def show
7
+ render "spree/admin/errors/#{status_code}", status: status_code
8
+ end
9
+
10
+ private
11
+
12
+ def status_code
13
+ # Extract a 3‑digit code from params or path, default to “500”
14
+ code_str = params[:code].presence ||
15
+ request.path.match(%r{/(\d{3})$})&.[](1) ||
16
+ '500'
17
+ code = code_str.to_i
18
+
19
+ # Only allow valid 4xx/5xx error codes, fallback to 500
20
+ valid_errors = Rack::Utils::HTTP_STATUS_CODES.keys.select { |c| c >= 400 }
21
+ valid_errors.include?(code) ? code : 500
8
22
  end
9
23
  end
10
24
  end
@@ -3,6 +3,8 @@ module Spree
3
3
  class ExportsController < ResourceController
4
4
  include ActiveStorage::SetCurrent # Needed for ActiveStorage to work on development env
5
5
 
6
+ include Spree::Admin::SettingsConcern
7
+
6
8
  new_action.before :assign_params
7
9
  create.before :set_user
8
10
 
@@ -40,13 +42,17 @@ module Spree
40
42
  end
41
43
 
42
44
  def assign_params
43
- @object.type = permitted_resource_params[:type] if Spree::Export.available_types.map(&:to_s).include?(permitted_resource_params[:type])
45
+ @object.type = permitted_resource_params[:type] if available_types.map(&:to_s).include?(permitted_resource_params[:type])
44
46
  @object.search_params = permitted_resource_params[:search_params]
45
47
  end
46
48
 
47
49
  def permitted_resource_params
48
50
  params.require(:export).permit(permitted_export_attributes)
49
51
  end
52
+
53
+ def available_types
54
+ Spree::Export.available_types + ['Spree::Exports::Customers']
55
+ end
50
56
  end
51
57
  end
52
58
  end
@@ -31,16 +31,11 @@ module Spree
31
31
  params[:q][:user_id_eq] = params[:user_id] if params[:user_id].present?
32
32
 
33
33
  @search = @collection
34
-
35
- @search = @search.expired if params[:q][:status_eq] == 'expired'
36
- @search = @search.active if params[:q][:status_eq] == 'active'
37
- @search = @search.redeemed if params[:q][:status_eq] == 'redeemed'
38
-
39
34
  @search = @search.ransack(params[:q])
40
35
 
41
36
  @collection = @search.result.includes(:user, :created_by)
42
37
 
43
- @collection = @collection.page(params[:page]).per(params[:per_page]) if params[:format] != 'csv'
38
+ @collection = @collection.page(params[:page]).per(params[:per_page])
44
39
 
45
40
  @collection
46
41
  end
@@ -62,15 +57,14 @@ module Spree
62
57
  end
63
58
 
64
59
  def gift_cards_filter_dropdown_value
65
- case params.dig(:q, :status_eq)
66
- when 'active'
60
+ if params.dig(:q, :active).present?
67
61
  Spree.t('admin.gift_cards.active')
68
- when 'expired'
62
+ elsif params.dig(:q, :expired).present?
69
63
  Spree.t(:expired)
70
- when 'redeemed'
64
+ elsif params.dig(:q, :redeemed).present?
71
65
  Spree.t('admin.gift_cards.redeemed')
72
66
  else
73
- Spree.t('admin.gift_cards.all')
67
+ Spree.t('admin.gift_cards.all_statuses')
74
68
  end
75
69
  end
76
70
 
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ module Admin
3
+ class ImportMappingsController < ResourceController
4
+ belongs_to 'spree/import', find_by: :number
5
+
6
+ def update_turbo_stream_enabled?
7
+ true
8
+ end
9
+
10
+ def permitted_resource_params
11
+ params.require(:import_mapping).permit(permitted_import_mapping_attributes)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ module Spree
2
+ module Admin
3
+ class ImportRowsController < ResourceController
4
+ belongs_to 'spree/import', find_by: :number
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,66 @@
1
+ module Spree
2
+ module Admin
3
+ class ImportsController < ResourceController
4
+ include ActiveStorage::SetCurrent # Needed for ActiveStorage to work on development env
5
+
6
+ new_action.before :assign_params
7
+ create.before :assign_params
8
+ create.before :set_user
9
+ create.before :set_owner
10
+ create.after :start_mapping
11
+
12
+ # GET /admin/imports/:id
13
+ def show
14
+ if @object.status == 'mapping'
15
+ @mappings = @object.mappings
16
+ @mappings_options = @object.unmapped_file_columns.map { |file_column| [file_column, file_column] }
17
+ else
18
+ @rows = @object.rows.processed.includes(:item)
19
+ end
20
+ end
21
+
22
+ # PUT /admin/imports/:id/complete_mapping
23
+ def complete_mapping
24
+ @object.complete_mapping! if @object.mapping_done?
25
+
26
+ redirect_to spree.admin_import_path(@object)
27
+ end
28
+
29
+ protected
30
+
31
+ def set_user
32
+ @object.user = try_spree_current_user
33
+ end
34
+
35
+ def set_owner
36
+ @object.owner = current_store
37
+ end
38
+
39
+ def start_mapping
40
+ @object.start_mapping!
41
+ end
42
+
43
+ def location_after_save
44
+ spree.admin_import_path(@object)
45
+ end
46
+
47
+ def assign_params
48
+ @object.type = available_types.map(&:to_s).find { |type| type == params.dig(:import, :type) } || available_types.first.to_s
49
+ end
50
+
51
+ def available_types
52
+ Spree::Import.available_types
53
+ end
54
+
55
+ def permitted_resource_params
56
+ params.require(:import).permit(permitted_import_attributes + @object.preferences.keys.map { |key| "preferred_#{key}" })
57
+ end
58
+
59
+ def choose_layout
60
+ return 'turbo_rails/frame' if turbo_frame_request? && action_name != 'show'
61
+
62
+ 'spree/admin_wizard'
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,10 +1,9 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class InvitationsController < BaseController
4
- skip_before_action :authorize_admin, only: [:show, :accept]
4
+ include Spree::Admin::SettingsConcern
5
5
 
6
- add_breadcrumb Spree.t(:users), :admin_admin_users_path
7
- add_breadcrumb Spree.t(:invitations), :admin_invitations_path
6
+ skip_before_action :authorize_admin, only: [:show, :accept]
8
7
 
9
8
  before_action :load_parent, except: [:show]
10
9
  before_action :load_invitation, only: [:destroy]
@@ -117,7 +116,7 @@ module Spree
117
116
  end
118
117
 
119
118
  def choose_layout
120
- action_name == 'show' ? 'spree/minimal' : 'spree/admin'
119
+ action_name == 'show' ? 'spree/minimal' : 'spree/admin_settings'
121
120
  end
122
121
 
123
122
  def model_class
@@ -0,0 +1,24 @@
1
+ module Spree
2
+ module Admin
3
+ class JsonPreviewsController < ResourceController
4
+ private
5
+
6
+ def model_class
7
+ @model_class ||= begin
8
+ klass_name = params[:resource_type]
9
+ # Ensure all Spree models are loaded so that descendants is complete
10
+ Rails.application.eager_load! unless Rails.application.config.eager_load
11
+ klass = Spree.base_class.descendants.find { |spree_klass| spree_klass.name.to_s == klass_name }
12
+ klass ||= Spree.user_class if klass_name == Spree.user_class.to_s
13
+ klass ||= Spree.admin_user_class if klass_name == Spree.admin_user_class.to_s
14
+
15
+ raise ActiveRecord::RecordNotFound if klass.blank?
16
+
17
+ klass
18
+ rescue NameError
19
+ raise ActiveRecord::RecordNotFound
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module Admin
3
+ class MetafieldDefinitionsController < ResourceController
4
+ include Spree::Admin::SettingsConcern
5
+
6
+ new_action.before :set_resource_type_from_params
7
+
8
+ private
9
+
10
+ def update_turbo_stream_enabled?
11
+ true
12
+ end
13
+
14
+ def set_resource_type_from_params
15
+ @object.resource_type = Spree::MetafieldDefinition.available_resources.find { |type| type.name.to_s == params[:resource_type] }
16
+ end
17
+
18
+ def location_after_save
19
+ collection_url
20
+ end
21
+
22
+ def permitted_resource_params
23
+ params.require(:metafield_definition).permit(permitted_metafield_definition_attributes)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ module Spree
2
+ module Admin
3
+ class MetafieldsController < ResourceController
4
+ edit_action.before :build_metafields
5
+
6
+ def build_metafields
7
+ @metafields = @object.metafields
8
+ @metafield_definitions = Spree::MetafieldDefinition.where(resource_type: model_class.name)
9
+
10
+ @metafield_definitions.each do |metafield_definition|
11
+ @object.metafields.build(type: metafield_definition.metafield_type, metafield_definition: metafield_definition) unless @object.has_metafield?(metafield_definition)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def permitted_resource_params
18
+ params.require(@object.model_name.param_key).permit(metafields_attributes: permitted_metafield_attributes)
19
+ end
20
+
21
+ # eg. Spree::Product
22
+ def model_class
23
+ @model_class ||= begin
24
+ klass = params[:resource_type]
25
+ allowed_model_classes.find { |allowed_class| allowed_class.to_s == klass } ||
26
+ raise(ActiveRecord::RecordNotFound, "Resource type not found")
27
+ end
28
+ end
29
+
30
+ def allowed_model_classes
31
+ @allowed_model_classes ||= Rails.application.config.spree.metafield_enabled_resources
32
+ end
33
+
34
+ def update_turbo_stream_enabled?
35
+ true
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,8 @@
1
+ module Spree
2
+ module Admin
3
+ class NewsletterSubscribersController < ResourceController
4
+ add_breadcrumb_icon 'users'
5
+ add_breadcrumb Spree.t(:customers), :admin_users_path
6
+ end
7
+ end
8
+ end
@@ -1,9 +1,9 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class OauthApplicationsController < ResourceController
4
- before_action :set_default_scopes, only: [:new, :edit]
4
+ include Spree::Admin::SettingsConcern
5
5
 
6
- add_breadcrumb Spree.t(:developers), :admin_oauth_applications_path
6
+ before_action :set_default_scopes, only: [:new, :edit]
7
7
 
8
8
  private
9
9
 
@@ -4,7 +4,6 @@ module Spree
4
4
  class UserController < Spree::Admin::BaseController
5
5
  include Spree::Admin::OrderConcern
6
6
  before_action :load_order
7
- before_action :check_authorization
8
7
 
9
8
  def new
10
9
  @user = @order.build_user
@@ -25,11 +24,16 @@ module Spree
25
24
 
26
25
  result = Spree::Dependencies.checkout_advance_service.constantize.call(order: @order, state: max_state)
27
26
 
28
- flash[:error] = result.error.value.full_messages.to_sentence unless result.success?
29
-
30
- render :create, status: :ok
27
+ if result.success?
28
+ flash[:success] = flash_message_for(@order, :successfully_updated)
29
+ redirect_to spree.edit_admin_order_path(@order)
30
+ else
31
+ flash[:error] = result.error.value.full_messages.to_sentence
32
+ redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_entity
33
+ end
31
34
  else
32
- render :create, status: :unprocessable_entity
35
+ flash[:error] = @user.errors.full_messages.to_sentence
36
+ redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_entity
33
37
  end
34
38
  else
35
39
  @user = @order.build_user(user_params)
@@ -39,9 +43,11 @@ module Spree
39
43
  if @user.save
40
44
  @order.associate_user!(@user)
41
45
 
42
- render :create, status: :ok
46
+ flash[:success] = flash_message_for(@order, :successfully_updated)
47
+ redirect_to spree.edit_admin_order_path(@order)
43
48
  else
44
- render :create, status: :unprocessable_entity
49
+ flash[:error] = @user.errors.full_messages.to_sentence
50
+ redirect_to spree.new_admin_order_user_path(@order), status: :unprocessable_entity
45
51
  end
46
52
  end
47
53
  end
@@ -66,7 +72,8 @@ module Spree
66
72
  end
67
73
  end
68
74
 
69
- render :update, status: :ok
75
+ flash[:success] = flash_message_for(@order, :successfully_updated)
76
+ redirect_to spree.edit_admin_order_path(@order)
70
77
  end
71
78
 
72
79
  def destroy
@@ -75,7 +82,6 @@ module Spree
75
82
  @order.save
76
83
 
77
84
  flash[:error] = @order.errors.full_messages.to_sentence if @order.invalid?
78
-
79
85
  redirect_to spree.edit_admin_order_path(@order)
80
86
  end
81
87
 
@@ -85,7 +91,7 @@ module Spree
85
91
  params.require(:user).permit(permitted_user_attributes)
86
92
  end
87
93
 
88
- def check_authorization
94
+ def authorize_admin
89
95
  authorize! :update_customer, @order
90
96
  end
91
97
  end
@@ -12,11 +12,21 @@ module Spree
12
12
 
13
13
  helper_method :model_class, :object_url
14
14
 
15
+ # GET /admin/orders/new
16
+ def new
17
+ @order = current_store.orders.new
18
+ end
19
+
15
20
  # POST /admin/orders
16
21
  def create
17
- @order = Spree::Order.create(created_by: try_spree_current_user, store: current_store)
18
-
19
- redirect_to spree.edit_admin_order_path(@order)
22
+ @order = current_store.orders.new(permitted_resource_params)
23
+ @order.created_by = try_spree_current_user
24
+ if @order.save
25
+ flash[:success] = flash_message_for(@order, :successfully_created)
26
+ redirect_to spree.edit_admin_order_path(@order)
27
+ else
28
+ render :new, status: :unprocessable_entity
29
+ end
20
30
  end
21
31
 
22
32
  # GET /admin/orders/:id/edit
@@ -113,6 +123,10 @@ module Spree
113
123
  def object_url
114
124
  spree.admin_order_path(@order)
115
125
  end
126
+
127
+ def permitted_resource_params
128
+ params.require(:order).permit(permitted_order_attributes)
129
+ end
116
130
  end
117
131
  end
118
132
  end
@@ -49,7 +49,8 @@ module Spree
49
49
  params.require(:page_block).permit(
50
50
  permitted_page_block_attributes +
51
51
  [link_attributes: permitted_page_link_attributes + [:id]] +
52
- @object.preferences.keys.map { |key| "preferred_#{key}" }
52
+ @object.preferences.keys.map { |key| "preferred_#{key}" } +
53
+ [preferred_metafield_definition_ids: []]
53
54
  )
54
55
  end
55
56
  end
@@ -13,11 +13,17 @@ module Spree
13
13
 
14
14
  private
15
15
 
16
+ def find_resource
17
+ model_class.accessible_by(current_ability, :manage).find(params[:id])
18
+ end
19
+
16
20
  def collection_url
17
21
  @collection_url ||= if @parent.is_a?(Spree::PageSection)
18
22
  spree.edit_admin_page_section_path(@parent)
19
23
  elsif @parent.is_a?(Spree::PageBlock)
20
24
  spree.edit_admin_page_section_block_path(@parent.section, @parent)
25
+ elsif @parent.is_a?(Spree::Store)
26
+ spree.edit_admin_store_path(section: :checkout)
21
27
  end
22
28
  end
23
29
 
@@ -28,6 +34,8 @@ module Spree
28
34
  Spree::PageBlock.find(params[:block_id])
29
35
  elsif params[:page_section_id].present?
30
36
  Spree::PageSection.find(params[:page_section_id])
37
+ elsif params[:store_id].present?
38
+ current_store
31
39
  end
32
40
  end
33
41
 
@@ -39,7 +47,7 @@ module Spree
39
47
  @page_link.linkable ||= @parent.default_linkable_resource
40
48
  end
41
49
 
42
- # for create action we don't pass the page_link at all
50
+ # for create action we don't pass page_link at all
43
51
  def permitted_resource_params
44
52
  if params[:page_link].present?
45
53
  params.require(:page_link).permit(permitted_page_link_attributes)
@@ -28,15 +28,7 @@ module Spree
28
28
  end
29
29
 
30
30
  def collection
31
- return @collection if @collection.present?
32
-
33
- @collection = current_store.pages.custom
34
-
35
- params[:q] ||= {}
36
- params[:q][:s] ||= 'created_at desc'
37
-
38
- @search = @collection.ransack(params[:q])
39
- @collection = @search.result.page(params[:page]).per(params[:per_page])
31
+ super.custom.without_previews
40
32
  end
41
33
 
42
34
  def permitted_resource_params
@@ -2,7 +2,7 @@ module Spree
2
2
  module Admin
3
3
  class PaymentMethodsController < ResourceController
4
4
  include Spree::Admin::PreferencesConcern
5
- add_breadcrumb Spree.t(:payment_methods), :admin_payment_methods_path
5
+ include Spree::Admin::SettingsConcern
6
6
 
7
7
  prepend_before_action :require_payment_type, only: [:new, :create]
8
8
  before_action -> { clear_empty_password_preferences(:payment_method) }, only: :update
@@ -0,0 +1,28 @@
1
+ module Spree
2
+ module Admin
3
+ class PoliciesController < ResourceController
4
+ include Spree::Admin::SettingsConcern
5
+
6
+ before_action :set_policy_owner, only: %i[create update]
7
+
8
+ private
9
+
10
+ def permitted_resource_params
11
+ params.require(:policy).permit(permitted_policy_attributes)
12
+ end
13
+
14
+ def update_turbo_stream_enabled?
15
+ true
16
+ end
17
+
18
+ def set_policy_owner
19
+ @policy.owner ||= current_store
20
+ end
21
+
22
+ def object_url(object = nil, options = {})
23
+ target = object || @object
24
+ spree.admin_policy_url(target&.id, options)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -3,7 +3,7 @@ module Spree
3
3
  class ProductsController < ResourceController
4
4
  include Spree::Admin::StockLocationsHelper
5
5
  include Spree::Admin::BulkOperationsConcern
6
- include Spree::Admin::SessionAssetsHelper
6
+ include Spree::Admin::AssetsHelper
7
7
  include Spree::Admin::ProductsBreadcrumbConcern
8
8
 
9
9
  helper 'spree/admin/products'
@@ -15,7 +15,6 @@ module Spree
15
15
 
16
16
  before_action :prepare_product_params, only: [:create, :update]
17
17
  before_action :strip_stock_items_param, only: [:create, :update]
18
- before_action :ensure_session_uploaded_assets_uuid, only: :new
19
18
  before_action :check_slug_availability, only: [:create, :update]
20
19
 
21
20
  new_action.before :build_master_prices
@@ -323,6 +322,8 @@ module Spree
323
322
  end
324
323
 
325
324
  def build_product_properties
325
+ return unless Spree::Config[:product_properties_enabled]
326
+
326
327
  Spree::Property.all.each do |property|
327
328
  @product.product_properties.build(property: property) unless @product.product_properties.find { |product_property| product_property.property_id == property.id }
328
329
  end
@@ -331,10 +332,12 @@ module Spree
331
332
  def assign_master_images
332
333
  return unless @product.master.persisted?
333
334
 
334
- return if session_uploaded_assets.empty?
335
+ uploaded_assets = session_uploaded_assets('Spree::Variant')
336
+
337
+ return if uploaded_assets.empty?
335
338
 
336
- session_uploaded_assets.update_all(viewable_id: @product.master.id, viewable_type: 'Spree::Variant', updated_at: Time.current)
337
- clear_session_for_uploaded_assets
339
+ uploaded_assets.update_all(viewable_id: @product.master.id, viewable_type: 'Spree::Variant', updated_at: Time.current)
340
+ clear_session_for_uploaded_assets('Spree::Variant')
338
341
  end
339
342
 
340
343
  def product_includes
@@ -1,6 +1,8 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class ProfileController < BaseController
4
+ include Spree::Admin::SettingsConcern
5
+
4
6
  def edit
5
7
  @user = try_spree_current_user
6
8
  end
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class RefundReasonsController < ResourceController
4
- add_breadcrumb Spree.t(:refund_reasons), :admin_refund_reasons_path
4
+ include Spree::Admin::SettingsConcern
5
5
 
6
6
  private
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class ReimbursementTypesController < ResourceController
4
- add_breadcrumb Spree.t(:reimbursement_types), :admin_reimbursement_types_path
4
+ include Spree::Admin::SettingsConcern
5
5
 
6
6
  private
7
7