@vaadin/vaadin-lumo-styles
Version:
Lumo is a design system foundation for modern web applications, used by Vaadin components
386 lines (320 loc) • 10.3 kB
CSS
/**
* @license
* Copyright (c) 2000 - 2026 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
@media lumo_components_rich-text-editor {
:host {
min-height: calc(var(--lumo-size-m) * 8);
font-family: var(--lumo-font-family);
font-size: var(--lumo-font-size-m);
line-height: var(--lumo-line-height-m);
-webkit-text-size-adjust: 100%;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
--_focus-ring-color: var(--vaadin-focus-ring-color, var(--lumo-primary-color-50pct));
--_focus-ring-width: var(--vaadin-focus-ring-width, 2px);
--_item-indent: var(--lumo-space-m);
--_marker-indent: var(--lumo-space-xs);
}
:host(:focus-within) {
outline: none;
}
.vaadin-rich-text-editor-container {
background: var(--vaadin-rich-text-editor-background, transparent);
border: none;
border-radius: 0;
}
[part='content'] {
background-color: var(--lumo-base-color);
}
[part='toolbar'] {
background-color: var(--vaadin-rich-text-editor-toolbar-background, var(--lumo-contrast-5pct));
padding: var(--vaadin-rich-text-editor-toolbar-padding, calc(var(--lumo-space-s) - 1px) var(--lumo-space-xs));
gap: var(--vaadin-rich-text-editor-toolbar-gap, 0);
}
[part~='toolbar-button'] {
padding: var(--vaadin-rich-text-editor-toolbar-button-padding, 0);
font: inherit;
line-height: 1;
text-transform: none;
background: var(--vaadin-rich-text-editor-toolbar-button-background, transparent);
border-width: var(--vaadin-rich-text-editor-toolbar-button-border-width, 0);
width: var(--lumo-size-m);
height: var(--lumo-size-m);
border-radius: var(--lumo-border-radius-m);
color: var(--vaadin-rich-text-editor-toolbar-button-text-color, var(--lumo-contrast-60pct));
margin: 2px 1px;
cursor: var(--lumo-clickable-cursor);
transition:
background-color 100ms,
color 100ms;
}
[part~='toolbar-button']:not([part~='toolbar-button-pressed']):hover {
outline: none;
--vaadin-rich-text-editor-toolbar-button-background: var(--lumo-contrast-5pct);
--vaadin-rich-text-editor-toolbar-button-text-color: var(--lumo-contrast-80pct);
}
[part~='toolbar-button']::before {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-family: 'lumo-icons', var(--lumo-font-family);
font-size: var(--lumo-icon-size-m);
mask-image: none;
background: transparent;
height: auto;
width: auto;
}
[part~='toolbar-group'] {
margin: 0 0.5em;
margin: 0 calc(var(--lumo-space-l) / 2 - 1px);
}
[part~='toolbar-button-bold']::before {
content: 'B';
font-weight: 700;
}
[part~='toolbar-button-italic']::before {
content: 'I';
font-style: italic;
}
[part~='toolbar-button-underline']::before {
content: 'U';
text-decoration: underline;
}
[part~='toolbar-button-strike']::before {
content: 'T';
text-decoration: line-through;
}
[part~='toolbar-button-h1']::before {
content: 'H1';
font-size: 1.25em;
font-size: var(--lumo-font-size-m);
}
[part~='toolbar-button-h2']::before {
content: 'H2';
font-size: 1em;
font-size: var(--lumo-font-size-s);
}
[part~='toolbar-button-h3']::before {
content: 'H3';
font-size: 0.875em;
font-size: var(--lumo-font-size-xs);
}
[part~='toolbar-button-h1']::before,
[part~='toolbar-button-h2']::before,
[part~='toolbar-button-h3']::before {
letter-spacing: -0.05em;
font-weight: 600;
}
[part~='toolbar-button-subscript']::before,
[part~='toolbar-button-superscript']::before {
content: 'X';
font-weight: 600;
font-size: var(--lumo-font-size-s);
}
[part~='toolbar-button-subscript']::after,
[part~='toolbar-button-superscript']::after {
content: '2';
position: absolute;
top: 50%;
left: 70%;
font-size: 0.625em;
font-weight: 700;
}
[part~='toolbar-button-superscript']::after {
top: 20%;
}
[part~='toolbar-button-blockquote']::before {
content: '”';
height: 0.6em;
font-size: var(--lumo-font-size-xxl);
}
[part~='toolbar-button-code-block']::before {
content: var(--lumo-icons-angle-left) var(--lumo-icons-angle-right);
font-size: var(--lumo-font-size-l);
letter-spacing: -0.5em;
margin-left: -0.25em;
font-weight: 600;
}
[part~='toolbar-button-background']::before,
[part~='toolbar-button-color']::before {
content: 'A';
font-size: 1em;
}
[part~='toolbar-button-color']::after,
[part~='toolbar-button-background']::after {
width: auto;
height: auto;
mask-image: none;
transform: none;
}
[part~='toolbar-button-color']::after {
bottom: 4px;
left: 25%;
right: 25%;
width: 50%;
height: 4px;
}
[part~='toolbar-button-background']::before {
z-index: 1;
background-color: var(--lumo-base-color);
background-image: linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct));
}
[part~='toolbar-button-background']::after {
content: '';
position: absolute;
inset: 20%;
background: repeating-linear-gradient(
135deg,
var(--_background-value, currentColor),
var(--_background-value, currentColor) 1px,
transparent 1px,
transparent 2px
);
}
:host([disabled]) [part~='toolbar-button'] {
--vaadin-rich-text-editor-toolbar-button-background: transparent;
}
[part~='toolbar-button']:focus,
[part~='toolbar-button'][aria-expanded='true'] {
outline: none;
box-shadow: 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);
}
@media (hover: none) {
[part~='toolbar-button']:hover {
--vaadin-rich-text-editor-toolbar-button-background: transparent;
}
}
[part~='toolbar-button-pressed'] {
--vaadin-rich-text-editor-toolbar-button-background: var(--vaadin-selection-color, var(--lumo-primary-color));
--vaadin-rich-text-editor-toolbar-button-text-color: var(--lumo-primary-contrast-color);
}
[part~='toolbar-button']:not([part~='toolbar-button-pressed']):active {
--vaadin-rich-text-editor-toolbar-button-background: var(--lumo-contrast-10pct);
--vaadin-rich-text-editor-toolbar-button-text-color: var(--lumo-contrast-90pct);
}
[part~='toolbar-button-undo']::before {
content: var(--lumo-icons-undo);
}
[part~='toolbar-button-redo']::before {
content: var(--lumo-icons-redo);
}
[part~='toolbar-button-bold']::before,
[part~='toolbar-button-background']::before,
[part~='toolbar-button-color']::before,
[part~='toolbar-button-italic']::before,
[part~='toolbar-button-underline']::before,
[part~='toolbar-button-strike']::before {
font-size: var(--lumo-font-size-m);
font-weight: 600;
}
[part~='toolbar-button-background']:hover::before {
background-image:
linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct)),
linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct));
}
[part~='toolbar-button-background']:active::before {
background-image:
linear-gradient(var(--lumo-contrast-5pct), var(--lumo-contrast-5pct)),
linear-gradient(var(--lumo-contrast-10pct), var(--lumo-contrast-10pct));
}
[part~='toolbar-button-list-ordered']::before {
content: var(--lumo-icons-ordered-list);
}
[part~='toolbar-button-list-bullet']::before {
content: var(--lumo-icons-unordered-list);
}
[part~='toolbar-button-outdent']::before {
content: var(--lumo-icons-outdent);
}
[part~='toolbar-button-indent']::before {
content: var(--lumo-icons-indent);
}
[part~='toolbar-button-align-left']::before {
content: var(--lumo-icons-align-left);
}
[part~='toolbar-button-align-center']::before {
content: var(--lumo-icons-align-center);
}
[part~='toolbar-button-align-right']::before {
content: var(--lumo-icons-align-right);
}
[part~='toolbar-button-image']::before {
content: var(--lumo-icons-photo);
}
[part~='toolbar-button-link']::before {
content: var(--lumo-icons-link);
}
[part~='toolbar-button-clean']::before {
content: var(--lumo-icons-clean);
font-size: var(--lumo-font-size-l);
}
/* Theme variants */
/* No border */
:host(:not([theme~='no-border'])) {
border: 1px solid var(--lumo-contrast-20pct);
}
:host(:not([theme~='no-border']):not([readonly])) [part='content'] {
border-top: 1px solid var(--lumo-contrast-20pct);
}
:host([theme~='no-border']) [part='toolbar'] {
--vaadin-rich-text-editor-toolbar-padding: var(--lumo-space-s) var(--lumo-space-xs);
}
/* Compact */
:host([theme~='compact']) {
min-height: calc(var(--lumo-size-m) * 6);
}
:host([theme~='compact']) [part='toolbar'] {
--vaadin-rich-text-editor-toolbar-padding: var(--lumo-space-xs) 0;
}
:host([theme~='compact'][theme~='no-border']) [part='toolbar'] {
--vaadin-rich-text-editor-toolbar-padding: calc(var(--lumo-space-xs) + 1px) 0;
}
:host([theme~='compact']) [part~='toolbar-button'] {
width: var(--lumo-size-s);
height: var(--lumo-size-s);
}
:host([theme~='compact']) [part~='toolbar-group'] {
margin: 0 calc(var(--lumo-space-m) / 2 - 1px);
}
.ql-editor {
color: var(--vaadin-rich-text-editor-content-color, inherit);
padding: var(--vaadin-rich-text-editor-content-padding, var(--lumo-space-s) var(--lumo-space-m));
}
.ql-code-block-container {
background-color: var(--lumo-contrast-10pct);
border-radius: var(--lumo-border-radius-m);
margin-block: 0.3125em;
padding: 0.3125em 0.625em;
}
blockquote {
padding-left: 1em;
margin-inline: 40px;
}
code {
background-color: var(--lumo-contrast-10pct);
font-size: 85%;
padding: 0.125em 0.25em;
}
:where(h1, h2, h3, h4, h5, h6) {
margin-top: 1.25em;
}
:where(h1) {
margin-bottom: 0.75em;
}
:where(h2, h3, h4) {
margin-bottom: 0.5em;
}
:where(h5) {
margin-bottom: 0.25em;
}
/* RTL specific styles */
:host([dir='rtl']) [part~='toolbar-button-redo']::before {
content: var(--lumo-icons-undo);
}
:host([dir='rtl']) [part~='toolbar-button-undo']::before {
content: var(--lumo-icons-redo);
}
}