spree_admin 5.0.3 → 5.1.0.beta

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 (268) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/login_sidebar_background.png +0 -0
  3. data/app/assets/stylesheets/spree/admin/components/_bulk_panel.scss +8 -1
  4. data/app/assets/stylesheets/spree/admin/components/_buttons.scss +12 -20
  5. data/app/assets/stylesheets/spree/admin/components/_cards.scss +9 -3
  6. data/app/assets/stylesheets/spree/admin/components/_dropdowns.scss +13 -40
  7. data/app/assets/stylesheets/spree/admin/components/_filters.scss +32 -3
  8. data/app/assets/stylesheets/spree/admin/components/_main.scss +107 -31
  9. data/app/assets/stylesheets/spree/admin/components/_media_form.scss +21 -9
  10. data/app/assets/stylesheets/spree/admin/components/_modals.scss +4 -3
  11. data/app/assets/stylesheets/spree/admin/components/_navbar.scss +5 -9
  12. data/app/assets/stylesheets/spree/admin/components/_navigation.scss +0 -1
  13. data/app/assets/stylesheets/spree/admin/components/_sortable_tree.scss +6 -2
  14. data/app/assets/stylesheets/spree/admin/components/_tables.scss +35 -5
  15. data/app/assets/stylesheets/spree/admin/global/_variables.scss +37 -17
  16. data/app/assets/stylesheets/spree/admin/plugins/tom-select.bootstrap4.scss +5 -4
  17. data/app/assets/stylesheets/spree/admin/shared/_base.scss +50 -17
  18. data/app/assets/stylesheets/spree/admin/shared/_forms.scss +6 -2
  19. data/app/assets/stylesheets/spree/admin/views/_page_builder.scss +30 -21
  20. data/app/controllers/concerns/spree/admin/breadcrumb_concern.rb +22 -0
  21. data/app/controllers/concerns/spree/admin/preferences_concern.rb +22 -0
  22. data/app/controllers/concerns/spree/admin/products_breadcrumb_concern.rb +22 -0
  23. data/app/controllers/concerns/spree/admin/promotions_breadcrumb_concern.rb +23 -0
  24. data/app/controllers/concerns/spree/admin/storefront_breadcrumb_concern.rb +12 -0
  25. data/app/controllers/spree/admin/addresses_controller.rb +4 -0
  26. data/app/controllers/spree/admin/admin_users_controller.rb +112 -0
  27. data/app/controllers/spree/admin/assets_controller.rb +7 -9
  28. data/app/controllers/spree/admin/base_controller.rb +21 -10
  29. data/app/controllers/spree/admin/checkouts_controller.rb +4 -0
  30. data/app/controllers/spree/admin/classifications_controller.rb +4 -0
  31. data/app/controllers/spree/admin/coupon_codes_controller.rb +2 -0
  32. data/app/controllers/spree/admin/custom_domains_controller.rb +6 -0
  33. data/app/controllers/spree/admin/customer_returns_controller.rb +4 -0
  34. data/app/controllers/spree/admin/dashboard_controller.rb +19 -14
  35. data/app/controllers/spree/admin/digital_assets_controller.rb +8 -0
  36. data/app/controllers/spree/admin/exports_controller.rb +6 -2
  37. data/app/controllers/spree/admin/integrations_controller.rb +61 -0
  38. data/app/controllers/spree/admin/invitations_controller.rb +128 -0
  39. data/app/controllers/spree/admin/line_items_controller.rb +4 -0
  40. data/app/controllers/spree/admin/oauth_applications_controller.rb +6 -0
  41. data/app/controllers/spree/admin/option_types_controller.rb +15 -0
  42. data/app/controllers/spree/admin/option_values_controller.rb +4 -0
  43. data/app/controllers/spree/admin/orders/return_authorizations_controller.rb +4 -0
  44. data/app/controllers/spree/admin/orders_controller.rb +11 -0
  45. data/app/controllers/spree/admin/page_blocks_controller.rb +3 -2
  46. data/app/controllers/spree/admin/page_links_controller.rb +9 -0
  47. data/app/controllers/spree/admin/page_sections_controller.rb +13 -4
  48. data/app/controllers/spree/admin/pages_controller.rb +7 -0
  49. data/app/controllers/spree/admin/payment_methods_controller.rb +23 -12
  50. data/app/controllers/spree/admin/post_categories_controller.rb +3 -0
  51. data/app/controllers/spree/admin/posts_controller.rb +11 -0
  52. data/app/controllers/spree/admin/products_controller.rb +11 -8
  53. data/app/controllers/spree/admin/promotion_actions_controller.rb +10 -2
  54. data/app/controllers/spree/admin/promotion_rules_controller.rb +10 -2
  55. data/app/controllers/spree/admin/promotions_controller.rb +6 -0
  56. data/app/controllers/spree/admin/properties_controller.rb +15 -0
  57. data/app/controllers/spree/admin/refund_reasons_controller.rb +7 -0
  58. data/app/controllers/spree/admin/refunds_controller.rb +4 -0
  59. data/app/controllers/spree/admin/reimbursement_types_controller.rb +7 -0
  60. data/app/controllers/spree/admin/reimbursements_controller.rb +4 -0
  61. data/app/controllers/spree/admin/reports_controller.rb +12 -2
  62. data/app/controllers/spree/admin/resource_controller.rb +1 -1
  63. data/app/controllers/spree/admin/return_authorization_reasons_controller.rb +7 -0
  64. data/app/controllers/spree/admin/return_authorizations_controller.rb +4 -0
  65. data/app/controllers/spree/admin/return_items_controller.rb +6 -0
  66. data/app/controllers/spree/admin/role_users_controller.rb +36 -0
  67. data/app/controllers/spree/admin/roles_controller.rb +8 -0
  68. data/app/controllers/spree/admin/shipments_controller.rb +2 -2
  69. data/app/controllers/spree/admin/shipping_categories_controller.rb +7 -0
  70. data/app/controllers/spree/admin/shipping_methods_controller.rb +6 -0
  71. data/app/controllers/spree/admin/stock_items_controller.rb +13 -0
  72. data/app/controllers/spree/admin/stock_locations_controller.rb +7 -0
  73. data/app/controllers/spree/admin/stock_transfers_controller.rb +14 -2
  74. data/app/controllers/spree/admin/store_credit_categories_controller.rb +5 -0
  75. data/app/controllers/spree/admin/store_credits_controller.rb +4 -0
  76. data/app/controllers/spree/admin/storefront_controller.rb +3 -0
  77. data/app/controllers/spree/admin/stores_controller.rb +17 -2
  78. data/app/controllers/spree/admin/tax_categories_controller.rb +7 -0
  79. data/app/controllers/spree/admin/tax_rates_controller.rb +6 -0
  80. data/app/controllers/spree/admin/taxonomies_controller.rb +15 -0
  81. data/app/controllers/spree/admin/taxons_controller.rb +24 -1
  82. data/app/controllers/spree/admin/themes_controller.rb +7 -0
  83. data/app/controllers/spree/admin/translations_controller.rb +9 -1
  84. data/app/controllers/spree/admin/user_passwords_controller.rb +22 -0
  85. data/app/controllers/spree/admin/user_sessions_controller.rb +23 -0
  86. data/app/controllers/spree/admin/users_controller.rb +11 -2
  87. data/app/controllers/spree/admin/variants_controller.rb +13 -0
  88. data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +34 -12
  89. data/app/controllers/spree/admin/zones_controller.rb +5 -0
  90. data/app/helpers/spree/admin/base_helper.rb +33 -32
  91. data/app/helpers/spree/admin/bulk_operations_helper.rb +8 -2
  92. data/app/helpers/spree/admin/modal_helper.rb +1 -1
  93. data/app/helpers/spree/admin/navigation_helper.rb +12 -6
  94. data/app/helpers/spree/admin/posts_helper.rb +1 -1
  95. data/app/helpers/spree/admin/session_assets_helper.rb +1 -1
  96. data/app/helpers/spree/admin/stores_helper.rb +1 -18
  97. data/app/helpers/spree/admin/tags_helper.rb +2 -2
  98. data/app/javascript/spree/admin/application.js +2 -2
  99. data/app/javascript/spree/admin/controllers/asset_uploader_controller.js +3 -2
  100. data/app/javascript/spree/admin/controllers/variants_form_controller.js +3 -2
  101. data/app/javascript/spree/admin/helpers/bootstrap.js +3 -3
  102. data/app/javascript/spree/admin/helpers/trix/video_embed.js +2 -2
  103. data/app/views/active_storage/_upload_form.html.erb +1 -1
  104. data/app/views/layouts/spree/minimal.html.erb +22 -0
  105. data/app/views/spree/admin/admin_users/_admin_user.html.erb +19 -0
  106. data/app/views/spree/admin/admin_users/_audit_log.html.erb +5 -0
  107. data/app/views/spree/admin/admin_users/_form.html.erb +12 -0
  108. data/app/views/spree/admin/admin_users/edit.html.erb +35 -0
  109. data/app/views/spree/admin/admin_users/index.html.erb +18 -0
  110. data/app/views/spree/admin/admin_users/new.html.erb +21 -0
  111. data/app/views/spree/admin/admin_users/show.html.erb +113 -0
  112. data/app/views/spree/admin/coupon_codes/index.html.erb +6 -6
  113. data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +1 -1
  114. data/app/views/spree/admin/customer_returns/index.html.erb +1 -1
  115. data/app/views/spree/admin/dashboard/_store_preview.html.erb +1 -1
  116. data/app/views/spree/admin/dashboard/_top_products.html.erb +5 -3
  117. data/app/views/spree/admin/digital_assets/_table.html.erb +1 -1
  118. data/app/views/spree/admin/digital_assets/index.html.erb +0 -1
  119. data/app/views/spree/admin/exports/index.html.erb +1 -1
  120. data/app/views/spree/admin/integrations/_integration.html.erb +36 -0
  121. data/app/views/spree/admin/integrations/edit.html.erb +11 -0
  122. data/app/views/spree/admin/integrations/index.html.erb +23 -0
  123. data/app/views/spree/admin/integrations/new.html.erb +14 -0
  124. data/app/views/spree/admin/invitations/_invitation.html.erb +52 -0
  125. data/app/views/spree/admin/invitations/create.turbo_stream.erb +4 -0
  126. data/app/views/spree/admin/invitations/index.html.erb +21 -0
  127. data/app/views/spree/admin/invitations/new.html.erb +32 -0
  128. data/app/views/spree/admin/invitations/show.html.erb +9 -0
  129. data/app/views/spree/admin/line_items/new.html.erb +2 -2
  130. data/app/views/spree/admin/oauth_applications/index.html.erb +1 -1
  131. data/app/views/spree/admin/option_types/edit.html.erb +1 -1
  132. data/app/views/spree/admin/option_types/index.html.erb +1 -1
  133. data/app/views/spree/admin/orders/_customer.html.erb +1 -2
  134. data/app/views/spree/admin/orders/_filters.html.erb +28 -22
  135. data/app/views/spree/admin/orders/_list.html.erb +1 -1
  136. data/app/views/spree/admin/orders/_refunds.html.erb +1 -1
  137. data/app/views/spree/admin/orders/_shipment.html.erb +1 -1
  138. data/app/views/spree/admin/orders/_summary.html.erb +1 -1
  139. data/app/views/spree/admin/orders/_table_filter_dropdown.html.erb +2 -2
  140. data/app/views/spree/admin/orders/customer_returns/_customer_return.html.erb +1 -1
  141. data/app/views/spree/admin/orders/customer_returns/_return_item_decision.html.erb +1 -1
  142. data/app/views/spree/admin/orders/return_authorizations/_form.html.erb +1 -1
  143. data/app/views/spree/admin/orders/return_authorizations/show.html.erb +2 -2
  144. data/app/views/spree/admin/page_blocks/_form_tab_buttons.html.erb +5 -7
  145. data/app/views/spree/admin/page_blocks/edit.html.erb +3 -5
  146. data/app/views/spree/admin/page_blocks/forms/_image.html.erb +9 -0
  147. data/app/views/spree/admin/page_builder/_add_block.html.erb +1 -1
  148. data/app/views/spree/admin/page_builder/_header.html.erb +35 -28
  149. data/app/views/spree/admin/page_builder/_pages_dropdown.html.erb +15 -21
  150. data/app/views/spree/admin/page_builder/_sidebar.html.erb +1 -1
  151. data/app/views/spree/admin/page_builder/_sidebar_block.html.erb +11 -10
  152. data/app/views/spree/admin/page_builder/_sidebar_sections_toolbar.html.erb +152 -39
  153. data/app/views/spree/admin/page_links/_list.html.erb +2 -2
  154. data/app/views/spree/admin/page_links/edit.html.erb +2 -4
  155. data/app/views/spree/admin/page_sections/_form_tab_buttons.html.erb +6 -10
  156. data/app/views/spree/admin/page_sections/new.html.erb +1 -1
  157. data/app/views/spree/admin/pages/edit.html.erb +2 -2
  158. data/app/views/spree/admin/payment_methods/_form.html.erb +1 -1
  159. data/app/views/spree/admin/payment_methods/index.html.erb +16 -15
  160. data/app/views/spree/admin/payments/_payment.html.erb +1 -1
  161. data/app/views/spree/admin/post_categories/index.html.erb +1 -1
  162. data/app/views/spree/admin/posts/index.html.erb +1 -1
  163. data/app/views/spree/admin/products/_bulk_operations.html.erb +1 -1
  164. data/app/views/spree/admin/products/_filters.html.erb +2 -5
  165. data/app/views/spree/admin/products/_list.html.erb +1 -1
  166. data/app/views/spree/admin/products/_table_filter_dropdown.html.erb +2 -2
  167. data/app/views/spree/admin/products/form/_categorization.html.erb +34 -30
  168. data/app/views/spree/admin/products/form/_variants.html.erb +1 -0
  169. data/app/views/spree/admin/promotion_actions/_promotion_action.html.erb +1 -1
  170. data/app/views/spree/admin/promotion_rules/_promotion_rule.html.erb +1 -1
  171. data/app/views/spree/admin/promotions/_filters.html.erb +2 -6
  172. data/app/views/spree/admin/promotions/_header.html.erb +1 -3
  173. data/app/views/spree/admin/promotions/_sidebar.html.erb +18 -0
  174. data/app/views/spree/admin/promotions/_table_filter_dropdown.html.erb +2 -2
  175. data/app/views/spree/admin/promotions/index.html.erb +1 -1
  176. data/app/views/spree/admin/properties/edit.html.erb +1 -1
  177. data/app/views/spree/admin/properties/index.html.erb +1 -1
  178. data/app/views/spree/admin/refund_reasons/index.html.erb +1 -1
  179. data/app/views/spree/admin/reimbursement_types/index.html.erb +1 -1
  180. data/app/views/spree/admin/reimbursements/edit.html.erb +2 -2
  181. data/app/views/spree/admin/reimbursements/show.html.erb +1 -1
  182. data/app/views/spree/admin/reports/_report.html.erb +1 -1
  183. data/app/views/spree/admin/return_authorization_reasons/index.html.erb +1 -1
  184. data/app/views/spree/admin/return_authorizations/_filters.html.erb +2 -2
  185. data/app/views/spree/admin/return_authorizations/_list.html.erb +1 -1
  186. data/app/views/spree/admin/roles/edit.html.erb +6 -4
  187. data/app/views/spree/admin/roles/index.html.erb +11 -7
  188. data/app/views/spree/admin/shared/_alerts.html.erb +1 -1
  189. data/app/views/spree/admin/shared/_breadcrumbs.html.erb +13 -0
  190. data/app/views/spree/admin/shared/_calendar_range_picker.html.erb +1 -1
  191. data/app/views/spree/admin/shared/_content_header.html.erb +3 -3
  192. data/app/views/spree/admin/shared/_filters_button.html.erb +1 -1
  193. data/app/views/spree/admin/shared/_filters_search_bar.html.erb +1 -1
  194. data/app/views/spree/admin/shared/_head.html.erb +10 -1
  195. data/app/views/spree/admin/shared/_header.html.erb +26 -17
  196. data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -1
  197. data/app/views/spree/admin/shared/_multi_product_picker.html.erb +1 -1
  198. data/app/views/spree/admin/shared/_new_item_dropdown.html.erb +32 -0
  199. data/app/views/spree/admin/shared/_no_resource_found.html.erb +6 -3
  200. data/app/views/spree/admin/shared/_offcanvas_nav.html.erb +1 -14
  201. data/app/views/spree/admin/shared/_refunds.html.erb +1 -1
  202. data/app/views/spree/admin/shared/_sidebar.html.erb +0 -8
  203. data/app/views/spree/admin/shared/_tax_nav.html.erb +1 -0
  204. data/app/views/spree/admin/shared/_team_nav.html.erb +13 -0
  205. data/app/views/spree/admin/shared/_user_dropdown.html.erb +25 -20
  206. data/app/views/spree/admin/shared/devise/_links.html.erb +18 -0
  207. data/app/views/spree/admin/shared/sidebar/_enterprise_edition_notice.html.erb +7 -5
  208. data/app/views/spree/admin/shared/sidebar/_integrations_nav.html.erb +5 -7
  209. data/app/views/spree/admin/shared/sidebar/_orders_nav.html.erb +2 -2
  210. data/app/views/spree/admin/shared/sidebar/_products_nav.html.erb +2 -2
  211. data/app/views/spree/admin/shared/sidebar/_promotions_nav.html.erb +17 -0
  212. data/app/views/spree/admin/shared/sidebar/_returns_nav.html.erb +1 -1
  213. data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +33 -75
  214. data/app/views/spree/admin/shared/sidebar/_store_nav.html.erb +17 -36
  215. data/app/views/spree/admin/shared/sidebar/_storefront_nav.html.erb +6 -2
  216. data/app/views/spree/admin/shared/sidebar/_vendors_nav.html.erb +9 -7
  217. data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +1 -1
  218. data/app/views/spree/admin/shipping_categories/index.html.erb +1 -1
  219. data/app/views/spree/admin/shipping_methods/_form.html.erb +7 -134
  220. data/app/views/spree/admin/shipping_methods/form/_display.html.erb +25 -0
  221. data/app/views/spree/admin/shipping_methods/form/_estimated_transit_business_days.html.erb +23 -0
  222. data/app/views/spree/admin/shipping_methods/form/_shipping_categories.html.erb +21 -0
  223. data/app/views/spree/admin/shipping_methods/form/_tax_category.html.erb +16 -0
  224. data/app/views/spree/admin/shipping_methods/form/_tracking_url.html.erb +18 -0
  225. data/app/views/spree/admin/shipping_methods/form/_zones.html.erb +26 -0
  226. data/app/views/spree/admin/shipping_methods/index.html.erb +1 -1
  227. data/app/views/spree/admin/stock_items/index.html.erb +1 -1
  228. data/app/views/spree/admin/stock_locations/_stock_location.html.erb +5 -3
  229. data/app/views/spree/admin/stock_locations/index.html.erb +4 -2
  230. data/app/views/spree/admin/stock_transfers/index.html.erb +1 -1
  231. data/app/views/spree/admin/store_credit_categories/index.html.erb +1 -1
  232. data/app/views/spree/admin/store_credits/_list.html.erb +1 -1
  233. data/app/views/spree/admin/stores/edit_emails.html.erb +1 -1
  234. data/app/views/spree/admin/stores/form/_basic.html.erb +1 -1
  235. data/app/views/spree/admin/stores/form/_emails.html.erb +1 -1
  236. data/app/views/spree/admin/tax_categories/index.html.erb +1 -1
  237. data/app/views/spree/admin/tax_rates/index.html.erb +1 -1
  238. data/app/views/spree/admin/taxonomies/index.html.erb +1 -1
  239. data/app/views/spree/admin/themes/_theme.html.erb +6 -4
  240. data/app/views/spree/admin/themes/_theme_preview_image.html.erb +6 -4
  241. data/app/views/spree/admin/themes/index.html.erb +1 -1
  242. data/app/views/spree/admin/translations/edit.html.erb +1 -1
  243. data/app/views/spree/admin/user_passwords/edit.html.erb +21 -0
  244. data/app/views/spree/admin/user_passwords/new.html.erb +12 -0
  245. data/app/views/spree/admin/user_sessions/new.html.erb +16 -0
  246. data/app/views/spree/admin/users/_form.html.erb +10 -8
  247. data/app/views/spree/admin/users/_user.html.erb +4 -4
  248. data/app/views/spree/admin/users/index.html.erb +4 -4
  249. data/app/views/spree/admin/users/new.html.erb +1 -1
  250. data/app/views/spree/admin/variants/_search_result.html.erb +1 -1
  251. data/app/views/spree/admin/variants/form/_media.html.erb +1 -0
  252. data/app/views/spree/admin/variants/form/_media_asset.html.erb +1 -1
  253. data/app/views/spree/admin/webhooks_subscribers/_form.html.erb +37 -19
  254. data/app/views/spree/admin/webhooks_subscribers/_webhooks_subscriber.html.erb +12 -6
  255. data/app/views/spree/admin/webhooks_subscribers/edit.html.erb +2 -2
  256. data/app/views/spree/admin/webhooks_subscribers/index.html.erb +1 -1
  257. data/app/views/spree/admin/webhooks_subscribers/show.html.erb +58 -47
  258. data/app/views/spree/admin/zones/_form.html.erb +11 -15
  259. data/app/views/spree/admin/zones/index.html.erb +1 -1
  260. data/config/importmap.rb +2 -2
  261. data/config/locales/en.yml +3 -0
  262. data/config/routes.rb +13 -1
  263. data/lib/spree/admin/engine.rb +11 -1
  264. data/lib/spree/admin.rb +1 -0
  265. data/vendor/javascript/bootstrap--dist--js--bootstrap.bundle.min.js.js +4 -4
  266. data/vendor/javascript/dompurify.js +24 -24
  267. metadata +65 -9
  268. data/app/javascript/spree/admin/controllers/webhook_subscriber_events_controller.js +0 -19
@@ -2,9 +2,7 @@
2
2
 
3
3
  $gray-25: #F9F9F9;
4
4
  $gray-50: #F3F3F3;
5
- $gray-75: #F0F0F0;
6
- $gray-100: #EAEAEA !default;
7
- $gray-150: #E0E0E0 !default;
5
+ $gray-100: #E7E5E4 !default;
8
6
  $gray-200: #D5D5D5 !default;
9
7
  $gray-300: #B3B3B3 !default;
10
8
  $gray-400: #999999 !default;
@@ -24,6 +22,15 @@ $white: #FFFFFF !default;
24
22
  $action: #F4F9FF !default;
25
23
  $action-border: #e2ecff !default;
26
24
 
25
+ // Override Bootstrap 4.6 breakpoints
26
+ $container-max-widths: (
27
+ sm: 540px,
28
+ md: 720px,
29
+ lg: 960px,
30
+ xl: 1240px
31
+ ) !default;
32
+
33
+
27
34
  $theme-colors: (
28
35
  "white": $white,
29
36
  "black": $black,
@@ -50,7 +57,7 @@ $theme-colors: (
50
57
  );
51
58
 
52
59
  $body-color: #333 !default;
53
- $body-bg: #FCFCFC !default;
60
+ $body-bg: $gray-25 !default;
54
61
  $enable-shadows: false;
55
62
  $enable-responsive-font-sizes: true;
56
63
  $font-family-sans-serif: Inter, sans-serif !default;
@@ -65,19 +72,18 @@ $line-height-base: 1.5 !default;
65
72
  $border-radius: 0.5rem !default;
66
73
  $border-radius-sm: 0.4rem !default;
67
74
  $border-radius-lg: 0.75rem !default;
68
- $card-border-radius: $border-radius-lg !default;
69
75
  $border-color: $gray-100 !default;
70
- $input-border-color: $gray-100 !default;
76
+ $input-border-color: $border-color !default;
71
77
  $list-group-border-color: $border-color !default;
72
78
  $list-group-hover-bg: $gray-25 !default;
73
79
  $list-group-active-bg: $action !default;
74
80
  $list-group-active-border-color: $action-border !default;
75
81
 
76
- $thumbnail-border-color: $gray-100 !default;
82
+ $thumbnail-border-color: $border-color !default;
77
83
  $hr-border-color: $border-color !default;
78
- $table-border-color: $gray-50 !default;
84
+ $table-border-color: $border-color !default;
79
85
  $card-border-color: $border-color !default;
80
- $input-btn-focus-width: 0.15rem !default;
86
+ $input-btn-focus-width: 0.18rem !default;
81
87
 
82
88
  $card-spacer-y: .75rem !default;
83
89
  $card-spacer-x: 1rem !default;
@@ -87,6 +93,9 @@ $component-active-bg: $blue !default;
87
93
  $input-placeholder-color: $gray-500;
88
94
  $input-padding-y: .5rem !default;
89
95
  $input-disabled-bg: $gray-50 !default;
96
+ $input-focus-border-color: $blue !default;
97
+ $input-box-shadow: none !default;
98
+ $btn-box-shadow: $input-box-shadow !default;
90
99
  $custom-select-disabled-bg: $gray-50 !default;
91
100
 
92
101
  $text-muted: $gray-400 !default;
@@ -104,6 +113,11 @@ $box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06
104
113
  $box-shadow-xs: rgba(43, 34, 51, 0.04) 0px 1px 2px !default;
105
114
  $box-shadow-lg: rgba(0, 5, 13, 0.5) 0px 4px 8px 2px;
106
115
 
116
+ $card-border-width: 0px !default;
117
+ $card-box-shadow: 0 0 0 1px $card-border-color, 0 1px 2px 0 rgba(0, 0, 0, 0.05) !default;
118
+ $card-bg: $white !default;
119
+ $card-border-radius: $border-radius-lg !default;
120
+
107
121
  $tooltip-border-radius: $border-radius !default;
108
122
  $tooltip-opacity: 1 !default;
109
123
  $tooltip-margin: 0.25rem 0 !default;
@@ -149,27 +163,26 @@ $display4-weight: 400 !default;
149
163
 
150
164
  $dropdown-border-width: 0px !default;
151
165
  $dropdown-border-radius: $border-radius-lg !default;
152
- $dropdown-link-hover-bg: $blue !default;
153
- $dropdown-link-hover-color: $white !default;
166
+ $dropdown-link-hover-bg: $gray-50 !default;
154
167
  $dropdown-box-shadow: rgba(209, 217, 224, 0.8) 0px 0px 0px 1px, rgba(37, 41, 46, 0.04) 0px 6px 12px -3px, rgba(37, 41, 46, 0.12) 0px 6px 18px 0px !default;
155
168
  $dropdown-padding-x: 0.25rem !default;
156
169
  $dropdown-padding-y: 0.25rem !default;
157
- $dropdown-divider-bg: $gray-25 !default;
170
+ $dropdown-divider-bg: $gray-50 !default;
158
171
  $dropdown-divider-margin-y: 0.25rem !default;
159
172
  $dropdown-header-color: $gray-500 !default;
160
173
 
161
- $modal-backdrop-bg: $white !default;
174
+ $modal-backdrop-bg: $body-bg !default;
162
175
  $modal-backdrop-opacity: 0.8 !default;
163
- $modal-content-border-color: $border-color !default;
176
+ $modal-content-border-color: $border-color !default;
177
+ $modal-content-border-width: 0px !default;
164
178
  $modal-header-padding: 1rem 1.25rem 1rem 1.25rem !default;
165
179
  $modal-inner-padding: 1rem 1.25rem 1rem 1.25rem !default;
166
180
  $modal-fade-transform: translate(0, 0) !default;
167
181
  $modal-show-transform: none !default;
168
182
  $modal-transition: transform .2s ease-out !default;
169
183
  $modal-scale-transform: scale(1.02) !default;
170
- $modal-content-border-width: 0px !default;
171
184
  $modal-header-border-width: 1px !default;
172
- $modal-content-box-shadow-xs: rgba(0, 0, 0, 0.08) 0px 0px 0px 1px, rgba(0, 0, 0, 0.02) 0px 1px 1px 0px, rgba(0, 0, 0, 0.04) 0px 8px 16px -4px, rgba(0, 0, 0, 0.06) 0px 24px 32px -8px !default;
185
+ $modal-content-box-shadow-xs: $border-color 0px 0px 0px 1px, rgba(0, 0, 0, 0.02) 0px 1px 1px 0px, rgba(0, 0, 0, 0.04) 0px 8px 16px -4px, rgba(0, 0, 0, 0.06) 0px 24px 32px -8px !default;
173
186
  $modal-content-box-shadow-sm-up: $modal-content-box-shadow-xs !default;
174
187
  $modal-footer-margin-between: 0 !default;
175
188
 
@@ -177,6 +190,11 @@ $alert-padding-y: 0.5rem !default;
177
190
  $alert-padding-x: 1rem !default;
178
191
  $alert-border-radius: $border-radius-lg;
179
192
 
193
+ $breadcrumb-bg: transparent !default;
194
+ $breadcrumb-padding-y: 0 !default;
195
+ $breadcrumb-padding-x: 1rem !default;
196
+ $breadcrumb-margin-bottom: 0 !default;
197
+
180
198
  $embed-responsive-aspect-ratios: (
181
199
  (21 9),
182
200
  (16 9),
@@ -193,4 +211,6 @@ $code-color: $gray-600 !default;
193
211
  $list-group-bg: transparent !default;
194
212
  $list-group-item-padding-x: 1rem !default;
195
213
 
196
- $sidebar-width: 220px !default;
214
+ $header-height: 52px !default;
215
+ $sidebar-width: 220px !default;
216
+ $sidebar-bg: $body-bg !default;
@@ -29,9 +29,9 @@ $select-color-optgroup-text: $dropdown-header-color !default;
29
29
  $select-color-optgroup-border: $dropdown-divider-bg !default;
30
30
  $select-color-dropdown: $dropdown-bg !default;
31
31
  $select-color-dropdown-border-top: mix($input-border-color, $input-bg, 0.8) !default;
32
- $select-color-dropdown-item-active: $dropdown-link-hover-bg !default;
33
- $select-color-dropdown-item-active-text: $dropdown-link-hover-color !default;
34
- $select-color-dropdown-item-create-active-text: $dropdown-link-hover-color !default;
32
+ $select-color-dropdown-item-active: $gray-50 !default;
33
+ $select-color-dropdown-item-active-text: $gray-900 !default;
34
+ $select-color-dropdown-item-create-active-text: $gray-900 !default;
35
35
  $select-opacity-disabled: 0.5 !default;
36
36
 
37
37
  $select-border: 1px solid $input-border-color !default;
@@ -67,8 +67,9 @@ $select-arrow-offset: calc(#{$select-padding-x} + 5px) !default;
67
67
  z-index: $zindex-dropdown;
68
68
  background: $select-color-dropdown;
69
69
  border: 1px solid $dropdown-border-color; //$dropdown-fallback-border
70
- border-radius: $border-radius;
70
+ border-radius: $border-radius-lg;
71
71
  box-shadow: 0 6px 12px rgba(0,0,0,.175);
72
+ top: 110%;
72
73
  }
73
74
 
74
75
  .#{$select-ns}-dropdown {
@@ -224,19 +224,6 @@ strong {
224
224
  z-index: 99999999;
225
225
  }
226
226
 
227
- figure.admin-img-holder {
228
- max-width: 275px;
229
- border: 2px dashed grey;
230
- border-radius: $border-radius;
231
- overflow: hidden;
232
- display: inline-block;
233
-
234
- img {
235
- max-width: 100%;
236
- height: auto;
237
- }
238
- }
239
-
240
227
  .image-container {
241
228
  .img-fluid {
242
229
  transition: transform .5s ease;
@@ -388,8 +375,8 @@ small,
388
375
  }
389
376
 
390
377
  .sortable-chosen {
391
- border: 2px dashed theme-color('primary') !important;
392
- border-radius: 5px !important;
378
+ background-color: theme-color('action') !important;
379
+ border: 2px dashed $blue !important;
393
380
  }
394
381
 
395
382
  .handle {
@@ -492,6 +479,9 @@ turbo-frame[busy] #turbo-spinner {
492
479
  height: 2rem;
493
480
  }
494
481
  }
482
+ turbo-frame[loading] .spinner-border, turbo-frame[busy] .spinner-border {
483
+ display: block !important;
484
+ }
495
485
 
496
486
  .fill-primary {
497
487
  & > * {
@@ -662,12 +652,32 @@ div.uppy-Root {
662
652
  border-radius: $border-radius-lg;
663
653
  }
664
654
 
655
+ .rounded-lg-top {
656
+ border-top-left-radius: $border-radius-lg;
657
+ border-top-right-radius: $border-radius-lg;
658
+ }
659
+
660
+ .rounded-lg-bottom {
661
+ border-bottom-left-radius: $border-radius-lg;
662
+ border-bottom-right-radius: $border-radius-lg;
663
+ }
664
+
665
+ .rounded-lg-left {
666
+ border-top-left-radius: $border-radius-lg;
667
+ border-bottom-left-radius: $border-radius-lg;
668
+ }
669
+
670
+ .rounded-lg-right {
671
+ border-top-right-radius: $border-radius-lg;
672
+ border-bottom-right-radius: $border-radius-lg;
673
+ }
674
+
665
675
  .turbo-progress-bar {
666
676
  background-color: theme-color('blue');
667
677
  }
668
678
 
669
679
  .tooltip-inner {
670
- border: 1px solid $gray-100;
680
+ border: 1px solid $border-color;
671
681
  box-shadow: $box-shadow-xs;
672
682
  }
673
683
 
@@ -675,9 +685,32 @@ div.uppy-Root {
675
685
  border-radius: 50%;
676
686
  background-color: $gray-200;
677
687
  color: $gray-500;
678
- font-size: 1rem;
688
+ font-size: $font-size-base;
679
689
  font-weight: 500;
680
690
  display: flex;
681
691
  align-items: center;
682
692
  justify-content: center;
683
693
  }
694
+
695
+ .breadcrumb {
696
+ gap: 0.5rem;
697
+ align-items: center;
698
+ color: $gray-500;
699
+ font-size: $font-size-sm;
700
+
701
+ i {
702
+ opacity: 0.5;
703
+ }
704
+
705
+ li {
706
+ a {
707
+ color: $gray-500;
708
+ text-decoration: none;
709
+
710
+ &:hover {
711
+ color: $primary;
712
+ }
713
+ }
714
+ }
715
+ }
716
+
@@ -1,6 +1,6 @@
1
1
  .custom-checkbox .custom-control-label::before {
2
2
  border-radius: 0.25rem !important;
3
- border-color: $gray-200;
3
+ border-color: $input-border-color;
4
4
  }
5
5
 
6
6
  label {
@@ -27,11 +27,15 @@ label {
27
27
  }
28
28
 
29
29
  .form-control, .text-input, .trix-container, .ts-control, trix-toolbar .trix-dialog .trix-input, .custom-select, .input-group-text, .custom-file-label {
30
+ box-shadow: $input-box-shadow;
31
+ transition-property: box-shadow;
32
+ transition-duration: 0.2s;
33
+
30
34
  &:disabled, &[readonly] {
31
35
  @extend .shadow-none;
32
36
  @extend .text-muted;
33
37
  background-color: $gray-50 !important;
34
- border: 1px solid $gray-100 !important;
38
+ border: 1px solid $border-color !important;
35
39
  cursor: not-allowed;
36
40
  }
37
41
  }
@@ -1,8 +1,12 @@
1
+ $sidebar-width: 345px;
2
+ $header-height: 43px;
3
+
1
4
  #page-builder {
2
5
  background-color: $gray-100;
3
6
 
4
7
  #content {
5
8
  margin-left: 0;
9
+ padding-top: 0;
6
10
  }
7
11
 
8
12
  #main-part {
@@ -15,9 +19,8 @@
15
19
  }
16
20
 
17
21
  .nav-pills {
18
- border: 1px solid $gray-100;
19
22
  border-radius: $border-radius;
20
- background-color: $gray-50;
23
+ background-color: $gray-100;
21
24
  padding: 0.1rem;
22
25
 
23
26
  .nav-link {
@@ -28,7 +31,7 @@
28
31
 
29
32
  &.active {
30
33
  background-color: $white;
31
- border: 1px solid $gray-100;
34
+ border: 1px solid $border-color;
32
35
  }
33
36
  }
34
37
  }
@@ -39,8 +42,8 @@
39
42
 
40
43
  #page-builder-header {
41
44
  z-index: 1031;
42
- border-bottom: 1px solid $gray-150;
43
-
45
+ border-bottom: 1px solid $border-color;
46
+ height: $header-height;
44
47
  nav {
45
48
  width: 100%;
46
49
  display: flex;
@@ -50,17 +53,20 @@
50
53
  }
51
54
  }
52
55
  #page-builder-sidebar {
53
- width: 345px;
54
- top: 43px;
56
+ position: fixed;
57
+ width: $sidebar-width;
58
+ top: $header-height;
55
59
  left: 0px;
56
60
  background-color: $body-bg;
57
- border-right: 1px solid $gray-150;
58
-
61
+ border-right: 1px solid $border-color;
62
+ overflow-y: scroll;
63
+ overflow-x: hidden;
64
+ height: calc(100vh - $header-height);
59
65
  .sidebar-header {
60
66
  height: 48px;
61
- padding: 0.5rem 1rem;
62
- background-color: $gray-25;
63
- border-bottom: 1px solid $gray-50;
67
+ padding: 0.5rem 0.7rem;
68
+ background-color: $body-bg;
69
+ border-bottom: 1px solid $border-color;
64
70
  display: flex;
65
71
  align-items: center;
66
72
  margin-bottom: 0.5rem;
@@ -74,17 +80,24 @@
74
80
  position: fixed;
75
81
  bottom: 0;
76
82
  left: 0;
77
- width: 345px;
78
- padding: 0.5rem 1rem;
79
- background-color: $gray-25;
80
- border-top: 1px solid $gray-50;
83
+ width: calc($sidebar-width - 1px);
84
+ padding: 0.5rem;
85
+ background-color: $body-bg;
86
+ box-shadow: 0 0 0 1px $border-color;
81
87
  z-index: 1031;
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: space-between;
91
+ }
92
+
93
+ .list-group-item {
94
+ padding: 0.5rem 0.5rem;
82
95
  }
83
96
  }
84
97
  #page-builder-preview {
85
98
  border-radius: $border-radius;
86
99
  border: 1px solid $gray-300;
87
- margin-top: 60px;
100
+ margin-top: calc($header-height + 1rem);
88
101
  }
89
102
 
90
103
 
@@ -139,10 +152,6 @@
139
152
  }
140
153
  }
141
154
 
142
- main#content {
143
- padding-top: 0 !important;
144
- }
145
-
146
155
  .editor-add-section {
147
156
  position: fixed;
148
157
  right: 20px;
@@ -0,0 +1,22 @@
1
+ module Spree
2
+ module Admin
3
+ module BreadcrumbConcern
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ class_attribute :breadcrumb_icon
8
+ before_action :add_breadcrumb_icon_instance_var
9
+ end
10
+
11
+ class_methods do
12
+ def add_breadcrumb_icon(icon_name)
13
+ self.breadcrumb_icon = icon_name
14
+ end
15
+ end
16
+
17
+ def add_breadcrumb_icon_instance_var
18
+ @breadcrumb_icon = self.class.breadcrumb_icon
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Spree
2
+ module Admin
3
+ module PreferencesConcern
4
+ extend ActiveSupport::Concern
5
+
6
+ private
7
+
8
+ def clear_empty_password_preferences(param_name)
9
+ if params[param_name].present?
10
+ password_preferences = @object.preferences_of_type(:password)
11
+ password_preferences.each do |preference|
12
+ preference_key = "preferred_#{preference}"
13
+
14
+ if params.dig(param_name, preference_key).blank? && @object.preferences[preference].present?
15
+ params[param_name].delete(preference_key)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Spree
2
+ module Admin
3
+ module ProductsBreadcrumbConcern
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ add_breadcrumb_icon 'box'
8
+ add_breadcrumb Spree.t(:products), :admin_products_path
9
+
10
+ before_action :add_breadcrumb_for_product, only: [:edit, :update]
11
+ end
12
+
13
+ private
14
+
15
+ def add_breadcrumb_for_product
16
+ return unless @product.present?
17
+ return if @product.new_record?
18
+ add_breadcrumb @product.name, spree.edit_admin_product_path(@product)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Admin
3
+ module PromotionsBreadcrumbConcern
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ add_breadcrumb_icon 'discount'
8
+ add_breadcrumb Spree.t(:promotions), :admin_promotions_path
9
+
10
+ before_action :add_breadcrumb_for_promotion
11
+ end
12
+
13
+ private
14
+
15
+ def add_breadcrumb_for_promotion
16
+ return unless @promotion.present?
17
+ return if @promotion.new_record?
18
+
19
+ add_breadcrumb @promotion.name, spree.admin_promotion_path(@promotion)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,12 @@
1
+ module Spree
2
+ module Admin
3
+ module StorefrontBreadcrumbConcern
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ add_breadcrumb_icon 'building-store'
8
+ add_breadcrumb Spree.t('admin.storefront'), :admin_themes_path
9
+ end
10
+ end
11
+ end
12
+ end
@@ -81,6 +81,10 @@ module Spree
81
81
  spree.admin_users_url
82
82
  end
83
83
  end
84
+
85
+ def permitted_resource_params
86
+ params.require(:address).permit(Spree::PermittedAttributes.address_attributes)
87
+ end
84
88
  end
85
89
  end
86
90
  end
@@ -0,0 +1,112 @@
1
+ module Spree
2
+ module Admin
3
+ class AdminUsersController < BaseController
4
+ add_breadcrumb Spree.t(:users), :admin_admin_users_path
5
+
6
+ skip_before_action :authorize_admin, only: [:new, :create]
7
+ before_action :load_parent, except: [:new, :create]
8
+ before_action :load_roles, except: [:index]
9
+ before_action :load_invitation, only: [:new, :create]
10
+ before_action :load_admin_user, only: [:show, :edit, :update]
11
+
12
+ layout :choose_layout
13
+
14
+ # GET /admin/admin_users
15
+ def index
16
+ params[:q] ||= {}
17
+ params[:q][:s] ||= 'created_at asc'
18
+ @search = scope.includes(role_users: :role, avatar_attachment: :blob).
19
+ where(role_users: { resource: @parent }).
20
+ ransack(params[:q])
21
+ @collection = @search.result
22
+ end
23
+
24
+ # GET /admin/admin_users/:id
25
+ def show
26
+ authorize! :read, @admin_user
27
+ @role_users = @admin_user.role_users.includes(:role).where(resource: @parent)
28
+
29
+ add_breadcrumb @admin_user.email, spree.admin_admin_user_path(@admin_user)
30
+ end
31
+
32
+ # GET /admin/admin_users/new?token=<token>
33
+ # this is a self signup flow for admin users from the invitation email
34
+ def new
35
+ @admin_user = Spree.admin_user_class.new
36
+ @admin_user.email = @invitation.email
37
+ end
38
+
39
+ # POST /admin/admin_users
40
+ # this is a self signup flow for admin users from the invitation email
41
+ def create
42
+ @admin_user = Spree.admin_user_class.new(permitted_params)
43
+ @invitation.invitee = @admin_user
44
+ if @admin_user.save && @invitation.accept!
45
+ # Automatically log in the user after successful signup
46
+ # if Devise is installed
47
+ if defined?(sign_in)
48
+ sign_in(Spree.admin_user_class.model_name.singular_route_key, @admin_user)
49
+ end
50
+ redirect_to spree.admin_path
51
+ else
52
+ render :new, status: :unprocessable_entity
53
+ end
54
+ end
55
+
56
+ # GET /admin/admin_users/:id/edit
57
+ def edit
58
+ authorize! :update, @admin_user
59
+ end
60
+
61
+ # PUT /admin/admin_users/:id
62
+ def update
63
+ authorize! :update, @admin_user
64
+
65
+ permitted_params = params.require(:admin_user).permit(permitted_user_attributes | [spree_role_ids: []])
66
+
67
+ if @admin_user.update(permitted_params)
68
+ redirect_to spree.admin_admin_user_path(@admin_user), status: :see_other, notice: flash_message_for(@admin_user, :successfully_updated)
69
+ else
70
+ render :edit, status: :unprocessable_entity
71
+ end
72
+ end
73
+
74
+ private
75
+
76
+ def permitted_params
77
+ params.require(:admin_user).permit(:email, :password, :password_confirmation, :first_name, :last_name)
78
+ end
79
+
80
+ def load_invitation
81
+ raise ActiveRecord::RecordNotFound if params[:token].blank?
82
+
83
+ @invitation = Spree::Invitation.pending.not_expired.find_by!(token: params[:token])
84
+ end
85
+
86
+ def load_parent
87
+ @parent = current_store
88
+ end
89
+
90
+ def scope
91
+ @parent.users.accessible_by(current_ability, :manage)
92
+ end
93
+
94
+ def load_admin_user
95
+ @admin_user = Spree.admin_user_class.accessible_by(current_ability).find(params[:id])
96
+ end
97
+
98
+ # for self signup flow, we use the minimal layout
99
+ def choose_layout
100
+ @invitation.present? ? 'spree/minimal' : 'spree/admin'
101
+ end
102
+
103
+ def load_roles
104
+ @roles = Spree::Role.accessible_by(current_ability)
105
+ end
106
+
107
+ def model_class
108
+ Spree.admin_user_class
109
+ end
110
+ end
111
+ end
112
+ end
@@ -3,14 +3,8 @@ module Spree
3
3
  class AssetsController < ResourceController
4
4
  include Spree::Admin::SessionAssetsHelper
5
5
 
6
- ALLOWED_ASSET_TYPES = ['Spree::Asset', 'Spree::Image'].freeze
7
-
8
6
  def create
9
- if ALLOWED_ASSET_TYPES.include?(asset_type)
10
- @asset = asset_type.constantize.new(permitted_resource_params)
11
- else
12
- raise "Invalid asset type"
13
- end
7
+ @asset = asset_type.new(permitted_resource_params)
14
8
 
15
9
  # we only should check this for vendor users
16
10
  authorize! :update, @asset.viewable if @asset.viewable.present? && current_vendor
@@ -47,7 +41,7 @@ module Spree
47
41
  private
48
42
 
49
43
  def permitted_resource_params
50
- params.require(:asset).permit(:type, :viewable_id, :viewable_type, :attachment, :alt, :position)
44
+ params.require(:asset).permit(Spree::PermittedAttributes.asset_attributes)
51
45
  end
52
46
 
53
47
  def create_turbo_stream_enabled?
@@ -63,7 +57,11 @@ module Spree
63
57
  end
64
58
 
65
59
  def asset_type
66
- permitted_resource_params[:type] || model_class.to_s
60
+ allowed_asset_types.find { |type| type.to_s == permitted_resource_params[:type] } || model_class
61
+ end
62
+
63
+ def allowed_asset_types
64
+ [Spree::Asset, Spree::Image]
67
65
  end
68
66
  end
69
67
  end