/* Editor */ /* ******************************************************************************* */ @import "../../scss/_bootstrap-extended/include"; /* common styles */ .ql-container { position: relative; display: block; margin: 0; .ql-editor { display: block; outline: none; overflow-y: auto; tab-size: 4; white-space: pre-wrap; word-wrap: break-word; &.ql-blank::before { position: absolute; color: var(--#{$prefix}secondary-color); content: attr(data-placeholder); font-size: $font-size-root; font-style: italic; pointer-events: none; } } } /* Themes */ .ql-snow, .ql-bubble { --#{$prefix}input-border-color: #{$input-border-color}; box-sizing: border-box; .ql-hidden { display: none !important; } .ql-transparent { opacity: .4; } .ql-thin, .ql-stroke.ql-thin { stroke-width: 1; } .ql-direction.ql-active { svg:last-child { display: inline; } svg:first-child { display: none; } } .ql-direction svg:last-child { display: none; } &.ql-toolbar, & .ql-toolbar { padding: .5rem; @include border-top-radius($border-radius); &::after { display: table; clear: both; content: ""; } button { display: inline-block; border: none; background: none; block-size: 1.5rem; cursor: pointer; float: inline-start; inline-size: 1.75rem; padding-block: .1875rem; padding-inline: .3125rem; svg { block-size: 100%; float: inline-start; } } .ql-picker-options { box-shadow: $dropdown-box-shadow; } input.ql-image[type="file"] { display: none; } } .ql-tooltip { position: absolute; &:not(.ql-flip) { transform: translateY(.625rem); } a { cursor: pointer; } } .ql-formats { display: inline-block; margin-inline-end: .9375rem; vertical-align: middle; &::after { display: table; clear: both; content: ""; } } .ql-picker { position: relative; display: inline-block; block-size: 1.5rem; float: inline-start; vertical-align: middle; &.ql-expanded .ql-picker-options { z-index: 1; display: block; inset-block-start: 100%; margin-block-start: -.0625rem; } &.ql-header, &.ql-font, &.ql-size { .ql-picker-label[data-label]:not([data-label=""])::before, .ql-picker-item[data-label]:not([data-label=""])::before { content: attr(data-label); } } &.ql-header { inline-size: 6.125rem; .ql-picker-label, .ql-picker-item { &::before { content: "Normal"; } &[data-value="1"]::before { content: "Heading 1"; } &[data-value="2"]::before { content: "Heading 2"; } &[data-value="3"]::before { content: "Heading 3"; } &[data-value="4"]::before { content: "Heading 4"; } &[data-value="5"]::before { content: "Heading 5"; } &[data-value="6"]::before { content: "Heading 6"; } } .ql-picker-item { &[data-value="1"]::before { font-size: $h1-font-size; } &[data-value="2"]::before { font-size: $h2-font-size; } &[data-value="3"]::before { font-size: $h3-font-size; } &[data-value="4"]::before { font-size: $h4-font-size; } &[data-value="5"]::before { font-size: $h5-font-size; } &[data-value="6"]::before { font-size: $h6-font-size; } } } &.ql-font { inline-size: 6.75rem; .ql-picker-label, .ql-picker-item { &::before { content: "Sans Serif"; } &[data-value="serif"]::before { content: "Serif"; } &[data-value="monospace"]::before { content: "Monospace"; } } } &.ql-size { inline-size: 6.125rem; .ql-picker-label, .ql-picker-item { &::before { content: "Normal"; } &[data-value="small"]::before { content: "Small"; } &[data-value="large"]::before { content: "Large"; } &[data-value="huge"]::before { content: "Huge"; } } } &:not(.ql-color-picker, .ql-icon-picker) svg { position: absolute; inline-size: 1.125rem; inset-block-start: 50%; inset-inline-end: 0; margin-block-start: -.5625rem; } } .ql-picker-label { position: relative; display: inline-block; border: .0625rem solid transparent; block-size: 100%; cursor: pointer; inline-size: 100%; padding-inline: .5rem .125rem; &::before { display: inline-block; line-height: 1.375rem; } } .ql-picker-options { position: absolute; display: none; min-inline-size: 100%; padding-block: .25rem; padding-inline: .5rem; white-space: nowrap; .ql-picker-item { display: block; cursor: pointer; padding-block: .3125rem; } } .ql-color-picker, .ql-icon-picker { inline-size: 1.75rem; .ql-picker-label { padding-inline: .25rem; } } .ql-icon-picker { .ql-picker-options { padding-block: .25rem; padding-inline: 0; } .ql-picker-item { block-size: 1.5rem; inline-size: 1.5rem; padding-block: .125rem; padding-inline: .25rem; } } .ql-color-picker { .ql-picker-options { inline-size: 9.5rem; padding-block: .1875rem; padding-inline: .3125rem; } .ql-picker-item { padding: 0; border: .0625rem solid transparent; margin: .125rem; block-size: 1rem; float: inline-start; inline-size: 1rem; } &.ql-background .ql-picker-item { background-color: var(--#{$prefix}paper-bg); } &.ql-color .ql-picker-item { background-color: var(--#{$prefix}pure-black); } } .ql-fill, .ql-stroke.ql-fill { fill: var(--#{$prefix}body-color); } .ql-italic svg, .ql-list svg, .ql-indent svg, .ql-direction svg, .ql-align svg, .ql-link svg, .ql-image svg, .ql-clean svg { :dir(rtl) & { transform: scaleX(-1); } } } .ql-snow { &.ql-toolbar, .ql-toolbar { border: .0625rem solid var(--#{$prefix}input-border-color); background: var(--#{$prefix}paper-bg); background-clip: padding-box; button:hover, button:focus, button.ql-active, .ql-picker-label:hover, .ql-picker-label.ql-active, .ql-picker-item:hover, .ql-picker-item.ql-selected { color: var(--#{$prefix}primary); .ql-fill, .ql-stroke.ql-fill{ fill: var(--#{$prefix}primary); } .ql-stroke, .ql-stroke-miter{ stroke: var(--#{$prefix}primary); } } } &.ql-toolbar + .ql-container.ql-snow { border-block-start: 0; & .ql-editor, & { @include border-bottom-radius(var(--#{$prefix}border-radius)); } } .ql-editor { background: var(--#{$prefix}paper-bg); min-block-size: 15rem; padding-block: calc(#{$card-spacer-x-sm} * .5); padding-inline: $input-padding-x; &.ql-blank::before { padding-block: 0; padding-inline: 0 $input-padding-x; } .ql-code-block-container { position: relative; overflow: visible; @include border-radius(.188rem); background-color: var(--#{$prefix}dark); color: var(--#{$prefix}white); margin-block: .3125rem; padding-block: .4375rem; padding-inline: .625rem; .ql-ui { position: absolute; inset-block-start: .3125rem; inset-inline-end: .3125rem; } } } .ql-picker { color: var(--#{$prefix}body-color); &.ql-expanded { .ql-picker-label { z-index: 2; border-color: $input-border-color; color: var(--#{$prefix}secondary-color); .ql-fill { fill: var(--#{$prefix}secondary-color); } .ql-stroke { stroke: var(--#{$prefix}secondary-color); } } } } .ql-stroke { fill: none; stroke: var(--#{$prefix}body-color); stroke-linecap: round; stroke-linejoin: round; stroke-width: 2; } .ql-stroke-miter { fill: none; stroke: var(--#{$prefix}body-color); stroke-miterlimit: 10; stroke-width: 2; } .ql-picker-label { border: .0625rem solid transparent; } .ql-picker-options { border: .0625rem solid transparent; background-clip: padding-box; background-color: var(--#{$prefix}paper-bg); } .ql-color-picker .ql-picker-item.ql-selected, .ql-color-picker .ql-picker-item:hover { border-color: var(--#{$prefix}pure-black); } .ql-tooltip { display: flex; border: $dropdown-border-width solid $dropdown-border-color; @include border-radius($border-radius); background-clip: padding-box; background-color: var(--#{$prefix}paper-bg); box-shadow: $dropdown-box-shadow; color: var(--#{$prefix}body-color); padding-block: .3125rem; padding-inline: .75rem; white-space: nowrap; &::before { content: "Visit URL:"; line-height: 1.625rem; margin-inline-end: .5rem; } input[type="text"] { display: none; border: .0625rem solid $input-border-color; margin: 0; background-color: var(--#{$prefix}paper-bg); font-size: .8125rem; inline-size: 10.625rem; padding-block: .1875rem; padding-inline: .3125rem; } a.ql-action::after { border-inline-end: .0625rem solid var(--#{$prefix}secondary-color); content: "Edit"; margin-inline-start: 1rem; padding-inline-end: .5rem; } a.ql-remove::before { content: "Remove"; margin-inline-start: .5rem; } a { line-height: 1.625rem; } &.ql-editing a.ql-preview, &.ql-editing a.ql-remove { display: none; } &.ql-editing input[type="text"] { display: inline-block; } &.ql-editing a.ql-action::after { border-inline-end: 0; content: "Save"; padding-inline-end: 0; } &[data-mode="link"]::before { content: "Enter link:"; } &[data-mode="formula"]::before { content: "Enter formula:"; } &[data-mode="video"]::before { content: "Enter video:"; } } &.ql-container { border: .0625rem solid var(--#{$prefix}input-border-color); } } .ql-bubble { --#{$prefix}bubble-tooltip-bg: #444; --#{$prefix}bubble-tooltip-color: #ccc; &.ql-toolbar, .ql-toolbar { button:hover, button:focus, button.ql-active, .ql-picker-label:hover, .ql-picker-label.ql-active, .ql-picker-item:hover, .ql-picker-item.ql-selected { color: var(--#{$prefix}white); .ql-stroke, .ql-stroke-miter { stroke: var(--#{$prefix}white); } .ql-fill, .ql-stroke.ql-fill { fill: var(--#{$prefix}white); } } @media (pointer: coarse) { button:hover:not(.ql-active) { color: var(--#{$prefix}bubble-tooltip-color); } button:hover:not(.ql-active) .ql-fill, button:hover:not(.ql-active) .ql-stroke.ql-fill { fill: var(--#{$prefix}bubble-tooltip-color); } button:hover:not(.ql-active) .ql-stroke, button:hover:not(.ql-active) .ql-stroke-miter { stroke: var(--#{$prefix}bubble-tooltip-color); } } } .ql-stroke { fill: none; stroke: var(--#{$prefix}bubble-tooltip-color); stroke-linecap: round; stroke-linejoin: round; stroke-width: 2; } .ql-stroke-miter { fill: none; stroke: var(--#{$prefix}bubble-tooltip-color); stroke-miterlimit: 10; stroke-width: 2; } .ql-fill, .ql-stroke.ql-fill { fill: var(--#{$prefix}bubble-tooltip-color); } .ql-picker { color: var(--#{$prefix}bubble-tooltip-color); } .ql-picker-options { background-color: var(--#{$prefix}bubble-tooltip-bg); } .ql-toolbar .ql-formats { margin-block: .5rem; margin-inline: 0 .75rem; &:first-child { margin-inline-start: .75rem; } } .ql-tooltip-arrow { position: absolute; display: block; border-inline-end: .375rem solid transparent; border-inline-start: .375rem solid transparent; content: " "; inset-inline-start: 50%; margin-inline-start: -.375rem; } .ql-tooltip { z-index: $zindex-menu-fixed + 10; @include border-radius($border-radius); background-color: var(--#{$prefix}bubble-tooltip-bg); color: var(--#{$prefix}white); &:not(.ql-flip) .ql-tooltip-arrow { border-block-end: .375rem solid var(--#{$prefix}bubble-tooltip-bg); inset-block-start: -.375rem; } &.ql-flip .ql-tooltip-arrow { border-block-start: .375rem solid var(--#{$prefix}bubble-tooltip-bg); inset-block-end: -.375rem; } } .ql-tooltip-editor { display: none; input[type="text"] { border: none; background: transparent; color: var(--#{$prefix}white); font-size: .8125rem; inline-size: 100%; padding-block: .625rem; padding-inline: 1.25rem; } a { position: absolute; inset-block-start: .625rem; inset-inline-end: 1.25rem; } } .ql-editing .ql-tooltip-editor { display: block; } } /* dark styles */ @if $enable-dark-mode { @include color-mode(dark) { .ql-bubble { --#{$prefix}bubble-tooltip-bg: var(--#{$prefix}body-bg); } .ql-snow, .ql-bubble { --#{$prefix}input-border-color: #{$input-border-color-dark}; } } }