@corti/dictation-web 0.1.11 → 0.1.12
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/dist/bundle.js +1 -2
- package/dist/components/settings-menu.js +87 -87
- package/dist/components/settings-menu.js.map +1 -1
- package/dist/constants.js +0 -1
- package/dist/constants.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/bundle.js
CHANGED
|
@@ -1007,8 +1007,7 @@ var DEFAULT_DICTATION_CONFIG = {
|
|
|
1007
1007
|
primaryLanguage: "en",
|
|
1008
1008
|
interimResults: true,
|
|
1009
1009
|
spokenPunctuation: true,
|
|
1010
|
-
automaticPunctuation: true
|
|
1011
|
-
model: "others"
|
|
1010
|
+
automaticPunctuation: true
|
|
1012
1011
|
};
|
|
1013
1012
|
|
|
1014
1013
|
// dist/styles/callout.js
|
|
@@ -47,103 +47,103 @@ let SettingsMenu = class SettingsMenu extends LitElement {
|
|
|
47
47
|
}));
|
|
48
48
|
}
|
|
49
49
|
render() {
|
|
50
|
-
return html `
|
|
51
|
-
<div class="mic-selector">
|
|
52
|
-
<button id="settings-popover-button" popovertarget="settings-popover">
|
|
53
|
-
<icon-settings></icon-settings>
|
|
54
|
-
</button>
|
|
55
|
-
<div id="settings-popover" popover>
|
|
56
|
-
<div class="settings-wrapper">
|
|
50
|
+
return html `
|
|
51
|
+
<div class="mic-selector">
|
|
52
|
+
<button id="settings-popover-button" popovertarget="settings-popover">
|
|
53
|
+
<icon-settings></icon-settings>
|
|
54
|
+
</button>
|
|
55
|
+
<div id="settings-popover" popover>
|
|
56
|
+
<div class="settings-wrapper">
|
|
57
57
|
${this.settingsDisabled
|
|
58
|
-
? html `
|
|
59
|
-
<div class="callout warn">
|
|
60
|
-
Recording is in progress. Stop recording to change settings.
|
|
61
|
-
</div>
|
|
58
|
+
? html `
|
|
59
|
+
<div class="callout warn">
|
|
60
|
+
Recording is in progress. Stop recording to change settings.
|
|
61
|
+
</div>
|
|
62
62
|
`
|
|
63
|
-
: ''}
|
|
64
|
-
<div class="form-group">
|
|
65
|
-
<label id="device-select-label" for="device-select">
|
|
66
|
-
Recording Device
|
|
67
|
-
</label>
|
|
68
|
-
<select
|
|
69
|
-
id="device-select"
|
|
70
|
-
aria-labelledby="device-select-label"
|
|
63
|
+
: ''}
|
|
64
|
+
<div class="form-group">
|
|
65
|
+
<label id="device-select-label" for="device-select">
|
|
66
|
+
Recording Device
|
|
67
|
+
</label>
|
|
68
|
+
<select
|
|
69
|
+
id="device-select"
|
|
70
|
+
aria-labelledby="device-select-label"
|
|
71
71
|
@change=${(e) => {
|
|
72
72
|
this._selectDevice(e.target.value);
|
|
73
|
-
}}
|
|
74
|
-
?disabled=${this.settingsDisabled}
|
|
75
|
-
>
|
|
76
|
-
${this._devices.map(device => html `
|
|
77
|
-
<option
|
|
78
|
-
value=${device.deviceId}
|
|
79
|
-
?selected=${this.selectedDevice === device}
|
|
80
|
-
>
|
|
81
|
-
${device.label || 'Unknown Device'}
|
|
82
|
-
</option>
|
|
83
|
-
`)}
|
|
84
|
-
</select>
|
|
85
|
-
</div>
|
|
86
|
-
<div class="form-group">
|
|
87
|
-
<label id="language-select-label" for="language-select">
|
|
88
|
-
Dictation Language
|
|
89
|
-
</label>
|
|
90
|
-
<select
|
|
91
|
-
id="language-select"
|
|
92
|
-
aria-labelledby="language-select-label"
|
|
73
|
+
}}
|
|
74
|
+
?disabled=${this.settingsDisabled}
|
|
75
|
+
>
|
|
76
|
+
${this._devices.map(device => html `
|
|
77
|
+
<option
|
|
78
|
+
value=${device.deviceId}
|
|
79
|
+
?selected=${this.selectedDevice === device}
|
|
80
|
+
>
|
|
81
|
+
${device.label || 'Unknown Device'}
|
|
82
|
+
</option>
|
|
83
|
+
`)}
|
|
84
|
+
</select>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="form-group">
|
|
87
|
+
<label id="language-select-label" for="language-select">
|
|
88
|
+
Dictation Language
|
|
89
|
+
</label>
|
|
90
|
+
<select
|
|
91
|
+
id="language-select"
|
|
92
|
+
aria-labelledby="language-select-label"
|
|
93
93
|
@change=${(e) => {
|
|
94
94
|
this._selectDevice(e.target.value);
|
|
95
|
-
}}
|
|
96
|
-
?disabled=${this.settingsDisabled}
|
|
97
|
-
>
|
|
98
|
-
${LANGUAGES_SUPPORTED.map(language => html `
|
|
99
|
-
<option
|
|
100
|
-
value=${language}
|
|
101
|
-
?selected=${this.selectedLanguage === language}
|
|
102
|
-
>
|
|
103
|
-
${getLanguageName(language)}
|
|
104
|
-
</option>
|
|
105
|
-
`)}
|
|
106
|
-
</select>
|
|
107
|
-
</div>
|
|
108
|
-
</div>
|
|
109
|
-
</div>
|
|
110
|
-
</div>
|
|
95
|
+
}}
|
|
96
|
+
?disabled=${this.settingsDisabled}
|
|
97
|
+
>
|
|
98
|
+
${LANGUAGES_SUPPORTED.map(language => html `
|
|
99
|
+
<option
|
|
100
|
+
value=${language}
|
|
101
|
+
?selected=${this.selectedLanguage === language}
|
|
102
|
+
>
|
|
103
|
+
${getLanguageName(language)}
|
|
104
|
+
</option>
|
|
105
|
+
`)}
|
|
106
|
+
</select>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
111
|
`;
|
|
112
112
|
}
|
|
113
113
|
};
|
|
114
114
|
SettingsMenu.styles = [
|
|
115
|
-
css `
|
|
116
|
-
:host {
|
|
117
|
-
display: block;
|
|
118
|
-
font-family: var(--component-font-family);
|
|
119
|
-
}
|
|
120
|
-
/* Retain the anchor-name styling for this component */
|
|
121
|
-
#settings-popover-button {
|
|
122
|
-
anchor-name: --settings_popover_btn;
|
|
123
|
-
}
|
|
124
|
-
[popover] {
|
|
125
|
-
margin: 0;
|
|
126
|
-
padding: 16px;
|
|
127
|
-
border: 0;
|
|
128
|
-
background: var(--card-background);
|
|
129
|
-
border: 1px solid var(--card-border-color);
|
|
130
|
-
border-radius: var(--card-border-radius);
|
|
131
|
-
box-shadow: var(--card-box-shadow);
|
|
132
|
-
z-index: 1000;
|
|
133
|
-
max-width: 260px;
|
|
134
|
-
width: 100%;
|
|
135
|
-
min-width: 200px;
|
|
136
|
-
position-anchor: --settings_popover_btn;
|
|
137
|
-
position-area: bottom span-right;
|
|
138
|
-
position-visibility: always;
|
|
139
|
-
position-try-fallbacks: flip-inline;
|
|
140
|
-
overflow-x: hidden;
|
|
141
|
-
}
|
|
142
|
-
.settings-wrapper {
|
|
143
|
-
display: flex;
|
|
144
|
-
flex-direction: column;
|
|
145
|
-
gap: 20px;
|
|
146
|
-
}
|
|
115
|
+
css `
|
|
116
|
+
:host {
|
|
117
|
+
display: block;
|
|
118
|
+
font-family: var(--component-font-family);
|
|
119
|
+
}
|
|
120
|
+
/* Retain the anchor-name styling for this component */
|
|
121
|
+
#settings-popover-button {
|
|
122
|
+
anchor-name: --settings_popover_btn;
|
|
123
|
+
}
|
|
124
|
+
[popover] {
|
|
125
|
+
margin: 0;
|
|
126
|
+
padding: 16px;
|
|
127
|
+
border: 0;
|
|
128
|
+
background: var(--card-background);
|
|
129
|
+
border: 1px solid var(--card-border-color);
|
|
130
|
+
border-radius: var(--card-border-radius);
|
|
131
|
+
box-shadow: var(--card-box-shadow);
|
|
132
|
+
z-index: 1000;
|
|
133
|
+
max-width: 260px;
|
|
134
|
+
width: 100%;
|
|
135
|
+
min-width: 200px;
|
|
136
|
+
position-anchor: --settings_popover_btn;
|
|
137
|
+
position-area: bottom span-right;
|
|
138
|
+
position-visibility: always;
|
|
139
|
+
position-try-fallbacks: flip-inline;
|
|
140
|
+
overflow-x: hidden;
|
|
141
|
+
}
|
|
142
|
+
.settings-wrapper {
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-direction: column;
|
|
145
|
+
gap: 20px;
|
|
146
|
+
}
|
|
147
147
|
`,
|
|
148
148
|
ButtonStyles,
|
|
149
149
|
SelectStyles,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-menu.js","sourceRoot":"","sources":["../../src/components/settings-menu.ts"],"names":[],"mappings":"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","sourcesContent":["// mic-selector.ts\nimport { LitElement, html, css, TemplateResult, CSSResultGroup } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport ButtonStyles from '../styles/buttons.js';\nimport SelectStyles from '../styles/select.js';\nimport { LANGUAGES_SUPPORTED } from '../constants.js';\nimport { getAudioDevices, getLanguageName } from '../utils.js';\nimport CalloutStyles from '../styles/callout.js';\n\n@customElement('settings-menu')\nexport class SettingsMenu extends LitElement {\n @property({ type: String })\n selectedDevice: MediaDeviceInfo | undefined;\n\n @property({ type: String })\n selectedLanguage: string = '';\n\n @property({ type: Boolean })\n settingsDisabled: boolean = false;\n\n @state()\n private _devices: MediaDeviceInfo[] = [];\n\n constructor() {\n super();\n navigator.mediaDevices.addEventListener(\n 'devicechange',\n this.handleDevicesChange.bind(this),\n );\n }\n\n // on load, get the available devices\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n const deviceResponse = await getAudioDevices();\n this._devices = deviceResponse.devices;\n }\n\n private async handleDevicesChange() {\n const deviceResponse = await getAudioDevices();\n this._devices = deviceResponse.devices;\n }\n\n static styles: CSSResultGroup = [\n css`\n :host {\n display: block;\n font-family: var(--component-font-family);\n }\n /* Retain the anchor-name styling for this component */\n #settings-popover-button {\n anchor-name: --settings_popover_btn;\n }\n [popover] {\n margin: 0;\n padding: 16px;\n border: 0;\n background: var(--card-background);\n border: 1px solid var(--card-border-color);\n border-radius: var(--card-border-radius);\n box-shadow: var(--card-box-shadow);\n z-index: 1000;\n max-width: 260px;\n width: 100%;\n min-width: 200px;\n position-anchor: --settings_popover_btn;\n position-area: bottom span-right;\n position-visibility: always;\n position-try-fallbacks: flip-inline;\n overflow-x: hidden;\n }\n .settings-wrapper {\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n `,\n ButtonStyles,\n SelectStyles,\n CalloutStyles,\n ];\n\n private _selectDevice(deviceId: string): void {\n // Find the device object\n const device = this._devices.find(d => d.deviceId === deviceId);\n if (!device) {\n return;\n }\n this.selectedDevice = device;\n this.dispatchEvent(\n new CustomEvent('recording-devices-changed', {\n detail: {\n devices: this._devices,\n selectedDevice: device,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"mic-selector\">\n <button id=\"settings-popover-button\" popovertarget=\"settings-popover\">\n <icon-settings></icon-settings>\n </button>\n <div id=\"settings-popover\" popover>\n <div class=\"settings-wrapper\">\n ${this.settingsDisabled\n ? html`\n <div class=\"callout warn\">\n Recording is in progress. Stop recording to change settings.\n </div>\n `\n : ''}\n <div class=\"form-group\">\n <label id=\"device-select-label\" for=\"device-select\">\n Recording Device\n </label>\n <select\n id=\"device-select\"\n aria-labelledby=\"device-select-label\"\n @change=${(e: Event) => {\n this._selectDevice((e.target as HTMLSelectElement).value);\n }}\n ?disabled=${this.settingsDisabled}\n >\n ${this._devices.map(\n device => html`\n <option\n value=${device.deviceId}\n ?selected=${this.selectedDevice === device}\n >\n ${device.label || 'Unknown Device'}\n </option>\n `,\n )}\n </select>\n </div>\n <div class=\"form-group\">\n <label id=\"language-select-label\" for=\"language-select\">\n Dictation Language\n </label>\n <select\n id=\"language-select\"\n aria-labelledby=\"language-select-label\"\n @change=${(e: Event) => {\n this._selectDevice((e.target as HTMLSelectElement).value);\n }}\n ?disabled=${this.settingsDisabled}\n >\n ${LANGUAGES_SUPPORTED.map(\n language => html`\n <option\n value=${language}\n ?selected=${this.selectedLanguage === language}\n >\n ${getLanguageName(language)}\n </option>\n `,\n )}\n </select>\n </div>\n </div>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'settings-menu': SettingsMenu;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"settings-menu.js","sourceRoot":"","sources":["../../src/components/settings-menu.ts"],"names":[],"mappings":"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","sourcesContent":["// mic-selector.ts\r\nimport { LitElement, html, css, TemplateResult, CSSResultGroup } from 'lit';\r\nimport { customElement, property, state } from 'lit/decorators.js';\r\n\r\nimport ButtonStyles from '../styles/buttons.js';\r\nimport SelectStyles from '../styles/select.js';\r\nimport { LANGUAGES_SUPPORTED } from '../constants.js';\r\nimport { getAudioDevices, getLanguageName } from '../utils.js';\r\nimport CalloutStyles from '../styles/callout.js';\r\n\r\n@customElement('settings-menu')\r\nexport class SettingsMenu extends LitElement {\r\n @property({ type: String })\r\n selectedDevice: MediaDeviceInfo | undefined;\r\n\r\n @property({ type: String })\r\n selectedLanguage: string = '';\r\n\r\n @property({ type: Boolean })\r\n settingsDisabled: boolean = false;\r\n\r\n @state()\r\n private _devices: MediaDeviceInfo[] = [];\r\n\r\n constructor() {\r\n super();\r\n navigator.mediaDevices.addEventListener(\r\n 'devicechange',\r\n this.handleDevicesChange.bind(this),\r\n );\r\n }\r\n\r\n // on load, get the available devices\r\n async connectedCallback(): Promise<void> {\r\n super.connectedCallback();\r\n const deviceResponse = await getAudioDevices();\r\n this._devices = deviceResponse.devices;\r\n }\r\n\r\n private async handleDevicesChange() {\r\n const deviceResponse = await getAudioDevices();\r\n this._devices = deviceResponse.devices;\r\n }\r\n\r\n static styles: CSSResultGroup = [\r\n css`\r\n :host {\r\n display: block;\r\n font-family: var(--component-font-family);\r\n }\r\n /* Retain the anchor-name styling for this component */\r\n #settings-popover-button {\r\n anchor-name: --settings_popover_btn;\r\n }\r\n [popover] {\r\n margin: 0;\r\n padding: 16px;\r\n border: 0;\r\n background: var(--card-background);\r\n border: 1px solid var(--card-border-color);\r\n border-radius: var(--card-border-radius);\r\n box-shadow: var(--card-box-shadow);\r\n z-index: 1000;\r\n max-width: 260px;\r\n width: 100%;\r\n min-width: 200px;\r\n position-anchor: --settings_popover_btn;\r\n position-area: bottom span-right;\r\n position-visibility: always;\r\n position-try-fallbacks: flip-inline;\r\n overflow-x: hidden;\r\n }\r\n .settings-wrapper {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 20px;\r\n }\r\n `,\r\n ButtonStyles,\r\n SelectStyles,\r\n CalloutStyles,\r\n ];\r\n\r\n private _selectDevice(deviceId: string): void {\r\n // Find the device object\r\n const device = this._devices.find(d => d.deviceId === deviceId);\r\n if (!device) {\r\n return;\r\n }\r\n this.selectedDevice = device;\r\n this.dispatchEvent(\r\n new CustomEvent('recording-devices-changed', {\r\n detail: {\r\n devices: this._devices,\r\n selectedDevice: device,\r\n },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n render(): TemplateResult {\r\n return html`\r\n <div class=\"mic-selector\">\r\n <button id=\"settings-popover-button\" popovertarget=\"settings-popover\">\r\n <icon-settings></icon-settings>\r\n </button>\r\n <div id=\"settings-popover\" popover>\r\n <div class=\"settings-wrapper\">\r\n ${this.settingsDisabled\r\n ? html`\r\n <div class=\"callout warn\">\r\n Recording is in progress. Stop recording to change settings.\r\n </div>\r\n `\r\n : ''}\r\n <div class=\"form-group\">\r\n <label id=\"device-select-label\" for=\"device-select\">\r\n Recording Device\r\n </label>\r\n <select\r\n id=\"device-select\"\r\n aria-labelledby=\"device-select-label\"\r\n @change=${(e: Event) => {\r\n this._selectDevice((e.target as HTMLSelectElement).value);\r\n }}\r\n ?disabled=${this.settingsDisabled}\r\n >\r\n ${this._devices.map(\r\n device => html`\r\n <option\r\n value=${device.deviceId}\r\n ?selected=${this.selectedDevice === device}\r\n >\r\n ${device.label || 'Unknown Device'}\r\n </option>\r\n `,\r\n )}\r\n </select>\r\n </div>\r\n <div class=\"form-group\">\r\n <label id=\"language-select-label\" for=\"language-select\">\r\n Dictation Language\r\n </label>\r\n <select\r\n id=\"language-select\"\r\n aria-labelledby=\"language-select-label\"\r\n @change=${(e: Event) => {\r\n this._selectDevice((e.target as HTMLSelectElement).value);\r\n }}\r\n ?disabled=${this.settingsDisabled}\r\n >\r\n ${LANGUAGES_SUPPORTED.map(\r\n language => html`\r\n <option\r\n value=${language}\r\n ?selected=${this.selectedLanguage === language}\r\n >\r\n ${getLanguageName(language)}\r\n </option>\r\n `,\r\n )}\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n 'settings-menu': SettingsMenu;\r\n }\r\n}\r\n"]}
|
package/dist/constants.js
CHANGED
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,iBAAiB,EAAE,IAAI;IACvB,oBAAoB,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,iBAAiB,EAAE,IAAI;IACvB,oBAAoB,EAAE,IAAI;CAC3B,CAAC","sourcesContent":["import { DictationConfig } from './types.js';\r\n\r\nexport const LANGUAGES_SUPPORTED = ['en', 'da'];\r\nexport const DEFAULT_DICTATION_CONFIG: DictationConfig = {\r\n primaryLanguage: 'en',\r\n interimResults: true,\r\n spokenPunctuation: true,\r\n automaticPunctuation: true,\r\n};\r\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface DictationConfig {
|
|
|
14
14
|
interimResults: boolean;
|
|
15
15
|
spokenPunctuation: boolean;
|
|
16
16
|
automaticPunctuation: boolean;
|
|
17
|
-
model
|
|
17
|
+
model?: string;
|
|
18
18
|
commands?: Command[];
|
|
19
19
|
}
|
|
20
20
|
export type PartialDictationConfig = Partial<DictationConfig>;
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type RecordingState =\n | 'initializing'\n | 'recording'\n | 'stopping'\n | 'stopped';\n\ninterface CommandVariable {\n key: string;\n type: 'enum' | 'string';\n enum?: string[];\n}\n\nexport interface Command {\n id: string;\n phrases: string[];\n variables?: CommandVariable[];\n}\n\nexport interface DictationConfig {\n primaryLanguage: string;\n interimResults: boolean;\n spokenPunctuation: boolean;\n automaticPunctuation: boolean;\n model
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type RecordingState =\r\n | 'initializing'\r\n | 'recording'\r\n | 'stopping'\r\n | 'stopped';\r\n\r\ninterface CommandVariable {\r\n key: string;\r\n type: 'enum' | 'string';\r\n enum?: string[];\r\n}\r\n\r\nexport interface Command {\r\n id: string;\r\n phrases: string[];\r\n variables?: CommandVariable[];\r\n}\r\n\r\nexport interface DictationConfig {\r\n primaryLanguage: string;\r\n interimResults: boolean;\r\n spokenPunctuation: boolean;\r\n automaticPunctuation: boolean;\r\n model?: string;\r\n commands?: Command[];\r\n}\r\n\r\nexport type PartialDictationConfig = Partial<DictationConfig>;\r\n\r\nexport interface ServerConfig {\r\n environment: string;\r\n tenant: string;\r\n accessToken: string;\r\n}\r\n"]}
|