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 Galleries from "./components/Galleries/Galleries";
import { MainNavbar } from "./components/MainNavbar"; import { MainNavbar } from "./components/MainNavbar";
import { PageNotFound } from "./components/PageNotFound"; import { PageNotFound } from "./components/PageNotFound";
import Performers from "./components/performers/performers"; import Performers from "./components/Performers/Performers";
import Scenes from "./components/scenes/scenes"; import Scenes from "./components/Scenes/Scenes";
import { Settings } from "./components/Settings/Settings"; import { Settings } from "./components/Settings/Settings";
import { Stats } from "./components/Stats"; import { Stats } from "./components/Stats";
import Studios from "./components/Studios/Studios"; import Studios from "./components/Studios/Studios";

View File

@@ -23,7 +23,7 @@ export const GalleryList: React.FC = () => {
} }
if (filter.displayMode === DisplayMode.List) { if (filter.displayMode === DisplayMode.List) {
return ( return (
<Table className="m-auto"> <Table className="col col-sm-6 mx-auto">
<thead> <thead>
<tr> <tr>
<th>Preview</th> <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 * as GQL from "src/core/generated-graphql";
import { PerformersCriterion } from "src/models/list-filter/criteria/performers"; import { PerformersCriterion } from "src/models/list-filter/criteria/performers";
import { ListFilterModel } from "src/models/list-filter/filter"; import { ListFilterModel } from "src/models/list-filter/filter";
import { SceneList } from "../../scenes/SceneList"; import { SceneList } from "src/components/Scenes/SceneList";
interface IPerformerDetailsProps { interface IPerformerDetailsProps {
performer: Partial<GQL.PerformerDataFragment>; performer: Partial<GQL.PerformerDataFragment>;

View File

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

View File

@@ -12,7 +12,7 @@ import {
} from "src/components/Shared"; } from "src/components/Shared";
import { TextUtils } from "src/utils"; import { TextUtils } from "src/utils";
import { useToast } from "src/hooks"; import { useToast } from "src/hooks";
import { Pagination } from "../list/Pagination"; import { Pagination } from "src/components/List/Pagination";
import { IParserInput, ParserInput } from "./ParserInput"; import { IParserInput, ParserInput } from "./ParserInput";
import { ParserField } from "./ParserField"; import { ParserField } from "./ParserField";
@@ -513,7 +513,7 @@ export const SceneFilenameParser: React.FC = () => {
const ids = items.map(i => i.id); const ids = items.map(i => i.id);
onChangeHandler(ids); onChangeHandler(ids);
}} }}
initialIds={props.parserResult.value} ids={props.parserResult.value}
/> />
); );
} }
@@ -591,7 +591,7 @@ export const SceneFilenameParser: React.FC = () => {
return ( return (
<tr className="scene-parser-row"> <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 <SceneParserField
key="title" key="title"
fieldName="Title" fieldName="Title"
@@ -688,14 +688,14 @@ export const SceneFilenameParser: React.FC = () => {
return ( return (
<> <>
<td className="w-15"> <th className="w-15">
<Form.Check <Form.Check
checked={allSet} checked={allSet}
onChange={() => { onChange={() => {
onAllSet(!allSet); onAllSet(!allSet);
}} }}
/> />
</td> </th>
<th>{fieldName}</th> <th>{fieldName}</th>
</> </>
); );
@@ -708,7 +708,6 @@ export const SceneFilenameParser: React.FC = () => {
return ( return (
<> <>
<div>
<div className="scene-parser-results"> <div className="scene-parser-results">
<Table> <Table>
<thead> <thead>
@@ -745,13 +744,12 @@ export const SceneFilenameParser: React.FC = () => {
<Button variant="primary" onClick={onApply}> <Button variant="primary" onClick={onApply}>
Apply Apply
</Button> </Button>
</div>
</> </>
); );
} }
return ( return (
<Card id="parser-container"> <Card id="parser-container" className="col col-sm-9 mx-auto">
<h4>Scene Filename Parser</h4> <h4>Scene Filename Parser</h4>
<ParserInput <ParserInput
input={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() { public render() {
return ( return (
<HotKeys keyMap={KeyMap} handlers={this.KeyHandlers} className="row"> <HotKeys keyMap={KeyMap} handlers={this.KeyHandlers} className="row scene-player">
<div <div
id="jwplayer-container" id="jwplayer-container"
className="w-100 col-sm-9 m-sm-auto no-gutter" 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)} style={getStyleForSprite(index)}
{...dataAttrs} {...dataAttrs}
> >
<span> <span className="scrubber-item-time">
{TextUtils.secondsToTimestamp(spriteItem.start)} -{" "} {TextUtils.secondsToTimestamp(spriteItem.start)} -{" "}
{TextUtils.secondsToTimestamp(spriteItem.end)} {TextUtils.secondsToTimestamp(spriteItem.end)}
</span> </span>

View File

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

View File

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

View File

@@ -182,7 +182,7 @@ export const SceneCard: React.FC<ISceneCardProps> = (
> >
<Form.Control <Form.Control
type="checkbox" type="checkbox"
className="card-select d-none d-sm-block" className="scene-card-check d-none d-sm-block"
checked={props.selected} checked={props.selected}
onChange={() => props.onSelectedChanged(!props.selected, shiftKey)} onChange={() => props.onSelectedChanged(!props.selected, shiftKey)}
onClick={(event: React.MouseEvent<HTMLInputElement, MouseEvent>) => { 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 { StashService } from "src/core/StashService";
import { GalleryViewer } from "src/components/Galleries/GalleryViewer"; import { GalleryViewer } from "src/components/Galleries/GalleryViewer";
import { LoadingIndicator } from "src/components/Shared"; 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 { ScenePerformerPanel } from "./ScenePerformerPanel";
import { SceneMarkersPanel } from "./SceneMarkersPanel"; import { SceneMarkersPanel } from "./SceneMarkersPanel";
import { SceneFileInfoPanel } from "./SceneFileInfoPanel"; import { SceneFileInfoPanel } from "./SceneFileInfoPanel";
@@ -50,7 +50,7 @@ export const Scene: React.FC = () => {
return ( return (
<> <>
<ScenePlayer scene={scene} timestamp={timestamp} autoplay={autoplay} /> <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> <Tabs id="scene-tabs" mountOnEnter>
<Tab eventKey="scene-details-panel" title="Details"> <Tab eventKey="scene-details-panel" title="Details">
<SceneDetailPanel scene={scene} /> <SceneDetailPanel scene={scene} />

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,33 +3,22 @@
justify-content: center; justify-content: center;
margin-bottom: 10px; margin-bottom: 10px;
button { .btn {
padding-bottom: 3px; padding-bottom: 3px;
padding-top: 3px; padding-top: 3px;
} }
svg { .fa-icon {
margin-right: 7px; margin-right: 7px;
} }
} }
.row {
.scene-card {
overflow: hidden;
padding: 0;
}
}
.scene-card-link {
position: relative;
}
.card-section { .card-section {
margin-bottom: 0; margin-bottom: 0;
padding: .5rem 1rem 0 1rem; padding: .5rem 1rem 0 1rem;
} }
.card-select { .scene-card-check {
left: .5rem; left: .5rem;
margin-top: -12px; margin-top: -12px;
opacity: .5; opacity: .5;
@@ -78,17 +67,15 @@
} }
.studio-logo { .studio-logo {
img {
margin-top: 1rem; margin-top: 1rem;
max-width: 100%; max-width: 100%;
} }
}
.scene-header { .scene-header {
flex-basis: auto; flex-basis: auto;
} }
#details-container { #scene-details-container {
.tab-content { .tab-content {
min-height: 15rem; min-height: 15rem;
} }
@@ -104,12 +91,6 @@
} }
} }
#scene-details {
input {
width: 100%;
}
}
#details { #details {
min-height: 150px; 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}`); const onSelect = (val: string) => history.push(`?tab=${val}`);
return ( return (
<Card id="details-container"> <Card className="col col-lg-9 mx-auto">
<Tab.Container <Tab.Container
defaultActiveKey={defaultTab} defaultActiveKey={defaultTab}
id="configuration-tabs" id="configuration-tabs"

View File

@@ -9,7 +9,7 @@ interface IIcon {
} }
const Icon: React.FC<IIcon> = ({ icon, className, color }) => ( 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; export default Icon;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,21 +1,24 @@
@import "styles/theme"; @import "styles/theme";
@import "styles/range"; @import "styles/range";
@import "styles/scrollbars"; @import "styles/scrollbars";
@import "src/components/Tags/styles.scss"; @import "src/components/Galleries/styles.scss";
@import "src/components/performers/styles.scss"; @import "src/components/List/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/Settings/styles.scss";
@import "src/components/Studios/styles.scss"; @import "src/components/Studios/styles.scss";
@import "src/components/Shared/styles.scss"; @import "src/components/Shared/styles.scss";
@import "src/components/Wall/Wall.scss"; @import "src/components/Tags/styles.scss";
@import "src/components/scenes/ScenePlayer/ScenePlayerScrubber.scss"; @import "src/components/Wall/styles.scss";
@import "src/components/scenes/styles.scss";
body { body {
color: $text-color;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
margin: 0; margin: 0;
padding: $pt-navbar-height 0 0 0; padding: 4rem 0 0 0;
@media (min-width: 600px) { @media (min-width: 600px) {
min-width: 845px; min-width: 845px;
@@ -31,11 +34,6 @@ code {
vertical-align: middle; vertical-align: middle;
} }
.card {
margin: 5px;
overflow: hidden;
}
@media (min-width: 576px) { @media (min-width: 576px) {
.zoom-0 { .zoom-0 {
width: 15rem; width: 15rem;
@@ -88,18 +86,13 @@ code {
width: 20rem; width: 20rem;
} }
.filter-item,
.operation-item {
margin: 0 10px;
}
.edit-button { .edit-button {
margin-right: 10px; margin-right: 10px;
} }
.tag-item { .tag-item {
background-color: $muted-gray; background-color: $muted-gray;
color: #182026; color: $dark-text;
font-size: 12px; font-size: 12px;
font-weight: 400; font-weight: 400;
line-height: 16px; line-height: 16px;
@@ -114,7 +107,7 @@ code {
background: none; background: none;
border: none; border: none;
bottom: 2px; bottom: 2px;
color: #182026; color: $dark-text;
font-size: 12px; font-size: 12px;
line-height: 1rem; line-height: 1rem;
margin-left: .5rem; margin-left: .5rem;
@@ -145,6 +138,11 @@ code {
margin: 10px auto; margin: 10px auto;
} }
.filter-item,
.operation-item {
margin: 0 10px;
}
.rating-5 { .rating-5 {
background: #ff2f39; background: #ff2f39;
} }
@@ -181,180 +179,6 @@ code {
transform: rotate(-36deg); 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 { .card {
background-color: #30404d; background-color: #30404d;
border-radius: 3px; 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 { .image-input {
margin-bottom: 0; margin-bottom: 0;
margin-left: .5rem; margin-left: .5rem;
@@ -461,21 +227,15 @@ code {
} }
} }
.tab-content { .fa-icon {
padding-bottom: 2rem;
}
/* stylelint-disable selector-class-pattern */
.svg-inline--fa {
margin: 0 .4rem; margin: 0 .4rem;
} }
.btn .svg-inline--fa { .btn .fa-icon {
&:last-child:first-child { &:last-child:first-child {
margin: 0; margin: 0;
} }
} }
/* stylelint-enable */
.brand-icon { .brand-icon {
padding: 3px 6px; padding: 3px 6px;
@@ -487,7 +247,7 @@ code {
.top-nav { .top-nav {
@media (max-width: 576px) { @media (max-width: 576px) {
a { .btn {
padding: 6px; padding: 6px;
} }
} }

View File

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

View File

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