mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-05-26 00:55:16 -07:00
309ce6ef8f
- Reorganize Configuration window into Appearance, Behavior, Anki, Input, and Integration sections - Add AnkiConnect-backed deck, note-type, and field pickers in the Anki section - Add click-to-learn keybinding controls - Move known-word and N+1 highlight colors to subtitleStyle.knownWordColor / subtitleStyle.nPlusOneColor; legacy ankiConnect.knownWords.color and ankiConnect.nPlusOne.nPlusOne keys still accepted with deprecation warnings - Add deckNames, modelNames, modelFieldNames, and fieldNamesForDeck methods to AnkiConnectClient - Mark discordPresence.presenceStyle as an enum in the config registry
35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
import type { ConfigSettingsSnapshotValue } from '../types/settings';
|
|
|
|
export function createElement<K extends keyof HTMLElementTagNameMap>(
|
|
tagName: K,
|
|
className?: string,
|
|
): HTMLElementTagNameMap[K] {
|
|
const element = document.createElement(tagName);
|
|
if (className) {
|
|
element.className = className;
|
|
}
|
|
return element;
|
|
}
|
|
|
|
export function addOption(select: HTMLSelectElement, value: string, label = value): void {
|
|
const option = createElement('option') as HTMLOptionElement;
|
|
option.value = value;
|
|
option.textContent = label;
|
|
select.append(option);
|
|
}
|
|
|
|
export function uniqueSorted(values: Iterable<string>): string[] {
|
|
return [...new Set([...values].filter(Boolean))].sort((a, b) => a.localeCompare(b));
|
|
}
|
|
|
|
export function isSecretSnapshotValue(
|
|
value: ConfigSettingsSnapshotValue,
|
|
): value is { configured: boolean } {
|
|
return Boolean(
|
|
value &&
|
|
typeof value === 'object' &&
|
|
'configured' in value &&
|
|
typeof (value as { configured?: unknown }).configured === 'boolean',
|
|
);
|
|
}
|