X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/feab756b9f1e6b47d9877cd746a827fb9c604fe5..refs/pull/4103/head:/resources/sass/_components.scss diff --git a/resources/sass/_components.scss b/resources/sass/_components.scss index f4ed45c2c..825501364 100644 --- a/resources/sass/_components.scss +++ b/resources/sass/_components.scss @@ -1,11 +1,13 @@ + // System wide notifications -[notification] { +.notification { position: fixed; top: 0; right: 0; margin: $-xl; padding: $-m $-l; background-color: #FFF; + @include lightDark(background-color, #fff, #444); border-radius: 4px; border-inline-start: 6px solid currentColor; box-shadow: $bs-large; @@ -33,12 +35,15 @@ margin-top: -8px; svg { height: 1.0rem; - color: #444; + @include lightDark(color, #444, #888); } } span { vertical-align: middle; line-height: 1.3; + @include whenDark { + color: #BBB; + } } &.pos { color: $positive; @@ -57,7 +62,7 @@ } } -[chapter-toggle] { +.chapter-contents-toggle { cursor: pointer; margin: 0; transition: all ease-in-out 180ms; @@ -73,12 +78,12 @@ transform: rotate(90deg); } svg[data-icon="caret-right"] + * { - margin-inline-start: $-xs; + margin-inline-start: $-xxs; } } -[overlay] { - background-color: rgba(0, 0, 0, 0.333); +[overlay], .popup-background { + @include lightDark(background-color, rgba(0, 0, 0, 0.333), rgba(0, 0, 0, 0.6)); position: fixed; z-index: 95536; width: 100%; @@ -99,7 +104,7 @@ } .popup-body { - background-color: #FFF; + @include lightDark(background-color, #fff, #333); max-height: 90%; max-width: 1200px; width: 90%; @@ -116,6 +121,11 @@ width: 800px; max-width: 90%; } + &.very-small { + margin: 2% auto; + width: 600px; + max-width: 90%; + } &:before { display: flex; align-self: flex-start; @@ -128,35 +138,54 @@ } } -.popup-footer button, .popup-header-close { - position: absolute; - top: 0; - right: 0; +.popup-header button, .popup-footer button { margin: 0; - height: 40px; border-radius: 0; box-shadow: none; - &:active { - outline: 0; + color: #FFF; + padding: $-xs $-m; +} + +.popup-header button:not(.popup-header-close) { + font-size: 0.8rem; +} + +.popup-header button:hover { + background-color: rgba(255, 255, 255, 0.1); +} + +.popup-footer { + justify-content: end; + background-color: var(--color-primary-light); + min-height: 41px; + button { + padding: 10px $-m; } } + .popup-header-close { - background-color: transparent; border: 0; color: #FFF; font-size: 16px; - padding: 0 $-m; + cursor: pointer; + svg { + margin-right: 0; + } } .popup-header, .popup-footer { - display: block !important; + display: flex; position: relative; height: 40px; - flex: none !important; + flex: 0; .popup-title { color: #FFF; + margin-right: auto; padding: 8px $-m; } + &.flex-container-row { + display: flex !important; + } } body.flexbox-support #entity-selector-wrap .popup-body .form-group { height: 444px; @@ -175,7 +204,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { .dropzone-container { position: relative; - background-color: #EEE; + @include lightDark(background-color, #eee, #222); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23a9a9a9' fill-opacity='0.52' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'%3E%3C/path%3E%3C/svg%3E"); } @@ -186,18 +215,15 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { float: left; margin: 0; cursor: pointer; - width: (100%/6); + width: math.div(100%, 6); height: auto; - border: 1px solid #DDD; + @include lightDark(border-color, #ddd, #000); box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); transition: all cubic-bezier(.4, 0, 1, 1) 160ms; overflow: hidden; &.selected { - //transform: scale3d(0.92, 0.92, 0.92); - border: 4px solid #FFF; - overflow: hidden; - border-radius: 8px; - box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2); + transform: scale3d(0.92, 0.92, 0.92); + outline: currentColor 2px solid; } img { width: 100%; @@ -218,7 +244,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { } } @include smaller-than($xl) { - width: (100%/4); + width: math.div(100%, 4); } @include smaller-than($m) { .image-meta { @@ -227,10 +253,10 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { } } -#image-manager .load-more { +.image-manager .load-more { display: block; text-align: center; - background-color: #EEE; + @include lightDark(background-color, #EEE, #444); padding: $-s $-m; color: #AAA; clear: both; @@ -239,12 +265,18 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { font-style: italic; } +.image-manager .loading-container { + text-align: center; +} + .image-manager-sidebar { width: 300px; overflow-y: auto; overflow-x: hidden; border-inline-start: 1px solid #DDD; + @include lightDark(border-color, #ddd, #000); .inner { + min-height: auto; padding: $-m; } img { @@ -265,6 +297,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { } .dropzone-container { border-bottom: 1px solid #DDD; + @include lightDark(border-color, #ddd, #000); } } @@ -292,7 +325,7 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { */ .dz-message { font-size: 1em; - line-height: 2.35; + line-height: 2.85; font-style: italic; color: #888; text-align: center; @@ -574,63 +607,158 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { } -.tab-container .nav-tabs { +.tab-container [role="tablist"] { + display: flex; + align-items: end; + justify-items: start; text-align: start; border-bottom: 1px solid #DDD; + @include lightDark(border-color, #ddd, #444); margin-bottom: $-m; - .tab-item { - padding: $-s; - color: #666; - &.selected { - border-bottom-width: 3px; - } - } } -.nav-tabs { - text-align: center; - a, .tab-item { - padding: $-m; - display: inline-block; - color: #666; - fill: #666; - cursor: pointer; - &.selected { - border-bottom: 2px solid var(--color-primary); - } +.tab-container [role="tablist"] button[role="tab"], +.image-manager [role="tablist"] button[role="tab"] { + display: inline-block; + padding: $-s; + @include lightDark(color, rgba(0, 0, 0, .5), rgba(255, 255, 255, .5)); + cursor: pointer; + border-bottom: 2px solid transparent; + margin-bottom: -1px; + &[aria-selected="true"] { + color: var(--color-link) !important; + border-bottom-color: var(--color-link) !important; + } + &:hover, &:focus { + @include lightDark(color, rgba(0, 0, 0, .8), rgba(255, 255, 255, .8)); + @include lightDark(border-bottom-color, rgba(0, 0, 0, .2), rgba(255, 255, 255, .2)); } } +.tab-container [role="tablist"].controls-card { + margin-bottom: 0; + border-bottom: 0; + padding: 0 $-xs; +} .image-picker .none { display: none; } -#code-editor .CodeMirror { - height: 400px; +.code-editor .CodeMirror { + height: auto; + min-height: 50vh; + border-bottom: 0; +} + +.code-editor .lang-options { + overflow-y: scroll; + flex-basis: 200px; + flex-grow: 1; } -#code-editor .lang-options { - max-width: 480px; - margin-bottom: $-s; - a { - margin-inline-end: $-xs; - text-decoration: underline; +.code-editor .lang-options button { + display: block; + padding: $-xs $-m; + border-bottom: 1px solid; + @include lightDark(color, #333, #AAA); + @include lightDark(border-bottom-color, #EEE, #000); + cursor: pointer; + width: 100%; + text-align: left; + font-family: $mono; + font-size: 0.7rem; + padding-left: 24px + $-xs; + &:hover, &.active { + background-color: var(--color-primary-light); + color: var(--color-primary); } } -@include smaller-than($m) { - #code-editor .lang-options { +.code-editor button.lang-option-favorite-toggle { + position: absolute; + top: 0; + left: 0; + width: 28px; + font-size: 1rem; + border: 0; + line-height: 1; + padding: 2px; + z-index: 2; + height: 100%; + text-align: center; + color: var(--color-primary); + svg { + margin: 0; + } +} + +.code-editor button[data-favourite="true"] ~ .action-favourite, +.code-editor button[data-favourite="false"] ~ .action-unfavourite { + display: none; +} + +.code-editor .action-favourite { + opacity: 0.5; +} +.code-editor button:hover ~ .action-favourite { + opacity: 1; +} + +.code-editor label { + background-color: var(--color-primary-light); + width: 100%; + color: var(--color-primary); + padding: $-xxs $-s; + margin-bottom: 0; +} + +.code-editor-language-list { + position: relative; + width: 160px; + z-index: 2; + align-items: stretch; +} + +.code-editor-language-list input { + border-radius: 0; + border: 0; + border-bottom: 1px solid #DDD; + padding: $-xs $-s; + height: auto; +} + +.code-editor-main { + flex: 1; + min-width: 0; + .CodeMirror { + margin-bottom: 0; + z-index: 1; max-width: 100%; + width: 100%; } - #code-editor .CodeMirror { - height: 200px; +} + +.code-editor-body-wrap { + height: 80vh; +} + +@include smaller-than($s) { + .code-editor .lang-options { + display: none; + } + .code-editor-body-wrap { + flex-direction: column; + } + .code-editor-language-list, .code-editor-language-list input { + width: 100%; } } .comment-box { - border: 1px solid #DDD; border-radius: 4px; - background-color: #FFF; + border: 1px solid #DDD; + @include lightDark(border-color, #ddd, #000); + @include lightDark(background-color, #FFF, #222); .content { font-size: 0.666em; p, ul, ol { @@ -671,13 +799,6 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { max-width: 500px; } -.permissions-table [permissions-table-toggle-all-in-row] { - display: none; -} -.permissions-table tr:hover [permissions-table-toggle-all-in-row] { - display: inline; -} - .template-item { cursor: pointer; position: relative; @@ -687,21 +808,331 @@ body.flexbox-support #entity-selector-wrap .popup-body .form-group { .template-item-actions { position: absolute; top: 0; - right: 0; + inset-inline-end: 0; width: 50px; height: 100%; display: flex; flex-direction: column; - border-inline-start: 1px solid #DDD; + border-inline-start: 1px solid; + @include lightDark(border-color, #ddd, #000); } .template-item-actions button { cursor: pointer; flex: 1; - background: #FFF; + @include lightDark(background-color, #FFF, #222); border: 0; - border-top: 1px solid #DDD; + border-top: 1px solid; + @include lightDark(border-color, #DDD, #000); + } + .template-item-actions button svg { + margin: 0; } .template-item-actions button:first-child { border-top: 0; } +} + + +.dropdown-search { + position: relative; +} +.dropdown-search-toggle-breadcrumb { + border: 1px solid transparent; + border-radius: 4px; + line-height: normal; + padding: $-xs; + &:hover { + border-color: #DDD; + } + .svg-icon { + margin-inline-end: 0; + } +} +.dropdown-search-toggle-select { + display: flex; + gap: $-s; + line-height: normal; + .svg-icon { + height: 26px; + width: 26px; + margin: 0; + } + .avatar { + height: 22px; + width: 22px; + } + .avatar + span { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .dropdown-search-toggle-caret { + font-size: 1.15rem; + } +} +.dropdown-search-toggle-select-label { + min-width: 0; + white-space: nowrap; +} +.dropdown-search-toggle-select-caret { + line-height: 0; + margin-left: auto; + margin-top: -2px; + display: flex; + align-items: center; +} + +.dropdown-search-dropdown { + box-shadow: $bs-med; + overflow: hidden; + min-height: 100px; + width: 240px; + display: none; + position: absolute; + z-index: 80; + right: 0; + top: 0; + margin-top: $-m; + @include rtl { + right: auto; + left: -$-m; + } + .dropdown-search-search .svg-icon { + position: absolute; + left: $-s; + @include rtl { + right: $-s; + left: auto; + } + top: 11px; + fill: #888; + pointer-events: none; + } + .dropdown-search-list { + max-height: 400px; + overflow-y: scroll; + text-align: start; + } + .dropdown-search-item { + padding: $-s $-m; + &:hover,&:focus { + background-color: #F2F2F2; + text-decoration: none; + } + } + input, input:focus { + padding-inline-start: $-xl; + border-radius: 0; + border: 0; + border-bottom: 1px solid #DDD; + } + input:focus { + outline: 0; + } +} + +@include smaller-than($m) { + .dropdown-search-dropdown { + position: fixed; + right: auto; + left: $-m; + } + .dropdown-search-dropdown .dropdown-search-list { + max-height: 240px; + } +} + +.item-list { + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1); +} +.item-list-row { + border: 1.5px solid; + @include lightDark(border-color, #E2E2E2, #444); + border-bottom-width: 0; + label { + padding-bottom: 0; + } + &:hover { + @include lightDark(background-color, #F6F6F6, #333); + } +} +.item-list-row:first-child { + border-radius: 4px 4px 0 0; +} +.item-list-row:last-child { + border-radius: 0 0 4px 4px; + border-bottom-width: 1.5px; +} +.item-list-row:first-child:last-child { + border-radius: 4px; +} +.item-list-row-toggle-all { + visibility: hidden; +} +.item-list-row:hover .item-list-row-toggle-all { + visibility: visible; +} + +.status-indicator-active, .status-indicator-inactive { + width: 8px; + height: 8px; + border-radius: 50%; + display: inline-block; +} +.status-indicator-active { + background-color: $positive; +} +.status-indicator-inactive { + background-color: $negative; +} + +.shortcut-container { + background-color: rgba(0, 0, 0, 0.25); + pointer-events: none; + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 99; +} +.shortcut-linkage { + position: fixed; + box-shadow: 0 0 4px 0 #FFF; + border-radius: 3px; +} +.shortcut-hint { + position: fixed; + padding: $-xxs $-xxs; + font-size: .85rem; + font-weight: 700; + line-height: 1; + background-color: #eee; + border-radius: 3px; + border: 1px solid #b4b4b4; + box-shadow: 0 1px 1px rgba(0, 0, 0, .2), 0 2px 0 0 rgba(255, 255, 255, .7) inset; + color: #333; +} + +// Back to top link +$btt-size: 40px; +.back-to-top { + background-color: var(--color-primary); + position: fixed; + bottom: $-m; + right: $-l; + padding: 5px 7px; + cursor: pointer; + color: #FFF; + fill: #FFF; + svg { + width: math.div($btt-size, 1.5); + height: math.div($btt-size, 1.5); + margin-inline-end: 4px; + } + width: $btt-size; + height: $btt-size; + border-radius: $btt-size; + transition: all ease-in-out 180ms; + opacity: 0; + z-index: 999; + overflow: hidden; + &:hover { + width: $btt-size*3.4; + opacity: 1 !important; + } + .inner { + width: $btt-size*3.4; + } + span { + position: relative; + vertical-align: top; + line-height: 2; + } +} + +// Sortable scroll boxes +.scroll-box { + list-style: none; + padding: 0; + margin: 0; + max-height: 280px; + overflow-y: scroll; + border: 1px solid; + @include lightDark(border-color, #DDD, #000); + border-radius: 3px; + min-height: 20px; + @include lightDark(background-color, #EEE, #000); +} +.scroll-box-item { + border-bottom: 1px solid; + border-top: 1px solid; + @include lightDark(border-color, #DDD, #000); + margin-top: -1px; + @include lightDark(background-color, #FFF, #222); + display: flex; + align-items: flex-start; + padding: 1px; + &:last-child { + border-bottom: 0; + } + &:hover { + cursor: pointer; + @include lightDark(background-color, #f8f8f8, #333); + } + .handle { + color: #AAA; + cursor: grab; + } + button { + opacity: .6; + } + .handle svg { + margin: 0; + } + > * { + padding: $-xs $-m; + } + .handle + * { + padding-left: 0; + } + &:hover .handle { + @include lightDark(color, #444, #FFF); + } + &:hover button { + opacity: 1; + } + a:hover { + text-decoration: none; + } +} + +input.scroll-box-search, .scroll-box-header-item { + font-size: 0.8rem; + border: 1px solid; + @include lightDark(border-color, #DDD, #000); + @include lightDark(background-color, #FFF, #222); + margin-bottom: -1px; + border-radius: 3px 3px 0 0; + width: 100%; + max-width: 100%; + height: auto; + line-height: 1.4; + color: #666; +} + +.scroll-box-search + .scroll-box, +.scroll-box-header-item + .scroll-box { + border-radius: 0 0 3px 3px; +} + +.scroll-box[refs="shelf-sort@shelf-book-list"] [data-action="add"] { + display: none; +} +.scroll-box[refs="shelf-sort@all-book-list"] [data-action="remove"], +.scroll-box[refs="shelf-sort@all-book-list"] [data-action="move_up"], +.scroll-box[refs="shelf-sort@all-book-list"] [data-action="move_down"], +{ + display: none; } \ No newline at end of file