solidus_admin 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +23 -4
  3. data/README.md +6 -1
  4. data/Rakefile +15 -15
  5. data/app/assets/builds/solidus_admin/tailwind.css +721 -44
  6. data/app/assets/images/solidus_admin/remixicon.license.txt +196 -0
  7. data/app/assets/images/solidus_admin/remixicon.symbol.svg +4 -4
  8. data/app/blueprints/solidus_admin/state_blueprint.rb +13 -0
  9. data/app/components/concerns/solidus_admin/slotable_default.rb +42 -0
  10. data/app/components/solidus_admin/adjustment_reasons/edit/component.html.erb +6 -15
  11. data/app/components/solidus_admin/adjustment_reasons/edit/component.yml +0 -1
  12. data/app/components/solidus_admin/adjustment_reasons/index/component.rb +13 -13
  13. data/app/components/solidus_admin/adjustment_reasons/new/component.html.erb +6 -15
  14. data/app/components/solidus_admin/adjustment_reasons/new/component.yml +0 -1
  15. data/app/components/solidus_admin/base_component.rb +7 -3
  16. data/app/components/solidus_admin/layout/confirm/component.html.erb +18 -0
  17. data/app/components/solidus_admin/layout/confirm/component.js +21 -0
  18. data/app/components/solidus_admin/layout/confirm/component.rb +26 -0
  19. data/app/components/solidus_admin/layout/confirm/component.yml +4 -0
  20. data/app/components/solidus_admin/layout/flashes/alerts/component.html.erb +7 -0
  21. data/app/components/solidus_admin/layout/flashes/alerts/component.rb +19 -0
  22. data/app/components/solidus_admin/layout/flashes/component.html.erb +5 -0
  23. data/app/components/solidus_admin/layout/flashes/component.rb +4 -0
  24. data/app/components/solidus_admin/layout/flashes/toasts/component.html.erb +5 -0
  25. data/app/components/solidus_admin/layout/flashes/toasts/component.rb +9 -0
  26. data/app/components/solidus_admin/layout/navigation/account/component.html.erb +12 -1
  27. data/app/components/solidus_admin/layout/navigation/account/component.rb +4 -4
  28. data/app/components/solidus_admin/layout/page_helpers.rb +3 -9
  29. data/app/components/solidus_admin/layout/skip_link/component.rb +3 -3
  30. data/app/components/solidus_admin/option_types/edit/component.html.erb +44 -0
  31. data/app/components/solidus_admin/option_types/edit/component.rb +5 -0
  32. data/app/components/solidus_admin/option_types/edit/component.yml +10 -0
  33. data/app/components/solidus_admin/option_types/index/component.rb +22 -22
  34. data/app/components/solidus_admin/option_types/new/component.html.erb +16 -0
  35. data/app/components/solidus_admin/option_types/new/component.rb +4 -0
  36. data/app/components/solidus_admin/option_types/new/component.yml +4 -0
  37. data/app/components/solidus_admin/option_values/edit/component.html.erb +16 -0
  38. data/app/components/solidus_admin/option_values/edit/component.rb +4 -0
  39. data/app/components/solidus_admin/option_values/edit/component.yml +4 -0
  40. data/app/components/solidus_admin/option_values/new/component.html.erb +16 -0
  41. data/app/components/solidus_admin/option_values/new/component.rb +7 -0
  42. data/app/components/solidus_admin/option_values/new/component.yml +4 -0
  43. data/app/components/solidus_admin/option_values/table/component.rb +53 -0
  44. data/app/components/solidus_admin/option_values/table/component.yml +3 -0
  45. data/app/components/solidus_admin/orders/cart/component.html.erb +5 -7
  46. data/app/components/solidus_admin/orders/cart/result/component.html.erb +2 -2
  47. data/app/components/solidus_admin/orders/index/component.rb +26 -26
  48. data/app/components/solidus_admin/orders/show/address/component.html.erb +8 -20
  49. data/app/components/solidus_admin/orders/show/address/component.rb +7 -7
  50. data/app/components/solidus_admin/orders/show/address/component.yml +0 -1
  51. data/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_shipment/component.rb +1 -1
  52. data/app/components/solidus_admin/orders/show/adjustments/index/component.rb +24 -21
  53. data/app/components/solidus_admin/orders/show/component.html.erb +2 -2
  54. data/app/components/solidus_admin/orders/show/component.rb +1 -1
  55. data/app/components/solidus_admin/orders/show/component.yml +0 -3
  56. data/app/components/solidus_admin/orders/show/customer_search/result/component.html.erb +2 -2
  57. data/app/components/solidus_admin/orders/show/email/component.html.erb +2 -2
  58. data/app/components/solidus_admin/payment_methods/edit/component.html.erb +13 -0
  59. data/app/components/solidus_admin/payment_methods/edit/component.rb +7 -0
  60. data/app/components/solidus_admin/payment_methods/edit/component.yml +2 -0
  61. data/app/components/solidus_admin/payment_methods/form/component.html.erb +29 -0
  62. data/app/components/solidus_admin/payment_methods/form/component.rb +34 -0
  63. data/app/components/solidus_admin/payment_methods/form/component.yml +15 -0
  64. data/app/components/solidus_admin/payment_methods/index/component.rb +24 -23
  65. data/app/components/solidus_admin/payment_methods/new/component.html.erb +12 -0
  66. data/app/components/solidus_admin/payment_methods/new/component.rb +7 -0
  67. data/app/components/solidus_admin/payment_methods/new/component.yml +2 -0
  68. data/app/components/solidus_admin/products/index/component.rb +26 -26
  69. data/app/components/solidus_admin/products/show/categories/new/component.html.erb +17 -0
  70. data/app/components/solidus_admin/products/show/categories/new/component.rb +17 -0
  71. data/app/components/solidus_admin/products/show/categories/new/component.yml +5 -0
  72. data/app/components/solidus_admin/products/show/component.html.erb +90 -66
  73. data/app/components/solidus_admin/products/show/component.rb +2 -2
  74. data/app/components/solidus_admin/products/show/component.yml +23 -11
  75. data/app/components/solidus_admin/products/status/component.rb +1 -1
  76. data/app/components/solidus_admin/products/stock/component.rb +7 -7
  77. data/app/components/solidus_admin/properties/edit/component.html.erb +5 -5
  78. data/app/components/solidus_admin/properties/index/component.rb +13 -13
  79. data/app/components/solidus_admin/properties/new/component.html.erb +5 -5
  80. data/app/components/solidus_admin/refund_reasons/edit/component.html.erb +6 -15
  81. data/app/components/solidus_admin/refund_reasons/edit/component.yml +0 -1
  82. data/app/components/solidus_admin/refund_reasons/index/component.rb +13 -13
  83. data/app/components/solidus_admin/refund_reasons/new/component.html.erb +6 -14
  84. data/app/components/solidus_admin/refund_reasons/new/component.yml +0 -1
  85. data/app/components/solidus_admin/refunds_and_returns/component.rb +7 -7
  86. data/app/components/solidus_admin/reimbursement_types/index/component.rb +2 -2
  87. data/app/components/solidus_admin/return_reasons/edit/component.html.erb +5 -14
  88. data/app/components/solidus_admin/return_reasons/index/component.rb +11 -11
  89. data/app/components/solidus_admin/return_reasons/new/component.html.erb +5 -14
  90. data/app/components/solidus_admin/roles/edit/component.html.erb +12 -12
  91. data/app/components/solidus_admin/roles/edit/component.yml +0 -1
  92. data/app/components/solidus_admin/roles/index/component.rb +12 -12
  93. data/app/components/solidus_admin/roles/new/component.html.erb +12 -12
  94. data/app/components/solidus_admin/roles/new/component.yml +0 -1
  95. data/app/components/solidus_admin/shipping/component.rb +5 -5
  96. data/app/components/solidus_admin/shipping_categories/edit/component.html.erb +4 -4
  97. data/app/components/solidus_admin/shipping_categories/edit/component.yml +0 -1
  98. data/app/components/solidus_admin/shipping_categories/index/component.rb +9 -9
  99. data/app/components/solidus_admin/shipping_categories/new/component.html.erb +4 -4
  100. data/app/components/solidus_admin/shipping_categories/new/component.yml +0 -1
  101. data/app/components/solidus_admin/shipping_methods/index/component.rb +10 -10
  102. data/app/components/solidus_admin/stock_items/edit/component.html.erb +5 -8
  103. data/app/components/solidus_admin/stock_items/edit/component.rb +2 -2
  104. data/app/components/solidus_admin/stock_items/index/component.rb +25 -25
  105. data/app/components/solidus_admin/stock_locations/edit/component.html.erb +16 -0
  106. data/app/components/solidus_admin/stock_locations/edit/component.rb +5 -0
  107. data/app/components/solidus_admin/stock_locations/edit/component.yml +2 -0
  108. data/app/components/solidus_admin/stock_locations/form/component.html.erb +65 -0
  109. data/app/components/solidus_admin/stock_locations/form/component.rb +11 -0
  110. data/app/components/solidus_admin/stock_locations/form/component.yml +19 -0
  111. data/app/components/solidus_admin/stock_locations/index/component.rb +94 -47
  112. data/app/components/solidus_admin/stock_locations/new/component.html.erb +16 -0
  113. data/app/components/solidus_admin/stock_locations/new/component.rb +16 -0
  114. data/app/components/solidus_admin/stock_locations/new/component.yml +2 -0
  115. data/app/components/solidus_admin/store_credit_reasons/edit/component.html.erb +5 -14
  116. data/app/components/solidus_admin/store_credit_reasons/edit/component.yml +0 -1
  117. data/app/components/solidus_admin/store_credit_reasons/index/component.rb +11 -11
  118. data/app/components/solidus_admin/store_credit_reasons/new/component.html.erb +5 -14
  119. data/app/components/solidus_admin/store_credit_reasons/new/component.yml +0 -1
  120. data/app/components/solidus_admin/stores/edit/component.html.erb +27 -0
  121. data/app/components/solidus_admin/stores/edit/component.rb +5 -0
  122. data/app/components/solidus_admin/stores/form/component.html.erb +102 -0
  123. data/app/components/solidus_admin/stores/form/component.rb +27 -0
  124. data/app/components/solidus_admin/stores/form/component.yml +17 -0
  125. data/app/components/solidus_admin/stores/index/component.rb +51 -22
  126. data/app/components/solidus_admin/stores/new/component.html.erb +16 -0
  127. data/app/components/solidus_admin/stores/new/component.rb +5 -0
  128. data/app/components/solidus_admin/stores/new/component.yml +2 -0
  129. data/app/components/solidus_admin/tax_categories/edit/component.html.erb +7 -15
  130. data/app/components/solidus_admin/tax_categories/edit/component.yml +0 -1
  131. data/app/components/solidus_admin/tax_categories/index/component.rb +17 -17
  132. data/app/components/solidus_admin/tax_categories/new/component.html.erb +7 -15
  133. data/app/components/solidus_admin/tax_categories/new/component.yml +0 -1
  134. data/app/components/solidus_admin/tax_rates/edit/component.html.erb +12 -0
  135. data/app/components/solidus_admin/tax_rates/edit/component.rb +5 -0
  136. data/app/components/solidus_admin/tax_rates/edit/component.yml +4 -0
  137. data/app/components/solidus_admin/tax_rates/form/component.html.erb +25 -0
  138. data/app/components/solidus_admin/tax_rates/form/component.rb +29 -0
  139. data/app/components/solidus_admin/tax_rates/form/component.yml +9 -0
  140. data/app/components/solidus_admin/tax_rates/index/component.rb +38 -20
  141. data/app/components/solidus_admin/tax_rates/new/component.html.erb +12 -0
  142. data/app/components/solidus_admin/tax_rates/new/component.rb +5 -0
  143. data/app/components/solidus_admin/tax_rates/new/component.yml +4 -0
  144. data/app/components/solidus_admin/taxes/component.rb +4 -4
  145. data/app/components/solidus_admin/taxonomies/index/component.rb +7 -7
  146. data/app/components/solidus_admin/turbo/target_frame/component.html.erb +5 -0
  147. data/app/components/solidus_admin/turbo/target_frame/component.rb +8 -0
  148. data/app/components/solidus_admin/ui/alert/component.html.erb +35 -0
  149. data/app/components/solidus_admin/ui/alert/component.rb +51 -0
  150. data/app/components/solidus_admin/ui/alert/component.yml +8 -0
  151. data/app/components/solidus_admin/ui/badge/component.rb +11 -11
  152. data/app/components/solidus_admin/ui/button/component.rb +84 -27
  153. data/app/components/solidus_admin/ui/button/component.yml +10 -0
  154. data/app/components/solidus_admin/ui/checkbox/component.rb +42 -0
  155. data/app/components/solidus_admin/ui/dropdown/component.rb +3 -3
  156. data/app/components/solidus_admin/ui/forms/address/component.html.erb +1 -48
  157. data/app/components/solidus_admin/ui/forms/address/component.rb +29 -6
  158. data/app/components/solidus_admin/ui/forms/address/fields/city_and_zipcode/component.html.erb +4 -0
  159. data/app/components/solidus_admin/ui/forms/address/fields/city_and_zipcode/component.rb +8 -0
  160. data/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.html.erb +39 -0
  161. data/app/components/solidus_admin/ui/forms/address/{component.js → fields/country_and_state/component.js} +2 -0
  162. data/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.rb +15 -0
  163. data/app/components/solidus_admin/ui/forms/address/fields/reverse_charge_fields/component.html.erb +7 -0
  164. data/app/components/solidus_admin/ui/forms/address/fields/reverse_charge_fields/component.rb +12 -0
  165. data/app/components/solidus_admin/ui/forms/address/fieldsets/base.rb +54 -0
  166. data/app/components/solidus_admin/ui/forms/address/fieldsets/contact/component.rb +16 -0
  167. data/app/components/solidus_admin/ui/forms/address/fieldsets/contact_info/component.rb +10 -0
  168. data/app/components/solidus_admin/ui/forms/address/fieldsets/location/component.rb +14 -0
  169. data/app/components/solidus_admin/ui/forms/checkbox/component.html.erb +14 -0
  170. data/app/components/solidus_admin/ui/forms/checkbox/component.rb +24 -31
  171. data/app/components/solidus_admin/ui/forms/field/component.html.erb +4 -4
  172. data/app/components/solidus_admin/ui/forms/field/component.rb +14 -18
  173. data/app/components/solidus_admin/ui/forms/input/component.rb +9 -18
  174. data/app/components/solidus_admin/ui/forms/search/result/component.rb +2 -2
  175. data/app/components/solidus_admin/ui/forms/select/component.html.erb +21 -0
  176. data/app/components/solidus_admin/ui/forms/select/component.rb +157 -0
  177. data/app/components/solidus_admin/ui/forms/switch/component.rb +4 -4
  178. data/app/components/solidus_admin/ui/icon/component.rb +4 -4
  179. data/app/components/solidus_admin/ui/icon/names.txt +973 -238
  180. data/app/components/solidus_admin/ui/modal/component.html.erb +2 -4
  181. data/app/components/solidus_admin/ui/modal/component.js +7 -1
  182. data/app/components/solidus_admin/ui/modal/component.rb +2 -2
  183. data/app/components/solidus_admin/ui/pages/index/component.rb +50 -19
  184. data/app/components/solidus_admin/ui/panel/component.rb +5 -9
  185. data/app/components/solidus_admin/ui/radio/component.rb +29 -0
  186. data/app/components/solidus_admin/ui/tab/component.rb +4 -4
  187. data/app/components/solidus_admin/ui/table/component.html.erb +11 -10
  188. data/app/components/solidus_admin/ui/table/component.js +18 -26
  189. data/app/components/solidus_admin/ui/table/component.rb +24 -18
  190. data/app/components/solidus_admin/ui/table/component.yml +1 -0
  191. data/app/components/solidus_admin/ui/table/ransack_filter/component.html.erb +1 -1
  192. data/app/components/solidus_admin/ui/table/ransack_filter/component.rb +7 -7
  193. data/app/components/solidus_admin/ui/thumbnail/component.rb +5 -5
  194. data/app/components/solidus_admin/ui/toast/component.html.erb +6 -6
  195. data/app/components/solidus_admin/ui/toast/component.rb +1 -1
  196. data/app/components/solidus_admin/ui/toggletip/component.rb +1 -1
  197. data/app/components/solidus_admin/users/addresses/component.html.erb +3 -5
  198. data/app/components/solidus_admin/users/addresses/component.rb +0 -30
  199. data/app/components/solidus_admin/users/addresses/component.yml +0 -7
  200. data/app/components/solidus_admin/users/edit/api_access/component.html.erb +6 -4
  201. data/app/components/solidus_admin/users/edit/api_access/component.yml +8 -2
  202. data/app/components/solidus_admin/users/edit/component.html.erb +15 -12
  203. data/app/components/solidus_admin/users/edit/component.rb +1 -33
  204. data/app/components/solidus_admin/users/edit/component.yml +0 -7
  205. data/app/components/solidus_admin/users/edit/tabs/component.rb +46 -0
  206. data/app/components/solidus_admin/users/edit/tabs/component.yml +6 -0
  207. data/app/components/solidus_admin/users/index/component.rb +20 -20
  208. data/app/components/solidus_admin/users/items/component.html.erb +1 -3
  209. data/app/components/solidus_admin/users/items/component.rb +17 -47
  210. data/app/components/solidus_admin/users/items/component.yml +0 -7
  211. data/app/components/solidus_admin/users/orders/component.html.erb +1 -3
  212. data/app/components/solidus_admin/users/orders/component.rb +9 -39
  213. data/app/components/solidus_admin/users/orders/component.yml +0 -6
  214. data/app/components/solidus_admin/users/store_credits/edit_amount/component.html.erb +7 -8
  215. data/app/components/solidus_admin/users/store_credits/edit_amount/component.rb +0 -5
  216. data/app/components/solidus_admin/users/store_credits/edit_amount/component.yml +0 -1
  217. data/app/components/solidus_admin/users/store_credits/edit_memo/component.html.erb +4 -4
  218. data/app/components/solidus_admin/users/store_credits/edit_memo/component.yml +0 -1
  219. data/app/components/solidus_admin/users/store_credits/edit_validity/component.html.erb +6 -7
  220. data/app/components/solidus_admin/users/store_credits/edit_validity/component.rb +0 -5
  221. data/app/components/solidus_admin/users/store_credits/index/component.html.erb +4 -6
  222. data/app/components/solidus_admin/users/store_credits/index/component.rb +10 -40
  223. data/app/components/solidus_admin/users/store_credits/index/component.yml +0 -6
  224. data/app/components/solidus_admin/users/store_credits/new/component.html.erb +12 -13
  225. data/app/components/solidus_admin/users/store_credits/new/component.rb +0 -9
  226. data/app/components/solidus_admin/users/store_credits/new/component.yml +0 -1
  227. data/app/components/solidus_admin/users/store_credits/show/component.html.erb +5 -7
  228. data/app/components/solidus_admin/users/store_credits/show/component.rb +8 -38
  229. data/app/components/solidus_admin/users/store_credits/show/component.yml +0 -6
  230. data/app/components/solidus_admin/users_and_roles/component.rb +4 -4
  231. data/app/components/solidus_admin/zones/edit/component.html.erb +1 -0
  232. data/app/components/solidus_admin/zones/edit/component.rb +4 -0
  233. data/app/components/solidus_admin/zones/form/component.html.erb +47 -0
  234. data/app/components/solidus_admin/zones/form/component.js +32 -0
  235. data/app/components/solidus_admin/zones/form/component.rb +23 -0
  236. data/app/components/solidus_admin/zones/form/component.yml +7 -0
  237. data/app/components/solidus_admin/zones/index/component.rb +57 -18
  238. data/app/components/solidus_admin/zones/new/component.html.erb +1 -0
  239. data/app/components/solidus_admin/zones/new/component.rb +4 -0
  240. data/app/controllers/concerns/solidus_admin/moveable.rb +31 -0
  241. data/app/controllers/solidus_admin/addresses_controller.rb +9 -11
  242. data/app/controllers/solidus_admin/adjustments_controller.rb +5 -6
  243. data/app/controllers/solidus_admin/base_controller.rb +8 -7
  244. data/app/controllers/solidus_admin/controller_helpers/authorization.rb +1 -1
  245. data/app/controllers/solidus_admin/controller_helpers/locale.rb +1 -1
  246. data/app/controllers/solidus_admin/controller_helpers/pagination.rb +37 -0
  247. data/app/controllers/solidus_admin/controller_helpers/search.rb +5 -5
  248. data/app/controllers/solidus_admin/controller_helpers/theme.rb +2 -2
  249. data/app/controllers/solidus_admin/customers_controller.rb +3 -3
  250. data/app/controllers/solidus_admin/line_items_controller.rb +3 -3
  251. data/app/controllers/solidus_admin/option_types_controller.rb +11 -32
  252. data/app/controllers/solidus_admin/option_values_controller.rb +54 -0
  253. data/app/controllers/solidus_admin/orders_controller.rb +25 -19
  254. data/app/controllers/solidus_admin/payment_methods_controller.rb +23 -28
  255. data/app/controllers/solidus_admin/product_option_types_controller.rb +5 -0
  256. data/app/controllers/solidus_admin/product_taxons_controller.rb +58 -0
  257. data/app/controllers/solidus_admin/products_controller.rb +24 -28
  258. data/app/controllers/solidus_admin/reimbursement_types_controller.rb +3 -3
  259. data/app/controllers/solidus_admin/resources_controller.rb +59 -20
  260. data/app/controllers/solidus_admin/shipping_methods_controller.rb +4 -4
  261. data/app/controllers/solidus_admin/states_controller.rb +30 -0
  262. data/app/controllers/solidus_admin/stock_items_controller.rb +11 -6
  263. data/app/controllers/solidus_admin/stock_locations_controller.rb +25 -26
  264. data/app/controllers/solidus_admin/store_credits_controller.rb +9 -9
  265. data/app/controllers/solidus_admin/stores_controller.rb +43 -9
  266. data/app/controllers/solidus_admin/tax_rates_controller.rb +9 -22
  267. data/app/controllers/solidus_admin/taxonomies_controller.rb +5 -21
  268. data/app/controllers/solidus_admin/users_controller.rb +16 -16
  269. data/app/controllers/solidus_admin/zones_controller.rb +6 -26
  270. data/app/helpers/solidus_admin/flash_helper.rb +14 -0
  271. data/app/helpers/solidus_admin/last_login_helper.rb +2 -2
  272. data/app/helpers/solidus_admin/permission_sets_helper.rb +3 -3
  273. data/app/helpers/solidus_admin/solidus_form_helper.rb +9 -0
  274. data/app/helpers/solidus_admin/stimulus_helper.rb +29 -0
  275. data/app/helpers/solidus_admin/void_elements_helper.rb +1 -1
  276. data/app/javascript/solidus_admin/application.js +10 -1
  277. data/app/javascript/solidus_admin/confirm_modal.js +24 -0
  278. data/app/javascript/solidus_admin/controllers/custom_validity_controller.js +12 -0
  279. data/app/javascript/solidus_admin/controllers/sortable_controller.js +9 -2
  280. data/app/javascript/solidus_admin/tom-select/plugins/patch_scroll.js +19 -0
  281. data/app/javascript/solidus_admin/tom-select/plugins/remote_with_pagination.js +67 -0
  282. data/app/javascript/solidus_admin/tom-select/plugins/stash_on_search.js +68 -0
  283. data/app/javascript/solidus_admin/tom-select/tom-select.js +11 -0
  284. data/app/javascript/solidus_admin/utils.js +40 -0
  285. data/app/javascript/solidus_admin/web_components/solidus_select.js +90 -0
  286. data/app/javascript/vendor/custom_elements.js +3 -0
  287. data/app/lib/solidus_admin/form_builder.rb +58 -0
  288. data/app/views/layouts/solidus_admin/application.html.erb +6 -8
  289. data/app/views/layouts/solidus_admin/preview.html.erb +1 -1
  290. data/app/views/solidus_admin/option_values/create.turbo_stream.erb +3 -0
  291. data/app/views/solidus_admin/option_values/destroy.turbo_stream.erb +3 -0
  292. data/app/views/solidus_admin/option_values/update.turbo_stream.erb +3 -0
  293. data/config/importmap.rb +9 -0
  294. data/config/initializers/view_component.rb +1 -1
  295. data/config/locales/option_types.en.yml +5 -1
  296. data/config/locales/option_values.en.yml +9 -0
  297. data/config/locales/payment_methods.en.yml +5 -1
  298. data/config/locales/product_taxons.en.yml +6 -0
  299. data/config/locales/products.en.yml +2 -0
  300. data/config/locales/solidus_select.yml +6 -0
  301. data/config/locales/stock_locations.en.yml +4 -0
  302. data/config/locales/stores.en.yml +22 -0
  303. data/config/locales/tax_rates.en.yml +4 -0
  304. data/config/locales/zones.en.yml +4 -0
  305. data/config/routes.rb +21 -9
  306. data/config/tailwind.config.js +6 -2
  307. data/docs/components.md +2 -2
  308. data/docs/index_pages.md +11 -5
  309. data/docs/stimulusjs.md +1 -1
  310. data/eslint.config.mjs +25 -0
  311. data/lib/generators/solidus_admin/component/component_generator.rb +10 -6
  312. data/lib/generators/solidus_admin/install/install_generator.rb +24 -5
  313. data/lib/generators/solidus_admin/install/templates/config/initializers/solidus_admin.rb.tt +6 -0
  314. data/lib/solidus_admin/admin_resources.rb +1 -1
  315. data/lib/solidus_admin/configuration.rb +14 -14
  316. data/lib/solidus_admin/engine.rb +3 -2
  317. data/lib/solidus_admin/importmap.rb +1 -1
  318. data/lib/solidus_admin/menu_item.rb +1 -1
  319. data/lib/solidus_admin/preview.rb +1 -0
  320. data/lib/solidus_admin/testing_support/admin_assets.rb +1 -1
  321. data/lib/solidus_admin/testing_support/feature_helpers.rb +77 -3
  322. data/lib/solidus_admin/testing_support/shared_examples/crud_resource_requests.rb +43 -36
  323. data/lib/solidus_admin/testing_support/shared_examples/moveable.rb +48 -0
  324. data/lib/solidus_admin/testing_support/shared_examples/promotion_categories_features.rb +5 -11
  325. data/lib/solidus_admin/version.rb +1 -1
  326. data/lib/tasks/tailwind.rake +1 -1
  327. data/solidus_admin.gemspec +24 -21
  328. metadata +172 -28
  329. data/.eslintrc.json +0 -7
  330. data/app/components/solidus_admin/products/show/component.js +0 -9
  331. data/app/components/solidus_admin/ui/forms/input/component.js +0 -15
  332. data/app/components/solidus_admin/users/edit/api_access/component.js +0 -9
  333. data/app/javascript/solidus_admin/controllers/confirm_controller.js +0 -21
  334. data/lib/solidus_admin/testing_support/shared_examples/bulk_delete_resources.rb +0 -20
  335. /data/app/{components/solidus_admin/ui/toast/component.js → javascript/solidus_admin/controllers/alert_animation_controller.js} +0 -0
@@ -1,25 +1,17 @@
1
- <%= turbo_frame_tag :resource_modal, target: "_top" do %>
1
+ <%= turbo_frame_tag :resource_form, target: "_top" do %>
2
2
  <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
- <%= form_for @tax_category, url: form_url, html: { id: form_id } do |f| %>
3
+ <%= solidus_form_for @tax_category, url: form_url, html: { id: form_id } do |f| %>
4
4
  <div class="flex flex-col gap-6 pb-4">
5
- <%= render component("ui/forms/field").text_field(f, :name) %>
6
- <%= render component("ui/forms/field").text_field(f, :tax_code) %>
7
- <%= render component("ui/forms/field").text_field(f, :description) %>
8
- <label class="flex gap-2 items-center">
9
- <%= render component("ui/forms/checkbox").new(
10
- name: "#{f.object_name}[is_default]",
11
- value: "1",
12
- checked: f.object.is_default
13
- ) %>
14
- <span class="font-semibold text-xs ml-2"><%= Spree::TaxCategory.human_attribute_name :is_default %></span>
15
- <%= render component("ui/toggletip").new(text: t(".hints.is_default")) %>
16
- </label>
5
+ <%= f.text_field(:name) %>
6
+ <%= f.text_field(:tax_code) %>
7
+ <%= f.text_field(:description) %>
8
+ <%= f.checkbox(:is_default, hint: t(".hints.is_default")) %>
17
9
  </div>
18
10
  <% modal.with_actions do %>
19
11
  <form method="dialog">
20
12
  <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
21
13
  </form>
22
- <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
14
+ <%= f.submit %>
23
15
  <% end %>
24
16
  <% end %>
25
17
  <% end %>
@@ -3,6 +3,5 @@
3
3
  en:
4
4
  title: "Edit Tax Category"
5
5
  cancel: "Cancel"
6
- submit: "Update Tax Category"
7
6
  hints:
8
7
  is_default: "When checked, this tax category will be selected by default when creating new products or variants."
@@ -16,17 +16,17 @@ class SolidusAdmin::TaxCategories::Index::Component < SolidusAdmin::Taxes::Compo
16
16
  def page_actions
17
17
  render component("ui/button").new(
18
18
  tag: :a,
19
- text: t('.add'),
19
+ text: t(".add"),
20
20
  href: solidus_admin.new_tax_category_path(**search_filter_params),
21
- data: { turbo_frame: :resource_modal },
21
+ data: {turbo_frame: :resource_form},
22
22
  icon: "add-line",
23
- class: "align-self-end w-full",
23
+ class: "align-self-end w-full"
24
24
  )
25
25
  end
26
26
 
27
27
  def turbo_frames
28
28
  %w[
29
- resource_modal
29
+ resource_form
30
30
  ]
31
31
  end
32
32
 
@@ -37,11 +37,11 @@ class SolidusAdmin::TaxCategories::Index::Component < SolidusAdmin::Taxes::Compo
37
37
  def batch_actions
38
38
  [
39
39
  {
40
- label: t('.batch_actions.delete'),
40
+ label: t(".batch_actions.delete"),
41
41
  action: solidus_admin.tax_categories_path(**search_filter_params),
42
42
  method: :delete,
43
- icon: 'delete-bin-7-line',
44
- },
43
+ icon: "delete-bin-7-line"
44
+ }
45
45
  ]
46
46
  end
47
47
 
@@ -51,36 +51,36 @@ class SolidusAdmin::TaxCategories::Index::Component < SolidusAdmin::Taxes::Compo
51
51
  header: :name,
52
52
  data: ->(tax_category) do
53
53
  link_to tax_category.name, edit_path(tax_category),
54
- data: { turbo_frame: :resource_modal },
55
- class: 'body-link'
54
+ data: {turbo_frame: :resource_form},
55
+ class: "body-link"
56
56
  end
57
57
  },
58
58
  {
59
59
  header: :tax_code,
60
60
  data: ->(tax_category) do
61
61
  link_to_if tax_category.tax_code, tax_category.tax_code, edit_path(tax_category),
62
- data: { turbo_frame: :resource_modal },
63
- class: 'body-link'
62
+ data: {turbo_frame: :resource_form},
63
+ class: "body-link"
64
64
  end
65
65
  },
66
66
  {
67
67
  header: :description,
68
68
  data: ->(tax_category) do
69
69
  link_to_if tax_category.description, tax_category.description, edit_path(tax_category),
70
- data: { turbo_frame: :resource_modal },
71
- class: 'body-link'
70
+ data: {turbo_frame: :resource_form},
71
+ class: "body-link"
72
72
  end
73
73
  },
74
74
  {
75
75
  header: :is_default,
76
76
  data: ->(tax_category) {
77
77
  if tax_category.is_default?
78
- component('ui/badge').yes
78
+ component("ui/badge").yes
79
79
  else
80
- component('ui/badge').no
80
+ component("ui/badge").no
81
81
  end
82
- },
83
- },
82
+ }
83
+ }
84
84
  ]
85
85
  end
86
86
  end
@@ -1,25 +1,17 @@
1
- <%= turbo_frame_tag :resource_modal, target: "_top" do %>
1
+ <%= turbo_frame_tag :resource_form, target: "_top" do %>
2
2
  <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
- <%= form_for @tax_category, url: form_url, html: { id: form_id } do |f| %>
3
+ <%= solidus_form_for @tax_category, url: form_url, html: { id: form_id } do |f| %>
4
4
  <div class="flex flex-col gap-6 pb-4">
5
- <%= render component("ui/forms/field").text_field(f, :name) %>
6
- <%= render component("ui/forms/field").text_field(f, :tax_code) %>
7
- <%= render component("ui/forms/field").text_field(f, :description) %>
8
- <label class="flex gap-2 items-center">
9
- <%= render component("ui/forms/checkbox").new(
10
- name: "#{f.object_name}[is_default]",
11
- value: "1",
12
- checked: f.object.is_default
13
- ) %>
14
- <span class="font-semibold text-xs ml-2"><%= Spree::TaxCategory.human_attribute_name :is_default %></span>
15
- <%= render component("ui/toggletip").new(text: t(".hints.is_default")) %>
16
- </label>
5
+ <%= f.text_field(:name) %>
6
+ <%= f.text_field(:tax_code) %>
7
+ <%= f.text_field(:description) %>
8
+ <%= f.checkbox(:is_default, hint: t(".hints.is_default")) %>
17
9
  </div>
18
10
  <% modal.with_actions do %>
19
11
  <form method="dialog">
20
12
  <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
21
13
  </form>
22
- <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
14
+ <%= f.submit %>
23
15
  <% end %>
24
16
  <% end %>
25
17
  <% end %>
@@ -3,6 +3,5 @@
3
3
  en:
4
4
  title: "New Tax Category"
5
5
  cancel: "Cancel"
6
- submit: "Add Tax Category"
7
6
  hints:
8
7
  is_default: "When checked, this tax category will be selected by default when creating new products or variants."
@@ -0,0 +1,12 @@
1
+ <%= page id: :resource_form do %>
2
+ <%= page_header do %>
3
+ <%= page_header_back(back_url) %>
4
+ <%= page_header_title(t(".title")) %>
5
+ <%= page_header_actions do %>
6
+ <%= render component("ui/button").discard(path: back_url) %>
7
+ <%= render component("ui/button").save(form: form_id) %>
8
+ <% end %>
9
+ <% end %>
10
+
11
+ <%= render component("tax_rates/form").new(tax_rate: @tax_rate, form_url:, form_id:) %>
12
+ <% end %>
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::TaxRates::Edit::Component < SolidusAdmin::Resources::Edit::Component
4
+ include SolidusAdmin::Layout::PageHelpers
5
+ end
@@ -0,0 +1,4 @@
1
+ en:
2
+ discard: "Discard"
3
+ save: "Save"
4
+ title: "Edit Tax Rate"
@@ -0,0 +1,25 @@
1
+ <%= solidus_form_for @tax_rate, url: @form_url, html: { id: @form_id } do |f| %>
2
+ <%= page_with_sidebar do %>
3
+ <%= page_with_sidebar_main do %>
4
+ <%= render component("ui/panel").new do %>
5
+ <%= f.text_field(:name) %>
6
+ <%= f.select(:zone_id, zone_options) %>
7
+ <%= f.select(:tax_category_ids, tax_category_options, multiple: true) %>
8
+ <%= f.switch_field(:show_rate_in_label, hint: t(".hints.show_rate_in_label")) %>
9
+ <% end %>
10
+
11
+ <%= render component("ui/panel").new(title: t(".calculation")) do %>
12
+ <%= f.select(:calculator_type, calculator_options) %>
13
+ <%= f.text_field(:amount, type: :number, step: 0.01) %>
14
+ <%= f.select(:level, level_options) %>
15
+ <%= f.switch_field(:included_in_price, hint: t(".hints.included_in_price")) %>
16
+ <% end %>
17
+ <% end %>
18
+ <%= page_with_sidebar_aside do %>
19
+ <%= render component("ui/panel").new(title: t(".validity")) do %>
20
+ <%= f.text_field(:starts_at, type: :date) %>
21
+ <%= f.text_field(:expires_at, type: :date) %>
22
+ <% end %>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::TaxRates::Form::Component < SolidusAdmin::BaseComponent
4
+ include SolidusAdmin::Layout::PageHelpers
5
+
6
+ def initialize(tax_rate:, form_url:, form_id:)
7
+ @tax_rate = tax_rate
8
+ @form_url = form_url
9
+ @form_id = form_id
10
+ end
11
+
12
+ private
13
+
14
+ def zone_options
15
+ @zone_options ||= Spree::Zone.order(:name).map { [_1.name, _1.id] }
16
+ end
17
+
18
+ def tax_category_options
19
+ @tax_category_options ||= Spree::TaxCategory.order(:name).map { [_1.name, _1.id] }
20
+ end
21
+
22
+ def calculator_options
23
+ @calculator_options ||= Rails.application.config.spree.calculators.tax_rates.map { [_1.description, _1.name] }
24
+ end
25
+
26
+ def level_options
27
+ @level_options ||= Spree::TaxRate.levels.keys.map { [t(".levels.#{_1}"), _1] }
28
+ end
29
+ end
@@ -0,0 +1,9 @@
1
+ en:
2
+ calculation: "Calculation"
3
+ hints:
4
+ included_in_price: "Enables automatic inclusion of the applicable tax amount within product prices, providing customers with an all-inclusive pricing experience."
5
+ show_rate_in_label: "Allows users to display the applicable tax rate alongside product prices for transparent and informative pricing."
6
+ levels:
7
+ item: "Item level"
8
+ order: "Order level"
9
+ validity: "Validity"
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class SolidusAdmin::TaxRates::Index::Component < SolidusAdmin::Taxes::Component
4
- def row_url(tax_rate)
5
- spree.edit_admin_tax_rate_path(tax_rate)
4
+ def edit_path(tax_rate)
5
+ solidus_admin.edit_tax_rate_path(tax_rate)
6
6
  end
7
7
 
8
8
  def model_class
@@ -13,13 +13,13 @@ class SolidusAdmin::TaxRates::Index::Component < SolidusAdmin::Taxes::Component
13
13
  solidus_admin.tax_rates_path
14
14
  end
15
15
 
16
- def actions
16
+ def page_actions
17
17
  render component("ui/button").new(
18
18
  tag: :a,
19
- text: t('.add'),
20
- href: spree.new_admin_tax_rate_path,
19
+ text: t(".add"),
20
+ href: solidus_admin.new_tax_rate_path,
21
21
  icon: "add-line",
22
- class: "align-self-end w-full",
22
+ class: "align-self-end w-full"
23
23
  )
24
24
  end
25
25
 
@@ -30,11 +30,11 @@ class SolidusAdmin::TaxRates::Index::Component < SolidusAdmin::Taxes::Component
30
30
  def batch_actions
31
31
  [
32
32
  {
33
- label: t('.batch_actions.delete'),
33
+ label: t(".batch_actions.delete"),
34
34
  action: solidus_admin.tax_rates_path,
35
35
  method: :delete,
36
- icon: 'delete-bin-7-line',
37
- },
36
+ icon: "delete-bin-7-line"
37
+ }
38
38
  ]
39
39
  end
40
40
 
@@ -44,13 +44,13 @@ class SolidusAdmin::TaxRates::Index::Component < SolidusAdmin::Taxes::Component
44
44
  label: Spree::Zone.model_name.human,
45
45
  attribute: :zone_id,
46
46
  predicate: :eq,
47
- options: Spree::Zone.pluck(:name, :id),
47
+ options: Spree::Zone.pluck(:name, :id)
48
48
  },
49
49
  {
50
50
  label: Spree::TaxCategory.model_name.human,
51
51
  attribute: :tax_categories_id,
52
52
  predicate: :in,
53
- options: Spree::TaxCategory.pluck(:name, :id),
53
+ options: Spree::TaxCategory.pluck(:name, :id)
54
54
  }
55
55
  ]
56
56
  end
@@ -59,30 +59,48 @@ class SolidusAdmin::TaxRates::Index::Component < SolidusAdmin::Taxes::Component
59
59
  [
60
60
  {
61
61
  header: :zone,
62
- data: -> { _1.zone&.name },
62
+ data: ->(tax_rate) do
63
+ link_to tax_rate.zone.name, edit_path(tax_rate), class: "body-link" if tax_rate.zone.present?
64
+ end
65
+ },
66
+ {
67
+ header: :name,
68
+ data: ->(tax_rate) do
69
+ link_to tax_rate.name, edit_path(tax_rate), class: "body-link"
70
+ end
63
71
  },
64
- :name,
65
72
  {
66
73
  header: :tax_categories,
67
- data: -> { _1.tax_categories.map(&:name).join(', ') },
74
+ data: ->(tax_rate) do
75
+ link_to tax_rate.tax_categories.map(&:name).join(", "), edit_path(tax_rate), class: "body-link"
76
+ end
68
77
  },
69
78
  {
70
79
  header: :amount,
71
- data: -> { _1.display_amount },
80
+ data: ->(tax_rate) do
81
+ link_to tax_rate.display_amount, edit_path(tax_rate), class: "body-link"
82
+ end
72
83
  },
73
84
  {
74
85
  header: :included_in_price,
75
- data: -> { _1.included_in_price? ? component('ui/badge').yes : component('ui/badge').no },
86
+ data: -> { _1.included_in_price? ? component("ui/badge").yes : component("ui/badge").no }
76
87
  },
77
88
  {
78
89
  header: :show_rate_in_label,
79
- data: -> { _1.show_rate_in_label? ? component('ui/badge').yes : component('ui/badge').no },
90
+ data: -> { _1.show_rate_in_label? ? component("ui/badge").yes : component("ui/badge").no }
80
91
  },
81
- :expires_at,
82
92
  {
83
- header: Spree::Calculator.model_name.human,
84
- data: -> { _1.calculator&.class&.model_name&.human }
93
+ header: :expires_at,
94
+ data: ->(tax_rate) do
95
+ link_to tax_rate.expires_at.to_date, edit_path(tax_rate), class: "body-link" if tax_rate.expires_at
96
+ end
85
97
  },
98
+ {
99
+ header: Spree::Calculator.model_name.human,
100
+ data: ->(tax_rate) do
101
+ link_to tax_rate.calculator&.class&.model_name&.human, edit_path(tax_rate), class: "body-link"
102
+ end
103
+ }
86
104
  ]
87
105
  end
88
106
  end
@@ -0,0 +1,12 @@
1
+ <%= page id: :resource_form do %>
2
+ <%= page_header do %>
3
+ <%= page_header_back(back_url) %>
4
+ <%= page_header_title(t(".title")) %>
5
+ <%= page_header_actions do %>
6
+ <%= render component("ui/button").discard(path: back_url) %>
7
+ <%= render component("ui/button").save(form: form_id) %>
8
+ <% end %>
9
+ <% end %>
10
+
11
+ <%= render component("tax_rates/form").new(tax_rate: @tax_rate, form_url:, form_id:) %>
12
+ <% end %>
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::TaxRates::New::Component < SolidusAdmin::Resources::New::Component
4
+ include SolidusAdmin::Layout::PageHelpers
5
+ end
@@ -0,0 +1,4 @@
1
+ en:
2
+ discard: "Discard"
3
+ save: "Save"
4
+ title: "New Tax Rate"
@@ -4,7 +4,7 @@ class SolidusAdmin::Taxes::Component < SolidusAdmin::UI::Pages::Index::Component
4
4
  def title
5
5
  safe_join([
6
6
  tag.div(t(".title")),
7
- tag.div(t(".subtitle"), class: "font-normal text-sm text-gray-500"),
7
+ tag.div(t(".subtitle"), class: "font-normal text-sm text-gray-500")
8
8
  ])
9
9
  end
10
10
 
@@ -13,13 +13,13 @@ class SolidusAdmin::Taxes::Component < SolidusAdmin::UI::Pages::Index::Component
13
13
  {
14
14
  text: Spree::TaxCategory.model_name.human.pluralize,
15
15
  href: solidus_admin.tax_categories_path,
16
- current: model_class == Spree::TaxCategory,
16
+ current: model_class == Spree::TaxCategory
17
17
  },
18
18
  {
19
19
  text: Spree::TaxRate.model_name.human.pluralize,
20
20
  href: solidus_admin.tax_rates_path,
21
- current: model_class == Spree::TaxRate,
22
- },
21
+ current: model_class == Spree::TaxRate
22
+ }
23
23
  ]
24
24
  end
25
25
  end
@@ -12,33 +12,33 @@ class SolidusAdmin::Taxonomies::Index::Component < SolidusAdmin::UI::Pages::Inde
12
12
  def sortable_options
13
13
  {
14
14
  url: ->(taxonomy) { solidus_admin.move_taxonomy_path(taxonomy) },
15
- param: 'position',
15
+ param: "position"
16
16
  }
17
17
  end
18
18
 
19
19
  def page_actions
20
20
  render component("ui/button").new(
21
21
  tag: :a,
22
- text: t('.add'),
22
+ text: t(".add"),
23
23
  href: spree.new_admin_taxonomy_path,
24
- icon: "add-line",
24
+ icon: "add-line"
25
25
  )
26
26
  end
27
27
 
28
28
  def batch_actions
29
29
  [
30
30
  {
31
- label: t('.batch_actions.delete'),
31
+ label: t(".batch_actions.delete"),
32
32
  action: solidus_admin.taxonomies_path,
33
33
  method: :delete,
34
- icon: 'delete-bin-7-line',
35
- },
34
+ icon: "delete-bin-7-line"
35
+ }
36
36
  ]
37
37
  end
38
38
 
39
39
  def columns
40
40
  [
41
- name_column,
41
+ name_column
42
42
  ]
43
43
  end
44
44
 
@@ -0,0 +1,5 @@
1
+ <%= turbo_frame_tag @id do %>
2
+ <%= content %>
3
+ <%= turbo_stream.update(@source, nil) if @source %>
4
+ <%= turbo_stream.replace :flash_toasts, component("layout/flashes/toasts").new(toasts:) %>
5
+ <% end %>
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::Turbo::TargetFrame::Component < SolidusAdmin::BaseComponent
4
+ def initialize(id, source: nil)
5
+ @id = id
6
+ @source = source
7
+ end
8
+ end
@@ -0,0 +1,35 @@
1
+ <div
2
+ class="
3
+ flex w-full justify-between min-h-[85px]
4
+ rounded-lg p-4 border pointer-events-auto
5
+ transform -translate-y-[150%] opacity-0 duration-500
6
+ <%= SCHEMES.fetch(@scheme.to_sym).join(' ') %>
7
+ "
8
+ data-controller="alert-animation"
9
+ data-alert-animation-animation-class="-translate-y-[150%] opacity-0"
10
+ data-alert-animation-transition-value="<%= Rails.env.test? ? 1000 : 500 %>"
11
+ role="dialog"
12
+ aria-label="<%= @title %>"
13
+ aria-live="polite"
14
+ >
15
+ <div class="flex">
16
+ <div class="px-2">
17
+ <%= icon %>
18
+ </div>
19
+ <div class="flex flex-col px-2 pt-1 gap-3">
20
+ <p class="font-semibold text-base text-black leading-none"><%= @title %></p>
21
+ <p class="font-normal text-sm text-black leading-none"><%= @message.html_safe %></p>
22
+ </div>
23
+ </div>
24
+ <div>
25
+ <button
26
+ type="button"
27
+ title="<%= t(".close") %>"
28
+ aria-label="<%= t(".close") %>"
29
+ data-action="alert-animation#close"
30
+ data-alert-animation-target="closeButton"
31
+ >
32
+ <%= icon_tag('close-fill', class: "w-6 h-6 #{ICONS.dig(@scheme.to_sym, :class)}") %>
33
+ </button>
34
+ </div>
35
+ </div>
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::UI::Alert::Component < SolidusAdmin::BaseComponent
4
+ SCHEMES = {
5
+ success: %w[
6
+ border-forest bg-seafoam
7
+ ],
8
+ warning: %w[
9
+ border-orange bg-sazerac
10
+ ],
11
+ danger: %w[
12
+ border-red-500 bg-red-100 text-black
13
+ ],
14
+ info: %w[
15
+ border-gray-500 bg-gray-50
16
+ ]
17
+ }
18
+
19
+ ICONS = {
20
+ success: {
21
+ name: "checkbox-circle-fill",
22
+ class: "fill-forest"
23
+ },
24
+ warning: {
25
+ name: "error-warning-fill",
26
+ class: "fill-orange"
27
+ },
28
+ danger: {
29
+ name: "error-warning-fill",
30
+ class: "fill-red-500"
31
+ },
32
+ info: {
33
+ name: "information-fill",
34
+ class: "fill-gray-500"
35
+ }
36
+ }
37
+
38
+ def initialize(title:, message:, scheme: :success)
39
+ @title = title
40
+ @message = message
41
+ @scheme = scheme
42
+ end
43
+
44
+ def before_render
45
+ @title = @title.presence || t(".defaults.titles")[@scheme.to_sym]
46
+ end
47
+
48
+ def icon
49
+ icon_tag(ICONS.dig(@scheme.to_sym, :name), class: "w-5 h-5 #{ICONS.dig(@scheme.to_sym, :class)}")
50
+ end
51
+ end
@@ -0,0 +1,8 @@
1
+ en:
2
+ close: "Close"
3
+ defaults:
4
+ titles:
5
+ danger: "Caution"
6
+ info: "Info"
7
+ success: "Success"
8
+ warning: "Warning"
@@ -3,27 +3,27 @@
3
3
  class SolidusAdmin::UI::Badge::Component < SolidusAdmin::BaseComponent
4
4
  COLORS = {
5
5
  graphite_light: "text-black bg-graphite-light",
6
- red: 'text-red-500 bg-red-100',
7
- green: 'text-forest bg-seafoam',
8
- blue: 'text-blue bg-sky',
9
- black: 'text-white bg-black',
10
- yellow: 'text-orange bg-papaya-whip',
6
+ red: "text-red-500 bg-red-100",
7
+ green: "text-forest bg-seafoam",
8
+ blue: "text-solidus-blue bg-sky",
9
+ black: "text-white bg-black",
10
+ yellow: "text-orange bg-papaya-whip"
11
11
  }.freeze
12
12
 
13
13
  SIZES = {
14
- s: 'px-2 py-0.5 text-xs font-semibold',
15
- m: 'px-3 py-0.5 text-sm font-semibold',
16
- l: 'px-3 py-0.5 text-base font-semibold',
14
+ s: "px-2 py-0.5 text-xs font-semibold",
15
+ m: "px-3 py-0.5 text-sm font-semibold",
16
+ l: "px-3 py-0.5 text-base font-semibold"
17
17
  }.freeze
18
18
 
19
19
  def initialize(name:, color: :graphite_light, size: :m)
20
20
  @name = name
21
21
 
22
22
  @class_name = [
23
- 'inline-flex items-center rounded-full whitespace-nowrap', # layout
23
+ "inline-flex items-center rounded-full whitespace-nowrap", # layout
24
24
  SIZES.fetch(size.to_sym), # size
25
- COLORS.fetch(color.to_sym), # color
26
- ].join(' ')
25
+ COLORS.fetch(color.to_sym) # color
26
+ ].join(" ")
27
27
  end
28
28
 
29
29
  def self.yes