From a7b9d153242b4ad6f7bca14e6889d4f2df48299b Mon Sep 17 00:00:00 2001 From: Prozilla Date: Tue, 23 Jul 2024 20:01:59 +0200 Subject: [PATCH] skins: Added Pixel skin --- packages/apps/browser/CHANGELOG.md | 7 +++ packages/apps/browser/package.json | 2 +- packages/apps/calculator/CHANGELOG.md | 7 +++ packages/apps/calculator/package.json | 2 +- packages/apps/file-explorer/CHANGELOG.md | 7 +++ packages/apps/file-explorer/package.json | 2 +- packages/apps/logic-sim/CHANGELOG.md | 7 +++ packages/apps/logic-sim/package.json | 2 +- packages/apps/media-viewer/CHANGELOG.md | 7 +++ packages/apps/media-viewer/package.json | 2 +- packages/apps/settings/CHANGELOG.md | 8 +++ packages/apps/settings/package.json | 2 +- packages/apps/terminal/CHANGELOG.md | 7 +++ packages/apps/terminal/package.json | 2 +- packages/apps/text-editor/CHANGELOG.md | 7 +++ packages/apps/text-editor/package.json | 2 +- packages/core/CHANGELOG.md | 8 +++ packages/core/package.json | 2 +- .../_utils/directory-list/ImagePreview.tsx | 5 +- packages/core/src/components/_utils/index.ts | 1 + .../_utils/vector-image/VectorImage.tsx | 51 ++++++++++++++++++ .../modals/_utils/WindowedModal.tsx | 3 +- .../components/taskbar/app-icon/AppIcon.tsx | 3 +- .../components/taskbar/indicators/Battery.tsx | 3 +- .../taskbar/indicators/Calendar.tsx | 7 +-- .../components/taskbar/indicators/Network.tsx | 3 +- .../components/taskbar/indicators/Volume.tsx | 3 +- .../src/components/taskbar/menus/HomeMenu.tsx | 3 +- .../components/taskbar/menus/SearchMenu.tsx | 3 +- .../src/components/taskbar/menus/UtilMenu.tsx | 6 ++- .../src/components/windows/WindowView.tsx | 4 +- .../core/src/features/system/systemManager.ts | 8 +-- packages/core/src/hooks/_utils/classNames.ts | 29 +++++++--- .../fonts/minecraftia/Minecraftia-Regular.ttf | Bin 0 -> 70324 bytes .../assets/fonts/minecraftia/readme.txt | 7 +++ .../skins/pixel/apps/icons/ball-maze.png | Bin 0 -> 828 bytes .../assets/skins/pixel/apps/icons/browser.png | Bin 0 -> 828 bytes .../skins/pixel/apps/icons/calculator.png | Bin 0 -> 828 bytes .../skins/pixel/apps/icons/file-explorer.png | Bin 0 -> 828 bytes .../skins/pixel/apps/icons/logic-sim.png | Bin 0 -> 828 bytes .../skins/pixel/apps/icons/media-viewer.png | Bin 0 -> 828 bytes .../skins/pixel/apps/icons/minesweeper.png | Bin 0 -> 828 bytes .../skins/pixel/apps/icons/settings.png | Bin 0 -> 828 bytes .../skins/pixel/apps/icons/terminal.png | Bin 0 -> 828 bytes .../skins/pixel/apps/icons/text-editor.png | Bin 0 -> 828 bytes .../assets/skins/pixel/apps/icons/wordle.png | Bin 0 -> 828 bytes packages/demo/scripts/stage.ts | 4 +- packages/demo/src/Main.tsx | 28 ++++++++-- packages/demo/src/config/skin.config.ts | 4 +- packages/prozilla-os/CHANGELOG.md | 14 +++++ packages/prozilla-os/package.json | 2 +- packages/skins/CHANGELOG.md | 6 +++ packages/skins/package.json | 2 +- packages/skins/src/core/index.ts | 3 +- packages/skins/src/core/skins/macOs.ts | 8 +++ packages/skins/src/core/skins/pixel.ts | 20 +++++++ packages/skins/src/main.ts | 2 +- packages/skins/src/styles/skins/macOs.css | 21 ++++++-- packages/skins/src/styles/skins/pixel.css | 37 +++++++++++++ 59 files changed, 323 insertions(+), 50 deletions(-) create mode 100644 packages/core/src/components/_utils/vector-image/VectorImage.tsx create mode 100644 packages/demo/public/assets/fonts/minecraftia/Minecraftia-Regular.ttf create mode 100644 packages/demo/public/assets/fonts/minecraftia/readme.txt create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/ball-maze.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/browser.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/calculator.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/file-explorer.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/logic-sim.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/media-viewer.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/minesweeper.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/settings.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/terminal.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/text-editor.png create mode 100644 packages/demo/public/assets/skins/pixel/apps/icons/wordle.png create mode 100644 packages/skins/src/core/skins/pixel.ts create mode 100644 packages/skins/src/styles/skins/pixel.css diff --git a/packages/apps/browser/CHANGELOG.md b/packages/apps/browser/CHANGELOG.md index 51daba0..4423d49 100644 --- a/packages/apps/browser/CHANGELOG.md +++ b/packages/apps/browser/CHANGELOG.md @@ -1,5 +1,12 @@ # @prozilla-os/browser +## 1.1.1 + +### Patch Changes + +- Updated dependencies + - @prozilla-os/core@1.2.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/apps/browser/package.json b/packages/apps/browser/package.json index 7c14f55..13bf852 100644 --- a/packages/apps/browser/package.json +++ b/packages/apps/browser/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/browser", "description": "A ProzillaOS application for browsing the internet.", - "version": "1.1.0", + "version": "1.1.1", "homepage": "https://os.prozilla.dev/browser", "author": { "name": "Prozilla", diff --git a/packages/apps/calculator/CHANGELOG.md b/packages/apps/calculator/CHANGELOG.md index a38b65a..558b8d4 100644 --- a/packages/apps/calculator/CHANGELOG.md +++ b/packages/apps/calculator/CHANGELOG.md @@ -1,5 +1,12 @@ # @prozilla-os/calculator +## 1.1.1 + +### Patch Changes + +- Updated dependencies + - @prozilla-os/core@1.2.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/apps/calculator/package.json b/packages/apps/calculator/package.json index 4a56ad7..e0a1409 100644 --- a/packages/apps/calculator/package.json +++ b/packages/apps/calculator/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/calculator", "description": "A ProzillaOS application for making basic calculations.", - "version": "1.1.0", + "version": "1.1.1", "homepage": "https://os.prozilla.dev/calculator", "author": { "name": "Prozilla", diff --git a/packages/apps/file-explorer/CHANGELOG.md b/packages/apps/file-explorer/CHANGELOG.md index 79fa244..9ad2f4f 100644 --- a/packages/apps/file-explorer/CHANGELOG.md +++ b/packages/apps/file-explorer/CHANGELOG.md @@ -1,5 +1,12 @@ # @prozilla-os/file-explorer +## 1.1.1 + +### Patch Changes + +- Updated dependencies + - @prozilla-os/core@1.2.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/apps/file-explorer/package.json b/packages/apps/file-explorer/package.json index 0c21d35..2814e35 100644 --- a/packages/apps/file-explorer/package.json +++ b/packages/apps/file-explorer/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/file-explorer", "description": "A standard ProzillaOS application for browsing files.", - "version": "1.1.0", + "version": "1.1.1", "homepage": "https://os.prozilla.dev/file-explorer", "author": { "name": "Prozilla", diff --git a/packages/apps/logic-sim/CHANGELOG.md b/packages/apps/logic-sim/CHANGELOG.md index 144d818..133e84d 100644 --- a/packages/apps/logic-sim/CHANGELOG.md +++ b/packages/apps/logic-sim/CHANGELOG.md @@ -1,5 +1,12 @@ # @prozilla-os/logic-sim +## 1.1.1 + +### Patch Changes + +- Updated dependencies + - @prozilla-os/core@1.2.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/apps/logic-sim/package.json b/packages/apps/logic-sim/package.json index cd05d57..fb48e77 100644 --- a/packages/apps/logic-sim/package.json +++ b/packages/apps/logic-sim/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/logic-sim", "description": "A ProzillaOS application for simulating digital logic.", - "version": "1.1.0", + "version": "1.1.1", "homepage": "https://os.prozilla.dev/logic-sim", "author": { "name": "Prozilla", diff --git a/packages/apps/media-viewer/CHANGELOG.md b/packages/apps/media-viewer/CHANGELOG.md index 5016a2f..fecc064 100644 --- a/packages/apps/media-viewer/CHANGELOG.md +++ b/packages/apps/media-viewer/CHANGELOG.md @@ -1,5 +1,12 @@ # @prozilla-os/media-viewer +## 1.1.1 + +### Patch Changes + +- Updated dependencies + - @prozilla-os/core@1.2.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/apps/media-viewer/package.json b/packages/apps/media-viewer/package.json index 47ed9c6..90416c8 100644 --- a/packages/apps/media-viewer/package.json +++ b/packages/apps/media-viewer/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/media-viewer", "description": "A ProzillaOS application for viewing different kinds of media.", - "version": "1.1.0", + "version": "1.1.1", "homepage": "https://os.prozilla.dev/media-viewer", "author": { "name": "Prozilla", diff --git a/packages/apps/settings/CHANGELOG.md b/packages/apps/settings/CHANGELOG.md index 3f06a5c..307cf42 100644 --- a/packages/apps/settings/CHANGELOG.md +++ b/packages/apps/settings/CHANGELOG.md @@ -1,5 +1,13 @@ # @prozilla-os/settings +## 1.1.1 + +### Patch Changes + +- Updated dependencies + - @prozilla-os/core@1.2.1 + - @prozilla-os/file-explorer@1.1.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/apps/settings/package.json b/packages/apps/settings/package.json index 2a41138..e2a0e4e 100644 --- a/packages/apps/settings/package.json +++ b/packages/apps/settings/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/settings", "description": "A settings app for ProzillaOS.", - "version": "1.1.0", + "version": "1.1.1", "homepage": "https://os.prozilla.dev/settings", "author": { "name": "Prozilla", diff --git a/packages/apps/terminal/CHANGELOG.md b/packages/apps/terminal/CHANGELOG.md index 4bae74f..926cf7c 100644 --- a/packages/apps/terminal/CHANGELOG.md +++ b/packages/apps/terminal/CHANGELOG.md @@ -1,5 +1,12 @@ # @prozilla-os/terminal +## 1.1.2 + +### Patch Changes + +- Updated dependencies + - @prozilla-os/core@1.2.1 + ## 1.1.1 ### Patch Changes diff --git a/packages/apps/terminal/package.json b/packages/apps/terminal/package.json index a325d0a..cbc8039 100644 --- a/packages/apps/terminal/package.json +++ b/packages/apps/terminal/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/terminal", "description": "A terminal/shell application for ProzillaOS.", - "version": "1.1.1", + "version": "1.1.2", "homepage": "https://os.prozilla.dev/terminal", "author": { "name": "Prozilla", diff --git a/packages/apps/text-editor/CHANGELOG.md b/packages/apps/text-editor/CHANGELOG.md index e6f97c5..5a8f67f 100644 --- a/packages/apps/text-editor/CHANGELOG.md +++ b/packages/apps/text-editor/CHANGELOG.md @@ -1,5 +1,12 @@ # @prozilla-os/text-editor +## 1.1.1 + +### Patch Changes + +- Updated dependencies + - @prozilla-os/core@1.2.1 + ## 1.1.0 ### Minor Changes diff --git a/packages/apps/text-editor/package.json b/packages/apps/text-editor/package.json index e806b8a..d9e334c 100644 --- a/packages/apps/text-editor/package.json +++ b/packages/apps/text-editor/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/text-editor", "description": "A text editor application for ProzillaOS.", - "version": "1.1.0", + "version": "1.1.1", "homepage": "https://os.prozilla.dev/text-editor", "author": { "name": "Prozilla", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 9ffaa42..a1d524b 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,13 @@ # @prozilla-os/core +## 1.2.1 + +### Patch Changes + +- Added Pixel skin +- Updated dependencies + - @prozilla-os/skins@1.1.1 + ## 1.2.0 ### Minor Changes diff --git a/packages/core/package.json b/packages/core/package.json index b8540ac..a9e47fb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@prozilla-os/core", "description": "A React component library written in TypeScript for building web-based operating systems, made by Prozilla.", - "version": "1.2.0", + "version": "1.2.1", "homepage": "https://os.prozilla.dev", "author": { "name": "Prozilla", diff --git a/packages/core/src/components/_utils/directory-list/ImagePreview.tsx b/packages/core/src/components/_utils/directory-list/ImagePreview.tsx index 19c80ad..eee09db 100644 --- a/packages/core/src/components/_utils/directory-list/ImagePreview.tsx +++ b/packages/core/src/components/_utils/directory-list/ImagePreview.tsx @@ -2,6 +2,7 @@ import { useState } from "react"; import styles from "./ImagePreview.module.css"; import { ReactSVG } from "react-svg"; import { useSystemManager } from "../../../hooks"; +import { VectorImage } from "../vector-image/VectorImage"; interface ImagePreviewProps { source: string; @@ -25,9 +26,7 @@ export function ImagePreview({ source, className, onError, ...props }: ImagePrev return (
{loadingFailed ? - : source.endsWith(".svg") - ? - : Preview + : }
); } \ No newline at end of file diff --git a/packages/core/src/components/_utils/index.ts b/packages/core/src/components/_utils/index.ts index 4869ca4..c24e5f4 100644 --- a/packages/core/src/components/_utils/index.ts +++ b/packages/core/src/components/_utils/index.ts @@ -6,5 +6,6 @@ export { ProgressBar } from "./progress-bar/ProgressBar"; export { HeaderMenu } from "./header-menu/HeaderMenu"; export { WebView } from "./web-view/WebView"; export { ImagePreview } from "./directory-list/ImagePreview"; +export { VectorImage as Image } from "./vector-image/VectorImage"; export type { OnSelectionChangeParams, FileEventHandler, FolderEventHandler } from "./directory-list/DirectoryList"; \ No newline at end of file diff --git a/packages/core/src/components/_utils/vector-image/VectorImage.tsx b/packages/core/src/components/_utils/vector-image/VectorImage.tsx new file mode 100644 index 0000000..7397d10 --- /dev/null +++ b/packages/core/src/components/_utils/vector-image/VectorImage.tsx @@ -0,0 +1,51 @@ +import { Vector2 } from "@prozilla-os/core"; +import { useEffect, useState } from "react"; +import { ReactSVG } from "react-svg"; + +interface ImageProps { + className?: string; + src?: string; + [key: string]: unknown; +} + +export function VectorImage({ className, src, ...props }: ImageProps) { + const [dimensions, setDimensions] = useState(Vector2.ZERO); + + useEffect(() => { + if (src == null) + return; + + const image = new Image(); + + image.onload = () => { + console.log(image); + setDimensions(new Vector2(image.naturalWidth, image.naturalHeight)); + }; + + image.src = src; + }, [src]); + + if (src?.endsWith(".svg")) { + return ; + } else { + return
+
+ + + + + +
+
; + } +} \ No newline at end of file diff --git a/packages/core/src/components/modals/_utils/WindowedModal.tsx b/packages/core/src/components/modals/_utils/WindowedModal.tsx index 970247f..53d9f08 100644 --- a/packages/core/src/components/modals/_utils/WindowedModal.tsx +++ b/packages/core/src/components/modals/_utils/WindowedModal.tsx @@ -8,6 +8,7 @@ import Draggable from "react-draggable"; import { ReactSVG } from "react-svg"; import utilStyles from "../../../styles/utils.module.css"; import { ModalProps } from "../ModalView"; +import { VectorImage } from "../../_utils/vector-image/VectorImage"; export function WindowedModal({ modal, params, children, ...props }: ModalProps) { const nodeRef = useRef(null); @@ -53,7 +54,7 @@ export function WindowedModal({ modal, params, children, ...props }: ModalProps) }} >
- diff --git a/packages/core/src/components/taskbar/app-icon/AppIcon.tsx b/packages/core/src/components/taskbar/app-icon/AppIcon.tsx index d4b8211..1a6622c 100644 --- a/packages/core/src/components/taskbar/app-icon/AppIcon.tsx +++ b/packages/core/src/components/taskbar/app-icon/AppIcon.tsx @@ -8,6 +8,7 @@ import { Actions } from "../../actions/Actions"; import { ClickAction } from "../../actions/actions/ClickAction"; import { WindowsManager } from "../../../features/windows/windowsManager"; import { useClassNames } from "../../../hooks"; +import { VectorImage } from "../../_utils/vector-image/VectorImage"; interface AppButtonProps { app: App; @@ -73,7 +74,7 @@ export const AppButton: FC = memo(({ app, windowsManager, active }} title={app.name} > - + ); }); \ No newline at end of file diff --git a/packages/core/src/components/taskbar/indicators/Battery.tsx b/packages/core/src/components/taskbar/indicators/Battery.tsx index 536b963..c56f132 100644 --- a/packages/core/src/components/taskbar/indicators/Battery.tsx +++ b/packages/core/src/components/taskbar/indicators/Battery.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from "react"; import styles from "./Battery.module.css"; import { UtilMenu } from "../menus/UtilMenu"; import { OutsideClickListener } from "../../../hooks/_utils/outsideClick"; +import { useClassNames } from "@prozilla-os/core"; type Battery = { charging: boolean | ((prevState: boolean) => boolean); @@ -93,7 +94,7 @@ export function Battery({ hideUtilMenus, showUtilMenu }: BatteryProps) { } return ( { updateShowMenu(false); }}> - diff --git a/packages/core/src/components/taskbar/indicators/Volume.tsx b/packages/core/src/components/taskbar/indicators/Volume.tsx index 6ac79bb..9e5574f 100644 --- a/packages/core/src/components/taskbar/indicators/Volume.tsx +++ b/packages/core/src/components/taskbar/indicators/Volume.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from "react"; import { OutsideClickListener } from "../../../hooks/_utils/outsideClick"; import { UtilMenu } from "../menus/UtilMenu"; import styles from "./Volume.module.css"; +import { useClassNames } from "@prozilla-os/core"; interface VolumeProps { hideUtilMenus: boolean; @@ -27,7 +28,7 @@ export function Volume({ hideUtilMenus, showUtilMenu }: VolumeProps) { }; return ( { updateShowMenu(false); }}> - diff --git a/packages/core/src/components/taskbar/menus/HomeMenu.tsx b/packages/core/src/components/taskbar/menus/HomeMenu.tsx index 33d4abf..f2f256f 100644 --- a/packages/core/src/components/taskbar/menus/HomeMenu.tsx +++ b/packages/core/src/components/taskbar/menus/HomeMenu.tsx @@ -8,6 +8,7 @@ import { useEffect, useState } from "react"; import { AppsConfig, closeViewport, Vector2 } from "../../../features"; import { useWindowsManager, useVirtualRoot, useKeyboardListener, useSystemManager, useClassNames } from "../../../hooks"; import { utilStyles } from "../../../styles"; +import { VectorImage } from "../../_utils/vector-image/VectorImage"; interface HomeMenuProps { active: boolean; @@ -123,7 +124,7 @@ export function HomeMenu({ active, setActive, search }: HomeMenuProps) { }} title={name} > - +

{name}

)} diff --git a/packages/core/src/components/taskbar/menus/SearchMenu.tsx b/packages/core/src/components/taskbar/menus/SearchMenu.tsx index 7379179..f88f7ec 100644 --- a/packages/core/src/components/taskbar/menus/SearchMenu.tsx +++ b/packages/core/src/components/taskbar/menus/SearchMenu.tsx @@ -6,6 +6,7 @@ import { useKeyboardListener } from "../../../hooks/_utils/keyboard"; import { App } from "../../../features/"; import { ReactSVG } from "react-svg"; import { useClassNames, useSystemManager } from "../../../hooks"; +import { VectorImage } from "../../_utils/vector-image/VectorImage"; interface SearchMenuProps { active: boolean; @@ -80,7 +81,7 @@ export function SearchMenu({ active, setActive, searchQuery, setSearchQuery, inp windowsManager?.open(id); }} > - +

{name}

)} diff --git a/packages/core/src/components/taskbar/menus/UtilMenu.tsx b/packages/core/src/components/taskbar/menus/UtilMenu.tsx index 8fa1a17..9feb9ef 100644 --- a/packages/core/src/components/taskbar/menus/UtilMenu.tsx +++ b/packages/core/src/components/taskbar/menus/UtilMenu.tsx @@ -16,8 +16,12 @@ export function UtilMenu({ active, setActive: _setActive, className, children }: if (className != null) classNames.push(className); + const modifiers = ["Util"]; + if (active) + modifiers.push("Active"); + return (
-
+
{children}
); diff --git a/packages/core/src/components/windows/WindowView.tsx b/packages/core/src/components/windows/WindowView.tsx index eca83f6..1b0cc78 100644 --- a/packages/core/src/components/windows/WindowView.tsx +++ b/packages/core/src/components/windows/WindowView.tsx @@ -1,7 +1,6 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import styles from "./WindowView.module.css"; import { faCircleRight, faExpand, faMinus, faWindowMaximize as fasWindowMaximize, faTimes, faXmark } from "@fortawesome/free-solid-svg-icons"; -import { ReactSVG } from "react-svg"; import { useWindowsManager } from "../../hooks/windows/windowsManagerContext"; import Draggable from "react-draggable"; import { CSSProperties, FC, memo, MouseEventHandler, useEffect, useRef, useState } from "react"; @@ -24,6 +23,7 @@ import { WindowFallbackView } from "./WindowFallbackView"; import { WindowOptions } from "../../features/windows/windowsManager"; import { ModalProps } from "../modals/ModalView"; import { useClassNames, useSystemManager } from "../../hooks"; +import { VectorImage } from "../_utils/vector-image/VectorImage"; export interface WindowProps extends WindowOptions { fullscreen?: boolean; @@ -176,7 +176,7 @@ export const WindowView: FC = memo(({ id, app, size, position, onIn focus(event as unknown as Event, true); }} > - diff --git a/packages/core/src/features/system/systemManager.ts b/packages/core/src/features/system/systemManager.ts index d2e55bb..0353ac5 100644 --- a/packages/core/src/features/system/systemManager.ts +++ b/packages/core/src/features/system/systemManager.ts @@ -76,15 +76,15 @@ export class SystemManager { private loadSkin() { const skin = this.skin; - if (skin.appIcons != null) { - const appIcons = skin.appIcons as { [key: string]: string }; - const appNames = skin.appNames as { [key: string]: string }; + if (skin.appIcons != null || skin.appNames != null) { + const appIcons = skin.appIcons as { [key: string]: string } ?? {}; + const appNames = skin.appNames as { [key: string]: string } ?? {}; this.appsConfig.apps.forEach((app) => { if (Object.keys(appIcons).includes(app.id)) app.setIconUrl(appIcons[app.id]); if (Object.keys(appNames).includes(app.id)) - app.setIconUrl(appNames[app.id]); + app.setName(appNames[app.id]); }); } diff --git a/packages/core/src/hooks/_utils/classNames.ts b/packages/core/src/hooks/_utils/classNames.ts index 9ca2e3e..12bf6e5 100644 --- a/packages/core/src/hooks/_utils/classNames.ts +++ b/packages/core/src/hooks/_utils/classNames.ts @@ -4,17 +4,32 @@ import { NAME } from "../../constants/branding.const"; /** * Generates static class name using BEM notation */ -export function useStaticClassName(block?: string, element?: string, modifier?: string) { +export function useStaticClassName(block?: string, element?: string, modifier?: string | string[]) { return useMemo(() => { if (block == null) return null; - let className = `${NAME}-${block}`; + let className = ""; - if (element != null) - className += `_${element}`; - if (modifier != null) - className += `--${modifier}`; + if (modifier == null || typeof modifier == "string") { + className = `${NAME}-${block}`; + + if (element != null) + className += `_${element}`; + if (modifier != null) + className += `--${modifier}`; + } else { + modifier?.forEach((mod) => { + className += ` ${NAME}-${block}`; + + if (element != null) + className += `_${element}`; + if (mod != null) + className += `--${mod}`; + }); + + className = className.trim(); + } return className; }, [block, element, modifier]); @@ -23,7 +38,7 @@ export function useStaticClassName(block?: string, element?: string, modifier?: /** * Combine clas names and an optional static class name */ -export function useClassNames(classNames: (string | undefined)[], block?: string, element?: string, modifier?: string) { +export function useClassNames(classNames: (string | undefined)[], block?: string, element?: string, modifier?: string | string[]) { const staticClassName = useStaticClassName(block, element, modifier); return useMemo(() => { diff --git a/packages/demo/public/assets/fonts/minecraftia/Minecraftia-Regular.ttf b/packages/demo/public/assets/fonts/minecraftia/Minecraftia-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7247ad785ac2f969f0019d1ac5253d70b6052fbc GIT binary patch literal 70324 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 L5%VJEMYQjK#!N~U literal 0 HcmV?d00001 diff --git a/packages/demo/public/assets/fonts/minecraftia/readme.txt b/packages/demo/public/assets/fonts/minecraftia/readme.txt new file mode 100644 index 0000000..bc5ccf4 --- /dev/null +++ b/packages/demo/public/assets/fonts/minecraftia/readme.txt @@ -0,0 +1,7 @@ +The font file in this archive was created by Andrew Tyler www.AndrewTyler.net and font@andrewtyler.net + +Use at 12 or 24 px size with anti-alising off for best results. + + + + diff --git a/packages/demo/public/assets/skins/pixel/apps/icons/ball-maze.png b/packages/demo/public/assets/skins/pixel/apps/icons/ball-maze.png new file mode 100644 index 0000000000000000000000000000000000000000..cbcdbed68b8ec03e7d5ebec00838b8f86f8972e5 GIT binary patch literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U~J8Fb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!XU?>#-Mks zbtxlIgtNdSvY3HEPZ@+6E0)@q0R`DhJbhi+U$Bb{ax%1Xe<}wGNtU=qlsM<-=BDPA zFgO>bCYGe8D3oWGWGJ|M`UZqI@`(fETiDaZF+@U=k%RI3Kak-J|1SA}ti=FKdRrJ7 zktO5$rND|76+VM2W`eO`k{~`Z8>|3X09^yz1egRm4OW0`CrklM3~mBU0Hgq!jn|t% ZNiio4$>>iP3J-!bdb;|#taD0e0syHo1+xGE literal 0 HcmV?d00001 diff --git a/packages/demo/public/assets/skins/pixel/apps/icons/browser.png b/packages/demo/public/assets/skins/pixel/apps/icons/browser.png new file mode 100644 index 0000000000000000000000000000000000000000..51fb696ddf2b23e119bcbfbc71d66e924a695787 GIT binary patch literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U~J8Fb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!tj*g6T|-| z)7_7OBAf*tk;M!QddeWoSh3W;3@FH6;_2(k{(@axK*5aPbdnKJNV3E=qQp5rH#aq} zgu%HeHL)Z$MWH;iBtya7(>EZzkxv{L-@=|Qjv*3~j2w*L{{i)&f`6BM{(~?~lnKT_ zr(ud1VGJg{EsVZ%{)2UHH1mb4hnoPC1j+cH+Kj0HE`r8@n}BRAGMf>k0p<=g%?u!S gffZm=1d;@avl}Q(UfIe93}XfcPgg&ebxsLQ061C=%>V!Z literal 0 HcmV?d00001 diff --git a/packages/demo/public/assets/skins/pixel/apps/icons/calculator.png b/packages/demo/public/assets/skins/pixel/apps/icons/calculator.png new file mode 100644 index 0000000000000000000000000000000000000000..5d0e0e3264ab7f69538533c05e690e53b4ba8ab3 GIT binary patch literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U~J8Fb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!XU?>#-Mks zbtxlIgtNdSvY3HEPZ@+6E0)@q0R`DhJbhi+U$Bb{G773EMf3uNBuiW)N}Tg^b5rw5 z7@Uhz6H8K46v{J8G8EiBeFMT9`NVc}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!tj*g6T|-| z)7_7OBAf*tk;M!QddeWoSh3W;3@FH6;_2(k{(@axKw6H?=;{ZckYtH#M2T~LZf-iIOF%&)vjAyK?4r7ApvzKpzX}AKI0E#LghY4MPWd56-e5!NK Roc0E3^mO%eS?83{1OVvZ{p|n% literal 0 HcmV?d00001 diff --git a/packages/demo/public/assets/skins/pixel/apps/icons/logic-sim.png b/packages/demo/public/assets/skins/pixel/apps/icons/logic-sim.png new file mode 100644 index 0000000000000000000000000000000000000000..b322e49b5a349607aadc789b5931a665cdaa2901 GIT binary patch literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U~J8Fb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!XU?>#-Mks zbtxlIgtNdSvY3HEPZ@+6E0)@q0R`DhJbhi+U$Bb{va9cF%9;cek}PqJC~?lu%}vcK zVQ?-=O)N=GQ7F$W$xv|j^bH7ac}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!tj*g6T|-| z)7_7OBAf*tk;M!QddeWoSh3W;3@FH6;_2(k{(@bc-%=pZDQXr_NV3E=qQp5rH#aq} zgu%HeHL)Z$MWH;iBtya7(>EZzkxv{L-@=|Qjv*3~j2w*L{{i*j2aLXR{)60v6EJ~f zHk$c@F*a3T1t=29Jq!#W3c}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!XU?>#-Mks zbtxlIgtNdSvY3HEPZ@+6E0)@q0R`DhJbhi+U$Bb{vhtl{n@|H3k}PqJC~?lu%}vcK zVQ?-=O)N=GQ7F$W$xv|j^bH7aVp`+}@w`0pG2AA~_{ z5Pzopr01e~?-T(jq literal 0 HcmV?d00001 diff --git a/packages/demo/public/assets/skins/pixel/apps/icons/settings.png b/packages/demo/public/assets/skins/pixel/apps/icons/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..6e7fae1872870e0efabf952dcce10e9a167cc705 GIT binary patch literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U~J8Fb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!tj*g6T|-| z)7_7OBAf*tk;M!QddeWoSh3W;3@FH6;_2(k{(@axKwSTK z5(ej@)Wnk16ovB4k_-iRPv3y>Mm}+1d<%QJIEF|_GIB6}|Hl}Umc}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!tj*g6T|-| z)7_7OBAf*tk;M!QddeWoSh3W;3@FH6;_2(k{(@bc-mdK II;Vst00I&Hpa1{> literal 0 HcmV?d00001 diff --git a/packages/demo/public/assets/skins/pixel/apps/icons/text-editor.png b/packages/demo/public/assets/skins/pixel/apps/icons/text-editor.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf638f4f630b97100808ebe53fa924beb2f80de GIT binary patch literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U~J8Fb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!l21u!eGB( z+O%q*2xoyuWHAGSo-znCRxGtI0}8U2c>21szhD;^u++%2V)FzFNtU=qlsM<-=BDPA zFgO>bCYGe8D3oWGWGJ|M`UZqI@`(fETiDaZF+@U=k%RI3KcF54hNqwY|6j0j(|>dt zB*zF-0HV=>G#?`)3rx_($pOX$(|h(E0MkRlgpz38I=#bI(?KrwboFyt=akR{07Nhu A6#xJL literal 0 HcmV?d00001 diff --git a/packages/demo/public/assets/skins/pixel/apps/icons/wordle.png b/packages/demo/public/assets/skins/pixel/apps/icons/wordle.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e1e96ff2a5e450b5e1c532e32bc4c662652f23 GIT binary patch literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9Sn@U~J8Fb`J1#c2+1T%1_J8No8Qr zm{>c}*5j~)%+dJZrAk}*#6${D1kBax=(6$>?M_&@MKr3^VCNU-j7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ2p2@UerD1$NnW3l#Vq&uG_Qw`;KaMj;}_+XZs8tuIea@_IKXA z(i%J7#XQA)9MW|h+3360Nx>}u~{UmiH`Y3;l77Z*SAW&7dsC~}#!*hj06SC%a; zzNgN&dD0Sr`NI8DC615W*PYheU#MrL^Wn^fiJoT#+dGdYNuSO=txrv^XYwibxvETP;gAf?S-`^`7-bsdvn0d**+cn~Kb}P= zpWI?lK5nBGplDh5!T!hHwUIL<$|pA&F8F+On|)j30lf<=Zhrf|G1uIW;lFXg(yf1{ zS{Z!ytXjL&wXfk`?t@3WmY%FW@RZNs!xHbdCmwaPoE9?dnSaszX~Vwg1=UyIuHD&x znO(s-R`)Igd;0;8iJPw5+`D`A-tGPAv;O{NSog4K|Fml&|AFzsmgMd3!XU?>#-Mks zbtxlIgtNdSvY3HEPZ@+6E0)@q0R`DhJbhi+U$Bb{GRw8TR-XqHk}PqJC~?lu%}vcK zVQ?-=O)N=GQ7F$W$xv|j^bH7aq2G|^k!46 Uv_w}O%S(_ZPgg&ebxsLQ0C9i@`2YX_ literal 0 HcmV?d00001 diff --git a/packages/demo/scripts/stage.ts b/packages/demo/scripts/stage.ts index 87767e6..7c79988 100644 --- a/packages/demo/scripts/stage.ts +++ b/packages/demo/scripts/stage.ts @@ -3,7 +3,7 @@ import { appsConfig } from "../src/config/apps.config"; import { ANSI } from "../../core/src/constants"; import { NAME, TAG_LINE } from "../src/config/branding.config"; import { BASE_URL, BUILD_DIR, DOMAIN } from "../src/config/deploy.config"; -import { skin } from "../src/config/skin.config"; +import { defaultSkin } from "../src/config/skin.config"; import { name } from "../package.json"; const PATHS = { @@ -17,7 +17,7 @@ function generateSitemapXml() { const date = new Date(); const lastModified = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`; - const images = skin.wallpapers.map((path) => ` + const images = defaultSkin.wallpapers.map((path) => ` ${BASE_URL.slice(0, -1) + path} ` diff --git a/packages/demo/src/Main.tsx b/packages/demo/src/Main.tsx index b8bafc6..a1fa4a0 100644 --- a/packages/demo/src/Main.tsx +++ b/packages/demo/src/Main.tsx @@ -1,11 +1,33 @@ -import { ReactElement } from "react"; +import { ReactElement, useEffect, useState } from "react"; import { Router } from "./router/Router"; -import { skin } from "./config/skin.config"; +import { defaultSkin } from "./config/skin.config"; import { NAME, TAG_LINE } from "./config/branding.config"; import { appsConfig } from "./config/apps.config"; -import { ProzillaOS } from "prozilla-os"; +import { getViewportParams, ProzillaOS } from "prozilla-os"; +import { macOsSkin, minimalSkin, pixelSkin } from "@prozilla-os/skins"; export function Main(): ReactElement { + const [skin, setSkin] = useState(defaultSkin); + + useEffect(() => { + const params = getViewportParams(); + + if (params.skin == null) + return; + + switch (params.skin) { + case "mac": + setSkin(macOsSkin); + break; + case "minimal": + setSkin(minimalSkin); + break; + case "pixel": + setSkin(pixelSkin); + break; + } + }, []); + return { + import("../../styles/skins/pixel.css"); + } +}); \ No newline at end of file diff --git a/packages/skins/src/main.ts b/packages/skins/src/main.ts index d964fba..8b83d73 100644 --- a/packages/skins/src/main.ts +++ b/packages/skins/src/main.ts @@ -1 +1 @@ -export { Skin, macOsSkin, minimalSkin } from "./core"; \ No newline at end of file +export * from "./core"; \ No newline at end of file diff --git a/packages/skins/src/styles/skins/macOs.css b/packages/skins/src/styles/skins/macOs.css index a250387..a1c3fd1 100644 --- a/packages/skins/src/styles/skins/macOs.css +++ b/packages/skins/src/styles/skins/macOs.css @@ -100,13 +100,28 @@ pointer-events: auto; } -.ProzillaOS-Taskbar_UtilIcons button { +.ProzillaOS-Taskbar_Indicator--Calendar { display: flex; + flex-direction: row; gap: 0.5rem; } -.ProzillaOS-Taskbar_UtilIcons button br { - display: none; +.ProzillaOS-Taskbar_UtilIcons > div { + position: relative; +} + +.ProzillaOS-Taskbar_UtilIcons > div > div { + top: 100%; + bottom: unset; +} + +.ProzillaOS-Taskbar_Menu--Util { + border-radius: var(--border-radius-1); + border-top-right-radius: 0; +} + +.ProzillaOS-Taskbar_UtilIcons > div > div > .ProzillaOS-Taskbar_Menu--Util:not(.ProzillaOS-Taskbar_Menu--Active) { + transform: translateY(-100px); } .ProzillaOS-Desktop .ProzillaOS-DirectoryList { diff --git a/packages/skins/src/styles/skins/pixel.css b/packages/skins/src/styles/skins/pixel.css new file mode 100644 index 0000000..d8851c7 --- /dev/null +++ b/packages/skins/src/styles/skins/pixel.css @@ -0,0 +1,37 @@ +:root { + --border-radius-0: 0; + --border-radius-1: 0; +} + +:root { + --body-font-family: "Minecraftia", -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + /* --mono-font-family: "Minecraftia", source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; */ +} + +@font-face { + font-family: "Minecraftia"; + src: url("/assets/fonts/minecraftia/Minecraftia-Regular.ttf"); + font-display: swap; +} + +body { + font-smooth: never; + -webkit-font-smoothing : none; +} + +p, pre, input, a { + position: relative; + top: 0.25rem; + line-height: 1.6rem; +} + +p > a { + top: unset; +} + +.ProzillaOS-Taskbar_Indicator--Calendar > p { + font-size: 0.875rem; + line-height: 1.25rem; +} \ No newline at end of file