diff --git a/README.md b/README.md
index d56baed..d548b66 100644
--- a/README.md
+++ b/README.md
@@ -25,22 +25,22 @@ Eureka is a userscript which can load 3rd-party extensions in any Scratch-based
| Platform | Load extension manually | Convert sideloaded blocks | Load extension from eureka-ify projects | Extended Scratch context | No mixin conflicts |
|---------------------------------|-------------------------|---------------------------|-----------------------------------------|--------------------------|--------------------|
-| Scratch | ✅ | ✅ | ✅ | ✅ | ✅ |
-| Scratch(Spork) | ✅ | ✅ | ✅ | ✅ | ✅ |
-| Codingclip | ✅ | ✅ | ☣️(1) | ✅ | ❓ |
-| Cocrea | ✅ | ✅ | ✅ | ✅ | ❓ |
-| Aerfaying (阿儿法营) | ✅ | ✅ | ✅ | ✅ | ❓ |
-| Co-Create World (共创世界) | ✅ | ✅ | ✅ | ✅ | ❓ |
-| Xiaomawang (小码王) | ✅ | ✅ | ✅ | ✅ | ❓ |
-| CodeLab | ✅ | ✅ | ✅ | ✅ | ❓ |
-| 40code | ✅ | ✅ | ✅ | ✅ | ❓ |
-| TurboWarp | ✅ | ✅ | ✅ | ✅ | ❓ |
-| Xueersi (学而思) | ✅ | ✅ | ✅ | ✅ | ❓ |
-| Creaticode | ✅ | ✅ | ✅ | ✅ | ❓ |
-| Adacraft | ✅ | ✅ | ✅ | ✅ | ❓ |
-| PenguinMod | ✅ | ❓ | ❓ | ❓ | ❓ |
-| ElectraMod | ✅ | ❓ | ❓ | ❓ | ❓ |
-| XPLab | ✅ | ❓ | ❓ | ❓ | ❓ |
+| Scratch | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Scratch(Spork) | ✅ | ✅ | ✅ | ✅ | ✅ |
+| Codingclip | ✅ | ✅ | ☣️(1) | ✅ | ❓ |
+| Cocrea | ✅ | ✅ | ✅ | ✅ | ❓ |
+| Aerfaying (阿儿法营) | ✅ | ✅ | ✅ | ✅ | ❓ |
+| Co-Create World (共创世界) | ✅ | ✅ | ✅ | ✅ | ❓ |
+| Xiaomawang (小码王) | ✅ | ✅ | ✅ | ✅ | ❓ |
+| CodeLab | ✅ | ✅ | ✅ | ✅ | ❓ |
+| 40code | ✅ | ✅ | ✅ | ✅ | ❓ |
+| TurboWarp | ✅ | ✅ | ✅ | ✅ | ❓ |
+| Xueersi (学而思) | ✅ | ✅ | ✅ | ✅ | ❓ |
+| Creaticode | ✅ | ✅ | ✅ | ✅ | ❓ |
+| Adacraft | ✅ | ✅ | ✅ | ✅ | ❓ |
+| PenguinMod | ✅ | ✅ | ❌ | ✅ | ❓ |
+| ElectraMod | ✅ | ✅ | ❌ | ✅ | ❓ |
+| XPLab | ✅ | ✅ | ❌ | ✅ | ❓ |
(1): The initialize of the sideloaded blocks in workspace are broken
diff --git a/src/main/dashboard/app.tsx b/src/main/dashboard/app.tsx
index ae4c0d9..aa896f7 100644
--- a/src/main/dashboard/app.tsx
+++ b/src/main/dashboard/app.tsx
@@ -5,6 +5,7 @@ import { render } from 'solid-js/web';
import { eureka } from '../ctx';
import close from './assets/icon--close.svg';
import globalCss from './style.css';
+import normalizeCss from './normalize.css';
import styles, { stylesheet } from './style.module.css';
import formatMessage from 'format-message';
import { loadedExtensions } from '../middleware/index';
@@ -493,16 +494,28 @@ if (document.readyState === 'loading') {
}
function initialize () {
- const style = document.createElement('style');
- style.id = 'eureka-styles';
- style.innerHTML = `${globalCss}\n${stylesheet}`;
- document.head.append(style);
-
- render(() => (
-
-
-
- ), document.body);
+ const container = document.createElement('div');
+ container.id = 'eureka-dashboard-container';
+ document.body.appendChild(container);
+
+ const shadow = container.attachShadow({ mode: 'open' });
+
+ const globalStyle = document.createElement('style');
+ globalStyle.id = 'eureka-styles';
+ globalStyle.innerHTML = globalCss;
+
+ const normalizeStyle = document.createElement('style');
+ normalizeStyle.id = 'eureka-normalize';
+ normalizeStyle.innerHTML = `${normalizeCss}\n${stylesheet}`;
+
+ const content = document.createElement('div');
+ content.id = 'eureka-dashboard';
+
+ document.head.appendChild(globalStyle);
+ shadow.appendChild(normalizeStyle);
+ shadow.appendChild(content);
+
+ render(() => , content);
}
eureka.openDashboard = (status: Exclude = DashboardStatus.LOADER) => {
diff --git a/src/main/dashboard/normalize.css b/src/main/dashboard/normalize.css
new file mode 100644
index 0000000..195264e
--- /dev/null
+++ b/src/main/dashboard/normalize.css
@@ -0,0 +1,379 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+ ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+ line-height: 1.15;
+ /* 1 */
+ -webkit-text-size-adjust: 100%;
+ /* 2 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers.
+ */
+
+body {
+ margin: 0;
+}
+
+/**
+ * Render the `main` element consistently in IE.
+ */
+
+main {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ box-sizing: content-box;
+ /* 1 */
+ height: 0;
+ /* 1 */
+ overflow: visible;
+ /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+ font-family: monospace, monospace;
+ /* 1 */
+ font-size: 1em;
+ /* 2 */
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+ border-bottom: none;
+ /* 1 */
+ text-decoration: underline;
+ /* 2 */
+ text-decoration: underline dotted;
+ /* 2 */
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+ font-family: monospace, monospace;
+ /* 1 */
+ font-size: 1em;
+ /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10.
+ */
+
+img {
+ border-style: none;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit;
+ /* 1 */
+ font-size: 100%;
+ /* 1 */
+ line-height: 1.15;
+ /* 1 */
+ margin: 0;
+ /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input {
+ /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select {
+ /* 1 */
+ text-transform: none;
+}
+
+/**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ box-sizing: border-box;
+ /* 1 */
+ color: inherit;
+ /* 2 */
+ display: table;
+ /* 1 */
+ max-width: 100%;
+ /* 1 */
+ padding: 0;
+ /* 3 */
+ white-space: normal;
+ /* 1 */
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ vertical-align: baseline;
+}
+
+/**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+[type="checkbox"],
+[type="radio"] {
+ box-sizing: border-box;
+ /* 1 */
+ padding: 0;
+ /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type="search"] {
+ -webkit-appearance: textfield;
+ /* 1 */
+ outline-offset: -2px;
+ /* 2 */
+}
+
+/**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ /* 1 */
+ font: inherit;
+ /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+details {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+}
+
+/* Misc
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10+.
+ */
+
+template {
+ display: none;
+}
+
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+ display: none;
+}
diff --git a/src/main/dashboard/style.css b/src/main/dashboard/style.css
index 9b75389..14efb3e 100644
--- a/src/main/dashboard/style.css
+++ b/src/main/dashboard/style.css
@@ -18,3 +18,12 @@
--eureka-orange: #FF8C1A;
--eureka-orange-dark: #EC7C1A;
}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --eureka-text-primary: hsla(225, 15%, 80%, 1);
+ --eureka-black-transparent: hsla(0, 0%, 100%, 0.15);
+ --eureka-ui-white: hsla(225, 15%, 15%, 1);
+ --eureka-ui-white-dim: hsla(225, 15%, 20%, 0.75);
+ }
+}
diff --git a/src/main/dashboard/style.module.css b/src/main/dashboard/style.module.css
index f357f21..028112b 100644
--- a/src/main/dashboard/style.module.css
+++ b/src/main/dashboard/style.module.css
@@ -188,3 +188,21 @@
.settings .settingsItem {
@apply flex items-center pl-2 py-4 justify-between font-size-sm color-[var(--eureka-text-primary)] p-2 hover:bg-gray-300 rounded transition-all;
}
+
+@media (prefers-color-scheme: dark) {
+ .settingsItem:hover {
+ @apply hover:bg-gray-700;
+ }
+
+ .loaderTab {
+ @apply bg-gray-700;
+ }
+
+ .input, .textarea {
+ @apply bg-gray-800;
+ }
+
+ .switch .false {
+ background-color: #4a4a4a;
+ }
+}