diff --git a/src/css/injected.scss b/src/css/injected.scss
index a6015b9f..314af33b 100644
--- a/src/css/injected.scss
+++ b/src/css/injected.scss
@@ -29,6 +29,12 @@ html {
background-color 200ms ease-in-out,
backdrop-filter 200ms ease-in-out;
}
+#themeCreatorIframe {
+ position: fixed;
+ right: 0;
+ height: 100%;
+ width: 200px;
+}
.connectedNotificationsWrapper > div > button > svg > g {
fill: var(--theme-primary) !important;
}
diff --git a/src/interface/components/ThemeSelector.tsx b/src/interface/components/ThemeSelector.tsx
index 9f711bf6..ecee28d5 100644
--- a/src/interface/components/ThemeSelector.tsx
+++ b/src/interface/components/ThemeSelector.tsx
@@ -1,6 +1,7 @@
import { memo, useEffect, useState } from "react";
import themesList from '../assets/themes';
import { listThemes, disableTheme, downloadTheme, setTheme, deleteTheme } from "../hooks/ThemeManagment";
+import Browser from "webextension-polyfill";
interface Theme {
name: string;
@@ -133,7 +134,8 @@ const ThemeSelector = ({ selectedType, setSelectedType, isEditMode }: ThemeSelec
return (
{(isEditMode ? themes.some(theme => theme.isDownloaded) : themes.length > 0) && (
-
Themes
)}
+
Themes
+ )}
{themes
.filter(theme => !isEditMode || theme.isDownloaded) // Only show downloaded themes in edit mode
@@ -166,6 +168,13 @@ const ThemeSelector = ({ selectedType, setSelectedType, isEditMode }: ThemeSelec
))}
+
+
);
diff --git a/src/seqta/ui/ThemeCreator.ts b/src/seqta/ui/ThemeCreator.ts
new file mode 100644
index 00000000..dca39128
--- /dev/null
+++ b/src/seqta/ui/ThemeCreator.ts
@@ -0,0 +1,16 @@
+import browser from "webextension-polyfill";
+import popup from '../../interface/index.html?url'
+
+/**
+ * Open the Theme Creator sidebar, it is an embedded page loaded similar to the extension popup
+ */
+export function OpenThemeCreator() {
+ const container = document.querySelector('#container')
+ const themeCreatorIframe: HTMLIFrameElement = document.createElement('iframe')
+ themeCreatorIframe.src = `${browser.runtime.getURL(popup)}#themeCreator`
+ themeCreatorIframe.id = 'themeCreatorIframe'
+ themeCreatorIframe.setAttribute('allowTransparency', 'true')
+ themeCreatorIframe.setAttribute('excludeDarkCheck', 'true')
+ themeCreatorIframe.style.border = 'none'
+ container!.appendChild(themeCreatorIframe)
+}
\ No newline at end of file
diff --git a/src/seqta/utils/listeners/MessageListener.ts b/src/seqta/utils/listeners/MessageListener.ts
index 65938afe..928308e7 100644
--- a/src/seqta/utils/listeners/MessageListener.ts
+++ b/src/seqta/utils/listeners/MessageListener.ts
@@ -2,6 +2,7 @@ import browser from 'webextension-polyfill'
import { MenuOptionsOpen, OpenMenuOptions, OpenWhatsNewPopup, closeSettings } from '../../../SEQTA';
import { deleteTheme, disableTheme, downloadTheme, listThemes, setTheme } from '../../ui/Themes';
+import { OpenThemeCreator } from '../../ui/ThemeCreator';
export class MessageHandler {
constructor() {
@@ -45,6 +46,9 @@ export class MessageHandler {
case 'OpenChangelog':
OpenWhatsNewPopup();
break;
+ case 'OpenThemeCreator':
+ OpenThemeCreator();
+ break;
default:
console.log('Unknown request info:', request.info);