+
{props.icon}
@@ -444,7 +447,7 @@ function ActionButton(props) {
{props.title}
{props.shortcut ? (
-
{props.shortcut}
+
{props.shortcut}
) : null}
@@ -452,3 +455,27 @@ function ActionButton(props) {
);
};
+
+function InfiniteLoopError(props) {
+ return (
+ <>
+
Infinite loop detected
+ {!props.code.match(/\s+HLT(\s+|$)/i) ?
Did you forget to add HLT?
:
+ props.code.match(/(^|\s+)ORG(\s+|$)/i) ? (
+ <>
+
+ Using ORG may cause the program to load at a different address.
+
+
+ Enter the address where your program begins execution in the text box near the
+
+
+ Run
+ button.
+
+ >
+ ) :
Please check your program for logic errors.
+ }
+ >
+ );
+}
diff --git a/src/components/Assembled.jsx b/src/components/Assembled.jsx
index 31279e5..edc2f82 100644
--- a/src/components/Assembled.jsx
+++ b/src/components/Assembled.jsx
@@ -1,4 +1,4 @@
-import { createEffect, createSignal } from 'solid-js';
+import { createEffect, createSignal, onMount } from 'solid-js';
import { store } from '../store/store.js';
import { toByteString } from '../utils/NumberFormat.js';
import { HiSolidWrench } from 'solid-icons/hi';
@@ -6,20 +6,71 @@ import { VsCopy, VsError } from 'solid-icons/vs';
import { FiAlertCircle, FiAlertTriangle } from 'solid-icons/fi';
import CopyComponent from './CopyComponent.jsx';
import { Tooltip } from '@kobalte/core/tooltip';
+import { BsArrowBarLeft, BsArrowBarRight } from 'solid-icons/bs';
export function Assembled() {
let [lines, setLines] = createSignal([]);
+ let [expanded, setExpanded] = createSignal(true);
+ const [width, setWidth] = createSignal(300);
+
createEffect(() => {
setLines(zipAssembledSource(store.assembled, store.code));
});
+
+ const toggleExpanded = () => {
+ setExpanded((expanded) => !expanded);
+ };
+
+ onMount(() => {
+ setWidth(window.innerWidth * 0.3);
+ const handleResize = () => {
+ const isMd = window.matchMedia("(min-width: 768px)").matches;
+ setExpanded(isMd);
+ };
+
+ // Initial check
+ handleResize();
+
+ // Listen for resize events
+ window.addEventListener("resize", handleResize);
+
+ // Cleanup listener on component unmount
+ return () => {
+ window.removeEventListener("resize", handleResize);
+ };
+ });
+
+ const startResize = (event) => {
+ const onMouseMove = (e) => setWidth((prev) => prev - e.movementX);
+ const onMouseUp = () => {
+ window.removeEventListener("mousemove", onMouseMove);
+ window.removeEventListener("mouseup", onMouseUp);
+ };
+ window.addEventListener("mousemove", onMouseMove);
+ window.addEventListener("mouseup", onMouseUp);
+ onCleanup(() => onMouseUp()); // Cleanup when SolidJS destroys the component
+ };
+
return (
-
-
-
Assembled Output
+
+
+
+
+
+
Assembled Output
-
+
copyOutputAsText(lines())} />
@@ -31,127 +82,140 @@ export function Assembled() {
-
-
-
-
+
+
+ {expanded() ? : }
+
+
+
+
+ {expanded() ? "Collapse Panel" : "Expand Panel"}
+
+
+
+
+
+
+
+
+ {((line, i) => {
+ const code = showCode(line[0]);
+ return (
+
+
{i() + 1}
+
+ { code.length ? `0x${code[0].currentAddress.toString(16).toUpperCase()}` : '' }
+
+
+
+ {(item) => (
+
+ )}
+
+
+
{ line[1] }
+
+ );
+ })}
+
+
+
-
- {((line, i) => {
- const code = showCode(line[0]);
+ >
+ {store.errors.map((e) => {
+ const codeLines = store.codeWithError.split('\n');
+ const startLine = e.location.start.line - 1;
+ const endLine = e.location.end.line - 1;
+
+ const displayedLines = codeLines.slice(startLine, endLine + 1); // All lines in the range
+
return (
-
-
{i() + 1}
-
- { code.length ? `0x${code[0].currentAddress.toString(16).toUpperCase()}` : '' }
-
-
-
- {(item) => (
-
+ <>
+ {e.type ? (
+
+
+
+
+ {e.type.toUpperCase()}
+
+ ) : null}
+
+ {e.hint.length ? null : (Line {e.line} , Column: {e.column} : )}
+ {e.msg} {e.hint.length ? (on line {e.line} ) : null}
+
+ {e.hint.length ? (
+
+ {(hint) => (
+
+ Hint : {hint}
+
)}
+ ) : null}
+
+ {displayedLines.map((line, index) => {
+ const lineNumber = startLine + index + 1;
+
+ const startColMinusOne = e.location.start.column === 0 ? 1 : e.location.start.column - 1;
+ if (index === 0) {
+ // Start Line
+ const startMarker = ' '.repeat(startColMinusOne) + '^'.repeat(line.length - startColMinusOne > 0 ? line.length - startColMinusOne : 0);
+ return (
+
+
+ {lineNumber}| {line}
+
+
+ {' '.repeat(lineNumber.toString().length) + '| '}{startMarker}
+
+
+ );
+ } else if (index === displayedLines.length - 1) {
+ // End Line
+ const endMarker = '^'.repeat(startColMinusOne);
+ return (
+
+
+ {lineNumber}| {line}
+
+
+ {' '.repeat(lineNumber.toString().length) + '| '}{endMarker}
+
+
+ );
+ } else {
+ // Middle lines, show without any marker
+ return (
+
+
+ {lineNumber}| {line}
+
+
+ );
+ }
+ })}
- { line[1] }
-
+ >
);
})}
-
-
-
- {store.errors.map((e) => {
- const codeLines = store.codeWithError.split('\n');
- const startLine = e.location.start.line - 1;
- const endLine = e.location.end.line - 1;
-
- const displayedLines = codeLines.slice(startLine, endLine + 1); // All lines in the range
-
- return (
- <>
- {e.type ? (
-
-
-
-
- {e.type.toUpperCase()}
-
- ) : null}
-
- {e.hint.length ? null : (Line {e.line} , Column: {e.column} : )}
- {e.msg} {e.hint.length ? (on line {e.line} ) : null}
-
- {e.hint.length ? (
-
- {(hint) => (
-
- Hint : {hint}
-
- )}
-
- ) : null}
-
- {displayedLines.map((line, index) => {
- const lineNumber = startLine + index + 1;
-
- const startColMinusOne = e.location.start.column === 0 ? 1 : e.location.start.column - 1;
- if (index === 0) {
- // Start Line
- const startMarker = ' '.repeat(startColMinusOne) + '^'.repeat(line.length - startColMinusOne > 0 ? line.length - startColMinusOne : 0);
- return (
-
-
- {lineNumber}| {line}
-
-
- {' '.repeat(lineNumber.toString().length) + '| '}{startMarker}
-
-
- );
- } else if (index === displayedLines.length - 1) {
- // End Line
- const endMarker = '^'.repeat(startColMinusOne);
- return (
-
-
- {lineNumber}| {line}
-
-
- {' '.repeat(lineNumber.toString().length) + '| '}{endMarker}
-
-
- );
- } else {
- // Middle lines, show without any marker
- return (
-
-
- {lineNumber}| {line}
-
-
- );
- }
- })}
-
- >
- );
- })}
-
-
-
- Load or Run the program to view the assembled output.
-
+
+
+
+ Load or Run the program to view the assembled output.
+
+
diff --git a/src/components/CopyComponent.jsx b/src/components/CopyComponent.jsx
index b7ef808..b2c4f1e 100644
--- a/src/components/CopyComponent.jsx
+++ b/src/components/CopyComponent.jsx
@@ -18,7 +18,7 @@ function CopyComponent(props) {
return (
copyOutputAsText()}>
{copied() ? (
-
+
Copied
diff --git a/src/components/Flags.jsx b/src/components/Flags.jsx
index 5edfc54..f98b549 100644
--- a/src/components/Flags.jsx
+++ b/src/components/Flags.jsx
@@ -28,9 +28,9 @@ export function Flags() {
return (
-
+
@@ -53,7 +53,7 @@ export function Flags() {
function Flag(props) {
const id = `flag-${props.id}`;
return (
-
+
{props.name}
@@ -62,7 +62,7 @@ function Flag(props) {
props.onSave(e.target.checked)}
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
index dda4a58..5bd1b4c 100644
--- a/src/components/Footer.astro
+++ b/src/components/Footer.astro
@@ -11,7 +11,7 @@ interface Props {
const { small } = Astro.props;
---
{small && (
-
+
Documentation
ยท
diff --git a/src/components/Header.astro b/src/components/Header.astro
index 03fabb6..40810f3 100644
--- a/src/components/Header.astro
+++ b/src/components/Header.astro
@@ -1,6 +1,7 @@
---
import HandHoldingHeartIcon from '../icons/hand-holding-heart.svg?raw';
import Logo from '../icons/logo.svg?raw';
+import LogoWithBackground from '../icons/logo-with-green-background.svg?raw';
import FAQs from './FAQs.astro';
import ThemeSwitcher from './ThemeSwitcher.astro';
import { Actions } from './Actions.jsx';
@@ -12,12 +13,27 @@ interface Props {
const { showActions, fullwidth } = Astro.props;
---
-
+
@@ -44,13 +60,14 @@ const { showActions, fullwidth } = Astro.props;
diff --git a/src/tailwind.main.config.mjs b/src/tailwind.main.config.mjs
index b8aa71e..999babd 100644
--- a/src/tailwind.main.config.mjs
+++ b/src/tailwind.main.config.mjs
@@ -1,9 +1,23 @@
/** @type {import('tailwindcss').Config} */
-const generateColorString = (variable) => {
- return `rgb(var(--${variable}) / 1)`;
+function formatCSSVarToRGB(varName) {
+ if (!varName.startsWith('--')) {
+ throw new Error('Invalid variable name. CSS variables should start with "--".');
+ }
+ return `rgb(var(${varName}) / )`;
}
+const grayLevels = ['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', '950'];
+
+const grayColors = Object.fromEntries(
+ grayLevels.map((shade) => [`${shade}`, formatCSSVarToRGB(`--sm-gray-${shade}`)])
+);
+
+const primaryShades = ['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', '950', 'DEFAULT'];
+const primaryColors = Object.fromEntries(
+ primaryShades.map((shade) => [`${shade}`, formatCSSVarToRGB(shade === 'DEFAULT' ? '--sm-primary' : `--sm-primary-${shade}`)])
+);
+
export default {
content: {
relative: true,
@@ -21,79 +35,75 @@ export default {
'h-sm': { raw: '(max-height: 400px)' },
},
colors: {
- terminal: {
- 50: "var(--sm-primary-50)",
- 100: "var(--sm-primary-100)",
- 200: "var(--sm-primary-200)",
- 300: "var(--sm-primary-300)",
- 400: "var(--sm-primary-400)",
- 500: "var(--sm-primary-500)",
- 600: "var(--sm-primary-600)",
- 700: "var(--sm-primary-700)",
- 800: "var(--sm-primary-800)",
- 900: "var(--sm-primary-900)",
- 950: "var(--sm-primary-950)",
- DEFAULT: "var(--sm-primary)", // Alias for 500
- },
- gray: {
- 50: "var(--sm-gray-50)",
- 100: "var(--sm-gray-100)",
- 200: "var(--sm-gray-200)",
- 300: "var(--sm-gray-300)",
- 400: "var(--sm-gray-400)",
- 500: "var(--sm-gray-500)",
- 600: "var(--sm-gray-600)",
- 700: "var(--sm-gray-700)",
- 800: "var(--sm-gray-800)",
- 900: "var(--sm-gray-900)",
- 950: "var(--sm-gray-950)",
- },
+ terminal: primaryColors,
+ gray: grayColors,
page: {
- background: "var(--sm-page-background)",
+ background: formatCSSVarToRGB("--sm-page-background"),
},
main: {
- background: "var(--sm-main-background)",
- border: "var(--sm-main-border)",
+ background: formatCSSVarToRGB("--sm-main-background"),
+ border: formatCSSVarToRGB("--sm-main-border"),
},
primary: {
- foreground: "var(--sm-primary-foreground)",
- border: "var(--sm-primary-border)",
+ foreground: formatCSSVarToRGB("--sm-primary-foreground"),
+ border: formatCSSVarToRGB("--sm-primary-border"),
},
secondary: {
- foreground: "var(--sm-secondary-foreground)",
- background: "var(--sm-secondary-background)",
- border: "var(--sm-secondary-border)",
+ foreground: formatCSSVarToRGB("--sm-secondary-foreground"),
+ background: formatCSSVarToRGB("--sm-secondary-background"),
+ border: formatCSSVarToRGB("--sm-secondary-border"),
},
active: {
- foreground: "var(--sm-active-foreground)",
- background: "var(--sm-active-background)",
- border: "var(--sm-active-border)",
+ foreground: formatCSSVarToRGB("--sm-active-foreground"),
+ background: formatCSSVarToRGB("--sm-active-background"),
+ border: formatCSSVarToRGB("--sm-active-border"),
},
inactive: {
- foreground: "var(--sm-inactive-foreground)",
- border: "var(--sm-inactive-border)",
+ foreground: formatCSSVarToRGB("--sm-inactive-foreground"),
+ border: formatCSSVarToRGB("--sm-inactive-border"),
},
red: {
- foreground: "var(--sm-red-foreground)",
+ foreground: formatCSSVarToRGB("--sm-red-foreground"),
},
green: {
- foreground: "var(--sm-green-foreground)",
+ foreground: formatCSSVarToRGB("--sm-green-foreground"),
},
yellow: {
- foreground: "var(--sm-yellow-foreground)",
+ foreground: formatCSSVarToRGB("--sm-yellow-foreground"),
+ },
+ blue: {
+ foreground: formatCSSVarToRGB("--sm-blue-foreground"),
},
+ orange: {
+ foreground: formatCSSVarToRGB("--sm-orange-foreground"),
+ },
+ editor: {
+ activeLine: formatCSSVarToRGB("--sm-editor-active-line"),
+ debugLine: formatCSSVarToRGB("--sm-editor-debug-line"),
+ cursor: formatCSSVarToRGB("--sm-editor-cursor"),
+ selectionBackground: formatCSSVarToRGB("--sm-editor-selection-background"),
+ opcode: formatCSSVarToRGB("--sm-editor-opcode"),
+ directive: formatCSSVarToRGB("--sm-editor-directive"),
+ label: formatCSSVarToRGB("--sm-editor-label"),
+ comment: formatCSSVarToRGB("--sm-editor-comment"),
+ register: formatCSSVarToRGB("--sm-editor-register"),
+ number: formatCSSVarToRGB("--sm-editor-number"),
+ string: formatCSSVarToRGB("--sm-editor-string"),
+ operator: formatCSSVarToRGB("--sm-editor-operator"),
+ punctuation: formatCSSVarToRGB("--sm-editor-punctuation"),
+ }
},
},
},
safelist: [
- "text-primary-500"
- /*
{
- pattern: /(bg|text|border)-primary-(50|100|200|300|400|500|600|700|800|900)/,
+ pattern: /(bg|text|border)-primary/,
},
{
- pattern: /(bg|text|border)-primary/,
- }
- */
+ pattern: /(bg|text|border)-secondary-.+/,
+ },
+ {
+ pattern: /(bg|text|border)-editor-.+/,
+ },
]
}
diff --git a/src/tailwind.main.css b/src/tailwind.main.css
index 42fb663..9aca7b5 100644
--- a/src/tailwind.main.css
+++ b/src/tailwind.main.css
@@ -6,33 +6,33 @@
@layer base {
:root {
- --sm-primary-50: #eefbf3;
- --sm-primary-100: #d6f5e1;
- --sm-primary-200: #b1e9c8;
- --sm-primary-300: #7ed7a9;
- --sm-primary-400: #49be84;
- --sm-primary-500: #26a269;
- --sm-primary-600: #188354;
- --sm-primary-700: #136945;
- --sm-primary-800: #125339;
- --sm-primary-900: #0f4530;
- --sm-primary-950: #08261b;
+ --sm-primary-50: 238 251 243;
+ --sm-primary-100: 214 245 225;
+ --sm-primary-200: 177 233 200;
+ --sm-primary-300: 126 215 169;
+ --sm-primary-400: 73 190 132;
+ --sm-primary-500: 38 162 105;
+ --sm-primary-600: 24 131 84;
+ --sm-primary-700: 19 105 69;
+ --sm-primary-800: 18 83 57;
+ --sm-primary-900: 15 69 48;
+ --sm-primary-950: 8 38 27;
--sm-primary: var(--sm-primary-500);
- --sm-gray-50: #fbfbfb;
- --sm-gray-100: #efefef;
- --sm-gray-200: #dcdcdc;
- --sm-gray-300: #bdbdbd;
- --sm-gray-400: #989898;
- --sm-gray-500: #7c7c7c;
- --sm-gray-600: #656565;
- --sm-gray-700: #525252;
- --sm-gray-800: #464646;
- --sm-gray-900: #3d3d3d;
- --sm-gray-950: #292929;
-
- --sm-page-background: #e8e8e8;
+ --sm-gray-50: 251 251 251; /* #fbfbfb */
+ --sm-gray-100: 239 239 239; /* #efefef */
+ --sm-gray-200: 220 220 220; /* #dcdcdc */
+ --sm-gray-300: 189 189 189; /* #bdbdbd */
+ --sm-gray-400: 152 152 152; /* #989898 */
+ --sm-gray-500: 124 124 124; /* #7c7c7c */
+ --sm-gray-600: 101 101 101; /* #656565 */
+ --sm-gray-700: 82 82 82; /* #525252 */
+ --sm-gray-800: 70 70 70; /* #464646 */
+ --sm-gray-900: 61 61 61; /* #3d3d3d */
+ --sm-gray-950: 41 41 41; /* #292929 */
+
+ --sm-page-background: 232 232 232; /* #e8e8e8 */
--sm-main-background: var(--sm-gray-50);
--sm-secondary-background: var(--sm-gray-100);
--sm-main-border: var(--sm-gray-300);
@@ -50,8 +50,27 @@
--sm-inactive-foreground: var(--sm-gray-400);
--sm-inactive-border: var(--sm-gray-400);
- --sm-red-foreground: #b91c1c;
- --sm-green-foreground: #22c55e;
- --sm-yellow-foreground: #eab308;
+ --sm-red-foreground: 185 28 28; /* #b91c1c */
+ --sm-green-foreground: 21 128 61; /* #15803d */
+ --sm-yellow-foreground: 234 179 8; /* #eab308 */
+ --sm-blue-foreground: 37 99 235; /* #2563eb */
+ --sm-orange-foreground: 234 88 12; /* #ea580c */
+
+ /* Editor colors */
+ --sm-editor-active-line: 191 219 254; /* #bfdbfe */
+ --sm-editor-debug-line: 96 165 250; /* #60a5fa */
+ --sm-editor-active-line-gutter: 255 255 255;
+ --sm-editor-cursor: 75 85 99; /* #4b5563 */
+ --sm-editor-selection-background: 191 219 254; /* #bfdbfe */
+
+ --sm-editor-opcode: 28 128 61;
+ --sm-editor-directive: 29 78 216;
+ --sm-editor-label: 168 91 7;
+ --sm-editor-comment: 107 114 128;
+ --sm-editor-register: 185 28 28;
+ --sm-editor-number: 194 65 12;
+ --sm-editor-string: 234 88 12;
+ --sm-editor-operator: 190 24 ;
+ --sm-editor-punctuation: 156 163 175;
}
}
diff --git a/src/themes/dark.css b/src/themes/dark.css
new file mode 100644
index 0000000..043fc3a
--- /dev/null
+++ b/src/themes/dark.css
@@ -0,0 +1,69 @@
+html[data-theme="dark"] {
+ --sm-primary-50: 238 251 243;
+ --sm-primary-100: 214 245 225;
+ --sm-primary-200: 177 233 200;
+ --sm-primary-300: 126 215 169;
+ --sm-primary-400: 73 190 132;
+ --sm-primary-500: 38 162 105;
+ --sm-primary-600: 24 131 84;
+ --sm-primary-700: 19 105 69;
+ --sm-primary-800: 18 83 57;
+ --sm-primary-900: 15 69 48;
+ --sm-primary-950: 8 38 27;
+
+ --sm-primary: var(--sm-primary-500);
+
+ --sm-gray-50: 248 248 248; /* #f8f8f8 */
+ --sm-gray-100: 240 240 240; /* # */
+ --sm-gray-200: 220 220 220; /* #dcdcdc */
+ --sm-gray-300: 240 240 240; /* # */
+ --sm-gray-400: 115 115 115; /* #989898 */
+ --sm-gray-500: 125 126 130; /* #7c7c7c */
+ --sm-gray-600: 101 101 101; /* #656565 */
+ --sm-gray-700: 82 82 82; /* #525252 */
+ --sm-gray-800: 69 74 84; /* #464646 */
+ --sm-gray-900: 32 35 39; /* #3d3d3d */
+ --sm-gray-950: 21 24 30; /* #151814 */
+
+ --sm-page-background: 46 49 56; /* #2e3138 */
+ --sm-main-background: var(--sm-gray-950);
+ --sm-secondary-background: var(--sm-gray-900);
+ --sm-main-border: var(--sm-gray-800);
+
+ --sm-primary-foreground: var(--sm-gray-100);
+ --sm-primary-border: var(--sm-gray-600);
+
+ --sm-secondary-foreground: var(--sm-gray-500);
+ --sm-secondary-border: var(--sm-gray-600);
+
+ --sm-active-foreground: var(--sm-gray-100);
+ --sm-active-background: var(--sm-gray-800);
+ --sm-active-border: var(--sm-gray-700);
+
+ --sm-inactive-foreground: var(--sm-gray-400);
+ --sm-inactive-border: var(--sm-gray-800);
+
+ --sm-red-foreground: 248 113 113; /* #*/
+ --sm-green-foreground: 21 128 61; /* #15803d */
+ --sm-yellow-foreground: 234 179 8; /* #eab308 */
+ --sm-blue-foreground: 96 165 250; /* #60a5fa */
+ /* --sm-orange-foreground: 251 146 60; /* #fb923c */
+ --sm-orange-foreground: 253 186 116; /* #fdba74 */
+
+ /* Editor colors */
+ --sm-editor-active-line: 23 42 81; /* #1f2937 */
+ --sm-editor-debug-line: 37 99 235; /* #2563eb */
+ --sm-editor-active-line-gutter: 255 255 255;
+ --sm-editor-cursor: 209 213 219; /* #d1d5db */
+ --sm-editor-selection-background: 30 58 138; /* #1e3a8a */
+
+ --sm-editor-opcode: 74 222 128;
+ --sm-editor-directive: 96 165 250;
+ --sm-editor-label: 250 204 21;
+ --sm-editor-comment: 107 114 128;
+ --sm-editor-register: 248 113 113;
+ --sm-editor-number: 251 146 60;
+ --sm-editor-string: 234 88 12;
+ --sm-editor-operator: 244 114 182;
+ --sm-editor-punctuation: 75 85 99;
+}
diff --git a/src/themes/light.css b/src/themes/light.css
index a7ce0de..6e40c69 100644
--- a/src/themes/light.css
+++ b/src/themes/light.css
@@ -1,31 +1,31 @@
html[data-theme="light"] {
- --sm-primary-50: #eefbf3;
- --sm-primary-100: #d6f5e1;
- --sm-primary-200: #b1e9c8;
- --sm-primary-300: #7ed7a9;
- --sm-primary-400: #49be84;
- --sm-primary-500: #26a269;
- --sm-primary-600: #188354;
- --sm-primary-700: #136945;
- --sm-primary-800: #125339;
- --sm-primary-900: #0f4530;
- --sm-primary-950: #08261b;
+ --sm-primary-50: 238 251 243;
+ --sm-primary-100: 214 245 225;
+ --sm-primary-200: 177 233 200;
+ --sm-primary-300: 126 215 169;
+ --sm-primary-400: 73 190 132;
+ --sm-primary-500: 38 162 105;
+ --sm-primary-600: 24 131 84;
+ --sm-primary-700: 19 105 69;
+ --sm-primary-800: 18 83 57;
+ --sm-primary-900: 15 69 48;
+ --sm-primary-950: 8 38 27;
--sm-primary: var(--sm-primary-500);
- --sm-gray-50: #fbfbfb;
- --sm-gray-100: #efefef;
- --sm-gray-200: #dcdcdc;
- --sm-gray-300: #bdbdbd;
- --sm-gray-400: #989898;
- --sm-gray-500: #7c7c7c;
- --sm-gray-600: #656565;
- --sm-gray-700: #525252;
- --sm-gray-800: #464646;
- --sm-gray-900: #3d3d3d;
- --sm-gray-950: #292929;
-
- --sm-page-background: #e8e8e8;
+ --sm-gray-50: 251 251 251; /* #fbfbfb */
+ --sm-gray-100: 239 239 239; /* #efefef */
+ --sm-gray-200: 220 220 220; /* #dcdcdc */
+ --sm-gray-300: 189 189 189; /* #bdbdbd */
+ --sm-gray-400: 152 152 152; /* #989898 */
+ --sm-gray-500: 124 124 124; /* #7c7c7c */
+ --sm-gray-600: 101 101 101; /* #656565 */
+ --sm-gray-700: 82 82 82; /* #525252 */
+ --sm-gray-800: 70 70 70; /* #464646 */
+ --sm-gray-900: 61 61 61; /* #3d3d3d */
+ --sm-gray-950: 41 41 41; /* #292929 */
+
+ --sm-page-background: 232 232 232; /* #e8e8e8 */
--sm-main-background: var(--sm-gray-50);
--sm-secondary-background: var(--sm-gray-100);
--sm-main-border: var(--sm-gray-300);
@@ -41,9 +41,28 @@ html[data-theme="light"] {
--sm-active-border: var(--sm-gray-300);
--sm-inactive-foreground: var(--sm-gray-400);
- --sm-inactive-border: var(--sm-gray-400);
+ --sm-inactive-border: var(--sm-gray-200);
+
+ --sm-red-foreground: 185 28 28; /* #b91c1c */
+ --sm-green-foreground: 21 128 61; /* #15803d */
+ --sm-yellow-foreground: 234 179 8; /* #eab308 */
+ --sm-blue-foreground: 96 165 250; /* #60a5fa */
+ --sm-orange-foreground: 234 88 12; /* #ea580c */
+
+ /* Editor colors */
+ --sm-editor-active-line: 191 219 254; /* #bfdbfe */
+ --sm-editor-debug-line: 96 165 250; /* #60a5fa */
+ --sm-editor-active-line-gutter: 255 255 255;
+ --sm-editor-cursor: 75 85 99; /* #4b5563 */
+ --sm-editor-selection-background: 191 219 254; /* #bfdbfe */
- --sm-red-foreground: #b91c1c;
- --sm-green-foreground: #22c55e;
- --sm-yellow-foreground: #eab308;
+ --sm-editor-opcode: 28 128 61;
+ --sm-editor-directive: 29 78 216;
+ --sm-editor-label: 168 91 7;
+ --sm-editor-comment: 107 114 128;
+ --sm-editor-register: 185 28 28;
+ --sm-editor-number: 194 65 12;
+ --sm-editor-string: 234 88 12;
+ --sm-editor-operator: 190 24 93;
+ --sm-editor-punctuation: 75 85 99;
}