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,102 +0,0 @@
1
- module Avo
2
- module Fields
3
- class TagsField < BaseField
4
- attr_reader :acts_as_taggable_on
5
- attr_reader :close_on_select
6
- attr_reader :delimiters
7
- attr_reader :enforce_suggestions
8
- attr_reader :suggestions_max_items
9
- attr_reader :mode
10
-
11
- def initialize(id, **args, &block)
12
- super(id, **args, &block)
13
-
14
- add_boolean_prop args, :close_on_select
15
- add_boolean_prop args, :enforce_suggestions
16
- add_string_prop args, :acts_as_taggable_on
17
- add_array_prop args, :disallowed
18
- add_array_prop args, :delimiters, [","]
19
- add_array_prop args, :suggestions
20
- add_string_prop args, :suggestions_max_items
21
- add_string_prop args, :mode, nil
22
- add_string_prop args, :fetch_values_from
23
- add_string_prop args, :fetch_labels
24
- end
25
-
26
- def field_value
27
- return fetched_labels if @fetch_labels.present?
28
-
29
- return json_value if acts_as_taggable_on.present?
30
-
31
- value || []
32
- end
33
-
34
- def json_value
35
- value.map do |item|
36
- {
37
- value: item.name
38
- }
39
- end.as_json
40
- end
41
-
42
- def fill_field(model, key, value, params)
43
- if acts_as_taggable_on.present?
44
- model.send(act_as_taggable_attribute(key), value)
45
- else
46
- val = if value.is_a?(String)
47
- value.split(",")
48
- elsif value.is_a?(Array)
49
- value
50
- else
51
- value
52
- end
53
- model.send("#{key}=", val)
54
- end
55
-
56
- model
57
- end
58
-
59
- def suggestions
60
- return @suggestions if @suggestions.is_a? Array
61
-
62
- if @suggestions.respond_to? :call
63
- return Avo::Hosts::RecordHost.new(block: @suggestions, record: model).handle
64
- end
65
-
66
- []
67
- end
68
-
69
- def disallowed
70
- return @disallowed if @disallowed.is_a? Array
71
-
72
- if @disallowed.respond_to? :call
73
- return Avo::Hosts::RecordHost.new(block: @disallowed, record: model).handle
74
- end
75
-
76
- []
77
- end
78
-
79
- def fetch_values_from
80
- if @fetch_values_from.respond_to?(:call)
81
- Avo::Hosts::ResourceRecordHost.new(block: @fetch_values_from, resource: resource, record: model).handle
82
- else
83
- @fetch_values_from
84
- end
85
- end
86
-
87
- private
88
-
89
- def fetched_labels
90
- if @fetch_labels.respond_to?(:call)
91
- Avo::Hosts::ResourceRecordHost.new(block: @fetch_labels, resource: resource, record: model).handle
92
- else
93
- @fetch_labels
94
- end
95
- end
96
-
97
- def act_as_taggable_attribute(key)
98
- "#{key.singularize}_list="
99
- end
100
- end
101
- end
102
- end
@@ -1,8 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class AssociationScopeHost < BaseHost
4
- option :parent
5
- option :query
6
- end
7
- end
8
- end
@@ -1,25 +0,0 @@
1
- require "dry-initializer"
2
-
3
- # This object holds some data that is usually needed to compute blocks around the app.
4
- module Avo
5
- module Hosts
6
- class BaseHost
7
- extend Dry::Initializer
8
-
9
- option :context, default: proc { Avo::App.context }
10
- option :params, default: proc { Avo::App.params }
11
- option :view_context, default: proc { Avo::App.view_context }
12
- option :current_user, default: proc { Avo::App.current_user }
13
- option :main_app, default: proc { view_context.main_app }
14
- option :avo, default: proc { view_context.avo }
15
- # This is optional because we might instantiate the `Host` first and later hydrate it with a block.
16
- option :block, optional: true
17
-
18
- delegate :authorize, to: Avo::Services::AuthorizationService
19
-
20
- def handle
21
- instance_exec(&block)
22
- end
23
- end
24
- end
25
- end
@@ -1,20 +0,0 @@
1
- require "dry-initializer"
2
-
3
- module Avo
4
- module Hosts
5
- class CardVisibility
6
- extend Dry::Initializer
7
-
8
- option :block, default: proc { proc {} }
9
- option :current_user, default: proc { ::Avo::App.current_user }
10
- option :context, default: proc { ::Avo::App.context }
11
- option :parent
12
- option :card
13
- option :params, default: proc { ::Avo::App.params }
14
-
15
- def handle
16
- instance_exec(&block)
17
- end
18
- end
19
- end
20
- end
@@ -1,22 +0,0 @@
1
- require "dry-initializer"
2
-
3
- module Avo
4
- module Hosts
5
- class DashboardCard
6
- extend Dry::Initializer
7
-
8
- option :context
9
- option :range
10
- option :dashboard
11
- option :card
12
- option :params
13
- option :options
14
-
15
- delegate :result, to: :card
16
-
17
- def compute_result
18
- instance_exec(&card.query_block)
19
- end
20
- end
21
- end
22
- end
@@ -1,19 +0,0 @@
1
- require "dry-initializer"
2
-
3
- module Avo
4
- module Hosts
5
- class DashboardVisibility
6
- extend Dry::Initializer
7
-
8
- option :block, default: proc { proc {} }
9
- option :current_user, default: proc { ::Avo::App.current_user }
10
- option :context, default: proc { ::Avo::App.context }
11
- option :dashboard
12
- option :params, default: proc { ::Avo::App.params }
13
-
14
- def handle
15
- instance_exec(&block)
16
- end
17
- end
18
- end
19
- end
@@ -1,22 +0,0 @@
1
- require "dry-initializer"
2
-
3
- module Avo
4
- module Hosts
5
- class Ordering
6
- extend Dry::Initializer
7
-
8
- option :options, default: proc { {} }
9
- option :resource
10
- option :record, default: proc { resource.model }
11
- option :params, default: proc { resource.params }
12
-
13
- def order(direction)
14
- action = options.dig(:actions, direction.to_sym)
15
-
16
- if action.present?
17
- instance_exec(&action)
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class RecordHost < BaseHost
4
- option :record
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class ResourceRecordHost < RecordHost
4
- option :resource
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class ResourceViewRecordHost < ViewRecordHost
4
- option :resource
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class SearchScopeHost < BaseHost
4
- option :scope
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class ViewRecordHost < RecordHost
4
- option :view
5
- end
6
- end
7
- end
@@ -1,12 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class VisibilityHost < BaseHost
4
- option :parent_resource
5
- option :resource
6
- option :arguments
7
-
8
- # View is optional because in filter context the view is always :index
9
- option :view, optional: true
10
- end
11
- end
12
- end
@@ -1,96 +0,0 @@
1
- module Avo
2
- class ItemsHolder
3
- attr_reader :tools
4
- attr_writer :items
5
- attr_accessor :invalid_fields
6
-
7
- def items
8
- items = @items
9
-
10
- if Avo::App.license.lacks_with_trial(:custom_fields)
11
- items.reject! { |item| item.is_field? && item.custom? }
12
- end
13
-
14
- if Avo::App.license.lacks_with_trial(:advanced_fields)
15
- items.reject! { |item| item.is_field? && item.type == "tags" }
16
- end
17
-
18
- items
19
- end
20
-
21
- def initialize
22
- @items = []
23
- @items_index = 0
24
- @invalid_fields = []
25
- end
26
-
27
- # Adds a field to the bag
28
- def field(field_name, **args, &block)
29
- field_parser = Avo::Dsl::FieldParser.new(id: field_name, order_index: @items_index, **args, &block).parse
30
-
31
- if field_parser.invalid?
32
- as = args.fetch(:as, nil)
33
-
34
- # End execution ehre and add the field to the invalid_fileds payload so we know to wanr the developer about that.
35
- # @todo: Make sure this warning is still active
36
- return add_invalid_field({
37
- name: field_name,
38
- as: as,
39
- # resource: resource_class.name,
40
- message: "There's an invalid field configuration for this resource. <br/> <code class='px-1 py-px rounded bg-red-600'>field :#{field_name}, as: #{as}</code>"
41
- })
42
- end
43
-
44
- add_item field_parser.instance
45
- end
46
-
47
- def tabs(instance)
48
- add_item instance
49
- end
50
-
51
- def tab(name, **args, &block)
52
- add_item Avo::TabBuilder.parse_block(name: name, **args, &block)
53
- end
54
-
55
- def row(**args, &block)
56
- add_item Avo::RowBuilder.parse_block(**args, &block)
57
- end
58
-
59
- def tool(klass, **args)
60
- instance = klass.new(**args)
61
- add_item instance
62
- end
63
-
64
- def panel(panel_name = nil, **args, &block)
65
- panel = Avo::PanelBuilder.parse_block(name: panel_name, **args, &block)
66
-
67
- add_item panel
68
- end
69
-
70
- def heading(body = nil, **args, &block)
71
- field = Avo::Fields::HeadingField.new(body, **args)
72
-
73
- add_item field
74
- end
75
-
76
- def sidebar(instance)
77
- add_item instance
78
- end
79
-
80
- def add_item(instance)
81
- @items << instance
82
-
83
- increment_order_index
84
- end
85
-
86
- private
87
-
88
- def add_invalid_field(payload)
89
- @invalid_fields << payload
90
- end
91
-
92
- def increment_order_index
93
- @items_index += 1
94
- end
95
- end
96
- end
@@ -1,3 +0,0 @@
1
- class Avo::MainPanel < Avo::Panel
2
- class_attribute :item_type, default: :main_panel
3
- end
@@ -1,25 +0,0 @@
1
- require "dry-initializer"
2
-
3
- class Avo::Menu::BaseItem
4
- extend Dry::Initializer
5
-
6
- option :collapsable, default: proc { false }
7
- option :collapsed, default: proc { false }
8
- option :icon, optional: true
9
- option :items, default: proc { [] }
10
- option :name, default: proc { "" }
11
- option :visible, default: proc { true }
12
- option :data, default: proc { {} }
13
-
14
- def visible?
15
- return visible if visible.in? [true, false]
16
-
17
- if visible.respond_to? :call
18
- Avo::Hosts::BaseHost.new(block: visible).handle
19
- end
20
- end
21
-
22
- def navigation_label
23
- label || entity_label
24
- end
25
- end
@@ -1,82 +0,0 @@
1
- class Avo::Menu::Builder
2
- class << self
3
- def parse_menu(&block)
4
- Docile.dsl_eval(Avo::Menu::Builder.new, &block).build
5
- end
6
- end
7
-
8
- delegate :context, to: ::Avo::App
9
- delegate :current_user, to: ::Avo::App
10
- delegate :params, to: ::Avo::App
11
- delegate :request, to: ::Avo::App
12
- delegate :root_path, to: ::Avo::App
13
- delegate :view_context, to: ::Avo::App
14
- delegate :main_app, to: :view_context
15
- delegate :avo, to: :view_context
16
-
17
- def initialize(name: nil, items: [])
18
- @menu = Avo::Menu::Menu.new
19
-
20
- @menu.name = name
21
- @menu.items = items
22
- end
23
-
24
- # Adds a link
25
- def link(name, path = nil, **args)
26
- path ||= args[:path]
27
- @menu.items << Avo::Menu::Link.new(name: name, path: path, **args)
28
- end
29
- alias_method :link_to, :link
30
-
31
- # Validates and adds a resource
32
- def resource(name, **args)
33
- name = name.to_s.singularize
34
- res = Avo::App.guess_resource(name)
35
-
36
- if res.present?
37
- @menu.items << Avo::Menu::Resource.new(resource: name, **args)
38
- end
39
- end
40
- alias_method :resources, :resource
41
-
42
- # Adds a dashboard
43
- def dashboard(dashboard, **args)
44
- @menu.items << Avo::Menu::Dashboard.new(dashboard: dashboard, **args)
45
- end
46
-
47
- # Adds a section
48
- def section(name = nil, **args, &block)
49
- @menu.items << Avo::Menu::Section.new(name: name, **args, items: self.class.parse_menu(&block).items)
50
- end
51
-
52
- # Adds a group
53
- def group(name = nil, **args, &block)
54
- @menu.items << Avo::Menu::Group.new(name: name, **args, items: self.class.parse_menu(&block).items)
55
- end
56
-
57
- # Add all the resources
58
- def all_resources(**args)
59
- Avo::App.resources_for_navigation.each do |res|
60
- resource res.route_key, **args
61
- end
62
- end
63
-
64
- # Add all the dashboards
65
- def all_dashboards(**args)
66
- Avo::App.dashboards_for_navigation.each do |dash|
67
- dashboard dash.id, **args
68
- end
69
- end
70
-
71
- # Add all the tools
72
- def all_tools(**args)
73
- Avo::App.tools_for_navigation.each do |tool|
74
- link tool.humanize, path: root_path(paths: [tool])
75
- end
76
- end
77
-
78
- # Fetch the menu
79
- def build
80
- @menu
81
- end
82
- end
@@ -1,22 +0,0 @@
1
- class Avo::Menu::Dashboard < Avo::Menu::BaseItem
2
- extend Dry::Initializer
3
-
4
- option :dashboard
5
- option :label, optional: true
6
-
7
- def parsed_dashboard
8
- dashboard_by_id || dashboard_by_name
9
- end
10
-
11
- def dashboard_by_name
12
- Avo::App.get_dashboard_by_name dashboard.to_s
13
- end
14
-
15
- def dashboard_by_id
16
- Avo::App.get_dashboard_by_id dashboard.to_s
17
- end
18
-
19
- def entity_label
20
- parsed_dashboard.navigation_label
21
- end
22
- end
@@ -1,2 +0,0 @@
1
- class Avo::Menu::Group < Avo::Menu::BaseItem
2
- end
data/lib/avo/menu/link.rb DELETED
@@ -1,6 +0,0 @@
1
- class Avo::Menu::Link < Avo::Menu::BaseItem
2
- option :path, default: proc { "" }
3
- option :target, optional: true
4
- option :method, optional: true
5
- option :params, optional: true
6
- end
data/lib/avo/menu/menu.rb DELETED
@@ -1,2 +0,0 @@
1
- class Avo::Menu::Menu < OpenStruct
2
- end
@@ -1,22 +0,0 @@
1
- class Avo::Menu::Resource < Avo::Menu::BaseItem
2
- extend Dry::Initializer
3
-
4
- option :resource
5
- option :label, optional: true
6
- option :params, default: proc { {} }
7
-
8
- def parsed_resource
9
- @parsed_resource ||= Avo::App.guess_resource resource.to_s
10
- end
11
-
12
- def entity_label
13
- parsed_resource.navigation_label
14
- end
15
-
16
- def fetch_params
17
- Avo::ExecutionContext.new(
18
- target: params,
19
- resource: parsed_resource
20
- ).handle
21
- end
22
- end
@@ -1,2 +0,0 @@
1
- class Avo::Menu::Section < Avo::Menu::BaseItem
2
- end
data/lib/avo/panel.rb DELETED
@@ -1,24 +0,0 @@
1
- class Avo::Panel
2
- include Avo::Concerns::IsResourceItem
3
- include Avo::Concerns::VisibleItems
4
-
5
- class_attribute :item_type, default: :panel
6
-
7
- attr_reader :name
8
- attr_reader :view
9
- attr_reader :description
10
- attr_accessor :items_holder
11
-
12
- delegate :items, :add_item, to: :items_holder
13
-
14
- def initialize(name: nil, description: nil, view: nil)
15
- @name = name
16
- @view = view
17
- @description = description
18
- @items_holder = Avo::ItemsHolder.new
19
- end
20
-
21
- def has_items?
22
- @items.present?
23
- end
24
- end
@@ -1,25 +0,0 @@
1
- class Avo::PanelBuilder
2
- class << self
3
- def parse_block(**args, &block)
4
- Docile.dsl_eval(new(**args), &block).build
5
- end
6
- end
7
-
8
- delegate :heading, to: :items_holder
9
- delegate :field, to: :items_holder
10
- delegate :row, to: :items_holder
11
- delegate :items, to: :items_holder
12
-
13
- attr_reader :items_holder
14
-
15
- def initialize(name: nil, **args)
16
- @panel = Avo::Panel.new(name: name, **args)
17
- @items_holder = Avo::ItemsHolder.new
18
- end
19
-
20
- # Fetch the tab
21
- def build
22
- @panel.items_holder = @items_holder
23
- @panel
24
- end
25
- end
@@ -1,38 +0,0 @@
1
- module Avo
2
- module Resources
3
- module Controls
4
- class Action < BaseControl
5
- attr_reader :klass
6
-
7
- def initialize(klass, record: nil, resource: nil, view: nil, **args)
8
- super(**args)
9
-
10
- @klass = klass
11
- @resource = resource
12
- @record = record
13
- @view = view
14
- end
15
-
16
- def action
17
- @instance ||= @klass.new(
18
- model: @record,
19
- resource: @resource,
20
- view: @view,
21
- arguments: @resource.get_action_arguments(klass)
22
- )
23
- end
24
-
25
- def path
26
- Avo::Services::URIService.parse(@resource.record_path)
27
- .append_paths("actions")
28
- .append_query(action_id: action.param_id)
29
- .to_s
30
- end
31
-
32
- def label
33
- @args[:label] || action.action_name
34
- end
35
- end
36
- end
37
- end
38
- end