diff --git a/src/entrypoints/popup/pages/settings/Settings.svelte b/src/entrypoints/popup/pages/settings/Settings.svelte
index e5ce340..282177e 100644
--- a/src/entrypoints/popup/pages/settings/Settings.svelte
+++ b/src/entrypoints/popup/pages/settings/Settings.svelte
@@ -7,6 +7,7 @@
import HostsTable from '@/entrypoints/popup/pages/settings/HostsTable.svelte';
import PerSiteDisables from '@/entrypoints/popup/pages/settings/PerSiteDisables.svelte';
import { isMobile } from '@/entrypoints/popup/state';
+ import { PerDomainSettings } from '@/lib/settings';
/* types */
interface Props {
@@ -16,6 +17,8 @@
/* states */
let { onSettingsCloseRequest }: Props = $props();
let searchQuery = $state('');
+
+ onDestroy(PerDomainSettings.cleanEmpty);
diff --git a/src/entrypoints/popup/pages/site-config/SiteConfig.svelte b/src/entrypoints/popup/pages/site-config/SiteConfig.svelte
index 4d564f1..75a1dbe 100644
--- a/src/entrypoints/popup/pages/site-config/SiteConfig.svelte
+++ b/src/entrypoints/popup/pages/site-config/SiteConfig.svelte
@@ -5,6 +5,7 @@
import PerSiteHostsList from '@/entrypoints/popup/pages/site-config/PerSiteHostsList.svelte';
import { listenTabMessages, sendTabMessageToActiveTab, TabMessageType } from '@/lib/communication';
import { hosts, type Host } from '@/lib/host';
+ import { PerDomainSettings } from '@/lib/settings';
/* types */
interface Props {
@@ -35,7 +36,10 @@
currentDomain = new URL(url).hostname;
});
- onDestroy(cancel);
+ onDestroy(() => {
+ cancel();
+ PerDomainSettings.cleanEmpty();
+ });
diff --git a/src/lib/settings.ts b/src/lib/settings.ts
index f94923b..7e6c103 100644
--- a/src/lib/settings.ts
+++ b/src/lib/settings.ts
@@ -108,4 +108,12 @@ export class PerDomainSettings {
delete val[domain];
return val;
});
+
+ static cleanEmpty = () =>
+ this.storage.update((val) => {
+ for (const [domain, settings] of Object.entries(val)) {
+ if (!settings.allDisabled && settings.disabledHostIds.length === 0) delete val[domain];
+ }
+ return val;
+ });
}