{#snippet Setting({ title, description, Component, props }: SettingsList) }

{title}

{description}

{/snippet}
{#each [ { title: "Connect Mobile App", description: "Link your SEQTA session to DesQTA — the modern desktop and mobile app for SEQTA Learn", id: 0, Component: ConnectMobileApp, props: {} }, { title: "Edit Sidebar Layout", description: "Reorder pages on the sidebar", id: 5, Component: Button, props: { onClick: () => browser.runtime.sendMessage({ type: 'currentTab', info: 'EditSidebar' }), text: "Edit" } }, { title: "Custom Theme Colour", description: "Customise the overall theme colour of SEQTA Learn", id: 4, Component: PickerSwatch, props: { onClick: showColourPicker } }, { title: "Icon Only Sidebar", description: "Show only icons in the sidebar for a compact layout", id: 14, Component: Switch, props: { state: $settingsState.iconOnlySidebar ?? false, onChange: (isOn: boolean) => settingsState.iconOnlySidebar = isOn } }, { title: "Animations", description: "Enable animations on certain pages", id: 6, Component: Switch, props: { state: $settingsState.animations, onChange: (isOn: boolean) => settingsState.animations = isOn } }, { title: "12 Hour Time", description: "Prefer 12 hour time format for SEQTA", id: 9, Component: Switch, props: { state: $settingsState.timeFormat === "12", onChange: (isOn: boolean) => settingsState.timeFormat = isOn ? "12" : "24" } }, { title: "Transparency Effects", description: "Enable transparency effects on certain elements, such as blur (May impact battery life)", id: 1, Component: Switch, props: { state: $settingsState.transparencyEffects, onChange: (isOn: boolean) => settingsState.transparencyEffects = isOn } }, { title: "Default Page", description: "Choose which page loads first when you open SEQTA", id: 10, Component: Select, props: { state: $settingsState.defaultPage ?? "home", onChange: (value: string) => (settingsState.defaultPage = value), options: [ { value: "home", label: "Home" }, { value: "dashboard", label: "Dashboard" }, { value: "timetable", label: "Timetable" }, { value: "welcome", label: "Welcome" }, { value: "messages", label: "Messages" }, { value: "documents", label: "Documents" }, { value: "reports", label: "Reports" }, ], }, }, { title: "News Feed Source", description: "Choose the sources for your news feed", id: 11, Component: Select, props: { state: $settingsState.newsSource, onChange: (value: string) => settingsState.newsSource = value, options: [ { value: "australia", label: "Australia" }, { value: "usa", label: "USA" }, { value: "uk", label: "UK" }, { value: "taiwan", label: "Taiwan" }, { value: "hong_kong", label: "Hong Kong" }, { value: "panama", label: "Panama" }, { value: "canada", label: "Canada" }, { value: "singapore", label: "Singapore" }, { value: "japan", label: "Japan" }, { value: "netherlands", label: "Netherlands" } ] } } ] as option} {@render Setting(option)} {/each}

Adaptive Theme Colour

Change the theme colour based on the current class (e.g. when viewing a course or assessments page)

settingsState.adaptiveThemeColour = isOn} />
{#if $settingsState.adaptiveThemeColour}

Soft Gradient

Use a soft gradient instead of a solid colour when viewing a class

settingsState.adaptiveThemeGradient = isOn} />

Smooth colour transition

Ease between class/subject colours when navigating instead of switching instantly

settingsState.adaptiveThemeColourTransition = isOn} />
{/if}
{#each pluginSettings as plugin}
{#if (plugin as any).disableToggle}

Enable {plugin.name} {#if plugin.beta} Beta {/if}

{plugin.description}

{ if (plugin.pluginId === 'assessments-average' && value === true) { showDisclaimer( async () => { await updatePluginSetting(plugin.pluginId, 'enabled', true); }, () => {}, "Assessment Averages Disclaimer", "This feature calculates a simple average of your assessment grades. It does not take into account:\n• Assessment weightings\n• Different grading scales\n• Other factors used in official reports\n\nThe displayed average may be inaccurate compared to your actual marks found in reports.\n\nDo you want to enable this feature?" ); return; } await updatePluginSetting(plugin.pluginId, 'enabled', value); }} />
{/if} {#if !((plugin as any).disableToggle) || (pluginSettingsValues[plugin.pluginId]?.enabled ?? true)} {#each Object.entries(plugin.settings) as [key, setting]} {#if key !== 'enabled' && !(key === 'useCloudPfp' && !cloudState.isLoggedIn)}

{setting.title || key}

{setting.description || ''}

{#if setting.type === 'boolean'} updatePluginSetting(plugin.pluginId, key, value)} /> {:else if setting.type === 'number'}
updatePluginSetting(plugin.pluginId, key, value)} min={setting.min} max={setting.max} step={setting.step} />
{:else if setting.type === 'string'} updatePluginSetting(plugin.pluginId, key, e.currentTarget.value)} /> {:else if setting.type === 'select'}
{/if}