avo 3.30.4 → 4.0.0.beta.2

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 (470) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +18 -1
  3. data/Gemfile.lock +257 -174
  4. data/README.md +1 -1
  5. data/app/assets/builds/avo/application.css +13979 -0
  6. data/app/assets/builds/avo/application.js +1160 -0
  7. data/app/assets/builds/avo/application.js.map +7 -0
  8. data/app/assets/builds/avo/late-registration.js +2 -0
  9. data/app/assets/builds/avo/late-registration.js.map +7 -0
  10. data/app/assets/config/avo_manifest.js +2 -1
  11. data/app/assets/images/avo/placeholder.svg +1 -0
  12. data/app/assets/stylesheets/application.css +250 -0
  13. data/app/assets/stylesheets/css/button-group.css +23 -0
  14. data/app/assets/stylesheets/css/components/avatar.css +128 -0
  15. data/app/assets/stylesheets/css/components/breadcrumbs.css +43 -0
  16. data/app/assets/stylesheets/css/components/button.css +343 -0
  17. data/app/assets/stylesheets/css/components/color_scheme_switcher.css +226 -0
  18. data/app/assets/stylesheets/css/components/discreet_information.css +49 -0
  19. data/app/assets/stylesheets/css/components/field-wrapper.css +107 -0
  20. data/app/assets/stylesheets/css/components/grid.css +120 -0
  21. data/app/assets/stylesheets/css/components/input.css +312 -0
  22. data/app/assets/stylesheets/css/components/modal.css +228 -0
  23. data/app/assets/stylesheets/css/components/tooltip.css +25 -0
  24. data/app/assets/stylesheets/css/components/ui/badge.css +143 -0
  25. data/app/assets/stylesheets/css/components/ui/card.css +95 -0
  26. data/app/assets/stylesheets/css/components/ui/checkbox.css +50 -0
  27. data/app/assets/stylesheets/css/components/ui/description_list.css +3 -0
  28. data/app/assets/stylesheets/css/components/ui/dropdown.css +68 -0
  29. data/app/assets/stylesheets/css/components/ui/file_upload_input.css +94 -0
  30. data/app/assets/stylesheets/css/components/ui/file_upload_item.css +78 -0
  31. data/app/assets/stylesheets/css/components/ui/panel.css +59 -0
  32. data/app/assets/stylesheets/css/components/ui/panel_header.css +48 -0
  33. data/app/assets/stylesheets/css/components/ui/radio.css +22 -0
  34. data/app/assets/stylesheets/css/components/ui/tabs.css +74 -0
  35. data/app/assets/stylesheets/css/css-animations.css +54 -0
  36. data/app/assets/stylesheets/css/fields/code.css +75 -9
  37. data/app/assets/stylesheets/css/fields/easy-mde.css +7 -0
  38. data/app/assets/stylesheets/css/fields/key_value.css +97 -0
  39. data/app/assets/stylesheets/css/fields/progress.css +4 -4
  40. data/app/assets/stylesheets/css/fields/status.css +7 -1
  41. data/app/assets/stylesheets/css/fields/tags.css +33 -16
  42. data/app/assets/stylesheets/css/fields/tiptap.css +17 -15
  43. data/app/assets/stylesheets/css/fields/trix.css +62 -2
  44. data/app/assets/stylesheets/css/fonts.css +24 -24
  45. data/app/assets/stylesheets/css/layout.css +135 -0
  46. data/app/assets/stylesheets/css/pagination.css +114 -78
  47. data/app/assets/stylesheets/css/resource-controls.css +13 -0
  48. data/app/assets/stylesheets/css/search.css +22 -12
  49. data/app/assets/stylesheets/css/sidebar.css +310 -24
  50. data/app/assets/stylesheets/css/table.css +60 -0
  51. data/app/assets/stylesheets/css/tooltips.css +1 -1
  52. data/app/assets/stylesheets/css/typography.css +10 -1
  53. data/app/assets/stylesheets/css/variables.css +318 -0
  54. data/app/assets/svgs/avo/moon-plus-plus.svg +1 -0
  55. data/app/components/avo/actions_component.html.erb +30 -36
  56. data/app/components/avo/actions_component.rb +8 -11
  57. data/app/components/avo/alert_component.html.erb +3 -3
  58. data/app/components/avo/alert_component.rb +1 -1
  59. data/app/components/avo/asset_manager/javascript_component.html.erb +1 -2
  60. data/app/components/avo/backtrace_alert_component.html.erb +4 -4
  61. data/app/components/avo/base_component.rb +3 -4
  62. data/app/components/avo/breadcrumb_element_component.html.erb +17 -0
  63. data/app/components/avo/breadcrumb_element_component.rb +21 -0
  64. data/app/components/avo/breadcrumbs_component.html.erb +19 -0
  65. data/app/components/avo/breadcrumbs_component.rb +5 -0
  66. data/app/components/avo/button_component.rb +20 -126
  67. data/app/components/avo/clipboard_component.html.erb +3 -2
  68. data/app/components/avo/clipboard_component.rb +1 -1
  69. data/app/components/avo/component_missing_component.rb +11 -0
  70. data/app/components/avo/cover_component.html.erb +3 -0
  71. data/app/components/avo/cover_component.rb +25 -0
  72. data/app/components/avo/debug/status_component.html.erb +59 -0
  73. data/app/components/avo/debug/status_component.rb +30 -0
  74. data/app/components/avo/description_list_component.rb +11 -0
  75. data/app/components/avo/discreet_information_component.html.erb +31 -6
  76. data/app/components/avo/discreet_information_component.rb +23 -32
  77. data/app/components/avo/divider_component.html.erb +2 -2
  78. data/app/components/avo/empty_state_component.html.erb +2 -9
  79. data/app/components/avo/empty_state_component.rb +0 -8
  80. data/app/components/avo/field_wrapper_component.html.erb +21 -22
  81. data/app/components/avo/field_wrapper_component.rb +9 -18
  82. data/app/components/avo/fields/avatar_field/index_component.html.erb +9 -0
  83. data/app/components/avo/fields/avatar_field/index_component.rb +4 -0
  84. data/app/components/avo/fields/badge_field/index_component.html.erb +7 -1
  85. data/app/components/avo/fields/badge_field/show_component.html.erb +6 -1
  86. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +16 -14
  87. data/app/components/avo/fields/belongs_to_field/edit_component.rb +13 -3
  88. data/app/components/avo/fields/boolean_field/edit_component.html.erb +2 -2
  89. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +1 -1
  90. data/app/components/avo/fields/boolean_group_field/edit_component.rb +2 -3
  91. data/app/components/avo/fields/code_field/show_component.html.erb +1 -1
  92. data/app/components/avo/fields/common/boolean_check_component.rb +3 -3
  93. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  94. data/app/components/avo/fields/common/files/controls_component.html.erb +30 -27
  95. data/app/components/avo/fields/common/files/controls_component.rb +0 -1
  96. data/app/components/avo/fields/common/files/list_viewer_component.html.erb +4 -5
  97. data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +1 -1
  98. data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +7 -19
  99. data/app/components/avo/fields/common/heading_component.html.erb +2 -2
  100. data/app/components/avo/fields/common/heading_component.rb +1 -1
  101. data/app/components/avo/fields/common/key_value_component.html.erb +20 -24
  102. data/app/components/avo/fields/common/nested_field_component.html.erb +1 -1
  103. data/app/components/avo/fields/common/nested_field_component.rb +1 -1
  104. data/app/components/avo/fields/common/progress_bar_component.html.erb +2 -2
  105. data/app/components/avo/fields/common/stars_component.html.erb +1 -1
  106. data/app/components/avo/fields/common/status_viewer_component.html.erb +4 -10
  107. data/app/components/avo/fields/date_field/edit_component.html.erb +14 -1
  108. data/app/components/avo/fields/date_time_field/edit_component.html.erb +3 -3
  109. data/app/components/avo/fields/easy_mde_field/show_component.html.erb +1 -1
  110. data/app/components/avo/fields/edit_component.rb +9 -5
  111. data/app/components/avo/fields/file_field/edit_component.html.erb +14 -6
  112. data/app/components/avo/fields/files_field/edit_component.html.erb +11 -4
  113. data/app/components/avo/fields/has_one_field/show_component.html.erb +10 -9
  114. data/app/components/avo/fields/heading_field/edit_component.html.erb +1 -1
  115. data/app/components/avo/fields/heading_field/show_component.html.erb +2 -2
  116. data/app/components/avo/fields/password_field/edit_component.html.erb +5 -7
  117. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +1 -1
  118. data/app/components/avo/fields/radio_field/edit_component.html.erb +1 -1
  119. data/app/components/avo/fields/show_component.rb +4 -7
  120. data/app/components/avo/fields/stars_field/edit_component.html.erb +3 -4
  121. data/app/components/avo/fields/tags_field/edit_component.html.erb +1 -1
  122. data/app/components/avo/fields/tags_field/tag_component.html.erb +7 -8
  123. data/app/components/avo/fields/time_field/edit_component.html.erb +3 -3
  124. data/app/components/avo/fields/tiptap_field/edit_component.html.erb +11 -11
  125. data/app/components/avo/fields/tiptap_field/show_component.html.erb +4 -4
  126. data/app/components/avo/fields/trix_field/edit_component.html.erb +2 -2
  127. data/app/components/avo/filters_component.html.erb +8 -16
  128. data/app/components/avo/index/field_wrapper_component.html.erb +9 -2
  129. data/app/components/avo/index/field_wrapper_component.rb +0 -16
  130. data/app/components/avo/index/grid_cover_empty_state_component.html.erb +16 -2
  131. data/app/components/avo/index/grid_cover_empty_state_component.rb +90 -0
  132. data/app/components/avo/index/grid_item_component.html.erb +29 -12
  133. data/app/components/avo/index/grid_item_component.rb +12 -10
  134. data/app/components/avo/index/resource_controls_component.html.erb +1 -1
  135. data/app/components/avo/index/resource_controls_component.rb +7 -17
  136. data/app/components/avo/index/resource_controls_dropdown_component.html.erb +3 -0
  137. data/app/components/avo/index/resource_controls_dropdown_component.rb +81 -0
  138. data/app/components/avo/index/table_row_component.html.erb +11 -11
  139. data/app/components/avo/items/panel_component.html.erb +8 -18
  140. data/app/components/avo/items/panel_component.rb +0 -20
  141. data/app/components/avo/items/switcher_component.html.erb +60 -1
  142. data/app/components/avo/items/switcher_component.rb +10 -5
  143. data/app/components/avo/items/visible_items_component.html.erb +2 -1
  144. data/app/components/avo/items/visible_items_component.rb +1 -0
  145. data/app/components/avo/media_library/item_details_component.html.erb +2 -2
  146. data/app/components/avo/media_library/list_component.html.erb +24 -19
  147. data/app/components/avo/media_library/list_component.rb +2 -2
  148. data/app/components/avo/media_library/list_item_component.html.erb +3 -3
  149. data/app/components/avo/modal_component.html.erb +52 -20
  150. data/app/components/avo/modal_component.rb +7 -12
  151. data/app/components/avo/paginator_component.html.erb +46 -33
  152. data/app/components/avo/paginator_component.rb +10 -5
  153. data/app/components/avo/panel_name_component.html.erb +1 -1
  154. data/app/components/avo/profile_item_component.html.erb +4 -4
  155. data/app/components/avo/profile_item_component.rb +2 -4
  156. data/app/components/avo/referrer_params_component.html.erb +1 -1
  157. data/app/components/avo/resource_component.rb +8 -19
  158. data/app/components/avo/resource_listing_component.html.erb +22 -0
  159. data/app/components/avo/resource_listing_component.rb +28 -0
  160. data/app/components/avo/resource_sidebar_component.html.erb +2 -2
  161. data/app/components/avo/resource_sidebar_component.rb +0 -4
  162. data/app/components/avo/row_component.html.erb +1 -1
  163. data/app/components/avo/row_selector_component.html.erb +2 -4
  164. data/app/components/avo/row_selector_component.rb +0 -1
  165. data/app/components/avo/search_overlay_component.html.erb +6 -0
  166. data/app/components/avo/search_overlay_component.rb +2 -0
  167. data/app/components/avo/sidebar/base_item_component.rb +9 -9
  168. data/app/components/avo/sidebar/group_component.html.erb +23 -27
  169. data/app/components/avo/sidebar/group_component.rb +4 -0
  170. data/app/components/avo/sidebar/link_component.html.erb +30 -7
  171. data/app/components/avo/sidebar/link_component.rb +30 -2
  172. data/app/components/avo/sidebar/section_component.html.erb +31 -11
  173. data/app/components/avo/sidebar/section_component.rb +1 -3
  174. data/app/components/avo/sidebar_component.html.erb +35 -36
  175. data/app/components/avo/sidebar_component.rb +16 -0
  176. data/app/components/avo/sidebar_profile_component.html.erb +27 -36
  177. data/app/components/avo/sidebar_profile_component.rb +14 -0
  178. data/app/components/avo/tab_group_component.html.erb +21 -9
  179. data/app/components/avo/tab_group_component.rb +54 -15
  180. data/app/components/avo/turbo_frame_wrapper_component.html.erb +4 -8
  181. data/app/components/avo/turbo_frame_wrapper_component.rb +9 -0
  182. data/app/components/avo/u_i/avatar_component.html.erb +11 -0
  183. data/app/components/avo/u_i/avatar_component.rb +61 -0
  184. data/app/components/avo/u_i/badge_component.html.erb +9 -0
  185. data/app/components/avo/u_i/badge_component.rb +35 -0
  186. data/app/components/avo/u_i/card_component.html.erb +29 -0
  187. data/app/components/avo/u_i/card_component.rb +65 -0
  188. data/app/components/avo/u_i/dropdown_component.html.erb +14 -0
  189. data/app/components/avo/u_i/dropdown_component.rb +26 -0
  190. data/app/components/avo/u_i/dropdown_menu_component.html.erb +16 -0
  191. data/app/components/avo/u_i/dropdown_menu_component.rb +8 -0
  192. data/app/components/avo/u_i/file_upload_input_component.html.erb +26 -0
  193. data/app/components/avo/u_i/file_upload_input_component.rb +15 -0
  194. data/app/components/avo/u_i/file_upload_item_component.html.erb +48 -0
  195. data/app/components/avo/u_i/file_upload_item_component.rb +17 -0
  196. data/app/components/avo/u_i/icon_button_component.html.erb +7 -0
  197. data/app/components/avo/u_i/icon_button_component.rb +22 -0
  198. data/app/components/avo/u_i/panel_component.html.erb +49 -0
  199. data/app/components/avo/u_i/panel_component.rb +29 -0
  200. data/app/components/avo/u_i/panel_header_component.html.erb +37 -0
  201. data/app/components/avo/u_i/panel_header_component.rb +24 -0
  202. data/app/components/avo/u_i/search_input_component.html.erb +28 -0
  203. data/app/components/avo/u_i/search_input_component.rb +12 -0
  204. data/app/components/avo/u_i/tabs/tab_component.html.erb +26 -0
  205. data/app/components/avo/u_i/tabs/tab_component.rb +25 -0
  206. data/app/components/avo/u_i/tabs/tabs_component.html.erb +7 -0
  207. data/app/components/avo/u_i/tabs/tabs_component.rb +13 -0
  208. data/app/components/avo/view_types/base_view_type_component.rb +26 -0
  209. data/app/components/avo/view_types/grid_component.html.erb +18 -0
  210. data/app/components/avo/view_types/grid_component.rb +4 -0
  211. data/app/components/avo/view_types/map_component.html.erb +17 -0
  212. data/app/components/avo/view_types/map_component.rb +110 -0
  213. data/app/components/avo/view_types/table_component.html.erb +63 -0
  214. data/app/components/avo/{index/resource_table_component.rb → view_types/table_component.rb} +1 -10
  215. data/app/components/avo/views/resource_edit_component.html.erb +12 -18
  216. data/app/components/avo/views/resource_edit_component.rb +1 -27
  217. data/app/components/avo/views/resource_index_component.html.erb +97 -74
  218. data/app/components/avo/views/resource_index_component.rb +23 -3
  219. data/app/components/avo/views/resource_show_component.html.erb +4 -2
  220. data/app/components/avo/views/resource_show_component.rb +1 -4
  221. data/app/controllers/avo/associations_controller.rb +1 -1
  222. data/app/controllers/avo/base_application_controller.rb +7 -5
  223. data/app/controllers/avo/base_controller.rb +139 -40
  224. data/app/controllers/avo/debug_controller.rb +0 -29
  225. data/app/controllers/avo/media_library_controller.rb +17 -1
  226. data/app/controllers/avo/search_controller.rb +5 -0
  227. data/app/controllers/concerns/avo/initializes_avo.rb +7 -8
  228. data/app/helpers/avo/application_helper.rb +60 -46
  229. data/app/helpers/avo/turbo_stream_actions_helper.rb +10 -1
  230. data/app/helpers/avo/url_helpers.rb +3 -2
  231. data/app/javascript/{avo.base.js → application.js} +9 -18
  232. data/app/javascript/js/application.js +40 -0
  233. data/app/javascript/js/controllers/action_controller.js +4 -4
  234. data/app/javascript/js/controllers/actions_overflow_controller.js +21 -6
  235. data/app/javascript/js/controllers/color_scheme_switcher_controller.js +226 -0
  236. data/app/javascript/js/controllers/dropdown_menu_controller.js +42 -0
  237. data/app/javascript/js/controllers/fields/code_field_controller.js +20 -3
  238. data/app/javascript/js/controllers/fields/easy_mde_controller.js +23 -1
  239. data/app/javascript/js/controllers/fields/key_value_controller.js +43 -39
  240. data/app/javascript/js/controllers/fields/panel_refresh_controller.js +4 -0
  241. data/app/javascript/js/controllers/fields/tags_field_controller.js +2 -2
  242. data/app/javascript/js/controllers/fields/tags_field_helpers.js +4 -6
  243. data/app/javascript/js/controllers/grid_cover_empty_state_controller.js +42 -0
  244. data/app/javascript/js/controllers/item_selector_controller.js +0 -2
  245. data/app/javascript/js/controllers/loading_button_controller.js +1 -5
  246. data/app/javascript/js/controllers/map_dark_mode_controller.js +131 -0
  247. data/app/javascript/js/controllers/menu_controller.js +38 -16
  248. data/app/javascript/js/controllers/modal_controller.js +16 -0
  249. data/app/javascript/js/controllers/modal_size_controller.js +83 -0
  250. data/app/javascript/js/controllers/nested_form_controller.js +2 -2
  251. data/app/javascript/js/controllers/password_visibility_controller.js +13 -0
  252. data/app/javascript/js/controllers/preview_controller.js +2 -2
  253. data/app/javascript/js/controllers/resource_search_controller.js +123 -0
  254. data/app/javascript/js/controllers/search_controller.js +10 -29
  255. data/app/javascript/js/controllers/sidebar_controller.js +29 -9
  256. data/app/javascript/js/controllers/table_row_controller.js +28 -0
  257. data/app/javascript/js/controllers/tippy_controller.js +1 -1
  258. data/app/javascript/js/controllers/toggle_controller.js +40 -5
  259. data/app/javascript/js/controllers.js +14 -2
  260. data/app/javascript/js/custom-stream-actions.js +10 -8
  261. data/app/views/avo/actions/show.html.erb +14 -10
  262. data/app/views/avo/base/_boolean_filter.html.erb +1 -1
  263. data/app/views/avo/base/_date_time_filter.html.erb +3 -3
  264. data/app/views/avo/base/_multiple_select_filter.html.erb +1 -1
  265. data/app/views/avo/base/_new_via_belongs_to.html.erb +2 -3
  266. data/app/views/avo/base/_text_filter.html.erb +1 -1
  267. data/app/views/avo/base/preview.html.erb +5 -4
  268. data/app/views/avo/debug/status.html.erb +5 -92
  269. data/app/views/avo/debug/status.text.erb +0 -2
  270. data/app/views/avo/home/_actions.html.erb +1 -1
  271. data/app/views/avo/home/_dashboards.html.erb +1 -1
  272. data/app/views/avo/home/_filters.html.erb +1 -1
  273. data/app/views/avo/home/_resources.html.erb +2 -2
  274. data/app/views/avo/home/failed_to_load.html.erb +2 -2
  275. data/app/views/avo/home/index.html.erb +25 -25
  276. data/app/views/avo/media_library/_form.html.erb +43 -28
  277. data/app/views/avo/media_library/show.html.erb +7 -3
  278. data/app/views/avo/modal/_size_selector.html.erb +46 -0
  279. data/app/views/avo/partials/_alerts.html.erb +1 -1
  280. data/app/views/avo/partials/_color_scheme_switcher.html.erb +106 -0
  281. data/app/views/avo/partials/_color_theme_override.html.erb +49 -0
  282. data/app/views/avo/partials/_confirm_dialog.html.erb +19 -17
  283. data/app/views/avo/partials/_custom_tools_alert.html.erb +6 -6
  284. data/app/views/avo/partials/_footer.html.erb +1 -1
  285. data/app/views/avo/partials/_header.html.erb +1 -1
  286. data/app/views/avo/partials/_javascript.html.erb +0 -2
  287. data/app/views/avo/partials/_navbar.html.erb +53 -8
  288. data/app/views/avo/partials/_sortable_component.html.erb +1 -1
  289. data/app/views/avo/partials/_table_header.html.erb +28 -19
  290. data/app/views/avo/partials/_view_toggle_button.html.erb +6 -29
  291. data/app/views/avo/partials/distribution_chart.html.erb +2 -2
  292. data/app/views/avo/private/_links_and_buttons.html.erb +12 -8
  293. data/app/views/avo/private/design.html.erb +8 -4
  294. data/app/views/avo/sidebar/_license_warning.html.erb +3 -3
  295. data/app/views/layouts/avo/application.html.erb +39 -17
  296. data/app/views/layouts/avo/modal.html.erb +7 -0
  297. data/avo.gemspec +3 -4
  298. data/config/i18n-tasks.yml +1 -1
  299. data/config/importmap.rb +1 -0
  300. data/config/initializers/pagy.rb +5 -25
  301. data/config/routes/dynamic_routes.rb +4 -0
  302. data/config/routes.rb +6 -7
  303. data/db/factories.rb +14 -0
  304. data/lib/avo/asset_manager.rb +2 -0
  305. data/lib/avo/avatar.rb +7 -0
  306. data/lib/avo/base_action.rb +16 -4
  307. data/lib/avo/concerns/breadcrumbs.rb +7 -66
  308. data/lib/avo/concerns/form_builder.rb +41 -0
  309. data/lib/avo/concerns/{has_profile_photo.rb → has_avatar.rb} +8 -4
  310. data/lib/avo/concerns/{has_cover_photo.rb → has_cover.rb} +4 -4
  311. data/lib/avo/concerns/has_description.rb +9 -0
  312. data/lib/avo/concerns/has_item_type.rb +6 -2
  313. data/lib/avo/concerns/has_items.rb +43 -58
  314. data/lib/avo/concerns/pagination.rb +29 -19
  315. data/lib/avo/concerns/row_controls_configuration.rb +22 -15
  316. data/lib/avo/configuration/branding.rb +7 -7
  317. data/lib/avo/configuration.rb +92 -45
  318. data/lib/avo/{cover_photo.rb → cover.rb} +2 -2
  319. data/lib/avo/current.rb +0 -11
  320. data/lib/avo/discreet_information.rb +52 -29
  321. data/lib/avo/dsl/field_parser.rb +1 -1
  322. data/lib/avo/engine.rb +41 -8
  323. data/lib/avo/error_manager.rb +1 -1
  324. data/lib/avo/fields/avatar_field.rb +19 -0
  325. data/lib/avo/fields/badge_field.rb +23 -3
  326. data/lib/avo/fields/base_field.rb +46 -1
  327. data/lib/avo/fields/concerns/dom_id.rb +17 -0
  328. data/lib/avo/fields/concerns/file_authorization.rb +4 -0
  329. data/lib/avo/fields/concerns/has_html_attributes.rb +1 -1
  330. data/lib/avo/fields/concerns/is_searchable.rb +2 -5
  331. data/lib/avo/fields/concerns/nested.rb +1 -1
  332. data/lib/avo/fields/files_field.rb +2 -2
  333. data/lib/avo/fields/frame_base_field.rb +2 -2
  334. data/lib/avo/fields/id_field.rb +5 -1
  335. data/lib/avo/fields/progress_bar_field.rb +1 -1
  336. data/lib/avo/fields/text_field.rb +1 -1
  337. data/lib/avo/photo_object.rb +12 -1
  338. data/lib/avo/plugin_manager.rb +4 -0
  339. data/lib/avo/resources/base.rb +33 -21
  340. data/lib/avo/resources/controls/actions_list.rb +3 -3
  341. data/lib/avo/resources/controls/base_control.rb +1 -1
  342. data/lib/avo/resources/items/card.rb +16 -0
  343. data/lib/avo/resources/items/header.rb +11 -0
  344. data/lib/avo/resources/items/holder.rb +18 -23
  345. data/lib/avo/resources/items/item_group.rb +5 -7
  346. data/lib/avo/resources/items/sidebar.rb +5 -9
  347. data/lib/avo/resources/items/tab.rb +8 -8
  348. data/lib/avo/resources/items/tab_group.rb +8 -10
  349. data/lib/avo/resources/resource_manager.rb +2 -1
  350. data/lib/avo/services/hq_reporter.rb +102 -0
  351. data/lib/avo/services/telemetry_service.rb +0 -1
  352. data/lib/avo/test_helpers.rb +36 -22
  353. data/lib/avo/u_i_instance.rb +60 -0
  354. data/lib/avo/version.rb +1 -1
  355. data/lib/avo/view_inquirer.rb +6 -1
  356. data/lib/avo/view_types/view_type_manager.rb +70 -0
  357. data/lib/avo.rb +30 -45
  358. data/lib/generators/avo/action_generator.rb +1 -1
  359. data/lib/generators/avo/resource_generator.rb +43 -0
  360. data/lib/generators/avo/resource_tool_generator.rb +1 -1
  361. data/lib/generators/avo/tailwindcss/install_generator.rb +0 -6
  362. data/lib/generators/avo/templates/cards/partial_card_partial.tt +1 -1
  363. data/lib/generators/avo/templates/initializer/avo.tt +7 -9
  364. data/lib/generators/avo/templates/locales/avo.ar.yml +25 -0
  365. data/lib/generators/avo/templates/locales/avo.de.yml +25 -0
  366. data/lib/generators/avo/templates/locales/avo.en.yml +25 -0
  367. data/lib/generators/avo/templates/locales/avo.es.yml +25 -0
  368. data/lib/generators/avo/templates/locales/avo.fr.yml +25 -0
  369. data/lib/generators/avo/templates/locales/avo.it.yml +25 -0
  370. data/lib/generators/avo/templates/locales/avo.ja.yml +25 -0
  371. data/lib/generators/avo/templates/locales/avo.nb.yml +25 -0
  372. data/lib/generators/avo/templates/locales/avo.nl.yml +25 -0
  373. data/lib/generators/avo/templates/locales/avo.nn.yml +25 -0
  374. data/lib/generators/avo/templates/locales/avo.pl.yml +25 -0
  375. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +25 -0
  376. data/lib/generators/avo/templates/locales/avo.pt.yml +25 -0
  377. data/lib/generators/avo/templates/locales/avo.ro.yml +25 -0
  378. data/lib/generators/avo/templates/locales/avo.ru.yml +25 -0
  379. data/lib/generators/avo/templates/locales/avo.tr.yml +25 -0
  380. data/lib/generators/avo/templates/locales/{avo.uk.yml → avo.ua.yml} +26 -1
  381. data/lib/generators/avo/templates/locales/avo.zh-TW.yml +25 -0
  382. data/lib/generators/avo/templates/locales/avo.zh.yml +25 -0
  383. data/lib/generators/avo/templates/resource/resource.tt +10 -1
  384. data/lib/generators/avo/templates/resource_tools/partial.tt +20 -22
  385. data/lib/generators/avo/templates/tailwindcss/avo.tailwind.css +1 -3
  386. data/lib/generators/avo/templates/tailwindcss/tailwind.config.js +0 -7
  387. data/lib/generators/avo/templates/tool/view.tt +14 -16
  388. data/lib/generators/avo/tool_generator.rb +3 -3
  389. data/lib/generators/avo/version_generator.rb +1 -1
  390. data/lib/tasks/avo_tasks.rake +29 -25
  391. metadata +145 -97
  392. data/app/assets/stylesheets/avo.base.css +0 -130
  393. data/app/assets/stylesheets/css/breadcrumbs.css +0 -16
  394. data/app/assets/stylesheets/css/buttons.css +0 -19
  395. data/app/assets/stylesheets/css/tailwindcss/base.css +0 -1
  396. data/app/assets/stylesheets/css/tailwindcss/components.css +0 -1
  397. data/app/assets/stylesheets/css/tailwindcss/utilities.css +0 -1
  398. data/app/assets/svgs/avo/arrow-down.svg +0 -3
  399. data/app/assets/svgs/avo/arrow-up.svg +0 -3
  400. data/app/assets/svgs/avo/detach.svg +0 -8
  401. data/app/assets/svgs/avo/download-solid-reversed.svg +0 -3
  402. data/app/assets/svgs/avo/download-solid.svg +0 -3
  403. data/app/assets/svgs/avo/edit.svg +0 -5
  404. data/app/assets/svgs/avo/editor-bold.svg +0 -1
  405. data/app/assets/svgs/avo/editor-italic.svg +0 -1
  406. data/app/assets/svgs/avo/editor-link.svg +0 -1
  407. data/app/assets/svgs/avo/editor-list.svg +0 -1
  408. data/app/assets/svgs/avo/editor-strike.svg +0 -1
  409. data/app/assets/svgs/avo/editor-underline.svg +0 -1
  410. data/app/assets/svgs/avo/eye.svg +0 -1
  411. data/app/assets/svgs/avo/trash-sm.svg +0 -3
  412. data/app/assets/svgs/avo/trash.svg +0 -7
  413. data/app/components/avo/cover_photo_component.html.erb +0 -3
  414. data/app/components/avo/cover_photo_component.rb +0 -19
  415. data/app/components/avo/fields/common/badge_viewer_component.html.erb +0 -1
  416. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -33
  417. data/app/components/avo/index/resource_grid_component.html.erb +0 -23
  418. data/app/components/avo/index/resource_grid_component.rb +0 -10
  419. data/app/components/avo/index/resource_map_component.html.erb +0 -16
  420. data/app/components/avo/index/resource_map_component.rb +0 -114
  421. data/app/components/avo/index/resource_table_component.html.erb +0 -52
  422. data/app/components/avo/panel_component.html.erb +0 -63
  423. data/app/components/avo/panel_component.rb +0 -43
  424. data/app/components/avo/panel_header_component.html.erb +0 -42
  425. data/app/components/avo/panel_header_component.rb +0 -31
  426. data/app/components/avo/profile_photo_component.html.erb +0 -6
  427. data/app/components/avo/profile_photo_component.rb +0 -9
  428. data/app/components/avo/sidebar/heading_component.html.erb +0 -21
  429. data/app/components/avo/sidebar/heading_component.rb +0 -9
  430. data/app/components/avo/tab_switcher_component.html.erb +0 -20
  431. data/app/components/avo/tab_switcher_component.rb +0 -45
  432. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  433. data/app/views/avo/debug/report.html.erb +0 -37
  434. data/app/views/avo/partials/_panel_breadcrumbs.html.erb +0 -3
  435. data/app/views/avo/partials/_resource_search.html.erb +0 -16
  436. data/lib/avo/licensing/community_license.rb +0 -6
  437. data/lib/avo/licensing/h_q.rb +0 -202
  438. data/lib/avo/licensing/license.rb +0 -76
  439. data/lib/avo/licensing/license_manager.rb +0 -24
  440. data/lib/avo/licensing/nil_license.rb +0 -14
  441. data/lib/avo/licensing/pro_license.rb +0 -20
  442. data/lib/avo/licensing/request.rb +0 -20
  443. data/lib/avo/profile_photo.rb +0 -7
  444. data/lib/avo/services/debug_service.rb +0 -107
  445. data/public/avo-assets/placeholder.svg +0 -1
  446. data/tailwind.preset.js +0 -171
  447. /data/{public/avo-assets → app/assets/images/avo}/favicon.ico +0 -0
  448. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.eot +0 -0
  449. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.svg +0 -0
  450. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.ttf +0 -0
  451. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.woff +0 -0
  452. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.woff2 +0 -0
  453. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.eot +0 -0
  454. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.svg +0 -0
  455. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.ttf +0 -0
  456. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.woff +0 -0
  457. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.woff2 +0 -0
  458. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.eot +0 -0
  459. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.svg +0 -0
  460. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.ttf +0 -0
  461. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.woff +0 -0
  462. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.woff2 +0 -0
  463. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.eot +0 -0
  464. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.svg +0 -0
  465. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.ttf +0 -0
  466. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.woff +0 -0
  467. /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.woff2 +0 -0
  468. /data/{public/avo-assets → app/assets/images/avo}/logo-on-white.png +0 -0
  469. /data/{public/avo-assets → app/assets/images/avo}/logo.png +0 -0
  470. /data/{public/avo-assets → app/assets/images/avo}/logomark.png +0 -0
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Avo::Fields::AvatarField::IndexComponent < Avo::Fields::IndexComponent
4
+ end
@@ -1,3 +1,9 @@
1
1
  <%= index_field_wrapper(**field_wrapper_args, flush: true) do %>
2
- <%= render Avo::Fields::Common::BadgeViewerComponent.new value: @field.value, options: @field.options %>
2
+ <%= render Avo::UI::BadgeComponent.new(
3
+ label: @field.value,
4
+ color: @field.color,
5
+ style: @field.style,
6
+ icon: @field.icon,
7
+ classes: 'min-w-24'
8
+ ) %>
3
9
  <% end %>
@@ -1,3 +1,8 @@
1
1
  <%= field_wrapper(**field_wrapper_args) do %>
2
- <%= render Avo::Fields::Common::BadgeViewerComponent.new value: @field.value, options: @field.options %>
2
+ <%= render Avo::UI::BadgeComponent.new(
3
+ label: @field.value,
4
+ color: @field.color,
5
+ style: @field.style,
6
+ icon: @field.icon,
7
+ ) %>
3
8
  <% end %>
@@ -1,5 +1,5 @@
1
1
  <% if is_polymorphic? %>
2
- <div class="divide-y"
2
+ <div class="w-full divide-y divide-gray-200"
3
3
  data-controller="belongs-to-field"
4
4
  data-searchable="<%= @field.is_searchable? %>"
5
5
  data-association="<%= @field.id %>"
@@ -20,7 +20,7 @@
20
20
  },
21
21
  disabled: disabled
22
22
  }
23
- %>
23
+ %>
24
24
  <%
25
25
  # If the select field is disabled, no value will be sent. It's how HTML works.
26
26
  # Thus the extra hidden field to actually send the related id to the server.
@@ -61,7 +61,7 @@
61
61
  data: @field.get_html(:data, view: view, element: :input),
62
62
  disabled: disabled
63
63
  }
64
- %>
64
+ %>
65
65
  <%
66
66
  # If the select field is disabled, no value will be sent. It's how HTML works.
67
67
  # Thus the extra hidden field to actually send the related id to the server.
@@ -71,14 +71,15 @@
71
71
  <% end %>
72
72
  <% target_resource_for_type = Avo.resource_manager.get_resource_by_model_class(type.to_s) %>
73
73
  <% if field.can_create?(target_resource_for_type) %>
74
- <% create_href = create_path(target_resource_for_type) %>
74
+ <% create_href = create_path(target_resource_for_type, **modal_args) %>
75
75
  <% if !disabled && create_href.present? %>
76
76
  <%= link_to t("avo.create_new_item", item: type.model_name.human.downcase),
77
- create_href,
78
- class: "text-sm",
79
- data: {
80
- turbo_prefetch: false
81
- }
77
+ create_href,
78
+ class: "text-sm",
79
+ data: {
80
+ turbo_frame: Avo::MODAL_FRAME_ID,
81
+ turbo_prefetch: false
82
+ }
82
83
  %>
83
84
  <% end %>
84
85
  <% end %>
@@ -123,11 +124,12 @@
123
124
  <% if field.can_create? %>
124
125
  <% if !disabled && create_path.present? %>
125
126
  <%= link_to t("avo.create_new_item", item: @field.name.downcase),
126
- create_path,
127
- class: "text-sm",
128
- data: {
129
- turbo_prefetch: false
130
- }
127
+ create_path(**modal_args),
128
+ class: "text-sm",
129
+ data: {
130
+ turbo_frame: Avo::MODAL_FRAME_ID,
131
+ turbo_prefetch: false
132
+ }
131
133
  %>
132
134
  <% end %>
133
135
  <% end %>
@@ -2,7 +2,7 @@
2
2
 
3
3
  class Avo::Fields::BelongsToField::EditComponent < Avo::Fields::EditComponent
4
4
  def initialize(...)
5
- super(...)
5
+ super
6
6
 
7
7
  @polymorphic_record = nil
8
8
  end
@@ -57,17 +57,27 @@ class Avo::Fields::BelongsToField::EditComponent < Avo::Fields::EditComponent
57
57
  @field.get_html(:data, view: view, element: :input).fetch(:action, nil)
58
58
  end
59
59
 
60
- def create_path(target_resource = nil)
60
+ def create_path(target_resource = nil, **args)
61
61
  return nil if @resource.blank?
62
62
 
63
63
  helpers.new_resource_path(**{
64
64
  via_relation: @field.id.to_s,
65
65
  resource: target_resource || @field.target_resource,
66
66
  via_record_id: resource.record.persisted? ? resource.record.to_param : nil,
67
- via_belongs_to_resource_class: resource.class.name
67
+ via_belongs_to_resource_class: resource.class.name,
68
+ **args
68
69
  }.compact)
69
70
  end
70
71
 
72
+ def modal_args
73
+ {
74
+ modal_layout: true,
75
+ modal_width: :full,
76
+ modal_height: :full,
77
+ wrapper_class: "container mx-auto py-4"
78
+ }
79
+ end
80
+
71
81
  private
72
82
 
73
83
  def visit_through_association?
@@ -15,14 +15,14 @@
15
15
  data: @field.get_html(:data, view: view, element: :input),
16
16
  style: @field.get_html(:style, view: view, element: :input),
17
17
  class: class_names(
18
- "text-lg h-4 w-4 checked:bg-primary-400 focus:checked:!bg-primary-400 rounded",
18
+ "size-4",
19
19
  @field.get_html(:classes, view: view, element: :input),
20
20
  "sr-only peer": as_toggle?
21
21
  ) %>
22
22
 
23
23
  <% if as_toggle? %>
24
24
  <div class="block w-10 h-6 rounded-full bg-gray-300 peer-checked:bg-green-500"></div>
25
- <div class="dot absolute left-1 top-1 bg-white w-4 h-4 rounded-full transition-transform duration-200 transform peer-checked:translate-x-4"></div>
25
+ <div class="dot absolute start-1 top-1 bg-white w-4 h-4 rounded-full transition-transform duration-200 transform peer-checked:translate-x-4"></div>
26
26
  <% end %>
27
27
  <% end %>
28
28
  </div>
@@ -1,6 +1,6 @@
1
1
  <%= field_wrapper(**field_wrapper_args) do %>
2
2
  <div class="flex items-center">
3
- <div class="space-y-2">
3
+ <div class="space-y-2 py-2">
4
4
  <% @field.options.each do |id, label| %>
5
5
  <label class="block">
6
6
  <%= @form.check_box @field.id,
@@ -2,11 +2,10 @@
2
2
 
3
3
  class Avo::Fields::BooleanGroupField::EditComponent < Avo::Fields::EditComponent
4
4
  def initialize(...)
5
- super(...)
5
+ super
6
6
 
7
7
  # Initialize here to avoid multiple calls to @field.get_html for each option.
8
- @classes = "w-4 h-4 rounded checked:bg-primary-400 focus:checked:!bg-primary-400" \
9
- "#{@field.get_html(:classes, view: view, element: :input)}"
8
+ @classes = "size-4 #{@field.get_html(:classes, view: view, element: :input)}"
10
9
  @data = @field.get_html(:data, view: view, element: :input)
11
10
  @style = @field.get_html(:style, view: view, element: :input)
12
11
  @form_scope = @form.object_name
@@ -1,5 +1,5 @@
1
1
  <%= field_wrapper(**field_wrapper_args, full_width: true) do %>
2
- <div data-controller="code-field" style="--height: <%= @field.height %>">
2
+ <div data-controller="code-field" class="w-full" style="--height: <%= @field.height %>">
3
3
  <%= text_area_tag @field.id, @field.value,
4
4
  class: helpers.input_classes('w-full'),
5
5
  placeholder: @field.placeholder,
@@ -4,17 +4,17 @@ class Avo::Fields::Common::BooleanCheckComponent < Avo::BaseComponent
4
4
  STATE_CONFIG = {
5
5
  true => {
6
6
  name: "checked",
7
- icon: "heroicons/outline/check-circle",
7
+ icon: "tabler/outline/circle-check",
8
8
  color: "text-green-600"
9
9
  },
10
10
  false => {
11
11
  name: "unchecked",
12
- icon: "heroicons/outline/x-circle",
12
+ icon: "tabler/outline/circle-x",
13
13
  color: "text-red-600"
14
14
  },
15
15
  nil => {
16
16
  name: "indeterminate",
17
- icon: "heroicons/outline/minus-circle",
17
+ icon: "tabler/outline/circle-minus",
18
18
  color: "text-gray-400"
19
19
  }
20
20
  }.freeze
@@ -3,9 +3,9 @@
3
3
  <div class="hidden" data-tippy-target="content">
4
4
  <div class="p-1 space-y-1">
5
5
  <% @options.each do |id, label| %>
6
- <div class="flex items-center flex-nowrap space-x-1">
6
+ <div class="flex items-center flex-nowrap space-x-1 rtl:space-x-reverse">
7
7
  <%= render Avo::Fields::Common::BooleanCheckComponent.new checked: checked(id), size: :sm %>
8
- <div class="flex itdems-center text-left text-sm py-px"><%= label %></div>
8
+ <div class="flex itdems-center text-start text-sm py-px"><%= label %></div>
9
9
  </div>
10
10
  <% end %>
11
11
  </div>
@@ -1,29 +1,32 @@
1
- <div class="flex">
2
- <% if can_download_file? %>
3
- <%= a_link helpers.main_app.rails_blob_path(@file, only_path: true, disposition: :attachment),
4
- icon: "heroicons/outline/download",
5
- color: :primary,
6
- download: true,
7
- class: 'text-center',
8
- title: t('avo.download_file'),
9
- data: { tippy: :tooltip },
10
- compact: true,
11
- size: :xs %>
1
+ <% if can_download_file? %>
2
+ <%= link_to helpers.main_app.rails_blob_path(@file, only_path: true, disposition: :attachment),
3
+ class: "file-upload-item__action",
4
+ download: true,
5
+ title: t("avo.download_file"),
6
+ data: { tippy: :tooltip } do %>
7
+ <%= svg "tabler/outline/download" %>
12
8
  <% end %>
13
- </div>
14
- <div>
15
- <% if can_delete_file? %>
16
- <%= a_link destroy_path,
17
- icon: "avo/trash",
18
- color: :red,
19
- compact: true,
20
- size: :xs,
21
- class: 'text-center',
22
- title: t('avo.delete_file', item: @file.filename),
23
- data: {
24
- turbo_method: :delete,
25
- turbo_confirm: t('avo.are_you_sure'),
26
- tippy: :tooltip
27
- } %>
9
+ <% end %>
10
+
11
+ <% if can_delete_file? %>
12
+ <%= link_to destroy_path,
13
+ class: "file-upload-item__action",
14
+ title: t("avo.delete_file", item: @file.filename),
15
+ data: {
16
+ turbo_method: :delete,
17
+ turbo_confirm: t("avo.are_you_sure"),
18
+ tippy: :tooltip
19
+ } do %>
20
+ <%= svg "tabler/outline/trash" %>
28
21
  <% end %>
29
- </div>
22
+ <% end %>
23
+ <% if can_reupload_file? %>
24
+ <%= link_to "#",
25
+ class: "file-upload-item__action",
26
+ title: t("avo.reupload_file", item: @file.filename),
27
+ data: {
28
+ tippy: :tooltip
29
+ } do %>
30
+ <%= svg "tabler/outline/refresh" %>
31
+ <% end %>
32
+ <% end %>
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Avo::Fields::Common::Files::ControlsComponent < Avo::BaseComponent
4
- include Avo::ApplicationHelper
5
4
  include Avo::Fields::Concerns::FileAuthorization
6
5
 
7
6
  delegate :id, to: :@field
@@ -1,11 +1,10 @@
1
1
  <%= content_tag :div, class: class_names(
2
- {
3
- "-mt-9": @field.stacked && !@field.hide_view_type_switcher
4
- }
2
+ "w-full @container",
3
+ "-mt-6": @field.stacked && !@field.hide_view_type_switcher
5
4
  ) do %>
6
5
  <%= turbo_frame_tag @field.id do %>
7
6
  <% unless @field.hide_view_type_switcher %>
8
- <div class="justify-self-end flex justify-end items-center space-x-3">
7
+ <div class="justify-self-end flex justify-end items-center space-x-3 rtl:space-x-reverse">
9
8
  <%= render partial: 'avo/partials/view_toggle_button',
10
9
  locals: {
11
10
  available_view_types: @available_view_types,
@@ -19,7 +18,7 @@
19
18
  "py-4 rounded-2xl max-w-full",
20
19
  {
21
20
  "flex flex-col space-y-2": @view_type == :list,
22
- "relative grid xs:grid-cols-2 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-6 gap-6": @view_type == :grid
21
+ "relative grid xs:grid-cols-2 @sm:grid-cols-2 @xl:grid-cols-3 @2xl:grid-cols-4 @4xl:grid-cols-5 @6xl:grid-cols-6 @7xl:grid-cols-7 @8xl:grid-cols-8 gap-6": @view_type == :grid
23
22
  }
24
23
  ) do %>
25
24
  <% @field.value.attachments.each do |file| %>
@@ -17,7 +17,7 @@
17
17
  <span class="text-gray-500 mt-1 text-sm truncate" title="<%= file.filename %>"><%= file.filename %></span>
18
18
  <% end %>
19
19
  </div>
20
- <div class="flex space-x-2">
20
+ <div class="flex space-x-2 rtl:space-x-reverse">
21
21
  <%= render Avo::Fields::Common::Files::ControlsComponent.new(field: @field, file: file, resource: @resource) %>
22
22
  </div>
23
23
  </div>
@@ -1,22 +1,10 @@
1
- <div id="<%= dom_id file %>" class="relative min-h-full max-w-full flex-1 flex">
1
+ <div id="<%= dom_id file %>">
2
2
  <% if file.present? %>
3
- <div class="grid grid-cols-6 gap-2 items-center max-w-full w-full">
4
- <div class="col-span-4 flex-1 flex flex-row items-center text-gray-700 overflow-x-auto mac-styled-scrollbar ">
5
- <div class="rounded-full bg-slate-100 border border-gray-500 p-1.5 flex items-center justify-center">
6
- <%= helpers.svg icon_for_file, class: "h-5 text-gray-600" %>
7
- </div>
8
- <p class="items-center h-full p-2 flex-shrink-0">
9
- <%= file.filename %>
10
- </p>
11
- </div>
12
- <div class="text-gray-700 flex-shrink-0 text-sm">
13
- <%= helpers.number_to_human_size(file.byte_size) %>
14
- </div>
15
- <div class="flex space-x-2 justify-end col-span-1 flex-shrink-0">
16
- <%= render Avo::Fields::Common::Files::ControlsComponent.new(field: @field, file: file, resource: @resource) %>
17
- </div>
18
- </div>
19
- <% else %>
20
-
3
+ <%= render Avo::UI::FileUploadItemComponent.new(
4
+ title: file.filename.to_s,
5
+ size_label: helpers.number_to_human_size(file.byte_size),
6
+ ) do %>
7
+ <%= render Avo::Fields::Common::Files::ControlsComponent.new(field: @field, file: file, resource: @resource) %>
8
+ <% end %>
21
9
  <% end %>
22
10
  </div>
@@ -1,9 +1,9 @@
1
1
  <%= content_tag :div, class: @classes, data: @data do %>
2
- <div class="py-2 px-6 h-full w-full">
2
+ <div class="py-2 px-4 h-full w-full">
3
3
  <% if @field.as_html %>
4
4
  <%= sanitize @field.value %>
5
5
  <% else %>
6
- <div class="font-semibold uppercase"><%= @field.value %></div>
6
+ <div class="font-medium uppercase"><%= @field.value %></div>
7
7
  <% end %>
8
8
  </div>
9
9
  <% end %>
@@ -7,7 +7,7 @@ class Avo::Fields::Common::HeadingComponent < Avo::BaseComponent
7
7
 
8
8
  def after_initialize
9
9
  @view = @field.resource.view
10
- @classes = "flex items-start py-1 leading-tight bg-gray-100 text-gray-500 text-xs #{@field.get_html(:classes, view: @view, element: :wrapper)}"
10
+ @classes = "flex items-start py-1 leading-tight bg-secondary text-content-secondary text-xs #{@field.get_html(:classes, view: @view, element: :wrapper)}"
11
11
  @data = {**stimulus_data_attributes, **@field.get_html(:data, view: @view, element: :wrapper)}
12
12
  add_stimulus_attributes_for(@field.resource, @data)
13
13
  end
@@ -1,37 +1,33 @@
1
- <div class="w-full shadow-lg rounded overflow-hidden"
1
+ <div class="key-value"
2
2
  data-controller="key-value"
3
3
  data-key-value-target="controller"
4
4
  data-options="<%= @field.options.to_json %>"
5
5
  data-input-classes="<%= input_classes %>"
6
6
  data-editable="<%= @view.form? %>"
7
7
  >
8
- <div class="w-full flex flex-col">
9
- <div class="flex w-full">
10
- <div class="flex w-full bg-gray-700 shadow overflow-hidden">
11
- <div class="w-1/2 py-3 px-3 uppercase font-semibold text-xs text-white border-gray-600 border-r">
8
+ <div class="key-value__table">
9
+ <div class="key-value__header">
10
+ <div class="key-value__header-cell key-value__header-cell--key">
12
11
  <%= @field.key_label %>
13
- </div>
14
- <div class="w-1/2 py-3 px-3 uppercase font-semibold text-xs text-white">
12
+ </div>
13
+ <div class="key-value__header-cell key-value__header-cell--value">
15
14
  <%= @field.value_label %>
16
- </div>
17
- <% if @view.form? %>
18
- <div class="flex items-center justify-center p-2 px-[48px] border-l border-gray-600">
19
- <a href="javascript:void(0);"
20
- title="<%= @field.action_text %>"
21
- data-tippy="tooltip"
22
- data-button="add-row"
23
- data-action="click->key-value#addRow"
24
- <% if @field.disable_adding_rows %>
25
- class="cursor-not-allowed"
26
- <% end %>
27
- >
28
- <%= helpers.svg "heroicons/outline/plus-circle", class: 'text-gray-400 h-5 hover:text-gray-500' %>
29
- </a>
30
- </div>
31
- <% end %>
32
15
  </div>
16
+ <% if @view.form? %>
17
+ <div class="key-value__header-cell key-value__header-cell--actions">
18
+ <a href="javascript:void(0);"
19
+ title="<%= @field.action_text %>"
20
+ data-tippy="tooltip"
21
+ data-button="add-row"
22
+ data-action="click->key-value#addRow"
23
+ class="key-value__action-button <%= 'cursor-not-allowed' if @field.disable_adding_rows %>"
24
+ >
25
+ <%= helpers.svg "heroicons/outline/plus-circle", class: 'key-value__action-icon' %>
26
+ </a>
27
+ </div>
28
+ <% end %>
33
29
  </div>
34
- <div data-key-value-target="rows"></div>
30
+ <div class="key-value__body" data-key-value-target="rows"></div>
35
31
  </div>
36
32
  <% if @form.present? %>
37
33
  <%= @form.text_area @field.id,
@@ -1,4 +1,4 @@
1
- <%= render Avo::Advanced::Nested::FieldComponent.new(
1
+ <%= render Avo::Nested::FieldComponent.new(
2
2
  field: @field,
3
3
  parent_resource: @field.resource,
4
4
  view: @view,
@@ -7,6 +7,6 @@ class Avo::Fields::Common::NestedFieldComponent < Avo::BaseComponent
7
7
  prop :kwargs, kind: :**
8
8
 
9
9
  def render?
10
- Avo.plugin_manager.installed?("avo-advanced")
10
+ Avo.plugin_manager.installed?("avo-nested")
11
11
  end
12
12
  end
@@ -1,8 +1,8 @@
1
1
  <div class="flex items-center" data-component="<%= component_name %>">
2
2
  <% if @display_value %>
3
- <div class="text-right text-sm font-semibold leading-none mr-2 min-w-[2rem]">
3
+ <div class="text-end text-sm font-semibold leading-none me-2 min-w-[2rem]">
4
4
  <%= @value %><%= @value_suffix if @value_suffix.present? %>
5
5
  </div>
6
6
  <% end %>
7
- <%= tag :progress, min: 0, max: @max, value: @value, class: "block min-w-[6rem] #{"w-full" if show?} #{"w-auto" if index?}" %>
7
+ <%= tag :progress, min: 0, max: @max, value: @value, class: class_names("block min-w-[6rem] border-none", "w-full": show?, "w-auto": index?) %>
8
8
  </div>
@@ -2,7 +2,7 @@
2
2
  <% (1..@max).each do |rating_value| %>
3
3
  <%= helpers.svg(
4
4
  'heroicons/solid/star',
5
- class: class_names("star inline-block mr-0.5", filled: rating_value <= (@value || 0))
5
+ class: class_names("star inline-block me-0.5", filled: rating_value <= (@value || 0))
6
6
  ) %>
7
7
  <% end %>
8
8
  </div>
@@ -1,10 +1,4 @@
1
- <%
2
- classes = "inline-block"
3
- classes += " text-red-600" if @status == 'failed'
4
- classes += " text-green-600" if @status == 'success'
5
- classes += " text-gray-600" if @status == 'neutral'
6
- %>
7
- <div class="flex flex-shrink-0 <%= classes %> items-center">
1
+ <div class=" <%= class_names("flex shrink-0 items-center", "text-red-600": @status == 'failed', "text-green-600": @status == 'success', "text-gray-600": @status == 'neutral') %>">
8
2
  <% if @status == 'success' %>
9
3
  <%= helpers.svg 'heroicons/solid/check-circle', class: 'h-4' %>
10
4
  <% elsif @status == 'failed' %>
@@ -13,9 +7,9 @@
13
7
  <%= helpers.svg 'heroicons/solid/minus-circle', class: 'h-4' %>
14
8
  <% elsif @status == 'loading' %>
15
9
  <div class="spinner">
16
- <div class="double-bounce1 bg-gray-600"></div>
17
- <div class="double-bounce2 bg-gray-800"></div>
10
+ <div class="double-bounce1"></div>
11
+ <div class="double-bounce2"></div>
18
12
  </div>
19
13
  <% end %>
20
- <span class="ml-1"><%= @label %></span>
14
+ <span class="ms-1"><%= @label %></span>
21
15
  </div>
@@ -12,7 +12,7 @@
12
12
  } do %>
13
13
  <%= @form.text_field @field.id,
14
14
  value: @field.edit_formatted_value,
15
- class: classes("w-full #{"hidden" unless params[:avo_show_hidden_inputs]}"),
15
+ class: classes("w-full #{"!hidden" unless params[:avo_show_hidden_inputs]}"),
16
16
  data: {
17
17
  'date-field-target': 'input',
18
18
  placeholder: @field.placeholder,
@@ -34,5 +34,18 @@
34
34
  placeholder: @field.placeholder,
35
35
  style: @field.get_html(:style, view: view, element: :input)
36
36
  %>
37
+
38
+ <%= content_tag :button,
39
+ class: "absolute end-0 self-center me-2 uppercase font-semibold text-xs disabled:cursor-not-allowed disabled:opacity-50 text-content-secondary cursor-pointer",
40
+ id: :reset,
41
+ type: :button,
42
+ title: t("avo.reset").capitalize,
43
+ disabled: disabled?,
44
+ data: {
45
+ action: "click->date-field#clear",
46
+ tippy: :tooltip
47
+ } do %>
48
+ <%= helpers.svg "tabler/outline/x", class: "h-4" %>
49
+ <% end %>
37
50
  <% end %>
38
51
  <% end %>
@@ -14,7 +14,7 @@
14
14
  } do %>
15
15
  <%= @form.text_field @field.id,
16
16
  value: @field.edit_formatted_value,
17
- class: classes("w-full #{"hidden" unless params[:avo_show_hidden_inputs]}"),
17
+ class: classes("w-full #{"!hidden" unless params[:avo_show_hidden_inputs]}"),
18
18
  data: {
19
19
  date_field_target: :input,
20
20
  placeholder: @field.placeholder,
@@ -37,7 +37,7 @@
37
37
  style: @field.get_html(:style, view: view, element: :input)
38
38
  %>
39
39
  <%= content_tag :button,
40
- class: "absolute right-0 self-center mr-4 uppercase font-semibold text-xs disabled:cursor-not-allowed disabled:opacity-50",
40
+ class: "absolute end-0 self-center me-2 uppercase font-semibold text-xs disabled:cursor-not-allowed disabled:opacity-50 text-content-secondary cursor-pointer",
41
41
  id: :reset,
42
42
  type: :button,
43
43
  title: t("avo.reset").capitalize,
@@ -46,7 +46,7 @@
46
46
  action: "click->date-field#clear",
47
47
  tippy: :tooltip
48
48
  } do %>
49
- <%= helpers.svg "avo/times", class: "h-4" %>
49
+ <%= helpers.svg "tabler/outline/x", class: "h-4" %>
50
50
  <% end %>
51
51
  <% end %>
52
52
  <% end %>
@@ -1,5 +1,5 @@
1
1
  <%= field_wrapper(**field_wrapper_args, full_width: true) do %>
2
- <div data-controller="easy-mde">
2
+ <div data-controller="easy-mde" class="w-full">
3
3
  <%= text_area_tag @field.id, @field.value,
4
4
  class: helpers.input_classes('w-full js-has-easy-mde-editor'),
5
5
  placeholder: @field.placeholder,
@@ -3,7 +3,6 @@
3
3
  class Avo::Fields::EditComponent < Avo::BaseComponent
4
4
  include Avo::ResourcesHelper
5
5
 
6
- attr_reader :compact
7
6
  attr_reader :field
8
7
  attr_reader :form
9
8
  attr_reader :index
@@ -12,9 +11,9 @@ class Avo::Fields::EditComponent < Avo::BaseComponent
12
11
  attr_reader :resource
13
12
  attr_reader :stacked
14
13
  attr_reader :view
14
+ attr_reader :full_width
15
15
 
16
- def initialize(field: nil, resource: nil, index: 0, form: nil, compact: false, stacked: nil, multiple: false, autofocus: false, **kwargs)
17
- @compact = compact
16
+ def initialize(field: nil, resource: nil, index: 0, form: nil, stacked: nil, full_width: nil, multiple: false, autofocus: false, **kwargs)
18
17
  @field = field
19
18
  @form = form
20
19
  @index = index
@@ -24,10 +23,15 @@ class Avo::Fields::EditComponent < Avo::BaseComponent
24
23
  @stacked = stacked
25
24
  @view = Avo::ViewInquirer.new("edit")
26
25
  @autofocus = autofocus
26
+ @full_width = full_width
27
27
  end
28
28
 
29
29
  def classes(extra_classes = "")
30
- helpers.input_classes("#{@field.get_html(:classes, view: view, element: :input)} #{extra_classes}", has_error: @field.record_errors.include?(@field.id))
30
+ helpers.input_classes(
31
+ "#{@field.get_html(:classes, view: view, element: :input)} #{extra_classes}",
32
+ has_error: @field.record_errors.include?(@field.id),
33
+ size: @field.size
34
+ )
31
35
  end
32
36
 
33
37
  def render?
@@ -36,12 +40,12 @@ class Avo::Fields::EditComponent < Avo::BaseComponent
36
40
 
37
41
  def field_wrapper_args
38
42
  {
39
- compact: compact,
40
43
  field: field,
41
44
  form: form,
42
45
  index: index,
43
46
  resource: resource,
44
47
  stacked: stacked,
48
+ full_width: full_width,
45
49
  view: view
46
50
  }
47
51
  end