From 1de10fdf3e8d9d32026e38affbdf277d919b062e Mon Sep 17 00:00:00 2001 From: BFlat Date: Thu, 4 Aug 2022 06:44:19 +0700 Subject: [PATCH] dashboard --- packages/storyteller-stream/package.json | 8 +- .../public/assets/storyteller-logo.png | Bin 0 -> 8839 bytes packages/storyteller-stream/src/App.scss | 49 +++++++++--- packages/storyteller-stream/src/App.tsx | 11 ++- .../storyteller-stream/src/layout/TopNav.tsx | 12 +-- .../src/pages/dashboard/Dashboard.tsx | 50 ++++++++++++ .../src/pages/dashboard/DashboardPage.tsx | 32 ++++++++ .../src/pages/dashboard/Sidebar.tsx | 71 ++++++++++++++++++ .../src/pages/dashboard/Test.tsx | 32 ++++++++ 9 files changed, 241 insertions(+), 24 deletions(-) create mode 100644 packages/storyteller-stream/public/assets/storyteller-logo.png create mode 100644 packages/storyteller-stream/src/pages/dashboard/Dashboard.tsx create mode 100644 packages/storyteller-stream/src/pages/dashboard/DashboardPage.tsx create mode 100644 packages/storyteller-stream/src/pages/dashboard/Sidebar.tsx create mode 100644 packages/storyteller-stream/src/pages/dashboard/Test.tsx diff --git a/packages/storyteller-stream/package.json b/packages/storyteller-stream/package.json index e088de14c7..95fc2f1671 100644 --- a/packages/storyteller-stream/package.json +++ b/packages/storyteller-stream/package.json @@ -5,10 +5,10 @@ "dependencies": { "@storyteller/components": "0.1.0", "@craco/craco": "^6.4.3", - "@fortawesome/fontawesome-svg-core": "^1.2.36", - "@fortawesome/free-brands-svg-icons": "^5.15.4", - "@fortawesome/free-solid-svg-icons": "^5.15.4", - "@fortawesome/react-fontawesome": "^0.1.15", + "@fortawesome/fontawesome-svg-core": "^6.1.1", + "@fortawesome/free-brands-svg-icons": "^6.1.1", + "@fortawesome/free-solid-svg-icons": "^6.1.1", + "@fortawesome/react-fontawesome": "^0.2.0", "@testing-library/jest-dom": "^5.16.1", "@testing-library/react": "^9.5.0", "@testing-library/user-event": "^13.5.0", diff --git a/packages/storyteller-stream/public/assets/storyteller-logo.png b/packages/storyteller-stream/public/assets/storyteller-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6504997d287ee8ab4f0f2ff54d45dbf8697f0671 GIT binary patch literal 8839 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 Xu3h`7KcOW5{lfSv^-Z!;+%WKe7)wP+ literal 0 HcmV?d00001 diff --git a/packages/storyteller-stream/src/App.scss b/packages/storyteller-stream/src/App.scss index 98c232fd31..b1dcc05e03 100644 --- a/packages/storyteller-stream/src/App.scss +++ b/packages/storyteller-stream/src/App.scss @@ -1,7 +1,8 @@ //@import-normalize; /* bring in normalize.css styles */ // $page-width: 700px; - +$primary: #fc6b68; +$white: #fff; $light-text-color: #777; $button-text-color: #666; @@ -156,12 +157,44 @@ p { border: none; } -.nav-bg-dark { - background-color: #17101c !important; +// .nav-bg-dark { +// background-color: #17101c !important; +// } + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: $primary; + + &:hover { + background-color: $primary; + } } -.m-page-top { - margin-top: 100px; +.nav-pills .nav-link { + border-radius: 5px; + color: rgba(#fff, 0.7); + transition: 0.2s; + padding: 12px 14px !important; + + &:hover { + background-color: rgba($white, 0.1); + } +} + +.icon { + content: ""; + width: 20px; + margin-right: 16px; +} + +.p-page-top { + padding-top: 110px; +} + +.p-page { + padding-top: 100px; + padding-bottom: 100px; } .offcanvas { @@ -223,12 +256,6 @@ span.word:after { min-height: 100%; } -.bg-title { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' version='1.1' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:svgjs='http://svgjs.com/svgjs' width='1920' height='300' preserveAspectRatio='none' viewBox='0 0 1920 300'%3e%3cg mask='url(%26quot%3b%23SvgjsMask1028%26quot%3b)' fill='none'%3e%3cpath d='M1170 175L183 174' stroke-width='8' stroke='url(%23SvgjsLinearGradient1029)' stroke-linecap='round' class='Left'%3e%3c/path%3e%3cpath d='M1456 93L968 92' stroke-width='10' stroke='url(%23SvgjsLinearGradient1029)' stroke-linecap='round' class='Left'%3e%3c/path%3e%3cpath d='M1459 102L2490 101' stroke-width='6' stroke='url(%23SvgjsLinearGradient1029)' stroke-linecap='round' class='Left'%3e%3c/path%3e%3cpath d='M766 41L192 40' stroke-width='6' stroke='url(%23SvgjsLinearGradient1030)' stroke-linecap='round' class='Right'%3e%3c/path%3e%3cpath d='M261 212L-475 211' stroke-width='10' stroke='url(%23SvgjsLinearGradient1030)' stroke-linecap='round' class='Right'%3e%3c/path%3e%3cpath d='M251 192L1533 191' stroke-width='6' stroke='url(%23SvgjsLinearGradient1029)' stroke-linecap='round' class='Left'%3e%3c/path%3e%3cpath d='M172 211L936 210' stroke-width='8' stroke='url(%23SvgjsLinearGradient1030)' stroke-linecap='round' class='Right'%3e%3c/path%3e%3cpath d='M1070 207L1854 206' stroke-width='10' stroke='url(%23SvgjsLinearGradient1029)' stroke-linecap='round' class='Left'%3e%3c/path%3e%3c/g%3e%3cdefs%3e%3cmask id='SvgjsMask1028'%3e%3crect width='1920' height='300' fill='white'%3e%3c/rect%3e%3c/mask%3e%3clinearGradient x1='100%25' y1='0%25' x2='0%25' y2='0%25' id='SvgjsLinearGradient1029'%3e%3cstop stop-color='rgba(247%2c 84%2c 92%2c 0)' offset='0'%3e%3c/stop%3e%3cstop stop-color='rgba(247%2c 84%2c 92%2c 0.05 )' offset='1'%3e%3c/stop%3e%3c/linearGradient%3e%3clinearGradient x1='0%25' y1='0%25' x2='100%25' y2='0%25' id='SvgjsLinearGradient1030'%3e%3cstop stop-color='rgba(247%2c 84%2c 92%2c 0)' offset='0'%3e%3c/stop%3e%3cstop stop-color='rgba(247%2c 84%2c 92%2c 0.05)' offset='1'%3e%3c/stop%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e"); - background-size: auto; - background-repeat: no-repeat; -} - .bg-hero { background: rgb(18, 14, 26); background: linear-gradient( diff --git a/packages/storyteller-stream/src/App.tsx b/packages/storyteller-stream/src/App.tsx index cc6e1182fc..4fe7fed01c 100644 --- a/packages/storyteller-stream/src/App.tsx +++ b/packages/storyteller-stream/src/App.tsx @@ -28,6 +28,7 @@ import { TtsConfigsDeleteRulePage } from "./pages/tts_configs/TtsConfigsDeleteRu import { TtsConfigsEditRulePage } from "./pages/tts_configs/TtsConfigsEditRulePage"; import { TtsConfigsReorderPage } from "./pages/tts_configs/TtsConfigsReorderPage"; import { ObsConfigsPage } from "./pages/obs_configs/ObsConfigsPage"; +import { Dashboard } from "./pages/dashboard/Dashboard"; i18n .use(initReactI18next) // passes i18n down to react-i18next @@ -120,7 +121,7 @@ class App extends React.Component { public render() { return ( -
+
{ allTtsModelsByToken={this.state.allTtsModelsByToken} /> + + + + { -
+ {/*

Copyright © 2022 Storyteller

-
+
*/}
diff --git a/packages/storyteller-stream/src/layout/TopNav.tsx b/packages/storyteller-stream/src/layout/TopNav.tsx index 9dbab62ff1..7cb5304f19 100644 --- a/packages/storyteller-stream/src/layout/TopNav.tsx +++ b/packages/storyteller-stream/src/layout/TopNav.tsx @@ -16,13 +16,13 @@ function TopNav(props: Props) { aria-label="Offcanvas navbar large" >
- + Fake You Logo - + +
+ ); +} + +export { DashboardPage }; diff --git a/packages/storyteller-stream/src/pages/dashboard/Sidebar.tsx b/packages/storyteller-stream/src/pages/dashboard/Sidebar.tsx new file mode 100644 index 0000000000..ec045d9d51 --- /dev/null +++ b/packages/storyteller-stream/src/pages/dashboard/Sidebar.tsx @@ -0,0 +1,71 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { + faCog, + faHome, + faVideo, + faVolumeUp, +} from "@fortawesome/free-solid-svg-icons"; +import { Link } from "react-router-dom"; + +function Sidebar(props: Props) { + // if (!props.sessionWrapper.isLoggedIn()) { + // return ( + //
+ //
+ //

Must Log In

+ //
+ //
+ // ); + // } + + return ( +
+ ); +} + +export { Sidebar }; diff --git a/packages/storyteller-stream/src/pages/dashboard/Test.tsx b/packages/storyteller-stream/src/pages/dashboard/Test.tsx new file mode 100644 index 0000000000..fa9799ac71 --- /dev/null +++ b/packages/storyteller-stream/src/pages/dashboard/Test.tsx @@ -0,0 +1,32 @@ +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { + faCog, + faHome, + faVideo, + faVolumeUp, +} from "@fortawesome/free-solid-svg-icons"; + +function Test(props: Props) { + // if (!props.sessionWrapper.isLoggedIn()) { + // return ( + //
+ //
+ //

Must Log In

+ //
+ //
+ // ); + // } + + return ( +
+

+ TESTY TEST +

+ +
+ ); +} + +export { Test };