diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index 346ba9c25..0a480c74b 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -294,7 +294,12 @@ hooks = [ args=[ "deck_options: aqt.deckoptions.DeckOptionsDialog", ], - doc="Can be used to inject extra options into the config screen", + doc="""Can be used to inject extra options into the config screen. + + See the example add-ons at: + https://github.com/ankitects/anki-addons/tree/main/demos/deckoptions_svelte + https://github.com/ankitects/anki-addons/tree/main/demos/deckoptions_raw_html + """, ), # Filtered deck options ################### diff --git a/ts/deckoptions/Addons.svelte b/ts/deckoptions/Addons.svelte index 216d76c08..040f47892 100644 --- a/ts/deckoptions/Addons.svelte +++ b/ts/deckoptions/Addons.svelte @@ -8,6 +8,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html export let state: DeckOptionsState; let components = state.addonComponents; + const auxData = state.currentAuxData; {#if $components.length} @@ -15,7 +16,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html

Add-ons

{#each $components as addon} - + {/each} {/if} diff --git a/ts/deckoptions/DeckOptionsPage.svelte b/ts/deckoptions/DeckOptionsPage.svelte index 60eaaec79..bacffa186 100644 --- a/ts/deckoptions/DeckOptionsPage.svelte +++ b/ts/deckoptions/DeckOptionsPage.svelte @@ -10,6 +10,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import { registerShortcut } from "lib/shortcuts"; import type { Writable } from "svelte/store"; import HtmlAddon from "./HtmlAddon.svelte"; + import type { DynamicSvelteComponent } from "sveltelib/dynamicComponent"; export let state: DeckOptionsState; let addons = state.addonComponents; @@ -18,6 +19,10 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html return state.currentAuxData; } + export function addSvelteAddon(component: DynamicSvelteComponent): void { + $addons = [...$addons, component]; + } + export function addHtmlAddon(html: string, mounted: () => void): void { $addons = [ ...$addons, diff --git a/ts/deckoptions/index.ts b/ts/deckoptions/index.ts index 40b201792..7af7871f0 100644 --- a/ts/deckoptions/index.ts +++ b/ts/deckoptions/index.ts @@ -5,6 +5,10 @@ import { getDeckOptionsInfo, DeckOptionsState } from "./lib"; import { setupI18n, ModuleName } from "lib/i18n"; import { checkNightMode } from "lib/nightmode"; import DeckOptionsPage from "./DeckOptionsPage.svelte"; +import SpinBox from "./SpinBox.svelte"; +import SpinBoxFloat from "./SpinBoxFloat.svelte"; +import EnumSelector from "./EnumSelector.svelte"; +import CheckBox from "./CheckBox.svelte"; export async function deckOptions( target: HTMLDivElement, @@ -21,3 +25,10 @@ export async function deckOptions( props: { state }, }); } + +export const deckConfigComponents = { + SpinBox, + SpinBoxFloat, + EnumSelector, + CheckBox, +};