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;
    }
}