fix(settings): normalize review bot sentence case text

This commit is contained in:
asyouplz 2026-03-16 01:16:34 +09:00
parent a23361fce1
commit 90e5026386
10 changed files with 109 additions and 107 deletions

View file

@ -32,32 +32,32 @@ export const UI_CONSTANTS = {
// 텍스트 메시지
MESSAGES: {
HEADER: 'Deepgram configuration',
HEADER: 'Fast provider configuration',
DESCRIPTION:
'Configure Deepgram for advanced speech recognition with multiple language support and AI features.',
REGISTRY_WARNING: '⚠️ Model registry not available. Using default configuration.',
API_KEY_LABEL: 'Deepgram API key',
API_KEY_DESC: 'Enter your Deepgram API key for transcription',
'Configure the fast transcription provider with multilingual support and advanced processing features.',
REGISTRY_WARNING: 'Model registry is not available. Using the default configuration.',
API_KEY_LABEL: 'Fast provider API key',
API_KEY_DESC: 'Enter your API key for transcription',
API_KEY_PLACEHOLDER: 'Enter API key...',
API_KEY_SAVED: 'Deepgram API key saved',
API_KEY_REQUIRED: 'Please enter your Deepgram API key first',
MODEL_LABEL: 'Deepgram model',
MODEL_DESC: 'Select the Deepgram model for transcription',
API_KEY_SAVED: 'API key saved.',
API_KEY_REQUIRED: 'Enter your API key first.',
MODEL_LABEL: 'Fast model',
MODEL_DESC: 'Select the model for transcription',
MODEL_PLACEHOLDER: 'Select a model...',
FEATURES_HEADER: 'Features',
ADVANCED_HEADER: 'Advanced settings',
COST_HEADER: 'Cost estimation',
VALIDATION_LABEL: 'Validate configuration',
VALIDATION_DESC: 'Test your Deepgram API key and settings',
VALIDATION_DESC: 'Test your API key and settings',
VALIDATION_BUTTON: 'Validate',
VALIDATING: 'Validating...',
VALIDATION_SUCCESS: '✅ Deepgram configuration is valid',
VALIDATION_ERROR: 'Invalid Deepgram API key or configuration',
FALLBACK_ERROR_TITLE: '⚠️ Deepgram settings error',
VALIDATION_SUCCESS: 'Configuration is valid.',
VALIDATION_ERROR: 'Invalid API key or configuration.',
FALLBACK_ERROR_TITLE: 'Provider settings error',
FALLBACK_ERROR_DESC:
'Unable to load full configuration. Basic settings are available below.',
CRITICAL_ERROR:
'Deepgram settings could not be loaded. Please check the console for errors.',
'Provider settings could not be loaded. Please check the console for errors.',
},
// 스타일

View file

@ -49,7 +49,7 @@ export class SettingsTab extends PluginSettingTab {
containerEl.addClass('speech-to-text-settings');
// Add main title
new Setting(containerEl).setName('Speech Note').setHeading();
new Setting(containerEl).setName('Speech to text').setHeading();
this.debug('Title setting created');
// Add debug info section at the top
@ -153,8 +153,8 @@ export class SettingsTab extends PluginSettingTab {
dropdown
.addOption('auto', 'Automatic (recommended)')
.addOption('whisper', 'OpenAI Whisper')
.addOption('deepgram', 'Deepgram')
.addOption('whisper', 'General transcription')
.addOption('deepgram', 'Fast transcription')
.setValue(this.plugin.settings.provider || 'auto')
.onChange(async (value) => {
this.debug('Provider dropdown changed to:', value);
@ -263,7 +263,7 @@ export class SettingsTab extends PluginSettingTab {
.addOption('performance_optimized', 'Performance-optimized')
.addOption('quality_optimized', 'Quality-optimized')
.addOption('round_robin', 'Round-robin')
.addOption('ab_test', 'A/B tests')
.addOption('ab_test', 'Split testing')
.setValue(
this.plugin.settings.selectionStrategy ||
SelectionStrategy.PERFORMANCE_OPTIMIZED
@ -309,7 +309,7 @@ export class SettingsTab extends PluginSettingTab {
}
private renderWhisperSettings(containerEl: HTMLElement): void {
new Setting(containerEl).setName('Whisper').setHeading();
new Setting(containerEl).setName('General transcription').setHeading();
// Whisper API Key
this.renderWhisperApiKey(containerEl);
@ -317,7 +317,7 @@ export class SettingsTab extends PluginSettingTab {
// API Endpoint
new Setting(containerEl)
.setName('API endpoint')
.setDesc('OpenAI API endpoint (leave the default unless using a custom endpoint)')
.setDesc('API endpoint (leave the default unless using a custom endpoint)')
.addText((text) =>
text
.setPlaceholder('https://api.openai.com/v1')
@ -366,10 +366,10 @@ export class SettingsTab extends PluginSettingTab {
private renderWhisperApiKey(containerEl: HTMLElement): void {
new Setting(containerEl)
.setName('API key for OpenAI')
.setDesc('Enter your API key for OpenAI Whisper transcription')
.setName('General provider API key')
.setDesc('Enter your API key for transcription')
.addText((text) => {
text.setPlaceholder('sk-...')
text.setPlaceholder('Enter sk-...')
.setValue(this.maskApiKey(this.plugin.settings.apiKey || ''))
.onChange(async (value) => {
if (value && !value.includes('*')) {
@ -378,7 +378,7 @@ export class SettingsTab extends PluginSettingTab {
await this.plugin.saveSettings();
text.setValue(this.maskApiKey(value));
new Notice('Saved the API key for OpenAI.');
new Notice('Saved the API key.');
}
});
@ -400,10 +400,10 @@ export class SettingsTab extends PluginSettingTab {
private renderDeepgramApiKey(containerEl: HTMLElement): void {
new Setting(containerEl)
.setName('Deepgram API key')
.setDesc('Enter your deepgram API key for transcription')
.setName('Fast provider API key')
.setDesc('Enter your API key for transcription')
.addText((text) => {
text.setPlaceholder('Enter deepgram API key...')
text.setPlaceholder('Enter your API key...')
.setValue(this.maskApiKey(this.plugin.settings.deepgramApiKey || ''))
.onChange(async (value) => {
if (value && !value.includes('*')) {
@ -411,7 +411,7 @@ export class SettingsTab extends PluginSettingTab {
await this.plugin.saveSettings();
text.setValue(this.maskApiKey(value));
new Notice('Deepgram API key saved.');
new Notice('Saved the API key.');
}
});
@ -438,11 +438,11 @@ export class SettingsTab extends PluginSettingTab {
infoEl.empty();
const descriptions = {
auto: '🤖 intelligent selection between providers based on your configured strategy. Automatically chooses the best provider for each request.',
auto: 'Intelligent selection between providers based on your configured strategy. Automatically chooses the best provider for each request.',
whisper:
'🎯 OpenAI Whisper - high-quality transcription with support for multiple languages. Best for general-purpose transcription.',
'Balanced transcription with broad language support. Best for general-purpose transcription.',
deepgram:
'⚡ Deepgram - fast, accurate transcription with advanced AI features. Best for real-time processing and speaker diarization.',
'Fast transcription with advanced processing features. Best for real-time processing and speaker labeling.',
};
infoEl.createEl('p', { text: descriptions[provider] });
@ -524,11 +524,11 @@ export class SettingsTab extends PluginSettingTab {
const provider = this.plugin.settings.provider || 'auto';
if (provider === 'whisper' || provider === 'auto') {
new Setting(containerEl)
.setName('Whisper model')
.setDesc('Select the Whisper model to use')
.setName('General model')
.setDesc('Select the model to use')
.addDropdown((dropdown) =>
dropdown
.addOption('whisper-1', 'Whisper v1 (default)')
.addOption('whisper-1', 'Default model (v1)')
.setValue(this.plugin.settings.model || 'whisper-1')
.onChange(async (value) => {
this.plugin.settings.model = value;
@ -649,7 +649,7 @@ export class SettingsTab extends PluginSettingTab {
.setDesc('If you find this plugin helpful, consider buying me a coffee ☕')
.addButton((button) =>
button
.setButtonText('Buy me a coffee')
.setButtonText('Buy me a coffee')
.setCta()
.onClick(() => {
window.open('https://buymeacoffee.com/asyouplz', '_blank');
@ -664,9 +664,9 @@ export class SettingsTab extends PluginSettingTab {
private getProviderLabel(provider: 'auto' | 'whisper' | 'deepgram'): string {
switch (provider) {
case 'whisper':
return 'OpenAI Whisper';
return 'General transcription';
case 'deepgram':
return 'Deepgram';
return 'Fast transcription';
case 'auto':
default:
return 'Automatic';

View file

@ -39,8 +39,8 @@ export class SimpleSettingsTab extends PluginSettingTab {
this.debug('Adding options to dropdown...');
dropdown
.addOption('auto', 'Automatic (recommended)')
.addOption('whisper', 'OpenAI Whisper')
.addOption('deepgram', 'Deepgram')
.addOption('whisper', 'General transcription')
.addOption('deepgram', 'Fast transcription')
.setValue(this.plugin.settings.provider || 'auto')
.onChange(async (value) => {
this.debug('Provider changed to:', value);
@ -61,11 +61,11 @@ export class SimpleSettingsTab extends PluginSettingTab {
// Auto 모드일 때는 양쪽 API 키 모두 표시
if (provider === 'auto' || provider === 'whisper') {
new Setting(containerEl)
.setName('API key for OpenAI')
.setDesc('Enter your API key for OpenAI Whisper')
.setName('General provider API key')
.setDesc('Enter your API key for transcription')
.addText((text) =>
text
.setPlaceholder('sk-...')
.setPlaceholder('Enter sk-...')
.setValue(this.plugin.settings.apiKey || '')
.onChange(async (value) => {
this.plugin.settings.apiKey = value;
@ -77,11 +77,11 @@ export class SimpleSettingsTab extends PluginSettingTab {
if (provider === 'auto' || provider === 'deepgram') {
new Setting(containerEl)
.setName('Deepgram API key')
.setDesc('Enter your deepgram API key')
.setName('Fast provider API key')
.setDesc('Enter your API key')
.addText((text) =>
text
.setPlaceholder('Enter deepgram API key...')
.setPlaceholder('Enter your API key...')
.setValue(this.plugin.settings.deepgramApiKey || '')
.onChange(async (value) => {
this.plugin.settings.deepgramApiKey = value;
@ -92,8 +92,8 @@ export class SimpleSettingsTab extends PluginSettingTab {
// Deepgram 모델 선택
if (provider === 'deepgram') {
new Setting(containerEl)
.setName('Deepgram model')
.setDesc('Select the deepgram model to use')
.setName('Fast model')
.setDesc('Select the model to use')
.addDropdown((dropdown) =>
dropdown
.addOption('nova-2', 'Nova 2 (premium)')

View file

@ -70,7 +70,9 @@ export class ApiKeyValidator {
);
if (!hasWhisper) {
new Notice('The API key is valid, but it may not have access to Whisper.');
new Notice(
'The API key is valid, but it may not have access to the whisper model.'
);
}
return true;

View file

@ -37,11 +37,11 @@ export class AudioSettings {
// Whisper 모델 선택
new Setting(containerEl)
.setName('Whisper model')
.setDesc('Choose which Whisper model to use')
.setName('General model')
.setDesc('Choose which model to use')
.addDropdown((dropdown) =>
dropdown
.addOption('whisper-1', 'Whisper-1 default model')
.addOption('whisper-1', 'Default model')
.setValue(this.plugin.settings.model)
.onChange(async (value: string) => {
if (value === 'whisper-1') {
@ -61,8 +61,8 @@ export class AudioSettings {
.addOption('json', 'JSON (structured data)')
.addOption('text', 'Text (plain text)')
.addOption('verbose_json', 'Detailed JSON output')
.addOption('srt', 'Subtitle format (SRT)')
.addOption('vtt', 'WebVTT format (VTT)')
.addOption('srt', 'Subtitle format (.srt)')
.addOption('vtt', 'Caption format (.vtt)')
.setValue(
typeof this.plugin.settings['responseFormat'] === 'string'
? this.plugin.settings['responseFormat']
@ -111,11 +111,11 @@ export class AudioSettings {
// 파일 크기 제한
const fileSizeSetting = new Setting(containerEl)
.setName('Maximum file size')
.setDesc('Maximum upload size in MB');
.setDesc('Maximum upload size in megabytes');
const sizeValue = containerEl.createDiv({ cls: 'filesize-value' });
const currentSize = Math.round(this.plugin.settings.maxFileSize / (1024 * 1024));
sizeValue.setText(`${currentSize} MB`);
sizeValue.setText(`${currentSize} megabytes`);
fileSizeSetting.addSlider((slider) =>
slider
@ -123,7 +123,7 @@ export class AudioSettings {
.setValue(currentSize)
.onChange(async (value) => {
this.plugin.settings.maxFileSize = value * 1024 * 1024;
sizeValue.setText(`${value} MB`);
sizeValue.setText(`${value} megabytes`);
await this.plugin.saveSettings();
})
.setDynamicTooltip()
@ -179,7 +179,7 @@ export class AudioSettings {
const limitList = limitations.createEl('ul');
const limits = [
'Maximum file size: 25 MB',
'Maximum file size: 25 megabytes',
'Maximum audio length: unlimited (large files are split automatically)',
'Concurrent processing: 1 file',
'API request limit: 50 requests per minute',

View file

@ -304,7 +304,7 @@ export class DeepgramSettings {
this.updateUIAfterModelChange();
if (this.selectedModel) {
new Notice(`Selected model: ${this.selectedModel.name}`);
new Notice('Model selected.');
}
}
@ -606,7 +606,7 @@ export class DeepgramSettings {
const primaryList = noteEl.createEl('ul');
[
'Files larger than 50MB may experience timeout errors',
'Files larger than 50 megabytes may experience timeout errors',
'Auto-chunking splits files into manageable pieces',
'Each chunk is processed separately and results are merged',
].forEach((item) => {

View file

@ -168,7 +168,7 @@ export class DeepgramUIBuilder {
const warningEl =
container.querySelector(`.budget-warning`) ||
container.createEl('p', { cls: 'budget-warning' });
warningEl.textContent = `⚠️ Exceeds monthly budget of $${budget}`;
warningEl.textContent = `Exceeds monthly budget of $${budget}`;
warningEl.classList.add(UI_CONSTANTS.CLASSES.WARNING);
}
}

View file

@ -80,9 +80,9 @@ export class ProviderSettings {
.setDesc('Choose a specific provider or use automatic selection')
.addDropdown((dropdown) => {
dropdown
.addOption('auto', '🤖 Automatic (recommended)')
.addOption('whisper', '🎯 OpenAI Whisper')
.addOption('deepgram', '🚀 Deepgram')
.addOption('auto', 'Automatic (recommended)')
.addOption('whisper', 'General transcription')
.addOption('deepgram', 'Fast transcription')
.setValue(this.currentProvider)
.onChange(async (value) => {
if (this.isProviderValue(value)) {
@ -111,18 +111,18 @@ export class ProviderSettings {
this.renderSingleApiKey(
apiKeysContainer,
'whisper',
'API key for OpenAI',
'Enter your API key for OpenAI (starts with sk-)',
'sk-...'
'General provider API key',
'Enter your API key (starts with sk-)',
'Enter sk-...'
);
// Deepgram API Key
this.renderSingleApiKey(
apiKeysContainer,
'deepgram',
'Deepgram API key',
'Enter your deepgram API key',
'your-deepgram-api-key'
'Fast provider API key',
'Enter your API key',
'Enter your API key...'
);
}
@ -219,11 +219,11 @@ export class ProviderSettings {
.setDesc('How should the system choose between providers?')
.addDropdown((dropdown) => {
dropdown
.addOption(SelectionStrategy.COST_OPTIMIZED, '💰 Cost-optimized')
.addOption(SelectionStrategy.PERFORMANCE_OPTIMIZED, 'Performance-optimized')
.addOption(SelectionStrategy.QUALITY_OPTIMIZED, 'Quality-optimized')
.addOption(SelectionStrategy.ROUND_ROBIN, '🔄 Round-robin')
.addOption(SelectionStrategy.AB_TEST, '🧪 A/B tests')
.addOption(SelectionStrategy.COST_OPTIMIZED, 'Cost-optimized')
.addOption(SelectionStrategy.PERFORMANCE_OPTIMIZED, 'Performance-optimized')
.addOption(SelectionStrategy.QUALITY_OPTIMIZED, 'Quality-optimized')
.addOption(SelectionStrategy.ROUND_ROBIN, 'Round-robin')
.addOption(SelectionStrategy.AB_TEST, 'Split testing')
.setValue(
this.plugin.settings.selectionStrategy ||
SelectionStrategy.PERFORMANCE_OPTIMIZED
@ -282,7 +282,7 @@ export class ProviderSettings {
const abTestEl = containerEl.createDiv({ cls: 'sn-ab-test-settings' });
new Setting(abTestEl)
.setName('Enable A/B tests')
.setName('Enable split testing')
.setDesc('Compare providers to find the best one for your use case')
.addToggle((toggle) => {
toggle
@ -320,8 +320,8 @@ export class ProviderSettings {
// 분할 비율 표시
const displayEl = containerEl.createDiv({ cls: 'sn-split-display' });
displayEl.createEl('span', { text: `Whisper: ${currentSplit}%` });
displayEl.createEl('span', { text: `Deepgram: ${100 - currentSplit}%` });
displayEl.createEl('span', { text: `General: ${currentSplit}%` });
displayEl.createEl('span', { text: `Fast: ${100 - currentSplit}%` });
});
}
@ -349,7 +349,7 @@ export class ProviderSettings {
private renderMetrics(containerEl: HTMLElement): void {
const metricsEl = containerEl.createDiv({ cls: 'sn-metrics-container' });
metricsEl.createEl('h4', { text: '📊 Performance metrics' });
metricsEl.createEl('h4', { text: 'Performance metrics' });
// 각 Provider별 메트릭
this.renderProviderMetrics(metricsEl, 'whisper');
@ -407,17 +407,17 @@ export class ProviderSettings {
*/
private renderComparisonChart(containerEl: HTMLElement): void {
const chartEl = containerEl.createDiv({ cls: 'sn-comparison-chart' });
chartEl.createEl('h5', { text: '📈 Provider comparison' });
chartEl.createEl('h5', { text: 'Provider comparison' });
// 간단한 막대 차트 (실제로는 Chart.js 등 사용 권장)
const chartContent = chartEl.createDiv({ cls: 'sn-chart-content' });
const bars = chartContent.createDiv({ cls: 'sn-chart-bars' });
const whisperBar = bars.createDiv({ cls: 'sn-chart-bar sn-chart-bar--whisper' });
whisperBar.createEl('span', { cls: 'sn-bar-label', text: 'Whisper' });
whisperBar.createEl('span', { cls: 'sn-bar-label', text: 'General' });
const deepgramBar = bars.createDiv({ cls: 'sn-chart-bar sn-chart-bar--deepgram' });
deepgramBar.createEl('span', { cls: 'sn-bar-label', text: 'Deepgram' });
deepgramBar.createEl('span', { cls: 'sn-bar-label', text: 'Fast' });
const legend = chartContent.createDiv({ cls: 'sn-chart-legend' });
legend.createEl('span', { text: 'Overall performance score' });
@ -434,10 +434,10 @@ export class ProviderSettings {
if (whisperConnected || deepgramConnected) {
statusEl.addClass('sn-connection-status--connected');
statusEl.setText('✅ connected');
statusEl.setText('Connected');
} else {
statusEl.addClass('sn-connection-status--disconnected');
statusEl.setText('⚠️ no providers configured');
statusEl.setText('No providers configured');
}
}
@ -575,9 +575,9 @@ export class ProviderSettings {
*/
private showProviderInfo(provider: string): void {
const info: Record<string, string> = {
auto: '🤖 System will automatically select the best provider based on performance and availability',
whisper: '🎯 OpenAI Whisper - high accuracy, supports 50+ languages',
deepgram: '🚀 Deepgram - fast real-time transcription with excellent accuracy',
auto: 'The system will automatically select the best provider based on performance and availability.',
whisper: 'Balanced transcription with strong multilingual support.',
deepgram: 'Fast transcription with strong real-time performance.',
};
new Notice(info[provider] || 'Provider selected');
@ -588,11 +588,11 @@ export class ProviderSettings {
*/
private showStrategyInfo(strategy: string): void {
const info: Record<string, string> = {
[SelectionStrategy.COST_OPTIMIZED]: '💰 Will choose the most cost-effective provider',
[SelectionStrategy.PERFORMANCE_OPTIMIZED]: 'Will choose the fastest provider',
[SelectionStrategy.QUALITY_OPTIMIZED]: 'Will choose the most accurate provider',
[SelectionStrategy.ROUND_ROBIN]: '🔄 Will alternate between providers equally',
[SelectionStrategy.AB_TEST]: '🧪 Will split traffic for comparison',
[SelectionStrategy.COST_OPTIMIZED]: 'Will choose the most cost-effective provider.',
[SelectionStrategy.PERFORMANCE_OPTIMIZED]: 'Will choose the fastest provider.',
[SelectionStrategy.QUALITY_OPTIMIZED]: 'Will choose the most accurate provider.',
[SelectionStrategy.ROUND_ROBIN]: 'Will alternate between providers equally.',
[SelectionStrategy.AB_TEST]: 'Will split traffic for comparison.',
};
new Notice(info[strategy] || 'Strategy selected');
@ -603,8 +603,8 @@ export class ProviderSettings {
*/
private getProviderDisplayName(provider: TranscriptionProvider): string {
const names: Record<TranscriptionProvider, string> = {
whisper: 'OpenAI Whisper',
deepgram: 'Deepgram',
whisper: 'General transcription',
deepgram: 'Fast transcription',
};
return names[provider] || provider;
}

View file

@ -150,7 +150,7 @@ export class ShortcutSettings {
if (conflicts.length > 0) {
const conflictEl = containerEl.createDiv({ cls: 'shortcut-conflicts' });
conflictEl.createEl('h4', { text: '⚠️ Shortcut conflicts detected' });
conflictEl.createEl('h4', { text: 'Shortcut conflicts detected' });
const conflictList = conflictEl.createEl('ul');
conflicts.forEach((conflict) => {
@ -485,7 +485,7 @@ class ShortcutModal extends Modal {
this.isRecording = true;
this.recordedKeys.clear();
button.setButtonText('Recording... (Esc to cancel)');
button.setButtonText('Recording... (press escape to cancel)');
button.buttonEl.addClass('is-recording');
// 키 이벤트 리스너

View file

@ -63,7 +63,7 @@ export class AdvancedSettingsPanel {
const headerEl = containerEl.createDiv({ cls: 'advanced-panel-header' });
headerEl.createEl('h4', {
text: '⚙️ advanced configuration',
text: 'Advanced configuration',
cls: 'advanced-title',
});
@ -96,11 +96,11 @@ export class AdvancedSettingsPanel {
.setDesc('How the system selects providers when in auto mode')
.addDropdown((dropdown) => {
dropdown
.addOption(SelectionStrategy.PERFORMANCE_OPTIMIZED, '⚡ performance first')
.addOption(SelectionStrategy.COST_OPTIMIZED, '💰 cost optimized')
.addOption(SelectionStrategy.QUALITY_OPTIMIZED, '✨ quality first')
.addOption(SelectionStrategy.ROUND_ROBIN, '🔄 round robin')
.addOption(SelectionStrategy.AB_TEST, '🧪 a/b testing')
.addOption(SelectionStrategy.PERFORMANCE_OPTIMIZED, 'Performance first')
.addOption(SelectionStrategy.COST_OPTIMIZED, 'Cost-optimized')
.addOption(SelectionStrategy.QUALITY_OPTIMIZED, 'Quality first')
.addOption(SelectionStrategy.ROUND_ROBIN, 'Round-robin')
.addOption(SelectionStrategy.AB_TEST, 'Split testing')
.setValue(
this.plugin.settings.selectionStrategy ||
SelectionStrategy.PERFORMANCE_OPTIMIZED
@ -206,7 +206,7 @@ export class AdvancedSettingsPanel {
// Monthly Budget
new Setting(sectionEl)
.setName('Monthly budget')
.setDesc('Maximum monthly spending in usd (leave empty for unlimited)')
.setDesc('Maximum monthly spending in dollars (leave empty for unlimited)')
.addText((text) => {
text.setPlaceholder('50.00')
.setValue(this.plugin.settings.monthlyBudget?.toString() || '')
@ -298,7 +298,7 @@ export class AdvancedSettingsPanel {
// Post-processing
new Setting(sectionEl)
.setName('Enable post-processing')
.setDesc('Apply nlp corrections to improve accuracy')
.setDesc('Apply text corrections to improve accuracy')
.addToggle((toggle) => {
toggle
.setValue(this.plugin.settings.enablePostProcessing || true)
@ -321,11 +321,11 @@ export class AdvancedSettingsPanel {
* A/B Testing
*/
private renderABTestingSection(containerEl: HTMLElement): void {
const sectionEl = this.createSection(containerEl, 'A/B tests', 'ab-test-section');
const sectionEl = this.createSection(containerEl, 'Split testing', 'ab-test-section');
// Enable A/B Testing
new Setting(sectionEl)
.setName('Enable a/b testing')
.setName('Enable split testing')
.setDesc('Compare providers to find optimal configuration')
.addToggle((toggle) => {
toggle.setValue(this.abTestEnabled).onChange(async (value) => {
@ -399,7 +399,7 @@ export class AdvancedSettingsPanel {
// Test Results Button
new Setting(sectionEl)
.setName('View results')
.setDesc('See current a/b test results')
.setDesc('See current test results')
.addButton((button) => {
button
.setButtonText('View results')
@ -880,7 +880,7 @@ export class AdvancedSettingsPanel {
*/
private showABTestResults(): void {
// TODO: Implement A/B test results modal
new Notice('A/b test results coming soon.');
new Notice('Test results are coming soon.');
}
/**