diff --git a/README.md b/README.md
index 2824442..99afd8a 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@
-
+
Visitors (Since 2023/02/01)
One of the best theme for Pengu Loader (League of Legends)
diff --git a/src/index.ts b/src/index.ts
index cec78a6..c2282c5 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -5,6 +5,7 @@
* @link https://github.com/Elaina69
* @Nyan Meow~~~
*/
+import "./src/utils/setTime.ts"
import { log } from './src/utils/themeLog.ts';
log('By %cElaina Da Catto', 'color: #e4c2b3');
@@ -18,7 +19,6 @@ import './src/services/backupAndRestoreDatastore';
// Import modules
import { Cdninit } from './src/theme/Cdninit.ts';
-import { CheckServerAvailability } from './src/services/checkServer.ts';
import { CheckUpdate } from "./src/updates/checkUpdate.ts"
import { createHomePageTab, HomePage } from "./src/theme/homepage.ts";
import { transparentLobby, ApplyUI } from "./src/theme/applyUi.ts";
@@ -53,10 +53,6 @@ class ElainaTheme {
}
main() {
- // Check theme server
- const checkServerAvailability = new CheckServerAvailability()
- checkServerAvailability.main()
-
// Check theme's version and available update
const checkUpdate = new CheckUpdate()
checkUpdate.main()
diff --git a/src/src/assets/styles/components/sidebar-color.css b/src/src/assets/styles/components/sidebar-color.css
new file mode 100644
index 0000000..bf938af
--- /dev/null
+++ b/src/src/assets/styles/components/sidebar-color.css
@@ -0,0 +1,3 @@
+.sidebar-background {
+ background: var(--social-sidebar-bg-color) !important;
+}
\ No newline at end of file
diff --git a/src/src/assets/styles/components/sidebar-transparent.css b/src/src/assets/styles/components/sidebar-transparent.css
new file mode 100644
index 0000000..660801f
--- /dev/null
+++ b/src/src/assets/styles/components/sidebar-transparent.css
@@ -0,0 +1,3 @@
+.sidebar-background {
+ background: transparent !important
+}
\ No newline at end of file
diff --git a/src/src/assets/styles/themes/elaina.css b/src/src/assets/styles/themes/elaina.css
index 241e837..d177046 100644
--- a/src/src/assets/styles/themes/elaina.css
+++ b/src/src/assets/styles/themes/elaina.css
@@ -36,6 +36,10 @@ html {
filter: var(--play-button-filter) !important;
}
+.npe-header-league-logo {
+ filter: var(--play-button-filter) !important;
+}
+
.stats-backdrop {
opacity: 0.3!important;
mix-blend-mode: difference !important;
diff --git a/src/src/assets/styles/themes/rcp-fe-lol-parties.css b/src/src/assets/styles/themes/rcp-fe-lol-parties.css
index f1f78c0..abeedc0 100644
--- a/src/src/assets/styles/themes/rcp-fe-lol-parties.css
+++ b/src/src/assets/styles/themes/rcp-fe-lol-parties.css
@@ -145,4 +145,12 @@
.confirm-button-container {
filter: var(--find-match-button) !important;
+}
+
+.tft-find-match-button-container {
+ filter: var(--find-match-button) !important;
+}
+
+.parties-footer-notifications {
+ top: -120px !important;
}
\ No newline at end of file
diff --git a/src/src/assets/styles/themes/rcp-fe-viewport-sidebar.css b/src/src/assets/styles/themes/rcp-fe-viewport-sidebar.css
index 436159e..a002665 100644
--- a/src/src/assets/styles/themes/rcp-fe-viewport-sidebar.css
+++ b/src/src/assets/styles/themes/rcp-fe-viewport-sidebar.css
@@ -68,7 +68,6 @@ lol-social-roster-member .offline .member-name {
.sidebar-background {
height: 100%;
width: 222px;
- background: var(--social-sidebar-bg-color) !important;
position: absolute;
transition: transform 0.5s ease;
transform: translateX(0px);
diff --git a/src/src/plugins/autoAccept.ts b/src/src/plugins/autoAccept.ts
index 74e98f7..1b89d7a 100644
--- a/src/src/plugins/autoAccept.ts
+++ b/src/src/plugins/autoAccept.ts
@@ -17,26 +17,26 @@ export class AutoAccept {
}
}
- fetch_or_create_champselect_buttons_container(): Element | null {
- if (document.querySelector(".cs-buttons-container")) {
- return document.querySelector(".cs-buttons-container")
+ fetch_or_create_champselect_buttons_container(): any {
+ try {
+ document.querySelector(".cs-buttons-container")?.remove()
+ }
+ catch {}
+
+ const div = document.createElement("div")
+ div.className = "cs-buttons-container"
+
+ let nor: HTMLElement | null = document.querySelector(".v2-footer-notifications.ember-view")
+ let tft: HTMLElement | null = document.querySelector(".parties-footer-notifications.ember-view")
+
+ if (nor) {
+ nor.append(div)
+ return div
+ }
+ else if (tft) {
+ tft?.append(div)
+ return div
}
- else {
- const div = document.createElement("div")
- div.className = "cs-buttons-container"
-
- let nor: HTMLElement | null = document.querySelector(".v2-footer-notifications.ember-view")
- let tft: HTMLElement | null = document.querySelector(".parties-footer-notifications.ember-view")
-
- if (nor) {
- nor.append(div)
- return div
- }
- else {
- tft?.append(div)
- return div
- }
- }
}
acceptMatchmaking = async (): Promise => {
@@ -55,30 +55,39 @@ export class AutoAccept {
}
}
+
+ createButton = async (element: any) => {
+ const newOption = document.createElement("lol-uikit-radio-input-option")
+ const container = this.fetch_or_create_champselect_buttons_container()
+ const Option2 = document.createElement("div")
+
+ newOption.setAttribute("id", "autoAcceptQueueButton")
+ newOption.setAttribute("onclick", "window.autoAcceptQueueButtonSelect()")
+
+ Option2.classList.add("auto-accept-button-text")
+ Option2.innerHTML = await getString("auto_accept")
+
+ if (window.DataStore.get("auto_accept")){
+ newOption.setAttribute("selected", "")
+ }
+
+ if (element && !document.getElementById("autoAcceptQueueButton")) {
+ if (window.DataStore.get("auto_accept_button")) {
+ container?.append(newOption)
+ newOption.append(Option2)
+ }
+ }
+ }
+
main = (auto_accept_button: boolean = true) => {
window.autoAcceptQueueButtonSelect = this.autoAcceptQueueButtonSelect
upl.observer.subscribeToElementCreation(".v2-lobby-root-component.ember-view .v2-footer-notifications.ember-view",async (element: any) => {
- const newOption = document.createElement("lol-uikit-radio-input-option")
- const container = this.fetch_or_create_champselect_buttons_container()
- const Option2 = document.createElement("div")
-
- newOption.setAttribute("id", "autoAcceptQueueButton")
- newOption.setAttribute("onclick", "window.autoAcceptQueueButtonSelect()")
-
- Option2.classList.add("auto-accept-button-text")
- Option2.innerHTML = await getString("auto_accept")
-
- if (window.DataStore.get("auto_accept")){
- newOption.setAttribute("selected", "")
- }
-
- if (element && !document.getElementById("autoAcceptQueueButton")) {
- if (window.DataStore.get("auto_accept_button")) {
- container?.append(newOption)
- newOption.append(Option2)
- }
- }
+ await this.createButton(element)
+ })
+
+ upl.observer.subscribeToElementCreation(".tft-footer-container.ember-view .parties-footer-notifications.ember-view",async (element: any) => {
+ await this.createButton(element)
})
if (auto_accept_button) {
diff --git a/src/src/plugins/customProfile.ts b/src/src/plugins/customProfile.ts
index ec2487f..ef3f3de 100644
--- a/src/src/plugins/customProfile.ts
+++ b/src/src/plugins/customProfile.ts
@@ -146,7 +146,8 @@ export class CustomProfile {
get: () => value,
set: (v) => v,
})
- }catch {}
+ }
+ catch {}
}
}
}
@@ -247,7 +248,7 @@ export class CustomProfile {
}
}
}
- catch{}
+ catch {}
})
upl.observer.subscribeToElementCreation(".collection-totals",(element: any)=>{
@@ -288,7 +289,7 @@ export class CustomProfile {
},3000)
}
}
- catch{}
+ catch {}
})
upl.observer.subscribeToElementCreation(".crystal-wrapper",(element: any)=>{
diff --git a/src/src/plugins/hideFriendlist.ts b/src/src/plugins/hideFriendlist.ts
index 4c0d9b9..d240d4d 100644
--- a/src/src/plugins/hideFriendlist.ts
+++ b/src/src/plugins/hideFriendlist.ts
@@ -14,7 +14,8 @@ export class HideFriendList {
get: () => value,
set: (v) => v,
})
- }catch {}
+ }
+ catch {}
}
}
}
@@ -91,7 +92,8 @@ export class HideFriendList {
if (!hide) {
try {
document.querySelector("#centerViewport")?.remove();
- } catch {}
+ }
+ catch {}
utils.addStyleWithID("centerViewport", `
.parties-game-type-select-wrapper.ember-view {
transform: translateX(0px);
@@ -139,7 +141,8 @@ export class HideFriendList {
else {
try {
document.querySelector("#centerViewport")?.remove();
- } catch {}
+ }
+ catch {}
utils.addStyleWithID("centerViewport", `
.parties-game-type-select-wrapper.ember-view {
transform: translateX(113px);
@@ -227,7 +230,8 @@ export class HideFriendList {
bg[i].remove()
}
}
- } catch {}
+ }
+ catch {}
this.createSidebarBackground()
})
@@ -242,11 +246,14 @@ export class HideFriendList {
button[i].remove()
}
}
- } catch {}
+ }
+ catch {}
- this.createButton()
- this.buttonShowHideFriendlist(window.DataStore.get("HideFriendList"))
- this.showHideFriendslist(window.DataStore.get("HideFriendList"))
+ if (window.DataStore.get("enable-hide-top-navbar-friendlist-button")) {
+ this.createButton()
+ this.buttonShowHideFriendlist(window.DataStore.get("HideFriendList"))
+ this.showHideFriendslist(window.DataStore.get("HideFriendList"))
+ }
})
}
}
\ No newline at end of file
diff --git a/src/src/plugins/inviteAllFriends.ts b/src/src/plugins/inviteAllFriends.ts
index eb14fd2..d2b7896 100644
--- a/src/src/plugins/inviteAllFriends.ts
+++ b/src/src/plugins/inviteAllFriends.ts
@@ -40,7 +40,7 @@ export class InviteAllFriends {
log("Friends list refreshed.")
}
}
- catch{}
+ catch {}
}
addInviteAllButton = async (): Promise => {
diff --git a/src/src/plugins/lootHelper.ts b/src/src/plugins/lootHelper.ts
index 88701f9..890de06 100644
--- a/src/src/plugins/lootHelper.ts
+++ b/src/src/plugins/lootHelper.ts
@@ -148,9 +148,12 @@ function AddContextMenu(title: any, subTitle: any, items: any[] = []) {
}
function OnClickRefreshButton() {
- document.querySelectorAll('.loot-category-information').forEach(elem => {
- elem.remove();
- });
+ try {
+ document.querySelectorAll('.loot-category-information').forEach(elem => {
+ elem.remove();
+ });
+ }
+ catch {}
CreateChapmsInformation()
CreateSkinsInformation()
}
@@ -470,8 +473,7 @@ export class LootHelper {
upl.observer.subscribeToElementCreation((".loot-inventory-grid "), (element: any) => {
log("%cLoot helper loaded", "color: #e4c2b3")
- CreateChapmsInformation()
- CreateSkinsInformation()
+ OnClickRefreshButton()
})
upl.observer.subscribeToElementCreation((".loot-display-category-tabs-container"), (element: any) => {
diff --git a/src/src/services/backupAndRestoreDatastore.ts b/src/src/services/backupAndRestoreDatastore.ts
index df3a466..741db39 100644
--- a/src/src/services/backupAndRestoreDatastore.ts
+++ b/src/src/services/backupAndRestoreDatastore.ts
@@ -6,7 +6,7 @@ import { log, error } from '../utils/themeLog';
export class BackupRestoreData {
async importData(url: string): Promise {
const controller = new AbortController();
- const timeoutId = setTimeout(() => controller.abort(), 2000);
+ const timeoutId = setTimeout(() => controller.abort(), 3000);
try {
const res = await fetch(url, { signal: controller.signal });
@@ -15,10 +15,11 @@ export class BackupRestoreData {
return Data.default
}
else throw new Error();
- } catch {
- let errorMsg = "Can't load default datastore from local"
+ }
+ catch (err: any) {
+ let errorMsg = "Can't load default datastore from local: "
clearTimeout(timeoutId);
- error(errorMsg);
+ error(errorMsg, err);
window.Toast.error(errorMsg);
}
};
@@ -93,6 +94,6 @@ try {
// Backup datastore
backupRestoreData.backup()
}
-catch { error("Can not restore datastore") }
+catch(err:any) { error("Can not restore datastore", err) }
window.restoreDefaultDataStore = restoreDefaultDataStore
\ No newline at end of file
diff --git a/src/src/services/checkServer.ts b/src/src/services/checkServer.ts
deleted file mode 100644
index 29bebc2..0000000
--- a/src/src/services/checkServer.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { log, error } from '../utils/themeLog';
-
-export class CheckServerAvailability {
- main = async () => {
- log('Checking backup server availability');
- const controller = new AbortController();
- const timeoutId = setTimeout(() => controller.abort(), 2000);
-
- try {
- const response = await fetch('https://elainatheme.xyz/numberOfUsers', { signal: controller.signal });
- const { count } = await response.json();
- log('Number of users:', count);
- const { default: serverModule } = await import('https://elainatheme.xyz/index.js');
- }
- catch (err: any) {
- clearTimeout(timeoutId);
- throw err;
- }
- }
-}
\ No newline at end of file
diff --git a/src/src/theme/Cdninit.ts b/src/src/theme/Cdninit.ts
index b28851f..9e08f9c 100644
--- a/src/src/theme/Cdninit.ts
+++ b/src/src/theme/Cdninit.ts
@@ -5,7 +5,7 @@ let initLink: string
export async function cdnImport(url: string, errorMsg: any): Promise {
const controller = new AbortController();
- const timeoutId = setTimeout(() => controller.abort(), 2000);
+ const timeoutId = setTimeout(() => controller.abort(), 3000);
try {
const res = await fetch(url, { signal: controller.signal });
@@ -34,10 +34,4 @@ else {
const { Cdninit } = await cdnImport(initLink, "Failed to load Init data")
- .then( res => { return res ? res : {} })
- .catch( err => {
- error("Failed to destructure init property", err)
- window.restartClient()
- });
-
export { Cdninit }
\ No newline at end of file
diff --git a/src/src/theme/applyUi.ts b/src/src/theme/applyUi.ts
index 6d81e44..b2f18cc 100644
--- a/src/src/theme/applyUi.ts
+++ b/src/src/theme/applyUi.ts
@@ -1,6 +1,6 @@
import * as upl from 'pengu-upl'
import { getThemeName } from "../otherThings"
-import { log, warn } from '../utils/themeLog';
+import { log, warn, error } from '../utils/themeLog';
let filters = (await import(`//plugins/${getThemeName()}/config/filters.js`)).default;
let icdata = (await import(`//plugins/${getThemeName()}/config/icons.js`)).default;
@@ -19,7 +19,8 @@ function freezeProperties(object: Object, properties: any[]) {
get: () => value,
set: (v) => v,
})
- }catch {}
+ }
+ catch {}
}
}
}
@@ -45,7 +46,7 @@ upl.observer.subscribeToElementCreation(".parallax-layer-container",(element: an
class AramOnlyMode {
removeNode(obj: string): void {
try { document.querySelector(obj)?.remove() }
- catch{ log(`Can not remove ${obj}`)}
+ catch (err: any) { error(`Can not remove ${obj}:`, err)}
}
removeOtherGamemode = () => {
@@ -141,6 +142,11 @@ class NewGamesearchQueue {
element.style.cssText = `height: 28px;`
)
upl.observer.subscribeToElementCreation('.parties-game-search-divider', this.DisplayNone)
+ upl.observer.subscribeToElementCreation('.parties-game-search-map', (element: any) =>
+ element.style.cssText = `
+ filter: ${filters["PartiesStatusCard"]};
+ `
+ )
// lol-parties-status-card
upl.observer.subscribeToElementCreation('.parties-status-card-bg-container', this.DisplayNone)
@@ -166,7 +172,6 @@ class NewGamesearchQueue {
margin: -3px 10px 0 0;
filter: ${filters["PartiesStatusCard"]};
`
-
)
// lol-parties-game-invites
@@ -185,23 +190,27 @@ class TransparentSettingsDialogs {
let a = element.querySelector("lol-uikit-dialog-frame").shadowRoot.querySelector("div")
a.style.background = style
freezeProperties(a.style,["background"])
- }catch{}
+ }
+ catch{}
try{
let b = element.querySelector("lol-uikit-dialog-frame > div")
b.style.background = style
freezeProperties(b.style,["background"])
- }catch{}
+ }
+ catch{}
try{
let a: any = document.getElementsByClassName("dialog-frame")
for(let i = 0; i< a.length; i++) {
let b = a[i].shadowRoot.querySelector("div")
b.style.background = style
}
- }catch{}
+ }
+ catch{}
try{
let c = element.querySelector("lol-regalia-identity-customizer-element").shadowRoot.querySelector("lol-regalia-banner-v2-element")
c.remove()
- }catch{}
+ }
+ catch{}
// Settings
try{
@@ -211,7 +220,8 @@ class TransparentSettingsDialogs {
a.style.background = style
freezeProperties(obj.style,["background"])
freezeProperties(a.style,["background"])
- }catch{}
+ }
+ catch{}
})
}
@@ -331,7 +341,7 @@ class CustomIcon {
hoverCard.style.backgroundImage = "var(--Hover-card-backdrop)"
}
}
- catch { warn("Can't change hover card backdrop.") }
+ catch (err: any) { error("Can't change hover card backdrop.", err) }
})
}
diff --git a/src/src/theme/homepage.ts b/src/src/theme/homepage.ts
index 55f9484..dcffd44 100644
--- a/src/src/theme/homepage.ts
+++ b/src/src/theme/homepage.ts
@@ -81,7 +81,7 @@ if (CdnKey === LocalKey) {
const themeVersion = (await cdnImport(`${cdnUrl}/src/update/update.js`, "Can't get theme version")).default.version;
window.DataStore.set("Theme-version", themeVersion);
}
- catch { error("Can't get theme version") }
+ catch (err: any) { error("Can't get theme version", err) }
if (!window.DataStore.get(`Change-CDN-version`)) {
const response = await fetch(`${cdnUrl}/package.json`);
@@ -94,47 +94,47 @@ log(`%cCDN build : %c${window.DataStore.get("Cdn-version")}`, 'color: #e4c2b3',
// Create and set new page as Homepage
export function createHomePageTab(context: any) {
- context.rcp.postInit('rcp-fe-lol-navigation', async (api: any) => {
- //@ts-ignore
- window.__RCP_NAV_API = api;
-
- try {
- const originalCreate = api._apiHome.navigationManager.createSubNavigationFromJSON;
- api._apiHome.navigationManager.createSubNavigationFromJSON = async function (e, t, n) {
- console.dir(n);
-
- n.push({
- id: 'elaina-home',
- displayName: await getString("home"),
- isPlugin: false,
- enabled: true,
- visibile: true,
- priority: 1,
- url: 'https://elainatheme.xyz/blankpage',
- });
-
- return originalCreate.apply(this, [e, t, n]);
- };
- }
- catch {
- error("Failed to create homepage, maybe you're in pbe version")
- }
- });
-
- context.rcp.postInit("rcp-fe-lol-navigation", async (api) => {
- try {
- const navigationManager = api._apiHome.navigationManager;
- api._apiHome.navigationManager = new Proxy(navigationManager, {
- set(target, property, value) {
- target[property] = (property === "firstNavItemId") ? 'elaina-home' : value;
- return true;
- }
- });
- }
- catch {
- error("Failed to create homepage, maybe you're in pbe version")
- }
- });
+ // context.rcp.postInit('rcp-fe-lol-navigation', async (api: any) => {
+ // //@ts-ignore
+ // window.__RCP_NAV_API = api;
+
+ // try {
+ // const originalCreate = api._apiHome.navigationManager.createSubNavigationFromJSON;
+ // api._apiHome.navigationManager.createSubNavigationFromJSON = async function (e, t, n) {
+ // console.dir(n);
+
+ // n.push({
+ // id: 'elaina-home',
+ // displayName: await getString("home"),
+ // isPlugin: false,
+ // enabled: true,
+ // visibile: true,
+ // priority: 1,
+ // url: 'https://elainatheme.xyz/blankpage',
+ // });
+
+ // return originalCreate.apply(this, [e, t, n]);
+ // };
+ // }
+ // catch {
+ // error("Failed to create homepage, maybe you're in pbe version")
+ // }
+ // });
+
+ // context.rcp.postInit("rcp-fe-lol-navigation", async (api) => {
+ // try {
+ // const navigationManager = api._apiHome.navigationManager;
+ // api._apiHome.navigationManager = new Proxy(navigationManager, {
+ // set(target, property, value) {
+ // target[property] = (property === "firstNavItemId") ? 'elaina-home' : value;
+ // return true;
+ // }
+ // });
+ // }
+ // catch {
+ // error("Failed to create homepage, maybe you're in pbe version")
+ // }
+ // });
}
function freezeProperties(object: Object, properties: any[]) {
@@ -147,7 +147,8 @@ function freezeProperties(object: Object, properties: any[]) {
get: () => value,
set: (v) => v,
})
- }catch {}
+ }
+ catch {}
}
}
}
@@ -165,15 +166,17 @@ class ChangeHomePageTabs {
} else {
warn(`Element not found for ${name}`);
}
- } catch (error: any) {
+ }
+ catch (error: any) {
error(`Error hiding ${name} tab:`, error);
}
}
else {
try {
document.querySelector(obj).style.display = "block";
- } catch {
- error(`This client doesn't have ${name} tab`);
+ }
+ catch (err: any) {
+ error(`This client doesn't have ${name} tab`, err);
}
}
};
@@ -655,7 +658,7 @@ class MainController {
window.DataStore.set("NextBg_Count", window.DataStore.get("NextBg_Count") + 1);
wallpaperController.nextWallpaper();
if (window.DataStore.get("NextBg_Count") >= 69 && window.DataStore.get("NSFW-Content")) {
- window.open("https://elainatheme.xyz/elaina_nsfw/easteregg1", "_blank");
+ window.open(`${window.DataStore.get("Elaina-domain-server")}elaina_nsfw/easteregg1`, "_blank");
window.DataStore.set("NextBg_Count", 0);
}
}
@@ -797,7 +800,8 @@ class HideNavbarButton {
button[i].remove()
}
}
- } catch {}
+ }
+ catch {}
this.checkNewContent()
this.createHideButton()
@@ -909,7 +913,7 @@ class HideTopNavbarButton {
}
this.changeButtonIcon(isHidden)
}
- catch { log("Can't find top navigation bar")}
+ catch (err: any) { error("Can't find top navigation bar", err)}
}
addHideButton = () => {
@@ -924,7 +928,8 @@ class HideTopNavbarButton {
button[i].remove()
}
}
- } catch {}
+ }
+ catch {}
this.createHideButton()
window.setTimeout(()=> {
@@ -1119,7 +1124,9 @@ export class HomePage {
utils.mutationObserverAddCallback(addHomePage.pageListenner, ["screen-root"]);
hideNavbarButton.addHideButton()
- hideTopNavbarButton.addHideButton()
+ if (window.DataStore.get("enable-hide-top-navbar-friendlist-button")) {
+ hideTopNavbarButton.addHideButton()
+ }
}
}
diff --git a/src/src/theme/loadCss.ts b/src/src/theme/loadCss.ts
index 6469d93..c3da24c 100644
--- a/src/src/theme/loadCss.ts
+++ b/src/src/theme/loadCss.ts
@@ -85,6 +85,11 @@ class AddCss {
css: "lobby-transparent-filter.css",
altCss: "null.css"
},
+ {
+ key: "sidebar-transparent",
+ css: "sidebar-transparent.css",
+ altCss: "sidebar-color.css"
+ },
],
"iconCss": [
diff --git a/src/src/updates/updateKeyLocal.ts b/src/src/updates/updateKeyLocal.ts
index 2c3b2dc..81c2694 100644
--- a/src/src/updates/updateKeyLocal.ts
+++ b/src/src/updates/updateKeyLocal.ts
@@ -1 +1 @@
-export default 432
\ No newline at end of file
+export default 434
\ No newline at end of file
diff --git a/src/src/utils/setTime.ts b/src/src/utils/setTime.ts
new file mode 100644
index 0000000..c3a21b1
--- /dev/null
+++ b/src/src/utils/setTime.ts
@@ -0,0 +1 @@
+window.DataStore.set("start-time", Date.now())
\ No newline at end of file
diff --git a/src/types.d.ts b/src/types.d.ts
index 8cf20e0..bea6bc5 100644
--- a/src/types.d.ts
+++ b/src/types.d.ts
@@ -1,6 +1,3 @@
-// internal types
-declare module 'https://elainatheme.xyz/index.js';
-
interface Plugin {
init?: (context: any) => any
load?: () => any