avo 2.45.0 → 3.0.0.beta1

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 (371) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +26 -25
  3. data/Gemfile.lock +179 -147
  4. data/README.md +1 -1
  5. data/app/assets/stylesheets/avo.base.css +0 -1
  6. data/app/assets/svgs/font.svg +1 -0
  7. data/app/assets/svgs/triangle-up.svg +1 -0
  8. data/app/components/avo/actions_component.html.erb +19 -5
  9. data/app/components/avo/actions_component.rb +37 -17
  10. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  11. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  12. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  13. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  14. data/app/components/avo/base_component.rb +15 -12
  15. data/app/components/avo/button_component.rb +20 -3
  16. data/app/components/avo/empty_state_component.rb +1 -1
  17. data/app/components/avo/field_wrapper_component.html.erb +1 -1
  18. data/app/components/avo/field_wrapper_component.rb +8 -8
  19. data/app/components/avo/fields/area_field/edit_component.html.erb +2 -2
  20. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
  21. data/app/components/avo/fields/belongs_to_field/edit_component.rb +6 -17
  22. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  23. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  24. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -1
  25. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  26. data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
  27. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
  28. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  29. data/app/components/avo/fields/common/files/list_viewer_component.rb +3 -3
  30. data/app/components/avo/fields/common/files/view_type/{grid_item_component.html.erb → grid_component.html.erb} +2 -2
  31. data/app/components/avo/fields/common/files/view_type/{grid_item_component.rb → grid_component.rb} +4 -5
  32. data/app/components/avo/fields/common/files/view_type/{list_item_component.rb → list_component.rb} +1 -1
  33. data/app/components/avo/fields/edit_component.rb +1 -1
  34. data/app/components/avo/fields/file_field/edit_component.html.erb +1 -1
  35. data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
  36. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  37. data/app/components/avo/fields/has_one_field/show_component.html.erb +3 -2
  38. data/app/components/avo/fields/has_one_field/show_component.rb +2 -2
  39. data/app/components/avo/fields/index_component.rb +5 -5
  40. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  41. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  42. data/app/components/avo/fields/select_field/edit_component.html.erb +1 -1
  43. data/app/components/avo/fields/show_component.rb +4 -1
  44. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  45. data/app/components/avo/filters_component.html.erb +9 -3
  46. data/app/components/avo/filters_component.rb +4 -4
  47. data/app/components/avo/index/field_wrapper_component.rb +0 -12
  48. data/app/components/avo/index/grid_item_component.html.erb +13 -36
  49. data/app/components/avo/index/grid_item_component.rb +43 -16
  50. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  51. data/app/components/avo/index/resource_controls_component.rb +124 -17
  52. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  53. data/app/components/avo/index/resource_grid_component.rb +5 -2
  54. data/app/components/avo/index/resource_map_component.html.erb +1 -1
  55. data/app/components/avo/index/resource_map_component.rb +3 -3
  56. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  57. data/app/components/avo/index/resource_table_component.rb +14 -20
  58. data/app/components/avo/index/table_row_component.html.erb +8 -4
  59. data/app/components/avo/index/table_row_component.rb +3 -2
  60. data/app/components/avo/item_switcher_component.rb +2 -2
  61. data/app/components/avo/modal_component.html.erb +7 -12
  62. data/app/components/avo/modal_component.rb +0 -21
  63. data/app/components/avo/paginator_component.html.erb +40 -29
  64. data/app/components/avo/paginator_component.rb +5 -23
  65. data/app/components/avo/panel_component.html.erb +8 -6
  66. data/app/components/avo/referrer_params_component.html.erb +1 -2
  67. data/app/components/avo/resource_component.rb +189 -14
  68. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  69. data/app/components/avo/resource_sidebar_component.rb +1 -1
  70. data/app/components/avo/sidebar/link_component.rb +1 -1
  71. data/app/components/avo/sidebar_component.html.erb +10 -3
  72. data/app/components/avo/sidebar_component.rb +5 -3
  73. data/app/components/avo/sidebar_profile_component.html.erb +15 -8
  74. data/app/components/avo/tab_group_component.html.erb +13 -7
  75. data/app/components/avo/tab_group_component.rb +1 -6
  76. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  77. data/app/components/avo/tab_switcher_component.rb +4 -39
  78. data/app/components/avo/views/resource_edit_component.html.erb +12 -48
  79. data/app/components/avo/views/resource_edit_component.rb +7 -18
  80. data/app/components/avo/views/resource_index_component.html.erb +41 -47
  81. data/app/components/avo/views/resource_index_component.rb +62 -12
  82. data/app/components/avo/views/resource_show_component.html.erb +6 -149
  83. data/app/components/avo/views/resource_show_component.rb +6 -11
  84. data/app/controllers/avo/actions_controller.rb +27 -24
  85. data/app/controllers/avo/application_controller.rb +105 -151
  86. data/app/controllers/avo/associations_controller.rb +34 -43
  87. data/app/controllers/avo/attachments_controller.rb +4 -4
  88. data/app/controllers/avo/base_controller.rb +102 -102
  89. data/app/controllers/avo/debug_controller.rb +17 -5
  90. data/app/controllers/avo/home_controller.rb +1 -1
  91. data/app/controllers/avo/search_controller.rb +30 -51
  92. data/app/controllers/avo/team_users_controller.rb +4 -0
  93. data/app/controllers/concerns/avo/initializes_avo.rb +21 -0
  94. data/app/helpers/avo/application_helper.rb +15 -9
  95. data/app/helpers/avo/resources_helper.rb +1 -1
  96. data/app/helpers/avo/url_helpers.rb +27 -11
  97. data/app/javascript/avo.base.js +1 -0
  98. data/app/javascript/js/application.js +0 -3
  99. data/app/javascript/js/controllers/action_controller.js +5 -3
  100. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  101. data/app/javascript/js/controllers/filter_controller.js +1 -1
  102. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  103. data/app/javascript/js/controllers/preview_controller.js +24 -0
  104. data/app/javascript/js/controllers/search_controller.js +2 -2
  105. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  106. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  107. data/app/javascript/js/controllers.js +10 -6
  108. data/app/javascript/js/custom-stream-actions.js +15 -0
  109. data/app/views/avo/actions/keep_modal_open.turbo_stream.erb +5 -0
  110. data/app/views/avo/actions/show.html.erb +9 -6
  111. data/app/views/avo/associations/new.html.erb +2 -2
  112. data/app/views/avo/base/index.html.erb +3 -2
  113. data/app/views/avo/base/new.html.erb +2 -1
  114. data/app/views/avo/base/preview.html.erb +19 -0
  115. data/app/views/avo/base/show.html.erb +1 -1
  116. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  117. data/app/views/avo/debug/report.html.erb +32 -17
  118. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -14
  119. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  120. data/app/views/avo/partials/_footer.html.erb +1 -1
  121. data/app/views/avo/partials/_javascript.html.erb +5 -0
  122. data/app/views/avo/partials/_logo.html.erb +1 -1
  123. data/app/views/avo/partials/_navbar.html.erb +3 -5
  124. data/app/views/avo/partials/_table_header.html.erb +5 -11
  125. data/app/views/layouts/avo/application.html.erb +4 -2
  126. data/avo.gemspec +7 -7
  127. data/bin/dev +1 -1
  128. data/bin/prod +0 -0
  129. data/config/i18n-tasks.yml +1 -1
  130. data/config/initializers/pagy.rb +0 -2
  131. data/config/master.key +1 -0
  132. data/config/routes.rb +6 -10
  133. data/db/factories.rb +7 -1
  134. data/lib/avo/action_model.rb +20 -0
  135. data/lib/avo/asset_manager.rb +30 -0
  136. data/lib/avo/base_action.rb +57 -41
  137. data/lib/avo/base_resource.rb +263 -226
  138. data/lib/avo/base_resource_tool.rb +9 -16
  139. data/lib/avo/concerns/breadcrumbs.rb +2 -2
  140. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
  141. data/lib/avo/concerns/filters_session_handler.rb +5 -3
  142. data/lib/avo/concerns/has_controls.rb +37 -0
  143. data/lib/avo/concerns/has_description.rb +23 -0
  144. data/lib/avo/concerns/has_item_type.rb +42 -0
  145. data/lib/avo/concerns/has_items.rb +325 -0
  146. data/lib/avo/concerns/is_resource_item.rb +24 -36
  147. data/lib/avo/concerns/is_visible.rb +15 -0
  148. data/lib/avo/concerns/model_class_constantized.rb +0 -2
  149. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  150. data/lib/avo/configuration/branding.rb +0 -12
  151. data/lib/avo/configuration.rb +1 -37
  152. data/lib/avo/current.rb +39 -0
  153. data/lib/avo/dsl/field_parser.rb +1 -1
  154. data/lib/avo/dynamic_router.rb +18 -3
  155. data/lib/avo/engine.rb +35 -30
  156. data/lib/avo/error_manager.rb +25 -0
  157. data/lib/avo/execution_context.rb +10 -14
  158. data/lib/avo/fields/badge_field.rb +1 -1
  159. data/lib/avo/fields/base_field.rb +91 -105
  160. data/lib/avo/fields/belongs_to_field.rb +18 -22
  161. data/lib/avo/fields/concerns/file_authorization.rb +2 -2
  162. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  163. data/lib/avo/fields/concerns/has_default.rb +1 -5
  164. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  165. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  166. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  167. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  168. data/lib/avo/fields/concerns/is_required.rb +5 -7
  169. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  170. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  171. data/lib/avo/fields/country_field.rb +4 -0
  172. data/lib/avo/fields/date_time_field.rb +1 -5
  173. data/lib/avo/fields/field_manager.rb +55 -0
  174. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  175. data/lib/avo/fields/has_base_field.rb +12 -15
  176. data/lib/avo/fields/has_many_field.rb +5 -2
  177. data/lib/avo/fields/has_one_field.rb +6 -10
  178. data/lib/avo/fields/heading_field.rb +4 -1
  179. data/lib/avo/fields/hidden_field.rb +1 -1
  180. data/lib/avo/fields/id_field.rb +1 -1
  181. data/lib/avo/fields/location_field.rb +8 -8
  182. data/lib/avo/fields/password_field.rb +1 -1
  183. data/lib/avo/fields/preview_field.rb +14 -0
  184. data/lib/avo/fields/select_field.rb +12 -8
  185. data/lib/avo/fields/status_field.rb +4 -0
  186. data/lib/avo/filters/base_filter.rb +8 -4
  187. data/lib/avo/html/builder.rb +7 -8
  188. data/lib/avo/item_grapher.rb +78 -0
  189. data/lib/avo/licensing/h_q.rb +7 -66
  190. data/lib/avo/licensing/license.rb +1 -1
  191. data/lib/avo/licensing/pro_license.rb +1 -7
  192. data/lib/avo/loaders/fields_loader.rb +7 -1
  193. data/lib/avo/plugin.rb +16 -0
  194. data/lib/avo/plugin_manager.rb +56 -0
  195. data/lib/avo/prefixed_test_helpers.rb +20 -0
  196. data/lib/avo/reloader.rb +3 -0
  197. data/lib/avo/resources/controls/actions_list.rb +7 -12
  198. data/lib/avo/resources/controls/attach_button.rb +15 -0
  199. data/lib/avo/resources/controls/back_button.rb +1 -1
  200. data/lib/avo/resources/controls/base_control.rb +15 -49
  201. data/lib/avo/resources/controls/create_button.rb +15 -0
  202. data/lib/avo/resources/controls/delete_button.rb +5 -1
  203. data/lib/avo/resources/controls/detach_button.rb +4 -1
  204. data/lib/avo/resources/controls/edit_button.rb +4 -1
  205. data/lib/avo/resources/controls/order_controls.rb +8 -0
  206. data/lib/avo/resources/controls/save_button.rb +13 -0
  207. data/lib/avo/resources/controls/show_button.rb +15 -0
  208. data/lib/avo/resources/items/holder.rb +84 -0
  209. data/lib/avo/resources/items/item_group.rb +49 -0
  210. data/lib/avo/resources/items/main_panel.rb +2 -0
  211. data/lib/avo/resources/items/panel.rb +2 -0
  212. data/lib/avo/resources/items/row.rb +54 -0
  213. data/lib/avo/resources/items/sidebar.rb +47 -0
  214. data/lib/avo/resources/items/tab.rb +60 -0
  215. data/lib/avo/resources/items/tab_group.rb +68 -0
  216. data/lib/avo/resources/resource_manager.rb +174 -0
  217. data/lib/avo/services/authorization_service.rb +11 -110
  218. data/lib/avo/services/debug_service.rb +93 -0
  219. data/lib/avo/services/telemetry_service.rb +85 -0
  220. data/lib/avo/test_helpers.rb +362 -0
  221. data/lib/avo/tools/tool_manager.rb +30 -0
  222. data/lib/avo/version.rb +1 -1
  223. data/lib/avo.rb +115 -24
  224. data/lib/generators/avo/action_generator.rb +8 -8
  225. data/lib/generators/avo/card_generator.rb +27 -0
  226. data/lib/generators/avo/filter_generator.rb +8 -8
  227. data/lib/generators/avo/resource_generator.rb +4 -4
  228. data/lib/generators/avo/scope_generator.rb +15 -0
  229. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -15
  230. data/lib/generators/avo/templates/action.tt +8 -6
  231. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  232. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  233. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  234. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  235. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  236. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  237. data/lib/generators/avo/templates/dashboards/dashboard.tt +5 -3
  238. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  239. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  240. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  241. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  242. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  243. data/lib/generators/avo/templates/initializer/avo.tt +1 -9
  244. data/lib/generators/avo/templates/locales/avo.ar.yml +5 -5
  245. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  246. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  247. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  248. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  249. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  250. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  251. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  252. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  253. data/lib/generators/avo/templates/resource/resource.tt +7 -7
  254. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  255. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  256. data/lib/generators/avo/templates/scope.tt +6 -0
  257. data/lib/generators/avo/templates/tool/view.tt +2 -2
  258. data/lib/tasks/avo_tasks.rake +27 -0
  259. data/public/avo-assets/avo.base.css +1810 -1189
  260. data/public/avo-assets/avo.base.js +217 -305
  261. data/public/avo-assets/avo.base.js.map +3 -3
  262. data/public/avo-assets/avo.css +9744 -0
  263. data/public/avo-assets/avo.js +513 -0
  264. data/public/avo-assets/avo.js.map +7 -0
  265. metadata +96 -137
  266. data/app/assets/stylesheets/css/tags.css +0 -32
  267. data/app/components/avo/card_component.html.erb +0 -46
  268. data/app/components/avo/card_component.rb +0 -25
  269. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  270. data/app/components/avo/dashboards/divider_component.rb +0 -19
  271. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  272. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  273. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  274. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  275. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  276. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  277. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  278. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  279. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  280. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  281. data/app/components/avo/index/ordering/base_component.rb +0 -9
  282. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  283. data/app/components/avo/index/ordering/button_component.rb +0 -23
  284. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  285. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  286. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  287. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  288. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  289. data/app/controllers/avo/dashboards_controller.rb +0 -22
  290. data/app/controllers/avo/reorder_controller.rb +0 -25
  291. data/app/javascript/js/controllers/base_controller.js +0 -22
  292. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  293. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  294. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  295. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  296. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  297. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  298. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  299. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  300. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  301. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  302. data/app/views/avo/dashboards/show.html.erb +0 -38
  303. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  304. data/app/views/avo/partials/_global_search.html.erb +0 -19
  305. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  306. data/lib/avo/app.rb +0 -237
  307. data/lib/avo/base_card.rb +0 -161
  308. data/lib/avo/concerns/fetches_things.rb +0 -150
  309. data/lib/avo/concerns/handles_field_args.rb +0 -47
  310. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  311. data/lib/avo/concerns/has_fields.rb +0 -334
  312. data/lib/avo/concerns/has_html_attributes.rb +0 -108
  313. data/lib/avo/concerns/pagination.rb +0 -53
  314. data/lib/avo/concerns/policy_helpers.rb +0 -31
  315. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  316. data/lib/avo/concerns/visible_items.rb +0 -51
  317. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  318. data/lib/avo/dashboards/base_divider.rb +0 -35
  319. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  320. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  321. data/lib/avo/dashboards/metric_card.rb +0 -9
  322. data/lib/avo/dashboards/partial_card.rb +0 -7
  323. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  324. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  325. data/lib/avo/fields/tags_field.rb +0 -102
  326. data/lib/avo/grid_collector.rb +0 -42
  327. data/lib/avo/hosts/association_scope_host.rb +0 -8
  328. data/lib/avo/hosts/base_host.rb +0 -25
  329. data/lib/avo/hosts/card_visibility.rb +0 -20
  330. data/lib/avo/hosts/dashboard_card.rb +0 -22
  331. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  332. data/lib/avo/hosts/ordering.rb +0 -22
  333. data/lib/avo/hosts/record_host.rb +0 -7
  334. data/lib/avo/hosts/resource_record_host.rb +0 -7
  335. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  336. data/lib/avo/hosts/search_scope_host.rb +0 -7
  337. data/lib/avo/hosts/view_record_host.rb +0 -7
  338. data/lib/avo/hosts/visibility_host.rb +0 -12
  339. data/lib/avo/items_holder.rb +0 -96
  340. data/lib/avo/main_panel.rb +0 -3
  341. data/lib/avo/menu/base_item.rb +0 -25
  342. data/lib/avo/menu/builder.rb +0 -82
  343. data/lib/avo/menu/dashboard.rb +0 -22
  344. data/lib/avo/menu/group.rb +0 -2
  345. data/lib/avo/menu/link.rb +0 -6
  346. data/lib/avo/menu/menu.rb +0 -2
  347. data/lib/avo/menu/resource.rb +0 -22
  348. data/lib/avo/menu/section.rb +0 -2
  349. data/lib/avo/panel.rb +0 -24
  350. data/lib/avo/panel_builder.rb +0 -25
  351. data/lib/avo/resources/controls/action.rb +0 -38
  352. data/lib/avo/resources/controls/execution_context.rb +0 -58
  353. data/lib/avo/resources/controls/items_holder.rb +0 -19
  354. data/lib/avo/resources/controls/link_to.rb +0 -27
  355. data/lib/avo/row.rb +0 -26
  356. data/lib/avo/row_builder.rb +0 -24
  357. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  358. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  359. data/lib/avo/sidebar.rb +0 -30
  360. data/lib/avo/sidebar_builder.rb +0 -24
  361. data/lib/avo/tab.rb +0 -72
  362. data/lib/avo/tab_builder.rb +0 -25
  363. data/lib/avo/tab_group.rb +0 -42
  364. data/lib/avo/tab_group_builder.rb +0 -43
  365. data/lib/avo/tools_manager.rb +0 -11
  366. data/lib/generators/avo/card/chartkick_generator.rb +0 -18
  367. data/lib/generators/avo/card/metric_generator.rb +0 -18
  368. data/lib/generators/avo/card/partial_generator.rb +0 -19
  369. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  370. data/lib/generators/avo/templates/standalone_action.tt +0 -8
  371. /data/app/components/avo/fields/common/files/view_type/{list_item_component.html.erb → list_component.html.erb} +0 -0
@@ -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'
@@ -12,6 +13,7 @@ import DateFieldController from './controllers/fields/date_field_controller'
12
13
  import EasyMdeController from './controllers/fields/easy_mde_controller'
13
14
  import FilterController from './controllers/filter_controller'
14
15
  import HiddenInputController from './controllers/hidden_input_controller'
16
+ import InputAutofocusController from './controllers/input_autofocus_controller'
15
17
  import ItemSelectAllController from './controllers/item_select_all_controller'
16
18
  import ItemSelectorController from './controllers/item_selector_controller'
17
19
  import KeyValueController from './controllers/fields/key_value_controller'
@@ -20,23 +22,24 @@ import MenuController from './controllers/menu_controller'
20
22
  import ModalController from './controllers/modal_controller'
21
23
  import MultipleSelectFilterController from './controllers/multiple_select_filter_controller'
22
24
  import PerPageController from './controllers/per_page_controller'
25
+ import PreviewController from './controllers/preview_controller'
23
26
  import ProgressBarFieldController from './controllers/fields/progress_bar_field_controller'
24
- import ReloadBelongsToFieldController from './controllers/fields/reload_belongs_to_field_controller'
25
27
  import ResourceEditController from './controllers/resource_edit_controller'
26
28
  import ResourceIndexController from './controllers/resource_index_controller'
27
29
  import ResourceShowController from './controllers/resource_show_controller'
28
30
  import SearchController from './controllers/search_controller'
29
31
  import SelectController from './controllers/select_controller'
30
32
  import SelectFilterController from './controllers/select_filter_controller'
33
+ import SelfDestroyController from './controllers/self_destroy_controller'
31
34
  import SidebarController from './controllers/sidebar_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,18 +55,19 @@ 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)
@@ -71,7 +76,6 @@ application.register('date-field', DateFieldController)
71
76
  application.register('easy-mde', EasyMdeController)
72
77
  application.register('key-value', KeyValueController)
73
78
  application.register('progress-bar-field', ProgressBarFieldController)
74
- application.register("reload-belongs-to-field", ReloadBelongsToFieldController)
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
+ }
@@ -0,0 +1,5 @@
1
+ <turbo-stream action="append" target="alerts">
2
+ <template>
3
+ <%= render Avo::FlashAlertsComponent.new flashes: flash %>
4
+ </template>
5
+ </turbo-stream>
@@ -7,7 +7,8 @@
7
7
  data-resource-id="<%= params[:id] %>"
8
8
  class="hidden text-slate-800"
9
9
  >
10
- <%= form_with scope: 'fields',
10
+ <%= form_with model: @record,
11
+ scope: 'fields',
11
12
  url: Avo::Services::URIService.parse(@resource.records_path).append_paths("actions").to_s,
12
13
  local: true,
13
14
  data: @action.class.form_data_attributes do |form|
@@ -16,25 +17,24 @@
16
17
  <% c.with_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
23
  <%= hidden_field_tag :action_id, @action.param_id %>
24
- <%= form.hidden_field :avo_resource_ids, value: params[:resource_ids], 'data-action-target': 'resourceIds' %>
24
+ <%= form.hidden_field :avo_resource_ids, value: params[:id] || params[:resource_ids], 'data-action-target': 'resourceIds' %>
25
25
  <%= form.hidden_field :avo_selected_query, 'data-action-target': 'selectedAllQuery' %>
26
+ <%= form.hidden_field :arguments, value: params[:arguments] %>
26
27
  <% if @action.get_fields.present? %>
27
28
  <div class="my-4 -mx-6">
28
29
  <% @action.get_fields.each_with_index do |field, index| %>
29
30
  <%= render field
30
- .hydrate(resource: @resource, model: @resource.model, user: @resource.user, view: @view)
31
+ .hydrate(resource: @resource, record: @resource.record, user: @resource.user, view: @view)
31
32
  .component_for_view(@view)
32
33
  .new(field: field, resource: @resource, index: index, form: form, compact: true)
33
34
  %>
34
35
  <% end %>
35
36
  </div>
36
37
  <% end %>
37
-
38
38
  <% c.with_controls do %>
39
39
  <%= a_button type: :button,
40
40
  data: { action: 'click->modal#close' },
@@ -46,7 +46,10 @@
46
46
  color: :green,
47
47
  style: :primary,
48
48
  size: :sm,
49
- data: @action.class.submit_button_data_attributes do %>
49
+ data: {
50
+ target: :submit_action,
51
+ **@action.class.submit_button_data_attributes
52
+ } do %>
50
53
  <%= @action.confirm_button_label %>
51
54
  <% end %>
52
55
  <% end %>
@@ -16,8 +16,8 @@
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 Avo::Pro::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,
@@ -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
- license = Avo::App.license
2
+ license = Avo.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| %>
16
+ <%= render Avo::PanelComponent.new(name: 'Avo Status', description: 'Use this page to debug your Avo instance.') do |c| %>
18
17
  <% c.with_tools do %>
19
18
  <% end %>
20
19
  <% 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>
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,35 @@
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
+ <li>Avo <%= Avo::VERSION %></li>
78
+ <% Avo.plugin_manager.plugins.each do |plugin| %>
79
+ <li><%= plugin.klass.to_s.split("::").first %> <%= plugin.klass.version %></li>
80
+ <% end %>
81
+ </ul>
82
+ </div>
83
+ </div>
76
84
  </div>
85
+ <%= render Avo::PanelComponent.new(title: "Report") do |c| %>
86
+ <% c.with_body do %>
87
+ <div class="p-4">
88
+ <turbo-frame id="debug-report" src="<%= root_path %>avo_private/debug/report" target="_top" class="block">
89
+ Loading...
90
+ </turbo-frame>
91
+ </div>
92
+ <% end %>
93
+ <% end %>
77
94
  </div>
78
95
  <% end %>
79
96
  <% end %>
@@ -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.error_manager.has_errors?.present? %>
9
+ <% Avo.error_manager.all.each do |error| %>
10
10
  <% if error.is_a? Hash %>
11
11
  <%
12
12
  url, message, target = error.values_at :url, :message, :target
@@ -1,3 +1,3 @@
1
1
  <div class="text-center text-sm text-gray-700 <%= 'print:hidden' if Avo.configuration.hide_layout_when_printing %>">
2
- <a href="https://avohq.io/" target="_blank">Avo</a> · &copy; <%= Date.today.year %> AvoHQ · <span title="<%= Avo::App.license.valid ? 'valid' : 'invalid'%> <%= Avo::App.license.id %> license">v<%= Avo::VERSION %></span>
2
+ <a href="https://avohq.io/" target="_blank">Avo</a> · &copy; <%= Date.today.year %> AvoHQ · <span title="<%= Avo.license.valid ? 'valid' : 'invalid'%> <%= Avo.license.id %> license">v<%= Avo::VERSION %></span>
3
3
  </div>
@@ -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: '<%= Avo::DynamicFilters.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 Avo::Pro::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 %>
@@ -35,14 +37,6 @@
35
37
  sort_direction = 'desc'
36
38
  end
37
39
  classes = "text-gray-500 tracking-tight leading-tight text-xs font-semibold"
38
- classes += case field.index_text_align.to_sym
39
- when :right
40
- " text-right"
41
- when :center
42
- " text-center"
43
- else
44
- ""
45
- end
46
40
  %>
47
41
  <%= content_tag :th,
48
42
  class: "text-left uppercase px-3 py-3 whitespace-nowrap rounded-l",
@@ -53,12 +47,12 @@
53
47
  } do %>
54
48
  <% if field.sortable %>
55
49
  <%= 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 %>
50
+ <%= field.table_header_label %>
57
51
  <%= render partial: 'avo/partials/sortable_component', locals: {field: field} %>
58
52
  <% end %>
59
53
  <% else %>
60
54
  <div class="block w-full <%= classes %>">
61
- <%= field.name %>
55
+ <%= field.table_header_label %>
62
56
  </div>
63
57
  <% end %>
64
58
  <% end %>
@@ -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">
@@ -58,8 +60,8 @@
58
60
  <%= render partial: "avo/partials/scripts" %>
59
61
  <!-- Avo version: <%= Avo::VERSION %> -->
60
62
  <!-- Environment: <%= Rails.env %> -->
61
- <!-- License ID: <%= Avo::App.license.id %> -->
62
- <!-- License valid?: <%= Avo::App.license.valid ? "valid" : "invalid" %> -->
63
+ <!-- License ID: <%= Avo.license.id %> -->
64
+ <!-- License valid?: <%= Avo.license.valid ? "valid" : "invalid" %> -->
63
65
  </body>
64
66
  </html>
65
67
  <!-- ✨ Built with Avo • https://www.avohq.io/ -->
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,20 @@ 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 "activesupport", ">= 6.1"
37
+ spec.add_dependency "actionview", ">= 6.1"
37
38
  spec.add_dependency "pagy"
38
39
  spec.add_dependency "zeitwerk", ">= 2.6.2"
39
40
  spec.add_dependency "httparty"
40
41
  spec.add_dependency "active_link_to"
41
- spec.add_dependency "view_component", ">= 2.54.0"
42
+ spec.add_dependency "view_component", ">= 3.0.0"
42
43
  spec.add_dependency "turbo-rails"
43
- spec.add_dependency "turbo_power", "~> 0.5.0"
44
44
  spec.add_dependency "addressable"
45
45
  spec.add_dependency "meta-tags"
46
46
  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,5 +1,4 @@
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)
@@ -8,7 +7,6 @@ end
8
7
 
9
8
  extra_locales = [
10
9
  {locale: "en"},
11
- {locale: "es"},
12
10
  {locale: "fr"},
13
11
  {locale: "nb"},
14
12
  {locale: "pt-BR"},
data/config/master.key ADDED
@@ -0,0 +1 @@
1
+ 2aeb23d82b909d9c6b5abb62f7058c2a
data/config/routes.rb CHANGED
@@ -4,11 +4,11 @@ Avo::Engine.routes.draw do
4
4
  get "resources", to: redirect(Avo.configuration.root_path)
5
5
  get "dashboards", to: redirect(Avo.configuration.root_path)
6
6
 
7
- post "/rails/active_storage/direct_uploads", to: "/active_storage/direct_uploads#create"
7
+ mount Avo::DynamicFilters::Engine, at: "/avo-dynamic_filters" if defined?(Avo::DynamicFilters::Engine)
8
+ mount Avo::Dashboards::Engine, at: "/dashboards" if defined?(Avo::Dashboards::Engine)
9
+ mount Avo::Pro::Engine, at: "/avo/avo-pro" if defined?(Avo::Pro::Engine)
8
10
 
9
- resources :dashboards do
10
- resources :cards, controller: "dashboards/cards"
11
- end
11
+ post "/rails/active_storage/direct_uploads", to: "/active_storage/direct_uploads#create"
12
12
 
13
13
  scope "avo_api", as: "avo_api" do
14
14
  get "/search", to: "search#index"
@@ -16,11 +16,6 @@ Avo::Engine.routes.draw do
16
16
  post "/resources/:resource_name/:id/attachments/", to: "attachments#create"
17
17
  end
18
18
 
19
- # Records ordering
20
- scope "reorder", as: "reorder" do
21
- patch "/:resource_name/:id", to: "reorder#order", as: "order"
22
- end
23
-
24
19
  get "failed_to_load", to: "home#failed_to_load"
25
20
 
26
21
  scope "resources", as: "resources" do
@@ -44,7 +39,8 @@ Avo::Engine.routes.draw do
44
39
  end
45
40
 
46
41
  scope "/avo_private", as: "avo_private" do
47
- get "/debug", to: "debug#index", as: "debug_index"
42
+ get "/status", to: "debug#status", as: "status"
43
+ post "/status/send_to_hq", to: "debug#send_to_hq", as: "send_to_hq"
48
44
  get "/debug/report", to: "debug#report", as: "debug_report"
49
45
  post "/debug/refresh_license", to: "debug#refresh_license"
50
46
  end
data/db/factories.rb CHANGED
@@ -9,6 +9,12 @@ FactoryBot.define do
9
9
  custom_css { ".header {\n color: red;\n}" }
10
10
  end
11
11
 
12
+ trait :with_post do
13
+ after(:create) do |user|
14
+ create(:post, user_id: user.id)
15
+ end
16
+ end
17
+
12
18
  factory :team do
13
19
  name { Faker::Company.name }
14
20
  description { Faker::Lorem.paragraph(sentence_count: 4) }
@@ -32,7 +38,7 @@ FactoryBot.define do
32
38
  factory :project do
33
39
  name { Faker::App.name }
34
40
  status { ['closed', :rejected, :failed, 'loading', :running, :waiting].sample }
35
- stage { ["Discovery", "Idea", "Done", "On hold", "Cancelled", "Drafting"].sample }
41
+ stage { ["Discovery", "Idea", "Done", "On hold", "Cancelled"].sample }
36
42
  budget { Faker::Number.decimal(l_digits: 4) }
37
43
  country { Faker::Address.country_code }
38
44
  description { Faker::Markdown.sandwich(sentences: 5) }