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; } }
board-breakpoints.tsx
import React from 'react'; import { SplitLayout } from '@vaadin/react-components/SplitLayout.js'; import { Board } from '@vaadin/react-components-pro/Board.js'; import { BoardRow } from '@vaadin/react-components-pro/BoardRow.js'; import boardStyles from './board-styles'; function Example() { // tag::snippet[] return ( <SplitLayout className="board-breakpoints"> <Board style={{ width: '100%' }}> <BoardRow> <div className="cell">Cell 1</div> <div className="cell">Cell 2</div> <div className="cell">Cell 3</div> <div className="cell">Cell 4</div> </BoardRow> </Board> <div></div> </SplitLayout> ); // end::snippet[] }
board-breakpoints.ts
import '@vaadin/board'; import '@vaadin/split-layout'; import { html, LitElement } from 'lit'; import { customElement } from 'lit/decorators.js'; import { applyTheme } from 'Frontend/generated/theme'; @customElement('board-breakpoints') export class Example extends LitElement { connectedCallback() { super.connectedCallback(); 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; } }