-
diff --git a/addons/web/static/src/views/kanban/kanban_controller.scss b/addons/web/static/src/views/kanban/kanban_controller.scss
index e20d627e845..941a0e5d046 100644
--- a/addons/web/static/src/views/kanban/kanban_controller.scss
+++ b/addons/web/static/src/views/kanban/kanban_controller.scss
@@ -1,7 +1,25 @@
// ------- Kanban View Layout -------
.o_kanban_renderer {
- display: flex;
- align-content: stretch;
+ // ----------------------------------------------------------------------------
+ // Default KanbanView values
+
+ --KanbanGroup-padding-h: #{$o-kanban-group-padding};
+ --KanbanGroup-padding-bottom: #{$o-kanban-group-padding};
+
+ --KanbanRecord-width: #{$o-kanban-default-record-width};
+ --KanbanRecord-margin-v: #{$o-kanban-record-margin};
+ --KanbanRecord-margin-h: #{$o-kanban-record-margin};
+ --KanbanRecord-padding-v: #{$o-kanban-inside-vgutter};
+ --KanbanRecord-padding-h: #{$o-kanban-inside-hgutter};
+ --KanbanRecord-gap-v: #{$o-kanban-inner-hmargin};
+
+ --KanbanRecord--small-width: #{$o-kanban-small-record-width};
+
+ --KanbanRecord__image-width: #{$o-kanban-image-width};
+ --KanbanRecord__image--fill-width: #{$o-kanban-image-fill-width};
+
+ --KanbanRecord__dropdown-gap: #{$border-width};
+ // ----------------------------------------------------------------------------
.dropdown,
.o_kanban_manage_button_section {
@@ -9,49 +27,27 @@
}
@include media-breakpoint-down(md) {
+ --KanbanRecord-padding-h: #{$o-kanban-inside-hgutter * 2};
padding: 0px !important;
}
.o_kanban_record > div,
.o_kanban_quick_create {
- padding: $o-kanban-inside-vgutter $o-kanban-inside-hgutter;
+ padding: var(--KanbanRecord-padding-v) var(--KanbanRecord-padding-h);
border: 1px solid $border-color;
background-color: $o-view-background-color;
-
- @include media-breakpoint-down(md) {
- padding: $o-kanban-inside-vgutter $o-kanban-inside-hgutter-mobile;
- }
- &:focus,
- &:focus-within {
- z-index: 1; // show the shadow on top of the previous & next cards in grouped mode
- outline: none;
- }
}
.o_kanban_quick_create {
- box-shadow: $box-shadow;
- margin: 0 $o-kanban-record-margin ($o-kanban-record-margin * 2);
+ margin-bottom: calc(var(--KanbanRecord-margin-h) * 2);
- .o_form_view {
- padding: 0;
- .o_group.o_inner_group {
- margin: 0;
- }
- }
-
- .o_kanban_cancel {
- color: map-get($grays, "600"); // to make color uniform in community and enterprise
- }
-
- &.o_disabled {
- pointer-events: none;
- opacity: 0.7;
+ .o_form_view .o_group.o_inner_group {
+ margin: 0;
}
}
.o_kanban_record {
position: relative;
- display: inline-block; // Force the creation of a block formatting context to clear float items
min-width: 150px;
margin: 0 0 -1px;
@@ -60,25 +56,23 @@
height: 100%;
}
+ &:focus,
+ &:focus-within {
+ z-index: 1; // show the shadow on top of the previous & next cards in grouped mode
+ }
+
// ------- Kanban Record, v11 Layout -------
// Records colours
> div::after {
content: "";
- @include o-position-absolute(0, auto, 0, 0);
+ @include o-position-absolute($border-width * 2, auto, $border-width * 2, $border-width);
width: $o-kanban-color-border-width;
}
- .o_kanban_record_details {
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- width: 100%;
- }
-
// Inner Sections
.o_kanban_record_top,
.o_kanban_record_body {
- margin-bottom: $o-kanban-inner-hmargin;
+ margin-bottom: var(--KanbanRecord-gap-v);
}
.o_kanban_record_top,
@@ -114,7 +108,7 @@
.o_kanban_record_subtitle {
display: block;
- margin-top: $o-kanban-inner-hmargin * 0.5;
+ margin-top: calc(var(--KanbanRecord-gap-v) * 0.5);
i.fa[role="img"] {
margin-right: 2px;
@@ -172,15 +166,15 @@
.o_kanban_image_fill_left {
position: relative;
- margin-right: $o-kanban-inside-hgutter * 2;
+ margin-right: var(--KanbanRecord-padding-h);
@include media-breakpoint-up(sm) {
margin: {
- top: $o-kanban-inside-vgutter * -1;
- bottom: $o-kanban-inside-vgutter * -1;
- left: $o-kanban-inside-hgutter * -1;
+ top: calc(var(--KanbanRecord-padding-v) * -1);
+ bottom: calc(var(--KanbanRecord-padding-v) * -1);
+ left: calc(var(--KanbanRecord-padding-h) * -1);
}
}
- flex: 1 0 $o-kanban-image-fill-width;
+ flex: 1 0 var(--KanbanRecord__image--fill-width);
min-height: 95px;
background: {
size: cover;
@@ -198,9 +192,9 @@
// Eg. In partners list we use to fill user picture only, keeping the
// default design for company logos.
.o_kanban_image {
- margin-right: $o-kanban-inside-hgutter * 2;
- flex: 0 0 $o-kanban-image-width;
- min-height: $o-kanban-image-width;
+ margin-right: var(--KanbanRecord-padding-h);
+ flex: 0 0 var(--KanbanRecord__image-width);
+ min-height: var(--KanbanRecord__image-width);
align-self: center;
background: {
size: cover;
@@ -208,19 +202,9 @@
position: center;
}
- // On medium screen size, align 'o_kanban_image' to 'o_kanban_image_fill_left' elements.
- @include media-breakpoint-up(md) {
- $fill-notfill-gap: ($o-kanban-image-fill-width - $o-kanban-inside-hgutter * 2) -
- $o-kanban-image-width;
- margin: {
- left: $fill-notfill-gap * 0.5;
- right: $fill-notfill-gap * 2;
- }
- }
-
@include media-breakpoint-down(md) {
- flex-basis: $o-kanban-image-fill-width;
- min-height: $o-kanban-image-fill-width;
+ flex-basis: var(--KanbanRecord__image--fill-width);
+ min-height: var(--KanbanRecord__image--fill-width);
}
// Reset immedialy after div padding
@@ -247,7 +231,6 @@
}
.o_dragged {
- @extend .shadow;
transform: rotate(-3deg);
transition: transform 0.6s, box-shadow 0.3s;
@@ -266,21 +249,25 @@
// ------- v11 Layout + generic layouts (~v10) -------
// Kanban Record - Dropdown
.o_dropdown_kanban {
- @include o-position-absolute($o-kanban-inside-vgutter, $o-kanban-inside-hgutter);
+ @include o-position-absolute(
+ calc(var(--KanbanRecord-padding-v) + var(--KanbanRecord__dropdown-gap)),
+ calc(var(--KanbanRecord-padding-h) + var(--KanbanRecord__dropdown-gap))
+ );
visibility: hidden;
- margin: (-$o-kanban-inside-vgutter) (-$o-kanban-inside-hgutter) 0 0;
+ margin: calc(var(--KanbanRecord-padding-v) * -1)
+ calc(var(--KanbanRecord-padding-h) * -1) 0 0;
@include media-breakpoint-down(md) {
visibility: visible;
}
.dropdown-toggle {
- @include o-kanban-dropdown;
+ @include o-kanban-dropdown(var(--KanbanRecord-padding-h));
}
&.show .dropdown-toggle {
@include o-kanban-dropdown-open;
}
.dropdown-menu {
- margin-top: -2px;
+ margin-top: -1px;
min-width: 11rem;
}
}
@@ -299,7 +286,7 @@
.o_field_many2many_tags,
.o_kanban_tags {
display: block;
- margin-bottom: $o-kanban-inner-hmargin;
+ margin-bottom: var(--KanbanRecord-gap-v);
line-height: 1.2;
word-break: break-all;
@@ -354,16 +341,12 @@
> button,
> a {
@include o-position-absolute(
- $right: $o-kanban-record-margin,
- $bottom: $o-kanban-record-margin
+ $right: var(--KanbanRecord-padding-h),
+ $bottom: var(--KanbanRecord-padding-v)
);
- @include media-breakpoint-down(md) {
- right: $o-kanban-inside-hgutter-mobile;
- }
}
}
- // Kanban Record - Utility classes
&.oe_kanban_global_click,
&.oe_kanban_global_click_edit,
.oe_kanban_global_click,
@@ -373,6 +356,10 @@
&:focus-within {
outline: thin solid mix(map-get($theme-colors, "primary"), map-get($grays, "400"));
outline-offset: -1px;
+
+ &:after {
+ transform: translateX($border-width);
+ }
}
}
@@ -406,13 +393,10 @@
.o_kanban_image {
float: left;
- width: $o-kanban-image-width;
+ width: var(--KanbanRecord__image-width);
+ div {
- padding-left: $o-kanban-image-width + $o-kanban-inside-hgutter;
- @include media-breakpoint-down(md) {
- padding-left: $o-kanban-image-width + $o-kanban-inside-hgutter-mobile;
- }
+ padding-left: calc(var(--KanbanRecord__image-width) + var(--KanbanRecord-padding-h));
}
}
@@ -424,7 +408,7 @@
min-width: 0;
ul {
- margin-bottom: $o-kanban-inner-hmargin * 0.5;
+ margin-bottom: calc(var(--KanbanRecord-gap-v) * 0.5);
padding-left: 0;
list-style: none;
font-size: $font-size-sm;
@@ -461,8 +445,6 @@
// Kanban Grouped Layout
&.o_kanban_grouped {
min-height: 100%;
- padding: 0;
- background-color: $gray-100;
@include media-breakpoint-down(md) {
min-height: initial;
@@ -471,43 +453,21 @@
scroll-snap-type: x mandatory;
}
- .o_kanban_record,
- .o_kanban_quick_create {
+ .o_kanban_record {
width: 100%;
- margin-left: 0;
- margin-right: 0;
}
&.o_kanban_small_column .o_kanban_group:not(.o_column_folded) {
- flex-basis: $o-kanban-small-record-width + 2 * $o-kanban-group-padding;
+ flex-basis: calc(var(--KanbanRecord--small-width) + (2 * var(--KanbanGroup-padding-h)));
}
}
// Kanban Grouped Layout - Column default
.o_kanban_group {
- flex: 0 0 $o-kanban-default-record-width + 2 * $o-kanban-group-padding;
- padding: 0 $o-kanban-group-padding $o-kanban-group-padding $o-kanban-group-padding;
- background-color: inherit;
+ flex-basis: calc(var(--KanbanRecord-width) + (2 * var(--KanbanGroup-padding-h)));
+ padding: 0 var(--KanbanGroup-padding-h) var(--KanbanGroup-padding-bottom);
.o_kanban_header > .o_kanban_header_title {
- @include o-kanban-header-title;
-
- .o_column_title {
- flex: 1 1 auto;
- @include o-text-overflow;
- font-size: 16px;
- font-weight: 500;
- }
-
- .o_column_unfold {
- display: none;
- }
-
- .o_kanban_quick_add i {
- @include o-kanban-icon;
- margin-left: $o-kanban-inside-hgutter * 2;
- }
-
&:hover .o_kanban_config,
.o_kanban_config.show {
visibility: visible;
@@ -522,9 +482,6 @@
> .dropdown-menu {
cursor: default;
}
- i {
- @include o-kanban-icon;
- }
}
}
}
@@ -545,22 +502,11 @@
}
.o_kanban_header_title {
- position: relative;
opacity: 0.5;
.o_column_title {
@include o-kanban-v-title;
}
- .o_column_unfold {
- @include o-kanban-icon(1);
- }
- }
-
- > .o_kanban_record,
- .o_kanban_quick_add,
- .o_kanban_config,
- .o_kanban_load_more {
- display: none !important;
}
&:hover,
@@ -574,96 +520,40 @@
// Kanban Grouped Layout - "Create new column" column
.o_column_quick_create {
- flex: 0 0 $o-kanban-small-record-width + 2 * $o-kanban-group-padding;
-
- .o_quick_create_folded {
- cursor: pointer;
- padding: 12px 16px;
- white-space: nowrap;
- font-weight: $font-weight-bold;
- @include o-hover-opacity(0.7);
- @include o-hover-text-color($text-muted, $body-color);
- }
-
- .o_quick_create_unfolded {
- margin: $border-width ($o-kanban-inside-hgutter * 0.5) 0;
- padding: $o-kanban-inside-vgutter $o-kanban-inside-hgutter;
-
- @include media-breakpoint-down(md) {
- margin: 0;
- }
-
- .o_kanban_header {
- height: 50px;
-
- .o_kanban_examples {
- cursor: pointer;
- }
-
- input,
- input:focus,
- input:hover {
- font-size: 16px;
- background: transparent;
- }
- }
-
- .o_kanban_muted_record {
- background: map-get($grays, "300");
- height: 70px;
- margin: 10px 0px;
- }
- }
+ flex: 0 0 calc(var(--KanbanRecord--small-width) + (2 * var(--KanbanGroup-padding-h)));
}
@include media-breakpoint-down(md) {
.o_kanban_group,
.o_column_quick_create {
- flex: 1 0 90%; // don't take full width to give a hint of next/previous column
+ flex-basis: 90%; // don't take full width to give a hint of next/previous column
scroll-snap-align: center;
overflow-y: scroll;
.o_kanban_header {
position: sticky; // keep it visible
- top: 0;
- z-index: 10; // same as the sticky ControlPanel
+ z-index: $zindex-sticky;
background-color: inherit;
}
-
- .o_kanban_header_title {
- margin-top: 0 !important; // avoid sticky glitch when scrolling
- }
}
}
// Kanban UN-grouped Layout
&.o_kanban_ungrouped {
min-height: 100%;
- align-content: flex-start;
- flex-flow: row wrap;
- justify-content: flex-start;
-
- padding: $o-kanban-record-margin ($o-horizontal-padding - $o-kanban-record-margin);
+ padding: var(--KanbanRecord-margin-v) var(--KanbanRecord-margin-h);
.o_kanban_record {
- display: flex;
- flex: 1 1 auto;
- width: $o-kanban-default-record-width;
- margin: ($o-kanban-record-margin * 0.5) $o-kanban-record-margin;
+ width: var(--KanbanRecord-width);
+ margin: calc(var(--KanbanRecord-margin-v) * 0.5) var(--KanbanRecord-margin-h);
@include media-breakpoint-down(md) {
margin: 0 0 -1px 0;
- flex: 1 0 100%;
+ flex-basis: 100%;
}
&.o_kanban_ghost {
- height: 0;
- border: none;
- min-height: 0 !important; // to prevent view writers to override this height
- visibility: hidden;
- margin-top: 0;
- margin-bottom: 0;
- padding: 0;
+ max-height: 0 !important; // to prevent view writers to override this height
}
}
}
@@ -686,17 +576,6 @@
// ----------------- Set Cover Dialog -----------------
.modal .o_kanban_cover_container .o_kanban_cover_image {
- border: 1px solid $border-color;
height: 120px;
width: 120px;
- cursor: pointer;
-
- &.o_selected {
- border-color: $o-brand-primary;
- }
-
- > img {
- @include o-position-absolute(0, 0, 0, 0);
- max-height: 100%;
- }
}
diff --git a/addons/web/static/src/views/kanban/kanban_cover_image_dialog.xml b/addons/web/static/src/views/kanban/kanban_cover_image_dialog.xml
index f0f72c52228..eb8dcda47f3 100644
--- a/addons/web/static/src/views/kanban/kanban_cover_image_dialog.xml
+++ b/addons/web/static/src/views/kanban/kanban_cover_image_dialog.xml
@@ -5,11 +5,11 @@