diff --git a/src/interface/components/DisclaimerModal.svelte b/src/interface/components/DisclaimerModal.svelte
new file mode 100644
index 00000000..49bd4c87
--- /dev/null
+++ b/src/interface/components/DisclaimerModal.svelte
@@ -0,0 +1,73 @@
+
+
+
{
+ if (e.target === e.currentTarget) onCancel();
+ }}
+ onkeydown={(e) => {
+ if (e.key === 'Escape') onCancel();
+ }}
+ role="button"
+ tabindex="-1"
+ transition:fade={{ duration: 150 }}
+>
+
+
e.stopPropagation()}
+ onkeydown={(e) => e.stopPropagation()}
+ >
+
+ {title}
+
+
+
+ {message}
+
+
+
+
+
+
+
+
+
diff --git a/src/interface/pages/settings.svelte b/src/interface/pages/settings.svelte
index f349d450..3ecdad60 100644
--- a/src/interface/pages/settings.svelte
+++ b/src/interface/pages/settings.svelte
@@ -15,9 +15,12 @@
//import { OpenMinecraftServerPopup } from "@/seqta/utils/Openers/OpenMinecraftServerPopup";
import ColourPicker from "../components/ColourPicker.svelte";
+ import DisclaimerModal from "../components/DisclaimerModal.svelte";
import { settingsPopup } from "../hooks/SettingsPopup";
let devModeSequence = "";
+ let showDisclaimerModal = $state(false);
+ let disclaimerCallbacks = $state<{ onConfirm: () => void, onCancel: () => void } | null>(null);
const handleDevModeToggle = () => {
const handleKeyDown = (event: KeyboardEvent) => {
@@ -63,6 +66,11 @@
let { standalone } = $props<{ standalone?: boolean }>();
let showColourPicker = $state(false);
+ const showDisclaimer = (onConfirm: () => void, onCancel: () => void) => {
+ disclaimerCallbacks = { onConfirm, onCancel };
+ showDisclaimerModal = true;
+ };
+
onMount(async () => {
settingsPopup.addListener(() => {
showColourPicker = false;
@@ -271,7 +279,7 @@
{
title: "Settings",
Content: Settings,
- props: { showColourPicker: openColourPicker },
+ props: { showColourPicker: openColourPicker, showDisclaimer },
},
{ title: "Shortcuts", Content: Shortcuts },
{ title: "Themes", Content: Theme },
@@ -287,3 +295,27 @@
/>
{/if}
+
+{#if showDisclaimerModal && disclaimerCallbacks}
+ {
+ disclaimerCallbacks?.onConfirm();
+ showDisclaimerModal = false;
+ disclaimerCallbacks = null;
+ }}
+ onCancel={() => {
+ disclaimerCallbacks?.onCancel();
+ showDisclaimerModal = false;
+ disclaimerCallbacks = null;
+ }}
+ />
+{/if}
diff --git a/src/interface/pages/settings/general.svelte b/src/interface/pages/settings/general.svelte
index c9ddae18..23936824 100644
--- a/src/interface/pages/settings/general.svelte
+++ b/src/interface/pages/settings/general.svelte
@@ -92,7 +92,10 @@
loadPluginSettings();
})
- const { showColourPicker } = $props<{ showColourPicker: () => void }>();
+ const { showColourPicker, showDisclaimer } = $props<{
+ showColourPicker: () => void;
+ showDisclaimer: (onConfirm: () => void, onCancel: () => void) => void;
+ }>();
{#snippet Setting({ title, description, Component, props }: SettingsList) }
@@ -224,7 +227,20 @@
updatePluginSetting(plugin.pluginId, 'enabled', value)}
+ onChange={async (value) => {
+ if (plugin.pluginId === 'assessments-average' && value === true) {
+ showDisclaimer(
+ async () => {
+ await updatePluginSetting(plugin.pluginId, 'enabled', true);
+ },
+ () => {
+ // Do nothing on cancel
+ }
+ );
+ return;
+ }
+ await updatePluginSetting(plugin.pluginId, 'enabled', value);
+ }}
/>
diff --git a/src/seqta/utils/Openers/OpenPrivacyNotification.ts b/src/seqta/utils/Openers/OpenPrivacyNotification.ts
index aa2d7432..fa573fc9 100644
--- a/src/seqta/utils/Openers/OpenPrivacyNotification.ts
+++ b/src/seqta/utils/Openers/OpenPrivacyNotification.ts
@@ -6,8 +6,8 @@ export function showPrivacyNotification() {
const lastUpdated = "2025-12-19";
if (document.getElementById("whatsnewbk")) return;
- //if (settingsState.privacyStatementShown) return;
- //if (settingsState.privacyStatementLastUpdated && new Date(settingsState.privacyStatementLastUpdated) > new Date(lastUpdated)) return;
+ if (settingsState.privacyStatementShown) return;
+ if (settingsState.privacyStatementLastUpdated && new Date(settingsState.privacyStatementLastUpdated) > new Date(lastUpdated)) return;
const header = stringToHTML(
/* html */