kempo-ui 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/get-icon/SKILL.md +144 -0
- package/.claude/skills/highlight-code/SKILL.md +62 -0
- package/.claude/skills/new-component/SKILL.md +362 -0
- package/.github/skills/get-icon/SKILL.md +4 -4
- package/.github/skills/highlight-code/SKILL.md +51 -20
- package/.github/skills/new-component/SKILL.md +183 -152
- package/AGENTS.md +2 -2
- package/dist/components/SpeechToText.js +60 -0
- package/dist/components/TextToSpeech.js +56 -0
- package/dist/components/VoiceSelector.js +49 -0
- package/dist/utils/voice.js +1 -0
- package/docs/components/accordion.html +15 -0
- package/docs/components/aside.html +15 -0
- package/docs/components/calendar.html +15 -0
- package/docs/components/card.html +15 -0
- package/docs/components/code-editor.html +15 -0
- package/docs/components/color-picker.html +15 -0
- package/docs/components/combobox.html +15 -0
- package/docs/components/content-slider.html +15 -0
- package/docs/components/context.html +15 -0
- package/docs/components/dialog.html +15 -0
- package/docs/components/dropdown.html +15 -0
- package/docs/components/filter-list.html +15 -0
- package/docs/components/focus-capture.html +15 -0
- package/docs/components/html-editor.html +15 -0
- package/docs/components/hybrid-component.html +15 -0
- package/docs/components/icon.html +15 -0
- package/docs/components/import.html +15 -0
- package/docs/components/light-component.html +15 -0
- package/docs/components/nav-spacer.html +15 -0
- package/docs/components/nav.html +15 -0
- package/docs/components/photo-viewer.html +15 -0
- package/docs/components/progress.html +15 -0
- package/docs/components/resize.html +15 -0
- package/docs/components/shadow-component.html +15 -0
- package/docs/components/show-more.html +15 -0
- package/docs/components/slider.html +15 -0
- package/docs/components/sortable.html +15 -0
- package/docs/components/speech-to-text.html +724 -0
- package/docs/components/spinner.html +15 -0
- package/docs/components/split.html +15 -0
- package/docs/components/table.html +15 -0
- package/docs/components/tableControls.html +15 -0
- package/docs/components/tableCustomFields.html +15 -0
- package/docs/components/tableFetchRecords.html +15 -0
- package/docs/components/tableFieldSortHide.html +15 -0
- package/docs/components/tablePagination.html +15 -0
- package/docs/components/tablePlaceholder.html +15 -0
- package/docs/components/tableRecordEditing.html +15 -0
- package/docs/components/tableRecordFiltering.html +15 -0
- package/docs/components/tableRecordHiding.html +15 -0
- package/docs/components/tableRecordSearching.html +15 -0
- package/docs/components/tableRecordSelection.html +15 -0
- package/docs/components/tableRowControls.html +15 -0
- package/docs/components/tableServerSync.html +15 -0
- package/docs/components/tableSorting.html +15 -0
- package/docs/components/tabs.html +15 -0
- package/docs/components/tags.html +15 -0
- package/docs/components/text-to-speech.html +718 -0
- package/docs/components/theme-select.html +15 -0
- package/docs/components/theme-switcher.html +15 -0
- package/docs/components/time.html +15 -0
- package/docs/components/timestamp.html +15 -0
- package/docs/components/toast.html +15 -0
- package/docs/components/toggle.html +15 -0
- package/docs/components/tree.html +15 -0
- package/docs/components/voice-selector.html +598 -0
- package/docs/icons/mic.svg +1 -0
- package/docs/icons/record_voice_over.svg +1 -0
- package/docs/icons/stop.svg +1 -0
- package/docs/index.html +39 -0
- package/docs/src/components/SpeechToText.js +60 -0
- package/docs/src/components/TextToSpeech.js +56 -0
- package/docs/src/components/VoiceSelector.js +49 -0
- package/docs/src/utils/voice.js +1 -0
- package/docs/utils/context.html +15 -0
- package/docs/utils/cookie.html +15 -0
- package/docs/utils/debounce.html +15 -0
- package/docs/utils/drag.html +15 -0
- package/docs/utils/elevation.html +15 -0
- package/docs/utils/formatTimestamp.html +15 -0
- package/docs/utils/object.html +15 -0
- package/docs/utils/propConverters.html +15 -0
- package/docs/utils/string.html +15 -0
- package/docs/utils/theme.html +15 -0
- package/docs/utils/toTitleCase.html +15 -0
- package/docs/utils/type.html +15 -0
- package/docs/utils/voice.html +536 -0
- package/docs/utils/wait.html +15 -0
- package/docs-src/components/speech-to-text.page.html +251 -0
- package/docs-src/components/text-to-speech.page.html +245 -0
- package/docs-src/components/voice-selector.page.html +125 -0
- package/docs-src/index.page.html +24 -0
- package/docs-src/nav.fragment.html +15 -0
- package/docs-src/utils/voice.page.html +66 -0
- package/icons/mic.svg +1 -0
- package/icons/record_voice_over.svg +1 -0
- package/icons/stop.svg +1 -0
- package/llms.txt +4 -0
- package/package.json +1 -1
- package/src/components/SpeechToText.js +252 -0
- package/src/components/TextToSpeech.js +205 -0
- package/src/components/VoiceSelector.js +271 -0
- package/src/utils/voice.js +103 -0
- package/tests/components/SpeechToText.browser-test.js +530 -0
- package/tests/components/TextToSpeech.browser-test.js +581 -0
- package/tests/components/VoiceSelector.browser-test.js +374 -0
- package/tests/utils/voice.browser-test.js +128 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import{html as t,css as i}from"../lit-all.min.js";import n from"./ShadowComponent.js";import"./Icon.js";export default class e extends n{static properties={language:{type:String,reflect:!0},continuous:{type:Boolean,reflect:!0},interim:{type:Boolean,reflect:!0},minConfidence:{type:Number,reflect:!0,attribute:"min-confidence"},timeout:{type:Number,reflect:!0},disabled:{type:Boolean,reflect:!0},listening:{type:Boolean,reflect:!0}};#t=null;#i="";#n="";#e=!1;#s=null;constructor(){super(),this.language="en-US",this.continuous=!1,this.interim=!1,this.minConfidence=0,this.timeout=0,this.disabled=!1,this.listening=!1}connectedCallback(){super.connectedCallback();const t=window.SpeechRecognition||window.webkitSpeechRecognition;t?(this.#t=new t,this.#t.lang=this.language,this.#t.continuous=this.continuous,this.#t.interimResults=!0,this.#t.onstart=this.handleStart,this.#t.onend=this.handleEnd,this.#t.onresult=this.handleResult,this.#t.onerror=this.handleError):this.#e=!0}disconnectedCallback(){if(super.disconnectedCallback(),this.#o(),this.#t){try{this.#t.stop()}catch(t){}this.#t.onstart=null,this.#t.onend=null,this.#t.onresult=null,this.#t.onerror=null,this.#t=null}}updated(t){super.updated(t),this.#t&&(t.has("language")&&(this.#t.lang=this.language),t.has("continuous")&&(this.#t.continuous=this.continuous))}handleStart=()=>{this.#i="",this.#n="",this.listening=!0,this.#r(),this.dispatchEvent(new CustomEvent("start",{bubbles:!0}))};handleResult=t=>{let i="",n="";for(let e=t.resultIndex;e<t.results.length;e++){const s=t.results[e],o=s[0];("number"==typeof o.confidence?o.confidence:0)<this.minConfidence||(s.isFinal?i+=o.transcript:n+=o.transcript)}i&&(this.#i+=i),(i||n)&&(this.#n=n),(i||this.interim)&&this.dispatchEvent(new CustomEvent("result",{detail:{text:(this.#i+(n||this.#n)).trim(),isFinal:!!i&&!n},bubbles:!0}))};handleEnd=()=>{this.listening=!1,this.#o();const t=(this.#i+this.#n).trim();this.dispatchEvent(new CustomEvent("end",{detail:{text:t},bubbles:!0}))};handleError=t=>{this.listening=!1,this.#o(),this.dispatchEvent(new CustomEvent("error",{detail:{error:t.error,message:t.message},bubbles:!0}))};#r=()=>{this.#o(),this.timeout>0&&(this.#s=setTimeout(()=>this.stop(),1e3*this.timeout))};#o=()=>{this.#s&&(clearTimeout(this.#s),this.#s=null)};handleClick=()=>{this.disabled||(this.listening?this.stop():this.start())};start=()=>{if(!this.disabled&&this.#t&&!this.listening)try{this.#t.start()}catch(t){}};stop=()=>{if(this.#t&&this.listening)try{this.#t.stop()}catch(t){}};toggle=()=>{this.handleClick()};render(){const i=!this.#e,n=i?this.listening?"Stop listening":"Start listening":"Speech recognition not supported in this browser";return t`
|
|
2
|
+
<button
|
|
3
|
+
type="button"
|
|
4
|
+
class="no-btn btn ${this.listening?"listening":""}"
|
|
5
|
+
?disabled=${this.disabled||!i}
|
|
6
|
+
@click=${this.handleClick}
|
|
7
|
+
aria-label=${n}
|
|
8
|
+
title=${n}
|
|
9
|
+
>
|
|
10
|
+
<k-icon name=${this.listening?"stop":"mic"}></k-icon>
|
|
11
|
+
</button>
|
|
12
|
+
`}static styles=i`
|
|
13
|
+
:host {
|
|
14
|
+
--btn_size: 2.5rem;
|
|
15
|
+
--btn_bg: var(--c_bg);
|
|
16
|
+
--btn_bg__listening: var(--c_danger, #d32f2f);
|
|
17
|
+
--btn_tc__listening: white;
|
|
18
|
+
display: inline-block;
|
|
19
|
+
}
|
|
20
|
+
:host([disabled]) {
|
|
21
|
+
opacity: 0.5;
|
|
22
|
+
pointer-events: none;
|
|
23
|
+
}
|
|
24
|
+
.btn {
|
|
25
|
+
display: inline-flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
width: var(--btn_size);
|
|
29
|
+
height: var(--btn_size);
|
|
30
|
+
padding: 0;
|
|
31
|
+
border: 1px solid var(--c_border);
|
|
32
|
+
border-radius: 50%;
|
|
33
|
+
background: var(--btn_bg);
|
|
34
|
+
color: var(--tc);
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
transition: background var(--animation_ms), color var(--animation_ms), border-color var(--animation_ms);
|
|
37
|
+
}
|
|
38
|
+
.btn:hover:not(:disabled) {
|
|
39
|
+
background: var(--c_bg__alt);
|
|
40
|
+
}
|
|
41
|
+
.btn:focus-visible {
|
|
42
|
+
outline: none;
|
|
43
|
+
box-shadow: var(--focus_shadow);
|
|
44
|
+
}
|
|
45
|
+
:host([listening]) .btn,
|
|
46
|
+
:host([listening]) .btn:hover,
|
|
47
|
+
:host([listening]) .btn:focus-visible {
|
|
48
|
+
background: var(--btn_bg__listening);
|
|
49
|
+
color: var(--btn_tc__listening);
|
|
50
|
+
border-color: transparent;
|
|
51
|
+
animation: pulse 1.4s infinite;
|
|
52
|
+
}
|
|
53
|
+
.btn:disabled {
|
|
54
|
+
cursor: not-allowed;
|
|
55
|
+
}
|
|
56
|
+
@keyframes pulse {
|
|
57
|
+
0%, 100% { box-shadow: 0 0 0 0 rgba(211, 47, 47, 0.5); }
|
|
58
|
+
50% { box-shadow: 0 0 0 10px rgba(211, 47, 47, 0); }
|
|
59
|
+
}
|
|
60
|
+
`}customElements.define("k-speech-to-text",e);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import{html as t,css as e}from"../lit-all.min.js";import n from"./ShadowComponent.js";import{getVoice as s}from"../utils/voice.js";import"./Icon.js";export default class i extends n{static properties={text:{type:String,reflect:!0},voice:{type:String,reflect:!0},language:{type:String,reflect:!0},rate:{type:Number,reflect:!0},pitch:{type:Number,reflect:!0},volume:{type:Number,reflect:!0},disabled:{type:Boolean,reflect:!0},speaking:{type:Boolean,reflect:!0}};#t=!1;#e=null;constructor(){super(),this.text="",this.voice="",this.language="",this.rate=1,this.pitch=1,this.volume=1,this.disabled=!1,this.speaking=!1}connectedCallback(){super.connectedCallback(),"undefined"!=typeof window&&window.speechSynthesis&&"function"==typeof window.SpeechSynthesisUtterance||(this.#t=!0)}disconnectedCallback(){super.disconnectedCallback(),this.stop()}get effectiveText(){return this.text?this.text:this.textContent.trim()}resolveVoice=()=>{if(this.#t)return null;const t=this.voice||s()||"";if(!t)return null;const e=window.speechSynthesis.getVoices(),n=t.split(",").map(t=>t.trim()).filter(Boolean);for(const t of n){const n=e.find(e=>e.name===t);if(n)return n}return null};speak=t=>{if(this.disabled||this.#t)return;const e=(void 0!==t?String(t):this.effectiveText).trim();if(!e)return;window.speechSynthesis.cancel();const n=new window.SpeechSynthesisUtterance(e);n.rate=this.rate,n.pitch=this.pitch,n.volume=this.volume,this.language&&(n.lang=this.language);const s=this.resolveVoice();s&&(n.voice=s),n.onstart=this.handleStart,n.onend=this.handleEnd,n.onerror=this.handleError,this.#e=n,window.speechSynthesis.speak(n)};stop=()=>{this.#t||window.speechSynthesis.cancel()};toggle=()=>{this.speaking?this.stop():this.speak()};handleStart=()=>{this.speaking=!0,this.dispatchEvent(new CustomEvent("start",{bubbles:!0}))};handleEnd=()=>{this.speaking=!1,this.#e=null,this.dispatchEvent(new CustomEvent("end",{bubbles:!0}))};handleError=t=>{this.speaking=!1,this.#e=null,this.dispatchEvent(new CustomEvent("error",{detail:{error:t.error||"unknown"},bubbles:!0}))};handleClick=()=>{this.disabled||this.toggle()};render(){const e=!this.#t,n=e?this.speaking?"Stop speaking":"Speak":"Text-to-speech not supported in this browser";return t`
|
|
2
|
+
<button
|
|
3
|
+
type="button"
|
|
4
|
+
class="no-btn btn"
|
|
5
|
+
?disabled=${this.disabled||!e}
|
|
6
|
+
@click=${this.handleClick}
|
|
7
|
+
aria-label=${n}
|
|
8
|
+
title=${n}
|
|
9
|
+
>
|
|
10
|
+
<k-icon name=${this.speaking?"stop":"record_voice_over"}></k-icon>
|
|
11
|
+
</button>
|
|
12
|
+
<slot style="display:none"></slot>
|
|
13
|
+
`}static styles=e`
|
|
14
|
+
:host {
|
|
15
|
+
--btn_size: 2.5rem;
|
|
16
|
+
--btn_bg: var(--c_bg);
|
|
17
|
+
--btn_bg__speaking: var(--c_primary);
|
|
18
|
+
--btn_tc__speaking: white;
|
|
19
|
+
display: inline-block;
|
|
20
|
+
}
|
|
21
|
+
:host([disabled]) {
|
|
22
|
+
opacity: 0.5;
|
|
23
|
+
pointer-events: none;
|
|
24
|
+
}
|
|
25
|
+
.btn {
|
|
26
|
+
display: inline-flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
width: var(--btn_size);
|
|
30
|
+
height: var(--btn_size);
|
|
31
|
+
padding: 0;
|
|
32
|
+
border: 1px solid var(--c_border);
|
|
33
|
+
border-radius: 50%;
|
|
34
|
+
background: var(--btn_bg);
|
|
35
|
+
color: var(--tc);
|
|
36
|
+
cursor: pointer;
|
|
37
|
+
transition: background var(--animation_ms), color var(--animation_ms), border-color var(--animation_ms);
|
|
38
|
+
}
|
|
39
|
+
.btn:hover:not(:disabled) {
|
|
40
|
+
background: var(--c_bg__alt);
|
|
41
|
+
}
|
|
42
|
+
.btn:focus-visible {
|
|
43
|
+
outline: none;
|
|
44
|
+
box-shadow: var(--focus_shadow);
|
|
45
|
+
}
|
|
46
|
+
:host([speaking]) .btn,
|
|
47
|
+
:host([speaking]) .btn:hover,
|
|
48
|
+
:host([speaking]) .btn:focus-visible {
|
|
49
|
+
background: var(--btn_bg__speaking);
|
|
50
|
+
color: var(--btn_tc__speaking);
|
|
51
|
+
border-color: transparent;
|
|
52
|
+
}
|
|
53
|
+
.btn:disabled {
|
|
54
|
+
cursor: not-allowed;
|
|
55
|
+
}
|
|
56
|
+
`}customElements.define("k-text-to-speech",i);
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import{html as e,css as t}from"../lit-all.min.js";import s from"./ShadowComponent.js";import{getVoice as n,setVoice as i,subscribeToVoice as a,subscribeToAvailableVoices as l}from"../utils/voice.js";const o=e=>(e||"").split("-")[0].toLowerCase();let c=null;try{if("undefined"!=typeof Intl&&Intl.DisplayNames){const e="undefined"!=typeof navigator&&navigator.language||"en";c=new Intl.DisplayNames([e],{type:"language"})}}catch(e){}const r=new Map,u=e=>{let t=e;if(c)try{t=c.of(e)||e}catch(e){}const s=(e=>{if(r.has(e))return r.get(e);let t="";try{"undefined"!=typeof Intl&&Intl.DisplayNames&&(t=new Intl.DisplayNames([e],{type:"language"}).of(e)||"")}catch(e){}return t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),r.set(e,t),t})(e);return s&&s.toLowerCase()!==t.toLowerCase()?`${t} (${s})`:t};export default class h extends s{static properties={language:{type:String,reflect:!0},placeholder:{type:String,reflect:!0},disabled:{type:Boolean,reflect:!0},voices:{state:!0},selected:{state:!0},currentLang:{state:!0}};#e=null;#t=null;#s=!1;#n=!1;constructor(){super(),this.language="",this.placeholder="Browser default",this.disabled=!1,this.voices=[],this.selected="",this.currentLang=""}connectedCallback(){super.connectedCallback(),"undefined"!=typeof window&&window.speechSynthesis?(this.#e=l(e=>{this.voices=e,this.#i()}),this.#t=a(e=>{if(this.selected=e||"",e){const t=this.voices.find(t=>t.name===e);t&&t.lang&&(this.currentLang=o(t.lang))}})):this.#s=!0}disconnectedCallback(){super.disconnectedCallback(),this.#e&&this.#e(),this.#t&&this.#t(),this.#e=null,this.#t=null}#i=()=>{if(this.#n||0===this.voices.length)return;this.#n=!0;const e=this.selected?this.voices.find(e=>e.name===this.selected):null;if(e&&e.lang)return void(this.currentLang=o(e.lang));if(this.language)return void(this.currentLang=o(this.language));const t="undefined"==typeof navigator?"en":o(navigator.language||"en")||"en",s=this.availableLanguages;s.includes(t)?this.currentLang=t:s.length>0&&(this.currentLang=s[0])};get availableLanguages(){const e=new Set;for(const t of this.voices)t.lang&&e.add(o(t.lang));return[...e].sort()}get voicesForCurrentLanguage(){return this.currentLang?this.voices.filter(e=>o(e.lang)===this.currentLang):this.voices}handleLanguageChange=e=>{if(this.disabled)return;this.currentLang=e.target.value;this.voicesForCurrentLanguage.some(e=>e.name===this.selected)||i("")};handleVoiceChange=e=>{if(this.disabled)return;const t=e.target.value;i(t),this.dispatchEvent(new CustomEvent("change",{detail:{voice:t,language:this.currentLang},bubbles:!0}))};refresh=()=>{this.#s||(this.voices=window.speechSynthesis.getVoices(),this.#i())};render(){if(this.#s)return e`
|
|
2
|
+
<select disabled aria-label="Voice selector (unsupported)">
|
|
3
|
+
<option>Speech synthesis not supported</option>
|
|
4
|
+
</select>
|
|
5
|
+
`;const t=this.availableLanguages,s=this.voicesForCurrentLanguage;return e`
|
|
6
|
+
<div class="row">
|
|
7
|
+
<div class="col" style="min-width: 10rem; flex: 0 0 auto">
|
|
8
|
+
<select
|
|
9
|
+
class="lang"
|
|
10
|
+
aria-label="Language"
|
|
11
|
+
?disabled=${this.disabled||0===t.length}
|
|
12
|
+
.value=${this.currentLang}
|
|
13
|
+
@change=${this.handleLanguageChange}
|
|
14
|
+
>
|
|
15
|
+
${t.map(t=>e`
|
|
16
|
+
<option value=${t} ?selected=${t===this.currentLang}>${u(t)}</option>
|
|
17
|
+
`)}
|
|
18
|
+
</select>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="col">
|
|
21
|
+
<select
|
|
22
|
+
class="voice"
|
|
23
|
+
aria-label="Voice"
|
|
24
|
+
?disabled=${this.disabled}
|
|
25
|
+
.value=${this.selected}
|
|
26
|
+
@change=${this.handleVoiceChange}
|
|
27
|
+
>
|
|
28
|
+
<option value="">${this.placeholder}</option>
|
|
29
|
+
${s.map(t=>{return e`
|
|
30
|
+
<option
|
|
31
|
+
value=${t.name}
|
|
32
|
+
?selected=${t.name===this.selected}
|
|
33
|
+
>${s=t.name,s.split("(")[0].trim()||s}</option>
|
|
34
|
+
`;var s})}
|
|
35
|
+
</select>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
`}static styles=t`
|
|
39
|
+
:host {
|
|
40
|
+
display: block;
|
|
41
|
+
}
|
|
42
|
+
:host([disabled]) {
|
|
43
|
+
opacity: 0.5;
|
|
44
|
+
pointer-events: none;
|
|
45
|
+
}
|
|
46
|
+
select {
|
|
47
|
+
width: 100%;
|
|
48
|
+
}
|
|
49
|
+
`}customElements.define("k-voice-selector",h);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"./context.js";const t="k-voice",o=e("voice",(()=>{try{return localStorage.getItem(t)||""}catch(e){return""}})());o.subscribe(e=>{try{e?localStorage.setItem(t,e):localStorage.removeItem(t)}catch(e){}}),"undefined"!=typeof window&&window.addEventListener("storage",e=>{e.key===t&&o.set(e.newValue||"")});export const setVoice=e=>o.set(e||"");export const getVoice=()=>o.get();export const subscribeToVoice=e=>o.subscribe(e);export const getAvailableVoices=()=>"undefined"!=typeof window&&window.speechSynthesis?window.speechSynthesis.getVoices():[];export const waitForVoices=(e=2e3)=>{if("undefined"==typeof window||!window.speechSynthesis)return Promise.resolve([]);const t=window.speechSynthesis,o=t.getVoices();return o.length>0?Promise.resolve(o):new Promise(o=>{let s=!1;const i=()=>{s||(s=!0,t.removeEventListener("voiceschanged",i),o(t.getVoices()))};t.addEventListener("voiceschanged",i),setTimeout(()=>{s||(s=!0,t.removeEventListener("voiceschanged",i),o(t.getVoices()))},e)})};export const subscribeToAvailableVoices=e=>{if("undefined"==typeof window||!window.speechSynthesis)return e([]),()=>{};const t=window.speechSynthesis,o=()=>e(t.getVoices());return t.addEventListener("voiceschanged",o),o(),()=>t.removeEventListener("voiceschanged",o)};export default{get:getVoice,set:setVoice,subscribe:subscribeToVoice,getAvailable:getAvailableVoices,waitForVoices:waitForVoices,subscribeAvailable:subscribeToAvailableVoices};
|
|
@@ -120,6 +120,9 @@
|
|
|
120
120
|
<k-filter-item filter-keywords="sortable drag drop sort components"><a
|
|
121
121
|
href="../components/sortable.html"
|
|
122
122
|
>Sortable<br><small>Component</small></a></k-filter-item>
|
|
123
|
+
<k-filter-item filter-keywords="speech to text speechtotext microphone voice recognition transcription components"><a
|
|
124
|
+
href="../components/speech-to-text.html"
|
|
125
|
+
>Speech To Text<br><small>Component</small></a></k-filter-item>
|
|
123
126
|
<k-filter-item filter-keywords="spinner loading components"><a
|
|
124
127
|
href="../components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
|
|
125
128
|
<k-filter-item filter-keywords="split pane components"><a
|
|
@@ -172,6 +175,9 @@
|
|
|
172
175
|
href="../components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
|
|
173
176
|
<k-filter-item filter-keywords="tags tag input components"><a
|
|
174
177
|
href="../components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
|
|
178
|
+
<k-filter-item filter-keywords="text to speech texttospeech tts speak voice synthesis components"><a
|
|
179
|
+
href="../components/text-to-speech.html"
|
|
180
|
+
>Text To Speech<br><small>Component</small></a></k-filter-item>
|
|
175
181
|
<k-filter-item filter-keywords="theme select dropdown dark light components"><a
|
|
176
182
|
href="../components/theme-select.html"
|
|
177
183
|
>Theme Select<br><small>Component</small></a></k-filter-item>
|
|
@@ -192,6 +198,9 @@
|
|
|
192
198
|
>Toggle<br><small>Component</small></a></k-filter-item>
|
|
193
199
|
<k-filter-item filter-keywords="tree treeview components"><a
|
|
194
200
|
href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
|
|
201
|
+
<k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
|
|
202
|
+
href="../components/voice-selector.html"
|
|
203
|
+
>Voice Selector<br><small>Component</small></a></k-filter-item>
|
|
195
204
|
<k-filter-item filter-keywords="shadow component base"><a
|
|
196
205
|
href="../components/shadow-component.html"
|
|
197
206
|
>Shadow Component<br><small>Base Component</small></a></k-filter-item>
|
|
@@ -225,6 +234,8 @@
|
|
|
225
234
|
href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
|
|
226
235
|
<k-filter-item filter-keywords="type utils utility"><a
|
|
227
236
|
href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
|
|
237
|
+
<k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
|
|
238
|
+
href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
|
|
228
239
|
<k-filter-item filter-keywords="wait async utils utility"><a
|
|
229
240
|
href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
|
|
230
241
|
</k-filter-list>
|
|
@@ -297,11 +308,13 @@
|
|
|
297
308
|
<a href="../components/show-more.html">Show More</a>
|
|
298
309
|
<a href="../components/slider.html">Slider</a>
|
|
299
310
|
<a href="../components/sortable.html">Sortable</a>
|
|
311
|
+
<a href="../components/speech-to-text.html">Speech To Text</a>
|
|
300
312
|
<a href="../components/spinner.html">Spinner</a>
|
|
301
313
|
<a href="../components/split.html">Split</a>
|
|
302
314
|
<a href="../components/table.html">Table</a>
|
|
303
315
|
<a href="../components/tabs.html">Tabs</a>
|
|
304
316
|
<a href="../components/tags.html">Tags</a>
|
|
317
|
+
<a href="../components/text-to-speech.html">Text To Speech</a>
|
|
305
318
|
<a href="../components/theme-select.html">Theme Select</a>
|
|
306
319
|
<a href="../components/theme-switcher.html">Theme Switcher</a>
|
|
307
320
|
<a href="../components/time.html">Time</a>
|
|
@@ -309,6 +322,7 @@
|
|
|
309
322
|
<a href="../components/toast.html">Toast</a>
|
|
310
323
|
<a href="../components/toggle.html">Toggle</a>
|
|
311
324
|
<a href="../components/tree.html">Tree</a>
|
|
325
|
+
<a href="../components/voice-selector.html">Voice Selector</a>
|
|
312
326
|
</div>
|
|
313
327
|
|
|
314
328
|
<h5 class="mb0">Base Components</h5>
|
|
@@ -331,6 +345,7 @@
|
|
|
331
345
|
<a href="../utils/string.html">string</a>
|
|
332
346
|
<a href="../utils/theme.html">theme</a>
|
|
333
347
|
<a href="../utils/type.html">type</a>
|
|
348
|
+
<a href="../utils/voice.html">voice</a>
|
|
334
349
|
<a href="../utils/wait.html">wait</a>
|
|
335
350
|
</div>
|
|
336
351
|
</menu>
|
|
@@ -120,6 +120,9 @@
|
|
|
120
120
|
<k-filter-item filter-keywords="sortable drag drop sort components"><a
|
|
121
121
|
href="../components/sortable.html"
|
|
122
122
|
>Sortable<br><small>Component</small></a></k-filter-item>
|
|
123
|
+
<k-filter-item filter-keywords="speech to text speechtotext microphone voice recognition transcription components"><a
|
|
124
|
+
href="../components/speech-to-text.html"
|
|
125
|
+
>Speech To Text<br><small>Component</small></a></k-filter-item>
|
|
123
126
|
<k-filter-item filter-keywords="spinner loading components"><a
|
|
124
127
|
href="../components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
|
|
125
128
|
<k-filter-item filter-keywords="split pane components"><a
|
|
@@ -172,6 +175,9 @@
|
|
|
172
175
|
href="../components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
|
|
173
176
|
<k-filter-item filter-keywords="tags tag input components"><a
|
|
174
177
|
href="../components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
|
|
178
|
+
<k-filter-item filter-keywords="text to speech texttospeech tts speak voice synthesis components"><a
|
|
179
|
+
href="../components/text-to-speech.html"
|
|
180
|
+
>Text To Speech<br><small>Component</small></a></k-filter-item>
|
|
175
181
|
<k-filter-item filter-keywords="theme select dropdown dark light components"><a
|
|
176
182
|
href="../components/theme-select.html"
|
|
177
183
|
>Theme Select<br><small>Component</small></a></k-filter-item>
|
|
@@ -192,6 +198,9 @@
|
|
|
192
198
|
>Toggle<br><small>Component</small></a></k-filter-item>
|
|
193
199
|
<k-filter-item filter-keywords="tree treeview components"><a
|
|
194
200
|
href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
|
|
201
|
+
<k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
|
|
202
|
+
href="../components/voice-selector.html"
|
|
203
|
+
>Voice Selector<br><small>Component</small></a></k-filter-item>
|
|
195
204
|
<k-filter-item filter-keywords="shadow component base"><a
|
|
196
205
|
href="../components/shadow-component.html"
|
|
197
206
|
>Shadow Component<br><small>Base Component</small></a></k-filter-item>
|
|
@@ -225,6 +234,8 @@
|
|
|
225
234
|
href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
|
|
226
235
|
<k-filter-item filter-keywords="type utils utility"><a
|
|
227
236
|
href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
|
|
237
|
+
<k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
|
|
238
|
+
href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
|
|
228
239
|
<k-filter-item filter-keywords="wait async utils utility"><a
|
|
229
240
|
href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
|
|
230
241
|
</k-filter-list>
|
|
@@ -297,11 +308,13 @@
|
|
|
297
308
|
<a href="../components/show-more.html">Show More</a>
|
|
298
309
|
<a href="../components/slider.html">Slider</a>
|
|
299
310
|
<a href="../components/sortable.html">Sortable</a>
|
|
311
|
+
<a href="../components/speech-to-text.html">Speech To Text</a>
|
|
300
312
|
<a href="../components/spinner.html">Spinner</a>
|
|
301
313
|
<a href="../components/split.html">Split</a>
|
|
302
314
|
<a href="../components/table.html">Table</a>
|
|
303
315
|
<a href="../components/tabs.html">Tabs</a>
|
|
304
316
|
<a href="../components/tags.html">Tags</a>
|
|
317
|
+
<a href="../components/text-to-speech.html">Text To Speech</a>
|
|
305
318
|
<a href="../components/theme-select.html">Theme Select</a>
|
|
306
319
|
<a href="../components/theme-switcher.html">Theme Switcher</a>
|
|
307
320
|
<a href="../components/time.html">Time</a>
|
|
@@ -309,6 +322,7 @@
|
|
|
309
322
|
<a href="../components/toast.html">Toast</a>
|
|
310
323
|
<a href="../components/toggle.html">Toggle</a>
|
|
311
324
|
<a href="../components/tree.html">Tree</a>
|
|
325
|
+
<a href="../components/voice-selector.html">Voice Selector</a>
|
|
312
326
|
</div>
|
|
313
327
|
|
|
314
328
|
<h5 class="mb0">Base Components</h5>
|
|
@@ -331,6 +345,7 @@
|
|
|
331
345
|
<a href="../utils/string.html">string</a>
|
|
332
346
|
<a href="../utils/theme.html">theme</a>
|
|
333
347
|
<a href="../utils/type.html">type</a>
|
|
348
|
+
<a href="../utils/voice.html">voice</a>
|
|
334
349
|
<a href="../utils/wait.html">wait</a>
|
|
335
350
|
</div>
|
|
336
351
|
</menu>
|
|
@@ -120,6 +120,9 @@
|
|
|
120
120
|
<k-filter-item filter-keywords="sortable drag drop sort components"><a
|
|
121
121
|
href="../components/sortable.html"
|
|
122
122
|
>Sortable<br><small>Component</small></a></k-filter-item>
|
|
123
|
+
<k-filter-item filter-keywords="speech to text speechtotext microphone voice recognition transcription components"><a
|
|
124
|
+
href="../components/speech-to-text.html"
|
|
125
|
+
>Speech To Text<br><small>Component</small></a></k-filter-item>
|
|
123
126
|
<k-filter-item filter-keywords="spinner loading components"><a
|
|
124
127
|
href="../components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
|
|
125
128
|
<k-filter-item filter-keywords="split pane components"><a
|
|
@@ -172,6 +175,9 @@
|
|
|
172
175
|
href="../components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
|
|
173
176
|
<k-filter-item filter-keywords="tags tag input components"><a
|
|
174
177
|
href="../components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
|
|
178
|
+
<k-filter-item filter-keywords="text to speech texttospeech tts speak voice synthesis components"><a
|
|
179
|
+
href="../components/text-to-speech.html"
|
|
180
|
+
>Text To Speech<br><small>Component</small></a></k-filter-item>
|
|
175
181
|
<k-filter-item filter-keywords="theme select dropdown dark light components"><a
|
|
176
182
|
href="../components/theme-select.html"
|
|
177
183
|
>Theme Select<br><small>Component</small></a></k-filter-item>
|
|
@@ -192,6 +198,9 @@
|
|
|
192
198
|
>Toggle<br><small>Component</small></a></k-filter-item>
|
|
193
199
|
<k-filter-item filter-keywords="tree treeview components"><a
|
|
194
200
|
href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
|
|
201
|
+
<k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
|
|
202
|
+
href="../components/voice-selector.html"
|
|
203
|
+
>Voice Selector<br><small>Component</small></a></k-filter-item>
|
|
195
204
|
<k-filter-item filter-keywords="shadow component base"><a
|
|
196
205
|
href="../components/shadow-component.html"
|
|
197
206
|
>Shadow Component<br><small>Base Component</small></a></k-filter-item>
|
|
@@ -225,6 +234,8 @@
|
|
|
225
234
|
href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
|
|
226
235
|
<k-filter-item filter-keywords="type utils utility"><a
|
|
227
236
|
href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
|
|
237
|
+
<k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
|
|
238
|
+
href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
|
|
228
239
|
<k-filter-item filter-keywords="wait async utils utility"><a
|
|
229
240
|
href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
|
|
230
241
|
</k-filter-list>
|
|
@@ -297,11 +308,13 @@
|
|
|
297
308
|
<a href="../components/show-more.html">Show More</a>
|
|
298
309
|
<a href="../components/slider.html">Slider</a>
|
|
299
310
|
<a href="../components/sortable.html">Sortable</a>
|
|
311
|
+
<a href="../components/speech-to-text.html">Speech To Text</a>
|
|
300
312
|
<a href="../components/spinner.html">Spinner</a>
|
|
301
313
|
<a href="../components/split.html">Split</a>
|
|
302
314
|
<a href="../components/table.html">Table</a>
|
|
303
315
|
<a href="../components/tabs.html">Tabs</a>
|
|
304
316
|
<a href="../components/tags.html">Tags</a>
|
|
317
|
+
<a href="../components/text-to-speech.html">Text To Speech</a>
|
|
305
318
|
<a href="../components/theme-select.html">Theme Select</a>
|
|
306
319
|
<a href="../components/theme-switcher.html">Theme Switcher</a>
|
|
307
320
|
<a href="../components/time.html">Time</a>
|
|
@@ -309,6 +322,7 @@
|
|
|
309
322
|
<a href="../components/toast.html">Toast</a>
|
|
310
323
|
<a href="../components/toggle.html">Toggle</a>
|
|
311
324
|
<a href="../components/tree.html">Tree</a>
|
|
325
|
+
<a href="../components/voice-selector.html">Voice Selector</a>
|
|
312
326
|
</div>
|
|
313
327
|
|
|
314
328
|
<h5 class="mb0">Base Components</h5>
|
|
@@ -331,6 +345,7 @@
|
|
|
331
345
|
<a href="../utils/string.html">string</a>
|
|
332
346
|
<a href="../utils/theme.html">theme</a>
|
|
333
347
|
<a href="../utils/type.html">type</a>
|
|
348
|
+
<a href="../utils/voice.html">voice</a>
|
|
334
349
|
<a href="../utils/wait.html">wait</a>
|
|
335
350
|
</div>
|
|
336
351
|
</menu>
|
|
@@ -120,6 +120,9 @@
|
|
|
120
120
|
<k-filter-item filter-keywords="sortable drag drop sort components"><a
|
|
121
121
|
href="../components/sortable.html"
|
|
122
122
|
>Sortable<br><small>Component</small></a></k-filter-item>
|
|
123
|
+
<k-filter-item filter-keywords="speech to text speechtotext microphone voice recognition transcription components"><a
|
|
124
|
+
href="../components/speech-to-text.html"
|
|
125
|
+
>Speech To Text<br><small>Component</small></a></k-filter-item>
|
|
123
126
|
<k-filter-item filter-keywords="spinner loading components"><a
|
|
124
127
|
href="../components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
|
|
125
128
|
<k-filter-item filter-keywords="split pane components"><a
|
|
@@ -172,6 +175,9 @@
|
|
|
172
175
|
href="../components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
|
|
173
176
|
<k-filter-item filter-keywords="tags tag input components"><a
|
|
174
177
|
href="../components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
|
|
178
|
+
<k-filter-item filter-keywords="text to speech texttospeech tts speak voice synthesis components"><a
|
|
179
|
+
href="../components/text-to-speech.html"
|
|
180
|
+
>Text To Speech<br><small>Component</small></a></k-filter-item>
|
|
175
181
|
<k-filter-item filter-keywords="theme select dropdown dark light components"><a
|
|
176
182
|
href="../components/theme-select.html"
|
|
177
183
|
>Theme Select<br><small>Component</small></a></k-filter-item>
|
|
@@ -192,6 +198,9 @@
|
|
|
192
198
|
>Toggle<br><small>Component</small></a></k-filter-item>
|
|
193
199
|
<k-filter-item filter-keywords="tree treeview components"><a
|
|
194
200
|
href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
|
|
201
|
+
<k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
|
|
202
|
+
href="../components/voice-selector.html"
|
|
203
|
+
>Voice Selector<br><small>Component</small></a></k-filter-item>
|
|
195
204
|
<k-filter-item filter-keywords="shadow component base"><a
|
|
196
205
|
href="../components/shadow-component.html"
|
|
197
206
|
>Shadow Component<br><small>Base Component</small></a></k-filter-item>
|
|
@@ -225,6 +234,8 @@
|
|
|
225
234
|
href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
|
|
226
235
|
<k-filter-item filter-keywords="type utils utility"><a
|
|
227
236
|
href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
|
|
237
|
+
<k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
|
|
238
|
+
href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
|
|
228
239
|
<k-filter-item filter-keywords="wait async utils utility"><a
|
|
229
240
|
href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
|
|
230
241
|
</k-filter-list>
|
|
@@ -297,11 +308,13 @@
|
|
|
297
308
|
<a href="../components/show-more.html">Show More</a>
|
|
298
309
|
<a href="../components/slider.html">Slider</a>
|
|
299
310
|
<a href="../components/sortable.html">Sortable</a>
|
|
311
|
+
<a href="../components/speech-to-text.html">Speech To Text</a>
|
|
300
312
|
<a href="../components/spinner.html">Spinner</a>
|
|
301
313
|
<a href="../components/split.html">Split</a>
|
|
302
314
|
<a href="../components/table.html">Table</a>
|
|
303
315
|
<a href="../components/tabs.html">Tabs</a>
|
|
304
316
|
<a href="../components/tags.html">Tags</a>
|
|
317
|
+
<a href="../components/text-to-speech.html">Text To Speech</a>
|
|
305
318
|
<a href="../components/theme-select.html">Theme Select</a>
|
|
306
319
|
<a href="../components/theme-switcher.html">Theme Switcher</a>
|
|
307
320
|
<a href="../components/time.html">Time</a>
|
|
@@ -309,6 +322,7 @@
|
|
|
309
322
|
<a href="../components/toast.html">Toast</a>
|
|
310
323
|
<a href="../components/toggle.html">Toggle</a>
|
|
311
324
|
<a href="../components/tree.html">Tree</a>
|
|
325
|
+
<a href="../components/voice-selector.html">Voice Selector</a>
|
|
312
326
|
</div>
|
|
313
327
|
|
|
314
328
|
<h5 class="mb0">Base Components</h5>
|
|
@@ -331,6 +345,7 @@
|
|
|
331
345
|
<a href="../utils/string.html">string</a>
|
|
332
346
|
<a href="../utils/theme.html">theme</a>
|
|
333
347
|
<a href="../utils/type.html">type</a>
|
|
348
|
+
<a href="../utils/voice.html">voice</a>
|
|
334
349
|
<a href="../utils/wait.html">wait</a>
|
|
335
350
|
</div>
|
|
336
351
|
</menu>
|
|
@@ -120,6 +120,9 @@
|
|
|
120
120
|
<k-filter-item filter-keywords="sortable drag drop sort components"><a
|
|
121
121
|
href="../components/sortable.html"
|
|
122
122
|
>Sortable<br><small>Component</small></a></k-filter-item>
|
|
123
|
+
<k-filter-item filter-keywords="speech to text speechtotext microphone voice recognition transcription components"><a
|
|
124
|
+
href="../components/speech-to-text.html"
|
|
125
|
+
>Speech To Text<br><small>Component</small></a></k-filter-item>
|
|
123
126
|
<k-filter-item filter-keywords="spinner loading components"><a
|
|
124
127
|
href="../components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
|
|
125
128
|
<k-filter-item filter-keywords="split pane components"><a
|
|
@@ -172,6 +175,9 @@
|
|
|
172
175
|
href="../components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
|
|
173
176
|
<k-filter-item filter-keywords="tags tag input components"><a
|
|
174
177
|
href="../components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
|
|
178
|
+
<k-filter-item filter-keywords="text to speech texttospeech tts speak voice synthesis components"><a
|
|
179
|
+
href="../components/text-to-speech.html"
|
|
180
|
+
>Text To Speech<br><small>Component</small></a></k-filter-item>
|
|
175
181
|
<k-filter-item filter-keywords="theme select dropdown dark light components"><a
|
|
176
182
|
href="../components/theme-select.html"
|
|
177
183
|
>Theme Select<br><small>Component</small></a></k-filter-item>
|
|
@@ -192,6 +198,9 @@
|
|
|
192
198
|
>Toggle<br><small>Component</small></a></k-filter-item>
|
|
193
199
|
<k-filter-item filter-keywords="tree treeview components"><a
|
|
194
200
|
href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
|
|
201
|
+
<k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
|
|
202
|
+
href="../components/voice-selector.html"
|
|
203
|
+
>Voice Selector<br><small>Component</small></a></k-filter-item>
|
|
195
204
|
<k-filter-item filter-keywords="shadow component base"><a
|
|
196
205
|
href="../components/shadow-component.html"
|
|
197
206
|
>Shadow Component<br><small>Base Component</small></a></k-filter-item>
|
|
@@ -225,6 +234,8 @@
|
|
|
225
234
|
href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
|
|
226
235
|
<k-filter-item filter-keywords="type utils utility"><a
|
|
227
236
|
href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
|
|
237
|
+
<k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
|
|
238
|
+
href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
|
|
228
239
|
<k-filter-item filter-keywords="wait async utils utility"><a
|
|
229
240
|
href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
|
|
230
241
|
</k-filter-list>
|
|
@@ -297,11 +308,13 @@
|
|
|
297
308
|
<a href="../components/show-more.html">Show More</a>
|
|
298
309
|
<a href="../components/slider.html">Slider</a>
|
|
299
310
|
<a href="../components/sortable.html">Sortable</a>
|
|
311
|
+
<a href="../components/speech-to-text.html">Speech To Text</a>
|
|
300
312
|
<a href="../components/spinner.html">Spinner</a>
|
|
301
313
|
<a href="../components/split.html">Split</a>
|
|
302
314
|
<a href="../components/table.html">Table</a>
|
|
303
315
|
<a href="../components/tabs.html">Tabs</a>
|
|
304
316
|
<a href="../components/tags.html">Tags</a>
|
|
317
|
+
<a href="../components/text-to-speech.html">Text To Speech</a>
|
|
305
318
|
<a href="../components/theme-select.html">Theme Select</a>
|
|
306
319
|
<a href="../components/theme-switcher.html">Theme Switcher</a>
|
|
307
320
|
<a href="../components/time.html">Time</a>
|
|
@@ -309,6 +322,7 @@
|
|
|
309
322
|
<a href="../components/toast.html">Toast</a>
|
|
310
323
|
<a href="../components/toggle.html">Toggle</a>
|
|
311
324
|
<a href="../components/tree.html">Tree</a>
|
|
325
|
+
<a href="../components/voice-selector.html">Voice Selector</a>
|
|
312
326
|
</div>
|
|
313
327
|
|
|
314
328
|
<h5 class="mb0">Base Components</h5>
|
|
@@ -331,6 +345,7 @@
|
|
|
331
345
|
<a href="../utils/string.html">string</a>
|
|
332
346
|
<a href="../utils/theme.html">theme</a>
|
|
333
347
|
<a href="../utils/type.html">type</a>
|
|
348
|
+
<a href="../utils/voice.html">voice</a>
|
|
334
349
|
<a href="../utils/wait.html">wait</a>
|
|
335
350
|
</div>
|
|
336
351
|
</menu>
|
|
@@ -120,6 +120,9 @@
|
|
|
120
120
|
<k-filter-item filter-keywords="sortable drag drop sort components"><a
|
|
121
121
|
href="../components/sortable.html"
|
|
122
122
|
>Sortable<br><small>Component</small></a></k-filter-item>
|
|
123
|
+
<k-filter-item filter-keywords="speech to text speechtotext microphone voice recognition transcription components"><a
|
|
124
|
+
href="../components/speech-to-text.html"
|
|
125
|
+
>Speech To Text<br><small>Component</small></a></k-filter-item>
|
|
123
126
|
<k-filter-item filter-keywords="spinner loading components"><a
|
|
124
127
|
href="../components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
|
|
125
128
|
<k-filter-item filter-keywords="split pane components"><a
|
|
@@ -172,6 +175,9 @@
|
|
|
172
175
|
href="../components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
|
|
173
176
|
<k-filter-item filter-keywords="tags tag input components"><a
|
|
174
177
|
href="../components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
|
|
178
|
+
<k-filter-item filter-keywords="text to speech texttospeech tts speak voice synthesis components"><a
|
|
179
|
+
href="../components/text-to-speech.html"
|
|
180
|
+
>Text To Speech<br><small>Component</small></a></k-filter-item>
|
|
175
181
|
<k-filter-item filter-keywords="theme select dropdown dark light components"><a
|
|
176
182
|
href="../components/theme-select.html"
|
|
177
183
|
>Theme Select<br><small>Component</small></a></k-filter-item>
|
|
@@ -192,6 +198,9 @@
|
|
|
192
198
|
>Toggle<br><small>Component</small></a></k-filter-item>
|
|
193
199
|
<k-filter-item filter-keywords="tree treeview components"><a
|
|
194
200
|
href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
|
|
201
|
+
<k-filter-item filter-keywords="voice selector dropdown speech synthesis preference components"><a
|
|
202
|
+
href="../components/voice-selector.html"
|
|
203
|
+
>Voice Selector<br><small>Component</small></a></k-filter-item>
|
|
195
204
|
<k-filter-item filter-keywords="shadow component base"><a
|
|
196
205
|
href="../components/shadow-component.html"
|
|
197
206
|
>Shadow Component<br><small>Base Component</small></a></k-filter-item>
|
|
@@ -225,6 +234,8 @@
|
|
|
225
234
|
href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
|
|
226
235
|
<k-filter-item filter-keywords="type utils utility"><a
|
|
227
236
|
href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
|
|
237
|
+
<k-filter-item filter-keywords="voice speech synthesis preference utils utility"><a
|
|
238
|
+
href="../utils/voice.html">voice<br><small>Utility</small></a></k-filter-item>
|
|
228
239
|
<k-filter-item filter-keywords="wait async utils utility"><a
|
|
229
240
|
href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
|
|
230
241
|
</k-filter-list>
|
|
@@ -297,11 +308,13 @@
|
|
|
297
308
|
<a href="../components/show-more.html">Show More</a>
|
|
298
309
|
<a href="../components/slider.html">Slider</a>
|
|
299
310
|
<a href="../components/sortable.html">Sortable</a>
|
|
311
|
+
<a href="../components/speech-to-text.html">Speech To Text</a>
|
|
300
312
|
<a href="../components/spinner.html">Spinner</a>
|
|
301
313
|
<a href="../components/split.html">Split</a>
|
|
302
314
|
<a href="../components/table.html">Table</a>
|
|
303
315
|
<a href="../components/tabs.html">Tabs</a>
|
|
304
316
|
<a href="../components/tags.html">Tags</a>
|
|
317
|
+
<a href="../components/text-to-speech.html">Text To Speech</a>
|
|
305
318
|
<a href="../components/theme-select.html">Theme Select</a>
|
|
306
319
|
<a href="../components/theme-switcher.html">Theme Switcher</a>
|
|
307
320
|
<a href="../components/time.html">Time</a>
|
|
@@ -309,6 +322,7 @@
|
|
|
309
322
|
<a href="../components/toast.html">Toast</a>
|
|
310
323
|
<a href="../components/toggle.html">Toggle</a>
|
|
311
324
|
<a href="../components/tree.html">Tree</a>
|
|
325
|
+
<a href="../components/voice-selector.html">Voice Selector</a>
|
|
312
326
|
</div>
|
|
313
327
|
|
|
314
328
|
<h5 class="mb0">Base Components</h5>
|
|
@@ -331,6 +345,7 @@
|
|
|
331
345
|
<a href="../utils/string.html">string</a>
|
|
332
346
|
<a href="../utils/theme.html">theme</a>
|
|
333
347
|
<a href="../utils/type.html">type</a>
|
|
348
|
+
<a href="../utils/voice.html">voice</a>
|
|
334
349
|
<a href="../utils/wait.html">wait</a>
|
|
335
350
|
</div>
|
|
336
351
|
</menu>
|