board-breakpoints.ts
import { html, LitElement } from 'lit';
import { customElement } from 'lit/decorators.js';
import '@vaadin/board';
import '@vaadin/split-layout';
import { applyTheme } from 'Frontend/generated/theme';
@customElement('board-breakpoints')
export class Example extends LitElement {
constructor() {
super();
this.classList.add('board-breakpoints');
}
protected override createRenderRoot() {
const root = super.createRenderRoot();
// Apply custom theme (only supported if your app uses one)
applyTheme(root);
return root;
}
// tag::snippet[]
protected override render() {
return html`
<vaadin-split-layout>
<vaadin-board style="width: 100%">
<!-- styles are defined separately, check the board.css snippet -->
<vaadin-board-row>
<div class="cell">Cell 1</div>
<div class="cell">Cell 2</div>
<div class="cell">Cell 3</div>
<div class="cell">Cell 4</div>
</vaadin-board-row>
</vaadin-board>
<div></div>
</vaadin-split-layout>
`;
}
// end::snippet[]
}
board.css
/****************************
* board basic
****************************/
.basic-board,
:host(.basic-board) {
--board-border: 1px solid var(--lumo-contrast-10pct);
--vaadin-board-width-small: 200px;
--vaadin-board-width-medium: 400px;
}
.basic-board vaadin-board-row:not(:last-child),
:host(.basic-board) vaadin-board-row:not(:last-child) {
border-block-end: var(--board-border);
}
.basic-board example-indicator,
:host(.basic-board) example-indicator {
padding: var(--lumo-space-m);
}
.basic-board example-indicator:not(:nth-child(2n)),
:host(.basic-board) example-indicator:not(:nth-child(2n)) {
border-inline-end: var(--board-border);
}
@media (min-width: 1024px) {
.basic-board,
:host(.basic-board) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
.basic-board example-indicator:not(:last-child),
:host(.basic-board) example-indicator:not(:last-child) {
border-inline-end: var(--board-border);
}
}
/****************************
* board nested
****************************/
.board-nested,
:host(.board-nested) {
--board-border: 1px solid var(--lumo-contrast-10pct);
--vaadin-board-width-small: 150px;
--vaadin-board-width-medium: 220px;
}
.board-nested example-statistics,
:host(.board-nested) example-statistics {
padding-inline-end: var(--lumo-space-m);
border-inline-end: var(--board-border);
}
.board-nested example-indicator,
:host(.board-nested) example-indicator {
padding: var(--lumo-space-s);
}
.board-nested example-indicator:first-child,
:host(.board-nested) example-indicator:first-child {
border-block-end: var(--board-border);
}
@media (min-width: 1024px) {
.board-nested example-indicator,
:host(.board-nested) example-indicator {
padding: var(--lumo-space-m);
}
.board-nested,
:host(.board-nested) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
}
/****************************
* board-column-wrapping
****************************/
.board-column-wrapping,
:host(.board-column-wrapping) {
--vaadin-board-width-small: 150px;
--vaadin-board-width-medium: 220px;
--board-blue-10: #0090c0;
--board-blue-20: #006c90;
--board-blue-30: #00506b;
--board-blue-40: #003e53;
}
@media (min-width: 1024px) {
.board-column-wrapping,
:host(.board-column-wrapping) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
}
.board-column-wrapping .cell,
:host(.board-column-wrapping) .cell {
padding: 1em 0.3em;
text-align: center;
color: white;
white-space: nowrap;
}
@media (min-width: 1024px) {
.board-column-wrapping .cell,
:host(.board-column-wrapping) .cell {
padding: 1em;
}
}
.board-column-wrapping .color:nth-child(1),
:host(.board-column-wrapping) .color:nth-child(1) {
background: var(--board-blue-40);
}
.board-column-wrapping .color:nth-child(2),
:host(.board-column-wrapping) .color:nth-child(2) {
background: var(--board-blue-30);
}
.board-column-wrapping .color:nth-child(3),
:host(.board-column-wrapping) .color:nth-child(3) {
background: var(--board-blue-20);
}
.board-column-wrapping .color:nth-child(4),
:host(.board-column-wrapping) .color:nth-child(4) {
background: var(--board-blue-10);
}
/****************************
* board-column-span
****************************/
.board-column-span,
:host(.board-column-span) {
--vaadin-board-width-small: 150px;
--vaadin-board-width-medium: 220px;
--board-blue-10: #0090c0;
--board-blue-20: #006c90;
--board-blue-30: #00506b;
--board-blue-40: #003e53;
--board-inner-border: 1px dashed white;
}
@media (min-width: 1024px) {
.board-column-span,
:host(.board-column-span) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
}
.board-column-span vaadin-board,
:host(.board-column-span) vaadin-board {
padding: var(--lumo-space-m) 0;
}
.board-column-span .cell,
:host(.board-column-span) .cell {
padding: 1em 0.3em;
text-align: center;
color: white;
white-space: nowrap;
background: var(--board-blue-20);
}
@media (min-width: 1024px) {
.board-column-span .cell,
:host(.board-column-span) .cell {
padding: 1em;
}
}
.board-column-span .color:nth-child(1),
:host(.board-column-span) .color:nth-child(1) {
background: var(--board-blue-40);
}
.board-column-span .color:nth-child(2),
:host(.board-column-span) .color:nth-child(2) {
background: var(--board-blue-30);
}
.board-column-span .color:nth-child(3),
:host(.board-column-span) .color:nth-child(3) {
background: var(--board-blue-20);
}
.board-column-span .color:nth-child(4),
:host(.board-column-span) .color:nth-child(4) {
background: var(--board-blue-10);
}
.board-column-span .cell[board-cols='3'],
:host(.board-column-span) .cell[board-cols='3'] {
background: var(--board-blue-40);
}
.board-column-span .cell[board-cols='2'],
:host(.board-column-span) .cell[board-cols='2'] {
background: var(--board-blue-30);
}
.board-column-span .cell:not(:last-child),
:host(.board-column-span) .cell:not(:last-child) {
border-inline-end: var(--board-inner-border);
}
.board-column-span vaadin-board-row:not(:last-child) .cell,
:host(.board-column-span) vaadin-board-row:not(:last-child) .cell {
border-block-end: var(--board-inner-border);
}
/****************************
* board-breakpoints
****************************/
.board-breakpoints,
:host(.board-breakpoints) {
--vaadin-board-width-small: 150px;
--vaadin-board-width-medium: 220px;
}
@media (min-width: 1024px) {
.board-breakpoints,
:host(.board-breakpoints) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
}
.board-breakpoints vaadin-board-row.large > .cell,
:host(.board-breakpoints)
/* tag::breakpoint[] */
/* should be added to frontend/theme/[my-theme]/styles.css */
vaadin-board-row.large > .cell {
background: var(--lumo-success-color-10pct);
color: var(--lumo-success-color);
}
/* end::breakpoint[] */
.board-breakpoints vaadin-board-row.medium > .cell,
:host(.board-breakpoints)
/* tag::breakpoint[] */
vaadin-board-row.medium > .cell {
background: var(--lumo-primary-color-10pct);
color: var(--lumo-primary-color);
}
/* end::breakpoint[] */
.board-breakpoints vaadin-board-row.small > .cell,
:host(.board-breakpoints)
/* tag::breakpoint[] */
vaadin-board-row.small > .cell {
background: var(--lumo-error-color-10pct);
color: var(--lumo-error-color);
}
/* end::breakpoint[] */
.board-breakpoints .cell,
:host(.board-breakpoints) .cell {
padding: 1em 0.3em;
text-align: center;
color: white;
white-space: nowrap;
}
@media (min-width: 1024px) {
.board-breakpoints .cell,
:host(.board-breakpoints) .cell {
padding: 1em;
}
}
BoardBreakpoints.java
package com.vaadin.demo.component.board;
import com.vaadin.flow.component.board.Board;
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.splitlayout.SplitLayout;
import com.vaadin.flow.router.Route;
@Route("board-breakpoints")
public class BoardBreakpoints extends Div {
public BoardBreakpoints() {
// tag::snippet[]
Board board = new Board();
// styles are defined separately, check the board.css snippet
board.addRow(createCell("Cell 1"), createCell("Cell 2"),
createCell("Cell 3"), createCell("Cell 4"));
SplitLayout splitLayout = new SplitLayout(board, new Div());
// end::snippet[]
addClassName("board-breakpoints");
add(splitLayout);
}
private Div createCell(String text) {
Div div = new Div();
div.setText(text);
div.addClassNames("cell");
return div;
}
}
board.css
/****************************
* board basic
****************************/
.basic-board,
:host(.basic-board) {
--board-border: 1px solid var(--lumo-contrast-10pct);
--vaadin-board-width-small: 200px;
--vaadin-board-width-medium: 400px;
}
.basic-board vaadin-board-row:not(:last-child),
:host(.basic-board) vaadin-board-row:not(:last-child) {
border-block-end: var(--board-border);
}
.basic-board example-indicator,
:host(.basic-board) example-indicator {
padding: var(--lumo-space-m);
}
.basic-board example-indicator:not(:nth-child(2n)),
:host(.basic-board) example-indicator:not(:nth-child(2n)) {
border-inline-end: var(--board-border);
}
@media (min-width: 1024px) {
.basic-board,
:host(.basic-board) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
.basic-board example-indicator:not(:last-child),
:host(.basic-board) example-indicator:not(:last-child) {
border-inline-end: var(--board-border);
}
}
/****************************
* board nested
****************************/
.board-nested,
:host(.board-nested) {
--board-border: 1px solid var(--lumo-contrast-10pct);
--vaadin-board-width-small: 150px;
--vaadin-board-width-medium: 220px;
}
.board-nested example-statistics,
:host(.board-nested) example-statistics {
padding-inline-end: var(--lumo-space-m);
border-inline-end: var(--board-border);
}
.board-nested example-indicator,
:host(.board-nested) example-indicator {
padding: var(--lumo-space-s);
}
.board-nested example-indicator:first-child,
:host(.board-nested) example-indicator:first-child {
border-block-end: var(--board-border);
}
@media (min-width: 1024px) {
.board-nested example-indicator,
:host(.board-nested) example-indicator {
padding: var(--lumo-space-m);
}
.board-nested,
:host(.board-nested) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
}
/****************************
* board-column-wrapping
****************************/
.board-column-wrapping,
:host(.board-column-wrapping) {
--vaadin-board-width-small: 150px;
--vaadin-board-width-medium: 220px;
--board-blue-10: #0090c0;
--board-blue-20: #006c90;
--board-blue-30: #00506b;
--board-blue-40: #003e53;
}
@media (min-width: 1024px) {
.board-column-wrapping,
:host(.board-column-wrapping) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
}
.board-column-wrapping .cell,
:host(.board-column-wrapping) .cell {
padding: 1em 0.3em;
text-align: center;
color: white;
white-space: nowrap;
}
@media (min-width: 1024px) {
.board-column-wrapping .cell,
:host(.board-column-wrapping) .cell {
padding: 1em;
}
}
.board-column-wrapping .color:nth-child(1),
:host(.board-column-wrapping) .color:nth-child(1) {
background: var(--board-blue-40);
}
.board-column-wrapping .color:nth-child(2),
:host(.board-column-wrapping) .color:nth-child(2) {
background: var(--board-blue-30);
}
.board-column-wrapping .color:nth-child(3),
:host(.board-column-wrapping) .color:nth-child(3) {
background: var(--board-blue-20);
}
.board-column-wrapping .color:nth-child(4),
:host(.board-column-wrapping) .color:nth-child(4) {
background: var(--board-blue-10);
}
/****************************
* board-column-span
****************************/
.board-column-span,
:host(.board-column-span) {
--vaadin-board-width-small: 150px;
--vaadin-board-width-medium: 220px;
--board-blue-10: #0090c0;
--board-blue-20: #006c90;
--board-blue-30: #00506b;
--board-blue-40: #003e53;
--board-inner-border: 1px dashed white;
}
@media (min-width: 1024px) {
.board-column-span,
:host(.board-column-span) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
}
.board-column-span vaadin-board,
:host(.board-column-span) vaadin-board {
padding: var(--lumo-space-m) 0;
}
.board-column-span .cell,
:host(.board-column-span) .cell {
padding: 1em 0.3em;
text-align: center;
color: white;
white-space: nowrap;
background: var(--board-blue-20);
}
@media (min-width: 1024px) {
.board-column-span .cell,
:host(.board-column-span) .cell {
padding: 1em;
}
}
.board-column-span .color:nth-child(1),
:host(.board-column-span) .color:nth-child(1) {
background: var(--board-blue-40);
}
.board-column-span .color:nth-child(2),
:host(.board-column-span) .color:nth-child(2) {
background: var(--board-blue-30);
}
.board-column-span .color:nth-child(3),
:host(.board-column-span) .color:nth-child(3) {
background: var(--board-blue-20);
}
.board-column-span .color:nth-child(4),
:host(.board-column-span) .color:nth-child(4) {
background: var(--board-blue-10);
}
.board-column-span .cell[board-cols='3'],
:host(.board-column-span) .cell[board-cols='3'] {
background: var(--board-blue-40);
}
.board-column-span .cell[board-cols='2'],
:host(.board-column-span) .cell[board-cols='2'] {
background: var(--board-blue-30);
}
.board-column-span .cell:not(:last-child),
:host(.board-column-span) .cell:not(:last-child) {
border-inline-end: var(--board-inner-border);
}
.board-column-span vaadin-board-row:not(:last-child) .cell,
:host(.board-column-span) vaadin-board-row:not(:last-child) .cell {
border-block-end: var(--board-inner-border);
}
/****************************
* board-breakpoints
****************************/
.board-breakpoints,
:host(.board-breakpoints) {
--vaadin-board-width-small: 150px;
--vaadin-board-width-medium: 220px;
}
@media (min-width: 1024px) {
.board-breakpoints,
:host(.board-breakpoints) {
--vaadin-board-width-small: 300px;
--vaadin-board-width-medium: 400px;
}
}
.board-breakpoints vaadin-board-row.large > .cell,
:host(.board-breakpoints)
/* tag::breakpoint[] */
/* should be added to frontend/theme/[my-theme]/styles.css */
vaadin-board-row.large > .cell {
background: var(--lumo-success-color-10pct);
color: var(--lumo-success-color);
}
/* end::breakpoint[] */
.board-breakpoints vaadin-board-row.medium > .cell,
:host(.board-breakpoints)
/* tag::breakpoint[] */
vaadin-board-row.medium > .cell {
background: var(--lumo-primary-color-10pct);
color: var(--lumo-primary-color);
}
/* end::breakpoint[] */
.board-breakpoints vaadin-board-row.small > .cell,
:host(.board-breakpoints)
/* tag::breakpoint[] */
vaadin-board-row.small > .cell {
background: var(--lumo-error-color-10pct);
color: var(--lumo-error-color);
}
/* end::breakpoint[] */
.board-breakpoints .cell,
:host(.board-breakpoints) .cell {
padding: 1em 0.3em;
text-align: center;
color: white;
white-space: nowrap;
}
@media (min-width: 1024px) {
.board-breakpoints .cell,
:host(.board-breakpoints) .cell {
padding: 1em;
}
}