diff --git a/src/programs/Calculator/Calculator.scss b/src/programs/Calculator/Calculator.scss deleted file mode 100644 index 5b30603..0000000 --- a/src/programs/Calculator/Calculator.scss +++ /dev/null @@ -1,73 +0,0 @@ -.calculator { - width: 100%; - height: 100%; - display: grid; - grid-template-rows: 1fr 1fr 3fr; - grid-template-areas: - "input" - "output" - "buttons"; - box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; - padding: 10px; - border-radius: 10px; - box-sizing: border-box; - gap: 10px; - - &__input, - &__output { - box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; - width: 100%; - height: 100%; - display: flex; - justify-content: flex-end; - align-items: center; - padding: 20px; - box-sizing: border-box; - &-contents { - text-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5); - } - } - &__input { - grid-area: input; - } - &__output { - grid-area: output; - } - - &__buttons { - min-height: 0; - grid-area: buttons; - width: 100%; - height: 100%; - justify-self: center; - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - grid-template-rows: 1fr 1fr 1fr 1fr 1fr; - box-sizing: border-box; - } - - &__button { - text-align: center; - cursor: default; - border-radius: 20px; - justify-self: center; - width: 80%; - height: 80%; - box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5); - box-sizing: border-box; - display: flex; - justify-content: center; - align-items: center; - - &:hover { - backdrop-filter: brightness(150%); - transition: ease-in 0.2s; - } - &:active { - box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5) inset; - } - - &-contents { - } - } -} diff --git a/src/programs/Calculator/Calculator.tsx b/src/programs/Calculator/Calculator.tsx index 3e6afdb..413339b 100644 --- a/src/programs/Calculator/Calculator.tsx +++ b/src/programs/Calculator/Calculator.tsx @@ -1,6 +1,13 @@ import { useEffect, useState } from "react"; -import "./Calculator.scss"; +import { + StyledButton, + StyledButtonContent, + StyledButtons, + StyledCalc, + StyledInputOutput, + StyledInputOutputContents, +} from "./styles"; interface CalculatorProps {} @@ -55,24 +62,22 @@ function Calculator({}: CalculatorProps) { } return ( -
- {displayChar} -
+ + {displayChar} + ); } return ( -
-
-
{input}
-
-
-
{output}
-
-
+ + + {input} + + + {output} + +
-
+ + ); } diff --git a/src/programs/Calculator/CalculatorLauncher/CalculatorLauncher.scss b/src/programs/Calculator/CalculatorLauncher/CalculatorLauncher.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/programs/Calculator/CalculatorLauncher/CalculatorLauncher.tsx b/src/programs/Calculator/CalculatorLauncher/CalculatorLauncher.tsx index 48ce15c..6b322f6 100644 --- a/src/programs/Calculator/CalculatorLauncher/CalculatorLauncher.tsx +++ b/src/programs/Calculator/CalculatorLauncher/CalculatorLauncher.tsx @@ -1,6 +1,5 @@ import Calculator from ".."; import Launcher from "../../../components/BottomBar/Launcher"; -import "./CalculatorLauncher.scss"; interface CalculatorLauncherProps {} diff --git a/src/programs/Calculator/styles.ts b/src/programs/Calculator/styles.ts new file mode 100644 index 0000000..889dc89 --- /dev/null +++ b/src/programs/Calculator/styles.ts @@ -0,0 +1,74 @@ +import styled from "@emotion/styled"; + +export const StyledCalc = styled.div` + width: 100%; + height: 100%; + display: grid; + grid-template-rows: 1fr 1fr 3fr; + grid-template-areas: + "input" + "output" + "buttons"; + box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; + padding: 10px; + border-radius: 10px; + box-sizing: border-box; + gap: 10px; +`; + +export const StyledInputOutput = styled.div<{ + direction: "input" | "output"; +}>` + box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; + width: 100%; + height: 100%; + display: flex; + justify-content: flex-end; + align-items: center; + padding: 20px; + box-sizing: border-box; + grid-area: ${(props) => props.direction}; +`; + +export const StyledInputOutputContents = styled.div` + text-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5); +`; + +export const StyledButtons = styled.div` + min-height: 0; + grid-area: buttons; + width: 100%; + height: 100%; + justify-self: center; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-rows: 1fr 1fr 1fr 1fr 1fr; + box-sizing: border-box; +`; + +export const StyledButton = styled.button` + text-align: center; + cursor: default; + border-radius: 20px; + justify-self: center; + width: 80%; + height: 80%; + box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5); + box-sizing: border-box; + display: flex; + justify-content: center; + align-items: center; + background-color: inherit; + color: inherit; + border-width: 1px; + + &:hover { + backdrop-filter: brightness(150%); + transition: ease-in 0.2s; + } + &:active { + box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5) inset; + } +`; + +export const StyledButtonContent = styled.span``; diff --git a/src/programs/FileBrowser/DirectoryOrFile/DirectoryOrFile.scss b/src/programs/FileBrowser/DirectoryOrFile/DirectoryOrFile.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/programs/FileBrowser/DirectoryOrFile/DirectoryOrFile.tsx b/src/programs/FileBrowser/DirectoryOrFile/DirectoryOrFile.tsx index f9ee048..e4d1120 100644 --- a/src/programs/FileBrowser/DirectoryOrFile/DirectoryOrFile.tsx +++ b/src/programs/FileBrowser/DirectoryOrFile/DirectoryOrFile.tsx @@ -4,10 +4,9 @@ import useLocalFS, { FSObject, isFSDirectory, } from "../../../stores/localFS"; -import "./DirectoryOrFile.scss"; import ContextMenu from "../../../components/ContextMenu/ContextMenu"; import { ContextMenuAction, getFSObjectContextMenu } from "../contextMenus"; -import { ReactComponent as FolderIcon } from "../../../assets/icons/folder-icon.svg"; + import useBindKeyToAction from "../../../hooks/useBindKeyToAction"; import AppPopup from "../../../components/AppPopup"; import HeaderBar from "../../../components/HeaderBar"; @@ -15,6 +14,7 @@ import Box from "../../../components/Box"; import InputField from "../../../components/InputField"; import Row from "../../../components/Row"; import Button from "../../../components/Button"; +import { StyledFolderIcon, StyledItem, StyledItemName } from "./styles"; interface DirectoryOrFileProps { fsObject: FSObject; @@ -47,8 +47,8 @@ function DirectoryOrFile({ } return ( -
openFSObject(fsObject)} onClick={() => setSelected(fsObject.path)} key={fsObject.path} @@ -81,13 +81,9 @@ function DirectoryOrFile({ fsObject={fsObject} /> )} - {isFSDirectory(fsObject) ? ( - - ) : null} - - {fsObject.name} - -
+ {isFSDirectory(fsObject) ? : null} + {fsObject.name} + ); } diff --git a/src/programs/FileBrowser/DirectoryOrFile/index.ts b/src/programs/FileBrowser/DirectoryOrFile/index.ts new file mode 100644 index 0000000..3a84832 --- /dev/null +++ b/src/programs/FileBrowser/DirectoryOrFile/index.ts @@ -0,0 +1,3 @@ +import DirectoryOrFile from "./DirectoryOrFile"; + +export default DirectoryOrFile; diff --git a/src/programs/FileBrowser/DirectoryOrFile/styles.ts b/src/programs/FileBrowser/DirectoryOrFile/styles.ts new file mode 100644 index 0000000..8436527 --- /dev/null +++ b/src/programs/FileBrowser/DirectoryOrFile/styles.ts @@ -0,0 +1,28 @@ +import styled from "@emotion/styled"; +import { ReactComponent as FolderIcon } from "../../../assets/icons/folder-icon.svg"; + +export const StyledItem = styled.div<{ selected: boolean }>` + width: 100%; + padding: 10px; + overflow-wrap: break-word; + word-break: normal; + box-sizing: border-box; + aspect-ratio: 1/1; + height: auto; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 10px; + border-radius: 10px; +`; + +export const StyledItemName = styled.span``; + +export const StyledFolderIcon = styled(FolderIcon)` + height: 80%; + width: 80%; + path { + fill: white; + } +`; diff --git a/src/programs/FileBrowser/FileBrowser.scss b/src/programs/FileBrowser/FileBrowser.scss deleted file mode 100644 index 77f8508..0000000 --- a/src/programs/FileBrowser/FileBrowser.scss +++ /dev/null @@ -1,91 +0,0 @@ -.file-browser { - width: 100%; - height: 100%; - display: grid; - grid-template-columns: 150px auto; - grid-template-rows: 50px auto 25px; - grid-template-areas: - "top-bar top-bar" - "side-bar main-content" - "side-bar bottom-bar"; - - box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; - border-radius: 10px; - - &__top-bar { - grid-area: top-bar; - width: 100%; - height: 100%; - box-sizing: border-box; - display: flex; - gap: 10px; - padding: 10px; - align-items: center; - - &__button-nav { - height: 100%; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - gap: 10px; - &__left, - &__right { - width: 50px; - text-align: center; - box-sizing: border-box; - border-radius: 20px; - box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5); - &:hover { - backdrop-filter: brightness(150%); - transition: ease-in 0.2s; - } - &:active { - box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5) inset; - } - } - } - - &__path-nav { - height: 30px; - width: 100%; - padding: 5px 10px; - border-radius: 50px; - border: none; - box-sizing: border-box; - - &:focus-visible { - outline: none; - } - } - } - - &__side-bar { - grid-area: side-bar; - width: 100%; - height: 100%; - &__favorites { - width: 100%; - box-sizing: border-box; - } - - &__favorite { - border-radius: 10px; - padding: 6px 10px; - box-sizing: border-box; - box-shadow: 2px 2px 4px rgb(0, 0, 0, 0); - &:hover { - backdrop-filter: brightness(150%); - transition: ease-in 0.2s; - } - &:active { - box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5) inset; - } - } - } - &__bottom-bar { - grid-area: bottom-bar; - width: 100%; - height: 100%; - } -} diff --git a/src/programs/FileBrowser/FileBrowser.tsx b/src/programs/FileBrowser/FileBrowser.tsx index b1b626e..e47afe2 100644 --- a/src/programs/FileBrowser/FileBrowser.tsx +++ b/src/programs/FileBrowser/FileBrowser.tsx @@ -4,7 +4,14 @@ import useLocalFSWithHistory from "../../hooks/useLocalFSWithHistory"; import AppSideBar from "../../components/AppSideBar"; import MainContent from "./MainContent"; -import "./FileBrowser.scss"; +import { + StyledBottomBar, + StyledFileBrowser, + StyledTopBar, + StyledTopBarButton, + StyledTopBarButtons, + StyledTopBarPath, +} from "./styles"; const defaultPath = "/home/user"; @@ -27,28 +34,17 @@ function TopBar({ navBack, }: TopBarProps) { return ( -
-
-
- ← -
-
- → -
-
- + + + + + -
+ ); } @@ -75,7 +71,7 @@ function FileBrowser({ path = defaultPath }: FileBrowserProps) { } return ( -
+ -
-
+ + ); } diff --git a/src/programs/FileBrowser/FileBrowserLauncher/FileBrowserLauncher.scss b/src/programs/FileBrowser/FileBrowserLauncher/FileBrowserLauncher.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/programs/FileBrowser/FileBrowserLauncher/FileBrowserLauncher.tsx b/src/programs/FileBrowser/FileBrowserLauncher/FileBrowserLauncher.tsx index b86a840..07e06f8 100644 --- a/src/programs/FileBrowser/FileBrowserLauncher/FileBrowserLauncher.tsx +++ b/src/programs/FileBrowser/FileBrowserLauncher/FileBrowserLauncher.tsx @@ -1,6 +1,5 @@ import FileBrowser from ".."; import Launcher from "../../../components/BottomBar/Launcher"; -import "./FileBrowserLauncher.scss"; interface FileBrowserLauncherProps {} diff --git a/src/programs/FileBrowser/MainContent/MainContent.scss b/src/programs/FileBrowser/MainContent/MainContent.scss deleted file mode 100644 index a05ad95..0000000 --- a/src/programs/FileBrowser/MainContent/MainContent.scss +++ /dev/null @@ -1,37 +0,0 @@ -.file-browser { - &__main-content { - grid-area: main-content; - padding: 20px; - width: 100%; - height: 100%; - overflow-y: scroll; - display: grid; - gap: 20px; - grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); - grid-template-rows: min-content; - box-sizing: border-box; - &__item { - width: 100%; - padding: 10px; - overflow-wrap: break-word; - word-break: normal; - box-sizing: border-box; - aspect-ratio: 1/1; - height: auto; - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - gap: 10px; - border-radius: 10px; - - &-icon { - height: 80%; - width: 80%; - path { - fill: white; - } - } - } - } -} diff --git a/src/programs/FileBrowser/MainContent/MainContent.tsx b/src/programs/FileBrowser/MainContent/MainContent.tsx index 25c918e..cce3701 100644 --- a/src/programs/FileBrowser/MainContent/MainContent.tsx +++ b/src/programs/FileBrowser/MainContent/MainContent.tsx @@ -4,17 +4,17 @@ import useLocalFS, { FSObject, FSObjectType, } from "../../../stores/localFS"; -import "./MainContent.scss"; import { getMainContentContextItems } from "../contextMenus"; import AppPopup from "../../../components/AppPopup"; import ContextMenu from "../../../components/ContextMenu/ContextMenu"; -import DirectoryOrFile from "../DirectoryOrFile/DirectoryOrFile"; +import DirectoryOrFile from "../DirectoryOrFile"; import HeaderBar from "../../../components/HeaderBar"; import Box from "../../../components/Box"; import InputField from "../../../components/InputField"; import Row from "../../../components/Row"; import Button from "../../../components/Button"; import useBindKeyToAction from "../../../hooks/useBindKeyToAction"; +import { StyledMainContent } from "./styles"; interface MainContentProps { currentDirectory: FSDirectory; @@ -40,10 +40,7 @@ function MainContent({ } return ( -
+ {contextMenuOpen && ( ))} -
+ ); } diff --git a/src/programs/FileBrowser/MainContent/styles.ts b/src/programs/FileBrowser/MainContent/styles.ts new file mode 100644 index 0000000..db57d2f --- /dev/null +++ b/src/programs/FileBrowser/MainContent/styles.ts @@ -0,0 +1,14 @@ +import styled from "@emotion/styled"; + +export const StyledMainContent = styled.div` + grid-area: main-content; + padding: 20px; + width: 100%; + height: 100%; + overflow-y: scroll; + display: grid; + gap: 20px; + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + grid-template-rows: min-content; + box-sizing: border-box; +`; diff --git a/src/programs/FileBrowser/styles.ts b/src/programs/FileBrowser/styles.ts new file mode 100644 index 0000000..cda2dcd --- /dev/null +++ b/src/programs/FileBrowser/styles.ts @@ -0,0 +1,70 @@ +import styled from "@emotion/styled"; + +export const StyledFileBrowser = styled.div` + width: 100%; + height: 100%; + display: grid; + grid-template-columns: 150px auto; + grid-template-rows: 50px auto 25px; + grid-template-areas: + "top-bar top-bar" + "side-bar main-content" + "side-bar bottom-bar"; + + box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; + border-radius: 10px; +`; + +export const StyledTopBar = styled.div` + grid-area: top-bar; + width: 100%; + height: 100%; + box-sizing: border-box; + display: flex; + gap: 10px; + padding: 10px; + align-items: center; +`; + +export const StyledTopBarButtons = styled.div` + height: 100%; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + gap: 10px; +`; + +export const StyledTopBarButton = styled.div` + width: 50px; + text-align: center; + box-sizing: border-box; + border-radius: 20px; + box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5); + &:hover { + backdrop-filter: brightness(150%); + transition: ease-in 0.2s; + } + &:active { + box-shadow: 2px 2px 4px rgb(0, 0, 0, 0.5) inset; + } +`; + +export const StyledTopBarPath = styled.input` + height: 30px; + width: 100%; + padding: 5px 10px; + border-radius: 50px; + border: none; + box-sizing: border-box; + + &:focus-visible { + outline: none; + } +`; + +export const StyledBottomBar = styled.div` + grid-area: bottom-bar; + width: 100%; + height: 100%; +`; diff --git a/src/programs/Settings/Settings.scss b/src/programs/Settings/Settings.scss deleted file mode 100644 index a55a303..0000000 --- a/src/programs/Settings/Settings.scss +++ /dev/null @@ -1,34 +0,0 @@ -.settings { - display: grid; - grid-template-columns: 150px auto; - grid-template-areas: "side-bar main-content"; - width: 100%; - height: 100%; - box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; - border-radius: 10px; - - &__page { - overflow: auto; - - &-sections { - margin: 20px; - display: flex; - flex-direction: column; - gap: 20px; - &:last-of-type ~ hr { - display: none; - } - } - - &-section { - h1 { - margin: 0; - font-size: 18px; - } - - &__value { - width: 100%; - } - } - } -} diff --git a/src/programs/Settings/Settings.tsx b/src/programs/Settings/Settings.tsx index 2b83cf5..10c56d4 100644 --- a/src/programs/Settings/Settings.tsx +++ b/src/programs/Settings/Settings.tsx @@ -4,7 +4,15 @@ import AppSideBar from "../../components/AppSideBar"; import { getPages } from "./settingsPageConfig"; import useSystemSettings from "../../stores/systemSettingsStore"; -import "./Settings.scss"; +import { + StyledPage, + StyledSection, + StyledSectionDescription, + StyledSectionTitle, + StyledSectionValue, + StyledSections, + StyledSettings, +} from "./styles"; interface SettingsSectionProps { title: string; @@ -55,18 +63,15 @@ function SettingsSection(section: SettingsSectionProps) { } return ( -
-

{section.title}

-

- {section.description} -

- + {section.title} + {section.description} + -
+ > + ); } @@ -77,13 +82,13 @@ export interface SettingsPageProps { function SettingsPage({ sections }: SettingsPageProps) { return ( -
-
+ + {sections.map((section) => ( ))} -
-
+ + ); } @@ -95,25 +100,19 @@ function Settings({}: SettingsProps) { const pages = getPages(systemSettings); const [currentPage, setCurrentPage] = useState(Object.keys(pages)[0]); - function getAppBar() { - return ( - (pages).map(([type, page]) => { - return { - title: page.name, - isActive: currentPage === type, - onClick: () => setCurrentPage(type), - }; - })} - /> - ); + function getItems(): Parameters[0]["items"] { + return Object.entries(pages).map(([type, page]) => ({ + title: page.name, + isActive: currentPage === type, + onClick: () => setCurrentPage(type), + })); } return ( -
- {getAppBar()} + + -
+ ); } diff --git a/src/programs/Settings/SettingsLauncher/SettingsLauncher.scss b/src/programs/Settings/SettingsLauncher/SettingsLauncher.scss deleted file mode 100644 index e69de29..0000000 diff --git a/src/programs/Settings/SettingsLauncher/SettingsLauncher.tsx b/src/programs/Settings/SettingsLauncher/SettingsLauncher.tsx index 054a9f2..1527137 100644 --- a/src/programs/Settings/SettingsLauncher/SettingsLauncher.tsx +++ b/src/programs/Settings/SettingsLauncher/SettingsLauncher.tsx @@ -1,6 +1,5 @@ import Settings from ".."; import Launcher from "../../../components/BottomBar/Launcher"; -import "./SettingsLauncher.scss"; interface SettingsLauncherProps {} @@ -14,7 +13,6 @@ function SettingsLauncher({}: SettingsLauncherProps) { menus={[]} appContent={} icon="" - // icon={icon} > ); } diff --git a/src/programs/Settings/styles.ts b/src/programs/Settings/styles.ts new file mode 100644 index 0000000..b1dbea3 --- /dev/null +++ b/src/programs/Settings/styles.ts @@ -0,0 +1,38 @@ +import styled from "@emotion/styled"; + +export const StyledSettings = styled.div` + display: grid; + grid-template-columns: 150px auto; + grid-template-areas: "side-bar main-content"; + width: 100%; + height: 100%; + box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; + border-radius: 10px; +`; + +export const StyledPage = styled.div` + overflow: auto; +`; + +export const StyledSections = styled.div` + margin: 20px; + display: flex; + flex-direction: column; + gap: 20px; + &:last-of-type ~ hr { + display: none; + } +`; + +export const StyledSection = styled.div``; + +export const StyledSectionTitle = styled.h1` + margin: 0; + font-size: 18px; +`; + +export const StyledSectionDescription = styled.p``; + +export const StyledSectionValue = styled.input` + width: 100%; +`; diff --git a/src/programs/TextEditor/TextEditor.scss b/src/programs/TextEditor/TextEditor.scss deleted file mode 100644 index 12721f7..0000000 --- a/src/programs/TextEditor/TextEditor.scss +++ /dev/null @@ -1,25 +0,0 @@ -.text-editor { - height: 100%; - width: 100%; - - &__text-area { - width: 100%; - height: 100%; - border: none; - resize: none; - margin: 0; - padding: 0; - background-color: transparent; - color: white; - box-shadow: 0px 0px 4px rgb(0, 0, 0, 0.5) inset; - border-radius: 10px; - padding: 10px; - box-sizing: border-box; - - &:focus-visible { - outline: none; - } - } - - transform: translate(); -} diff --git a/src/programs/TextEditor/TextEditor.tsx b/src/programs/TextEditor/TextEditor.tsx index 696e822..b40e653 100644 --- a/src/programs/TextEditor/TextEditor.tsx +++ b/src/programs/TextEditor/TextEditor.tsx @@ -1,13 +1,13 @@ -import "./TextEditor.scss"; +import { StyledTextArea, StyledTextEditor } from "./styles"; interface TextEditorProps {} // eslint-disable-next-line no-empty-pattern function TextEditor({}: TextEditorProps) { return ( -
-