🏗️ Migrating Navbar to TailwindCSS
This commit is contained in:
BIN
src/client/assets/fonts/PPObjectSans-Heavy.otf
Normal file
BIN
src/client/assets/fonts/PPObjectSans-Heavy.otf
Normal file
Binary file not shown.
BIN
src/client/assets/fonts/PPObjectSans-HeavySlanted.otf
Normal file
BIN
src/client/assets/fonts/PPObjectSans-HeavySlanted.otf
Normal file
Binary file not shown.
BIN
src/client/assets/fonts/PPObjectSans-Regular.otf
Normal file
BIN
src/client/assets/fonts/PPObjectSans-Regular.otf
Normal file
Binary file not shown.
BIN
src/client/assets/fonts/PPObjectSans-Slanted.otf
Normal file
BIN
src/client/assets/fonts/PPObjectSans-Slanted.otf
Normal file
Binary file not shown.
@@ -1,639 +1,11 @@
|
||||
@import "/node_modules/bulma/bulma.sass";
|
||||
@import "/node_modules/bulma-prefers-dark/bulma-prefers-dark.sass";
|
||||
$fa-font-path: "/node_modules/@fortawesome/fontawesome-free/webfonts";
|
||||
@import "/node_modules/@fortawesome/fontawesome-free/scss/fontawesome.scss";
|
||||
@import "/node_modules/@fortawesome/fontawesome-free/scss/regular.scss";
|
||||
@import "/node_modules/@fortawesome/fontawesome-free/scss/solid.scss";
|
||||
$bg-color: yellow;
|
||||
$border-color: red;
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
$volume-color: #fdecd1;
|
||||
$issue-color: #f2f1f9;
|
||||
$size-8: 0.9rem;
|
||||
$size-9: 0.7rem;
|
||||
$flexSize: 4em;
|
||||
$boxSpacing: 1em;
|
||||
$colorText: #404646;
|
||||
body {
|
||||
background: #20292f;
|
||||
}
|
||||
|
||||
.is-size-8 {
|
||||
font-size: $size-8;
|
||||
}
|
||||
|
||||
.is-size-9 {
|
||||
font-size: $size-9;
|
||||
}
|
||||
|
||||
.small-tag {
|
||||
align-items: center;
|
||||
background-color: #fff6de;
|
||||
border-radius: 4px;
|
||||
color: #4a4a4a;
|
||||
display: inline-flex;
|
||||
font-size: $size-9;
|
||||
height: 1.5em;
|
||||
justify-content: center;
|
||||
line-height: 1.5;
|
||||
padding-left: 0.55em;
|
||||
padding-right: 0.55em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
// global style overrides
|
||||
|
||||
pre {
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin-top: 2em;
|
||||
}
|
||||
.app {
|
||||
font-family: helvetica, arial, sans-serif;
|
||||
padding: 2em;
|
||||
border: 5px solid $border-color;
|
||||
|
||||
p {
|
||||
background-color: $bg-color;
|
||||
}
|
||||
}
|
||||
// Navbar
|
||||
.navbar {
|
||||
border-bottom: 1px solid #f2f1f9;
|
||||
.download-progress-meter {
|
||||
margin-left: -300px;
|
||||
min-width: 500px;
|
||||
}
|
||||
.airdcpp-status {
|
||||
min-width: 300px;
|
||||
line-height: 1.7rem;
|
||||
}
|
||||
body {
|
||||
background: #454a59;
|
||||
}
|
||||
|
||||
.pulsating-circle {
|
||||
position: relative;
|
||||
left: -120%;
|
||||
top: 20%;
|
||||
transform: translateX(-50%) translateY(-50%);
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
|
||||
&:before {
|
||||
content: "";
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 300%;
|
||||
height: 300%;
|
||||
box-sizing: border-box;
|
||||
margin-left: -100%;
|
||||
margin-top: -100%;
|
||||
border-radius: 45px;
|
||||
background-color: #01a4e9;
|
||||
animation: pulse-ring 1.25s cubic-bezier(0.215, 0.61, 0.355, 1) infinite;
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: green;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 0 8px rgba(0, 0, 0, 0.3);
|
||||
animation: pulse-dot 1.25s cubic-bezier(0.455, 0.03, 0.515, 0.955) -0.4s infinite;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes pulse-ring {
|
||||
0% {
|
||||
transform: scale(0.33);
|
||||
}
|
||||
80%,
|
||||
100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes pulse-dot {
|
||||
0% {
|
||||
transform: scale(0.8);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1);
|
||||
}
|
||||
100% {
|
||||
transform: scale(0.8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-item.is-mega {
|
||||
position: static;
|
||||
|
||||
.is-mega-menu-title {
|
||||
margin-bottom: 0;
|
||||
padding: 0.375rem 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
// Dashboard
|
||||
|
||||
// slick slider overrides
|
||||
.slick-slider {
|
||||
margin-left: -10px;
|
||||
.slick-list {
|
||||
padding: 0 0px 15px 10px;
|
||||
}
|
||||
}
|
||||
.recent-comics-container {
|
||||
display: -webkit-box; /* Not needed if autoprefixing */
|
||||
display: -ms-flexbox; /* Not needed if autoprefixing */
|
||||
display: flex;
|
||||
margin-left: -22px; /* gutter size offset */
|
||||
width: auto;
|
||||
|
||||
.recent-comics-column {
|
||||
padding-left: 22px; /* gutter size */
|
||||
background-clip: padding-box;
|
||||
& > div {
|
||||
/* change div to reference your elements you put in <Masonry> */
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.volumes-container {
|
||||
.stack {
|
||||
display: inline-block;
|
||||
border-radius: 0.5rem;
|
||||
box-shadow:
|
||||
/* The top layer shadow */ 0 -1px 1px rgba(0, 0, 0, 0.15),
|
||||
/* The second layer */ 0 -10px 0 -5px #eee,
|
||||
/* The second layer shadow */ 0 -10px 1px -4px rgba(0, 0, 0, 0.15),
|
||||
/* The third layer */ 0 -20px 0 -10px #eee,
|
||||
/* The third layer shadow */ 0 -20px 1px -9px rgba(0, 0, 0, 0.15);
|
||||
img {
|
||||
height: auto;
|
||||
border-top-left-radius: 0.5rem;
|
||||
border-top-right-radius: 0.5rem;
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
.stack-title {
|
||||
margin-bottom: 0.4rem;
|
||||
}
|
||||
.content {
|
||||
margin: -5px 0 0 0;
|
||||
padding: 0.5rem 1rem;
|
||||
border-bottom-left-radius: 0.25rem;
|
||||
box-shadow: 1px 8px 23px 7px rgba(0, 0, 0, 0.12);
|
||||
border-bottom-right-radius: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.volumes-grid {
|
||||
display: -webkit-box; /* Not needed if autoprefixing */
|
||||
display: -ms-flexbox; /* Not needed if autoprefixing */
|
||||
display: flex;
|
||||
margin-left: -30px; /* gutter size offset */
|
||||
width: auto;
|
||||
}
|
||||
.volumes-grid-column {
|
||||
padding-left: 22px; /* gutter size */
|
||||
background-clip: padding-box;
|
||||
& > div {
|
||||
/* change div to reference your elements you put in <Masonry> */
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.min {
|
||||
overflow: visible;
|
||||
margin: auto;
|
||||
.tag__custom {
|
||||
height: auto !important;
|
||||
padding: 0.3rem;
|
||||
white-space: unset !important;
|
||||
width: 100%;
|
||||
background-color: #effaf5;
|
||||
color: #257953;
|
||||
}
|
||||
.tags {
|
||||
display: inline;
|
||||
margin-right: 5px;
|
||||
margin-left: 5px;
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
pre {
|
||||
border-radius: 0.4em;
|
||||
margin: 10px 0 10px 0;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
}
|
||||
|
||||
.generic-card {
|
||||
display: inline-block;
|
||||
background-color: hsl(232, 11%, 15%);
|
||||
border-top-left-radius: 0.4rem;
|
||||
border-top-right-radius: 0.4rem;
|
||||
border-bottom-left-radius: 0.4rem;
|
||||
border-bottom-right-radius: 0.4rem;
|
||||
box-shadow: inset 0 0 0.5px 1px hsla(0, 0%, 100%, 0.1),
|
||||
/* 2. shadow ring 👇 */ 0 0 0 1px hsla(230, 13%, 9%, 0.075),
|
||||
/* 3. multiple soft shadows 👇 */ 0 0.3px 0.4px hsla(230, 13%, 9%, 0.02),
|
||||
0 0.9px 1.5px hsla(230, 13%, 9%, 0.045),
|
||||
0 3.5px 6px hsla(230, 13%, 9%, 0.09);
|
||||
|
||||
.green-border {
|
||||
border: 1px dotted #168b64;
|
||||
border-radius: 0.4rem;
|
||||
}
|
||||
|
||||
.truncate {
|
||||
width: 100px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.partial-rounded-card-image {
|
||||
figure {
|
||||
display: flex;
|
||||
img {
|
||||
border-top-left-radius: 0.4rem;
|
||||
border-top-right-radius: 0.4rem;
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.rounded-card-image {
|
||||
figure {
|
||||
display: flex;
|
||||
img {
|
||||
border-radius: 0.4rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
.card-content {
|
||||
.card-title {
|
||||
margin-bottom: 0.4rem;
|
||||
}
|
||||
.custom-icon,
|
||||
i {
|
||||
margin: 4px 4px 4px 0;
|
||||
}
|
||||
padding: 0.5rem 1rem;
|
||||
}
|
||||
}
|
||||
.card-container {
|
||||
// display: grid;
|
||||
// grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
// column-gap: 0.5em;
|
||||
// row-gap: 1.2em;
|
||||
|
||||
.card {
|
||||
margin: 0 0 15px 0;
|
||||
|
||||
.partial-rounded-card-image {
|
||||
img {
|
||||
border-top-left-radius: 0.4rem;
|
||||
border-top-right-radius: 0.4rem;
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
}
|
||||
.rounded-card-image {
|
||||
border-radius: 0.4rem;
|
||||
}
|
||||
|
||||
.is-horizontal {
|
||||
// margin: $boxSpacing / 2;
|
||||
border-radius: 1.5em;
|
||||
height: $flexSize;
|
||||
max-width: $flexSize * 3;
|
||||
flex: 1 1 auto;
|
||||
display: flex;
|
||||
.card-image {
|
||||
// leaving this here... for posterity
|
||||
img.image {
|
||||
border-top-left-radius: 8px;
|
||||
border-bottom-left-radius: 8px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
height: 100%;
|
||||
max-width: $flexSize * 1.3;
|
||||
object-fit: cover;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
img.cropped-image {
|
||||
width: 70px;
|
||||
border-top-left-radius: 8px;
|
||||
border-bottom-left-radius: 8px;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
height: 64px;
|
||||
object-fit: cover;
|
||||
object-position: 100% 0;
|
||||
// flex: 1 1 auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
.card-content {
|
||||
align-self: top;
|
||||
flex: 1;
|
||||
padding-left: 0.7em;
|
||||
padding-top: 0.4em;
|
||||
padding-bottom: 0em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// raw file details
|
||||
.raw-file-details {
|
||||
padding: 1rem;
|
||||
background: #30475e;
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
|
||||
.comic-viewer {
|
||||
border: 1px solid red;
|
||||
}
|
||||
|
||||
// comicvine metadata
|
||||
.comicvine-metadata {
|
||||
background-color: #d6cc99;
|
||||
padding: 0.8rem;
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
|
||||
.issue-metadata {
|
||||
background-color: #57615c;
|
||||
padding: 0.8em;
|
||||
border-radius: 0.5rem;
|
||||
.name {
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
}
|
||||
|
||||
.comicInfo-metadata {
|
||||
background-color: #d6cc99;
|
||||
color: #000;
|
||||
padding: 0.8rem;
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
|
||||
// Comic Detail
|
||||
.comic-detail {
|
||||
dl {
|
||||
dd {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
.button {
|
||||
.airdcpp-text {
|
||||
margin: 0 0 0 0.2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AirDC++ search results
|
||||
.dupe-search-result {
|
||||
background: lavender;
|
||||
}
|
||||
|
||||
// Search
|
||||
.search {
|
||||
.main-search-bar {
|
||||
border: 0;
|
||||
border-bottom: 1px solid #999;
|
||||
border-radius: 0;
|
||||
outline: 0;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
// Library
|
||||
.header-area {
|
||||
background: #20292f;
|
||||
width: 100%;
|
||||
padding: 25px 0 15px 0;
|
||||
position: sticky;
|
||||
z-index: 9;
|
||||
top: 57px;
|
||||
}
|
||||
|
||||
.library {
|
||||
.table-controls {
|
||||
background: #20292f;
|
||||
justify-content: space-between;
|
||||
position: sticky;
|
||||
top: 126px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.pagination {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
table {
|
||||
background: #20292f;
|
||||
border-collapse: separate;
|
||||
width: 100%;
|
||||
thead {
|
||||
background: #20292f;
|
||||
position: sticky;
|
||||
top: 250px;
|
||||
z-index: 1;
|
||||
min-height: 130px;
|
||||
}
|
||||
tr {
|
||||
td {
|
||||
border: 0 none;
|
||||
.card {
|
||||
margin: 8px 0 7px 0;
|
||||
.name {
|
||||
margin: 0 0 4px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tbody {
|
||||
padding: 10px 0 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Comic Detail
|
||||
.control-palette {
|
||||
background-color: #fff6de;
|
||||
display: inline-block;
|
||||
i {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
// padding: 1.5rem 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
// airdcpp downloads tab
|
||||
.tabs {
|
||||
.download-icon-labels {
|
||||
.downloads-count {
|
||||
margin: 0 1em -1px 0.4em;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
}
|
||||
.download-tab-name {
|
||||
}
|
||||
}
|
||||
|
||||
// drawer content padding override
|
||||
.slide-pane__content {
|
||||
padding: 24px 12px;
|
||||
}
|
||||
|
||||
.slide-pane__header {
|
||||
margin-top: 3.5rem;
|
||||
}
|
||||
|
||||
.comic-vine-match-drawer {
|
||||
// comic detail drawer
|
||||
|
||||
.search-criteria-card {
|
||||
width: 100%;
|
||||
.card-content {
|
||||
padding: 10px;
|
||||
.ant-divider-horizontal {
|
||||
margin: 12px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.field {
|
||||
margin: 5px 0 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Volume detail
|
||||
.volume-details {
|
||||
.is-volume-related {
|
||||
$tag-background-color: $volume-color;
|
||||
}
|
||||
.issues-container {
|
||||
display: -webkit-box; /* Not needed if autoprefixing */
|
||||
display: -ms-flexbox; /* Not needed if autoprefixing */
|
||||
display: flex;
|
||||
margin-left: -10px; /* gutter size offset */
|
||||
width: auto;
|
||||
.issues-column {
|
||||
max-width: 102px;
|
||||
margin: 10px;
|
||||
background-clip: padding-box;
|
||||
& > div {
|
||||
/* change div to reference your elements you put in <Masonry> */
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Potential issue matches in library slideout panel
|
||||
.potential-matches-container {
|
||||
.potential-issue-match {
|
||||
border-radius: 0.3rem;
|
||||
background-color: beige;
|
||||
padding: 10px;
|
||||
pre {
|
||||
padding: 5px;
|
||||
background-color: transparent;
|
||||
border-radius: 0.3rem;
|
||||
white-space: pre-wrap; /* Since CSS 2.1 */
|
||||
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
||||
white-space: -pre-wrap; /* Opera 4-6 */
|
||||
white-space: -o-pre-wrap; /* Opera 7 */
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.generic-card {
|
||||
max-width: 90px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// comicvine search results
|
||||
.search-results-container {
|
||||
margin: 15px 0 0 0;
|
||||
overflow: hidden;
|
||||
|
||||
.search-result {
|
||||
margin: 0 0 10px 0;
|
||||
padding: 1em;
|
||||
border-radius: 10px;
|
||||
background: #f2f1f9;
|
||||
.cover-image {
|
||||
border-radius: 5px;
|
||||
}
|
||||
.search-result-details {
|
||||
.score {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
.volume-information {
|
||||
margin-top: -2.5em;
|
||||
width: 80%;
|
||||
background: #fdecd1;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.vertical-line {
|
||||
position: relative;
|
||||
top: -25px;
|
||||
left: 1.5rem;
|
||||
border: 2px dotted #ccc;
|
||||
width: 20px;
|
||||
min-height: 35px;
|
||||
|
||||
border-color: transparent transparent #f3a22d #f3a22d;
|
||||
border-bottom-left-radius: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Library grid
|
||||
.my-masonry-grid {
|
||||
display: -webkit-box; /* Not needed if autoprefixing */
|
||||
display: -ms-flexbox; /* Not needed if autoprefixing */
|
||||
display: flex;
|
||||
margin-left: -30px; /* gutter size offset */
|
||||
width: auto;
|
||||
}
|
||||
.my-masonry-grid_column {
|
||||
padding-left: 30px; /* gutter size */
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
.my-masonry-grid_column > div {
|
||||
/* change div to reference your elements you put in <Masonry> */
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
// progress
|
||||
.progress-indicator-container {
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.indicator {
|
||||
padding: 5px;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
@layer base {
|
||||
@font-face {
|
||||
font-family: "PP Object Sans Regular";
|
||||
src: url("./src/client/assets/fonts/PPObjectSans-Regular.otf")
|
||||
format("opentype");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import React, { ReactElement } from "react";
|
||||
import { Outlet } from "react-router-dom";
|
||||
import Navbar from "./shared/Navbar";
|
||||
import { Navbar2 } from "./shared/Navbar2";
|
||||
import "../assets/scss/App.scss";
|
||||
|
||||
export const App = (): ReactElement => {
|
||||
return (
|
||||
<>
|
||||
<Navbar />
|
||||
<Navbar2 />
|
||||
<Outlet />
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -56,7 +56,7 @@ export const Dashboard = (): ReactElement => {
|
||||
// (state: RootState) => state.comicInfo.libraryStatistics,
|
||||
// );
|
||||
return (
|
||||
<div className="container">
|
||||
<div className="container mx-auto">
|
||||
<section className="section">
|
||||
<h1 className="title">Dashboard</h1>
|
||||
</section>
|
||||
|
||||
11
src/client/components/shared/Navbar2.tsx
Normal file
11
src/client/components/shared/Navbar2.tsx
Normal file
@@ -0,0 +1,11 @@
|
||||
import React from "react";
|
||||
|
||||
export const Navbar2: React.FunctionComponent = () => {
|
||||
return (
|
||||
<header className="dark:bg-gray h-18 bg-white gap-8 px-5 py-5">
|
||||
<div className="mx-auto flex">
|
||||
<img src="/src/client/assets/img/threetwo.png" alt="ThreeTwo!" />
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user