diff --git a/clarity_backend_theme_bits/__init__.py b/clarity_backend_theme_bits/__init__.py new file mode 100644 index 0000000..72f4562 --- /dev/null +++ b/clarity_backend_theme_bits/__init__.py @@ -0,0 +1 @@ +from . import controller \ No newline at end of file diff --git a/clarity_backend_theme_bits/__manifest__.py b/clarity_backend_theme_bits/__manifest__.py new file mode 100644 index 0000000..357a5b9 --- /dev/null +++ b/clarity_backend_theme_bits/__manifest__.py @@ -0,0 +1,65 @@ +{ + "name": "Clarity Backend Theme for community", + "version": "18.0.1.0.2", + 'author': "Terabits Technolab", + 'summary': """ + Clarity backend theme + Odoo Backend Theme, Odoo Community Backend Theme, Web backend Theme, Web Responsive Odoo Theme, New theme design, New design, Multi Level Menu, + Web Responsive , Odoo Theme, Odoo Modern Theme, Odoo Modern Backend Theme Odoo, Advance Theme Backend Advanced, Left sidebar menu, + All in one, New advanced Odoo Menu, Sidebar apps, Web menu, Odoo backend menu, Web Responsive menu, Sidebar dark, + Advance Menu Odoo App Menu Apps, Advanced Apps Menu, Elegant Menu, Web App Menu Backend, Menu Odoo Backend, Collapse Menu, Light Sidebar, + Expand Menu, Collapsed Menu, Expanded Menu, New Style Menus, Advanced Sidebar Menu, Advance Sidebar Menu, Responsive Menu Sidebar, Sidebar Theme, + Responsive Sidebar, Hide menu, Show Menu, Hide Sidebar, Show Sidebar, Toggle Menu, Toggle Sidebar, Menu Theme, + Quick Backend Menu, Dropdown Menu, Parent Menus, Shortcut Menus, Menu Icons, Collapsible menu Odoo, + Menu Dynamic Sidebar, Advanced Menu, Backend Odoo Web, Elegant Theme Simple, Advance List View Manager, + Arc Backend Theme, Fully Functional Theme, Flexible Backend Theme, Fast Backend Theme, Advance Material Backend Theme, Customizable Backend Theme, + Attractive Theme for Backend, Elegant Backend Theme, Responsive Web Client, Backend UI, Mobile Responsive for Odoo Community, + Flexible Enterprise Theme, Enterprise Backend Theme + """, + 'description': """ + Clarity backend theme + Odoo Backend Theme, Odoo Community Backend Theme, Web backend Theme, Web Responsive Odoo Theme, New theme design, New design, Multi Level Menu, + Web Responsive , Odoo Theme, Odoo Modern Theme, Odoo Modern Backend Theme Odoo, Advance Theme Backend Advanced, Left sidebar menu, + All in one, New advanced Odoo Menu, Sidebar apps, Web menu, Odoo backend menu, Web Responsive menu, Sidebar dark, + Advance Menu Odoo App Menu Apps, Advanced Apps Menu, Elegant Menu, Web App Menu Backend, Menu Odoo Backend, Collapse Menu, Light Sidebar, + Expand Menu, Collapsed Menu, Expanded Menu, New Style Menus, Advanced Sidebar Menu, Advance Sidebar Menu, Responsive Menu Sidebar, Sidebar Theme, + Responsive Sidebar, Hide menu, Show Menu, Hide Sidebar, Show Sidebar, Toggle Menu, Toggle Sidebar, Menu Theme, + Quick Backend Menu, Dropdown Menu, Parent Menus, Shortcut Menus, Menu Icons, Collapsible menu Odoo, + Menu Dynamic Sidebar, Advanced Menu, Backend Odoo Web, Elegant Theme Simple, Advance List View Manager, + Arc Backend Theme, Fully Functional Theme, Flexible Backend Theme, Fast Backend Theme, Advance Material Backend Theme, Customizable Backend Theme, + Attractive Theme for Backend, Elegant Backend Theme, Responsive Web Client, Backend UI, Mobile Responsive for Odoo Community, + Flexible Enterprise Theme, Enterprise Backend Theme + """, + "sequence": 7, + "license": "OPL-1", + "category": "Themes/Backend", + "website": "https://www.terabits.xyz", + "depends": ["web"], + "data": [ + 'views/res_config_setting.xml', + 'views/res_users.xml', + 'views/webclient_templates.xml' + ], + "assets": { + "web.assets_frontend": [ + 'clarity_backend_theme_bits/static/src/scss/login.scss' + ], + "web.assets_backend": [ + 'clarity_backend_theme_bits/static/src/xml/WebClient.xml', + 'clarity_backend_theme_bits/static/src/xml/navbar/sidebar.xml', + 'clarity_backend_theme_bits/static/src/xml/systray_items/user_menu.xml', + 'clarity_backend_theme_bits/static/src/js/SidebarBottom.js', + 'clarity_backend_theme_bits/static/src/js/WebClient.js', + 'clarity_backend_theme_bits/static/src/scss/layout.scss', + 'clarity_backend_theme_bits/static/src/scss/navbar.scss', + 'clarity_backend_theme_bits/static/src/js/navbar.js', + ], + }, + 'installable': True, + 'application': True, + 'auto_install': False, + 'images': [ + 'static/description/logo.gif', + 'static/description/theme_screenshot.gif', + ], +} diff --git a/clarity_backend_theme_bits/controller/__init__.py b/clarity_backend_theme_bits/controller/__init__.py new file mode 100644 index 0000000..deec4a8 --- /dev/null +++ b/clarity_backend_theme_bits/controller/__init__.py @@ -0,0 +1 @@ +from . import main \ No newline at end of file diff --git a/clarity_backend_theme_bits/controller/main.py b/clarity_backend_theme_bits/controller/main.py new file mode 100644 index 0000000..64e2485 --- /dev/null +++ b/clarity_backend_theme_bits/controller/main.py @@ -0,0 +1,17 @@ +import datetime +import pytz +from odoo import http, models, fields, api, tools +from odoo.http import request + +class BackThemeBits(http.Controller): + @http.route(['/get/menu_data'], type='json', auth='public') + def get_irmenu_icondata(self, **kw): + menuobj = request.env['ir.ui.menu'] + menu_recs = request.env['ir.ui.menu'].sudo().search( + [('id', 'in', kw.get('menu_ids'))]) + + app_menu_dict = {} + for menu in menu_recs: + menu_dict = menu.read(set(menuobj._fields)) + app_menu_dict[menu.id] = menu_dict + return app_menu_dict \ No newline at end of file diff --git a/clarity_backend_theme_bits/static/description/icon.png b/clarity_backend_theme_bits/static/description/icon.png new file mode 100644 index 0000000..873c613 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/icon.png differ diff --git a/clarity_backend_theme_bits/static/description/images/1.png b/clarity_backend_theme_bits/static/description/images/1.png new file mode 100644 index 0000000..14725d0 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/1.png differ diff --git a/clarity_backend_theme_bits/static/description/images/2.png b/clarity_backend_theme_bits/static/description/images/2.png new file mode 100644 index 0000000..b2774c6 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/2.png differ diff --git a/clarity_backend_theme_bits/static/description/images/3.png b/clarity_backend_theme_bits/static/description/images/3.png new file mode 100644 index 0000000..c0c1ce1 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/3.png differ diff --git a/clarity_backend_theme_bits/static/description/images/4.png b/clarity_backend_theme_bits/static/description/images/4.png new file mode 100644 index 0000000..8b22c4d Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/4.png differ diff --git a/clarity_backend_theme_bits/static/description/images/5.png b/clarity_backend_theme_bits/static/description/images/5.png new file mode 100644 index 0000000..b728874 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/5.png differ diff --git a/clarity_backend_theme_bits/static/description/images/6.png b/clarity_backend_theme_bits/static/description/images/6.png new file mode 100644 index 0000000..07b4536 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/6.png differ diff --git a/clarity_backend_theme_bits/static/description/images/7.png b/clarity_backend_theme_bits/static/description/images/7.png new file mode 100644 index 0000000..9ce6851 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/7.png differ diff --git a/clarity_backend_theme_bits/static/description/images/8.png b/clarity_backend_theme_bits/static/description/images/8.png new file mode 100644 index 0000000..c71be24 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/8.png differ diff --git a/clarity_backend_theme_bits/static/description/images/9.png b/clarity_backend_theme_bits/static/description/images/9.png new file mode 100644 index 0000000..deeb181 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/9.png differ diff --git a/clarity_backend_theme_bits/static/description/images/analytix_banner.png b/clarity_backend_theme_bits/static/description/images/analytix_banner.png new file mode 100644 index 0000000..ecf2412 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/analytix_banner.png differ diff --git a/clarity_backend_theme_bits/static/description/images/banner.png b/clarity_backend_theme_bits/static/description/images/banner.png new file mode 100644 index 0000000..a37266e Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/banner.png differ diff --git a/clarity_backend_theme_bits/static/description/images/blog_feat_bg_02.png b/clarity_backend_theme_bits/static/description/images/blog_feat_bg_02.png new file mode 100644 index 0000000..972b822 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/blog_feat_bg_02.png differ diff --git a/clarity_backend_theme_bits/static/description/images/blog_post_bg_01.png b/clarity_backend_theme_bits/static/description/images/blog_post_bg_01.png new file mode 100644 index 0000000..1dbb707 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/blog_post_bg_01.png differ diff --git a/clarity_backend_theme_bits/static/description/images/blog_ss_bg_03.png b/clarity_backend_theme_bits/static/description/images/blog_ss_bg_03.png new file mode 100644 index 0000000..a91b967 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/blog_ss_bg_03.png differ diff --git a/clarity_backend_theme_bits/static/description/images/blogpost_header_img.png b/clarity_backend_theme_bits/static/description/images/blogpost_header_img.png new file mode 100644 index 0000000..e7d2162 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/blogpost_header_img.png differ diff --git a/clarity_backend_theme_bits/static/description/images/clarity_pro_banner.png b/clarity_backend_theme_bits/static/description/images/clarity_pro_banner.png new file mode 100644 index 0000000..d6330b1 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/clarity_pro_banner.png differ diff --git a/clarity_backend_theme_bits/static/description/images/faqs_icon.png b/clarity_backend_theme_bits/static/description/images/faqs_icon.png new file mode 100644 index 0000000..c453817 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/faqs_icon.png differ diff --git a/clarity_backend_theme_bits/static/description/images/icon_img.png b/clarity_backend_theme_bits/static/description/images/icon_img.png new file mode 100644 index 0000000..12db9a7 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/icon_img.png differ diff --git a/clarity_backend_theme_bits/static/description/images/main-b.png b/clarity_backend_theme_bits/static/description/images/main-b.png new file mode 100644 index 0000000..a988f5d Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/main-b.png differ diff --git a/clarity_backend_theme_bits/static/description/images/new-sam-banner.gif b/clarity_backend_theme_bits/static/description/images/new-sam-banner.gif new file mode 100644 index 0000000..4feda0a Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/new-sam-banner.gif differ diff --git a/clarity_backend_theme_bits/static/description/images/release_date_bg.png b/clarity_backend_theme_bits/static/description/images/release_date_bg.png new file mode 100644 index 0000000..45df693 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/release_date_bg.png differ diff --git a/clarity_backend_theme_bits/static/description/images/release_icon.png b/clarity_backend_theme_bits/static/description/images/release_icon.png new file mode 100644 index 0000000..6cd33e2 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/release_icon.png differ diff --git a/clarity_backend_theme_bits/static/description/images/simplify_banner_bg.png b/clarity_backend_theme_bits/static/description/images/simplify_banner_bg.png new file mode 100644 index 0000000..1b35c61 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/simplify_banner_bg.png differ diff --git a/clarity_backend_theme_bits/static/description/images/suggest-app-bg.png b/clarity_backend_theme_bits/static/description/images/suggest-app-bg.png new file mode 100644 index 0000000..0459026 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/images/suggest-app-bg.png differ diff --git a/clarity_backend_theme_bits/static/description/index.html b/clarity_backend_theme_bits/static/description/index.html new file mode 100644 index 0000000..df1b414 --- /dev/null +++ b/clarity_backend_theme_bits/static/description/index.html @@ -0,0 +1,757 @@ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+
+ + +
+
+
+ +
+ +
+

+ Clarity Backend Theme +

+

+ Odoo community backend theme +

+

+ The clarity backend theme have amazing appearance on any device and is easy to
+ switch between all screen sizes. Clicking on any menu is made simple with an
+ contemporary and modern sidebar. You can browse across different apps using
+ elegant sidebar menu.The theme is designed, keeping in mind the delivery of
+ great user experience and user-friendly interface to your users. +

+
+ +
+
+
+
+

+ App Drawer design for Community Addition +

+
+
+ +
+
+

+ Login & Signup Redesign +

+
+
+ +
+
+

+ Customized Discuss view design +

+
+
+ +
+
+

+ Show brand's logo in menu +

+
+
+ +
+
+

+ Customzed List, Form, Kanban view design +

+
+
+ +
+
+

+ Responsive sidebar design +

+
+
+ + +
+
+ +
+ +
+
+
+
+
+ + + + + +
+
+ + +
+
+ +
+
+
+ +
+
+

+ Custom discuss view +

+
+
+ +
+ +
+
+ +
+
+
+ +
+
+

+ Interactive and clean design +

+
+
+ +
+ +
+
+ +
+
+
+ +
+
+

+ Custom list view design +

+
+
+ +
+ +
+
+ +
+
+
+ +
+
+

+ Custom kanban view design +

+
+
+ +
+ +
+
+ +
+
+
+ +
+
+

+ Custom form view design +

+
+
+ +
+ +
+
+ +
+
+
+ +
+
+

+ Custom sign up design +

+
(The login/signup design will appear only the backend login/signup view. + It will not appear in the website login/signup view.) +
+
+ +
+ +
+ +
+
+ +
+
+
+ +
+
+

+ Custom login design +

+
+
+ +
+ +
+
+ +
+
+
+ +
+
+

+ Custom reset form design +

+
+
+ +
+ +
+
+ +
+
+
+ +
+
+

+ Set company logo +

+
+
+ +
+ +
+
+ +
+
+
+
+ + + + + + + + + + + +
+
+ + +
+ +
+ +
+

+ Clarity Pro Backend Theme

+

+ The clarity backend theme have amazing appearance on any device and is easy to switch between all screen sizes. + The theme is designed, keeping in mind the delivery of great user experience and user-friendly interface to your users. +

+ +
+ + Main menu for community + + + Sidebar menu/top menu + + + Multi tabs management +
+ +
+ + Global search + + + Global search in record + + + Global search in menu +
+ +
+ + Multi font style + + + Multi icon style + + + Custom color schemes +
+ +
+ + Full-screen switch + + + Bookmark management + + + Attractive dark mode +
+ +
+ + Kanban & list view style + + + Checkbox & radio style + + + RTL support +
+ + +
+ +
+ + + +
+
+ +
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+

Recommended Apps

+
+ +
+
+ + + + + + + + + + + + +
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ +
+
+

+ Need any help for this module? +

+

+ Contact us + info@terabits.xyz + for your queries +

+
+
+
+
+ + + +
+
diff --git a/clarity_backend_theme_bits/static/description/logo.gif b/clarity_backend_theme_bits/static/description/logo.gif new file mode 100644 index 0000000..3362561 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/logo.gif differ diff --git a/clarity_backend_theme_bits/static/description/modules/access-group.png b/clarity_backend_theme_bits/static/description/modules/access-group.png new file mode 100644 index 0000000..665d616 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/access-group.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/app-1.png b/clarity_backend_theme_bits/static/description/modules/app-1.png new file mode 100644 index 0000000..c3e7a45 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/app-1.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/app-2.png b/clarity_backend_theme_bits/static/description/modules/app-2.png new file mode 100644 index 0000000..bcc93b8 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/app-2.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/app-3.png b/clarity_backend_theme_bits/static/description/modules/app-3.png new file mode 100644 index 0000000..0086b5c Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/app-3.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/app-4.png b/clarity_backend_theme_bits/static/description/modules/app-4.png new file mode 100644 index 0000000..4e5547c Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/app-4.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/app-5.png b/clarity_backend_theme_bits/static/description/modules/app-5.png new file mode 100644 index 0000000..a4f6696 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/app-5.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/app-6.png b/clarity_backend_theme_bits/static/description/modules/app-6.png new file mode 100644 index 0000000..426afee Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/app-6.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/import-export.png b/clarity_backend_theme_bits/static/description/modules/import-export.png new file mode 100644 index 0000000..6a27df9 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/import-export.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/law-firm.gif b/clarity_backend_theme_bits/static/description/modules/law-firm.gif new file mode 100644 index 0000000..fef5019 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/law-firm.gif differ diff --git a/clarity_backend_theme_bits/static/description/modules/login-withany-user.png b/clarity_backend_theme_bits/static/description/modules/login-withany-user.png new file mode 100644 index 0000000..5aed9ed Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/login-withany-user.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/login_user_with_user_audit.png b/clarity_backend_theme_bits/static/description/modules/login_user_with_user_audit.png new file mode 100644 index 0000000..a365c56 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/login_user_with_user_audit.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/new-sam-banner.gif b/clarity_backend_theme_bits/static/description/modules/new-sam-banner.gif new file mode 100644 index 0000000..4feda0a Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/new-sam-banner.gif differ diff --git a/clarity_backend_theme_bits/static/description/modules/real-estate.gif b/clarity_backend_theme_bits/static/description/modules/real-estate.gif new file mode 100644 index 0000000..593c44f Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/real-estate.gif differ diff --git a/clarity_backend_theme_bits/static/description/modules/sam.gif b/clarity_backend_theme_bits/static/description/modules/sam.gif new file mode 100644 index 0000000..883f004 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/sam.gif differ diff --git a/clarity_backend_theme_bits/static/description/modules/soft-restrict.png b/clarity_backend_theme_bits/static/description/modules/soft-restrict.png new file mode 100644 index 0000000..89f2a9e Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/soft-restrict.png differ diff --git a/clarity_backend_theme_bits/static/description/modules/user-audit.gif b/clarity_backend_theme_bits/static/description/modules/user-audit.gif new file mode 100644 index 0000000..c0e2f67 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/user-audit.gif differ diff --git a/clarity_backend_theme_bits/static/description/modules/wp-connector.png b/clarity_backend_theme_bits/static/description/modules/wp-connector.png new file mode 100644 index 0000000..3852743 Binary files /dev/null and b/clarity_backend_theme_bits/static/description/modules/wp-connector.png differ diff --git a/clarity_backend_theme_bits/static/description/new-sam-banner.gif b/clarity_backend_theme_bits/static/description/new-sam-banner.gif new file mode 100644 index 0000000..4feda0a Binary files /dev/null and b/clarity_backend_theme_bits/static/description/new-sam-banner.gif differ diff --git a/clarity_backend_theme_bits/static/description/theme_screenshot.gif b/clarity_backend_theme_bits/static/description/theme_screenshot.gif new file mode 100644 index 0000000..cf48b8f Binary files /dev/null and b/clarity_backend_theme_bits/static/description/theme_screenshot.gif differ diff --git a/clarity_backend_theme_bits/static/img/logo.png b/clarity_backend_theme_bits/static/img/logo.png new file mode 100644 index 0000000..0bb577d Binary files /dev/null and b/clarity_backend_theme_bits/static/img/logo.png differ diff --git a/clarity_backend_theme_bits/static/src/js/Headerbar.js b/clarity_backend_theme_bits/static/src/js/Headerbar.js new file mode 100644 index 0000000..541c44c --- /dev/null +++ b/clarity_backend_theme_bits/static/src/js/Headerbar.js @@ -0,0 +1,193 @@ +/** @odoo-module **/ + +import { Dropdown } from "@web/core/dropdown/dropdown"; +import { useService } from "@web/core/utils/hooks"; +import { registry } from "@web/core/registry"; +import { debounce } from "@web/core/utils/timing"; +import { ErrorHandler } from "@web/core/utils/components"; +import { NavBarDropdownItem,MenuDropdown } from '@web/static/src/webclient/navbar/navbar'; +import { + Component, + onWillDestroy, + useExternalListener, + useEffect, + useRef, + onWillUnmount, +} from "@odoo/owl"; +const systrayRegistry = registry.category("systray"); + +const getBoundingClientRect = Element.prototype.getBoundingClientRect; + +export class HeaderBar extends NavBar { + setup() { + this.currentAppSectionsExtra = []; + this.actionService = useService("action"); + this.menuService = useService("menu"); + this.root = useRef("root"); + this.appSubMenus = useRef("appSubMenus"); + const debouncedAdapt = debounce(this.adapt.bind(this), 250); + onWillDestroy(() => debouncedAdapt.cancel()); + useExternalListener(window, "resize", debouncedAdapt); + + let adaptCounter = 0; + const renderAndAdapt = () => { + adaptCounter++; + this.render(); + }; + + systrayRegistry.addEventListener("UPDATE", renderAndAdapt); + this.env.bus.addEventListener("MENUS:APP-CHANGED", renderAndAdapt); + + onWillUnmount(() => { + systrayRegistry.removeEventListener("UPDATE", renderAndAdapt); + this.env.bus.removeEventListener("MENUS:APP-CHANGED", renderAndAdapt); + }); + + // We don't want to adapt every time we are patched + // rather, we adapt only when menus or systrays have changed. + useEffect( + () => { + this.adapt(); + }, + () => [adaptCounter] + ); + } + + handleItemError(error, item) { + // remove the faulty component + item.isDisplayed = () => false; + Promise.resolve().then(() => { + throw error; + }); + } + + get currentApp() { + return this.menuService.getCurrentApp(); + } + + get currentAppSections() { + return ( + (this.currentApp && this.menuService.getMenuAsTree(this.currentApp.id).childrenTree) || + [] + ); + } + + // This dummy setter is only here to prevent conflicts between the + // Enterprise NavBar extension and the Website NavBar patch. + set currentAppSections(_) {} + + get systrayItems() { + return systrayRegistry + .getEntries() + .map(([key, value]) => ({ key, ...value })) + .filter((item) => ("isDisplayed" in item ? item.isDisplayed(this.env) : true)) + .reverse(); + } + + // This dummy setter is only here to prevent conflicts between the + // Enterprise NavBar extension and the Website NavBar patch. + set systrayItems(_) {} + + /** + * Adapt will check the available width for the app sections to get displayed. + * If not enough space is available, it will replace by a "more" menu + * the least amount of app sections needed trying to fit the width. + * + * NB: To compute the widths of the actual app sections, a render needs to be done upfront. + * By the end of this method another render may occur depending on the adaptation result. + */ + async adapt() { + if (!this.root.el) { + /** @todo do we still need this check? */ + // currently, the promise returned by 'render' is resolved at the end of + // the rendering even if the component has been destroyed meanwhile, so we + // may get here and have this.el unset + return; + } + + // ------- Initialize ------- + // Get the sectionsMenu + const sectionsMenu = this.appSubMenus.el; + if (!sectionsMenu) { + // No need to continue adaptations if there is no sections menu. + return; + } + + // Save initial state to further check if new render has to be done. + const initialAppSectionsExtra = this.currentAppSectionsExtra; + const firstInitialAppSectionExtra = [...initialAppSectionsExtra].shift(); + const initialAppId = firstInitialAppSectionExtra && firstInitialAppSectionExtra.appID; + + // Restore (needed to get offset widths) + const sections = [ + ...sectionsMenu.querySelectorAll(":scope > *:not(.o_menu_sections_more)"), + ]; + for (const section of sections) { + section.classList.remove("d-none"); + } + this.currentAppSectionsExtra = []; + + // ------- Check overflowing sections ------- + // use getBoundingClientRect to get unrounded values for width in order to avoid rounding problem + // with offsetWidth. + const sectionsAvailableWidth = getBoundingClientRect.call(sectionsMenu).width; + const sectionsTotalWidth = sections.reduce( + (sum, s) => sum + getBoundingClientRect.call(s).width, + 0 + ); + if (sectionsAvailableWidth < sectionsTotalWidth) { + // Sections are overflowing + // Initial width is harcoded to the width the more menu dropdown will take + let width = 46; + for (const section of sections) { + if (sectionsAvailableWidth < width + section.offsetWidth) { + // Last sections are overflowing + const overflowingSections = sections.slice(sections.indexOf(section)); + overflowingSections.forEach((s) => { + // Hide from normal menu + s.classList.add("d-none"); + // Show inside "more" menu + const sectionId = + s.dataset.section || + s.querySelector("[data-section]").getAttribute("data-section"); + const currentAppSection = this.currentAppSections.find( + (appSection) => appSection.id.toString() === sectionId + ); + this.currentAppSectionsExtra.push(currentAppSection); + }); + break; + } + width += section.offsetWidth; + } + } + + // ------- Final rendering ------- + const firstCurrentAppSectionExtra = [...this.currentAppSectionsExtra].shift(); + const currentAppId = firstCurrentAppSectionExtra && firstCurrentAppSectionExtra.appID; + if ( + initialAppSectionsExtra.length === this.currentAppSectionsExtra.length && + initialAppId === currentAppId + ) { + // Do not render if more menu items stayed the same. + return; + } + return this.render(); + } + + onNavBarDropdownItemSelection(menu) { + if (menu) { + this.menuService.selectMenu(menu); + } + } + + getMenuItemHref(payload) { + const parts = [`menu_id=${payload.id}`]; + if (payload.actionID) { + parts.push(`action=${payload.actionID}`); + } + return "#" + parts.join("&"); + } +} +HeaderBar.template = "web.NavBar"; +HeaderBar.components = { Dropdown, NavBarDropdownItem, MenuDropdown, ErrorHandler }; +HeaderBar.props = {}; diff --git a/clarity_backend_theme_bits/static/src/js/SidebarBottom.js b/clarity_backend_theme_bits/static/src/js/SidebarBottom.js new file mode 100644 index 0000000..d9a1e1f --- /dev/null +++ b/clarity_backend_theme_bits/static/src/js/SidebarBottom.js @@ -0,0 +1,46 @@ +/** @odoo-module **/ + +import { Dropdown } from "@web/core/dropdown/dropdown"; +import { DropdownItem } from "@web/core/dropdown/dropdown_item"; +import { CheckBox } from "@web/core/checkbox/checkbox"; +import { browser } from "@web/core/browser/browser"; +import { registry } from "@web/core/registry"; +import { Component } from "@odoo/owl"; +import { user } from "@web/core/user"; +import { session } from "@web/session"; + + +const userMenuRegistry = registry.category("user_menuitems"); + +export class SidebarBottom extends Component { + setup() { + this.user = user; + this.dbName = session.db; + if (!this.user.userId || !this.env) { + return; + } + const { origin } = browser.location; + this.source = `${origin}/web/image?model=res.users&field=avatar_128&id=${this.user.userId}`; + } + + getElements() { + const sortedItems = userMenuRegistry + .getAll() + .map((element) => element(this.env)) + .sort((x, y) => { + const xSeq = x.sequence ? x.sequence : 100; + const ySeq = y.sequence ? y.sequence : 100; + return xSeq - ySeq; + }); + return sortedItems; + } +} + +SidebarBottom.template = "SidebarBottom"; +SidebarBottom.components = { Dropdown, DropdownItem, CheckBox }; +SidebarBottom.props = {}; + +registry.category("systray").add("SidebarBottom", { + Component: SidebarBottom, + sequence: 100, // Increased to avoid conflicts with MessagingMenu +}); \ No newline at end of file diff --git a/clarity_backend_theme_bits/static/src/js/WebClient.js b/clarity_backend_theme_bits/static/src/js/WebClient.js new file mode 100644 index 0000000..5917285 --- /dev/null +++ b/clarity_backend_theme_bits/static/src/js/WebClient.js @@ -0,0 +1,113 @@ +/** @odoo-module **/ + +import { WebClient } from "@web/webclient/webclient"; +import { useService } from "@web/core/utils/hooks"; +import { useRef, onMounted } from "@odoo/owl"; +import { patch } from "@web/core/utils/patch"; +import { SidebarBottom } from "./SidebarBottom"; +import { rpc } from "@web/core/network/rpc"; +// import { Transition } from "@web/core/transition"; + + +patch(WebClient.prototype, { + setup() { + super.setup(); + this.root = useRef("root"); + this.rpc = rpc; + this.companyService = useService("company"); + this.menuService = useService("menu"); + this.currentCompany = this.companyService.currentCompany; + + onMounted(() => { + this.fetchMenuData(); + }); + }, + + toggleSidebar(ev) { + const toggleEl = ev.currentTarget; + toggleEl.classList.toggle("visible"); + const navWrapper = document.querySelector(".nav-wrapper-bits"); + if (navWrapper) { + navWrapper.classList.toggle("toggle-show"); + } + }, + + + async fetchMenuData() { + try { + const menuData = this.menuService.getApps(); + const menuIds = menuData.map((app) => app.id); + const result = await this.rpc("/get/menu_data", { menu_ids: menuIds }); + for (const menu of menuData) { + const targetElem = this.root.el?.querySelector( + `.primary-nav a.main_link[data-menu="${menu.id}"] .app_icon` + ); + if (!targetElem) continue; + + targetElem.innerHTML = ""; + const prRecord = result[menu.id]?.[0]; + if (!prRecord) continue; + + menu.id = prRecord.id; + menu.use_icon = prRecord.use_icon; + menu.icon_class_name = prRecord.icon_class_name; + menu.icon_img = prRecord.icon_img; + + let iconImage; + if (prRecord.use_icon) { + if (prRecord.icon_class_name) { + iconImage = ``; + } else if (prRecord.icon_img) { + iconImage = ``; + } else if (prRecord.web_icon) { + const [iconPath, iconExt] = prRecord.web_icon.split("/icon."); + if (iconExt === "svg") { + const webSvgIcon = prRecord.web_icon.replace(",", "/"); + iconImage = ``; + } else { + iconImage = ``; + } + } else { + iconImage = ``; + } + } else { + if (prRecord.icon_img) { + iconImage = ``; + } else if (prRecord.web_icon) { + const [iconPath, iconExt] = prRecord.web_icon.split("/icon."); + if (iconExt === "svg") { + const webSvgIcon = prRecord.web_icon.replace(",", "/"); + iconImage = ``; + } else { + iconImage = ``; + } + } else { + iconImage = ``; + } + } + targetElem.innerHTML = iconImage; + } + } catch (error) { + console.error("Failed to fetch menu data:", error); + } + }, + + BackMenuToggle(ev) { + const parent = ev.currentTarget.parentElement; + if (parent) { + parent.classList.remove("show"); + } + }, + + get currentMenuId() { + const actionParams = window.location.hash; + const params = new URLSearchParams(actionParams.substring(1)); + return params.get("menu_id"); + }, + +}); + +patch(WebClient, { + components: { ...WebClient.components, SidebarBottom }, + // components: { ...WebClient.components, SidebarBottom, Transition }, +}); \ No newline at end of file diff --git a/clarity_backend_theme_bits/static/src/js/navbar.js b/clarity_backend_theme_bits/static/src/js/navbar.js new file mode 100644 index 0000000..c3d91e2 --- /dev/null +++ b/clarity_backend_theme_bits/static/src/js/navbar.js @@ -0,0 +1,67 @@ +/** @odoo-module **/ + +import { NavBar } from "@web/webclient/navbar/navbar"; +import { useService } from "@web/core/utils/hooks"; +import { patch } from "@web/core/utils/patch"; +import { useEnvDebugContext } from "@web/core/debug/debug_context"; +import { useState } from "@odoo/owl"; +import { rpc } from "@web/core/network/rpc"; + +patch(NavBar.prototype, { + setup() { + super.setup(); + this.debugContext = useEnvDebugContext(); + this.rpc = rpc; + this.companyService = useService("company"); + this.currentCompany = this.companyService.currentCompany; + this.menuService = useService("menu"); + this.state = useState({ + ...this.state, + isSidebarOpen: false, + }); + this.getMenuItemHref = this.getMenuItemHref.bind(this); + }, + + onNavBarDropdownItemSelection(menu) { + if (menu) { + this.menuService.selectMenu(menu); + } + }, + + get currentApp() { + return this.menuService.getCurrentApp(); + }, + + getMenuItemHref(payload) { + if (!payload || (!payload.actionPath && !payload.actionID)) { + return "#"; + } + return `/odoo/${payload.actionPath || "action-" + (payload.actionID || "")}`; + }, + + toggleSidebar(ev) { + this.state.isSidebarOpen = !this.state.isSidebarOpen; + const toggleEl = ev.currentTarget; + toggleEl.classList.toggle("visible"); + toggleEl.classList.toggle("sidebar-open"); + const navWrapper = document.querySelector(".nav-wrapper-bits"); + if (navWrapper) { + navWrapper.classList.toggle("toggle-show"); + } + }, + + BackMenuToggle() { + const subMenu = document.querySelector(".sub-menu-dropdown.show"); + if (subMenu) { + subMenu.classList.remove("show"); + } + }, + + get appsMenuProps() { + return { + getMenuItemHref: this.getMenuItemHref, + onNavBarDropdownItemSelection: this.onNavBarDropdownItemSelection.bind(this), + isSmall: this.state.isSmall, + }; + }, +}); \ No newline at end of file diff --git a/clarity_backend_theme_bits/static/src/scss/layout.scss b/clarity_backend_theme_bits/static/src/scss/layout.scss new file mode 100644 index 0000000..2640674 --- /dev/null +++ b/clarity_backend_theme_bits/static/src/scss/layout.scss @@ -0,0 +1,666 @@ +body.o_web_client{ + flex-flow: row !important; + .wrapper-container-bits{ + display: flex; + width: 100%; + .content-wrapper-bits{ + width: 100%; + overflow-x: clip; + @media (max-width: 1540px) { + height: 100%; + // overflow: auto; + } + .btn-link{ + color: #282828 !important; + } + .btn.btn-primary{ + background-color: #282828 !important; + color: #fff !important; + border-color: #fff; + border: 1px solid #282828; + &:focus,&:active,&:hover{ + background-color: #fff !important; + color: #282828 !important; + border-color: #282828 !important; + } + } + .btn.btn-secondary{ + background-color: #f1eef5 !important; + color: #282828 !important; + // border-color: #282828; + // border: 1px solid #282828; + &:focus,&:active,&:hover{ + background-color: #f1eef5 !important; + // color: #fff !important; + // border-color: #f1eef5 !important; + } + } + .o_main_navbar{ + padding: 0 10px; + .o_menu_systray{ + align-items: center; + .o_user_menu{ + display: none !important; + } + button.dropdown-toggle{ + background-color: #282828; + margin: 0px 4px; + width: 35px; + height: 35px; + text-align: center; + justify-content: center; + border-radius: 6px; + i{ + color: #fff; + font-size: 16px !important; + } + .badge.rounded-pill{ + position: absolute; + right: -10px; + top: 2px; + background-color: #ffffff; + border-color: #282828; + border: 1px solid #282828; + color: #282828; + } + &.o_mobile_menu_toggle{ + padding: 15px !important; + } + } + .o_mobile_preview{ + a.o_nav_entry{ + + } + } + .o_website_switcher_container,.o_edit_website_container,.o_new_content_container,.o_mobile_preview{ + button.dropdown-toggle,a.o_nav_entry,.o_nav_entry,a.btn{ + width: auto !important; + background-color: #282828 !important; + margin: 0px 4px; + height: 35px !important; + text-align: center; + justify-content: center; + border-radius: 6px !important; + color: #fff !important; + } + + } + .o_menu_systray_item{ + a{ + .d-none.d-md-block.ms-1{ + color: #282828 !important; + } + } + } + // header button popup + .o-mail-DiscussSystray{ + box-shadow: 0px 1px 5px #abababed; + border-radius: 16px; + .o-mail-MessagingMenu-header{ + button.fw-bold{ + border-bottom: 1px solid #282828; + } + } + } + .o_mobile_menu_toggle{ + display: none !important; + } + } + .sidebar-toggler{ + cursor: pointer; + .sidebar-toggle-bits{ + font-size: 12px; + color: #282828; + i.back-arrow{ + width: 0px !important; + visibility: hidden; + opacity: 0; + } + } + &:hover{ + .sidebar-toggle-bits{ + i.toggle{ + width: 0px !important; + display: none !important; + } + i.back-arrow{ + visibility: visible; + opacity: 1; + transition: all 0.2s; + width: 100% !important; + font-size: 18px; + font-weight: 600; + margin-top: 4px; + } + } + } + } + } + .o_action_manager{ + height: 100%; + width: 100%; + .o_control_panel{ + padding: 10px 14px !important; + .o_control_panel_main{ + // create button + .o_control_panel_breadcrumbs{ + .o_control_panel_main_buttons{ + .btn-outline-primary{ + color: #282828 !important; + border-color: #282828 !important; + &:hover,&:focus,&:active{ + color: #fff !important; + background-color: #282828 !important; + } + } + } + .breadcrumb{ + .breadcrumb-item{ + a{ + color: #282828 !important; + } + } + } + } + // action button + .o_control_panel_actions{ + .btn-outline-secondary{ + border-color: #282828 !important; + i{ + color: #282828 !important; + } + span{ + color: #282828 !important; + } + } + .o_cp_searchview .o_searchview{ + border-radius: 8px 1px 1px 8px; + border-color: #282828; + } + .o-dropdown{ + button.o_searchview_dropdown_toggler{ + border-radius: 0px 8px 8px 0px; + } + } + .o_search_bar_menu{ + i{ + color: #282828 !important; + } + } + } + // navigation + .o_control_panel_navigation{ + .o_pager_counter{ + span{ + font-size: 18px; + } + } + button{ + font-size: 0.875rem; + border-radius: 6px !important; + border-color: #282828; + background-color: #fff !important; + color: #282828 !important; + height: 35px; + margin: 0px 3px; + &.active{ + background-color: #2828282e !important; + } + // width: 35px; + @media (max-width: 768px) { + width:auto !important; + } + } + } + } + } + // Discuss module in community + .o-mail-Discuss{ + width: 100%; + } + .o_content{ + overflow: auto !important; + height: 100vh; + margin-bottom: 60px; + max-height: calc(100vh - 100px); + } + // config setting view + .o-settings-form-view{ + .o_setting_container{ + .settings_tab{ + .app_name{ + font-size: 15px !important; + } + } + } + } + // form view + .o_form_view_container{ + .o_form_sheet_bg{ + .o_form_statusbar{ + // overflow: hidden; + .o_statusbar_buttons{ + .btn-primary{ + background-color: #71639e !important; + border-color: #71639e !important; + &:hover{ + background-color: #fff !important; + } + } + .btn-secondary{ + background-color: #fff !important; + border-color: #71639e !important; + &:hover{ + background-color: #71639e !important; + } + } + } + .o_arrow_button{ + border-color: #71639e !important; + background-color: #fff; + &:after{ + border-color: #fff; + } + } + .o_statusbar_status{ + .o_arrow_button{ + border: none !important; + } + } + //////////////////////////////////////////////////////////////// + .o_statusbar_status { + .o_arrow_button { + font-size: 14px; + text-align: center; + cursor: default; + margin: 0 3px; + padding: 5px 25px; + float: left; + position: relative; + background-color: #d9e3f7 !important; + user-select: none; + transition: background-color 0.2s ease; + &:after,&:before{ + content: " "; + position: absolute; + top: 0; + right: -17px; + width: 0; + height: 0; + border-top: 15px solid transparent; + border-bottom: 15px solid transparent; + border-left: 17px solid #d9e3f7; + z-index: 2; + transition: border-color 0.2s ease; + } + &:hover{ + color: #282828 !important; + } + &:before{ + right: auto; + left: 0; + border-left: 17px solid #f8f9fa; + z-index: 0; + } + &:first-child{ + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + &:before { + border: none; + } + } + &.o_arrow_button_current{ + color: #fff !important; + span{ + color: #fff !important; + } + background-color: #71639e !important; + &:after{ + border-left: 17px solid #71639e; + } + } + } + } + } + //////////////////////////////////////////////////////////////// + .o_form_sheet{ + border-radius: 8px; + box-shadow: 0px 0px 3px #919191; + border: none; + .o_cell{ + label,span,a{ + font-size: 15px !important; + } + } + .o_form_uri{ + span:first-child{ + color: #282828 !important; + } + } + .o_notebook{ + .o_notebook_headers{ + .nav.nav-tabs{ + border-top: 1px solid #dee2e6; + padding: 0px !important; + .nav-item .nav-link{ + color: #484848; + display: block; + border-right: 1px solid #2828286b !important; + padding: 10px; + font-weight: 500; + &:after{ + height: 5px; + background-color: #282828; + } + &:before{ + height: 5px; + background-color: #282828; + } + &.active{ + border-bottom: 2px solid #31485e; + background: #f9f9f9 !important; + font-weight: 600; + } + } + } + } + } + } + .o_list_renderer{ + table{ + a{ + color: #000730 !important; + } + } + } + } + } + // kanban view + .o_kanban_view{ + .o_kanban_record{ + margin: 14px 5px 0px !important; + border-radius: 15px; + .oe_kanban_card,.oe_kanban_global_click{ + border-radius: 8px; + border-color: #2828286e; + border: 1px solid #28282812; + box-shadow: 0px 3px 4px 0px rgba(0, 0, 0, 0.03); + padding: 14px; + } + } + } + // list view + .o_list_view.o_action{ + height: 100%; + .o_content{ + padding: 10px 14px; + } + .o_list_renderer{ + border: 0px !important; + border-radius: 8px; + box-shadow: 0px 0px 3px #919191; + .o_list_table{ + table-layout: auto !important; + thead{ + th{ + padding: 10px 12px; + background-color: #282828; + color: #fff !important; + button{ + color: #fff !important; + } + .form-check-input{ + background-color: #fff !important; + } + } + } + tbody{ + tr{ + border-color: #28282899; + border: none ; + td{ + border: none; + padding: 14px 12px; + color: #282828 !important; + font-size: 15px !important; + font-weight: 500; + } + &.o_data_row{ + border-bottom-width: 1px !important; + border-bottom-style: dashed !important; + } + } + box-shadow: 0px 1px 2px #e2e2e2; + border-radius: 12px; + } + tfoot{ + tr{ + td{ + border: none; + padding: 10px 12px; + color: #282828 !important; + } + } + } + } + .form-check{ + .form-check-input{ + &:checked{ + background-color: #282828 !important; + border-color: #282828 !important; + } + } + } + } + } + // graph view + .o_graph_view { + .o_content { + height: calc(100vh - 100px); + } + } + // discuss view + .o-mail-Discuss{ + background: #fff !important; + .o-mail-DiscussSidebar{ + margin: 7px; + border: none !important; + box-shadow: 0px 1px 4px #9191912e; + border-radius: 14px; + .o-mail-DiscussSidebar-item{ + background: #e3e3e39e; + color: #282828 !important; + border-radius: 7px !important; + margin: 5px 10px; + padding: 10px 0 !important; + font-weight: 600 !important; + } + } + .o-mail-Discuss-content{ + overflow: scroll !important; + .o-mail-Discuss-header{ + border-bottom: none !important; + } + .o-mail-Thread{ + overflow: scroll; + margin: 7px; + box-shadow: 0px 0px 6px #413d3d3b !important; + border: 1px solid #28282800; + border-radius: 14px; + //msg section + .o-mail-Message{ + margin-top: 16px !important; + .o-mail-Message-core{ + //right content / msg content + .o-min-width-0{ + .o-mail-Message-header{ + .o-mail-Message-author{ + font-size: 16px; + margin: 8px 0px; + } + } + .o-mail-Message-content{ + .o-mail-Message-bubble{ + border-radius: 0px 10px 6px 10px !important; + .o-mail-Message-body{ + padding: 15px 25px !important; + } + } + } + } + } + } + } + .o-mail-Composer{ + .o-mail-Composer-coreMain{ + .btn{ + color: #282828 !important; + } + .o-mail-Composer-send{ + background: #282828 !important; + margin: 0 !important; + opacity: 1; + color: #fff !important; + } + + } + } + } + } + } + #terabits-link{ + h2{ + padding: 12px 28px; + background: #eee; + font-size: 15px !important; + } + } + } + } + &.editor_has_snippets_hide_backend_navbar{ + .nav-wrapper-bits{ + display: none; + } + } +} +.menu { + display: block; + width: 250px; + height: 100%; + transition: all 0.45s cubic-bezier(0.77, 0, 0.175, 1); + z-index: 999; + .icon { + position: absolute; + top: 12px; + right: 10px; + pointer-events: none; + width: 24px; + height: 24px; + color: #fff; + } + a { + display: block; + white-space: nowrap; + } +} + +.menu, +.menu a, +.menu a:visited { + color: #aaa; + text-decoration: none!important; + position: relative; +} +.new-wrapper { + position: absolute; + left: 50px; + width: calc(100% - 50px); + transition: transform .45s cubic-bezier(0.77, 0, 0.175, 1); +} + +#menu:checked + ul.menu-dropdown { + left: 0; + -webkit-animation: all .45s cubic-bezier(0.77, 0, 0.175, 1); + animation: all .45s cubic-bezier(0.77, 0, 0.175, 1); +} +.sub-menu-checkbox:checked + ul.sub-menu-dropdown { + display: block!important; + -webkit-animation: grow .45s cubic-bezier(0.77, 0, 0.175, 1); + animation: grow .45s cubic-bezier(0.77, 0, 0.175, 1); +} +.openNav .new-wrapper { + position: absolute; + transform: translate3d(200px, 0, 0); + width: calc(100% - 250px); + transition: transform .45s cubic-bezier(0.77, 0, 0.175, 1); +} + +.downarrow { + background: transparent; + position: absolute; + right: 50px; + top: 12px; + color: #777; + width: 24px; + height: 24px; + text-align: center; + display: block; +} +.downarrow:hover { + color: #fff; +} +.menu-dropdown { + top: 0; + overflow-y: auto; +} +.overflow-container { + position: relative; + height: 100% !important; + overflow-y: auto; + z-index: -1; + display:block; +} +.sub-menu-dropdown { + background-color: #333; +} +.openNav .menu { + top: 73px; + transform: translate3d(200px, 0, 0); + transition: transform .45s cubic-bezier(0.77, 0, 0.175, 1); +} + + +@-webkit-keyframes grow { + + 0% { + display: none; + opacity: 0; + } + 50% { + display: block; + opacity: 0.5; + } + 100% { + opacity: 1; + } + +} + +@keyframes grow { + + 0% { + display: none; + opacity: 0; + } + 50% { + display: block; + opacity: 0.5; + } + 100% { + opacity: 1 + } + +} +.o_navbar_apps_menu{ + height: 100%; +} \ No newline at end of file diff --git a/clarity_backend_theme_bits/static/src/scss/login.scss b/clarity_backend_theme_bits/static/src/scss/login.scss new file mode 100644 index 0000000..649d926 --- /dev/null +++ b/clarity_backend_theme_bits/static/src/scss/login.scss @@ -0,0 +1,69 @@ +#wrapwrap{ + .login-view-bits{ + .oe_login_form,.oe_signup_form,.oe_reset_password_form{ + .input-group{ + a.btn{ + background-color: #282828; + color: #fff !important; + border-radius: 0px 8px 8px 0px !important; + display: flex !important; + align-items: center; + i{ + color: #fff !important; + padding-left: 5px; + margin-top: -4px; + } + } + } + input,.form-control{ + display: block; + width: 100%; + padding: 0.775rem 1rem; + font-size: 1.1rem; + font-weight: 500; + line-height: 1.5; + color: #4B5675; + appearance: none; + background-clip: padding-box; + border: 1px solid #DBDFE9; + border-radius: 0.475rem; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; + &#db{ + border-radius: 8px 0px 0px 8px !important; + } + } + .col-form-label,.form-label{ + font-size: 14px !important; + font-weight: bold !important; + } + } + .card-body{ + box-shadow: 0px 0px 10px #d2d1d1; + border-radius: 30px; + } + .oe_login_buttons{ + .btn-primary[type=submit]{ + padding: 14px; + border-radius: 8px; + background: #282828; + color: #fff; + font-size: 14px; + &:hover,&:active,&:focus{ + color: #282828; + background: #fff; + border: 1px solid #282828; + } + } + a,button.btn{ + font-size: 12px; + font-weight: 600; + } + } + div.small{ + a,button.btn{ + font-size: 12px; + font-weight: 600; + } + } + } +} \ No newline at end of file diff --git a/clarity_backend_theme_bits/static/src/scss/navbar.scss b/clarity_backend_theme_bits/static/src/scss/navbar.scss new file mode 100644 index 0000000..d32ef6f --- /dev/null +++ b/clarity_backend_theme_bits/static/src/scss/navbar.scss @@ -0,0 +1,292 @@ +body.o_web_client{ + .nav-wrapper-bits{ + display: none ; + &.toggle-show{ + display: flex; + flex-direction: column; + justify-content: space-between; + background-color: #282828; + height: 100%; + z-index: 999; + header{ + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + } + .sytray-container-bits{ + margin: 5px 5px; + background-color: none !important; + button{ + width: 100%; + border: none !important; + box-shadow: none !important; + background: #343434; + border-radius: 10px; + img{ + width: 35px; + border-radius: 30px !important; + } + } + mark{ + font-size: 14px; + margin-top: 8px; + background: #fff !important; + padding: 7px; + border-radius: 8px; + } + .o_user_menu{ + .o-dropdown--menu{ + min-width: 15rem !important; + .dropdown-item{ + padding: 5px 20px !important; + } + // @media (max-width: 768px) { + // width: 100%; + // height: 100%; + // display: flex; + // justify-content: center; + // align-items: center; + + // } + } + } + + .powered-by{ + display: none; + } + &:hover{ + .powered-by{ + display: block !important; + color: #fff; + a{ + color: #aab6ff !important; + } + } + } + } + } + .btm-user-menu{ + z-index: 999; + width: 250px; + } + @media (max-width: 768px) { + position: absolute; + top: 0; + bottom: 0; + height: 100%; + z-index: 11; + } + } + header.o_navbar{ + nav{ + background-color: transparent !important; + border-bottom: none !important; + height: 100%; + } + .o_company_logo{ + padding: 8px 20px !important; + display: flex; + align-items: center; + justify-content: space-between; + background: #343434; + border-radius: 10px; + margin: 5px 5px; + i{ + color: #fff !important; + font-size: 20px; + display: none; + @media (max-width: 768px) { + display: block; + } + } + img{ + width: 150px; + height: 70px; + object-fit: contain; + } + } + } + .primary-nav{ + flex: 1 1 0 !important; + overflow-y: auto; + .overflow-container{ + .main_link{ + .app_icon{ + height: 25px !important; + width: 25px !important; + display: inline-flex; + img{ + object-fit: contain; + } + } + } + } + ul#menu-dropdown{ + list-style-type: none !important; + padding-left: 5px !important; + li a.main_link{ + display: flex; + align-items: center !important; + padding: 1em; + font-size: 14px; + } + ul.header-sub-menus.main{ + list-style-type: none !important; + z-index: 3; + position: absolute; + left: 0; + background-color: #282828 !important; + height: 100%; + top: 0; + width: 100%; + padding: 0px 12px; + // &:not(.show){ + // left: 100% !important; + // } + &:not(.show){ + display: none; + width: 0% ; + } + .back_main_menu{ + position: relative; + margin-left: -18px; + h3{ + color: #ffff !important; + cursor: pointer; + } + } + li{ + margin-left: 10px ; + background: #282828; + .header-sub-menus{ + list-style-type: none !important; + border-left: 1px solid #717171; + padding: 0; + } + .sub-main-menu{ + cursor: pointer !important; + font-size: 14px; + color: #fff; + font-weight: 600; + background: #282828; + } + } + // @media (max-width: 768px) { + // position: relative !important; + // .back_main_menu{ + // display: none !important; + // } + // } + // &.show{ + // li{ + // .collapse{ + // display: block; + // } + // } + // } + a{ + padding: 0.5rem !important; + font-size: 12px !important; + } + &.show{ + li{ + .sub-main-menu{ + background: #eeeeee14; + padding: 5px 10px !important; + border-radius: 8px; + margin: 8px 0px; + } + } + } + } + } + ::-webkit-scrollbar-track + { + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); + background-color: #F5F5F5; + } + + ::-webkit-scrollbar + { + width: 6px; + background-color: #F5F5F5; + } + + ::-webkit-scrollbar-thumb + { + background-color: #575757; + } + } +} +.button_bg_hover:hover { + background-color: gray; + color:black; +} +.menu-hasdropdown { + .button_bg_hover { + margin-right: 7%; + } +} + +.header-sub-menus .button_bg_hover { + margin-right: 0; +} + +.sidebar-toggler { + .sidebar-toggle-bits { + .chevron-toggle { + transition: transform 0.3s ease; + } + + &.sidebar-open .chevron-toggle { + transform: rotate(180deg); + } + + &:not(.sidebar-open) .chevron-toggle { + transform: rotate(0deg); + } + } +} + +.sub-main-menu { + .chevron-toggle { + transition: transform 0.3s ease; + } + + &[aria-expanded="true"] .chevron-toggle { + transform: rotate(90deg); + } + + &[aria-expanded="false"] .chevron-toggle { + transform: rotate(0deg); + } +} +.o_user_avatar{ + height: 15%; + width: 15%; +} +.user-avtar-bits { + position: relative; + overflow: hidden; + transition: max-height 0.3s ease; + max-height: 100px; +} + +.user-avtar-bits:hover { + max-height: 120px; +} + +.powered-by { + opacity: 0; + transform: translateY(10px); + transition: opacity 0.3s ease, transform 0.3s ease; + pointer-events: none; + margin-top: 5px; +} + +.user-avtar-bits:hover .powered-by { + opacity: 1; + transform: translateY(0); + pointer-events: auto; +} diff --git a/clarity_backend_theme_bits/static/src/xml/WebClient.xml b/clarity_backend_theme_bits/static/src/xml/WebClient.xml new file mode 100644 index 0000000..72185d5 --- /dev/null +++ b/clarity_backend_theme_bits/static/src/xml/WebClient.xml @@ -0,0 +1,43 @@ + + + + + + + +
+ +
+ + + + + + +
+
+
+
+ +
diff --git a/clarity_backend_theme_bits/static/src/xml/navbar/sidebar.xml b/clarity_backend_theme_bits/static/src/xml/navbar/sidebar.xml new file mode 100644 index 0000000..c902b29 --- /dev/null +++ b/clarity_backend_theme_bits/static/src/xml/navbar/sidebar.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/clarity_backend_theme_bits/static/src/xml/systray_items/user_menu.xml b/clarity_backend_theme_bits/static/src/xml/systray_items/user_menu.xml new file mode 100644 index 0000000..9c59fc5 --- /dev/null +++ b/clarity_backend_theme_bits/static/src/xml/systray_items/user_menu.xml @@ -0,0 +1,64 @@ + + + + + + + User + + + + + +
+ + + + + + + + + \ No newline at end of file diff --git a/clarity_backend_theme_bits/views/res_config_setting.xml b/clarity_backend_theme_bits/views/res_config_setting.xml new file mode 100644 index 0000000..7b63614 --- /dev/null +++ b/clarity_backend_theme_bits/views/res_config_setting.xml @@ -0,0 +1,29 @@ + + + + res.config.settings.view.form.inherit.base + res.config.settings + + + + + + + + + \ No newline at end of file diff --git a/clarity_backend_theme_bits/views/res_users.xml b/clarity_backend_theme_bits/views/res_users.xml new file mode 100644 index 0000000..bf067d3 --- /dev/null +++ b/clarity_backend_theme_bits/views/res_users.xml @@ -0,0 +1,23 @@ + + + + res.users.form + res.users + + + + +
Don't know how to set correct access rights for multiple users?
+
+
+
Easily set with Simplify Access Management app.
+
+ Live demo available + Access Here. +
+
+
+
+
+
+
\ No newline at end of file diff --git a/clarity_backend_theme_bits/views/webclient_templates.xml b/clarity_backend_theme_bits/views/webclient_templates.xml new file mode 100644 index 0000000..adb879b --- /dev/null +++ b/clarity_backend_theme_bits/views/webclient_templates.xml @@ -0,0 +1,32 @@ + + + + + + diff --git a/jazzy_backend_theme/README.rst b/jazzy_backend_theme/README.rst new file mode 100644 index 0000000..982eccd --- /dev/null +++ b/jazzy_backend_theme/README.rst @@ -0,0 +1,47 @@ +.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg + :target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +Jazzy Backend Theme +=================== +* Jazzy Backend Theme module for Odoo 18 community editions. This is a Minimalist and Elegant Backend Theme for Odoo 17. This theme will change your Old Experience to a New Experience with Odoo. + +Configuration +------------- + - www.odoo.com/documentation/18.0/setup/install.html + - Install our custom addon + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +General Public License, Version 3 (LGPL v3). +(https://www.gnu.org/licenses/lgpl-3.0-standalone.html) + +Credits +------- +Developer: (V17) Developer ADVAITH BG, Contact: odoo@cybrosys.com + (V18) Developer ATHIRA K, Contact: odoo@cybrosys.com +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +-------- +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit https://www.cybrosys.com + +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com" + +Further information +----------------- +HTML Description: ``__ diff --git a/jazzy_backend_theme/__init__.py b/jazzy_backend_theme/__init__.py new file mode 100644 index 0000000..6eeac83 --- /dev/null +++ b/jazzy_backend_theme/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import models diff --git a/jazzy_backend_theme/__manifest__.py b/jazzy_backend_theme/__manifest__.py new file mode 100644 index 0000000..ef7d994 --- /dev/null +++ b/jazzy_backend_theme/__manifest__.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +{ + "name": "Jazzy Backend Theme", + "version": "18.0.1.0.0", + "category": "Themes/Backend", + "summary": "Jazzy backed Theme is an attractive theme for backend", + "description": """Minimalist and elegant backend theme for Odoo Backend""", + "author": "Cybrosys Techno Solutions", + "company": "Cybrosys Techno Solutions", + "maintainer": "Cybrosys Techno Solutions", + "website": "https://www.cybrosys.com", + "depends": ["web", "mail"], + "data": [ + 'views/layout_templates.xml', + 'views/res_config_settings_views.xml', + ], + 'assets': { + 'web.assets_backend': [ + 'jazzy_backend_theme/static/src/components/app_menu/side_menu.xml', + 'jazzy_backend_theme/static/src/layout/style/layout_colors.scss', + 'jazzy_backend_theme/static/src/components/app_menu/menu_order.css', + 'jazzy_backend_theme/static/src/layout/style/layout_style.scss', + 'jazzy_backend_theme/static/src/layout/style/sidebar.scss', + 'jazzy_backend_theme/static/src/components/app_menu/search_apps.js', + ], + 'web.assets_frontend': [ + 'jazzy_backend_theme/static/src/layout/style/login.scss' + ], + }, + 'images': [ + 'static/description/banner.jpg', + 'static/description/theme_screenshot.jpg', + ], + 'license': 'LGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/jazzy_backend_theme/doc/RELEASE_NOTES.md b/jazzy_backend_theme/doc/RELEASE_NOTES.md new file mode 100644 index 0000000..854b921 --- /dev/null +++ b/jazzy_backend_theme/doc/RELEASE_NOTES.md @@ -0,0 +1,9 @@ +## Module + +#### 01.01.2025 + +#### Version 18.0.1.0.0 + +##### ADD + +- Initial commit for Jazzy Backend Theme diff --git a/jazzy_backend_theme/models/__init__.py b/jazzy_backend_theme/models/__init__.py new file mode 100644 index 0000000..33558f6 --- /dev/null +++ b/jazzy_backend_theme/models/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from . import res_company +from . import res_config_settings diff --git a/jazzy_backend_theme/models/res_company.py b/jazzy_backend_theme/models/res_company.py new file mode 100644 index 0000000..e8d909a --- /dev/null +++ b/jazzy_backend_theme/models/res_company.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models, fields + + +class ResCompany(models.Model): + """Inherits the Res Company Model""" + _inherit = 'res.company' + + background_image = fields.Binary(string="Background Image", attachment=True, + help="Add Background image") diff --git a/jazzy_backend_theme/models/res_config_settings.py b/jazzy_backend_theme/models/res_config_settings.py new file mode 100644 index 0000000..995093a --- /dev/null +++ b/jazzy_backend_theme/models/res_config_settings.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +############################################################################# +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2025-TODAY Cybrosys Technologies() +# Author: Cybrosys Techno Solutions() +# +# You can modify it under the terms of the GNU LESSER +# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. +# +# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE +# (LGPL v3) along with this program. +# If not, see . +# +############################################################################# +from odoo import models, fields + + +class ResConfigSettings(models.TransientModel): + """Inherits the Configuration settings Model""" + _inherit = 'res.config.settings' + + theme_background = fields.Binary(string="App menu Background", + related='company_id.background_image', + readonly=False, + help="Add background image") + app_bar_color = fields.Char(string='Appbar color', + config_parameter='jazzy_backend_theme.' + 'appbar_color', + default='#000000', + help="App bar color") + primary_accent = fields.Char(string="Navbar color", + config_parameter='jazzy_backend_theme.' + 'primary_accent_color', + default='#004589', + help="Navbar color") + primary_hover = fields.Char(string="Hover Primary Color", + config_parameter='jazzy_backend_theme.' + 'primary_hover', + default='#00376E', + help="Hover primary color") + appbar_text = fields.Char(string="Home Menu Text Color", + config_parameter='jazzy_backend_theme.' + 'appbar_text', + default='#ffffff', + help="App bar text color") + secondary_hover = fields.Char(string="AppBar Hover", + config_parameter='jazzy_backend_theme.' + 'secondary_hover', + default='#F2F2F3', + help="Appbar hover") + kanban_bg_color = fields.Char(string="Kanban Bg Color", + config_parameter='jazzy_backend_theme.' + 'kanban_bg_color', + default='#F7F7F7', + help="Kanban view background color") + + def config_color_settings(self): + """Define the configuration color settings""" + colors = { + 'full_bg_img': self.env.user.company_id.background_image, + 'appbar_color': self.env[ 'ir.config_parameter'].sudo().get_param( + 'jazzy_backend_theme.appbar_color'), + 'primary_accent': self.env['ir.config_parameter'].sudo().get_param( + 'jazzy_backend_theme.primary_accent_color'), + 'secondary_color': self.env['ir.config_parameter'].sudo().get_param( + 'jazzy_backend_theme.secondary_color'), + 'kanban_bg_color': self.env['ir.config_parameter'].sudo().get_param( + 'jazzy_backend_theme.kanban_bg_color'), + 'primary_hover': self.env['ir.config_parameter'].sudo().get_param( + 'jazzy_backend_theme.primary_hover'), + 'light_hover': self.env['ir.config_parameter'].sudo().get_param( + 'jazzy_backend_theme.light_hover'), + 'appbar_text': self.env['ir.config_parameter'].sudo().get_param( + 'jazzy_backend_theme.appbar_text'), + 'secondary_hover': self.env['ir.config_parameter'].sudo().get_param( + 'jazzy_backend_theme.secondary_hover') + } + return colors diff --git a/jazzy_backend_theme/static/description/banner.jpg b/jazzy_backend_theme/static/description/banner.jpg new file mode 100644 index 0000000..583744f Binary files /dev/null and b/jazzy_backend_theme/static/description/banner.jpg differ diff --git a/jazzy_backend_theme/static/description/icon.png b/jazzy_backend_theme/static/description/icon.png new file mode 100644 index 0000000..f4e364c Binary files /dev/null and b/jazzy_backend_theme/static/description/icon.png differ diff --git a/jazzy_backend_theme/static/description/img/1.png b/jazzy_backend_theme/static/description/img/1.png new file mode 100644 index 0000000..9d182ed Binary files /dev/null and b/jazzy_backend_theme/static/description/img/1.png differ diff --git a/jazzy_backend_theme/static/description/img/18/app_bar.png b/jazzy_backend_theme/static/description/img/18/app_bar.png new file mode 100644 index 0000000..9128cd6 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/app_bar.png differ diff --git a/jazzy_backend_theme/static/description/img/18/desktop.gif b/jazzy_backend_theme/static/description/img/18/desktop.gif new file mode 100644 index 0000000..9294d7c Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/desktop.gif differ diff --git a/jazzy_backend_theme/static/description/img/18/employe.jpg b/jazzy_backend_theme/static/description/img/18/employe.jpg new file mode 100644 index 0000000..c180290 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/employe.jpg differ diff --git a/jazzy_backend_theme/static/description/img/18/event.png b/jazzy_backend_theme/static/description/img/18/event.png new file mode 100644 index 0000000..e939860 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/event.png differ diff --git a/jazzy_backend_theme/static/description/img/18/kanban.png b/jazzy_backend_theme/static/description/img/18/kanban.png new file mode 100644 index 0000000..0e00023 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/kanban.png differ diff --git a/jazzy_backend_theme/static/description/img/18/mobile_form.jpg b/jazzy_backend_theme/static/description/img/18/mobile_form.jpg new file mode 100644 index 0000000..e15724a Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/mobile_form.jpg differ diff --git a/jazzy_backend_theme/static/description/img/18/mobile_kanban01.jpg b/jazzy_backend_theme/static/description/img/18/mobile_kanban01.jpg new file mode 100644 index 0000000..1482b7b Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/mobile_kanban01.jpg differ diff --git a/jazzy_backend_theme/static/description/img/18/mobile_lost.jpg b/jazzy_backend_theme/static/description/img/18/mobile_lost.jpg new file mode 100644 index 0000000..2d80cab Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/mobile_lost.jpg differ diff --git a/jazzy_backend_theme/static/description/img/18/mobile_search.jpg b/jazzy_backend_theme/static/description/img/18/mobile_search.jpg new file mode 100644 index 0000000..fefb3db Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/mobile_search.jpg differ diff --git a/jazzy_backend_theme/static/description/img/18/mobile_settings.jpg b/jazzy_backend_theme/static/description/img/18/mobile_settings.jpg new file mode 100644 index 0000000..e3f9606 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/mobile_settings.jpg differ diff --git a/jazzy_backend_theme/static/description/img/18/mobile_view.gif b/jazzy_backend_theme/static/description/img/18/mobile_view.gif new file mode 100644 index 0000000..7f7f3f0 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/mobile_view.gif differ diff --git a/jazzy_backend_theme/static/description/img/18/responsive.jpg b/jazzy_backend_theme/static/description/img/18/responsive.jpg new file mode 100644 index 0000000..4f5533b Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/responsive.jpg differ diff --git a/jazzy_backend_theme/static/description/img/18/sale_kanban.png b/jazzy_backend_theme/static/description/img/18/sale_kanban.png new file mode 100644 index 0000000..f622e82 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/sale_kanban.png differ diff --git a/jazzy_backend_theme/static/description/img/18/search.png b/jazzy_backend_theme/static/description/img/18/search.png new file mode 100644 index 0000000..d420cf2 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/18/search.png differ diff --git a/jazzy_backend_theme/static/description/img/2.png b/jazzy_backend_theme/static/description/img/2.png new file mode 100644 index 0000000..3eb73c7 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/2.png differ diff --git a/jazzy_backend_theme/static/description/img/3.png b/jazzy_backend_theme/static/description/img/3.png new file mode 100644 index 0000000..164d35e Binary files /dev/null and b/jazzy_backend_theme/static/description/img/3.png differ diff --git a/jazzy_backend_theme/static/description/img/3image.jpg b/jazzy_backend_theme/static/description/img/3image.jpg new file mode 100644 index 0000000..30cd5d7 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/3image.jpg differ diff --git a/jazzy_backend_theme/static/description/img/4.png b/jazzy_backend_theme/static/description/img/4.png new file mode 100644 index 0000000..2771280 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/4.png differ diff --git a/jazzy_backend_theme/static/description/img/5.png b/jazzy_backend_theme/static/description/img/5.png new file mode 100644 index 0000000..cca1fd5 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/5.png differ diff --git a/jazzy_backend_theme/static/description/img/6.png b/jazzy_backend_theme/static/description/img/6.png new file mode 100644 index 0000000..64329bd Binary files /dev/null and b/jazzy_backend_theme/static/description/img/6.png differ diff --git a/jazzy_backend_theme/static/description/img/7.png b/jazzy_backend_theme/static/description/img/7.png new file mode 100644 index 0000000..7acf13a Binary files /dev/null and b/jazzy_backend_theme/static/description/img/7.png differ diff --git a/jazzy_backend_theme/static/description/img/8.png b/jazzy_backend_theme/static/description/img/8.png new file mode 100644 index 0000000..a414d04 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/8.png differ diff --git a/jazzy_backend_theme/static/description/img/app_bar.png b/jazzy_backend_theme/static/description/img/app_bar.png new file mode 100644 index 0000000..13169af Binary files /dev/null and b/jazzy_backend_theme/static/description/img/app_bar.png differ diff --git a/jazzy_backend_theme/static/description/img/arrows-repeat.svg b/jazzy_backend_theme/static/description/img/arrows-repeat.svg new file mode 100644 index 0000000..1d7efab --- /dev/null +++ b/jazzy_backend_theme/static/description/img/arrows-repeat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/banner-bg-1.svg b/jazzy_backend_theme/static/description/img/banner-bg-1.svg new file mode 100644 index 0000000..7af9bab --- /dev/null +++ b/jazzy_backend_theme/static/description/img/banner-bg-1.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/banner.png b/jazzy_backend_theme/static/description/img/banner.png new file mode 100644 index 0000000..76747bf Binary files /dev/null and b/jazzy_backend_theme/static/description/img/banner.png differ diff --git a/jazzy_backend_theme/static/description/img/banner.svg b/jazzy_backend_theme/static/description/img/banner.svg new file mode 100644 index 0000000..3d4ed7a --- /dev/null +++ b/jazzy_backend_theme/static/description/img/banner.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/check.svg b/jazzy_backend_theme/static/description/img/check.svg new file mode 100644 index 0000000..1df6795 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/check.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/custom_form_view.png b/jazzy_backend_theme/static/description/img/custom_form_view.png new file mode 100644 index 0000000..33ce846 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/custom_form_view.png differ diff --git a/jazzy_backend_theme/static/description/img/customizable_ui.png b/jazzy_backend_theme/static/description/img/customizable_ui.png new file mode 100644 index 0000000..93b65cd Binary files /dev/null and b/jazzy_backend_theme/static/description/img/customizable_ui.png differ diff --git a/jazzy_backend_theme/static/description/img/customization_settings.png b/jazzy_backend_theme/static/description/img/customization_settings.png new file mode 100644 index 0000000..f9d9dc3 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/customization_settings.png differ diff --git a/jazzy_backend_theme/static/description/img/feature-star.svg b/jazzy_backend_theme/static/description/img/feature-star.svg new file mode 100644 index 0000000..a913270 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/feature-star.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/gear.svg b/jazzy_backend_theme/static/description/img/gear.svg new file mode 100644 index 0000000..0cc66b6 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/gear.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/hero.png b/jazzy_backend_theme/static/description/img/hero.png new file mode 100644 index 0000000..87e4b66 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/hero.png differ diff --git a/jazzy_backend_theme/static/description/img/hire-odoo.svg b/jazzy_backend_theme/static/description/img/hire-odoo.svg new file mode 100644 index 0000000..e1ac089 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/hire-odoo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/discuss.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/discuss.png new file mode 100644 index 0000000..13de707 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/discuss.png differ diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/error.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/error.png new file mode 100644 index 0000000..60a0303 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/error.png differ diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/form.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/form.png new file mode 100644 index 0000000..a622f69 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/form.png differ diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/front.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/front.png new file mode 100644 index 0000000..ff91f0e Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/front.png differ diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/kanban.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/kanban.png new file mode 100644 index 0000000..1194ed9 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/kanban.png differ diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/list.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/list.png new file mode 100644 index 0000000..82110bd Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/list.png differ diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/products.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/products.png new file mode 100644 index 0000000..b0542d4 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/products.png differ diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/search.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/search.png new file mode 100644 index 0000000..5f177a5 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/search.png differ diff --git a/jazzy_backend_theme/static/description/img/jazzy scrnsht/settings.png b/jazzy_backend_theme/static/description/img/jazzy scrnsht/settings.png new file mode 100644 index 0000000..1cc71c3 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/jazzy scrnsht/settings.png differ diff --git a/jazzy_backend_theme/static/description/img/kanban_view.png b/jazzy_backend_theme/static/description/img/kanban_view.png new file mode 100644 index 0000000..2c4d47f Binary files /dev/null and b/jazzy_backend_theme/static/description/img/kanban_view.png differ diff --git a/jazzy_backend_theme/static/description/img/life-ring-icon.svg b/jazzy_backend_theme/static/description/img/life-ring-icon.svg new file mode 100644 index 0000000..3ae6e1d --- /dev/null +++ b/jazzy_backend_theme/static/description/img/life-ring-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/odoo-consultancy.svg b/jazzy_backend_theme/static/description/img/odoo-consultancy.svg new file mode 100644 index 0000000..e05f65b --- /dev/null +++ b/jazzy_backend_theme/static/description/img/odoo-consultancy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/jazzy_backend_theme/static/description/img/odoo-licencing.svg b/jazzy_backend_theme/static/description/img/odoo-licencing.svg new file mode 100644 index 0000000..2606c88 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/odoo-licencing.svg @@ -0,0 +1,3 @@ + + + diff --git a/jazzy_backend_theme/static/description/img/patter.svg b/jazzy_backend_theme/static/description/img/patter.svg new file mode 100644 index 0000000..25c9c0a --- /dev/null +++ b/jazzy_backend_theme/static/description/img/patter.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/puzzle-piece-icon.svg b/jazzy_backend_theme/static/description/img/puzzle-piece-icon.svg new file mode 100644 index 0000000..3e9ad93 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/puzzle-piece-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/responsive-backend-theme.png b/jazzy_backend_theme/static/description/img/responsive-backend-theme.png new file mode 100644 index 0000000..a804ac4 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/responsive-backend-theme.png differ diff --git a/jazzy_backend_theme/static/description/img/screenshot-1.svg b/jazzy_backend_theme/static/description/img/screenshot-1.svg new file mode 100644 index 0000000..bf48f91 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/screenshot-1.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/screenshot-2.png b/jazzy_backend_theme/static/description/img/screenshot-2.png new file mode 100644 index 0000000..e13b876 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/screenshot-2.png differ diff --git a/jazzy_backend_theme/static/description/img/screenshot-3.png b/jazzy_backend_theme/static/description/img/screenshot-3.png new file mode 100644 index 0000000..be1acdf Binary files /dev/null and b/jazzy_backend_theme/static/description/img/screenshot-3.png differ diff --git a/jazzy_backend_theme/static/description/img/screenshot-4.png b/jazzy_backend_theme/static/description/img/screenshot-4.png new file mode 100644 index 0000000..1d01e11 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/screenshot-4.png differ diff --git a/jazzy_backend_theme/static/description/img/screenshot-5.svg b/jazzy_backend_theme/static/description/img/screenshot-5.svg new file mode 100644 index 0000000..6b9b86f --- /dev/null +++ b/jazzy_backend_theme/static/description/img/screenshot-5.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/screenshot-img.png b/jazzy_backend_theme/static/description/img/screenshot-img.png new file mode 100644 index 0000000..a425d9e Binary files /dev/null and b/jazzy_backend_theme/static/description/img/screenshot-img.png differ diff --git a/jazzy_backend_theme/static/description/img/screenshot-main.png b/jazzy_backend_theme/static/description/img/screenshot-main.png new file mode 100644 index 0000000..575f8e6 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/screenshot-main.png differ diff --git a/jazzy_backend_theme/static/description/img/setting_search.png b/jazzy_backend_theme/static/description/img/setting_search.png new file mode 100644 index 0000000..02d4fdc Binary files /dev/null and b/jazzy_backend_theme/static/description/img/setting_search.png differ diff --git a/jazzy_backend_theme/static/description/img/template.jpg b/jazzy_backend_theme/static/description/img/template.jpg new file mode 100644 index 0000000..1769d70 Binary files /dev/null and b/jazzy_backend_theme/static/description/img/template.jpg differ diff --git a/jazzy_backend_theme/static/description/img/translate.svg b/jazzy_backend_theme/static/description/img/translate.svg new file mode 100644 index 0000000..af9c8a1 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/translate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/img/wrench-icon.svg b/jazzy_backend_theme/static/description/img/wrench-icon.svg new file mode 100644 index 0000000..174b5a4 --- /dev/null +++ b/jazzy_backend_theme/static/description/img/wrench-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/jazzy_backend_theme/static/description/index.html b/jazzy_backend_theme/static/description/index.html new file mode 100644 index 0000000..e7ba5dc --- /dev/null +++ b/jazzy_backend_theme/static/description/index.html @@ -0,0 +1,780 @@ + + + + + + + app index + + + + + + + + + + +
+ + + +
+
+
+
+ +
+
+
+
+ +
+ Supports: +
+ Community +
+
+
+
+
+ Availability: +
+ Odoo Online +
+
+ Odoo.sh +
+
+ On Premise +
+
+
+
+
+
+ + + + +
+
+ +
+
+ + + + +
+
+
+
+
+

Our Features

+ +

info includes 300+ elements that you may need to create website without + external plugins.

+
+
+
+
+
+
+
+ +

Customising theme

+ +

Jazzy backend theme provides a fully configurable theme settings menu.

+
+ +
+
+
+
+
+ +

Smooth navigation

+ +

Easily accessible sidebar where it reveals the sidebar menu on just a click.

+
+ +
+
+
+
+
+ +

Highly responsive

+ +

Critical highlights of the Jazzy backend theme is that it was genuinely responsive.

+
+ + +
+
+
+
+
+ +

Elegant kanban view

+ +

Colorful & elegant kanban view.

+
+ +
+
+
+
+
+ +

Colourful form view

+ +

Fully modified and colorful form view.

+
+ +
+
+
+
+
+ +

Elegants in view

+ +

Elegant User Interface.

+
+ +
+
+
+
+
+ + +
+
+
+ +
+
+ + + +
+
+
+

Theme Features

+
+
+
+
+ HIGHLIGHT +

App Bar

+

Easily accessible sidebar where it reveals the sidebar + menu on just a click. Moreover, its also fully + customisable with Jazzy backend theme.

+ +
+
+ Grid item +
+ +
+
+ +
+
+
+ HIGHLIGHT +

Kanban view

+

Jazzy Backend Theme gives a colorful + & elegant kanban view, and it's fully + customizable with this theme.

+ +
+
+ Grid item +
+ +
+
+
+ + + +
+
+
+
+ HIGHLIGHT +

Jazzy Backend Theme Settings

+

To improve your experience with Odoo the Jazzy + backend theme provides a fully configurable + theme settings menu.

+ +
+
+ Grid item +
+ +
+
+ +
+
+
+ HIGHLIGHT +

Custom Form view

+

Jazzy Backend theme provides a fully modified and + colorful form view with the full view experience.

+ +
+
+ Grid item +
+ +
+
+
+ + + + +
+
+
+
+ HIGHLIGHT +

Attractive Customizable User Interface

+

It provides fully attractive, + and an elegant User Interface which is + completely customizable.

+ +
+
+ Grid item +
+ +
+
+ +
+
+
+ HIGHLIGHT +

Advanced Searching for App Menus

+

Jazzy Backend Theme gives a more complex and + powerful search than standard search, providing search + options like enterprise edition.

+ +
+
+ Grid item +
+ +
+
+
+ + +
+
+
+
+ +
+ + +
+ + + + + + + +
+
+
+
+

+ Truly
+ Responsive +

+ +
+

One of the critical highlights of + the Hue backend theme is that + it was genuinely responsive; moreover, it provides + an efficient interface to manage a mobile device.

+
    +
  • Appealing card hover style
  • +
  • Detailed product filtering
  • +
  • Modernized mini basket
  • +
  • Cutting-edge single product
  • +
+
+
+
+
+
+
+ +
+ +
+
+
+
+ + + +
+
+
+
+
+ +
+ +
+
+
+
+

+ Stunning
+ Pages +

+ +
+

Jazzy Backend Theme V18 is an Attractive Theme for Your + Odoo 18. This Theme Will Improve + Your Experience With Odoo.

+
    +
  • Visually Stunning Design
  • +
  • Customizable Layouts
  • +
  • User-Friendly Navigation
  • +
+
+
+
+ +
+
+ + + + + + + + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/jazzy_backend_theme/static/description/theme_screenshot.jpg b/jazzy_backend_theme/static/description/theme_screenshot.jpg new file mode 100644 index 0000000..f35c350 Binary files /dev/null and b/jazzy_backend_theme/static/description/theme_screenshot.jpg differ diff --git a/jazzy_backend_theme/static/src/components/app_menu/menu_order.css b/jazzy_backend_theme/static/src/components/app_menu/menu_order.css new file mode 100644 index 0000000..7aa8843 --- /dev/null +++ b/jazzy_backend_theme/static/src/components/app_menu/menu_order.css @@ -0,0 +1,254 @@ +@keyframes fadeIn{ + 0%{ + opacity: 0; + } + 100%{ + opacity: 1; + } +} +o_setting_search { + position: relative; +} +.o_setting_search .searchInput { + height: 28px; + padding: 0px; + border: 0px; + box-shadow: none; + font-weight: 500; +} +.o_setting_search .searchIcon { + color: gray('700'); +} +.o_kanban_renderer{ + background-color: var(--kanban-bg-color); +} +.oe_kanban_global_click{ + border-radius: 15px; +} + .search-container.has-results .search-input { + height: 3em; +} + .search-container.has-results .search-results { + height: calc(100% - 3em); + overflow: auto; + margin-top: 10px; +} + +.o_setting_search.col-md-10{ + padding: 20px; +} +.app-menu { + width: 100%; + display: flex; + flex-wrap: wrap; + padding-left: calc((100vw - 850px) / 2); + padding-right: calc((100vw - 850px) / 2); + +} +.o-menu-search-result.dropdown-item.col-12.ml-auto.mr-auto { + background-repeat: no-repeat; + background-size: contain; + padding-left: 5.5rem; +} +.form-control { + padding: 0 !important; +} +@media (max-width: 1371px){ + +} +@media (max-width:992px) { + +} +@media (max-width:400px) { + +} +.o_main_navbar .o_menu_brand { + text-decoration: none !important; + margin-left: 10px; +} +.o_navbar .o_main_navbar .dropdown-toggle .dropdown-menu .search-container { + padding-left: calc((100vw - 850px) / 2); + padding-right: calc((100vw - 850px) / 2); + padding-top:20px; + padding-bottom:20px; + display: table; +} +.o_apps_menu_opened .o_main_navbar .o_menu_brand{ + display:none; +} +.app_components { + position: absolute; + height: 100vh; + width: 100%; + background: #f5f5f5f0; + z-index: 99; + top: 40px; + display:none; + background: url("../../src/img/background.jpg"), linear-gradient(to bottom, #71639e, #b0adba); +} +.app-menu a{ + flex-basis: 19%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + margin-bottom: 23px; +} +o_setting_search { + position: relative; +} +.o_setting_search .searchInput { + height: 28px; + padding: 0px; + border: 0px; + box-shadow: none; + font-weight: 500; +} +.o_setting_search .searchIcon { + color: gray('700'); +} + .search-container.has-results .search-input { + height: 3em; + display: table; +} + .search-container.has-results .search-results { + height: calc(100% - 3em); + overflow: auto; + margin-top: 10px; +} + +.o_setting_search.col-md-10{ + padding: 20px; +} +.app-menu { + width: 100%; + display: flex; + flex-wrap: wrap; + padding-left: calc((100vw - 850px) / 2); + padding-right: calc((100vw - 850px) / 2); + +} + +.o-menu-search-result.dropdown-item.col-12.ml-auto.mr-auto { + background-repeat: no-repeat; + background-size: contain; + padding-left: 3rem; +} +.form-control { + padding: 0 !important; +} +@media (max-width: 1371px){ + +} +@media (max-width:992px) { + +} +@media (max-width:400px) { + +} +.o_main_navbar .o_menu_brand { + text-decoration: none !important; + margin-left: 10px; +} +.o_navbar .o_main_navbar .dropdown-toggle .dropdown-menu .search-container { + padding-left: calc((100vw - 850px) / 2); + padding-right: calc((100vw - 850px) / 2); + padding-top:20px; + padding-bottom:20px; +} +.o_apps_menu_opened .o_main_navbar .o_menu_brand{ + display:none; +} +.app_components { + position: absolute; + height: 100vh; + width: 100%; + background: #f5f5f5f0; + z-index: 99; + top: 40px; + display:none; + background: url("../../img/background.jpg"), linear-gradient(to bottom, #71639e, #b0adba); +} +.app-menu a{ + flex-basis: 19%; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + margin-bottom: 23px; + cursor:pointer; +} +.app_components .search-input{ + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(0, 0, 0, 0.1); + border-radius: 4px; + width:100%; + background-color: rgba(255, 255, 255, 0.1); + margin-bottom:1rem; + text-shadow: 0 1px 0 rgb(0 0 0 / 50%); +} +.o_navbar .o_main_navbar .o_main-menu-button:hover{ + background:rgba(0, 0, 0, 0.08); + cursor: pointer; +} +@media (max-width: 850px) { + .app_components .search-input { + width:90%; + margin:0 auto; + } + .app-menu { + width:90%; + margin:0 auto; + } +} +@media (max-width: 444px) { + .app-menu{ + width:80%; + } + .app-menu a{ + flex-basis: 25%; + } +} + /* Container styling */ + .search-results { + border-radius: 8px; + padding: 20px; + } + + /* Unordered list styling */ + .search-results ul { + list-style-type: none; /* Remove default bullets */ + padding: 0; /* Remove default padding */ + margin: 0; /* Remove default margin */ + } + + /* List item styling */ + .search-results li { + margin-bottom: 10px; /* Space between items */ + border-radius: 5px; /* Rounded corners */ + padding: 15px; /* Inner padding */ + cursor: pointer; /* Pointer cursor on hover */ + transition: background 0.3s ease; /* Smooth background transition */ + } + + /* Text styling for menu name */ + .search-results li span { + font-size: 16px; + color: var(--app-menu-font-color) !important; + } +.o_main_navbar .o_menu_brand, .o_main_navbar .o_navbar_apps_menu .dropdown-toggle, .o_main_navbar .o_nav_entry, .o_main_navbar .dropdown-toggle:not(.o-dropdown-toggle-custo), .o_main_navbar .o_menu_toggle { + color: var(--app-menu-font-color) !important; +} +.o_main_navbar .o_menu_brand, .o_main_navbar .o_navbar_breadcrumbs, .o_main_navbar .o_navbar_breadcrumbs .btn { +color: var(--app-menu-font-color) !important; +} + /* Hover effect for each list item */ + .search-results li:hover { + background-color: #007bff; /* Change background color on hover */ + color: #fff; /* Change text color on hover */ + border-color: #007bff; /* Change border color on hover */ + } + + /* Hover effect for the text inside the list item */ + .search-results li:hover span { + color: #fff; /* Change text color on hover */ + } diff --git a/jazzy_backend_theme/static/src/components/app_menu/search_apps.js b/jazzy_backend_theme/static/src/components/app_menu/search_apps.js new file mode 100644 index 0000000..3df9704 --- /dev/null +++ b/jazzy_backend_theme/static/src/components/app_menu/search_apps.js @@ -0,0 +1,268 @@ +/** @odoo-module */ +import { NavBar } from "@web/webclient/navbar/navbar"; +import { registry } from "@web/core/registry"; +import { fuzzyLookup } from "@web/core/utils/search"; +import { computeAppsAndMenuItems } from "@web/webclient/menus/menu_helpers"; +import { useService } from "@web/core/utils/hooks"; +import { onMounted, useRef, useState} from "@odoo/owl"; +import { patch } from "@web/core/utils/patch"; + +patch(NavBar.prototype, { + // To modify the Navbar properties and functions. + setup() { + super.setup() + this._search_def = this.createDeferred(); + this.search_container = useRef("search-container"); + this.search_input = useRef("search-input"); + this.search_result = useRef("search-results"); + this.app_menu = useRef("app-menu"); + this.sidebar_panel = useRef("sidebar_panel"); + this.app_components = useRef("app_components"); + this.state = useState({...this.state, menus: [], searchQuery: ""}) + let { apps, menuItems } = computeAppsAndMenuItems(this.menuService.getMenuAsTree("root")); + this._apps = apps; + this._searchableMenus = menuItems; + this.fetch_data() + onMounted(() => { + this.setClass() + }) + }, + createDeferred() { + let deferred = {}; + + deferred.promise = new Promise((resolve, reject) => { + deferred.resolve = resolve; + deferred.reject = reject; + }); + + return deferred; +}, + async fetch_data() { + // To fetch colors from database. + this.orm = useService("orm") + var result = await this.orm.call("res.config.settings", "config_color_settings", [0]) + if (result.primary_accent !== false){ + document.documentElement.style.setProperty("--primary-accent",result.primary_accent) + } + if (result.appbar_color !== false){ + document.documentElement.style.setProperty("--app-bar-accent",result.appbar_color) + } + if (result.primary_hover !== false){ + document.documentElement.style.setProperty("--primary-hover",result.primary_hover) + } + if (result.full_bg_img !== false) { + var imageUrl = 'url(data:image/png;base64,' + result.full_bg_img + ')'; + var appComponentsDivs = document.getElementsByClassName('app_components'); + + for (var i = 0; i < appComponentsDivs.length; i++) { + appComponentsDivs[i].style.backgroundImage = imageUrl; + } + } + if (result.appbar_text !== false){ + document.documentElement.style.setProperty("--app-menu-font-color",result.appbar_text) + } + if (result.secondary_hover !== false){ + document.documentElement.style.setProperty("--secondary-hover",result.secondary_hover) + } + if (result.kanban_bg_color !== false) { + document.documentElement.style.setProperty("--kanban-bg-color", result.kanban_bg_color) + } + }, + setClass() { + // Set variable for html elements. + this.$search_container = this.search_container; + this.$search_input = this.search_input; + this.$search_results = this.search_result; + this.$app_menu = this.app_menu; + }, + _searchMenusSchedule() { + this.$search_results.el.classList.remove("o_hidden"); + this.$app_menu.el.classList.add("o_hidden"); + this._search_def = this.createDeferred(); + this._searchMenus(); + }, + _searchMenus() { + // App menu search function + var query = this.state.searchQuery; + if (query === "") { + this.$search_container.el.classList.remove("has-results"); + this.$search_results.el.classList.add("o_hidden") + this.$app_menu.el.classList.remove("o_hidden"); + return; + } + var results = []; + fuzzyLookup(query, this._apps, (menu) => menu.label) + .forEach((menu) => { + results.push({ + category: "apps", + name: menu.label, + actionID: menu.actionID, + id: menu.id, + webIconData: menu.webIconData, + }); + }); + fuzzyLookup(query, this._searchableMenus, (menu) => + (menu.parents + " / " + menu.label).split("/").reverse().join("/") + ).forEach((menu) => { + results.push({ + category: "menu_items", + name: menu.parents + " / " + menu.label, + actionID: menu.actionID, + id: menu.id, + }); + }); + this.state.menus = results + }, + get menus() { + return this.state.menus + }, + handleClick(menu) { + this.app_components.el.nextSibling.style.display = "block"; + this.app_components.el.style.display = "none"; + + this.sidebar_panel.el.style.display = "block"; + this.app_menu.el.classList.remove('o_hidden'); + + let children = this.app_components.el.parentElement.children; + let oNavbar = null; + + for (let i = 0; i < children.length; i++) { + if (children[i].classList.contains('o_navbar')) { + oNavbar = children[i]; + break; + } + } + + let navChild = oNavbar.children[0].children; + for (let i = 0; i < navChild.length; i++) { + if (navChild[i].classList.contains('o_menu_brand')) { + navChild[i].classList.remove('d-none'); + navChild[i].classList.add('d-block'); + } + if (navChild[i].classList.contains('o_menu_sections')) { + navChild[i].classList.remove('d-none'); + navChild[i].classList.add('d-block'); + } + } + + if (menu) { + this.menuService.selectMenu(menu) + .then(() => { + // Trigger page refresh after the menu is loaded + location.reload(); + }) + .catch(err => { + console.error('Menu navigation failed:', err); + }); + } + }, + OnClickMainMenu() { + // To show search screen + if (this.app_components.el.style.display === "" || this.app_components.el.style.display === "none" ) { + let children = this.app_components.el.parentElement.children; + let oNavbar = null; + for (let i = 0; i < children.length; i++) { + if (children[i].classList.contains('o_navbar')) { + oNavbar = children[i]; + break; + } + } + let navChild = oNavbar.children[0].children + for (let i = 0; i < navChild.length; i++) { + if (navChild[i].classList.contains('o_menu_brand')) { + navChild[i].classList.add('d-none') + } + if (navChild[i].classList.contains('o_menu_sections')) { + navChild[i].classList.add('d-none') + } + } + this.app_components.el.style.transition = "opacity 0.25s" + this.app_components.el.style.opacity="1" + this.app_components.el.style.display = "block" + this.app_components.el.nextSibling.style.display = "none" + this.sidebar_panel.el.style.display = "none" + } else { + this.app_components.el.style.transition = "opacity 0.05s"; + this.app_components.el.style.opacity = "0"; + setTimeout(() => { + this.app_components.el.style.display = "none"; + }, 50); + this.app_components.el.nextSibling.style.display = "block" + this.sidebar_panel.el.style.display = "block" + let children = this.app_components.el.parentElement.children; + let oNavbar = null; + for (let i = 0; i < children.length; i++) { + if (children[i].classList.contains('o_navbar')) { + oNavbar = children[i]; + break; + } + } + let navChild = oNavbar.children[0].children + for (let i = 0; i < navChild.length; i++) { + if (navChild[i].classList.contains('o_menu_brand')) { + navChild[i].classList.remove('d-none') + } + if (navChild[i].classList.contains('o_menu_sections')) { + navChild[i].classList.remove('d-none') + } + } + } + }, + onNavBarDropdownItemSelection(app) { + // To go to app menu + this.app_components.el.style.display = "none"; + this.app_components.el.nextSibling.style.display = "block" + this.sidebar_panel.el.style.display = "block" + let children = this.app_components.el.parentElement.children; + let oNavbar = null; + for (let i = 0; i < children.length; i++) { + if (children[i].classList.contains('o_navbar')) { + oNavbar = children[i]; + break; + } + } + let navChild = oNavbar.children[0].children + for (let i = 0; i < navChild.length; i++) { + if (navChild[i].classList.contains('o_menu_brand')) { + navChild[i].classList.add('d-flex') + navChild[i].classList.remove('d-none') + } + if (navChild[i].classList.contains('o_menu_sections')) { + navChild[i].classList.add('d-flex') + navChild[i].classList.remove('d-none') + } + } + if (app) { + this.menuService.selectMenu(app); + + } + }, + refreshNavBar() { + // Find the navbar element + let children = this.app_components.el.parentElement.children; + let oNavbar = null; + + // Locate the navbar component + for (let i = 0; i < children.length; i++) { + if (children[i].classList.contains('o_navbar')) { + oNavbar = children[i]; + break; + } + } + + if (oNavbar) { + let navChild = oNavbar.children[0].children; + // Ensure the navbar sections are displayed correctly + for (let i = 0; i < navChild.length; i++) { + if (navChild[i].classList.contains('o_menu_brand')) { + navChild[i].classList.remove('d-none'); + navChild[i].classList.add('d-block'); + } + if (navChild[i].classList.contains('o_menu_sections')) { + navChild[i].classList.remove('d-none'); + navChild[i].classList.add('d-block'); + } + } + } + } +}) diff --git a/jazzy_backend_theme/static/src/components/app_menu/side_menu.xml b/jazzy_backend_theme/static/src/components/app_menu/side_menu.xml new file mode 100644 index 0000000..d88f00e --- /dev/null +++ b/jazzy_backend_theme/static/src/components/app_menu/side_menu.xml @@ -0,0 +1,120 @@ + + + + +
+ +
+
+
+ + + +
+
+
+
+
+
+ +
+
+ +
+
+
+
    + +
  • + +
  • +
    + +
+ +
+
+
+ + + + + + + +
+
+
+
+ + + + + + + + + + + + +
diff --git a/jazzy_backend_theme/static/src/img/background.jpg b/jazzy_backend_theme/static/src/img/background.jpg new file mode 100644 index 0000000..d1a3662 Binary files /dev/null and b/jazzy_backend_theme/static/src/img/background.jpg differ diff --git a/jazzy_backend_theme/static/src/layout/style/color.css b/jazzy_backend_theme/static/src/layout/style/color.css new file mode 100644 index 0000000..fc8743d --- /dev/null +++ b/jazzy_backend_theme/static/src/layout/style/color.css @@ -0,0 +1,14 @@ +:root{ + --primary_accent: black !default; + --secondary_accent: #ffffff !default; + --inverse_accent: #ffffff !default; + --kanban-bg-color:#f7f7f7; + --o-kanban-color-border-width: 8px; + --selected_row: #ffffff !default; + --bg_white: #ffffff !default; + --f_color: #555b6d !default; + --color_white : #ffffff !default; + --primary_hover: #00376e !default; + --light_hover: #d5d5d5; + --fullscreen-bg-color: #C5F0FC !important; +} diff --git a/jazzy_backend_theme/static/src/layout/style/layout_colors.scss b/jazzy_backend_theme/static/src/layout/style/layout_colors.scss new file mode 100644 index 0000000..6e62a90 --- /dev/null +++ b/jazzy_backend_theme/static/src/layout/style/layout_colors.scss @@ -0,0 +1,30 @@ +$primary_accent: var(--primary-accent) !important; +$secondary_accent: var(--secondary-accent) !important; +$inverse_accent: var(--inverse-accent) !important; +$kanban-bg-color:var(--kanban-bg-color) !important; +$o-kanban-color-border-width: var(--o-kanban-color-border-width) !important; +$selected_row: var(--selected-row) !important; +$bg_white: var(--bg-white) !important; +$f_color: var(--f-color) !important; +$color_white : var(--color-white) !important; +$primary_hover: var(--primary-hover) !important; +$light_hover: var(--light-hover) !important; +$fullscreen-bg-color: var(--fullscreen-bg-color) !important; + +:root{ + --primary-accent: #004589 ; + --primary-accent-border: #ffffff; + --app-bar-accent: #ffffff; + --full-screen-bg: url(/jazzy_backend_theme/static/src/img/background.jpg) ; + --kanban-bg-color:#f7f7f7; + --o-kanban-color-border-width: 8px !important; + --selected-row: #ffffff !important; + --app-menu-font-color:#ffffff; + --bg-white: #ffffff !important; + --f-color: #555b6d !important; + --color-white : #ffffff !important; + --primary-hover: #00376e; + --light-hover: #d5d5d5 ; + --secondary-hover:#ffffff; + --fullscreen-bg-color: #C5F0FC !important; +} diff --git a/jazzy_backend_theme/static/src/layout/style/layout_style.scss b/jazzy_backend_theme/static/src/layout/style/layout_style.scss new file mode 100644 index 0000000..329625f --- /dev/null +++ b/jazzy_backend_theme/static/src/layout/style/layout_style.scss @@ -0,0 +1,506 @@ +.bg-primary{ + background-color: var(--primary-accent) !important; +} +.o_field_widget.o_field_many2one .o_external_button { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + flex: 0 0 auto; + padding-left:1%; + padding-right:0.5%; + margin-left: 2px; + font-size: 19px; + color: #7C7BAD; + border: none; +} +.app_bar .app_container a:hover{ + background:var(--secondary-hover) !important; +} +.fullscreen-menu{ + height: calc(100vh - 46px); + background: var(--full-screen-bg); + background-size: cover; + background-repeat: no-repeat; + min-width: 100%; + overflow-y: auto !important; + overflow-x: hidden !important; + margin-top: 0; + position: fixed; + top: 46px; + left: -1px; + padding: 2.5rem 0; +} +.a_app_menu_title{ + color: var(--app-menu-font-color) !important; +} +.o_main_navbar{ + background-color:var(--primary-accent) !important; + border-bottom: 1px solid var(--primary-hover) !important; +} +.dropdown-toggle { + &:hover{ + background: var(--primary-hover) !important; + } +} +.o-menu-search-result.dropdown-item.col-12.ml-auto.mr-auto { + + background-repeat: no-repeat; + background-size: 23px; + padding-left: 40px; + margin-bottom: 5px; + +} +//Top bar + +//Icon color +.o_searchview .o_searchview_facet .o_searchview_facet_label { + background-color: var(--primary-accent) !important; +} +.btn-secondary { + color: #fff !important; + background-color: var(--primary-accent) !important; + border-color: var(--primary-accent) !important; + margin:0 5px 0 0; + &:hover{ + background-color: var(--primary-hover) !important; + } +} +.btn-outline-primary { + border-color: var(--primary-hover); + color: var(--primary-hover); +} +.btn-outline-primary:hover { + color: #fff; + background-color: var(--primary-hover); + border-color: var(--primary-hover); +} +.o_searchview { + background-color: var(--bg-white) !important; + border: 1px solid #ccc; + border-radius: 10px; + padding: 1px 25px 3px 5px; +} +.o_searchview .o_searchview_input_container { + display: flex; + flex-flow: row wrap; + position: relative; + border-radius: 10px; +} +.o_searchview .o_searchview_input_container .o_searchview_facet { + display: flex; + -webkit-box-flex: 0; + flex: 0 0 auto; + margin: 1px 3px 0 0; + max-width: 100%; + border-radius: 10px; + position: relative; +} +.o_searchview .o_searchview_facet .o_facet_values{ + border-radius: 10px !important; + background-color: #e2e2e0 !important; +} +.o_searchview .o_searchview_input_container .o_searchview_facet .o_searchview_facet_label { + align-items: center; + color: var(--bg-white) !important; + -webkit-box-flex: 0; + flex: 0 0 auto; + padding: 0 3px; + border-radius: 10px; + display: flex; + max-width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: top; +} +// Module icon +.oe_module_icon { + width: 70px; + max-height: 70px; + max-width: 23%; + float: left; + border-radius: 10px; +} +.o_base_settings .o_setting_container .settings_tab .selected{ + background-color: var(--primary-hover); +} +.app_bar .app_container .scroll_container .app_items_wrapper .app_items{ + background-color:var(--app-bar-accent); +} +.app_bar .app_container .scroll_container .app_items_wrapper .app_items .o-app-icon { + width: 32px; + height: 32px; + border-radius: 5px; +} +// Photo +.o_kanban_view .o_kanban_record.o_kanban_record_has_image_fill .o_kanban_image_fill_left { + margin-top: -8px; + margin-bottom: -8px; + margin-left: -8px; + border-radius: 10px; +} +// Drowpdowm +.o-dropdown.dropup > .o-dropdown--menu, .o-dropdown.dropdown > .o-dropdown--menu, .o-dropdown.dropleft > .o-dropdown--menu, .o-dropdown.dropright > .o-dropdown--menu { + left: auto; + right: auto; + margin-left: 0; + margin-right: 0; + border-radius: 10px; +} +// Kanban +.o_kanban_view.o_kanban_grouped .o_kanban_record, .o_kanban_view.o_kanban_grouped .o_kanban_quick_create { + width: 100%; + margin-left: 0; + margin-right: 0; + border-radius: 10px; +} +.o_form_view .oe_button_box .btn.oe_stat_button { + color: var(--primary-accent) !important; + height: 44px; + padding: 0 6px 0 0 !important; + text-align: left; + white-space: nowrap; + background-color: transparent; + opacity: 0.8; + border-radius: 0px; + margin-bottom: 0; +} +.o_dashboards .o_website_dashboard div.o_box { + color: rgba(73, 80, 87, 0.76); + background-color: white; + background-size: cover; + margin-top: 16px; + position: static; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3); + border-radius: 10px; +} +// Button +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: var(--primary-accent) !important; + background-color: var(--primary-accent) !important; +} +// Current date calender +.o_calendar_view .o_calendar_widget .fc-timeGridDay-view .fc-widget-header.fc-today, .o_calendar_view .o_calendar_widget .fc-timeGridWeek-view .fc-widget-header.fc-today { + border-radius: 25px; + background: var(--primary-accent) !important; + color: var(--bg-white) !important; +} +// Tabs Start +.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { + border: none; + border-bottom: solid; + font-weight: bold; + background: var(--primary-accent) !important; + color: var(--bg-white) !important; + border-radius: 5px,50px,5px,50px; +} +// Website +.o_dashboards .o_website_dashboard .o_dashboard_common .o_inner_box { + padding-top: 10px; + text-align: center; + border: 1px solid var(--bg-white) !important; + height: 80px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + cursor: pointer; + color: var(--color-white) !important; + background-color: var(--primary-accent) !important; + border-radius:10px; + &:hover{ + background-color: var(--primary-hover) !important; + } +} +.o_purchase_dashboard .table > thead > tr > td.o_main, .o_purchase_dashboard .table tbody > tr > td.o_main { + background-color: var(--primary-accent) !important; + border-radius:10px; +} +.dropdown-menu.show { + display: block; + border-radius: 0; +} +.o_mail_preview .o_mail_preview_image.o_mail_preview_app > img { + border-radius: 10px; +} +// Graph +.o_calendar_view .fc-view .fc-event.o_calendar_color_3:not(.o_calendar_hatched):not(.o_calendar_striked) { + background: var(--primary-hover) !important; + border-radius: 10px; +} +//Event +.text-center { + text-align: center !important; + border-radius: 10px; +} +// Form control icons +.o_form_view .oe_button_box .oe_stat_button .o_button_icon { + color: var(--primary-accent) !important; +} +// Small icons +.o_search_panel .o_search_panel_category .o_search_panel_section_icon { + color: var(--primary-accent) !important; +} +.badge-primary { + color: var(--color-white) !important; + background-color: var(--primary-accent) !important; +} +// Wizard +.modal.o_technical_modal .modal-content { + border-radius: 10px; +} +// Navbar +.nav-container{ + height: auto !important; + background: transparent !important; + float: none !important; + padding: 0 !important; + width: 850px !important; + margin: 0 auto !important; +} +.o_nav_entry{ + &:hover{ + background-color: var(--primary-hover) !important; + } +} + .app-menu{ + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + margin: 0 auto; + margin-right: 70px; + +} +//Responsive +.o_MobileMessagingNavbar_tab.o-active{ + color: var(--primary-accent) !important; +} +@media (max-width: 768px){ + .app-menu{ + width: 100%; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + justify-content: flex-start; + margin: 0 auto; + } + .o_cp_bottom{ + flex-wrap: wrap !important; + } + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.disabled { + + margin-right: 10px; + } + .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.disabled:not(.btn-primary), .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.disabled:not(.btn-primary):hover, .o_form_view .o_form_statusbar > .o_statusbar_status > .o_arrow_button.disabled:not(.btn-primary):focus + { + margin-left:10px; + } + .o_form_view .o_form_statusbar > .o_field_widget { + margin-left: -24px !important; + margin-top: 1px !important; + } + .o_form_view .o_form_statusbar{ + flex-direction: column !important; + padding-left: 0px !important; + } +} +@media (min-width: 768px){ + .o_form_view .o_form_sheet_bg > .o_form_sheet { + border-radius: 10px; + } + .search-container{ + width: 750px; + margin: 0 auto; + } +} +@media (max-width:767px){ + .o_form_view .o_group{ + width:100% !important; + } + .dropdown-menu.show { + display: block; + border-radius:0; + } + .o_control_panel .breadcrumb > li { + display: inline-block; + max-width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + vertical-align: top; + } + .o_control_panel .o_cp_top_right { + min-height: 30px; + max-width: 100%; + margin-left: 10%; + } + .o_form_view .o_form_sheet_bg > .o_form_sheet { + min-width: 100%; + max-width: 100%; + min-height: 100%; + border: 1px solid #c8c8d3; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + background: white; + margin: 4.8px auto; + padding: 24px; + padding-right: 16px; + padding-left: 16px; + } + .oe_topbar_name{ + display:none; + } + .nav-container { + position: relative; + width: 100vw !important; + display: flex; + align-items: start; + margin-top: 2rem; + } + .o_cp_top{ + flex-wrap: wrap !important; + } + .o_cp_top_left, .o_cp_searchview{ + width: 100%; + } + .o_cp_top_right{ + width: 100%; + margin: 1.5rem auto; + margin-left: 0 !important; + } + //Search Panel + .o_content o_controller_with_searchpanel, .o_controller_with_searchpanel{ + display:flex !important; + flex-direction: column !important; + } + .o_search_panel{ + display: flex; + overflow-x: auto; + overflow-y: auto; + height: 200px; + width: 100%; + section{ + margin-right: 1rem; + } + } + .o_search_panel section { + width: 100% !important; + } + .o_setting_container{ + display: flex; + flex-direction: column; + } + .settings_tab{ + display: flex; + flex-direction: row !important; + overflow-x: auto; + height: 40px; + } + .settings{ + margin-top: 1.5rem; + } +} +@media (max-width:524px){ + .o_control_panel .o_cp_bottom_right > .o_cp_pager + { + margin-top:5px; + } + div.app-menu *::before{ + box-sizing:none; + } + div.app-menu *::after{ + box-sizing:none; + } +} +@media (max-width:493px){ + .o_control_panel .o_cp_bottom_left > .o_cp_action_menus { + margin-left: 0px; + padding-right: 10px; + } +} +// V17 Fixes +@media (min-width:1096px){ + .app_components .search-input { + width:725px !important; + } +} +@media (max-width:768px){ + .app_components .search-input { + margin-left: 60px !important; + } + .search-container.has-results .search-results { + margin-left: 60px !important; + } + .o_field_statusbar > .o_statusbar_status { + width: 314px !important; + } + .o_form_view .o_cp_buttons { + overflow: auto !important; + } +} +.o_main_navbar .o_menu_sections .o_nav_entry, .o_main_navbar .o_menu_sections .dropdown-toggle { + background: var(--primary-accent) !important; +} +.btn-primary { + background: var(--primary-accent) !important; + color: white !important; +} +.btn-primary:hover { + background: var(--primary-hover) !important; +} +.o_statusbar_status .o_arrow_button.btn-secondary { + margin: 0px !important; + color: var(--primary-accent) !important; + background-color: white !important; +} +.o_statusbar_status .o_arrow_button.btn-secondary.o_arrow_button_current { + color: white !important; + background-color: var(--primary-accent) !important; + font-family: inherit !important; +} +.o_statusbar_status .o_arrow_button.btn-secondary::after { + border-left-color: white !important; +} +.o_statusbar_status .o_arrow_button.btn-secondary.o_arrow_button_current::after { + border-left-color: var(--primary-accent) !important; +} +.o_statusbar_status .o_arrow_button.btn-secondary::before { + border-left-color: var(--primary-accent) !important; +} +.search-results a{ + color: white !important; + cursor: pointer !important; +} +.app_components { + background-repeat: no-repeat !important; + background-size: cover !important; +} +.nav-link, o_form_view .o_form_uri, .o_form_view .o_form_uri > span:first-child { + color: var(--primary-accent) !important; +} + +.form-check-input:checked { + background-color: var(--primary-accent) !important; + border-color: var(--primary-accent) !important; +} +a, .btn { + color: var(--primary-accent); + +} +.btn:hover { + color: var(--primary-hover); + background-color: var(--primary-accent); +} +.text-bg-primary { + background-color: var(--primary-accent) !important; +} +.btn-info { + color: white !important; +} +.dropdown-toggle:hover { + color: white !important; +} +.o_searchview_icon { + margin-left: 8px; +} +.text-action { + color: var(--primary-accent) !important; +} diff --git a/jazzy_backend_theme/static/src/layout/style/login.scss b/jazzy_backend_theme/static/src/layout/style/login.scss new file mode 100644 index 0000000..b1b8089 --- /dev/null +++ b/jazzy_backend_theme/static/src/layout/style/login.scss @@ -0,0 +1,156 @@ +#wrapwrap > main { + background: #f8f8fb; +} +.navbar { + background: #fff !important; +} + +body { + font-family: 'Poppins', sans-serif !important; +} +body.bg-100 { + background-color: #000000 !important; +} +.card.o_database_list { + align-items: center; + max-width: 450px !important +} +.card.o_database_list .card-body { + background-color: #fff !important; + border-radius: 5px !important; + -webkit-box-shadow: 0 0.75rem 1.5rem rgba(18,38,63,.03) !important; + box-shadow: 0 0.75rem 1.5rem rgba(18,38,63, .03) !important; +} +.o_main_navbar .o_menu_sections { + flex-wrap: w +} +a { + color: #556ee6; + text-decoration: none; +} +a:hover { + color: #4458b8; + text-decoration: underline; +} +.alert-info { + color: #306391; + background-color: #dcedfc; + border-color: #cbe4fb; +} +.oe_login_form button.btn-link { + color: #495057; + font-weight: 500; + font-size: 14px !important; +} +.oe_login_form button.btn-link:hover { + color: #171a1c; +} +// Login button starts +.btn-primary { + color: #fff; + background-color: #556ee6; + border-color: #556ee6; +} +.btn-primary:hover { + color: #fff; + background-color: #485ec4; + border-color: #4458b8; +} +.btn-outline-primary { + border-color: #556ee6; + color: #556ee6; +} +.btn-outline-primary:hover { + color: #fff; + background-color: #556ee6; + border-color: #556ee6; +} +.btn-check:active+.btn-primary, +.btn-check:checked+.btn-primary, +.btn-primary.active,.btn-primary:active, +.show>.btn-primary.dropdown-toggle { + color: #fff; + background-color: #4458b8 !important; + border-color: #4053ad !important; +} +.btn-check:focus+.btn-primary, .btn-primary:focus { + color: #fff; + background-color: #485ec4 !important; + border-color: #4458b8 !important; + -webkit-box-shadow: 0 0 0 .15rem rgba(111,132,234,.5) !important; + box-shadow: 0 0 0 .15rem rgba(111,132,234,.5) !important; +} +.oe_login_form .btn { + display: inline-block; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + padding: .47rem .75rem; + border-radius: .25rem; + -webkit-transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out; + transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; +} +.btn-secondary { + color: #fff !important; + background-color: #74788d !important; + border-color: #74788d !important; +} +.btn-secondary:hover { + color: #fff !important; + background-color: #636678 !important; + border-color: #5d6071 !important; +} +.btn-secondary:active { + color: #fff; + background-color: #5d6071 !important; + border-color: #575a6a !important; +} +.btn-secondary i,.btn-secondary span { + color: #fff !important; +} +.btn-fill-secondary:focus, .btn-secondary:focus, .btn-fill-secondary.focus, .focus.btn-secondary { + box-shadow: none !important; +} +// Login button ends + +// Input starts +.oe_login_form input { + display: block; + width: 100%; + height: 40px !important; + padding: 10px 20px; + font-size: 13px; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da !important; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + border-radius: .25rem; + -webkit-transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out; + box-shadow: none !important; + margin-bottom:10px !important; +} +form label { + font-weight: 400 !important; +} +.oe_login_form a.btn.btn-secondary { + height: 40px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.35rem 0.75rem; +} +.oe_login_form a.btn.btn-secondary i.fa.fa-database { + margin-left: 5px; +} diff --git a/jazzy_backend_theme/static/src/layout/style/sidebar.scss b/jazzy_backend_theme/static/src/layout/style/sidebar.scss new file mode 100644 index 0000000..538648f --- /dev/null +++ b/jazzy_backend_theme/static/src/layout/style/sidebar.scss @@ -0,0 +1,61 @@ +#sidebar_panel { + height: calc(100% - 0%); + position: fixed; + background-color: var(--app-bar-accent); + width: 50px; + overflow-y: scroll; + -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ + scrollbar-width: none; /* Hide scrollbar for Firefox */ + z-index: 999; +} +#sidebar_panel::-webkit-scrollbar { + display: none; /* Hide scrollbar for Chrome, Safari and Opera */ +} +.sidebar_panel .sidebar { + padding: 0; + white-space: nowrap; + padding-bottom: 20px; + padding-top: 5px; +} +.sidebar_panel .sidebar .sidebar_menu { + list-style: none; + margin: 0; + padding: 0; +} +.sidebar_panel .sidebar .sidebar_menu li { + margin: 0; + padding: 0; + border: 0px; + display: block; +} +.dropdown-item{ + padding: 10px 10px 10px 10px; +} +.o_main_navbar .o_menu_brand { + text-decoration: none !important; + margin-left: 10px; +} +.sidebar_panel .sidebar .sidebar_menu li a { + margin: 0; + border: 0px; + display: block; + cursor: pointer; + overflow: hidden; + color: #ffffff; + font-size: 13px; + transition:.3s all; +} +.sidebar_panel .sidebar .sidebar_menu li:hover a { + background: var(--secondary-hover) !important; + color: #fff; +} +.sidebar_panel .sidebar .sidebar_menu li a .sidebar_img { + width: 30px; + border-radius:5px; +} +html .o_web_client > .o_action_manager{ + margin-left:50px; +} +.sidebar_panel .sidebar .sidebar_menu li .nav-link { + padding:10px 10px 10px 10px; +} diff --git a/jazzy_backend_theme/views/layout_templates.xml b/jazzy_backend_theme/views/layout_templates.xml new file mode 100644 index 0000000..7c5cc4e --- /dev/null +++ b/jazzy_backend_theme/views/layout_templates.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/jazzy_backend_theme/views/res_config_settings_views.xml b/jazzy_backend_theme/views/res_config_settings_views.xml new file mode 100644 index 0000000..5f0ea93 --- /dev/null +++ b/jazzy_backend_theme/views/res_config_settings_views.xml @@ -0,0 +1,47 @@ + + + + res.config.settings.view.form.inherit.jazzy.backend.theme + res.config.settings + + + + + + +
+ Background Image + +
+
+ App Bar Background Color + +
+
+ App Menu Text Color + +
+
+ AppBar Hover Color + +
+
+ +
+ Navbar Background Color + +
+
+ Primary Button Hover + +
+
+ Kanban Background Color + +
+
+
+
+
+
+