diff --git a/bun.lockb b/bun.lockb
index 17015fe..2aeadae 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/package.json b/package.json
index 743e9a1..8c4d121 100644
--- a/package.json
+++ b/package.json
@@ -8,13 +8,14 @@
},
"devDependencies": {
"@types/bun": "latest",
- "csstype": "^3.1.3"
- },
- "peerDependencies": {
- "typescript": "^5.7.2"
+ "csstype": "^3.1.3",
+ "typescript": "^5.8.3"
},
"dependencies": {
- "lightningcss": "^1.29.1",
+ "chokidar": "^4.0.3",
+ "lightningcss": "^1.30.1",
+ "lucide": "^0.525.0",
"serve-static-bun": "^0.5.3"
- }
+ },
+ "private": true
}
diff --git a/public/assets/Rubik.ttf b/public/assets/Rubik.ttf
deleted file mode 100644
index bbab349..0000000
Binary files a/public/assets/Rubik.ttf and /dev/null differ
diff --git a/public/assets/fonts/CascadiaCode-VariableFont_wght-subset.woff2 b/public/assets/fonts/CascadiaCode-VariableFont_wght-subset.woff2
new file mode 100644
index 0000000..55803d9
Binary files /dev/null and b/public/assets/fonts/CascadiaCode-VariableFont_wght-subset.woff2 differ
diff --git a/public/assets/fonts/CascadiaCode-VariableFont_wght.ttf b/public/assets/fonts/CascadiaCode-VariableFont_wght.ttf
new file mode 100644
index 0000000..58bea6b
Binary files /dev/null and b/public/assets/fonts/CascadiaCode-VariableFont_wght.ttf differ
diff --git a/public/assets/OFL.txt b/public/assets/fonts/OFL.txt
similarity index 95%
rename from public/assets/OFL.txt
rename to public/assets/fonts/OFL.txt
index e9f5f00..fef6daa 100644
--- a/public/assets/OFL.txt
+++ b/public/assets/fonts/OFL.txt
@@ -1,4 +1,5 @@
-Copyright 2015 The Rubik Project Authors (https://github.com/googlefonts/rubik)
+Copyright (c) 2019 - Present, Microsoft Corporation,
+with Reserved Font Name Cascadia Code.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
diff --git a/public/assets/fonts/make-font.sh b/public/assets/fonts/make-font.sh
new file mode 100644
index 0000000..cac1ef6
--- /dev/null
+++ b/public/assets/fonts/make-font.sh
@@ -0,0 +1 @@
+glyphhanger --subset='*.ttf' --whitelist='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.;:-_+*#~{}[]()/=1234567890ยง$"\\%' --formats=woff2
diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx
new file mode 100644
index 0000000..088212b
--- /dev/null
+++ b/src/components/Icon.tsx
@@ -0,0 +1,39 @@
+import { type IconNode } from "lucide";
+import type { CSSProperties } from "~/types";
+
+interface IconProps extends JSX.SvgProps {
+ icon: IconNode;
+ size?: CSSProperties["width"];
+ color?: CSSProperties["color"];
+}
+
+export const Icon = ({
+ icon,
+ size = "$4",
+ color = "white",
+ style,
+ ...svgProps
+}: IconProps) => {
+ return (
+
+ );
+};
diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx
index c2c477b..67fa200 100644
--- a/src/components/Layout.tsx
+++ b/src/components/Layout.tsx
@@ -1,80 +1,124 @@
import Global from "~/lib/Global";
-import Navigation from "./Navigation";
-import Heading from "./Heading";
+import { Icon } from "./Icon";
+import { ChevronRight, RectangleVertical } from "lucide";
import { Link } from "./Link";
interface LayoutProps {
children: JSX.Element | JSX.Element[];
}
+const menuItems = [
+ {
+ name: "Home",
+ href: "/",
+ },
+ {
+ name: "Posts",
+ href: "/posts",
+ },
+ {
+ name: "About Me",
+ href: "/about",
+ },
+];
+
export default function Layout({ children }: LayoutProps) {
return (
<>
-
+
+ {children}
+
>
);
}
diff --git a/src/index.tsx b/src/index.tsx
index 7fc1993..286cf8e 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -22,7 +22,13 @@ const router = new Bun.FileSystemRouter({
const staticPublic = staticDir("./public");
-const scriptsGlob = new Bun.Glob(__dirname + "/scripts/*");
+const devScripts = [
+ ...new Bun.Glob(__dirname + "/scripts/*.dev.ts").scanSync(),
+];
+const allScripts = [...new Bun.Glob(__dirname + "/scripts/*").scanSync()];
+const scriptEntries = import.meta.env.DEV
+ ? allScripts
+ : allScripts.filter((s) => !devScripts.includes(s));
const server = Bun.serve({
port: 8080,
@@ -46,10 +52,7 @@ const server = Bun.serve({
);
const systemScripts = await Bun.build({
- entrypoints: [
- ...scriptsGlob.scanSync(),
- "./src/components/Counter.state.ts",
- ],
+ entrypoints: scriptEntries,
minify: true,
plugins: [myPlugin],
});
@@ -60,7 +63,7 @@ const server = Bun.serve({
),
);
- const responseData = fillTemplate(template, {
+ const responseData = fillTemplate(template as unknown as string, {
head: renderResult.head + scripts.join(""),
body: renderResult.html,
});
@@ -81,6 +84,9 @@ const server = Bun.serve({
console.log("connected");
ws.subscribe("reload");
},
+ close: () => {
+ console.log("dc");
+ },
},
});
diff --git a/src/middlewares/gzip.ts b/src/middlewares/gzip.ts
index f94979a..c1c12a0 100644
--- a/src/middlewares/gzip.ts
+++ b/src/middlewares/gzip.ts
@@ -1,6 +1,7 @@
export const gzip = (handler: (req: Request) => Promise) => {
return async (req: Request) => {
const response = await handler(req);
+ if (new URL(req.url).pathname == "/ws") return response;
const bytes = await response.clone().bytes();
const gzipped = Bun.gzipSync(bytes);
return new Response(gzipped, {
diff --git a/src/myPlugin.ts b/src/myPlugin.ts
index 8ce2cbd..1ee1df3 100644
--- a/src/myPlugin.ts
+++ b/src/myPlugin.ts
@@ -11,16 +11,14 @@ export const myPlugin: BunPlugin = {
filter: /\.tsx?$/,
},
async (args) => {
- console.log("loading", args.path);
const path = require.resolve(args.path);
let contents = await Bun.file(path).text();
+ return { contents };
const createStateCalls = contents.matchAll(createStateStringRegex);
createStateCalls.forEach((match) => {
- console.log(match);
let braces = 1;
let index = match.index + createStateString.length;
let needsComma = false;
- console.log(contents[index]);
do {
index++;
if (contents[index] == "(") braces++;
@@ -28,7 +26,6 @@ export const myPlugin: BunPlugin = {
else if (contents[index] == ",") needsComma = false;
else if (contents[index].trim().length) needsComma = true;
} while (braces > 0);
- console.log(contents[index]);
const meta = {
path,
hash: crazyHash(contents),
@@ -38,7 +35,6 @@ export const myPlugin: BunPlugin = {
(needsComma ? ", " : "") +
JSON.stringify(meta) +
contents.substring(index);
- console.log(contents);
});
// console.log(contents);
return {
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index e2f535a..9c9b87c 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -1,28 +1,10 @@
-import { Counter } from "~/components/Counter";
-import Layout from "~/components/Layout";
-import { Link } from "~/components/Link";
import { useParams } from "~/lib/hooks";
-import { pokeapi } from "~/lib/pokeapi";
export default async function Index() {
const params = useParams();
- const page = Number(params.get("page") ?? 0);
- const pokemon = await pokeapi.getPokemonsList({
- limit: 20,
- offset: page * 20,
- });
return (
<>
Hello World
-
-
-
- {pokemon.results.map((r) => (
- - {r.name}
- ))}
-
- Prev
- Next
>
);
}
diff --git a/src/scripts/hmr.ts b/src/scripts/hmr.dev.ts
similarity index 86%
rename from src/scripts/hmr.ts
rename to src/scripts/hmr.dev.ts
index d1995ba..f5e1efa 100644
--- a/src/scripts/hmr.ts
+++ b/src/scripts/hmr.dev.ts
@@ -5,7 +5,7 @@ interface DevWindow extends Window {
declare const window: DevWindow;
if (!window.devListening) {
- const ws = new WebSocket("ws://localhost:8080/ws");
+ const ws = new WebSocket("ws://localhost:8081/ws");
ws.addEventListener("message", () => {
fetch(window.location.href).then(async (res) => {
window.document.documentElement.innerHTML = await res.text();
diff --git a/src/system/css-utils.ts b/src/system/css-utils.ts
index cfc9431..de04f60 100644
--- a/src/system/css-utils.ts
+++ b/src/system/css-utils.ts
@@ -6,6 +6,6 @@ type Transition =
| [BaseCSSProperty, CSSDuration, EasingFunction]
| [BaseCSSProperty, CSSDuration, EasingFunction, CSSDuration];
-export const transition = (transitions: Transition[]) => {
+export const transition = (...transitions: Transition[]) => {
return transitions.map((t) => t.join(" ")).join(",");
};
diff --git a/src/system/token-categories.ts b/src/system/token-categories.ts
index 424f278..a96e726 100644
--- a/src/system/token-categories.ts
+++ b/src/system/token-categories.ts
@@ -91,6 +91,30 @@ export const shorthand = {
value,
},
],
+ maxW: (value: T) => [
+ {
+ key: "maxWidth",
+ value,
+ },
+ ],
+ maxH: (value: T) => [
+ {
+ key: "maxHeight",
+ value,
+ },
+ ],
+ minW: (value: T) => [
+ {
+ key: "minWidth",
+ value,
+ },
+ ],
+ minH: (value: T) => [
+ {
+ key: "minHeight",
+ value,
+ },
+ ],
};
export const categoryMap = {
@@ -114,6 +138,10 @@ export const categoryMap = {
gap: "space",
height: "space",
width: "space",
+ maxHeight: "space",
+ maxWidth: "space",
+ minHeight: "space",
+ minWidth: "space",
fontFamily: "font",
fontSize: "font-size",
fontWeight: "font-weight",
diff --git a/src/theme.css b/src/theme.css
index fadc397..d91add1 100644
--- a/src/theme.css
+++ b/src/theme.css
@@ -1,255 +1,28 @@
@font-face {
- font-family: "Rubik";
- src: url("/assets/Rubik.ttf");
- font-weight: 100 1000;
+ font-family: "CascadiaCode";
+ src: url("/assets/fonts/CascadiaCode-VariableFont_wght-subset.woff2");
+ font-display: swap;
+ ascent-override: 90%;
+ descent-override: 20%;
+ line-gap-override: 0%;
+}
+
+html {
+ font-size-adjust: 0.54;
}
:root {
- /* Color tokens based pm tailwindcss */
- --color-red-50: oklch(0.971 0.013 17.38);
- --color-red-100: oklch(0.936 0.032 17.717);
- --color-red-200: oklch(0.885 0.062 18.334);
- --color-red-300: oklch(0.808 0.114 19.571);
- --color-red-400: oklch(0.704 0.191 22.216);
- --color-red-500: oklch(0.637 0.237 25.331);
- --color-red-600: oklch(0.577 0.245 27.325);
- --color-red-700: oklch(0.505 0.213 27.518);
- --color-red-800: oklch(0.444 0.177 26.899);
- --color-red-900: oklch(0.396 0.141 25.723);
- --color-red-950: oklch(0.258 0.092 26.042);
- --color-orange-50: oklch(0.98 0.016 73.684);
- --color-orange-100: oklch(0.954 0.038 75.164);
- --color-orange-200: oklch(0.901 0.076 70.697);
- --color-orange-300: oklch(0.837 0.128 66.29);
- --color-orange-400: oklch(0.75 0.183 55.934);
- --color-orange-500: oklch(0.705 0.213 47.604);
- --color-orange-600: oklch(0.646 0.222 41.116);
- --color-orange-700: oklch(0.553 0.195 38.402);
- --color-orange-800: oklch(0.47 0.157 37.304);
- --color-orange-900: oklch(0.408 0.123 38.172);
- --color-orange-950: oklch(0.266 0.079 36.259);
- --color-amber-50: oklch(0.987 0.022 95.277);
- --color-amber-100: oklch(0.962 0.059 95.617);
- --color-amber-200: oklch(0.924 0.12 95.746);
- --color-amber-300: oklch(0.879 0.169 91.605);
- --color-amber-400: oklch(0.828 0.189 84.429);
- --color-amber-500: oklch(0.769 0.188 70.08);
- --color-amber-600: oklch(0.666 0.179 58.318);
- --color-amber-700: oklch(0.555 0.163 48.998);
- --color-amber-800: oklch(0.473 0.137 46.201);
- --color-amber-900: oklch(0.414 0.112 45.904);
- --color-amber-950: oklch(0.279 0.077 45.635);
- --color-yellow-50: oklch(0.987 0.026 102.212);
- --color-yellow-100: oklch(0.973 0.071 103.193);
- --color-yellow-200: oklch(0.945 0.129 101.54);
- --color-yellow-300: oklch(0.905 0.182 98.111);
- --color-yellow-400: oklch(0.852 0.199 91.936);
- --color-yellow-500: oklch(0.795 0.184 86.047);
- --color-yellow-600: oklch(0.681 0.162 75.834);
- --color-yellow-700: oklch(0.554 0.135 66.442);
- --color-yellow-800: oklch(0.476 0.114 61.907);
- --color-yellow-900: oklch(0.421 0.095 57.708);
- --color-yellow-950: oklch(0.286 0.066 53.813);
- --color-lime-50: oklch(0.986 0.031 120.757);
- --color-lime-100: oklch(0.967 0.067 122.328);
- --color-lime-200: oklch(0.938 0.127 124.321);
- --color-lime-300: oklch(0.897 0.196 126.665);
- --color-lime-400: oklch(0.841 0.238 128.85);
- --color-lime-500: oklch(0.768 0.233 130.85);
- --color-lime-600: oklch(0.648 0.2 131.684);
- --color-lime-700: oklch(0.532 0.157 131.589);
- --color-lime-800: oklch(0.453 0.124 130.933);
- --color-lime-900: oklch(0.405 0.101 131.063);
- --color-lime-950: oklch(0.274 0.072 132.109);
- --color-green-50: oklch(0.982 0.018 155.826);
- --color-green-100: oklch(0.962 0.044 156.743);
- --color-green-200: oklch(0.925 0.084 155.995);
- --color-green-300: oklch(0.871 0.15 154.449);
- --color-green-400: oklch(0.792 0.209 151.711);
- --color-green-500: oklch(0.723 0.219 149.579);
- --color-green-600: oklch(0.627 0.194 149.214);
- --color-green-700: oklch(0.527 0.154 150.069);
- --color-green-800: oklch(0.448 0.119 151.328);
- --color-green-900: oklch(0.393 0.095 152.535);
- --color-green-950: oklch(0.266 0.065 152.934);
- --color-emerald-50: oklch(0.979 0.021 166.113);
- --color-emerald-100: oklch(0.95 0.052 163.051);
- --color-emerald-200: oklch(0.905 0.093 164.15);
- --color-emerald-300: oklch(0.845 0.143 164.978);
- --color-emerald-400: oklch(0.765 0.177 163.223);
- --color-emerald-500: oklch(0.696 0.17 162.48);
- --color-emerald-600: oklch(0.596 0.145 163.225);
- --color-emerald-700: oklch(0.508 0.118 165.612);
- --color-emerald-800: oklch(0.432 0.095 166.913);
- --color-emerald-900: oklch(0.378 0.077 168.94);
- --color-emerald-950: oklch(0.262 0.051 172.552);
- --color-teal-50: oklch(0.984 0.014 180.72);
- --color-teal-100: oklch(0.953 0.051 180.801);
- --color-teal-200: oklch(0.91 0.096 180.426);
- --color-teal-300: oklch(0.855 0.138 181.071);
- --color-teal-400: oklch(0.777 0.152 181.912);
- --color-teal-500: oklch(0.704 0.14 182.503);
- --color-teal-600: oklch(0.6 0.118 184.704);
- --color-teal-700: oklch(0.511 0.096 186.391);
- --color-teal-800: oklch(0.437 0.078 188.216);
- --color-teal-900: oklch(0.386 0.063 188.416);
- --color-teal-950: oklch(0.277 0.046 192.524);
- --color-cyan-50: oklch(0.984 0.019 200.873);
- --color-cyan-100: oklch(0.956 0.045 203.388);
- --color-cyan-200: oklch(0.917 0.08 205.041);
- --color-cyan-300: oklch(0.865 0.127 207.078);
- --color-cyan-400: oklch(0.789 0.154 211.53);
- --color-cyan-500: oklch(0.715 0.143 215.221);
- --color-cyan-600: oklch(0.609 0.126 221.723);
- --color-cyan-700: oklch(0.52 0.105 223.128);
- --color-cyan-800: oklch(0.45 0.085 224.283);
- --color-cyan-900: oklch(0.398 0.07 227.392);
- --color-cyan-950: oklch(0.302 0.056 229.695);
- --color-sky-50: oklch(0.977 0.013 236.62);
- --color-sky-100: oklch(0.951 0.026 236.824);
- --color-sky-200: oklch(0.901 0.058 230.902);
- --color-sky-300: oklch(0.828 0.111 230.318);
- --color-sky-400: oklch(0.746 0.16 232.661);
- --color-sky-500: oklch(0.685 0.169 237.323);
- --color-sky-600: oklch(0.588 0.158 241.966);
- --color-sky-700: oklch(0.5 0.134 242.749);
- --color-sky-800: oklch(0.443 0.11 240.79);
- --color-sky-900: oklch(0.391 0.09 240.876);
- --color-sky-950: oklch(0.293 0.066 243.157);
- --color-blue-50: oklch(0.97 0.014 254.604);
- --color-blue-100: oklch(0.932 0.032 255.585);
- --color-blue-200: oklch(0.882 0.059 254.128);
- --color-blue-300: oklch(0.809 0.105 251.813);
- --color-blue-400: oklch(0.707 0.165 254.624);
- --color-blue-500: oklch(0.623 0.214 259.815);
- --color-blue-600: oklch(0.546 0.245 262.881);
- --color-blue-700: oklch(0.488 0.243 264.376);
- --color-blue-800: oklch(0.424 0.199 265.638);
- --color-blue-900: oklch(0.379 0.146 265.522);
- --color-blue-950: oklch(0.282 0.091 267.935);
- --color-indigo-50: oklch(0.962 0.018 272.314);
- --color-indigo-100: oklch(0.93 0.034 272.788);
- --color-indigo-200: oklch(0.87 0.065 274.039);
- --color-indigo-300: oklch(0.785 0.115 274.713);
- --color-indigo-400: oklch(0.673 0.182 276.935);
- --color-indigo-500: oklch(0.585 0.233 277.117);
- --color-indigo-600: oklch(0.511 0.262 276.966);
- --color-indigo-700: oklch(0.457 0.24 277.023);
- --color-indigo-800: oklch(0.398 0.195 277.366);
- --color-indigo-900: oklch(0.359 0.144 278.697);
- --color-indigo-950: oklch(0.257 0.09 281.288);
- --color-violet-50: oklch(0.969 0.016 293.756);
- --color-violet-100: oklch(0.943 0.029 294.588);
- --color-violet-200: oklch(0.894 0.057 293.283);
- --color-violet-300: oklch(0.811 0.111 293.571);
- --color-violet-400: oklch(0.702 0.183 293.541);
- --color-violet-500: oklch(0.606 0.25 292.717);
- --color-violet-600: oklch(0.541 0.281 293.009);
- --color-violet-700: oklch(0.491 0.27 292.581);
- --color-violet-800: oklch(0.432 0.232 292.759);
- --color-violet-900: oklch(0.38 0.189 293.745);
- --color-violet-950: oklch(0.283 0.141 291.089);
- --color-purple-50: oklch(0.977 0.014 308.299);
- --color-purple-100: oklch(0.946 0.033 307.174);
- --color-purple-200: oklch(0.902 0.063 306.703);
- --color-purple-300: oklch(0.827 0.119 306.383);
- --color-purple-400: oklch(0.714 0.203 305.504);
- --color-purple-500: oklch(0.627 0.265 303.9);
- --color-purple-600: oklch(0.558 0.288 302.321);
- --color-purple-700: oklch(0.496 0.265 301.924);
- --color-purple-800: oklch(0.438 0.218 303.724);
- --color-purple-900: oklch(0.381 0.176 304.987);
- --color-purple-950: oklch(0.291 0.149 302.717);
- --color-fuchsia-50: oklch(0.977 0.017 320.058);
- --color-fuchsia-100: oklch(0.952 0.037 318.852);
- --color-fuchsia-200: oklch(0.903 0.076 319.62);
- --color-fuchsia-300: oklch(0.833 0.145 321.434);
- --color-fuchsia-400: oklch(0.74 0.238 322.16);
- --color-fuchsia-500: oklch(0.667 0.295 322.15);
- --color-fuchsia-600: oklch(0.591 0.293 322.896);
- --color-fuchsia-700: oklch(0.518 0.253 323.949);
- --color-fuchsia-800: oklch(0.452 0.211 324.591);
- --color-fuchsia-900: oklch(0.401 0.17 325.612);
- --color-fuchsia-950: oklch(0.293 0.136 325.661);
- --color-pink-50: oklch(0.971 0.014 343.198);
- --color-pink-100: oklch(0.948 0.028 342.258);
- --color-pink-200: oklch(0.899 0.061 343.231);
- --color-pink-300: oklch(0.823 0.12 346.018);
- --color-pink-400: oklch(0.718 0.202 349.761);
- --color-pink-500: oklch(0.656 0.241 354.308);
- --color-pink-600: oklch(0.592 0.249 0.584);
- --color-pink-700: oklch(0.525 0.223 3.958);
- --color-pink-800: oklch(0.459 0.187 3.815);
- --color-pink-900: oklch(0.408 0.153 2.432);
- --color-pink-950: oklch(0.284 0.109 3.907);
- --color-rose-50: oklch(0.969 0.015 12.422);
- --color-rose-100: oklch(0.941 0.03 12.58);
- --color-rose-200: oklch(0.892 0.058 10.001);
- --color-rose-300: oklch(0.81 0.117 11.638);
- --color-rose-400: oklch(0.712 0.194 13.428);
- --color-rose-500: oklch(0.645 0.246 16.439);
- --color-rose-600: oklch(0.586 0.253 17.585);
- --color-rose-700: oklch(0.514 0.222 16.935);
- --color-rose-800: oklch(0.455 0.188 13.697);
- --color-rose-900: oklch(0.41 0.159 10.272);
- --color-rose-950: oklch(0.271 0.105 12.094);
- --color-slate-50: oklch(0.984 0.003 247.858);
- --color-slate-100: oklch(0.968 0.007 247.896);
- --color-slate-200: oklch(0.929 0.013 255.508);
- --color-slate-300: oklch(0.869 0.022 252.894);
- --color-slate-400: oklch(0.704 0.04 256.788);
- --color-slate-500: oklch(0.554 0.046 257.417);
- --color-slate-600: oklch(0.446 0.043 257.281);
- --color-slate-700: oklch(0.372 0.044 257.287);
- --color-slate-800: oklch(0.279 0.041 260.031);
- --color-slate-900: oklch(0.208 0.042 265.755);
- --color-slate-950: oklch(0.129 0.042 264.695);
- --color-gray-50: oklch(0.985 0.002 247.839);
- --color-gray-100: oklch(0.967 0.003 264.542);
- --color-gray-200: oklch(0.928 0.006 264.531);
- --color-gray-300: oklch(0.872 0.01 258.338);
- --color-gray-400: oklch(0.707 0.022 261.325);
- --color-gray-500: oklch(0.551 0.027 264.364);
- --color-gray-600: oklch(0.446 0.03 256.802);
- --color-gray-700: oklch(0.373 0.034 259.733);
- --color-gray-800: oklch(0.278 0.033 256.848);
- --color-gray-900: oklch(0.21 0.034 264.665);
- --color-gray-950: oklch(0.13 0.028 261.692);
- --color-zinc-50: oklch(0.985 0 0);
- --color-zinc-100: oklch(0.967 0.001 286.375);
- --color-zinc-200: oklch(0.92 0.004 286.32);
- --color-zinc-300: oklch(0.871 0.006 286.286);
- --color-zinc-400: oklch(0.705 0.015 286.067);
- --color-zinc-500: oklch(0.552 0.016 285.938);
- --color-zinc-600: oklch(0.442 0.017 285.786);
- --color-zinc-700: oklch(0.37 0.013 285.805);
- --color-zinc-800: oklch(0.274 0.006 286.033);
- --color-zinc-900: oklch(0.21 0.006 285.885);
- --color-zinc-950: oklch(0.141 0.005 285.823);
- --color-neutral-50: oklch(0.985 0 0);
- --color-neutral-100: oklch(0.97 0 0);
- --color-neutral-200: oklch(0.922 0 0);
- --color-neutral-300: oklch(0.87 0 0);
- --color-neutral-400: oklch(0.708 0 0);
- --color-neutral-500: oklch(0.556 0 0);
- --color-neutral-600: oklch(0.439 0 0);
- --color-neutral-700: oklch(0.371 0 0);
- --color-neutral-800: oklch(0.269 0 0);
- --color-neutral-900: oklch(0.205 0 0);
- --color-neutral-950: oklch(0.145 0 0);
- --color-stone-50: oklch(0.985 0.001 106.423);
- --color-stone-100: oklch(0.97 0.001 106.424);
- --color-stone-200: oklch(0.923 0.003 48.717);
- --color-stone-300: oklch(0.869 0.005 56.366);
- --color-stone-400: oklch(0.709 0.01 56.259);
- --color-stone-500: oklch(0.553 0.013 58.071);
- --color-stone-600: oklch(0.444 0.011 73.639);
- --color-stone-700: oklch(0.374 0.01 67.558);
- --color-stone-800: oklch(0.268 0.007 34.298);
- --color-stone-900: oklch(0.216 0.006 56.043);
- --color-stone-950: oklch(0.147 0.004 49.25);
- --color-black: #000;
- --color-white: #fff;
+ --color-fg: #c0caf5;
+ --color-bg: #292e42;
+ --color-black: #1a1b26;
+ --color-red: #f7768e;
+ --color-green: #9ece6a;
+ --color-yellow: #e0af68;
+ --color-blue: #7aa2f7;
+ --color-magenta: #bb9af7;
+ --color-cyan: #7dcfff;
+ --color-white: #a9b1d6;
+ --color-orange: #ff9e64;
--space-1: 0.25rem;
--space-2: 0.5rem;
@@ -279,8 +52,9 @@
--space-64: 16rem;
--space-72: 18rem;
--space-80: 20rem;
+ --space-page: 56rem;
- --font-sans: sans-serif;
+ --font-default: "CascadiaCode", monospace;
--font-size-xs: 0.75rem;
--font-size-sm: 0.875rem;
@@ -315,3 +89,14 @@
--border-radius-3xl: 1.5rem;
--border-radius-4xl: 2rem;
}
+
+@keyframes blink {
+ 0%,
+ 100% {
+ fill: var(--color-fg);
+ }
+
+ 50% {
+ fill: transparent;
+ }
+}
diff --git a/src/types.ts b/src/types.ts
index 93803e8..af5d8ed 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -34,6 +34,10 @@ export type CSSProperties = CSS.Properties & {
mY?: CSS.Properties["marginTop"];
pX?: CSS.Properties["paddingLeft"];
pY?: CSS.Properties["paddingTop"];
+ maxW?: CSS.Properties["maxWidth"];
+ maxH?: CSS.Properties["maxHeight"];
+ minW?: CSS.Properties["minWidth"];
+ minH?: CSS.Properties["minHeight"];
};
export type CSSDuration = `${number}s` | `${number}ms`;
export type EasingFunction =
diff --git a/watch.ts b/watch.ts
new file mode 100644
index 0000000..5854c67
--- /dev/null
+++ b/watch.ts
@@ -0,0 +1,59 @@
+import { watch } from "chokidar";
+import path from "path";
+
+const server = Bun.serve({
+ port: 8081,
+ fetch: async (req): Promise => {
+ if (req.url.endsWith("ws")) {
+ if (server.upgrade(req)) return new Response("ok");
+ }
+ return new Response("ok");
+ },
+ websocket: {
+ message: () => {},
+ open: async (ws) => {
+ console.log("connected");
+ ws.subscribe("reload");
+ },
+ close: () => {
+ console.log("dc");
+ },
+ },
+});
+
+const watcher = watch(path.join(__dirname, "src"), {
+ persistent: true,
+ atomic: true,
+ ignoreInitial: true,
+ usePolling: true,
+ interval: 50,
+});
+
+let p = Bun.spawn(
+ [path.join(process.env.HOME!, ".bun/bin/bun"), "src/index.tsx"],
+ {
+ stdout: "inherit",
+ env: {
+ DEV: "1",
+ },
+ },
+);
+
+let timer: Timer | undefined;
+const reload = async () => {
+ p.kill();
+ await p.exited;
+ p = Bun.spawn(
+ [path.join(process.env.HOME!, ".bun/bin/bun"), "src/index.tsx"],
+ {
+ stdout: "inherit",
+ },
+ );
+ setTimeout(() => server.publish("reload", "reload"), 50);
+};
+
+watcher.on("all", async () => {
+ console.log("WATCHER TRIGGERED");
+ clearTimeout(timer);
+ timer = setTimeout(reload, 50);
+});