// // This file regroups all the rules which apply to field widgets wherever they // are in the DOM, in both community and enterprise versions. // // Invalid .o_field_invalid { &.o_input, .o_input, &.o_form_label { color: @brand-danger!important; border-color: @brand-danger!important; // enterprise o_required_modifier rule overrides this without !important } } // Empty .o_field_empty { display: none!important; } // Numbers .o_field_number { white-space: nowrap; } //------------------------------------------------------------------------------ // Fields //------------------------------------------------------------------------------ .o_field_widget { // Default display and alignment of widget and internal &, input.o_input { display: inline-block; text-align: inherit; } // Block fields &.note-editor, &.oe_form_field_html, &.oe_form_field_html_text, &.oe_form_field_text, &.o_field_domain, &.o_graph_linechart, &.o_graph_barchart { display: block; } // Flex fields (inline) &.o_field_many2one, &.o_field_radio, &.o_field_many2manytags, &.o_field_percent_pie, &.o_field_monetary, &.o_field_binary_file { @media (min-width: @screen-sm-min) { .o-inline-flex-display(); } > span, > button { .o-flex(0, 0, auto); } } // Dropdowns input (many2one, ...) .o_input_dropdown { .o-flex(1, 1, auto); position: relative; width: 100%; > input { height: 100%; padding-right: 15px; cursor: pointer; } .o_dropdown_button { .o-position-absolute(0, 0); pointer-events: none; &:after { .o-caret-down; } } } // Text &.o_field_text, &.oe_form_field_text .oe_form_text_content { width: 100%; white-space: pre-wrap; } // Monetary &.o_field_monetary { &.o_input { .o-align-items(baseline); > input { width: 100px; .o-flex(1, 0, auto); } } } // Many2many tags &.o_field_many2manytags { .o-flex-flow(row, wrap); .o-align-items(baseline); > .o_field_widget { .o-flex(1, 0, 100px); position: initial; max-width: 100%; } > .badge { .o-flex(0, 0, auto); border: 0; font-size: 12px; color: white; cursor: pointer; > .o_badge_text { .o-text-overflow(inline-block); max-width: 200px; } // o-kanban-colorpicker without customizing // '&:first-child > a::before' (transparent red-crossed colorpick) .o-tag-colorpicker() { @o-tag-colorpicker-padding-right: @odoo-dropdown-hpadding - 2 * @o-kanban-inner-hmargin; max-width: 100%; padding: 3px @o-tag-colorpicker-padding-right 3px @odoo-dropdown-hpadding; > li { display: inline-block; margin: @o-kanban-inner-hmargin @o-kanban-inner-hmargin 0 0; border: 1px solid white; box-shadow: 0 0 0 1px @gray-lighter-dark; > a { display: block; &::after { content: ""; display: block; width: 20px; height: 15px; } } &:last-of-type { box-shadow: 0 0 0 0px white; // remove grey border on hide in kanban color: @odoo-main-text-color; } } } > .tagcolor_dropdown_menu { min-width: 150px; // down from 160px of .dropdown-menu margin-right: 0px; // cancel right margin of .dropdown-menu } > .o_colorpicker > ul { .o-tag-colorpicker(); white-space: normal; } .o_delete { cursor: pointer; } } .o-tag-color(@size: 0) when (@size = 0) { .o_tag_color_@{size} { & { background-color: white; color: ~"@{odoo-color-@{size}}"; box-shadow: inset 0 0 0 2px ~"@{odoo-color-@{size}}"; } &::after { background-color: ~"@{odoo-color-@{size}}"; } } .o-tag-color(@size + 1); } .o-tag-color(@size: 0) when (@size > 0) and (@size < @odoo-nb-ui-color) { .o_tag_color_@{size} { &, &::after { background-color: ~"@{odoo-color-@{size}}"; } } .o-tag-color(@size + 1); } .o-tag-color(); } // Stars &.o_priority { display: inline-block; padding: 0; margin: 0; vertical-align: baseline; > .o_priority_star { display: inline-block; font-size: 1.35em; &:hover, &:focus { text-decoration: none; outline: none; } + .o_priority_star { padding-left: 5px; } &.fa-star-o { color: @odoo-main-color-muted; } &.fa-star { color: gold; } } } // Favorite &.o_favorite { i.fa { font-size: 16px; } i.fa-star-o { color: @odoo-main-color-muted; &:hover { color: gold; } } i.fa-star { color: gold; } } // Specific success color for toggle_button widget .fa.o_toggle_button_success { color: @brand-success; } // Handle widget &.o_row_handle { cursor: ns-resize; } // Radio buttons &.o_field_radio { .o_radio_input { outline: none; } .o_radio_item { .o-flex(0, 0, auto); .o-flex-display(); .o-align-items(center); > input { .o-flex(0, 0, auto); margin: 0 @odoo-form-spacing-unit 0 0; } > label { margin: 0; } } &.o_horizontal { .o_radio_item { margin-right: @odoo-form-spacing-unit * 2; } } &.o_vertical { .o-flex-flow(column, nowrap); .o_radio_item { margin-bottom: @odoo-form-spacing-unit; } } } // Percent pie &.o_field_percent_pie { .o-align-items(center); > .o_pie { position: relative; display: inline-block; vertical-align: middle; margin-right: 10px; border-radius: 100%; overflow: hidden; background-color: @odoo-brand-optional; &:after { // Outside pie border to go over border-radius irregularities content: " "; .o-position-absolute(0, 0); width: 100%; height: 100%; border-radius: 100%; } .o_mask { .o-position-absolute(0, 0); .o-transform-origin(0); width: 50%; height: 100%; background-color: @odoo-view-background-color; &.o_full { background-color: inherit; } } .o_pie_value { .o-flex-display(); .o-justify-content(center); .o-align-items(center); border-radius: 100%; font-weight: 700; color: @odoo-brand-primary; } } } // Ace editor &.o_ace_view_editor { width: 100%; .ace-view-editor { height: 300px; padding: 0 1em; } } // Image &.o_field_image { position: relative; .o_form_image_controls { .o-position-absolute(0, 0); width: 100%; color: white; background-color: @odoo-brand-optional; opacity: 0; transition: opacity ease 400ms; > .fa { margin: 5px; cursor: pointer; } } @media (max-width: @screen-xs-min) { .o_form_image_controls{ position: initial; opacity: 1; > .fa{ width: 50%; padding: 6px; margin: 0px; text-align: center; &.o_select_file_button{ background: @odoo-brand-optional; } &.o_clear_file_button{ background: @brand-danger; } } } } &:hover .o_form_image_controls { opacity: 0.8; } &.o_field_invalid > img { border: 1px solid @brand-danger; } } // Input loading/file .o_form_binary_progress, .o_hidden_input_file .o_input_file { display: none; } // Domain &.o_field_domain { > .o_field_domain_panel { margin-top: 8px; } &.o_inline_mode.o_edit_mode { position: relative; > .o_field_domain_panel { .o-position-absolute(0, 0); margin-top: 0; } } } }