avo 2.46.0 → 3.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of avo might be problematic. Click here for more details.

Files changed (417) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -22
  3. data/Gemfile.lock +181 -160
  4. data/README.md +1 -1
  5. data/{public/avo-assets → app/assets/builds}/avo.base.css +479 -698
  6. data/app/assets/builds/avo.base.js +93804 -0
  7. data/app/assets/builds/avo.base.js.map +7 -0
  8. data/app/assets/stylesheets/avo.base.css +2 -2
  9. data/app/assets/svgs/failed_to_load.svg +1 -0
  10. data/app/assets/svgs/font.svg +1 -0
  11. data/app/assets/svgs/grid-empty-state.svg +1 -0
  12. data/app/assets/svgs/table-empty-state.svg +1 -0
  13. data/app/assets/svgs/triangle-up.svg +1 -0
  14. data/app/components/avo/actions_component.html.erb +18 -4
  15. data/app/components/avo/actions_component.rb +12 -18
  16. data/app/components/avo/alert_component.html.erb +1 -1
  17. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  18. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  19. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  20. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  21. data/app/components/avo/base_component.rb +14 -11
  22. data/app/components/avo/button_component.rb +20 -3
  23. data/app/components/avo/empty_state_component.rb +1 -1
  24. data/app/components/avo/field_wrapper_component.html.erb +4 -4
  25. data/app/components/avo/field_wrapper_component.rb +12 -23
  26. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
  27. data/app/components/avo/fields/belongs_to_field/edit_component.rb +5 -20
  28. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  29. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  30. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -2
  31. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  32. data/app/components/avo/fields/code_field/edit_component.html.erb +0 -1
  33. data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
  34. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
  35. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  36. data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
  37. data/app/components/avo/fields/common/files_list_viewer_component.rb +8 -0
  38. data/app/components/avo/fields/common/heading_component.html.erb +1 -1
  39. data/app/components/avo/fields/common/single_file_viewer_component.html.erb +56 -0
  40. data/app/components/avo/fields/common/single_file_viewer_component.rb +55 -0
  41. data/app/components/avo/fields/country_field/edit_component.html.erb +1 -3
  42. data/app/components/avo/fields/edit_component.rb +1 -1
  43. data/app/components/avo/fields/file_field/edit_component.html.erb +2 -4
  44. data/app/components/avo/fields/file_field/edit_component.rb +0 -1
  45. data/app/components/avo/fields/file_field/index_component.rb +2 -2
  46. data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
  47. data/app/components/avo/fields/files_field/edit_component.html.erb +2 -4
  48. data/app/components/avo/fields/files_field/edit_component.rb +0 -1
  49. data/app/components/avo/fields/files_field/show_component.html.erb +1 -1
  50. data/app/components/avo/fields/has_many_field/show_component.html.erb +1 -1
  51. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  52. data/app/components/avo/fields/has_one_field/show_component.html.erb +2 -2
  53. data/app/components/avo/fields/has_one_field/show_component.rb +3 -7
  54. data/app/components/avo/fields/index_component.rb +5 -6
  55. data/app/components/avo/fields/markdown_field/edit_component.html.erb +3 -4
  56. data/app/components/avo/fields/markdown_field/show_component.html.erb +3 -3
  57. data/app/components/avo/fields/number_field/edit_component.html.erb +1 -3
  58. data/app/components/avo/fields/password_field/edit_component.html.erb +1 -3
  59. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  60. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  61. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +0 -1
  62. data/app/components/avo/fields/select_field/edit_component.html.erb +2 -3
  63. data/app/components/avo/fields/show_component.rb +4 -1
  64. data/app/components/avo/fields/status_field/edit_component.html.erb +1 -1
  65. data/app/components/avo/fields/text_field/edit_component.html.erb +2 -3
  66. data/app/components/avo/fields/textarea_field/edit_component.html.erb +0 -1
  67. data/app/components/avo/fields/trix_field/edit_component.html.erb +1 -2
  68. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  69. data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
  70. data/app/components/avo/filters_component.html.erb +9 -3
  71. data/app/components/avo/filters_component.rb +4 -4
  72. data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
  73. data/app/components/avo/index/grid_item_component.html.erb +5 -2
  74. data/app/components/avo/index/grid_item_component.rb +7 -6
  75. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  76. data/app/components/avo/index/resource_controls_component.rb +128 -18
  77. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  78. data/app/components/avo/index/resource_grid_component.rb +5 -2
  79. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  80. data/app/components/avo/index/resource_table_component.rb +14 -20
  81. data/app/components/avo/index/table_row_component.html.erb +8 -4
  82. data/app/components/avo/index/table_row_component.rb +3 -2
  83. data/app/components/avo/item_switcher_component.html.erb +5 -10
  84. data/app/components/avo/item_switcher_component.rb +2 -3
  85. data/app/components/avo/modal_component.html.erb +7 -12
  86. data/app/components/avo/modal_component.rb +0 -21
  87. data/app/components/avo/paginator_component.html.erb +40 -29
  88. data/app/components/avo/paginator_component.rb +5 -23
  89. data/app/components/avo/panel_component.html.erb +8 -11
  90. data/app/components/avo/panel_component.rb +0 -1
  91. data/app/components/avo/profile_item_component.html.erb +2 -17
  92. data/app/components/avo/profile_item_component.rb +1 -13
  93. data/app/components/avo/referrer_params_component.html.erb +1 -4
  94. data/app/components/avo/resource_component.rb +142 -30
  95. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  96. data/app/components/avo/sidebar/link_component.html.erb +0 -2
  97. data/app/components/avo/sidebar/link_component.rb +3 -5
  98. data/app/components/avo/sidebar_component.html.erb +9 -2
  99. data/app/components/avo/sidebar_component.rb +5 -3
  100. data/app/components/avo/sidebar_profile_component.html.erb +27 -20
  101. data/app/components/avo/tab_group_component.html.erb +13 -7
  102. data/app/components/avo/tab_group_component.rb +1 -6
  103. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  104. data/app/components/avo/tab_switcher_component.rb +4 -39
  105. data/app/components/avo/views/resource_edit_component.html.erb +16 -52
  106. data/app/components/avo/views/resource_edit_component.rb +7 -18
  107. data/app/components/avo/views/resource_index_component.html.erb +38 -53
  108. data/app/components/avo/views/resource_index_component.rb +60 -16
  109. data/app/components/avo/views/resource_show_component.html.erb +8 -151
  110. data/app/components/avo/views/resource_show_component.rb +6 -11
  111. data/app/controllers/avo/actions_controller.rb +19 -16
  112. data/app/controllers/avo/application_controller.rb +40 -109
  113. data/app/controllers/avo/associations_controller.rb +34 -41
  114. data/app/controllers/avo/attachments_controller.rb +10 -25
  115. data/app/controllers/avo/base_controller.rb +91 -103
  116. data/app/controllers/avo/debug_controller.rb +17 -5
  117. data/app/controllers/avo/search_controller.rb +29 -54
  118. data/app/controllers/avo/team_users_controller.rb +4 -0
  119. data/app/controllers/concerns/avo/initializes_avo.rb +26 -0
  120. data/app/helpers/avo/application_helper.rb +20 -21
  121. data/app/helpers/avo/resources_helper.rb +1 -1
  122. data/app/helpers/avo/url_helpers.rb +27 -11
  123. data/app/javascript/avo.base.js +1 -0
  124. data/app/javascript/js/application.js +0 -5
  125. data/app/javascript/js/controllers/action_controller.js +5 -3
  126. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  127. data/app/javascript/js/controllers/fields/{easy_mde_controller.js → simple_mde_controller.js} +3 -4
  128. data/app/javascript/js/controllers/filter_controller.js +1 -1
  129. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  130. data/app/javascript/js/controllers/preview_controller.js +24 -0
  131. data/app/javascript/js/controllers/search_controller.js +1 -3
  132. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  133. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  134. data/app/javascript/js/controllers.js +12 -8
  135. data/app/javascript/js/custom-stream-actions.js +15 -0
  136. data/app/views/avo/{attachments/destroy.turbo_stream.erb → actions/keep_modal_open.turbo_stream.erb} +0 -2
  137. data/app/views/avo/actions/show.html.erb +12 -11
  138. data/app/views/avo/associations/new.html.erb +4 -4
  139. data/app/views/avo/base/index.html.erb +3 -2
  140. data/app/views/avo/base/new.html.erb +2 -1
  141. data/app/views/avo/base/preview.html.erb +19 -0
  142. data/app/views/avo/base/show.html.erb +1 -1
  143. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  144. data/app/views/avo/debug/report.html.erb +32 -17
  145. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -15
  146. data/app/views/avo/home/index.html.erb +1 -1
  147. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  148. data/app/views/avo/partials/_javascript.html.erb +5 -0
  149. data/app/views/avo/partials/_logo.html.erb +1 -1
  150. data/app/views/avo/partials/_navbar.html.erb +3 -5
  151. data/app/views/avo/partials/_table_header.html.erb +5 -3
  152. data/app/views/avo/partials/_view_toggle_button.html.erb +0 -9
  153. data/app/views/avo/private/design.html.erb +2 -2
  154. data/app/views/layouts/avo/application.html.erb +3 -0
  155. data/avo.gemspec +6 -7
  156. data/bin/dev +1 -1
  157. data/bin/prod +0 -0
  158. data/config/i18n-tasks.yml +1 -1
  159. data/config/initializers/pagy.rb +10 -14
  160. data/config/master.key +1 -0
  161. data/config/routes.rb +8 -12
  162. data/db/factories.rb +7 -18
  163. data/lib/avo/action_model.rb +20 -0
  164. data/lib/avo/app.rb +90 -162
  165. data/lib/avo/asset_manager.rb +30 -0
  166. data/lib/avo/base_action.rb +38 -36
  167. data/lib/avo/base_resource.rb +108 -96
  168. data/lib/avo/base_resource_tool.rb +9 -16
  169. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +3 -3
  170. data/lib/avo/concerns/filters_session_handler.rb +1 -0
  171. data/lib/avo/concerns/has_controls.rb +37 -0
  172. data/lib/avo/concerns/has_item_type.rb +38 -0
  173. data/lib/avo/concerns/{has_fields.rb → has_items.rb} +110 -97
  174. data/lib/avo/concerns/{has_resource_stimulus_controllers.rb → has_stimulus_controllers.rb} +1 -1
  175. data/lib/avo/concerns/is_resource_item.rb +24 -36
  176. data/lib/avo/concerns/is_visible.rb +15 -0
  177. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  178. data/lib/avo/configuration/branding.rb +0 -12
  179. data/lib/avo/configuration.rb +8 -45
  180. data/lib/avo/current.rb +5 -0
  181. data/lib/avo/dsl/field_parser.rb +1 -1
  182. data/lib/avo/dynamic_router.rb +6 -2
  183. data/lib/avo/engine.rb +37 -30
  184. data/lib/avo/error_manager.rb +25 -0
  185. data/lib/avo/execution_context.rb +9 -15
  186. data/lib/avo/fields/badge_field.rb +1 -1
  187. data/lib/avo/fields/base_field.rb +72 -124
  188. data/lib/avo/fields/belongs_to_field.rb +14 -25
  189. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  190. data/lib/avo/fields/concerns/has_default.rb +1 -5
  191. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  192. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  193. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  194. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  195. data/lib/avo/fields/concerns/is_required.rb +5 -7
  196. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  197. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  198. data/lib/avo/fields/country_field.rb +4 -0
  199. data/lib/avo/fields/date_field.rb +3 -16
  200. data/lib/avo/fields/date_time_field.rb +1 -5
  201. data/lib/avo/fields/field_manager.rb +45 -0
  202. data/lib/avo/fields/file_field.rb +0 -2
  203. data/lib/avo/fields/files_field.rb +0 -6
  204. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  205. data/lib/avo/fields/has_base_field.rb +11 -14
  206. data/lib/avo/fields/has_many_field.rb +5 -2
  207. data/lib/avo/fields/has_one_field.rb +5 -10
  208. data/lib/avo/fields/heading_field.rb +4 -1
  209. data/lib/avo/fields/hidden_field.rb +1 -1
  210. data/lib/avo/fields/id_field.rb +2 -3
  211. data/lib/avo/fields/password_field.rb +1 -1
  212. data/lib/avo/fields/preview_field.rb +14 -0
  213. data/lib/avo/fields/select_field.rb +12 -8
  214. data/lib/avo/fields/status_field.rb +4 -0
  215. data/lib/avo/filters/base_filter.rb +3 -8
  216. data/lib/avo/grid_collector.rb +7 -9
  217. data/lib/avo/html/builder.rb +5 -8
  218. data/lib/avo/item_grapher.rb +78 -0
  219. data/lib/avo/licensing/h_q.rb +4 -68
  220. data/lib/avo/licensing/license.rb +2 -2
  221. data/lib/avo/licensing/license_manager.rb +1 -1
  222. data/lib/avo/licensing/{nil_license.rb → null_license.rb} +1 -1
  223. data/lib/avo/licensing/pro_license.rb +1 -7
  224. data/lib/avo/plugin.rb +6 -0
  225. data/lib/avo/plugin_manager.rb +58 -0
  226. data/lib/avo/prefixed_test_helpers.rb +20 -0
  227. data/lib/avo/reloader.rb +3 -0
  228. data/lib/avo/resources/controls/actions_list.rb +6 -12
  229. data/lib/avo/resources/controls/attach_button.rb +15 -0
  230. data/lib/avo/resources/controls/back_button.rb +1 -1
  231. data/lib/avo/resources/controls/base_control.rb +15 -49
  232. data/lib/avo/resources/controls/create_button.rb +15 -0
  233. data/lib/avo/resources/controls/delete_button.rb +5 -1
  234. data/lib/avo/resources/controls/detach_button.rb +4 -1
  235. data/lib/avo/resources/controls/edit_button.rb +4 -1
  236. data/lib/avo/resources/controls/order_controls.rb +8 -0
  237. data/lib/avo/resources/controls/save_button.rb +13 -0
  238. data/lib/avo/resources/controls/show_button.rb +15 -0
  239. data/lib/avo/resources/items/holder.rb +76 -0
  240. data/lib/avo/resources/items/item_group.rb +48 -0
  241. data/lib/avo/resources/items/main_panel.rb +2 -0
  242. data/lib/avo/resources/items/panel.rb +2 -0
  243. data/lib/avo/resources/items/sidebar.rb +47 -0
  244. data/lib/avo/resources/items/tab.rb +60 -0
  245. data/lib/avo/resources/items/tab_group.rb +68 -0
  246. data/lib/avo/resources/resource_manager.rb +181 -0
  247. data/lib/avo/services/authorization_service.rb +11 -110
  248. data/lib/avo/services/debug_service.rb +92 -0
  249. data/lib/avo/services/telemetry_service.rb +84 -0
  250. data/lib/avo/test_helpers.rb +362 -0
  251. data/lib/avo/tools/tool_manager.rb +30 -0
  252. data/lib/avo/version.rb +1 -1
  253. data/lib/avo.rb +7 -0
  254. data/lib/generators/avo/eject_generator.rb +0 -1
  255. data/lib/generators/avo/install_generator.rb +1 -11
  256. data/lib/generators/avo/resource_generator.rb +5 -23
  257. data/lib/generators/avo/scope_generator.rb +15 -0
  258. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -18
  259. data/lib/generators/avo/templates/action.tt +1 -1
  260. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  261. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  262. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  263. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  264. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  265. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  266. data/lib/generators/avo/templates/dashboards/dashboard.tt +1 -1
  267. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  268. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  269. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  270. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  271. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  272. data/lib/generators/avo/templates/initializer/avo.tt +1 -11
  273. data/lib/generators/avo/templates/locales/avo.ar.yml +6 -6
  274. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  275. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  276. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  277. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  278. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  279. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  280. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  281. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  282. data/lib/generators/avo/templates/resource/resource.tt +1 -1
  283. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  284. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  285. data/lib/generators/avo/templates/scope.tt +6 -0
  286. data/lib/generators/avo/templates/standalone_action.tt +1 -1
  287. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  288. data/lib/generators/avo/templates/tool/view.tt +2 -2
  289. data/lib/tasks/avo_tasks.rake +22 -0
  290. metadata +82 -161
  291. data/app/assets/stylesheets/css/tags.css +0 -32
  292. data/app/assets/svgs/map-empty-state.svg +0 -35
  293. data/app/assets/svgs/map-view-type.svg +0 -3
  294. data/app/components/avo/card_component.html.erb +0 -46
  295. data/app/components/avo/card_component.rb +0 -25
  296. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  297. data/app/components/avo/dashboards/divider_component.rb +0 -19
  298. data/app/components/avo/fields/area_field/edit_component.html.erb +0 -7
  299. data/app/components/avo/fields/area_field/edit_component.rb +0 -4
  300. data/app/components/avo/fields/area_field/show_component.html.erb +0 -8
  301. data/app/components/avo/fields/area_field/show_component.rb +0 -4
  302. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  303. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  304. data/app/components/avo/fields/common/files/controls_component.html.erb +0 -29
  305. data/app/components/avo/fields/common/files/controls_component.rb +0 -19
  306. data/app/components/avo/fields/common/files/list_viewer_component.html.erb +0 -20
  307. data/app/components/avo/fields/common/files/list_viewer_component.rb +0 -41
  308. data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +0 -27
  309. data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +0 -52
  310. data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +0 -22
  311. data/app/components/avo/fields/common/files/view_type/list_item_component.rb +0 -15
  312. data/app/components/avo/fields/location_field/edit_component.html.erb +0 -22
  313. data/app/components/avo/fields/location_field/edit_component.rb +0 -4
  314. data/app/components/avo/fields/location_field/show_component.html.erb +0 -7
  315. data/app/components/avo/fields/location_field/show_component.rb +0 -4
  316. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  317. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  318. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  319. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  320. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  321. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  322. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  323. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  324. data/app/components/avo/index/ordering/base_component.rb +0 -9
  325. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  326. data/app/components/avo/index/ordering/button_component.rb +0 -23
  327. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  328. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  329. data/app/components/avo/index/resource_map_component.html.erb +0 -16
  330. data/app/components/avo/index/resource_map_component.rb +0 -109
  331. data/app/components/avo/row_component.html.erb +0 -3
  332. data/app/components/avo/row_component.rb +0 -12
  333. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  334. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  335. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  336. data/app/controllers/avo/dashboards_controller.rb +0 -22
  337. data/app/controllers/avo/reorder_controller.rb +0 -25
  338. data/app/javascript/js/controllers/base_controller.js +0 -22
  339. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  340. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  341. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  342. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  343. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  344. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  345. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  346. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  347. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  348. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  349. data/app/views/avo/dashboards/show.html.erb +0 -38
  350. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  351. data/app/views/avo/partials/_global_search.html.erb +0 -19
  352. data/app/views/avo/partials/_profile_menu_extra.html.erb +0 -2
  353. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  354. data/lib/avo/base_card.rb +0 -161
  355. data/lib/avo/concerns/fetches_things.rb +0 -150
  356. data/lib/avo/concerns/handles_field_args.rb +0 -47
  357. data/lib/avo/concerns/has_action_stimulus_controllers.rb +0 -15
  358. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  359. data/lib/avo/concerns/has_html_attributes.rb +0 -123
  360. data/lib/avo/concerns/pagination.rb +0 -53
  361. data/lib/avo/concerns/policy_helpers.rb +0 -31
  362. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  363. data/lib/avo/concerns/visible_items.rb +0 -51
  364. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  365. data/lib/avo/dashboards/base_divider.rb +0 -35
  366. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  367. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  368. data/lib/avo/dashboards/metric_card.rb +0 -9
  369. data/lib/avo/dashboards/partial_card.rb +0 -7
  370. data/lib/avo/fields/area_field.rb +0 -39
  371. data/lib/avo/fields/concerns/file_authorization.rb +0 -31
  372. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  373. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  374. data/lib/avo/fields/location_field.rb +0 -86
  375. data/lib/avo/fields/tags_field.rb +0 -102
  376. data/lib/avo/hosts/association_scope_host.rb +0 -8
  377. data/lib/avo/hosts/base_host.rb +0 -25
  378. data/lib/avo/hosts/card_visibility.rb +0 -20
  379. data/lib/avo/hosts/dashboard_card.rb +0 -22
  380. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  381. data/lib/avo/hosts/ordering.rb +0 -22
  382. data/lib/avo/hosts/record_host.rb +0 -7
  383. data/lib/avo/hosts/resource_record_host.rb +0 -7
  384. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  385. data/lib/avo/hosts/search_scope_host.rb +0 -7
  386. data/lib/avo/hosts/view_record_host.rb +0 -7
  387. data/lib/avo/hosts/visibility_host.rb +0 -12
  388. data/lib/avo/items_holder.rb +0 -96
  389. data/lib/avo/main_panel.rb +0 -3
  390. data/lib/avo/menu/base_item.rb +0 -25
  391. data/lib/avo/menu/builder.rb +0 -82
  392. data/lib/avo/menu/dashboard.rb +0 -22
  393. data/lib/avo/menu/group.rb +0 -2
  394. data/lib/avo/menu/link.rb +0 -6
  395. data/lib/avo/menu/menu.rb +0 -2
  396. data/lib/avo/menu/resource.rb +0 -22
  397. data/lib/avo/menu/section.rb +0 -2
  398. data/lib/avo/panel.rb +0 -24
  399. data/lib/avo/panel_builder.rb +0 -25
  400. data/lib/avo/resources/controls/action.rb +0 -38
  401. data/lib/avo/resources/controls/execution_context.rb +0 -58
  402. data/lib/avo/resources/controls/items_holder.rb +0 -19
  403. data/lib/avo/resources/controls/link_to.rb +0 -27
  404. data/lib/avo/row.rb +0 -26
  405. data/lib/avo/row_builder.rb +0 -24
  406. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  407. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  408. data/lib/avo/sidebar.rb +0 -30
  409. data/lib/avo/sidebar_builder.rb +0 -24
  410. data/lib/avo/tab.rb +0 -72
  411. data/lib/avo/tab_builder.rb +0 -25
  412. data/lib/avo/tab_group.rb +0 -42
  413. data/lib/avo/tab_group_builder.rb +0 -43
  414. data/lib/avo/tools_manager.rb +0 -11
  415. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  416. data/public/avo-assets/avo.base.js +0 -1037
  417. data/public/avo-assets/avo.base.js.map +0 -7
@@ -1,6 +1,7 @@
1
1
  import { application } from './application'
2
2
 
3
3
  import ActionController from './controllers/action_controller'
4
+ import ActionsOverflowController from './controllers/actions_overflow_controller'
4
5
  import ActionsPickerController from './controllers/actions_picker_controller'
5
6
  import AttachmentsController from './controllers/attachments_controller'
6
7
  import BelongsToFieldController from './controllers/fields/belongs_to_field_controller'
@@ -9,9 +10,9 @@ import CodeFieldController from './controllers/fields/code_field_controller'
9
10
  import CopyToClipboardController from './controllers/copy_to_clipboard_controller'
10
11
  import DashboardCardController from './controllers/dashboard_card_controller'
11
12
  import DateFieldController from './controllers/fields/date_field_controller'
12
- import EasyMdeController from './controllers/fields/easy_mde_controller'
13
13
  import FilterController from './controllers/filter_controller'
14
14
  import HiddenInputController from './controllers/hidden_input_controller'
15
+ import InputAutofocusController from './controllers/input_autofocus_controller'
15
16
  import ItemSelectAllController from './controllers/item_select_all_controller'
16
17
  import ItemSelectorController from './controllers/item_selector_controller'
17
18
  import KeyValueController from './controllers/fields/key_value_controller'
@@ -20,23 +21,25 @@ import MenuController from './controllers/menu_controller'
20
21
  import ModalController from './controllers/modal_controller'
21
22
  import MultipleSelectFilterController from './controllers/multiple_select_filter_controller'
22
23
  import PerPageController from './controllers/per_page_controller'
24
+ import PreviewController from './controllers/preview_controller'
23
25
  import ProgressBarFieldController from './controllers/fields/progress_bar_field_controller'
24
- import ReloadBelongsToFieldController from './controllers/fields/reload_belongs_to_field_controller'
25
26
  import ResourceEditController from './controllers/resource_edit_controller'
26
27
  import ResourceIndexController from './controllers/resource_index_controller'
27
28
  import ResourceShowController from './controllers/resource_show_controller'
28
29
  import SearchController from './controllers/search_controller'
29
30
  import SelectController from './controllers/select_controller'
30
31
  import SelectFilterController from './controllers/select_filter_controller'
32
+ import SelfDestroyController from './controllers/self_destroy_controller'
31
33
  import SidebarController from './controllers/sidebar_controller'
34
+ import SimpleMdeController from './controllers/fields/simple_mde_controller'
32
35
  import TabsController from './controllers/tabs_controller'
33
- import TagsFieldController from './controllers/fields/tags_field_controller'
34
36
  import TextFilterController from './controllers/text_filter_controller'
35
37
  import TippyController from './controllers/tippy_controller'
36
- import TogglePanelController from './controllers/toggle_panel_controller'
38
+ import ToggleController from './controllers/toggle_controller'
37
39
  import TrixFieldController from './controllers/fields/trix_field_controller'
38
40
 
39
41
  application.register('action', ActionController)
42
+ application.register('actions-overflow', ActionsOverflowController)
40
43
  application.register('actions-picker', ActionsPickerController)
41
44
  application.register('attachments', AttachmentsController)
42
45
  application.register('boolean-filter', BooleanFilterController)
@@ -44,6 +47,7 @@ application.register('copy-to-clipboard', CopyToClipboardController)
44
47
  application.register('dashboard-card', DashboardCardController)
45
48
  application.register('filter', FilterController)
46
49
  application.register('hidden-input', HiddenInputController)
50
+ application.register('input-autofocus', InputAutofocusController)
47
51
  application.register('item-select-all', ItemSelectAllController)
48
52
  application.register('item-selector', ItemSelectorController)
49
53
  application.register('loading-button', LoadingButtonController)
@@ -51,27 +55,27 @@ application.register('menu', MenuController)
51
55
  application.register('modal', ModalController)
52
56
  application.register('multiple-select-filter', MultipleSelectFilterController)
53
57
  application.register('per-page', PerPageController)
58
+ application.register('preview', PreviewController)
54
59
  application.register('resource-edit', ResourceEditController)
55
60
  application.register('resource-index', ResourceIndexController)
56
61
  application.register('resource-show', ResourceShowController)
57
62
  application.register('search', SearchController)
58
63
  application.register('select', SelectController)
59
64
  application.register('select-filter', SelectFilterController)
65
+ application.register('self-destroy', SelfDestroyController)
60
66
  application.register('sidebar', SidebarController)
61
67
  application.register('tabs', TabsController)
62
- application.register('tags-field', TagsFieldController)
63
68
  application.register('text-filter', TextFilterController)
64
69
  application.register('tippy', TippyController)
65
- application.register('toggle-panel', TogglePanelController)
70
+ application.register('toggle', ToggleController)
66
71
 
67
72
  // Field controllers
68
73
  application.register('belongs-to-field', BelongsToFieldController)
69
74
  application.register('code-field', CodeFieldController)
70
75
  application.register('date-field', DateFieldController)
71
- application.register('easy-mde', EasyMdeController)
72
76
  application.register('key-value', KeyValueController)
73
77
  application.register('progress-bar-field', ProgressBarFieldController)
74
- application.register("reload-belongs-to-field", ReloadBelongsToFieldController)
78
+ application.register('simple-mde', SimpleMdeController)
75
79
  application.register('trix-field', TrixFieldController)
76
80
 
77
81
  // Custom controllers
@@ -0,0 +1,15 @@
1
+ /* eslint-disable camelcase */
2
+ import { StreamActions } from '@hotwired/turbo'
3
+
4
+ // TODO: move these to the avo_filters gem
5
+
6
+ StreamActions.close_filters_dropdown = function () {
7
+ document.querySelector('.filters-dropdown-selector').classList.add('hidden')
8
+ }
9
+
10
+ StreamActions.open_filter = function () {
11
+ const id = this.getAttribute('unique-id')
12
+ setTimeout(() => {
13
+ document.querySelector(`[data-filter-id="${id}"] .pill`).click()
14
+ }, 150)
15
+ }
@@ -1,5 +1,3 @@
1
- <%= turbo_stream.remove dom_id(@destroyed) if @destroyed.present? %>
2
-
3
1
  <turbo-stream action="append" target="alerts">
4
2
  <template>
5
3
  <%= render Avo::FlashAlertsComponent.new flashes: flash %>
@@ -1,41 +1,39 @@
1
1
  <%= turbo_frame_tag "actions_show" do %>
2
2
  <div
3
- data-controller="<%= ["action", @action.get_stimulus_controllers].join(" ") %>"
3
+ data-controller="action"
4
4
  data-no-confirmation="<%= @action.no_confirmation %>"
5
5
  data-action-target="controllerDiv"
6
6
  data-resource-name="<%= @resource.model_key %>"
7
7
  data-resource-id="<%= params[:id] %>"
8
8
  class="hidden text-slate-800"
9
9
  >
10
- <%= form_with scope: 'fields',
11
- url: Avo::Services::URIService.parse(@resource.records_path).append_paths("actions").to_s,
10
+ <%= form_with model: @record,
11
+ scope: 'fields',
12
+ url: "#{@resource.records_path}/actions/#{@action.param_id}",
12
13
  local: true,
13
14
  data: @action.class.form_data_attributes do |form|
14
15
  %>
15
16
  <%= render Avo::ModalComponent.new do |c| %>
16
- <% c.with_heading do %>
17
+ <% c.heading do %>
17
18
  <%= @action.action_name %>
18
19
  <% end %>
19
-
20
20
  <div class="flex-1 flex">
21
21
  <%= @action.get_message %>
22
22
  </div>
23
- <%= hidden_field_tag :action_id, @action.param_id %>
24
- <%= form.hidden_field :avo_resource_ids, value: params[:resource_ids], 'data-action-target': 'resourceIds' %>
23
+ <%= form.hidden_field :avo_resource_ids, value: params[:id] || params[:resource_ids], 'data-action-target': 'resourceIds' %>
25
24
  <%= form.hidden_field :avo_selected_query, 'data-action-target': 'selectedAllQuery' %>
26
25
  <% if @action.get_fields.present? %>
27
26
  <div class="my-4 -mx-6">
28
27
  <% @action.get_fields.each_with_index do |field, index| %>
29
28
  <%= render field
30
- .hydrate(resource: @resource, model: @resource.model, user: @resource.user, view: @view, action: @action)
29
+ .hydrate(resource: @resource, record: @resource.record, user: @resource.user, view: @view)
31
30
  .component_for_view(@view)
32
31
  .new(field: field, resource: @resource, index: index, form: form, compact: true)
33
32
  %>
34
33
  <% end %>
35
34
  </div>
36
35
  <% end %>
37
-
38
- <% c.with_controls do %>
36
+ <% c.controls do %>
39
37
  <%= a_button type: :button,
40
38
  data: { action: 'click->modal#close' },
41
39
  size: :sm,
@@ -46,7 +44,10 @@
46
44
  color: :green,
47
45
  style: :primary,
48
46
  size: :sm,
49
- data: @action.class.submit_button_data_attributes do %>
47
+ data: {
48
+ target: :submit_action,
49
+ **@action.class.submit_button_data_attributes
50
+ } do %>
50
51
  <%= @action.confirm_button_label %>
51
52
  <% end %>
52
53
  <% end %>
@@ -11,13 +11,13 @@
11
11
  'turbo-frame': '_top'
12
12
  } do |form| %>
13
13
  <%= render Avo::ModalComponent.new do |c| %>
14
- <% c.with_heading do %>
14
+ <% c.heading do %>
15
15
  <%= t 'avo.choose_item', item: @related_resource.name.downcase %>
16
16
  <% end %>
17
17
 
18
18
  <div class="flex-1 flex items-center justify-center px-0 lg:px-8 text-lg mt-8 mb-12">
19
- <% if @field.searchable %>
20
- <%= render Avo::Fields::BelongsToField::AutocompleteComponent.new form: form,
19
+ <% if @field.is_searchable? %>
20
+ <%= render AvoPro::SearchableAssociations::AutocompleteComponent.new form: form,
21
21
  classes: input_classes("w-full"),
22
22
  field: @field,
23
23
  model_key: @field.target_resource&.model_key,
@@ -39,7 +39,7 @@
39
39
  <% end %>
40
40
  </div>
41
41
 
42
- <% c.with_controls do %>
42
+ <% c.controls do %>
43
43
  <%= a_button 'data-action': 'click->modal#close', size: :sm, style: :outline, color: :gray do %>
44
44
  <%= t('avo.cancel') %>
45
45
  <% end %>
@@ -2,17 +2,18 @@
2
2
  <%= render Avo::Views::ResourceIndexComponent.new(
3
3
  resource: @resource,
4
4
  resources: @resources,
5
- models: @models,
5
+ records: @records,
6
6
  pagy: @pagy,
7
7
  index_params: @index_params,
8
8
  filters: @filters,
9
9
  actions: @actions,
10
10
  reflection: @reflection,
11
11
  turbo_frame: params[:turbo_frame],
12
- parent_model: @parent_model,
12
+ parent_record: @parent_record,
13
13
  parent_resource: @parent_resource,
14
14
  applied_filters: @applied_filters,
15
15
  query: @query,
16
+ scopes: @scopes,
16
17
  )
17
18
  %>
18
19
  <% end %>
@@ -1 +1,2 @@
1
- <%= render Avo::Views::ResourceEditComponent.new(resource: @resource, model: @model, view: @view, actions: @actions) %>
1
+ <%= render Avo::Views::ResourceEditComponent.new(resource: @resource, record: @record, view: @view, actions: @actions) %>
2
+
@@ -0,0 +1,19 @@
1
+ <%= turbo_frame_tag params[:turbo_frame] do %>
2
+ <%= content_tag :div, class: "-mx-2" do %>
3
+ <%= content_tag :div, class: "px-4 py-2" do %>
4
+ <div class="text-base font-semibold text-gray-800">Previewing <%= @resource.record_title %></div>
5
+ <% end %>
6
+
7
+ <% if @resource.get_preview_fields.present? %>
8
+ <div class="mt-4 divide-y border-t">
9
+ <% @resource.get_preview_fields.each_with_index do |field, index| %>
10
+ <%= render field
11
+ .hydrate(resource: @resource, record: @resource.record, user: @resource.user, view: :show)
12
+ .component_for_view(:show)
13
+ .new(field: field, resource: @resource, index: index, compact: true, short: true, stacked: false)
14
+ %>
15
+ <% end %>
16
+ </div>
17
+ <% end %>
18
+ <% end %>
19
+ <% end %>
@@ -3,7 +3,7 @@
3
3
  resource: @resource,
4
4
  reflection: @reflection,
5
5
  actions: @actions,
6
- parent_model: @parent_model,
6
+ parent_record: @parent_record,
7
7
  parent_resource: @parent_resource,
8
8
  ) %>
9
9
  <% end %>
@@ -0,0 +1,9 @@
1
+ <% if valid %>
2
+ <span class="text-green-700 text-xl">
3
+ <%= svg "check-badge", class: "h-5 inline -mt-1 relative" %> <span>Valid</span>
4
+ </span>
5
+ <% else %>
6
+ <span class="text-orange-700 text-xl">
7
+ <%= svg "exclamation-circle", class: "h-5 inline -mt-1 relative" %> <span>Invalid</span>
8
+ </span>
9
+ <% end %>
@@ -1,22 +1,37 @@
1
1
  <turbo-frame id="debug-report">
2
- <div class="font-semibold">Debug report <small class="font-normal">(don't post this anywhere public)</small></div>
3
- <div>
4
- <% if defined?(ap) %>
5
- <%== ap Avo::App.debug_report(request) %>
6
- <% else %>
7
- <pre><%== JSON.pretty_generate(Avo::App.debug_report(request)) %></pre>
2
+ <div class="flex gap-2">
3
+ <%= form_with url: avo.avo_private_send_to_hq_path, data: {turbo_frame: :send_to_hq}, class: "w-full" do |f| %>
4
+ <div class="space-y-8 divide-y divide-gray-200">
5
+ <div>
6
+ <div>
7
+ <h3 class="text-lg font-medium leading-6 text-gray-900">Send in a bug report (pro feature)</h3>
8
+ <p class="mt-1 text-sm text-gray-500">If you think there is something wrong with Avo and you'd like to report with some (anonymized) telemetry about the app, please fill in any relevant details and send it in.</p>
9
+ <p class="mt-1 text-sm text-gray-500">Otherwise, please <a href="https://avo.cool/new-issue" target="_blank">create a GitHub issue</a> where everyone can contribute.</p>
10
+ </div>
11
+
12
+ <div class="sm:col-span-6 mt-4">
13
+ <label for="about" class="block text-sm font-medium text-gray-700">Details</label>
14
+ <div class="mt-1">
15
+ <%= f.text_area :body, rows: 3, class: "block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm disabled:bg-gray-100", disabled: !Avo::Current.license.pro? %>
16
+ </div>
17
+ </div>
18
+ <%= f.hidden_field :license_key, value: Avo::Services::DebugService.debug_report(request)[:license_response]["license_key"] %>
19
+ <%= a_button icon: 'heroicons/outline/paper-airplane',
20
+ color: :primary,
21
+ style: :primary,
22
+ class: "mt-4",
23
+ disabled: !Avo::Current.license.pro?,
24
+ type: :submit do %>
25
+ Send to HQ
26
+ <% end %>
27
+ </div>
28
+ </div>
8
29
  <% end %>
9
30
  </div>
10
- <div class="flex justify-end">
11
- <%= a_button icon: 'heroicons/outline/clipboard',
12
- color: :primary,
13
- style: :primary,
14
- data: {
15
- controller: 'copy-to-clipboard',
16
- action: "click->copy-to-clipboard#copy",
17
- text: Avo::App.debug_report(request),
18
- } do %>
19
- Copy debug info
20
- <% end %>
31
+ <div class="text-right">
32
+ <%= turbo_frame_tag :send_to_hq %>
33
+ </div>
34
+ <div class="overflow-auto max-w-full">
35
+
21
36
  </div>
22
37
  </turbo-frame>
@@ -1,7 +1,6 @@
1
1
  <%
2
2
  license = Avo::App.license
3
3
  information_items = [
4
- 'license',
5
4
  'license_key',
6
5
  'ruby_version',
7
6
  'rails_version',
@@ -14,14 +13,14 @@
14
13
  hq_payload = Avo::Licensing::HQ.new(request).payload
15
14
  %>
16
15
  <div class="flex flex-col">
17
- <%= render Avo::PanelComponent.new(name: 'Debug Avo', description: 'Use this page to debug the Avo license.') do |c| %>
18
- <% c.with_tools do %>
16
+ <%= render Avo::PanelComponent.new(name: 'Avo Status', description: 'Use this page to debug your Avo instance.') do |c| %>
17
+ <% c.tools do %>
19
18
  <% end %>
20
- <% c.with_bare_content do %>
21
- <div class="grid gap-4 sm:grid-cols-3">
22
- <div class="relative flex flex-col bg-white rounded shadow-panel p-4 space-y-4 h-full col-span-1">
23
- <div class="flex justify-between w-full">
24
- <div class="font-semibold">License info</div>
19
+ <% c.bare_content do %>
20
+ <div class="grid gap-4 grid-cols-2">
21
+ <div class="relative flex flex-col bg-white rounded shadow-panel p-4 space-y-4 h-full">
22
+ <div class="flex justify-between w-full">
23
+ <div class="font-semibold">License info</div>
25
24
  <div class="flex justify-self-end">
26
25
  <%= a_button style: :outline,
27
26
  color: :blue,
@@ -33,10 +32,10 @@
33
32
  Refresh license
34
33
  <% end %>
35
34
  </div>
36
- </div>
35
+ </div>
37
36
  <div class="flex flex-col flex-1">
38
37
  <div>
39
- <div class="text-xl font-semibold"><%= license.name %></div>
38
+ <div class="text-xl font-semibold"><%= render partial: "valid_indicator", locals: {valid: license.valid?} %> <%= license.name %> license </div>
40
39
  <% if license.response['reason'] %>
41
40
  <dl>
42
41
  <dt class="font-semibold text-sm">Error</dt>
@@ -63,17 +62,34 @@
63
62
  (<%= time_ago_in_words license.response['fetched_at'] %> ago)</dd>
64
63
  <% end %>
65
64
  <dt class="font-semibold text-sm">Cache store</dt>
66
- <dd><%= Avo::App.cache_store.class.to_s %> - <%= Avo::App.cache_store.options.inspect %></dd>
67
65
  </dl>
68
66
  </div>
69
67
  </div>
70
68
  </div>
71
69
  </div>
72
- <div class="relative bg-white rounded shadow-panel p-4 space-y-4 col-span-2">
73
- <turbo-frame id="debug-report" src="<%= root_path %>avo_private/debug/report" target="_top" class="block">
74
- Loading...
75
- </turbo-frame>
70
+ <div class="relative flex flex-col bg-white rounded shadow-panel p-4 space-y-4 h-full">
71
+ <div class="flex justify-between w-full">
72
+ <div class="font-semibold">Plugins</div>
73
+ </div>
74
+ <div class="flex flex-col flex-1">
75
+ <div>
76
+ <ul>
77
+ <% Avo.plugin_manager.plugins.each do |plugin| %>
78
+ <li><%= plugin.klass.to_s.split("::").first %></li>
79
+ <% end %>
80
+ </ul>
81
+ </div>
82
+ </div>
76
83
  </div>
84
+ <%= render Avo::PanelComponent.new(title: "Report") do |c| %>
85
+ <% c.body do %>
86
+ <div class="p-4">
87
+ <turbo-frame id="debug-report" src="<%= root_path %>avo_private/debug/report" target="_top" class="block">
88
+ Loading...
89
+ </turbo-frame>
90
+ </div>
91
+ <% end %>
92
+ <% end %>
77
93
  </div>
78
94
  <% end %>
79
95
  <% end %>
@@ -1,6 +1,6 @@
1
1
  <div class="flex flex-col">
2
2
  <%= render Avo::PanelComponent.new(name: 'Welcome to Avo', description: 'This page is visible only in development. It will be hidden in other environments.') do |c| %>
3
- <% c.with_body do %>
3
+ <% c.body do %>
4
4
  <div class="flex flex-col justify-between py-6 min-h-24">
5
5
  <div class="px-6 space-y-4">
6
6
  <h3>About</h3>
@@ -5,8 +5,8 @@
5
5
  </a>
6
6
  </div>
7
7
  <% end %>
8
- <% if Avo::App.error_messages.present? %>
9
- <% Avo::App.error_messages.each do |error| %>
8
+ <% if Avo::App.errors.has_errors?.present? %>
9
+ <% Avo::App.errors.all.each do |error| %>
10
10
  <% if error.is_a? Hash %>
11
11
  <%
12
12
  url, message, target = error.values_at :url, :message, :target
@@ -4,4 +4,9 @@
4
4
  Avo.configuration.root_path = '<%= root_path_without_url %>'
5
5
  Avo.configuration.search_debounce = '<%= Avo.configuration.search_debounce %>'
6
6
  Avo.configuration.cookies_key = '<%= Avo::COOKIES_KEY %>'
7
+ <% if Avo.avo_filters_installed? %>
8
+ Avo.configuration.avo_filters = {
9
+ param_key: '<%= AvoFilters.configuration.param_key %>'
10
+ }
11
+ <% end %>
7
12
  <% end %>
@@ -1,4 +1,4 @@
1
- <%= link_to root_path, class: 'logo-placeholder h-full w-full flex justify-start' do %>
1
+ <%= link_to avo.root_path, class: 'logo-placeholder h-full w-full flex justify-start' do %>
2
2
  <%= image_tag Avo.configuration.branding.logo, class: 'hidden sm:block object-contain', title: 'Avo' %>
3
3
  <%= image_tag Avo.configuration.branding.logomark, class: 'sm:hidden object-contain', title: 'Avo' %>
4
4
  <% end %>
@@ -1,5 +1,5 @@
1
1
  <div
2
- class="fixed bg-white p-2 w-full flex flex-shrink-0 items-center z-50 px-4 lg:px-4 border-b space-x-4 lg:space-x-0 h-16 <%= 'print:hidden' if Avo.configuration.hide_layout_when_printing %>"
2
+ class="fixed bg-white p-2 w-full flex flex-shrink-0 items-center z-50 px-4 border-b space-x-4 lg:space-x-0 h-16 <%= 'print:hidden' if Avo.configuration.hide_layout_when_printing %>"
3
3
  v-if="layout !== 'blank'"
4
4
  >
5
5
  <div class="flex items-center space-x-2 w-auto lg:w-64 flex-shrink-0 h-full">
@@ -9,10 +9,8 @@
9
9
  </div>
10
10
  <%= render partial: "avo/partials/logo" %>
11
11
  </div>
12
- <div class="flex-1 flex items-center justify-between lg:justify-start space-x-2 sm:space-x-8 lg:pl-4">
13
- <div class="flex">
14
- <%= render partial: "avo/partials/global_search" if ::Avo::App.license.has_with_trial(:global_search) && ::Avo.configuration.feature_enabled?(:global_search) %>
15
- </div>
12
+ <div class="flex-1 flex items-center justify-between lg:justify-start space-x-2 sm:space-x-8 lg:px-2">
13
+ <%= render AvoPro::GlobalSearchComponent.new rescue nil %>
16
14
  <div class="m-0">
17
15
  <%= render partial: "avo/partials/header" %>
18
16
  </div>
@@ -1,4 +1,6 @@
1
- <thead class="bg-white border-b border-gray-200 pb-1">
1
+ <thead
2
+ data-component-name="avo/partials/table_header"
3
+ class="bg-white border-b border-gray-200 pb-1">
2
4
  <% if @resource.record_selector %>
3
5
  <th class="rounded-lg" data-control="item-select-th">
4
6
  <%== item_select_all_input %>
@@ -53,12 +55,12 @@
53
55
  } do %>
54
56
  <% if field.sortable %>
55
57
  <%= link_to params.permit!.merge(sort_by: sort_by, sort_direction: sort_direction), class: "flex items-center #{classes} #{'cursor-pointer' if field.sortable}", 'data-turbo-frame': params[:turbo_frame] do %>
56
- <%= field.name %>
58
+ <%= field.table_header_label %>
57
59
  <%= render partial: 'avo/partials/sortable_component', locals: {field: field} %>
58
60
  <% end %>
59
61
  <% else %>
60
62
  <div class="block w-full <%= classes %>">
61
- <%= field.name %>
63
+ <%= field.table_header_label %>
62
64
  </div>
63
65
  <% end %>
64
66
  <% end %>
@@ -11,15 +11,6 @@
11
11
  new_icon: 'grid-view-type',
12
12
  translation_key: 'avo.grid_view',
13
13
  },
14
- list: {
15
- new_view_type: 'list',
16
- new_icon: 'queue-list',
17
- },
18
- map: {
19
- new_view_type: 'map',
20
- new_icon: 'map-view-type',
21
- translation_key: 'avo.map_view',
22
- },
23
14
  }
24
15
  %>
25
16
  <div class="flex">
@@ -1,6 +1,6 @@
1
1
  <div class="flex flex-col">
2
2
  <%= render Avo::PanelComponent.new(name: 'Welcome to Avo', description: 'This page is visible only in development. It will be hidden in other environments.') do |c| %>
3
- <% c.with_tools do %>
3
+ <% c.tools do %>
4
4
  <%= a_link('/admin', icon: 'arrow-left', color: :green, style: :primary, is_link: true) do %>
5
5
  Primary
6
6
  <% end %>
@@ -18,7 +18,7 @@
18
18
  <% end %>
19
19
  <% end %>
20
20
 
21
- <% c.with_body do %>
21
+ <% c.body do %>
22
22
  <div class="flex flex-col justify-between py-6 min-h-24">
23
23
  <%= render 'links_and_buttons' %>
24
24
  </div>
@@ -9,6 +9,7 @@
9
9
  <%= render partial: 'avo/partials/javascript' %>
10
10
  <%= render partial: 'avo/partials/branding' %>
11
11
  <%= render partial: 'avo/partials/pre_head' %>
12
+ <%= render Avo::AssetManager::StylesheetComponent.new asset_manager: Avo.asset_manager %>
12
13
  <% if Avo::PACKED %>
13
14
  <%= javascript_include_tag "/avo-assets/avo.base", "data-turbo-track": "reload", defer: true %>
14
15
  <%= stylesheet_link_tag "/avo-assets/avo.base", "data-turbo-track": "reload", defer: true %>
@@ -19,6 +20,7 @@
19
20
  <%= javascript_include_tag "hotwire-livereload", defer: true %>
20
21
  <% end %>
21
22
  <% end %>
23
+ <%= render Avo::AssetManager::JavascriptComponent.new asset_manager: Avo.asset_manager %>
22
24
  <%= render partial: 'avo/partials/head' %>
23
25
  </head>
24
26
  <body class="bg-application os-mac">
@@ -46,6 +48,7 @@
46
48
  </div>
47
49
  <%= turbo_frame_tag 'actions_show' %>
48
50
  <%= turbo_frame_tag 'attach_modal' %>
51
+ <%= turbo_frame_tag 'destroy_attachment_form' %>
49
52
  <%= turbo_frame_tag 'alerts', class: "fixed inset-0 bottom-0 flex flex-col space-y-4 items-end justify-right px-4 py-6 sm:p-6 justify-end z-[100] pointer-events-none" do %>
50
53
  <%= render Avo::FlashAlertsComponent.new flashes: flash %>
51
54
  <% # In case we have other general error messages %>
data/avo.gemspec CHANGED
@@ -1,7 +1,7 @@
1
- $:.push File.expand_path("lib", __dir__)
1
+ # $:.push File.expand_path("lib", __dir__)
2
2
 
3
3
  # Maintain your gem's version:
4
- require "avo/version"
4
+ require_relative "lib/avo/version"
5
5
 
6
6
  # Describe your gem and declare its dependencies:
7
7
  Gem::Specification.new do |spec|
@@ -27,20 +27,19 @@ Gem::Specification.new do |spec|
27
27
  "public gem pushes."
28
28
  end
29
29
 
30
- spec.required_ruby_version = ">= 2.6.0"
30
+ spec.required_ruby_version = ">= 3.0.0"
31
31
  spec.post_install_message = "Thank you for using Avo 💪 Docs are available at https://docs.avohq.io"
32
32
 
33
33
  spec.files = Dir["{bin,app,config,db,lib,public}/**/*", "MIT-LICENSE", "Rakefile", "README.md", "avo.gemspec", "Gemfile", "Gemfile.lock"]
34
34
 
35
- spec.add_dependency "activerecord", ">= 6.0"
36
- spec.add_dependency "actionview", ">= 6.0"
35
+ spec.add_dependency "activerecord", ">= 6.1"
36
+ spec.add_dependency "actionview", ">= 6.1"
37
37
  spec.add_dependency "pagy"
38
38
  spec.add_dependency "zeitwerk", ">= 2.6.2"
39
39
  spec.add_dependency "httparty"
40
40
  spec.add_dependency "active_link_to"
41
- spec.add_dependency "view_component", ">= 2.54.0"
41
+ spec.add_dependency "view_component"
42
42
  spec.add_dependency "turbo-rails"
43
- spec.add_dependency "turbo_power", "~> 0.5.0"
44
43
  spec.add_dependency "addressable"
45
44
  spec.add_dependency "meta-tags"
46
45
  spec.add_dependency "dry-initializer"
data/bin/dev CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
1
+ #!/usr/bin/env sh
2
2
 
3
3
  PORT="${PORT:-3030}"
4
4
  export PORT
data/bin/prod CHANGED
File without changes
@@ -3,7 +3,7 @@
3
3
  # The "main" locale.
4
4
  base_locale: en
5
5
  ## All available locales are inferred from the data by default. Alternatively, specify them explicitly:
6
- locales: [ar, en, es, fr, nb, nn, pt-BR, pt, ro, tr]
6
+ locales: [en, fr, nb, nn, pt-BR, pt, ro, tr]
7
7
  ## Reporting locale, default: en. Available: en, ru.
8
8
  # internal_locale: en
9
9
 
@@ -1,21 +1,17 @@
1
1
  require "pagy/extras/trim"
2
- require "pagy/extras/countless"
3
2
 
4
3
  # For locales without native pagy i18n support
5
4
  def pagy_locale_path(file_name)
6
5
  Avo::Engine.root.join("lib", "generators", "avo", "templates", "locales", "pagy", file_name)
7
6
  end
8
7
 
9
- extra_locales = [
10
- {locale: "en"},
11
- {locale: "es"},
12
- {locale: "fr"},
13
- {locale: "nb"},
14
- {locale: "pt-BR"},
15
- {locale: "pt"},
16
- {locale: "tr"},
17
- {locale: "nn", filepath: pagy_locale_path("nn.yml")},
18
- {locale: "ro", filepath: pagy_locale_path("ro.yml")}
19
- ]
20
-
21
- Pagy::I18n.send(:build, *extra_locales)
8
+ Pagy::I18n.load(
9
+ { locale: 'en' },
10
+ { locale: 'fr' },
11
+ { locale: 'nb' },
12
+ { locale: 'pt-BR' },
13
+ { locale: 'pt' },
14
+ { locale: 'tr' },
15
+ { locale: 'nn', filepath: pagy_locale_path("nn.yml") },
16
+ { locale: 'ro', filepath: pagy_locale_path("ro.yml") },
17
+ )