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);