/
githubmirror
/
pocketbase
Обзор
Документация
Войти
/
githubmirror
/
pocketbase
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
ui/src/css/modal.css
308 строк
8 KB
Gani Georgiev
[#7746] readded editor fullscreen option and preloaded the tinymce component
27 июн 2026, 12:13
27 июн 2026, 12:13
3a9a341
Код
Авторство
О чём код?
.modal { position: fixed; z-index: 1000; display: none; flex-direction: column; width: 620px; max-width: 100%; height: 100%; border: 0; outline: 0; margin: 0; top: 0; right: 0; opacity: 0; word-break: break-word; color: var(--surfaceTxtColor); background: var(--surfaceColor); transform: translateX(30px); backface-visibility: hidden; transition-property: opacity, transform, width, display; transition-duration: var(--modalAnimationSpeed); transition-behavior: allow-discrete; box-shadow: var(--leftBoxShadow); overscroll-behavior: none; &[data-modal-state="open"] { display: flex; opacity: 1; transform: translateX(0); @starting-style { opacity: 0; transform: translateX(30px); } } /* overlays */ &::before { content: ""; display: block; position: fixed; z-index: -2; left: -100vw; top: -100vh; width: 200vw; height: 200vh; background: var(--modalOverlayColor); } &::after { content: ""; display: block; position: absolute; z-index: -1; left: 0; top: 0; width: 100%; height: 100%; border-radius: inherit; background: inherit; } .modal-header, .modal-content, .modal-footer { outline: 0; padding: var(--spacing); } .modal-header, .modal-footer { display: flex; align-items: center; width: 100%; gap: var(--smSpacing); padding-top: calc(var(--spacing) - 10px); padding-bottom: calc(var(--spacing) - 10px); } .modal-footer { margin-top: auto; border-top: 1px solid var(--surfaceAlt2Color); } .modal-content { position: relative; flex-grow: 1; overflow: auto; scrollbar-width: thin; > :first-child { margin-top: 0; } > :last-child { margin-bottom: 0; } } .modal-header .modal-close-btn.transparent { margin-right: -10px; /* visually align */ } .modal-header:not(.isolated) ~ .modal-content { padding-top: 5px; } .modal-header.isolated { background: var(--surfaceAlt1Color); border-bottom: 1px solid var(--surfaceAlt2Color); border-top-left-radius: inherit; border-top-right-radius: inherit; } .modal-title { align-content: center; } /* sizes */ &.sm { width: 480px; } &.lg { width: 880px; } &.full { width: 100%; } &.preview, &.popup { left: 0; right: 0; top: 0; bottom: 0; margin: auto; height: min-content; max-width: 95%; max-height: 95%; box-shadow: var(--boxShadow); border-radius: var(--lgBorderRadius); transform: scale(0.98); &.full { width: 95%; } .modal-header, .modal-content, .modal-footer { border-radius: inherit; } .modal-header, .modal-footer { padding-top: calc(var(--spacing) - 5px); padding-bottom: calc(var(--spacing) - 5px); } .modal-header:has(~ .modal-content), .modal-header:has(~ .modal-footer), .modal-content:has(~ .modal-footer) { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .modal-header ~ .modal-content, .modal-content ~ .modal-footer, .modal-header ~ .modal-footer { border-top-left-radius: 0; border-top-right-radius: 0; } .modal-footer { background: var(--surfaceAlt1Color); } &[data-modal-state="open"] { transform: scale(1); @starting-style { transform: scale(0.98); } } } &.preview { width: min-content; min-width: 400px; min-height: 300px; .modal-footer { padding: var(--smSpacing); } .modal-content { display: flex; text-align: center; align-items: flex-start; justify-content: center; padding: 0; margin: auto; width: 100%; max-width: 100%; &:has(img) { width: max-content; } &::before, &::after { content: none; } img { width: 100%; margin: auto; } object { width: 100%; height: 100%; margin: auto; } } /* non-image preview */ &:has(object) { width: 75%; height: 85%; @media (max-width: 900px) { width: 90%; height: 90%; } } &.preview-audio { width: 500px; height: 400px; } } } /* tinymce fullscreen preview */ .tox-fullscreen .modal { width: 100% !important; transition: none; } /* content scroll shadows */ .modal-content { --topShadowOffset: calc(var(--spacing) + 1px); --bottomShadowOffset: calc(var(--spacing) + 1px); min-height: 92px; /* ensure that the content is large enough for the negative shadow margins */ container-type: scroll-state; &::before, &::after { content: ""; position: sticky; display: block; left: 0; z-index: 9; width: auto; height: 1px; margin-left: calc(-1 * var(--spacing)); margin-right: calc(-1 * var(--spacing)); pointer-events: none; opacity: 0; } &::before { top: calc(100% + var(--bottomShadowOffset)); margin-bottom: calc(-1 * var(--bottomShadowOffset)); margin-top: var(--bottomShadowOffset); box-shadow: var(--bottomScrollShadow); @container scroll-state(scrollable: bottom) { opacity: 1; transition: opacity var(--animationSpeed); } } &::after { top: auto; bottom: calc(100% + var(--topShadowOffset)); margin-top: calc(-1 * var(--topShadowOffset)); margin-bottom: var(--topShadowOffset); box-shadow: var(--topScrollShadow); @container scroll-state(scrollable: top) { opacity: 1; transition: opacity var(--animationSpeed); } } .modal-header:not(.isolated) ~ &::after { --topShadowOffset: 6px; } } .modal-header .tabs-header { width: auto; flex-grow: 1; .tab-item { font-size: var(--lgFontSize); } /* "merge" with the header bottom */ .modal-header.isolated &:last-child { padding: 0 var(--spacing); border-bottom: 0; margin-left: calc(-1 * var(--spacing)); margin-right: calc(-1 * var(--spacing)); margin-bottom: calc(-1 * var(--spacing) + 9px); .tab-item { border: 1px solid transparent; border-bottom: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; &:hover, &:focus-visible { background: var(--surfaceAlt2Color); } &:active { background: var(--surfaceAlt3Color); } &.active { background: var(--surfaceColor); border-color: var(--surfaceAlt2Color); } } } .popup .modal-header.isolated &:last-child { margin-bottom: calc(-1 * var(--spacing) + 4px); } }