Rename component folders, and prune styles

This commit is contained in:
Infinite 2020-02-02 22:34:02 +01:00
parent fd560c2147
commit c33639d824
50 changed files with 348 additions and 447 deletions

View file

@ -7,8 +7,8 @@ import { ErrorBoundary } from "./components/ErrorBoundary";
import Galleries from "./components/Galleries/Galleries";
import { MainNavbar } from "./components/MainNavbar";
import { PageNotFound } from "./components/PageNotFound";
import Performers from "./components/performers/performers";
import Scenes from "./components/scenes/scenes";
import Performers from "./components/Performers/Performers";
import Scenes from "./components/Scenes/Scenes";
import { Settings } from "./components/Settings/Settings";
import { Stats } from "./components/Stats";
import Studios from "./components/Studios/Studios";

View file

@ -23,7 +23,7 @@ export const GalleryList: React.FC = () => {
}
if (filter.displayMode === DisplayMode.List) {
return (
<Table className="m-auto">
<Table className="col col-sm-6 mx-auto">
<thead>
<tr>
<th>Preview</th>

View file

@ -0,0 +1,7 @@
/* stylelint-disable selector-class-pattern */
.react-photo-gallery--gallery {
img {
object-fit: contain;
}
}
/* stylelint-enable selector-class-pattern */

View file

@ -2,7 +2,7 @@ import React from "react";
import * as GQL from "src/core/generated-graphql";
import { PerformersCriterion } from "src/models/list-filter/criteria/performers";
import { ListFilterModel } from "src/models/list-filter/filter";
import { SceneList } from "../../scenes/SceneList";
import { SceneList } from "src/components/Scenes/SceneList";
interface IPerformerDetailsProps {
performer: Partial<GQL.PerformerDataFragment>;

View file

@ -1,17 +1,4 @@
#performer-details {
td {
padding: 2px 0;
vertical-align: middle;
}
td:first-child {
min-width: 10rem;
}
.form-control {
width: 100%;
}
.scrape-url-button {
color: $text-color;
float: right;
@ -28,7 +15,7 @@
margin: 10px auto;
overflow: hidden;
.image-container img {
.image-container .performer {
max-height: 960px;
max-width: 100%;
}

View file

@ -12,7 +12,7 @@ import {
} from "src/components/Shared";
import { TextUtils } from "src/utils";
import { useToast } from "src/hooks";
import { Pagination } from "../list/Pagination";
import { Pagination } from "src/components/List/Pagination";
import { IParserInput, ParserInput } from "./ParserInput";
import { ParserField } from "./ParserField";
@ -513,7 +513,7 @@ export const SceneFilenameParser: React.FC = () => {
const ids = items.map(i => i.id);
onChangeHandler(ids);
}}
initialIds={props.parserResult.value}
ids={props.parserResult.value}
/>
);
}
@ -591,7 +591,7 @@ export const SceneFilenameParser: React.FC = () => {
return (
<tr className="scene-parser-row">
<td className="text-left">{props.scene.filename}</td>
<td className="text-left parser-field-filename">{props.scene.filename}</td>
<SceneParserField
key="title"
fieldName="Title"
@ -688,14 +688,14 @@ export const SceneFilenameParser: React.FC = () => {
return (
<>
<td className="w-15">
<th className="w-15">
<Form.Check
checked={allSet}
onChange={() => {
onAllSet(!allSet);
}}
/>
</td>
</th>
<th>{fieldName}</th>
</>
);
@ -708,50 +708,48 @@ export const SceneFilenameParser: React.FC = () => {
return (
<>
<div>
<div className="scene-parser-results">
<Table>
<thead>
<tr className="scene-parser-row">
<th className="w-25">Filename</th>
{renderHeader("Title", allTitleSet, onSelectAllTitleSet)}
{renderHeader("Date", allDateSet, onSelectAllDateSet)}
{renderHeader(
"Performers",
allPerformerSet,
onSelectAllPerformerSet
)}
{renderHeader("Tags", allTagSet, onSelectAllTagSet)}
{renderHeader("Studio", allStudioSet, onSelectAllStudioSet)}
</tr>
</thead>
<tbody>
{parserResult.map(scene => (
<SceneParserRow
scene={scene}
key={scene.id}
onChange={changedScene => onChange(scene, changedScene)}
/>
))}
</tbody>
</Table>
</div>
<Pagination
currentPage={parserInput.page}
itemsPerPage={parserInput.pageSize}
totalItems={totalItems}
onChangePage={page => onPageChanged(page)}
/>
<Button variant="primary" onClick={onApply}>
Apply
</Button>
<div className="scene-parser-results">
<Table>
<thead>
<tr className="scene-parser-row">
<th className="w-25">Filename</th>
{renderHeader("Title", allTitleSet, onSelectAllTitleSet)}
{renderHeader("Date", allDateSet, onSelectAllDateSet)}
{renderHeader(
"Performers",
allPerformerSet,
onSelectAllPerformerSet
)}
{renderHeader("Tags", allTagSet, onSelectAllTagSet)}
{renderHeader("Studio", allStudioSet, onSelectAllStudioSet)}
</tr>
</thead>
<tbody>
{parserResult.map(scene => (
<SceneParserRow
scene={scene}
key={scene.id}
onChange={changedScene => onChange(scene, changedScene)}
/>
))}
</tbody>
</Table>
</div>
<Pagination
currentPage={parserInput.page}
itemsPerPage={parserInput.pageSize}
totalItems={totalItems}
onChangePage={page => onPageChanged(page)}
/>
<Button variant="primary" onClick={onApply}>
Apply
</Button>
</>
);
}
return (
<Card id="parser-container">
<Card id="parser-container" className="col col-sm-9 mx-auto">
<h4>Scene Filename Parser</h4>
<ParserInput
input={parserInput}

View file

@ -0,0 +1,37 @@
.scene-parser-results {
overflow-x: auto;
}
.scene-parser-row {
.parser-field-filename {
width: 10ch;
}
.parser-field-title {
width: 40ch;
}
.parser-field-date {
width: 13ch;
}
.parser-field-performers {
width: 20ch;
}
.parser-field-tags {
width: 20ch;
}
.parser-field-studio {
width: 15ch;
}
.form-control {
min-width: 10ch;
}
.form-control + .form-control {
margin-top: .5rem;
}
}

View file

@ -205,7 +205,7 @@ export class ScenePlayerImpl extends React.Component<
public render() {
return (
<HotKeys keyMap={KeyMap} handlers={this.KeyHandlers} className="row">
<HotKeys keyMap={KeyMap} handlers={this.KeyHandlers} className="row scene-player">
<div
id="jwplayer-container"
className="w-100 col-sm-9 m-sm-auto no-gutter"

View file

@ -346,7 +346,7 @@ export const ScenePlayerScrubber: React.FC<IScenePlayerScrubberProps> = (
style={getStyleForSprite(index)}
{...dataAttrs}
>
<span>
<span className="scrubber-item-time">
{TextUtils.secondsToTimestamp(spriteItem.start)} -{" "}
{TextUtils.secondsToTimestamp(spriteItem.end)}
</span>

View file

@ -0,0 +1 @@
export { ScenePlayer } from './ScenePlayer';

View file

@ -1,3 +1,7 @@
.scene-player:focus {
outline: 0;
}
.scrubber-wrapper {
margin: 5px 0;
overflow: hidden;
@ -13,8 +17,9 @@
}
.scrubber-button {
background-color: transparent;
border: 1px solid #555;
color: #fff;
color: $link-color;
cursor: pointer;
font-size: 20px;
font-weight: 800;
@ -35,18 +40,10 @@
position: relative;
-webkit-user-select: none;
width: 96%;
}
.scrubber-content.dragging {
cursor: grabbing;
}
.scrubber-tags-background {
background-color: #555;
height: 20px;
left: 0;
position: absolute;
right: 0;
&.dragging {
cursor: grabbing;
}
}
#scrubber-position-indicator {
@ -85,6 +82,14 @@
height: 20px;
margin-bottom: 10px;
position: relative;
&-background {
background-color: #555;
height: 20px;
left: 0;
position: absolute;
right: 0;
}
}
.scrubber-tag {
@ -94,22 +99,22 @@
padding: 0 10px;
position: absolute;
white-space: nowrap;
}
.scrubber-tag:hover {
background-color: #444;
z-index: 1;
}
&:hover {
background-color: #444;
z-index: 1;
}
.scrubber-tag::after {
border-left: solid 5px transparent;
border-right: solid 5px transparent;
border-top: solid 5px #000;
bottom: -5px;
content: "";
left: 50%;
margin-left: -5px;
position: absolute;
&::after {
border-left: solid 5px transparent;
border-right: solid 5px transparent;
border-top: solid 5px #000;
bottom: -5px;
content: "";
left: 50%;
margin-left: -5px;
position: absolute;
}
}
.scrubber-item {
@ -121,10 +126,10 @@
position: absolute;
text-align: center;
text-shadow: 1px 1px black;
}
.scrubber-item span {
align-self: flex-end;
display: inline-block;
width: 100%;
&-time {
align-self: flex-end;
display: inline-block;
width: 100%;
}
}

View file

@ -182,7 +182,7 @@ export const SceneCard: React.FC<ISceneCardProps> = (
>
<Form.Control
type="checkbox"
className="card-select d-none d-sm-block"
className="scene-card-check d-none d-sm-block"
checked={props.selected}
onChange={() => props.onSelectedChanged(!props.selected, shiftKey)}
onClick={(event: React.MouseEvent<HTMLInputElement, MouseEvent>) => {

View file

@ -6,7 +6,7 @@ import * as GQL from "src/core/generated-graphql";
import { StashService } from "src/core/StashService";
import { GalleryViewer } from "src/components/Galleries/GalleryViewer";
import { LoadingIndicator } from "src/components/Shared";
import { ScenePlayer } from "src/components/scenes/ScenePlayer/ScenePlayer";
import { ScenePlayer } from "src/components/ScenePlayer";
import { ScenePerformerPanel } from "./ScenePerformerPanel";
import { SceneMarkersPanel } from "./SceneMarkersPanel";
import { SceneFileInfoPanel } from "./SceneFileInfoPanel";
@ -50,7 +50,7 @@ export const Scene: React.FC = () => {
return (
<>
<ScenePlayer scene={scene} timestamp={timestamp} autoplay={autoplay} />
<div id="details-container" className="col col-sm-9 m-sm-auto">
<div id="scene-details-container" className="col col-sm-9 m-sm-auto">
<Tabs id="scene-tabs" mountOnEnter>
<Tab eventKey="scene-details-panel" title="Details">
<SceneDetailPanel scene={scene} />

View file

@ -49,12 +49,12 @@ export const SceneDetailPanel: React.FC<ISceneDetailProps> = props => {
<div className="col-4 offset-2">
{props.scene.studio && (
<Link
className="studio-logo"
to={`/studios/${props.scene.studio.id}`}
>
<img
src={props.scene.studio.image_path ?? ""}
alt={`${props.scene.studio.name} logo`}
className="studio-logo"
/>
</Link>
)}

View file

@ -293,7 +293,7 @@ export const SceneEditPanel: React.FC<IProps> = (props: IProps) => {
return (
<div className="form-container row">
<div className="col-6">
<Table id="scene-details">
<Table id="scene-edit-details">
<tbody>
{TableUtils.renderInputGroup({
title: "Title",

View file

@ -1,6 +1,6 @@
import React, { FunctionComponent } from "react";
import * as GQL from "src/core/generated-graphql";
import { PerformerCard } from "src/components/performers/PerformerCard";
import { PerformerCard } from "src/components/Performers/PerformerCard";
interface IScenePerformerPanelProps {
scene: GQL.SceneDataFragment;

View file

@ -55,7 +55,7 @@ export const SceneListTable: React.FC<ISceneListTableProps> = (
)
return (
<div className="row justify-content-center table-list">
<div className="row table-list col col-lg-8 mx-auto">
<Table striped bordered>
<thead>
<tr>

View file

@ -3,33 +3,22 @@
justify-content: center;
margin-bottom: 10px;
button {
.btn {
padding-bottom: 3px;
padding-top: 3px;
}
svg {
.fa-icon {
margin-right: 7px;
}
}
.row {
.scene-card {
overflow: hidden;
padding: 0;
}
}
.scene-card-link {
position: relative;
}
.card-section {
margin-bottom: 0;
padding: .5rem 1rem 0 1rem;
}
.card-select {
.scene-card-check {
left: .5rem;
margin-top: -12px;
opacity: .5;
@ -78,17 +67,15 @@
}
.studio-logo {
img {
margin-top: 1rem;
max-width: 100%;
}
margin-top: 1rem;
max-width: 100%;
}
.scene-header {
flex-basis: auto;
}
#details-container {
#scene-details-container {
.tab-content {
min-height: 15rem;
}
@ -104,12 +91,6 @@
}
}
#scene-details {
input {
width: 100%;
}
}
#details {
min-height: 150px;
}
@ -147,3 +128,85 @@
}
}
}
.scene-specs-overlay {
bottom: 1rem;
color: $text-color;
display: block;
font-weight: 400;
letter-spacing: -.03rem;
position: absolute;
right: .7rem;
text-shadow: 0 0 3px #000;
}
.scene-studio-overlay {
display: block;
font-weight: 900;
height: 10%;
max-width: 40%;
opacity: .75;
position: absolute;
right: .7rem;
top: .7rem;
z-index: 9;
.image-thumbnail {
height: auto;
max-height: 50px;
max-width: 100%;
}
a {
color: $text-color;
display: inline-block;
letter-spacing: -.03rem;
text-align: right;
text-decoration: none;
text-shadow: 0 0 3px #000;
}
}
.overlay-resolution {
font-weight: 900;
margin-right: .3rem;
text-transform: uppercase;
}
.scene-card {
&.card {
overflow: hidden;
padding: 0;
}
&-link {
position: relative;
}
.scene-specs-overlay,
.rating-banner,
.scene-studio-overlay {
transition: opacity .5s;
}
&:hover {
.scene-specs-overlay,
.rating-banner,
.scene-studio-overlay {
opacity: 0;
transition: opacity .5s;
}
.scene-studio-overlay:hover {
opacity: .75;
transition: opacity .5s;
}
}
}
.scene-cover {
display: block;
margin-bottom: 10px;
margin-top: 10px;
max-width: 100%;
}

View file

@ -16,7 +16,7 @@ export const Settings: React.FC = () => {
const onSelect = (val: string) => history.push(`?tab=${val}`);
return (
<Card id="details-container">
<Card className="col col-lg-9 mx-auto">
<Tab.Container
defaultActiveKey={defaultTab}
id="configuration-tabs"

View file

@ -9,7 +9,7 @@ interface IIcon {
}
const Icon: React.FC<IIcon> = ({ icon, className, color }) => (
<FontAwesomeIcon icon={icon} className={className} color={color} />
<FontAwesomeIcon icon={icon} className={`fa-icon ${className}`} color={color} />
);
export default Icon;

View file

@ -159,7 +159,7 @@ export const Studio: React.FC = () => {
})}
>
{isNew && <h2>Add Studio</h2>}
<img className="logo" alt={name} src={imagePreview} />
<img className="logo w-100" alt={name} src={imagePreview} />
<Table>
<tbody>
{TableUtils.renderInputGroup({

View file

@ -2,7 +2,7 @@ import React from "react";
import * as GQL from "src/core/generated-graphql";
import { StudiosCriterion } from "src/models/list-filter/criteria/studios";
import { ListFilterModel } from "src/models/list-filter/filter";
import { SceneList } from "../../scenes/SceneList";
import { SceneList } from "src/components/Scenes/SceneList";
interface IStudioScenesPanel {
studio: Partial<GQL.StudioDataFragment>;

View file

@ -1,6 +1,5 @@
.studio-details {
.logo {
margin: 4rem 0;
width: 100%;
}
}

View file

@ -103,20 +103,20 @@ export const TagList: React.FC = () => {
{tag.name}
</Button>
<div className="ml-auto">
<Button variant="secondary" onClick={() => onAutoTag(tag)}>
<Button variant="secondary" className="tag-list-button" onClick={() => onAutoTag(tag)}>
Auto Tag
</Button>
<Button variant="secondary">
<Link to={NavUtils.makeTagScenesUrl(tag)}>
<Button variant="secondary" className="tag-list-button">
<Link to={NavUtils.makeTagScenesUrl(tag)} className="tag-list-anchor">
Scenes: {tag.scene_count}
</Link>
</Button>
<Button variant="secondary">
<Link to={NavUtils.makeTagSceneMarkersUrl(tag)}>
<Button variant="secondary" className="tag-list-button">
<Link to={NavUtils.makeTagSceneMarkersUrl(tag)} className="tag-list-anchor">
Markers: {tag.scene_marker_count}
</Link>
</Button>
<span>
<span className="tag-list-count">
Total: {(tag.scene_count || 0) + (tag.scene_marker_count || 0)}
</span>
<Button variant="danger" onClick={() => setDeletingTag(tag)}>
@ -128,7 +128,7 @@ export const TagList: React.FC = () => {
});
return (
<div id="tag-list-container">
<div className="col col-sm-8 m-auto">
<Button
variant="primary"
className="mt-2"

View file

@ -1,25 +1,20 @@
#tag-list-container {
display: flex;
flex-direction: column;
margin: 0 auto;
width: 50vw;
.tag-list {
&-row {
margin: .5rem 0;
}
a,
.btn {
&-button {
margin: 0 .5rem;
width: 8rem;
}
&-anchor {
color: $text-color;
text-decoration: none;
}
.tag-list-row {
cursor: pointer;
margin: 10px;
.btn {
margin: 0 10px;
}
}
.tag-list-row:hover {
text-decoration: underline;
&-count {
display: inline-block;
margin: 0 .5rem;
min-width: 6rem;
}
}

View file

@ -87,10 +87,10 @@ export const WallItem: React.FC<IWallItemProps> = (props: IWallItemProps) => {
)}`
);
const thisTags = props.sceneMarker.tags.map(tag => (
<span key={tag.id}>{tag.name}</span>
<span key={tag.id} className="wall-tag">{tag.name}</span>
));
thisTags.unshift(
<span key={props.sceneMarker.primary_tag.id}>
<span key={props.sceneMarker.primary_tag.id} className="wall-tag">
{props.sceneMarker.primary_tag.name}
</span>
);
@ -130,6 +130,7 @@ export const WallItem: React.FC<IWallItemProps> = (props: IWallItemProps) => {
<video
src={videoPath}
poster={screenshotPath}
className="scene-wall-video"
style={videoHoverHook.isHovering.current ? {} : { display: "none" }}
autoPlay
loop
@ -137,6 +138,7 @@ export const WallItem: React.FC<IWallItemProps> = (props: IWallItemProps) => {
/>
<img
alt={title}
className="scene-wall-image"
src={previewPath || screenshotPath}
onError={() => previewNotFound()}
/>

View file

@ -35,10 +35,17 @@
z-index: 2;
}
.double-scale img {
.double-scale .scene-wall-image {
opacity: 0;
}
.scene-wall-video,
.scene-wall-image {
height: 100%;
object-fit: contain;
width: 100%;
}
.scene-wall-item-container {
display: flex;
height: 100%;
@ -49,7 +56,7 @@
width: 100%;
}
.scene-wall-item-container video {
.scene-wall-item-container .scene-wall-video {
height: 100%;
position: absolute;
width: 100%;
@ -69,7 +76,7 @@
text-align: center;
width: 100%;
& span {
.wall-tag {
font-size: 10px;
font-weight: 400;
line-height: 1;
@ -97,12 +104,5 @@
@media (max-width: 576px) {
width: 100%;
}
video,
img {
height: 100%;
object-fit: contain;
width: 100%;
}
}
}

View file

@ -16,8 +16,8 @@ import {
FindPerformersQueryResult
} from "src/core/generated-graphql";
import { LoadingIndicator } from "src/components/Shared";
import { ListFilter } from "src/components/list/ListFilter";
import { Pagination } from "src/components/list/Pagination";
import { ListFilter } from "src/components/List/ListFilter";
import { Pagination } from "src/components/List/Pagination";
import { StashService } from "src/core/StashService";
import { Criterion } from "src/models/list-filter/criteria/criterion";
import { ListFilterModel } from "src/models/list-filter/filter";

View file

@ -1,21 +1,24 @@
@import "styles/theme";
@import "styles/range";
@import "styles/scrollbars";
@import "src/components/Tags/styles.scss";
@import "src/components/performers/styles.scss";
@import "src/components/list/styles.scss";
@import "src/components/Galleries/styles.scss";
@import "src/components/List/styles.scss";
@import "src/components/Performers/styles.scss";
@import "src/components/Scenes/styles.scss";
@import "src/components/SceneFilenameParser/styles.scss";
@import "src/components/ScenePlayer/styles.scss";
@import "src/components/Settings/styles.scss";
@import "src/components/Studios/styles.scss";
@import "src/components/Shared/styles.scss";
@import "src/components/Wall/Wall.scss";
@import "src/components/scenes/ScenePlayer/ScenePlayerScrubber.scss";
@import "src/components/scenes/styles.scss";
@import "src/components/Tags/styles.scss";
@import "src/components/Wall/styles.scss";
body {
color: $text-color;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
margin: 0;
padding: $pt-navbar-height 0 0 0;
padding: 4rem 0 0 0;
@media (min-width: 600px) {
min-width: 845px;
@ -31,11 +34,6 @@ code {
vertical-align: middle;
}
.card {
margin: 5px;
overflow: hidden;
}
@media (min-width: 576px) {
.zoom-0 {
width: 15rem;
@ -88,18 +86,13 @@ code {
width: 20rem;
}
.filter-item,
.operation-item {
margin: 0 10px;
}
.edit-button {
margin-right: 10px;
}
.tag-item {
background-color: $muted-gray;
color: #182026;
color: $dark-text;
font-size: 12px;
font-weight: 400;
line-height: 16px;
@ -114,7 +107,7 @@ code {
background: none;
border: none;
bottom: 2px;
color: #182026;
color: $dark-text;
font-size: 12px;
line-height: 1rem;
margin-left: .5rem;
@ -145,6 +138,11 @@ code {
margin: 10px auto;
}
.filter-item,
.operation-item {
margin: 0 10px;
}
.rating-5 {
background: #ff2f39;
}
@ -181,180 +179,6 @@ code {
transform: rotate(-36deg);
}
.scene-specs-overlay {
bottom: 1rem;
color: $text-color;
display: block;
font-weight: 400;
letter-spacing: -.03rem;
position: absolute;
right: .7rem;
text-shadow: 0 0 3px #000;
}
.scene-studio-overlay {
display: block;
font-weight: 900;
height: 10%;
max-width: 40%;
opacity: .75;
position: absolute;
right: .7rem;
top: .7rem;
z-index: 9;
.image-thumbnail {
height: auto;
max-height: 50px;
max-width: 100%;
}
a {
color: $text-color;
display: inline-block;
letter-spacing: -.03rem;
text-align: right;
text-decoration: none;
text-shadow: 0 0 3px #000;
}
}
.overlay-resolution {
font-weight: 900;
margin-right: .3rem;
text-transform: uppercase;
}
.scene-card {
.scene-specs-overlay,
.rating-banner,
.scene-studio-overlay {
transition: opacity .5s;
}
}
.scene-card:hover {
.scene-specs-overlay,
.rating-banner,
.scene-studio-overlay {
opacity: 0;
transition: opacity .5s;
}
.scene-studio-overlay:hover {
opacity: .75;
transition: opacity .5s;
}
}
#jwplayer-container {
margin: 10px auto;
width: 75%;
}
.video-js {
height: 90vh;
width: 100%;
}
.pre {
white-space: pre-line;
}
/* stylelint-disable selector-class-pattern */
.react-photo-gallery--gallery {
img {
object-fit: contain;
}
}
/* stylelint-enable selector-class-pattern */
#parser-container {
margin: 10px auto;
width: 75%;
.inputs label {
width: 12rem;
}
.scene-parser-results {
overflow-x: auto;
}
.scene-parser-row .parser-field-title input {
width: 50ch;
}
.scene-parser-row .parser-field-date input {
width: 13ch;
}
.scene-parser-row .parser-field-performers input {
width: 20ch;
}
.scene-parser-row .parser-field-tags input {
width: 20ch;
}
.scene-parser-row .parser-field-studio input {
width: 15ch;
}
.scene-parser-row input {
min-width: 10ch;
}
.scene-parser-row div:first-child > input {
margin-bottom: 5px;
}
}
.aliases-field > label {
font-weight: 300;
}
.scene-cover {
display: block;
margin-bottom: 10px;
margin-top: 10px;
max-width: 100%;
}
.collapsible-label {
cursor: pointer;
}
.label-icon {
margin-right: .3rem;
vertical-align: middle;
+ span {
vertical-align: middle;
}
}
.main {
color: $text-color;
}
.table {
color: $text-color;
width: inherit;
}
.table td {
border: none;
}
.table-striped tr:nth-child(odd) td {
background: rgba(92, 112, 128, .15);
}
.tab-pane {
margin-top: 20px;
}
.card {
background-color: #30404d;
border-radius: 3px;
@ -374,64 +198,6 @@ code {
}
}
.button-link {
background-color: transparent;
border-width: 0;
color: $link-color;
cursor: pointer;
display: inline;
padding: 0;
}
.button-link:hover {
text-decoration: underline;
}
.scrubber-button {
background-color: transparent;
color: $link-color;
}
.scrubber-button:hover {
text-decoration: underline;
}
/* BOOTSTRAP OVERRIDES */
.form-control {
&-plaintext {
color: $text-color;
margin: 0;
padding: 0;
option {
color: black;
}
&::placeholder {
color: transparent;
}
&:hover {
cursor: default;
}
}
}
.popover {
&-body {
.btn {
color: $text-color;
}
}
}
.modal {
.modal-body,
.modal-footer {
background-color: rgb(235, 241, 245);
}
}
.image-input {
margin-bottom: 0;
margin-left: .5rem;
@ -461,21 +227,15 @@ code {
}
}
.tab-content {
padding-bottom: 2rem;
}
/* stylelint-disable selector-class-pattern */
.svg-inline--fa {
.fa-icon {
margin: 0 .4rem;
}
.btn .svg-inline--fa {
.btn .fa-icon {
&:last-child:first-child {
margin: 0;
}
}
/* stylelint-enable */
.brand-icon {
padding: 3px 6px;
@ -487,7 +247,7 @@ code {
.top-nav {
@media (max-width: 576px) {
a {
.btn {
padding: 6px;
}
}

View file

@ -4,7 +4,7 @@
::selection {
background-color: #cce2ff;
color: rgba(0, 0, 0, .87);
color: $dark-text;
}
/* Form */
@ -12,7 +12,7 @@
textarea::selection,
input::selection {
background-color: rgba(100, 100, 100, .4);
color: rgba(0, 0, 0, .87);
color: $dark-text;
}
/* Force Simple Scrollbars */

View file

@ -16,11 +16,12 @@ $theme-colors: (
$body-bg: #202b33;
$text-muted: $muted-gray;
$link-color: #48aff0;
$link-hover-color: #48aff0;
$link-hover-color: $link-color;
$text-color: #f5f8fa;
$pre-color: $text-color;
$navbar-dark-color: rgb(245, 248, 250);
$popover-bg: $secondary;
$dark-text: #182026;
@import "node_modules/bootstrap/scss/bootstrap";
@ -30,8 +31,6 @@ $sepia1: #63411e;
$dark-gray2: #202b33;
$dark-gray5: #394b59;
$pt-navbar-height: 4rem;
.btn.active:not(.disabled),
.btn.active.minimal:not(.disabled) {
background-color: rgba(138, 155, 168, .3);
@ -56,6 +55,10 @@ button.minimal {
}
}
hr {
margin: 5px 0;
}
.dropdown-toggle::after {
content: none;
}
@ -67,6 +70,7 @@ button.minimal {
.nav-tabs {
border: none;
margin: auto;
margin-bottom: .5rem;
.nav-link {
border: none;
@ -78,34 +82,38 @@ button.minimal {
color: $link-color;
&:hover {
border-bottom-color: $link-color;
cursor: default;
}
}
&:hover {
border-bottom: 2px solid white;
}
}
}
hr {
margin: 5px 0;
.tab-content {
padding-bottom: 2rem;
}
.table-striped tr:nth-child(odd) td {
background: rgba(92, 112, 128, .15);
}
.table {
border: none;
color: $text-color;
thead {
th {
border: none;
border-bottom: 1px solid rgba(255, 255, 255, .15);
border-top: none;
}
}
td {
a {
color: $text-color;
}
}
}
.table {
td {
border: none;
padding: .25rem .75rem;
}
}
@ -116,4 +124,43 @@ hr {
.card {
border: none;
margin: 5px;
overflow: hidden;
}
.form-control {
&-plaintext {
color: $text-color;
margin: 0;
padding: 0;
option {
color: black;
}
&::placeholder {
color: transparent;
}
&:hover {
cursor: default;
}
}
}
.popover {
&-body {
.btn {
color: $text-color;
}
}
}
.modal {
color: $dark-text;
.modal-body,
.modal-footer {
background-color: rgb(235, 241, 245);
}
}