Added icons and better layoutr

This commit is contained in:
DrMint 2023-09-04 22:17:28 +02:00
parent 3d4ed5a410
commit 1f229b4ce9
9 changed files with 122 additions and 32 deletions

View File

@ -1,4 +1,5 @@
import node from "@astrojs/node";
import icon from "astro-icon";
import { defineConfig } from "astro/config";
// https://astro.build/config
@ -10,6 +11,13 @@ export default defineConfig({
adapter: node({
mode: "standalone",
}),
integrations: [
icon({
include: {
"material-symbols": ["*"], // Loads entire Material Design Icon set
},
}),
],
server: {
port: import.meta.env.ASTRO_PORT,
host: import.meta.env.ASTRO_HOST,

BIN
bun.lockb

Binary file not shown.

View File

@ -14,11 +14,13 @@
"@astrojs/node": "^6.0.0",
"accept-language": "^3.0.18",
"astro": "^3.0.3",
"astro-icon": "next",
"hono": "^3.5.7",
"node-cache": "^5.1.2",
"sanitize.css": "^13.0.0"
},
"devDependencies": {
"@iconify-json/material-symbols": "^1.1.57",
"bun-types": "^0.8.1"
}
}

1
src/env.d.ts vendored
View File

@ -1,3 +1,4 @@
/// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" />
interface ImportMetaEnv {

View File

@ -1,3 +1,4 @@
import "sanitize.css";
import "src/styles/global.css";
import "src/styles/reset.css";

View File

@ -1,4 +1,6 @@
---
import { Icon } from "astro-icon/components";
interface Props {
title: string;
}
@ -18,34 +20,70 @@ const { title } = Astro.props;
<div id="main-panel">
<slot name="mainPanel">Main Panel</slot>
</div>
<div id="backdrop"></div>
<div id="sub-panel">
<slot name="subPanel">Sub Panel</slot>
</div>
<div id="menu-panel">Menu Panel</div>
<div id="navbar">
<button id="open-menu">Open menu</button>
<button id="open-sub">Open sub</button>
<button id="open-menu">
<Icon class="when-off" name="material-symbols:menu" width={24} height={24} />
<Icon class="when-on" name="material-symbols:close" width={24} height={24} />
</button>
{title}
<button id="open-sub">
<Icon class="when-off" name="material-symbols:tune" width={24} height={24} />
<Icon class="when-on" name="material-symbols:close" width={24} height={24} />
</button>
</div>
</body>
</html>
<script>
const subPanel = document.getElementById("sub-panel");
const menuPanel = document.getElementById("menu-panel");
const openMenuButton = document.getElementById("open-menu");
const subMenuButton = document.getElementById("open-sub");
const subPanel = document.querySelector("#sub-panel")!;
const menuPanel = document.querySelector("#menu-panel")!;
const openMenuButton = document.querySelector("#open-menu")!;
const subMenuButton = document.querySelector("#open-sub")!;
const backdrop = document.querySelector("#backdrop")!;
openMenuButton?.addEventListener("click", () => {
menuPanel?.classList.toggle("opened");
openMenuButton.addEventListener("click", () => {
menuPanel.classList.toggle("opened");
openMenuButton.classList.toggle("on");
subPanel.classList.remove("opened");
subMenuButton.classList.remove("on");
if (menuPanel.classList.contains("opened")) {
backdrop.classList.add("on");
} else {
backdrop.classList.remove("on");
}
});
subMenuButton?.addEventListener("click", () => {
subPanel?.classList.toggle("opened");
subMenuButton.addEventListener("click", () => {
subPanel.classList.toggle("opened");
subMenuButton.classList.toggle("on");
menuPanel.classList.remove("opened");
openMenuButton.classList.remove("on");
if (subPanel.classList.contains("opened")) {
backdrop.classList.add("on");
} else {
backdrop.classList.remove("on");
}
});
backdrop.addEventListener("click", () => {
backdrop.classList.remove("on");
subPanel.classList.remove("opened");
subMenuButton.classList.remove("on");
menuPanel.classList.remove("opened");
openMenuButton.classList.remove("on");
});
</script>
<style>
body {
--border-style: 1px solid rgb(var(--theme-color-dark) / 0.5);
display: grid;
background-color: rgb(var(--theme-color-light));
color: rgb(var(--theme-color-black));
@ -54,9 +92,13 @@ const { title } = Astro.props;
overflow: hidden;
& > div {
border: 1px solid rgb(var(--theme-color-dark));
background-color: rgb(var(--theme-color-light));
}
& > #sub-panel,
& > #menu-panel {
border-right: var(--border-style);
}
}
@media (max-width: 60rem) {
@ -64,10 +106,15 @@ const { title } = Astro.props;
grid-template-areas: "main" "navbar";
grid-template-rows: 1fr 5rem;
& > #menu-panel {
& > #menu-panel,
& > #sub-panel {
grid-area: main;
transform: translateX(-100%);
transition: transform 0.3s;
width: min(30rem, 90%);
}
& > #menu-panel {
transform: translateX(-100%);
}
& > #menu-panel.opened {
@ -75,9 +122,10 @@ const { title } = Astro.props;
}
& > #sub-panel {
grid-area: main;
justify-self: right;
border-right: unset;
border-left: var(--border-style);
transform: translateX(100%);
transition: transform 0.3s;
}
& > #sub-panel.opened {
@ -88,8 +136,43 @@ const { title } = Astro.props;
grid-area: main;
}
& > #backdrop {
background-color: rgb(var(--theme-color-shade));
opacity: 0%;
transition: opacity 0.3s;
grid-area: main;
}
& > #backdrop:not(.on) {
touch-action: none;
pointer-events: none;
}
& > #backdrop.on {
opacity: 60%;
cursor: pointer;
}
& > #navbar {
grid-area: navbar;
display: grid;
grid-template-columns: 5rem 1fr 5rem;
place-items: center;
border-top: var(--border-style);
& > button:not(.on) > .when-on,
& > button.on > .when-off {
display: none;
}
}
}
}
@media (max-width: 20rem) {
body {
& > #menu-panel,
& > #sub-panel {
width: 100%;
}
}
}
@ -111,7 +194,8 @@ const { title } = Astro.props;
grid-area: main;
}
& > #navbar {
& > #navbar,
& > #backdrop {
display: none;
}
}

View File

@ -1,12 +1,10 @@
---
import "src/global.ts";
import AppLayout from "src/layouts/AppLayout.astro";
const { locale } = Astro.params;
---
<AppLayout title="Welcome to Astro.">
<main slot="subPanel">
<h1>Hello {locale}</h1>
<main slot="mainPanel">
<h1>Hello from Astro</h1>
</main>
</AppLayout>

View File

@ -1,12 +0,0 @@
---
import "src/global.ts";
import AppLayout from "src/layouts/AppLayout.astro";
const { locale } = Astro.params;
---
<AppLayout title="Welcome to Astro.">
<main slot="subPanel">
<h1>Hello {locale}</h1>
</main>
</AppLayout>

8
src/styles/reset.css Normal file
View File

@ -0,0 +1,8 @@
:where(button) {
background-color: inherit;
color: inherit;
border: initial;
padding: initial;
margin: initial;
cursor: pointer;
}