avo 3.30.4 → 4.0.0.beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +18 -1
- data/Gemfile.lock +257 -174
- data/README.md +1 -1
- data/app/assets/builds/avo/application.css +13979 -0
- data/app/assets/builds/avo/application.js +1160 -0
- data/app/assets/builds/avo/application.js.map +7 -0
- data/app/assets/builds/avo/late-registration.js +2 -0
- data/app/assets/builds/avo/late-registration.js.map +7 -0
- data/app/assets/config/avo_manifest.js +2 -1
- data/app/assets/images/avo/placeholder.svg +1 -0
- data/app/assets/stylesheets/application.css +250 -0
- data/app/assets/stylesheets/css/button-group.css +23 -0
- data/app/assets/stylesheets/css/components/avatar.css +128 -0
- data/app/assets/stylesheets/css/components/breadcrumbs.css +43 -0
- data/app/assets/stylesheets/css/components/button.css +343 -0
- data/app/assets/stylesheets/css/components/color_scheme_switcher.css +226 -0
- data/app/assets/stylesheets/css/components/discreet_information.css +49 -0
- data/app/assets/stylesheets/css/components/field-wrapper.css +107 -0
- data/app/assets/stylesheets/css/components/grid.css +120 -0
- data/app/assets/stylesheets/css/components/input.css +312 -0
- data/app/assets/stylesheets/css/components/modal.css +228 -0
- data/app/assets/stylesheets/css/components/tooltip.css +25 -0
- data/app/assets/stylesheets/css/components/ui/badge.css +143 -0
- data/app/assets/stylesheets/css/components/ui/card.css +95 -0
- data/app/assets/stylesheets/css/components/ui/checkbox.css +50 -0
- data/app/assets/stylesheets/css/components/ui/description_list.css +3 -0
- data/app/assets/stylesheets/css/components/ui/dropdown.css +68 -0
- data/app/assets/stylesheets/css/components/ui/file_upload_input.css +94 -0
- data/app/assets/stylesheets/css/components/ui/file_upload_item.css +78 -0
- data/app/assets/stylesheets/css/components/ui/panel.css +59 -0
- data/app/assets/stylesheets/css/components/ui/panel_header.css +48 -0
- data/app/assets/stylesheets/css/components/ui/radio.css +22 -0
- data/app/assets/stylesheets/css/components/ui/tabs.css +74 -0
- data/app/assets/stylesheets/css/css-animations.css +54 -0
- data/app/assets/stylesheets/css/fields/code.css +75 -9
- data/app/assets/stylesheets/css/fields/easy-mde.css +7 -0
- data/app/assets/stylesheets/css/fields/key_value.css +97 -0
- data/app/assets/stylesheets/css/fields/progress.css +4 -4
- data/app/assets/stylesheets/css/fields/status.css +7 -1
- data/app/assets/stylesheets/css/fields/tags.css +33 -16
- data/app/assets/stylesheets/css/fields/tiptap.css +17 -15
- data/app/assets/stylesheets/css/fields/trix.css +62 -2
- data/app/assets/stylesheets/css/fonts.css +24 -24
- data/app/assets/stylesheets/css/layout.css +135 -0
- data/app/assets/stylesheets/css/pagination.css +114 -78
- data/app/assets/stylesheets/css/resource-controls.css +13 -0
- data/app/assets/stylesheets/css/search.css +22 -12
- data/app/assets/stylesheets/css/sidebar.css +310 -24
- data/app/assets/stylesheets/css/table.css +60 -0
- data/app/assets/stylesheets/css/tooltips.css +1 -1
- data/app/assets/stylesheets/css/typography.css +10 -1
- data/app/assets/stylesheets/css/variables.css +318 -0
- data/app/assets/svgs/avo/moon-plus-plus.svg +1 -0
- data/app/components/avo/actions_component.html.erb +30 -36
- data/app/components/avo/actions_component.rb +8 -11
- data/app/components/avo/alert_component.html.erb +3 -3
- data/app/components/avo/alert_component.rb +1 -1
- data/app/components/avo/asset_manager/javascript_component.html.erb +1 -2
- data/app/components/avo/backtrace_alert_component.html.erb +4 -4
- data/app/components/avo/base_component.rb +3 -4
- data/app/components/avo/breadcrumb_element_component.html.erb +17 -0
- data/app/components/avo/breadcrumb_element_component.rb +21 -0
- data/app/components/avo/breadcrumbs_component.html.erb +19 -0
- data/app/components/avo/breadcrumbs_component.rb +5 -0
- data/app/components/avo/button_component.rb +20 -126
- data/app/components/avo/clipboard_component.html.erb +3 -2
- data/app/components/avo/clipboard_component.rb +1 -1
- data/app/components/avo/component_missing_component.rb +11 -0
- data/app/components/avo/cover_component.html.erb +3 -0
- data/app/components/avo/cover_component.rb +25 -0
- data/app/components/avo/debug/status_component.html.erb +59 -0
- data/app/components/avo/debug/status_component.rb +30 -0
- data/app/components/avo/description_list_component.rb +11 -0
- data/app/components/avo/discreet_information_component.html.erb +31 -6
- data/app/components/avo/discreet_information_component.rb +23 -32
- data/app/components/avo/divider_component.html.erb +2 -2
- data/app/components/avo/empty_state_component.html.erb +2 -9
- data/app/components/avo/empty_state_component.rb +0 -8
- data/app/components/avo/field_wrapper_component.html.erb +21 -22
- data/app/components/avo/field_wrapper_component.rb +9 -18
- data/app/components/avo/fields/avatar_field/index_component.html.erb +9 -0
- data/app/components/avo/fields/avatar_field/index_component.rb +4 -0
- data/app/components/avo/fields/badge_field/index_component.html.erb +7 -1
- data/app/components/avo/fields/badge_field/show_component.html.erb +6 -1
- data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +16 -14
- data/app/components/avo/fields/belongs_to_field/edit_component.rb +13 -3
- data/app/components/avo/fields/boolean_field/edit_component.html.erb +2 -2
- data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/boolean_group_field/edit_component.rb +2 -3
- data/app/components/avo/fields/code_field/show_component.html.erb +1 -1
- data/app/components/avo/fields/common/boolean_check_component.rb +3 -3
- data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
- data/app/components/avo/fields/common/files/controls_component.html.erb +30 -27
- data/app/components/avo/fields/common/files/controls_component.rb +0 -1
- data/app/components/avo/fields/common/files/list_viewer_component.html.erb +4 -5
- data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +1 -1
- data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +7 -19
- data/app/components/avo/fields/common/heading_component.html.erb +2 -2
- data/app/components/avo/fields/common/heading_component.rb +1 -1
- data/app/components/avo/fields/common/key_value_component.html.erb +20 -24
- data/app/components/avo/fields/common/nested_field_component.html.erb +1 -1
- data/app/components/avo/fields/common/nested_field_component.rb +1 -1
- data/app/components/avo/fields/common/progress_bar_component.html.erb +2 -2
- data/app/components/avo/fields/common/stars_component.html.erb +1 -1
- data/app/components/avo/fields/common/status_viewer_component.html.erb +4 -10
- data/app/components/avo/fields/date_field/edit_component.html.erb +14 -1
- data/app/components/avo/fields/date_time_field/edit_component.html.erb +3 -3
- data/app/components/avo/fields/easy_mde_field/show_component.html.erb +1 -1
- data/app/components/avo/fields/edit_component.rb +9 -5
- data/app/components/avo/fields/file_field/edit_component.html.erb +14 -6
- data/app/components/avo/fields/files_field/edit_component.html.erb +11 -4
- data/app/components/avo/fields/has_one_field/show_component.html.erb +10 -9
- data/app/components/avo/fields/heading_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/heading_field/show_component.html.erb +2 -2
- data/app/components/avo/fields/password_field/edit_component.html.erb +5 -7
- data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/radio_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/show_component.rb +4 -7
- data/app/components/avo/fields/stars_field/edit_component.html.erb +3 -4
- data/app/components/avo/fields/tags_field/edit_component.html.erb +1 -1
- data/app/components/avo/fields/tags_field/tag_component.html.erb +7 -8
- data/app/components/avo/fields/time_field/edit_component.html.erb +3 -3
- data/app/components/avo/fields/tiptap_field/edit_component.html.erb +11 -11
- data/app/components/avo/fields/tiptap_field/show_component.html.erb +4 -4
- data/app/components/avo/fields/trix_field/edit_component.html.erb +2 -2
- data/app/components/avo/filters_component.html.erb +8 -16
- data/app/components/avo/index/field_wrapper_component.html.erb +9 -2
- data/app/components/avo/index/field_wrapper_component.rb +0 -16
- data/app/components/avo/index/grid_cover_empty_state_component.html.erb +16 -2
- data/app/components/avo/index/grid_cover_empty_state_component.rb +90 -0
- data/app/components/avo/index/grid_item_component.html.erb +29 -12
- data/app/components/avo/index/grid_item_component.rb +12 -10
- data/app/components/avo/index/resource_controls_component.html.erb +1 -1
- data/app/components/avo/index/resource_controls_component.rb +7 -17
- data/app/components/avo/index/resource_controls_dropdown_component.html.erb +3 -0
- data/app/components/avo/index/resource_controls_dropdown_component.rb +81 -0
- data/app/components/avo/index/table_row_component.html.erb +11 -11
- data/app/components/avo/items/panel_component.html.erb +8 -18
- data/app/components/avo/items/panel_component.rb +0 -20
- data/app/components/avo/items/switcher_component.html.erb +60 -1
- data/app/components/avo/items/switcher_component.rb +10 -5
- data/app/components/avo/items/visible_items_component.html.erb +2 -1
- data/app/components/avo/items/visible_items_component.rb +1 -0
- data/app/components/avo/media_library/item_details_component.html.erb +2 -2
- data/app/components/avo/media_library/list_component.html.erb +24 -19
- data/app/components/avo/media_library/list_component.rb +2 -2
- data/app/components/avo/media_library/list_item_component.html.erb +3 -3
- data/app/components/avo/modal_component.html.erb +52 -20
- data/app/components/avo/modal_component.rb +7 -12
- data/app/components/avo/paginator_component.html.erb +46 -33
- data/app/components/avo/paginator_component.rb +10 -5
- data/app/components/avo/panel_name_component.html.erb +1 -1
- data/app/components/avo/profile_item_component.html.erb +4 -4
- data/app/components/avo/profile_item_component.rb +2 -4
- data/app/components/avo/referrer_params_component.html.erb +1 -1
- data/app/components/avo/resource_component.rb +8 -19
- data/app/components/avo/resource_listing_component.html.erb +22 -0
- data/app/components/avo/resource_listing_component.rb +28 -0
- data/app/components/avo/resource_sidebar_component.html.erb +2 -2
- data/app/components/avo/resource_sidebar_component.rb +0 -4
- data/app/components/avo/row_component.html.erb +1 -1
- data/app/components/avo/row_selector_component.html.erb +2 -4
- data/app/components/avo/row_selector_component.rb +0 -1
- data/app/components/avo/search_overlay_component.html.erb +6 -0
- data/app/components/avo/search_overlay_component.rb +2 -0
- data/app/components/avo/sidebar/base_item_component.rb +9 -9
- data/app/components/avo/sidebar/group_component.html.erb +23 -27
- data/app/components/avo/sidebar/group_component.rb +4 -0
- data/app/components/avo/sidebar/link_component.html.erb +30 -7
- data/app/components/avo/sidebar/link_component.rb +30 -2
- data/app/components/avo/sidebar/section_component.html.erb +31 -11
- data/app/components/avo/sidebar/section_component.rb +1 -3
- data/app/components/avo/sidebar_component.html.erb +35 -36
- data/app/components/avo/sidebar_component.rb +16 -0
- data/app/components/avo/sidebar_profile_component.html.erb +27 -36
- data/app/components/avo/sidebar_profile_component.rb +14 -0
- data/app/components/avo/tab_group_component.html.erb +21 -9
- data/app/components/avo/tab_group_component.rb +54 -15
- data/app/components/avo/turbo_frame_wrapper_component.html.erb +4 -8
- data/app/components/avo/turbo_frame_wrapper_component.rb +9 -0
- data/app/components/avo/u_i/avatar_component.html.erb +11 -0
- data/app/components/avo/u_i/avatar_component.rb +61 -0
- data/app/components/avo/u_i/badge_component.html.erb +9 -0
- data/app/components/avo/u_i/badge_component.rb +35 -0
- data/app/components/avo/u_i/card_component.html.erb +29 -0
- data/app/components/avo/u_i/card_component.rb +65 -0
- data/app/components/avo/u_i/dropdown_component.html.erb +14 -0
- data/app/components/avo/u_i/dropdown_component.rb +26 -0
- data/app/components/avo/u_i/dropdown_menu_component.html.erb +16 -0
- data/app/components/avo/u_i/dropdown_menu_component.rb +8 -0
- data/app/components/avo/u_i/file_upload_input_component.html.erb +26 -0
- data/app/components/avo/u_i/file_upload_input_component.rb +15 -0
- data/app/components/avo/u_i/file_upload_item_component.html.erb +48 -0
- data/app/components/avo/u_i/file_upload_item_component.rb +17 -0
- data/app/components/avo/u_i/icon_button_component.html.erb +7 -0
- data/app/components/avo/u_i/icon_button_component.rb +22 -0
- data/app/components/avo/u_i/panel_component.html.erb +49 -0
- data/app/components/avo/u_i/panel_component.rb +29 -0
- data/app/components/avo/u_i/panel_header_component.html.erb +37 -0
- data/app/components/avo/u_i/panel_header_component.rb +24 -0
- data/app/components/avo/u_i/search_input_component.html.erb +28 -0
- data/app/components/avo/u_i/search_input_component.rb +12 -0
- data/app/components/avo/u_i/tabs/tab_component.html.erb +26 -0
- data/app/components/avo/u_i/tabs/tab_component.rb +25 -0
- data/app/components/avo/u_i/tabs/tabs_component.html.erb +7 -0
- data/app/components/avo/u_i/tabs/tabs_component.rb +13 -0
- data/app/components/avo/view_types/base_view_type_component.rb +26 -0
- data/app/components/avo/view_types/grid_component.html.erb +18 -0
- data/app/components/avo/view_types/grid_component.rb +4 -0
- data/app/components/avo/view_types/map_component.html.erb +17 -0
- data/app/components/avo/view_types/map_component.rb +110 -0
- data/app/components/avo/view_types/table_component.html.erb +63 -0
- data/app/components/avo/{index/resource_table_component.rb → view_types/table_component.rb} +1 -10
- data/app/components/avo/views/resource_edit_component.html.erb +12 -18
- data/app/components/avo/views/resource_edit_component.rb +1 -27
- data/app/components/avo/views/resource_index_component.html.erb +97 -74
- data/app/components/avo/views/resource_index_component.rb +23 -3
- data/app/components/avo/views/resource_show_component.html.erb +4 -2
- data/app/components/avo/views/resource_show_component.rb +1 -4
- data/app/controllers/avo/associations_controller.rb +1 -1
- data/app/controllers/avo/base_application_controller.rb +7 -5
- data/app/controllers/avo/base_controller.rb +139 -40
- data/app/controllers/avo/debug_controller.rb +0 -29
- data/app/controllers/avo/media_library_controller.rb +17 -1
- data/app/controllers/avo/search_controller.rb +5 -0
- data/app/controllers/concerns/avo/initializes_avo.rb +7 -8
- data/app/helpers/avo/application_helper.rb +60 -46
- data/app/helpers/avo/turbo_stream_actions_helper.rb +10 -1
- data/app/helpers/avo/url_helpers.rb +3 -2
- data/app/javascript/{avo.base.js → application.js} +9 -18
- data/app/javascript/js/application.js +40 -0
- data/app/javascript/js/controllers/action_controller.js +4 -4
- data/app/javascript/js/controllers/actions_overflow_controller.js +21 -6
- data/app/javascript/js/controllers/color_scheme_switcher_controller.js +226 -0
- data/app/javascript/js/controllers/dropdown_menu_controller.js +42 -0
- data/app/javascript/js/controllers/fields/code_field_controller.js +20 -3
- data/app/javascript/js/controllers/fields/easy_mde_controller.js +23 -1
- data/app/javascript/js/controllers/fields/key_value_controller.js +43 -39
- data/app/javascript/js/controllers/fields/panel_refresh_controller.js +4 -0
- data/app/javascript/js/controllers/fields/tags_field_controller.js +2 -2
- data/app/javascript/js/controllers/fields/tags_field_helpers.js +4 -6
- data/app/javascript/js/controllers/grid_cover_empty_state_controller.js +42 -0
- data/app/javascript/js/controllers/item_selector_controller.js +0 -2
- data/app/javascript/js/controllers/loading_button_controller.js +1 -5
- data/app/javascript/js/controllers/map_dark_mode_controller.js +131 -0
- data/app/javascript/js/controllers/menu_controller.js +38 -16
- data/app/javascript/js/controllers/modal_controller.js +16 -0
- data/app/javascript/js/controllers/modal_size_controller.js +83 -0
- data/app/javascript/js/controllers/nested_form_controller.js +2 -2
- data/app/javascript/js/controllers/password_visibility_controller.js +13 -0
- data/app/javascript/js/controllers/preview_controller.js +2 -2
- data/app/javascript/js/controllers/resource_search_controller.js +123 -0
- data/app/javascript/js/controllers/search_controller.js +10 -29
- data/app/javascript/js/controllers/sidebar_controller.js +29 -9
- data/app/javascript/js/controllers/table_row_controller.js +28 -0
- data/app/javascript/js/controllers/tippy_controller.js +1 -1
- data/app/javascript/js/controllers/toggle_controller.js +40 -5
- data/app/javascript/js/controllers.js +14 -2
- data/app/javascript/js/custom-stream-actions.js +10 -8
- data/app/views/avo/actions/show.html.erb +14 -10
- data/app/views/avo/base/_boolean_filter.html.erb +1 -1
- data/app/views/avo/base/_date_time_filter.html.erb +3 -3
- data/app/views/avo/base/_multiple_select_filter.html.erb +1 -1
- data/app/views/avo/base/_new_via_belongs_to.html.erb +2 -3
- data/app/views/avo/base/_text_filter.html.erb +1 -1
- data/app/views/avo/base/preview.html.erb +5 -4
- data/app/views/avo/debug/status.html.erb +5 -92
- data/app/views/avo/debug/status.text.erb +0 -2
- data/app/views/avo/home/_actions.html.erb +1 -1
- data/app/views/avo/home/_dashboards.html.erb +1 -1
- data/app/views/avo/home/_filters.html.erb +1 -1
- data/app/views/avo/home/_resources.html.erb +2 -2
- data/app/views/avo/home/failed_to_load.html.erb +2 -2
- data/app/views/avo/home/index.html.erb +25 -25
- data/app/views/avo/media_library/_form.html.erb +43 -28
- data/app/views/avo/media_library/show.html.erb +7 -3
- data/app/views/avo/modal/_size_selector.html.erb +46 -0
- data/app/views/avo/partials/_alerts.html.erb +1 -1
- data/app/views/avo/partials/_color_scheme_switcher.html.erb +106 -0
- data/app/views/avo/partials/_color_theme_override.html.erb +49 -0
- data/app/views/avo/partials/_confirm_dialog.html.erb +19 -17
- data/app/views/avo/partials/_custom_tools_alert.html.erb +6 -6
- data/app/views/avo/partials/_footer.html.erb +1 -1
- data/app/views/avo/partials/_header.html.erb +1 -1
- data/app/views/avo/partials/_javascript.html.erb +0 -2
- data/app/views/avo/partials/_navbar.html.erb +53 -8
- data/app/views/avo/partials/_sortable_component.html.erb +1 -1
- data/app/views/avo/partials/_table_header.html.erb +28 -19
- data/app/views/avo/partials/_view_toggle_button.html.erb +6 -29
- data/app/views/avo/partials/distribution_chart.html.erb +2 -2
- data/app/views/avo/private/_links_and_buttons.html.erb +12 -8
- data/app/views/avo/private/design.html.erb +8 -4
- data/app/views/avo/sidebar/_license_warning.html.erb +3 -3
- data/app/views/layouts/avo/application.html.erb +39 -17
- data/app/views/layouts/avo/modal.html.erb +7 -0
- data/avo.gemspec +3 -4
- data/config/i18n-tasks.yml +1 -1
- data/config/importmap.rb +1 -0
- data/config/initializers/pagy.rb +5 -25
- data/config/routes/dynamic_routes.rb +4 -0
- data/config/routes.rb +6 -7
- data/db/factories.rb +14 -0
- data/lib/avo/asset_manager.rb +2 -0
- data/lib/avo/avatar.rb +7 -0
- data/lib/avo/base_action.rb +16 -4
- data/lib/avo/concerns/breadcrumbs.rb +7 -66
- data/lib/avo/concerns/form_builder.rb +41 -0
- data/lib/avo/concerns/{has_profile_photo.rb → has_avatar.rb} +8 -4
- data/lib/avo/concerns/{has_cover_photo.rb → has_cover.rb} +4 -4
- data/lib/avo/concerns/has_description.rb +9 -0
- data/lib/avo/concerns/has_item_type.rb +6 -2
- data/lib/avo/concerns/has_items.rb +43 -58
- data/lib/avo/concerns/pagination.rb +29 -19
- data/lib/avo/concerns/row_controls_configuration.rb +22 -15
- data/lib/avo/configuration/branding.rb +7 -7
- data/lib/avo/configuration.rb +92 -45
- data/lib/avo/{cover_photo.rb → cover.rb} +2 -2
- data/lib/avo/current.rb +0 -11
- data/lib/avo/discreet_information.rb +52 -29
- data/lib/avo/dsl/field_parser.rb +1 -1
- data/lib/avo/engine.rb +41 -8
- data/lib/avo/error_manager.rb +1 -1
- data/lib/avo/fields/avatar_field.rb +19 -0
- data/lib/avo/fields/badge_field.rb +23 -3
- data/lib/avo/fields/base_field.rb +46 -1
- data/lib/avo/fields/concerns/dom_id.rb +17 -0
- data/lib/avo/fields/concerns/file_authorization.rb +4 -0
- data/lib/avo/fields/concerns/has_html_attributes.rb +1 -1
- data/lib/avo/fields/concerns/is_searchable.rb +2 -5
- data/lib/avo/fields/concerns/nested.rb +1 -1
- data/lib/avo/fields/files_field.rb +2 -2
- data/lib/avo/fields/frame_base_field.rb +2 -2
- data/lib/avo/fields/id_field.rb +5 -1
- data/lib/avo/fields/progress_bar_field.rb +1 -1
- data/lib/avo/fields/text_field.rb +1 -1
- data/lib/avo/photo_object.rb +12 -1
- data/lib/avo/plugin_manager.rb +4 -0
- data/lib/avo/resources/base.rb +33 -21
- data/lib/avo/resources/controls/actions_list.rb +3 -3
- data/lib/avo/resources/controls/base_control.rb +1 -1
- data/lib/avo/resources/items/card.rb +16 -0
- data/lib/avo/resources/items/header.rb +11 -0
- data/lib/avo/resources/items/holder.rb +18 -23
- data/lib/avo/resources/items/item_group.rb +5 -7
- data/lib/avo/resources/items/sidebar.rb +5 -9
- data/lib/avo/resources/items/tab.rb +8 -8
- data/lib/avo/resources/items/tab_group.rb +8 -10
- data/lib/avo/resources/resource_manager.rb +2 -1
- data/lib/avo/services/hq_reporter.rb +102 -0
- data/lib/avo/services/telemetry_service.rb +0 -1
- data/lib/avo/test_helpers.rb +36 -22
- data/lib/avo/u_i_instance.rb +60 -0
- data/lib/avo/version.rb +1 -1
- data/lib/avo/view_inquirer.rb +6 -1
- data/lib/avo/view_types/view_type_manager.rb +70 -0
- data/lib/avo.rb +30 -45
- data/lib/generators/avo/action_generator.rb +1 -1
- data/lib/generators/avo/resource_generator.rb +43 -0
- data/lib/generators/avo/resource_tool_generator.rb +1 -1
- data/lib/generators/avo/tailwindcss/install_generator.rb +0 -6
- data/lib/generators/avo/templates/cards/partial_card_partial.tt +1 -1
- data/lib/generators/avo/templates/initializer/avo.tt +7 -9
- data/lib/generators/avo/templates/locales/avo.ar.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.de.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.en.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.es.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.fr.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.it.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.ja.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.nb.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.nl.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.nn.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.pl.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.pt-BR.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.pt.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.ro.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.ru.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.tr.yml +25 -0
- data/lib/generators/avo/templates/locales/{avo.uk.yml → avo.ua.yml} +26 -1
- data/lib/generators/avo/templates/locales/avo.zh-TW.yml +25 -0
- data/lib/generators/avo/templates/locales/avo.zh.yml +25 -0
- data/lib/generators/avo/templates/resource/resource.tt +10 -1
- data/lib/generators/avo/templates/resource_tools/partial.tt +20 -22
- data/lib/generators/avo/templates/tailwindcss/avo.tailwind.css +1 -3
- data/lib/generators/avo/templates/tailwindcss/tailwind.config.js +0 -7
- data/lib/generators/avo/templates/tool/view.tt +14 -16
- data/lib/generators/avo/tool_generator.rb +3 -3
- data/lib/generators/avo/version_generator.rb +1 -1
- data/lib/tasks/avo_tasks.rake +29 -25
- metadata +145 -97
- data/app/assets/stylesheets/avo.base.css +0 -130
- data/app/assets/stylesheets/css/breadcrumbs.css +0 -16
- data/app/assets/stylesheets/css/buttons.css +0 -19
- data/app/assets/stylesheets/css/tailwindcss/base.css +0 -1
- data/app/assets/stylesheets/css/tailwindcss/components.css +0 -1
- data/app/assets/stylesheets/css/tailwindcss/utilities.css +0 -1
- data/app/assets/svgs/avo/arrow-down.svg +0 -3
- data/app/assets/svgs/avo/arrow-up.svg +0 -3
- data/app/assets/svgs/avo/detach.svg +0 -8
- data/app/assets/svgs/avo/download-solid-reversed.svg +0 -3
- data/app/assets/svgs/avo/download-solid.svg +0 -3
- data/app/assets/svgs/avo/edit.svg +0 -5
- data/app/assets/svgs/avo/editor-bold.svg +0 -1
- data/app/assets/svgs/avo/editor-italic.svg +0 -1
- data/app/assets/svgs/avo/editor-link.svg +0 -1
- data/app/assets/svgs/avo/editor-list.svg +0 -1
- data/app/assets/svgs/avo/editor-strike.svg +0 -1
- data/app/assets/svgs/avo/editor-underline.svg +0 -1
- data/app/assets/svgs/avo/eye.svg +0 -1
- data/app/assets/svgs/avo/trash-sm.svg +0 -3
- data/app/assets/svgs/avo/trash.svg +0 -7
- data/app/components/avo/cover_photo_component.html.erb +0 -3
- data/app/components/avo/cover_photo_component.rb +0 -19
- data/app/components/avo/fields/common/badge_viewer_component.html.erb +0 -1
- data/app/components/avo/fields/common/badge_viewer_component.rb +0 -33
- data/app/components/avo/index/resource_grid_component.html.erb +0 -23
- data/app/components/avo/index/resource_grid_component.rb +0 -10
- data/app/components/avo/index/resource_map_component.html.erb +0 -16
- data/app/components/avo/index/resource_map_component.rb +0 -114
- data/app/components/avo/index/resource_table_component.html.erb +0 -52
- data/app/components/avo/panel_component.html.erb +0 -63
- data/app/components/avo/panel_component.rb +0 -43
- data/app/components/avo/panel_header_component.html.erb +0 -42
- data/app/components/avo/panel_header_component.rb +0 -31
- data/app/components/avo/profile_photo_component.html.erb +0 -6
- data/app/components/avo/profile_photo_component.rb +0 -9
- data/app/components/avo/sidebar/heading_component.html.erb +0 -21
- data/app/components/avo/sidebar/heading_component.rb +0 -9
- data/app/components/avo/tab_switcher_component.html.erb +0 -20
- data/app/components/avo/tab_switcher_component.rb +0 -45
- data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
- data/app/views/avo/debug/report.html.erb +0 -37
- data/app/views/avo/partials/_panel_breadcrumbs.html.erb +0 -3
- data/app/views/avo/partials/_resource_search.html.erb +0 -16
- data/lib/avo/licensing/community_license.rb +0 -6
- data/lib/avo/licensing/h_q.rb +0 -202
- data/lib/avo/licensing/license.rb +0 -76
- data/lib/avo/licensing/license_manager.rb +0 -24
- data/lib/avo/licensing/nil_license.rb +0 -14
- data/lib/avo/licensing/pro_license.rb +0 -20
- data/lib/avo/licensing/request.rb +0 -20
- data/lib/avo/profile_photo.rb +0 -7
- data/lib/avo/services/debug_service.rb +0 -107
- data/public/avo-assets/placeholder.svg +0 -1
- data/tailwind.preset.js +0 -171
- /data/{public/avo-assets → app/assets/images/avo}/favicon.ico +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.eot +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.svg +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.ttf +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.woff +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-500.woff2 +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.eot +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.svg +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.ttf +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.woff +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-600.woff2 +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.eot +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.svg +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.ttf +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.woff +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-700.woff2 +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.eot +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.svg +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.ttf +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.woff +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/fonts/inter-v7-latin-regular.woff2 +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/logo-on-white.png +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/logo.png +0 -0
- /data/{public/avo-assets → app/assets/images/avo}/logomark.png +0 -0
|
@@ -1,33 +1,31 @@
|
|
|
1
|
-
<thead
|
|
2
|
-
|
|
3
|
-
class="bg-white border-b border-gray-200 pb-1">
|
|
4
|
-
<% if @resource.record_selector %>
|
|
1
|
+
<thead data-component-name="avo/partials/table_header" class="table-header-group">
|
|
2
|
+
<% if resource.record_selector %>
|
|
5
3
|
<th class="rounded-lg" data-control="item-select-th">
|
|
6
4
|
<%= content_tag :label, name: t("avo.select_all") do %>
|
|
7
5
|
<%= content_tag :span, t("avo.select_all"), class: 'sr-only' %>
|
|
6
|
+
|
|
8
7
|
<%= tag :input,
|
|
9
8
|
type: "checkbox",
|
|
10
9
|
name: t("avo.select_all"),
|
|
11
10
|
title: t("avo.select_all"),
|
|
12
11
|
autocomplete: :off,
|
|
13
|
-
class: "mx-3 rounded w-4 h-4 checked:bg-primary-400 focus:checked:!bg-primary-400",
|
|
14
12
|
data: {
|
|
15
13
|
action: "input->item-select-all#toggle",
|
|
16
14
|
item_select_all_target: "checkbox",
|
|
17
15
|
tippy: "tooltip",
|
|
18
|
-
}
|
|
19
|
-
%>
|
|
16
|
+
} %>
|
|
20
17
|
<% end %>
|
|
21
18
|
</th>
|
|
22
19
|
<% end %>
|
|
23
|
-
|
|
20
|
+
|
|
21
|
+
<% if resource.render_row_controls_on_the_left? %>
|
|
24
22
|
<th class="max-w-24" data-control="resource-controls-th">
|
|
25
23
|
<!-- Item controls cell -->
|
|
26
24
|
</th>
|
|
27
25
|
<% end %>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
|
|
27
|
+
<% fields.each_with_index do |field, index| %>
|
|
28
|
+
<% first_option = Avo.configuration.first_sorting_option.to_s
|
|
31
29
|
|
|
32
30
|
if params[:sort_by] == field.id.to_s
|
|
33
31
|
second_option = first_option == "desc" ? "asc" : "desc"
|
|
@@ -54,10 +52,10 @@
|
|
|
54
52
|
sort_by = field.id
|
|
55
53
|
sort_direction = first_option
|
|
56
54
|
end
|
|
57
|
-
text_classes = "text-
|
|
58
|
-
|
|
55
|
+
text_classes = "text-content-secondary tracking-tight leading-tight text-xs font-semibold" %>
|
|
56
|
+
|
|
59
57
|
<%= content_tag :th,
|
|
60
|
-
class: "relative text-
|
|
58
|
+
class: class_names("relative text-start px-2 py-2 whitespace-nowrap rounded-s", field.table_header_class),
|
|
61
59
|
data: {
|
|
62
60
|
control: "resource-field-th",
|
|
63
61
|
controller: "toggle",
|
|
@@ -66,11 +64,12 @@
|
|
|
66
64
|
} do %>
|
|
67
65
|
<%= content_tag :div,
|
|
68
66
|
class: "relative flex items-center justify-between w-full" do %>
|
|
69
|
-
<% if field.sortable &&
|
|
67
|
+
<% if field.sortable && resource.sorting_supported? %>
|
|
70
68
|
<%= link_to params.permit!.merge(sort_by: sort_by, sort_direction: sort_direction),
|
|
71
69
|
class: class_names("flex-1 flex justify-between", text_classes),
|
|
72
70
|
'data-turbo-frame': params[:turbo_frame] do %>
|
|
73
71
|
<%= field.table_header_label %>
|
|
72
|
+
|
|
74
73
|
<%= render partial: 'avo/partials/sortable_component', locals: {
|
|
75
74
|
field: field,
|
|
76
75
|
sort_tippy_content: I18n.t("avo.sort_#{sort_direction || "reset"}")
|
|
@@ -81,9 +80,14 @@
|
|
|
81
80
|
<%= field.table_header_label %>
|
|
82
81
|
<% end %>
|
|
83
82
|
<% end %>
|
|
83
|
+
|
|
84
84
|
<% if field.summarizable %>
|
|
85
|
-
<div
|
|
86
|
-
|
|
85
|
+
<div
|
|
86
|
+
id="summary-header-<%= field.id %>"
|
|
87
|
+
class="cursor-pointer <%= text_classes %>"
|
|
88
|
+
data-action="click->toggle#togglePanel"
|
|
89
|
+
>
|
|
90
|
+
<%= svg 'heroicons/solid/chart-bar', class: 'h-3 ms-1' %>
|
|
87
91
|
</div>
|
|
88
92
|
<turbo-frame
|
|
89
93
|
id="summary-frame-<%= field.id %>"
|
|
@@ -97,8 +101,12 @@
|
|
|
97
101
|
association_name: @field&.attribute_id
|
|
98
102
|
}.compact
|
|
99
103
|
) %>"
|
|
100
|
-
class="
|
|
104
|
+
class="
|
|
105
|
+
absolute inset-auto top-0 z-40 mt-6 w-full overflow-hidden rounded-sm border border-gray-50
|
|
106
|
+
bg-white p-4 shadow-modal sm:w-[400px]
|
|
107
|
+
"
|
|
101
108
|
data-toggle-target="panel"
|
|
109
|
+
hidden
|
|
102
110
|
>
|
|
103
111
|
<%= render Avo::LoadingComponent.new %>
|
|
104
112
|
</turbo-frame>
|
|
@@ -106,7 +114,8 @@
|
|
|
106
114
|
<% end %>
|
|
107
115
|
<% end %>
|
|
108
116
|
<% end %>
|
|
109
|
-
|
|
117
|
+
|
|
118
|
+
<% if resource.render_row_controls_on_the_right? %>
|
|
110
119
|
<th class="w-px max-w-24" data-control="resource-controls-th">
|
|
111
120
|
<!-- Item controls cell -->
|
|
112
121
|
</th>
|
|
@@ -1,43 +1,20 @@
|
|
|
1
1
|
<% if available_view_types.count > 1 %>
|
|
2
|
-
<%
|
|
3
|
-
info = {
|
|
4
|
-
table: {
|
|
5
|
-
new_view_type: 'table',
|
|
6
|
-
new_icon: "avo/table-view-type",
|
|
7
|
-
translation_key: 'avo.table_view',
|
|
8
|
-
},
|
|
9
|
-
grid: {
|
|
10
|
-
new_view_type: 'grid',
|
|
11
|
-
new_icon: "avo/grid-view-type",
|
|
12
|
-
translation_key: 'avo.grid_view',
|
|
13
|
-
},
|
|
14
|
-
list: {
|
|
15
|
-
new_view_type: 'list',
|
|
16
|
-
new_icon: 'queue-list',
|
|
17
|
-
},
|
|
18
|
-
map: {
|
|
19
|
-
new_view_type: 'map',
|
|
20
|
-
new_icon: "avo/map-view-type",
|
|
21
|
-
translation_key: 'avo.map_view',
|
|
22
|
-
},
|
|
23
|
-
}
|
|
24
|
-
%>
|
|
25
2
|
<div class="flex">
|
|
26
3
|
<div class="button-group">
|
|
27
4
|
<% available_view_types.each do |type| %>
|
|
5
|
+
<% view_info = Avo.view_type_manager.find(type) %>
|
|
28
6
|
<% is_active_view = view_type.to_s == type.to_s %>
|
|
29
7
|
|
|
30
8
|
<%= a_link url_for(params.permit!.merge(view_type: type)).to_s,
|
|
31
|
-
icon:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
size: :sm,
|
|
35
|
-
class: is_active_view ? "z-20" : "bg-gray-100 border-gray-300",
|
|
9
|
+
icon: is_active_view ? view_info&.[](:active_icon) : view_info&.[](:icon),
|
|
10
|
+
style: :primary,
|
|
11
|
+
class: is_active_view ? "button--active" : "",
|
|
36
12
|
title: t('avo.switch_to_view', view_type: type),
|
|
37
13
|
data: {
|
|
38
14
|
tippy: 'tooltip',
|
|
39
15
|
'turbo-frame': turbo_frame,
|
|
40
|
-
control: "view-type-toggle-#{type}"
|
|
16
|
+
control: "view-type-toggle-#{type}",
|
|
17
|
+
is_active: is_active_view
|
|
41
18
|
}
|
|
42
19
|
%>
|
|
43
20
|
<% end %>
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
<ul class="col-span-5" id="<%= @field_id %>-summary">
|
|
4
4
|
<% @values_summary.each_with_index do |(key, value), index| %>
|
|
5
5
|
<li class="grid grid-cols-6 gap-3 items-center font-semibold text-sm text-gray-600 uppercase">
|
|
6
|
-
<div class="flex items-center space-x-1 col-span-5 truncate">
|
|
6
|
+
<div class="flex items-center space-x-1 rtl:space-x-reverse col-span-5 truncate">
|
|
7
7
|
<span class="<%= "inline-block w-[0.75rem] h-[0.75rem] rounded-full bg-[#{chart_color(index)}]" %>"></span>
|
|
8
8
|
<span>
|
|
9
9
|
<%= key %>
|
|
10
10
|
</span>
|
|
11
11
|
</div>
|
|
12
|
-
<div class="col-span-1 text-
|
|
12
|
+
<div class="col-span-1 text-end">
|
|
13
13
|
<%= value %>
|
|
14
14
|
</div>
|
|
15
15
|
</li>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<%
|
|
2
|
-
entities = [:
|
|
3
|
-
sizes = [:
|
|
2
|
+
entities = [:link, :button]
|
|
3
|
+
sizes = [:lg, :md, :sm]
|
|
4
4
|
styles = [:primary, :outline, :text]
|
|
5
|
-
colors = [:primary, :blue, :gray, :red, :orange, :green]
|
|
5
|
+
colors = [nil, :primary, :accent, :blue, :gray, :red, :orange, :green, :teal, :cyan, :sky, :indigo, :violet, :purple, :fuchsia, :pink, :rose]
|
|
6
6
|
states = [:regular, :hover, :disabled, :active]
|
|
7
7
|
%>
|
|
8
8
|
<div class="px-6 space-y-4">
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
<div class="flex flex-col space-y-1">
|
|
15
15
|
<% styles.each do |style| %>
|
|
16
16
|
<% colors.each do |color| %>
|
|
17
|
-
|
|
18
|
-
<div class="flex space-x-1">
|
|
17
|
+
<%# next if style == :primary && color != :primary %>
|
|
18
|
+
<div class="flex space-x-1 rtl:space-x-reverse">
|
|
19
19
|
<% states.each do |state| %>
|
|
20
20
|
<%
|
|
21
21
|
extra_classes = ""
|
|
22
22
|
case state
|
|
23
23
|
when :active
|
|
24
|
-
extra_classes += " active"
|
|
24
|
+
extra_classes += " button--active button--hover"
|
|
25
25
|
when :hover
|
|
26
|
-
extra_classes += " hover"
|
|
26
|
+
extra_classes += " button--hover"
|
|
27
27
|
end
|
|
28
28
|
%>
|
|
29
29
|
<%
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
%>
|
|
33
33
|
<% if entity == :link %>
|
|
34
34
|
<div>
|
|
35
|
-
<%= send a_button_or_link, '
|
|
35
|
+
<%= send a_button_or_link, 'javascript:void(0);', **args do %>
|
|
36
36
|
<%= entity.to_s.humanize.capitalize %> <%= state %>
|
|
37
37
|
<% end %>
|
|
38
38
|
</div>
|
|
@@ -47,6 +47,10 @@
|
|
|
47
47
|
</div>
|
|
48
48
|
<% end %>
|
|
49
49
|
<% end %>
|
|
50
|
+
|
|
51
|
+
<div class="flex self-center ms-2">
|
|
52
|
+
<%= color %>
|
|
53
|
+
</div>
|
|
50
54
|
</div>
|
|
51
55
|
<% end %>
|
|
52
56
|
<% end %>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<div class="flex flex-col">
|
|
2
|
-
<%= render
|
|
3
|
-
<%
|
|
2
|
+
<%= render ui.panel(title: 'Welcome to Avo', description: 'This page is visible only in development. It will be hidden in other environments.') do |panel| %>
|
|
3
|
+
<% panel.with_controls do %>
|
|
4
4
|
<%= a_link('/admin', icon: "heroicons/outline/arrow-left", color: :green, style: :primary, is_link: true) do %>
|
|
5
5
|
Primary
|
|
6
6
|
<% end %>
|
|
@@ -16,11 +16,15 @@
|
|
|
16
16
|
<%= a_link('/admin', icon: "heroicons/outline/arrow-left", style: :text, color: :orange, is_link: true) do %>
|
|
17
17
|
Text
|
|
18
18
|
<% end %>
|
|
19
|
+
|
|
20
|
+
<%= a_link('/admin', color: :slate, style: :primary, is_link: true) do %>
|
|
21
|
+
Create entry
|
|
22
|
+
<% end %>
|
|
19
23
|
<% end %>
|
|
20
24
|
|
|
21
|
-
<%
|
|
25
|
+
<% panel.with_body do %>
|
|
22
26
|
<div class="flex flex-col justify-between py-6 min-h-24">
|
|
23
|
-
<%= render 'links_and_buttons' %>
|
|
27
|
+
<%= render partial: 'links_and_buttons' %>
|
|
24
28
|
</div>
|
|
25
29
|
<% end %>
|
|
26
30
|
<% end %>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<div class="w-10/12
|
|
2
|
-
<a href="https://avohq.io/pricing" target="_blank" class="rounded bg-green-700 text-white py-2 px-4 text-sm block group-hover:pt-4">
|
|
3
|
-
<%= svg "avo/exclamation", class: 'h-6 inline
|
|
1
|
+
<div class="w-10/12 ms-1/12 inset-auto bottom-0 z-50 my-4 opacity-50 hover:opacity-100 transition-opacity duration-150 group">
|
|
2
|
+
<a href="https://avohq.io/pricing" target="_blank" class="rounded-sm bg-green-700 text-white py-2 px-4 text-sm block group-hover:pt-4">
|
|
3
|
+
<%= svg "avo/exclamation", class: 'h-6 inline me-1 text-bold' %> <%= title %>
|
|
4
4
|
<div class="group-hover:block hidden py-2">
|
|
5
5
|
<%= message %> <%= svg "avo/arrow-circle-right", class: "h-6 inline float-right" %>
|
|
6
6
|
</div>
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
+
|
|
2
3
|
<!-- ✨ Built with Avo • https://www.avohq.io/ -->
|
|
3
|
-
<html lang="<%= I18n.
|
|
4
|
+
<html lang="<%= I18n.locale %>" dir="<%= text_direction %>">
|
|
4
5
|
<head>
|
|
5
6
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
7
|
+
|
|
6
8
|
<% if !Avo.configuration.turbo[:instant_click] %>
|
|
7
9
|
<meta name="turbo-prefetch" content="false">
|
|
8
10
|
<% end %>
|
|
11
|
+
|
|
9
12
|
<%= display_meta_tags site: Avo.configuration.app_name, reverse: true, separator: "—" %>
|
|
10
13
|
<%= csrf_meta_tags %>
|
|
11
14
|
<%= csp_meta_tag %>
|
|
15
|
+
<%= favicon_link_tag "avo/favicon.ico" %>
|
|
12
16
|
<%= render partial: "avo/partials/javascript" %>
|
|
13
17
|
<%= render partial: "avo/partials/branding" %>
|
|
14
18
|
<%= render partial: "avo/partials/pre_head" %>
|
|
15
19
|
<%= render Avo::AssetManager::StylesheetComponent.new asset_manager: Avo.asset_manager %>
|
|
16
20
|
<%= stylesheet_link_tag @stylesheet_assets_path, "data-turbo-track": "reload", as: "style" %>
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
<%= javascript_include_tag path, "data-turbo-track": "reload", defer: true %>
|
|
22
|
+
<%= javascript_include_tag "avo/application", "data-turbo-track": "reload", defer: true %>
|
|
20
23
|
|
|
21
24
|
<% if !Avo::PACKED && defined?(Hotwire::Livereload) %>
|
|
22
25
|
<%= javascript_include_tag "hotwire-livereload", defer: true %>
|
|
@@ -24,35 +27,54 @@
|
|
|
24
27
|
|
|
25
28
|
<%= render Avo::AssetManager::JavascriptComponent.new asset_manager: Avo.asset_manager %>
|
|
26
29
|
<%= render partial: "avo/partials/head" %>
|
|
30
|
+
<%= render partial: 'avo/partials/color_theme_override' %>
|
|
27
31
|
<%= content_for :head %>
|
|
28
32
|
</head>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
|
|
34
|
+
<body class="<%= class_names("floating-controls bg-background", *body_classes, "all-fields-stacked": Avo.configuration.use_stacked_fields) %>">
|
|
35
|
+
<a href="#main-content" class="skip-to-content"><%= t("avo.skip_to_content") %></a>
|
|
36
|
+
|
|
37
|
+
<div
|
|
38
|
+
class="relative flex min-h-dvh w-full flex-1"
|
|
39
|
+
data-controller="sidebar"
|
|
40
|
+
data-sidebar-open-value="<%= @sidebar_open %>"
|
|
41
|
+
>
|
|
42
|
+
<div class="flex max-w-full flex-1 flex-col">
|
|
32
43
|
<%= render partial: "avo/partials/navbar", locals: { resource: @resource } %>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
|
|
45
|
+
<div data-sidebar-target="mainArea" class="main relative flex flex-1 <%= "sidebar-open" if @sidebar_open %>">
|
|
46
|
+
<div class="hidden lg:flex"><%= render Avo::SidebarComponent.new sidebar_open: @sidebar_open %></div>
|
|
47
|
+
|
|
37
48
|
<div class="flex lg:hidden">
|
|
38
|
-
<%= render Avo::SidebarComponent.new sidebar_open:
|
|
49
|
+
<%= render Avo::SidebarComponent.new sidebar_open: @sidebar_open, for_mobile: true %>
|
|
39
50
|
</div>
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
|
|
52
|
+
<main id="main-content" class="main-content-area" tabindex="-1">
|
|
53
|
+
<div class="mb-4">
|
|
54
|
+
<%= render Avo::BreadcrumbsComponent.new(items: avo_breadcrumbs) %>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<%= render partial: "avo/partials/custom_tools_alert" %>
|
|
58
|
+
|
|
59
|
+
<div class="scrollable-wrapper">
|
|
60
|
+
<div class="avo-container <%= container_classes %>">
|
|
44
61
|
<%= yield.force_encoding("UTF-8") %>
|
|
45
|
-
|
|
62
|
+
|
|
63
|
+
<div class="mt-8">
|
|
64
|
+
<%= render partial: "avo/partials/footer" %>
|
|
65
|
+
</div>
|
|
46
66
|
</div>
|
|
47
67
|
</div>
|
|
48
|
-
</
|
|
68
|
+
</main>
|
|
49
69
|
</div>
|
|
50
70
|
</div>
|
|
51
71
|
</div>
|
|
72
|
+
|
|
52
73
|
<%= turbo_frame_tag Avo::MODAL_FRAME_ID %>
|
|
53
74
|
<%= render partial: "avo/partials/alerts" %>
|
|
54
75
|
<%= render partial: "avo/partials/scripts" %>
|
|
55
76
|
<%= render partial: "avo/partials/confirm_dialog" %>
|
|
56
77
|
</body>
|
|
57
78
|
</html>
|
|
79
|
+
|
|
58
80
|
<!-- ✨ Built with Avo • https://www.avohq.io/ -->
|
data/avo.gemspec
CHANGED
|
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
|
8
8
|
spec.name = "avo"
|
|
9
9
|
spec.version = Avo::VERSION
|
|
10
10
|
spec.authors = ["Adrian Marin", "Mihai Marin", "Paul Bob"]
|
|
11
|
-
spec.email = ["
|
|
11
|
+
spec.email = ["hi@avohq.io"]
|
|
12
12
|
spec.homepage = "https://avohq.io"
|
|
13
13
|
spec.summary = "Admin panel framework and Content Management System for Ruby on Rails."
|
|
14
14
|
spec.description = "Avo is a very custom Content Management System for Ruby on Rails that saves engineers and teams months of development time by building user interfaces and logic using configuration rather than traditional coding; When configuration is not enough, you can fallback to familiar Ruby on Rails code."
|
|
@@ -32,12 +32,11 @@ Gem::Specification.new do |spec|
|
|
|
32
32
|
spec.post_install_message = "Thank you for using Avo 💪 Docs are available at https://docs.avohq.io"
|
|
33
33
|
|
|
34
34
|
spec.files = Dir["{bin,app,config,db,lib,public}/**/*", "Rakefile", "README.md", "avo.gemspec", "Gemfile", "Gemfile.lock", "tailwind.preset.js", "tailwind.custom.js"]
|
|
35
|
-
spec.files.reject! { |file_name| %w[application.js application.js.map app/assets/builds/avo.custom.js avo.custom.js.map].any? { |rejected_file| file_name.include? rejected_file } }
|
|
36
35
|
|
|
37
36
|
spec.add_dependency "activerecord", ">= 6.1"
|
|
38
37
|
spec.add_dependency "activesupport", ">= 6.1"
|
|
39
38
|
spec.add_dependency "actionview", ">= 6.1"
|
|
40
|
-
spec.add_dependency "pagy", ">=
|
|
39
|
+
spec.add_dependency "pagy", ">= 43.0"
|
|
41
40
|
spec.add_dependency "zeitwerk", ">= 2.6.12"
|
|
42
41
|
spec.add_dependency "active_link_to"
|
|
43
42
|
spec.add_dependency "view_component", ">= 3.7.0"
|
|
@@ -46,6 +45,6 @@ Gem::Specification.new do |spec|
|
|
|
46
45
|
spec.add_dependency "addressable"
|
|
47
46
|
spec.add_dependency "meta-tags"
|
|
48
47
|
spec.add_dependency "docile"
|
|
49
|
-
spec.add_dependency "prop_initializer", ">= 0.
|
|
48
|
+
spec.add_dependency "prop_initializer", ">= 0.2.0"
|
|
50
49
|
spec.add_dependency "avo-icons", ">= 0.1.1"
|
|
51
50
|
end
|
data/config/i18n-tasks.yml
CHANGED
|
@@ -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, de, en, es, fr, it, ja, nb, nl, nn, pl, pt-BR, pt, ro, ru, tr,
|
|
6
|
+
locales: [ar, de, en, es, fr, it, ja, nb, nl, nn, pl, pt-BR, pt, ro, ru, tr, ua, zh, zh-TW]
|
|
7
7
|
## Reporting locale, default: en. Available: en, ru.
|
|
8
8
|
# internal_locale: en
|
|
9
9
|
|
data/config/importmap.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pin "avo/application"
|
data/config/initializers/pagy.rb
CHANGED
|
@@ -1,26 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
if defined?(Pagy::I18n)
|
|
2
|
+
if Pagy::I18n.respond_to?(:pathnames)
|
|
3
|
+
# Load custom dictionaries that are not bundled by Pagy.
|
|
4
|
+
Pagy::I18n.pathnames << Avo::Engine.root.join("lib", "generators", "avo", "templates", "locales", "pagy")
|
|
5
|
+
end
|
|
6
6
|
end
|
|
7
|
-
|
|
8
|
-
# For locales without native pagy i18n support
|
|
9
|
-
def pagy_locale_path(file_name)
|
|
10
|
-
Avo::Engine.root.join("lib", "generators", "avo", "templates", "locales", "pagy", file_name)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
extra_locales = [
|
|
14
|
-
{locale: "en"},
|
|
15
|
-
{locale: "es"},
|
|
16
|
-
{locale: "fr"},
|
|
17
|
-
{locale: "ja"},
|
|
18
|
-
{locale: "nb"},
|
|
19
|
-
{locale: "pt-BR"},
|
|
20
|
-
{locale: "pt"},
|
|
21
|
-
{locale: "tr"},
|
|
22
|
-
{locale: "nn", filepath: pagy_locale_path("nn.yml")},
|
|
23
|
-
{locale: "ro", filepath: pagy_locale_path("ro.yml")}
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
Pagy::I18n.send(:build, *extra_locales)
|
data/config/routes.rb
CHANGED
|
@@ -10,7 +10,7 @@ Avo::Engine.routes.draw do
|
|
|
10
10
|
post "/rails/active_storage/direct_uploads", to: "/active_storage/direct_uploads#create"
|
|
11
11
|
|
|
12
12
|
scope "avo_api", as: "avo_api" do
|
|
13
|
-
|
|
13
|
+
# Only used for searchable fields
|
|
14
14
|
get "/:resource_name/search", to: "search#show"
|
|
15
15
|
post "/resources/:resource_name/:id/attachments/", to: "attachments#create"
|
|
16
16
|
end
|
|
@@ -25,8 +25,8 @@ Avo::Engine.routes.draw do
|
|
|
25
25
|
delete "/:resource_name/:id/active_storage_attachments/:attachment_name/:attachment_id", to: "attachments#destroy"
|
|
26
26
|
|
|
27
27
|
# Actions
|
|
28
|
-
get "/:resource_name(/:id)/actions/(:action_id)", to: "actions#show"
|
|
29
|
-
post "/:resource_name(/:id)/actions/(:action_id)", to: "actions#handle"
|
|
28
|
+
get "/:resource_name(/:id)/actions/(:action_id)", to: "actions#show", as: "actions_show"
|
|
29
|
+
post "/:resource_name(/:id)/actions/(:action_id)", to: "actions#handle", as: "actions_handle"
|
|
30
30
|
|
|
31
31
|
# Generate resource routes as below:
|
|
32
32
|
# resources :posts
|
|
@@ -42,14 +42,13 @@ Avo::Engine.routes.draw do
|
|
|
42
42
|
|
|
43
43
|
scope "/avo_private", as: "avo_private" do
|
|
44
44
|
get "/status", to: "debug#status", as: "status"
|
|
45
|
-
post "/status/send_to_hq", to: "debug#send_to_hq", as: "send_to_hq"
|
|
46
|
-
get "/debug/report", to: "debug#report", as: "debug_report"
|
|
47
|
-
post "/debug/refresh_license", to: "debug#refresh_license"
|
|
48
45
|
end
|
|
49
46
|
|
|
50
|
-
if Rails.env.development? || Rails.env.staging?
|
|
47
|
+
if Rails.env.development? || Rails.env.staging? || Rails.env.test?
|
|
51
48
|
scope "/avo_private", as: "avo_private" do
|
|
52
49
|
get "/design", to: "private#design"
|
|
53
50
|
end
|
|
51
|
+
|
|
52
|
+
mount Lookbook::Engine, at: "/lookbook" if defined?(Lookbook)
|
|
54
53
|
end
|
|
55
54
|
end
|
data/db/factories.rb
CHANGED
|
@@ -145,6 +145,20 @@ FactoryBot.define do
|
|
|
145
145
|
body { Faker::Lorem.paragraphs(number: rand(1...3)).join("\n") }
|
|
146
146
|
end
|
|
147
147
|
|
|
148
|
+
trait :with_avatar do
|
|
149
|
+
after(:create) do |event|
|
|
150
|
+
file = Rails.root.join("db", "seed_files", "dummy-image.jpg")
|
|
151
|
+
event.avatar.attach(io: file.open, filename: "dummy-image.jpg")
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
trait :with_cover do
|
|
156
|
+
after(:create) do |event|
|
|
157
|
+
file = Rails.root.join("db", "seed_files", "watch.jpg")
|
|
158
|
+
event.cover.attach(io: file.open, filename: "watch.jpg")
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
148
162
|
factory :volunteer do
|
|
149
163
|
name { Faker::Name.name }
|
|
150
164
|
role { Faker::Job.title }
|
data/lib/avo/asset_manager.rb
CHANGED
data/lib/avo/avatar.rb
ADDED
data/lib/avo/base_action.rb
CHANGED
|
@@ -9,10 +9,11 @@ module Avo
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
class_attribute :name, default: nil
|
|
12
|
+
class_attribute :description, default: nil
|
|
12
13
|
class_attribute :message
|
|
13
14
|
class_attribute :confirm_button_label
|
|
14
15
|
class_attribute :cancel_button_label
|
|
15
|
-
class_attribute :
|
|
16
|
+
class_attribute :confirmation, default: true
|
|
16
17
|
class_attribute :standalone, default: false
|
|
17
18
|
class_attribute :visible, default: -> {
|
|
18
19
|
# Hide on the :new view by default
|
|
@@ -118,7 +119,7 @@ module Avo
|
|
|
118
119
|
self.class.to_s.demodulize.underscore.humanize(keep_id_suffix: true)
|
|
119
120
|
end
|
|
120
121
|
|
|
121
|
-
def initialize(record: nil, resource: nil, user: nil, view: nil, arguments: {}, icon:
|
|
122
|
+
def initialize(record: nil, resource: nil, user: nil, view: nil, arguments: {}, icon: "tabler/outline/player-play", query: nil, index_query: nil)
|
|
122
123
|
@record = record
|
|
123
124
|
@resource = resource
|
|
124
125
|
@user = user
|
|
@@ -149,6 +150,17 @@ module Avo
|
|
|
149
150
|
def fields
|
|
150
151
|
end
|
|
151
152
|
|
|
153
|
+
def get_description
|
|
154
|
+
Avo::ExecutionContext.new(
|
|
155
|
+
target: self.class.description,
|
|
156
|
+
resource: @resource,
|
|
157
|
+
record: @record,
|
|
158
|
+
view: @view,
|
|
159
|
+
arguments: @arguments,
|
|
160
|
+
query: @query
|
|
161
|
+
).handle
|
|
162
|
+
end
|
|
163
|
+
|
|
152
164
|
def get_message
|
|
153
165
|
Avo::ExecutionContext.new(
|
|
154
166
|
target: self.class.message,
|
|
@@ -350,9 +362,9 @@ module Avo
|
|
|
350
362
|
!enabled?
|
|
351
363
|
end
|
|
352
364
|
|
|
353
|
-
def
|
|
365
|
+
def confirmation?
|
|
354
366
|
Avo::ExecutionContext.new(
|
|
355
|
-
target:
|
|
367
|
+
target: confirmation,
|
|
356
368
|
action: self,
|
|
357
369
|
resource: @resource,
|
|
358
370
|
view: @view,
|