@corti/dictation-web 0.1.11 → 0.1.13
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/CortiDictation.d.ts +2 -0
- package/dist/CortiDictation.js +28 -1
- package/dist/CortiDictation.js.map +1 -1
- package/dist/bundle.js +48 -7
- package/dist/components/settings-menu.d.ts +2 -0
- package/dist/components/settings-menu.js +20 -4
- package/dist/components/settings-menu.js.map +1 -1
- package/dist/constants.js +1 -2
- package/dist/constants.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +117 -117
package/dist/CortiDictation.d.ts
CHANGED
|
@@ -24,8 +24,10 @@ export declare class CortiDictation extends LitElement {
|
|
|
24
24
|
get recordingState(): RecordingState;
|
|
25
25
|
get devices(): MediaDeviceInfo[];
|
|
26
26
|
setRecordingDevice(device: MediaDeviceInfo): Promise<void>;
|
|
27
|
+
setPrimaryLanguage(language: string): void;
|
|
27
28
|
_toggleRecording(): void;
|
|
28
29
|
_onRecordingDevicesChanged(event: Event): Promise<void>;
|
|
30
|
+
_onLanguageChanged(event: Event): void;
|
|
29
31
|
render(): import("lit-html").TemplateResult<1>;
|
|
30
32
|
}
|
|
31
33
|
export default CortiDictation;
|
package/dist/CortiDictation.js
CHANGED
|
@@ -14,7 +14,7 @@ import './icons/icons.js';
|
|
|
14
14
|
import ThemeStyles from './styles/theme.js';
|
|
15
15
|
import ButtonStyles from './styles/buttons.js';
|
|
16
16
|
import ComponentStyles from './styles/ComponentStyles.js';
|
|
17
|
-
import { DEFAULT_DICTATION_CONFIG } from './constants.js';
|
|
17
|
+
import { DEFAULT_DICTATION_CONFIG, LANGUAGES_SUPPORTED } from './constants.js';
|
|
18
18
|
import CalloutStyles from './styles/callout.js';
|
|
19
19
|
import { decodeToken } from './utils.js';
|
|
20
20
|
export class CortiDictation extends LitElement {
|
|
@@ -109,6 +109,23 @@ export class CortiDictation extends LitElement {
|
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
|
+
setPrimaryLanguage(language) {
|
|
113
|
+
if (LANGUAGES_SUPPORTED.includes(language)) {
|
|
114
|
+
this.dictationConfig = {
|
|
115
|
+
...this.dictationConfig,
|
|
116
|
+
primaryLanguage: language,
|
|
117
|
+
};
|
|
118
|
+
// If recording is in progress, restart to apply the language change
|
|
119
|
+
if (this._serverConfig && this._recordingState === 'recording') {
|
|
120
|
+
this.recorderManager.stopRecording();
|
|
121
|
+
this.recorderManager.startRecording({
|
|
122
|
+
dictationConfig: this.dictationConfig,
|
|
123
|
+
serverConfig: this._serverConfig,
|
|
124
|
+
debug_displayAudio: this.debug_displayAudio,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
112
129
|
_toggleRecording() {
|
|
113
130
|
if (!this._serverConfig)
|
|
114
131
|
return;
|
|
@@ -128,6 +145,14 @@ export class CortiDictation extends LitElement {
|
|
|
128
145
|
const customEvent = event;
|
|
129
146
|
this.setRecordingDevice(customEvent.detail.selectedDevice);
|
|
130
147
|
}
|
|
148
|
+
// Handle language change events
|
|
149
|
+
_onLanguageChanged(event) {
|
|
150
|
+
const customEvent = event;
|
|
151
|
+
const language = customEvent.detail.language;
|
|
152
|
+
if (language) {
|
|
153
|
+
this.setPrimaryLanguage(language);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
131
156
|
render() {
|
|
132
157
|
if (!this._serverConfig) {
|
|
133
158
|
return html ` <div style="display: none"></div> `;
|
|
@@ -154,8 +179,10 @@ export class CortiDictation extends LitElement {
|
|
|
154
179
|
|
|
155
180
|
<settings-menu
|
|
156
181
|
.selectedDevice=${this._selectedDevice}
|
|
182
|
+
.selectedLanguage=${this.dictationConfig.primaryLanguage}
|
|
157
183
|
?settingsDisabled=${this._recordingState !== 'stopped'}
|
|
158
184
|
@recording-devices-changed=${this._onRecordingDevicesChanged}
|
|
185
|
+
@language-changed=${this._onLanguageChanged}
|
|
159
186
|
></settings-menu>
|
|
160
187
|
</div>
|
|
161
188
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CortiDictation.js","sourceRoot":"","sources":["../src/CortiDictation.ts"],"names":[],"mappings":"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","sourcesContent":["// corti-dictation.ts\nimport { html, LitElement } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { RecorderManager } from './RecorderManager.js';\nimport './components/settings-menu.js';\nimport './components/audio-visualiser.js';\nimport './icons/icons.js';\nimport ThemeStyles from './styles/theme.js';\nimport ButtonStyles from './styles/buttons.js';\nimport ComponentStyles from './styles/ComponentStyles.js';\n\nimport type { DictationConfig, RecordingState, ServerConfig } from './types.js';\nimport { DEFAULT_DICTATION_CONFIG } from './constants.js';\nimport CalloutStyles from './styles/callout.js';\nimport { decodeToken } from './utils.js';\n\nexport class CortiDictation extends LitElement {\n static styles = [ButtonStyles, ThemeStyles, ComponentStyles, CalloutStyles];\n\n @property({ type: Object })\n dictationConfig: DictationConfig = DEFAULT_DICTATION_CONFIG;\n\n @property({ type: Boolean })\n debug_displayAudio: boolean = false;\n\n @state()\n private _serverConfig: ServerConfig | undefined;\n\n @state()\n private _audioLevel: number = 0;\n\n @state()\n private _recordingState: RecordingState = 'stopped';\n\n @state()\n private _selectedDevice: MediaDeviceInfo | undefined;\n\n @state()\n private _devices: MediaDeviceInfo[] = [];\n\n private recorderManager = new RecorderManager();\n\n async connectedCallback() {\n super.connectedCallback();\n const devices = await this.recorderManager.initialize();\n if (devices.selectedDevice) {\n this._selectedDevice = this.recorderManager.selectedDevice;\n this._devices = this.recorderManager.devices;\n this.dispatchEvent(new CustomEvent('ready'));\n }\n\n // Map event names to any extra handling logic\n const eventHandlers: Record<string, (e: CustomEvent) => void> = {\n 'recording-state-changed': e => {\n this._recordingState = e.detail.state;\n },\n 'devices-changed': () => {\n this._devices = [...this.recorderManager.devices];\n this.requestUpdate();\n },\n 'audio-level-changed': e => {\n this._audioLevel = e.detail.audioLevel;\n this.requestUpdate();\n },\n };\n\n const eventsToRelay = [\n 'recording-state-changed',\n 'recording-devices-changed',\n 'audio-level-changed',\n 'error',\n 'transcript',\n 'command',\n 'ready',\n ];\n\n eventsToRelay.forEach(eventName => {\n this.recorderManager.addEventListener(eventName, (e: Event) => {\n const customEvent = e as CustomEvent;\n // Perform any additional handling if defined\n if (eventHandlers[eventName]) {\n eventHandlers[eventName](customEvent);\n }\n // Re-dispatch the event from the component\n this.dispatchEvent(\n new CustomEvent(eventName, {\n detail: customEvent.detail,\n bubbles: true,\n composed: true,\n }),\n );\n });\n });\n }\n\n public toggleRecording() {\n this._toggleRecording();\n }\n\n public setAccessToken(token: string) {\n try {\n const decoded = decodeToken(token);\n this._serverConfig = decoded;\n return decoded;\n } catch (e) {\n throw new Error('Invalid token');\n }\n }\n\n public get selectedDevice(): MediaDeviceInfo | null {\n return this.recorderManager.selectedDevice || null;\n }\n\n public get recordingState(): RecordingState {\n return this._recordingState;\n }\n\n public get devices(): MediaDeviceInfo[] {\n return this._devices;\n }\n\n public async setRecordingDevice(device: MediaDeviceInfo) {\n this.recorderManager.selectedDevice = device;\n this._selectedDevice = device;\n if (!this._serverConfig) return;\n if (this._recordingState === 'recording') {\n await this.recorderManager.stopRecording();\n await this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n });\n }\n }\n\n _toggleRecording() {\n if (!this._serverConfig) return;\n if (this._recordingState === 'recording') {\n this.recorderManager.stopRecording();\n } else if (this._recordingState === 'stopped') {\n this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n debug_displayAudio: this.debug_displayAudio,\n });\n }\n }\n\n // Handle device change events if needed\n async _onRecordingDevicesChanged(event: Event) {\n const customEvent = event as CustomEvent;\n this.setRecordingDevice(customEvent.detail.selectedDevice);\n }\n\n render() {\n if (!this._serverConfig) {\n return html` <div style=\"display: none\"></div> `;\n }\n\n const isLoading =\n this._recordingState === 'initializing' ||\n this._recordingState === 'stopping';\n const isRecording = this._recordingState === 'recording';\n return html`\n <div class=\"wrapper\">\n <button\n @click=${this._toggleRecording}\n class=${isRecording ? 'red' : 'accent'}\n >\n ${isLoading\n ? html`<icon-loading-spinner></icon-loading-spinner>`\n : isRecording\n ? html`<icon-recording></icon-recording>`\n : html`<icon-mic-on></icon-mic-on>`}\n <audio-visualiser\n .level=${this._audioLevel}\n .active=${isRecording}\n ></audio-visualiser>\n </button>\n\n <settings-menu\n .selectedDevice=${this._selectedDevice}\n ?settingsDisabled=${this._recordingState !== 'stopped'}\n @recording-devices-changed=${this._onRecordingDevicesChanged}\n ></settings-menu>\n </div>\n `;\n }\n}\n\nexport default CortiDictation;\n"]}
|
|
1
|
+
{"version":3,"file":"CortiDictation.js","sourceRoot":"","sources":["../src/CortiDictation.ts"],"names":[],"mappings":"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","sourcesContent":["// corti-dictation.ts\nimport { html, LitElement } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { RecorderManager } from './RecorderManager.js';\nimport './components/settings-menu.js';\nimport './components/audio-visualiser.js';\nimport './icons/icons.js';\nimport ThemeStyles from './styles/theme.js';\nimport ButtonStyles from './styles/buttons.js';\nimport ComponentStyles from './styles/ComponentStyles.js';\n\nimport type { DictationConfig, RecordingState, ServerConfig } from './types.js';\nimport { DEFAULT_DICTATION_CONFIG, LANGUAGES_SUPPORTED } from './constants.js';\nimport CalloutStyles from './styles/callout.js';\nimport { decodeToken } from './utils.js';\n\nexport class CortiDictation extends LitElement {\n static styles = [ButtonStyles, ThemeStyles, ComponentStyles, CalloutStyles];\n\n @property({ type: Object })\n dictationConfig: DictationConfig = DEFAULT_DICTATION_CONFIG;\n\n @property({ type: Boolean })\n debug_displayAudio: boolean = false;\n\n @state()\n private _serverConfig: ServerConfig | undefined;\n\n @state()\n private _audioLevel: number = 0;\n\n @state()\n private _recordingState: RecordingState = 'stopped';\n\n @state()\n private _selectedDevice: MediaDeviceInfo | undefined;\n\n @state()\n private _devices: MediaDeviceInfo[] = [];\n\n private recorderManager = new RecorderManager();\n\n async connectedCallback() {\n super.connectedCallback();\n const devices = await this.recorderManager.initialize();\n if (devices.selectedDevice) {\n this._selectedDevice = this.recorderManager.selectedDevice;\n this._devices = this.recorderManager.devices;\n this.dispatchEvent(new CustomEvent('ready'));\n }\n\n // Map event names to any extra handling logic\n const eventHandlers: Record<string, (e: CustomEvent) => void> = {\n 'recording-state-changed': e => {\n this._recordingState = e.detail.state;\n },\n 'devices-changed': () => {\n this._devices = [...this.recorderManager.devices];\n this.requestUpdate();\n },\n 'audio-level-changed': e => {\n this._audioLevel = e.detail.audioLevel;\n this.requestUpdate();\n },\n };\n\n const eventsToRelay = [\n 'recording-state-changed',\n 'recording-devices-changed',\n 'audio-level-changed',\n 'error',\n 'transcript',\n 'command',\n 'ready',\n ];\n\n eventsToRelay.forEach(eventName => {\n this.recorderManager.addEventListener(eventName, (e: Event) => {\n const customEvent = e as CustomEvent;\n // Perform any additional handling if defined\n if (eventHandlers[eventName]) {\n eventHandlers[eventName](customEvent);\n }\n // Re-dispatch the event from the component\n this.dispatchEvent(\n new CustomEvent(eventName, {\n detail: customEvent.detail,\n bubbles: true,\n composed: true,\n }),\n );\n });\n });\n }\n \n\n\n public toggleRecording() {\n this._toggleRecording();\n }\n\n public setAccessToken(token: string) {\n try {\n const decoded = decodeToken(token);\n this._serverConfig = decoded;\n return decoded;\n } catch (e) {\n throw new Error('Invalid token');\n }\n }\n\n public get selectedDevice(): MediaDeviceInfo | null {\n return this.recorderManager.selectedDevice || null;\n }\n\n public get recordingState(): RecordingState {\n return this._recordingState;\n }\n\n public get devices(): MediaDeviceInfo[] {\n return this._devices;\n }\n\n public async setRecordingDevice(device: MediaDeviceInfo) {\n this.recorderManager.selectedDevice = device;\n this._selectedDevice = device;\n if (!this._serverConfig) return;\n if (this._recordingState === 'recording') {\n await this.recorderManager.stopRecording();\n await this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n });\n }\n }\n\n public setPrimaryLanguage(language: string) {\n if (LANGUAGES_SUPPORTED.includes(language)) {\n this.dictationConfig = {\n ...this.dictationConfig,\n primaryLanguage: language,\n };\n \n // If recording is in progress, restart to apply the language change\n if (this._serverConfig && this._recordingState === 'recording') {\n this.recorderManager.stopRecording();\n this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n debug_displayAudio: this.debug_displayAudio,\n });\n }\n }\n }\n\n _toggleRecording() {\n if (!this._serverConfig) return;\n if (this._recordingState === 'recording') {\n this.recorderManager.stopRecording();\n } else if (this._recordingState === 'stopped') {\n this.recorderManager.startRecording({\n dictationConfig: this.dictationConfig,\n serverConfig: this._serverConfig,\n debug_displayAudio: this.debug_displayAudio,\n });\n }\n }\n\n // Handle device change events if needed\n async _onRecordingDevicesChanged(event: Event) {\n const customEvent = event as CustomEvent;\n this.setRecordingDevice(customEvent.detail.selectedDevice);\n }\n\n // Handle language change events\n _onLanguageChanged(event: Event) {\n const customEvent = event as CustomEvent;\n const language = customEvent.detail.language;\n if (language) {\n this.setPrimaryLanguage(language);\n }\n }\n\n render() {\n if (!this._serverConfig) {\n return html` <div style=\"display: none\"></div> `;\n }\n\n const isLoading =\n this._recordingState === 'initializing' ||\n this._recordingState === 'stopping';\n const isRecording = this._recordingState === 'recording';\n return html`\n <div class=\"wrapper\">\n <button\n @click=${this._toggleRecording}\n class=${isRecording ? 'red' : 'accent'}\n >\n ${isLoading\n ? html`<icon-loading-spinner></icon-loading-spinner>`\n : isRecording\n ? html`<icon-recording></icon-recording>`\n : html`<icon-mic-on></icon-mic-on>`}\n <audio-visualiser\n .level=${this._audioLevel}\n .active=${isRecording}\n ></audio-visualiser>\n </button>\n\n <settings-menu\n .selectedDevice=${this._selectedDevice}\n .selectedLanguage=${this.dictationConfig.primaryLanguage}\n ?settingsDisabled=${this._recordingState !== 'stopped'}\n @recording-devices-changed=${this._onRecordingDevicesChanged}\n @language-changed=${this._onLanguageChanged}\n ></settings-menu>\n </div>\n `;\n }\n}\n\nexport default CortiDictation;\n"]}
|
package/dist/bundle.js
CHANGED
|
@@ -1002,13 +1002,12 @@ var SelectStyles = i`
|
|
|
1002
1002
|
var select_default = SelectStyles;
|
|
1003
1003
|
|
|
1004
1004
|
// dist/constants.js
|
|
1005
|
-
var LANGUAGES_SUPPORTED = ["en", "da"];
|
|
1005
|
+
var LANGUAGES_SUPPORTED = ["en", "en-GB", "da", "de", "fr", "de-CH", "sv", "es", "it", "nl", "no", "pt"];
|
|
1006
1006
|
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
|
|
@@ -1052,6 +1051,9 @@ var __decorate = function(decorators, target, key, desc) {
|
|
|
1052
1051
|
return c4 > 3 && r7 && Object.defineProperty(target, key, r7), r7;
|
|
1053
1052
|
};
|
|
1054
1053
|
var SettingsMenu = class SettingsMenu2 extends r4 {
|
|
1054
|
+
get effectiveSelectedLanguage() {
|
|
1055
|
+
return this.selectedLanguage || LANGUAGES_SUPPORTED[0] || "";
|
|
1056
|
+
}
|
|
1055
1057
|
constructor() {
|
|
1056
1058
|
super();
|
|
1057
1059
|
this.selectedLanguage = "";
|
|
@@ -1084,6 +1086,19 @@ var SettingsMenu = class SettingsMenu2 extends r4 {
|
|
|
1084
1086
|
composed: true
|
|
1085
1087
|
}));
|
|
1086
1088
|
}
|
|
1089
|
+
_selectLanguage(language) {
|
|
1090
|
+
if (!LANGUAGES_SUPPORTED.includes(language)) {
|
|
1091
|
+
return;
|
|
1092
|
+
}
|
|
1093
|
+
this.selectedLanguage = language;
|
|
1094
|
+
this.dispatchEvent(new CustomEvent("language-changed", {
|
|
1095
|
+
detail: {
|
|
1096
|
+
language
|
|
1097
|
+
},
|
|
1098
|
+
bubbles: true,
|
|
1099
|
+
composed: true
|
|
1100
|
+
}));
|
|
1101
|
+
}
|
|
1087
1102
|
render() {
|
|
1088
1103
|
return x`
|
|
1089
1104
|
<div class="mic-selector">
|
|
@@ -1112,7 +1127,7 @@ var SettingsMenu = class SettingsMenu2 extends r4 {
|
|
|
1112
1127
|
${this._devices.map((device) => x`
|
|
1113
1128
|
<option
|
|
1114
1129
|
value=${device.deviceId}
|
|
1115
|
-
?selected=${this.selectedDevice === device}
|
|
1130
|
+
?selected=${this.selectedDevice?.deviceId === device.deviceId}
|
|
1116
1131
|
>
|
|
1117
1132
|
${device.label || "Unknown Device"}
|
|
1118
1133
|
</option>
|
|
@@ -1127,14 +1142,14 @@ var SettingsMenu = class SettingsMenu2 extends r4 {
|
|
|
1127
1142
|
id="language-select"
|
|
1128
1143
|
aria-labelledby="language-select-label"
|
|
1129
1144
|
@change=${(e5) => {
|
|
1130
|
-
this.
|
|
1145
|
+
this._selectLanguage(e5.target.value);
|
|
1131
1146
|
}}
|
|
1132
1147
|
?disabled=${this.settingsDisabled}
|
|
1133
1148
|
>
|
|
1134
1149
|
${LANGUAGES_SUPPORTED.map((language) => x`
|
|
1135
1150
|
<option
|
|
1136
1151
|
value=${language}
|
|
1137
|
-
?selected=${this.
|
|
1152
|
+
?selected=${this.effectiveSelectedLanguage === language}
|
|
1138
1153
|
>
|
|
1139
1154
|
${getLanguageName(language)}
|
|
1140
1155
|
</option>
|
|
@@ -1186,7 +1201,7 @@ SettingsMenu.styles = [
|
|
|
1186
1201
|
callout_default
|
|
1187
1202
|
];
|
|
1188
1203
|
__decorate([
|
|
1189
|
-
n4({ type:
|
|
1204
|
+
n4({ type: Object })
|
|
1190
1205
|
], SettingsMenu.prototype, "selectedDevice", void 0);
|
|
1191
1206
|
__decorate([
|
|
1192
1207
|
n4({ type: String })
|
|
@@ -1615,6 +1630,22 @@ var CortiDictation = class extends r4 {
|
|
|
1615
1630
|
});
|
|
1616
1631
|
}
|
|
1617
1632
|
}
|
|
1633
|
+
setPrimaryLanguage(language) {
|
|
1634
|
+
if (LANGUAGES_SUPPORTED.includes(language)) {
|
|
1635
|
+
this.dictationConfig = {
|
|
1636
|
+
...this.dictationConfig,
|
|
1637
|
+
primaryLanguage: language
|
|
1638
|
+
};
|
|
1639
|
+
if (this._serverConfig && this._recordingState === "recording") {
|
|
1640
|
+
this.recorderManager.stopRecording();
|
|
1641
|
+
this.recorderManager.startRecording({
|
|
1642
|
+
dictationConfig: this.dictationConfig,
|
|
1643
|
+
serverConfig: this._serverConfig,
|
|
1644
|
+
debug_displayAudio: this.debug_displayAudio
|
|
1645
|
+
});
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1648
|
+
}
|
|
1618
1649
|
_toggleRecording() {
|
|
1619
1650
|
if (!this._serverConfig)
|
|
1620
1651
|
return;
|
|
@@ -1633,6 +1664,14 @@ var CortiDictation = class extends r4 {
|
|
|
1633
1664
|
const customEvent = event;
|
|
1634
1665
|
this.setRecordingDevice(customEvent.detail.selectedDevice);
|
|
1635
1666
|
}
|
|
1667
|
+
// Handle language change events
|
|
1668
|
+
_onLanguageChanged(event) {
|
|
1669
|
+
const customEvent = event;
|
|
1670
|
+
const language = customEvent.detail.language;
|
|
1671
|
+
if (language) {
|
|
1672
|
+
this.setPrimaryLanguage(language);
|
|
1673
|
+
}
|
|
1674
|
+
}
|
|
1636
1675
|
render() {
|
|
1637
1676
|
if (!this._serverConfig) {
|
|
1638
1677
|
return x` <div style="display: none"></div> `;
|
|
@@ -1654,8 +1693,10 @@ var CortiDictation = class extends r4 {
|
|
|
1654
1693
|
|
|
1655
1694
|
<settings-menu
|
|
1656
1695
|
.selectedDevice=${this._selectedDevice}
|
|
1696
|
+
.selectedLanguage=${this.dictationConfig.primaryLanguage}
|
|
1657
1697
|
?settingsDisabled=${this._recordingState !== "stopped"}
|
|
1658
1698
|
@recording-devices-changed=${this._onRecordingDevicesChanged}
|
|
1699
|
+
@language-changed=${this._onLanguageChanged}
|
|
1659
1700
|
></settings-menu>
|
|
1660
1701
|
</div>
|
|
1661
1702
|
`;
|
|
@@ -4,11 +4,13 @@ export declare class SettingsMenu extends LitElement {
|
|
|
4
4
|
selectedLanguage: string;
|
|
5
5
|
settingsDisabled: boolean;
|
|
6
6
|
private _devices;
|
|
7
|
+
get effectiveSelectedLanguage(): string;
|
|
7
8
|
constructor();
|
|
8
9
|
connectedCallback(): Promise<void>;
|
|
9
10
|
private handleDevicesChange;
|
|
10
11
|
static styles: CSSResultGroup;
|
|
11
12
|
private _selectDevice;
|
|
13
|
+
private _selectLanguage;
|
|
12
14
|
render(): TemplateResult;
|
|
13
15
|
}
|
|
14
16
|
declare global {
|
|
@@ -13,6 +13,9 @@ import { LANGUAGES_SUPPORTED } from '../constants.js';
|
|
|
13
13
|
import { getAudioDevices, getLanguageName } from '../utils.js';
|
|
14
14
|
import CalloutStyles from '../styles/callout.js';
|
|
15
15
|
let SettingsMenu = class SettingsMenu extends LitElement {
|
|
16
|
+
get effectiveSelectedLanguage() {
|
|
17
|
+
return this.selectedLanguage || LANGUAGES_SUPPORTED[0] || '';
|
|
18
|
+
}
|
|
16
19
|
constructor() {
|
|
17
20
|
super();
|
|
18
21
|
this.selectedLanguage = '';
|
|
@@ -46,6 +49,19 @@ let SettingsMenu = class SettingsMenu extends LitElement {
|
|
|
46
49
|
composed: true,
|
|
47
50
|
}));
|
|
48
51
|
}
|
|
52
|
+
_selectLanguage(language) {
|
|
53
|
+
if (!LANGUAGES_SUPPORTED.includes(language)) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.selectedLanguage = language;
|
|
57
|
+
this.dispatchEvent(new CustomEvent('language-changed', {
|
|
58
|
+
detail: {
|
|
59
|
+
language: language,
|
|
60
|
+
},
|
|
61
|
+
bubbles: true,
|
|
62
|
+
composed: true,
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
49
65
|
render() {
|
|
50
66
|
return html `
|
|
51
67
|
<div class="mic-selector">
|
|
@@ -76,7 +92,7 @@ let SettingsMenu = class SettingsMenu extends LitElement {
|
|
|
76
92
|
${this._devices.map(device => html `
|
|
77
93
|
<option
|
|
78
94
|
value=${device.deviceId}
|
|
79
|
-
?selected=${this.selectedDevice === device}
|
|
95
|
+
?selected=${this.selectedDevice?.deviceId === device.deviceId}
|
|
80
96
|
>
|
|
81
97
|
${device.label || 'Unknown Device'}
|
|
82
98
|
</option>
|
|
@@ -91,14 +107,14 @@ let SettingsMenu = class SettingsMenu extends LitElement {
|
|
|
91
107
|
id="language-select"
|
|
92
108
|
aria-labelledby="language-select-label"
|
|
93
109
|
@change=${(e) => {
|
|
94
|
-
this.
|
|
110
|
+
this._selectLanguage(e.target.value);
|
|
95
111
|
}}
|
|
96
112
|
?disabled=${this.settingsDisabled}
|
|
97
113
|
>
|
|
98
114
|
${LANGUAGES_SUPPORTED.map(language => html `
|
|
99
115
|
<option
|
|
100
116
|
value=${language}
|
|
101
|
-
?selected=${this.
|
|
117
|
+
?selected=${this.effectiveSelectedLanguage === language}
|
|
102
118
|
>
|
|
103
119
|
${getLanguageName(language)}
|
|
104
120
|
</option>
|
|
@@ -150,7 +166,7 @@ SettingsMenu.styles = [
|
|
|
150
166
|
CalloutStyles,
|
|
151
167
|
];
|
|
152
168
|
__decorate([
|
|
153
|
-
property({ type:
|
|
169
|
+
property({ type: Object })
|
|
154
170
|
], SettingsMenu.prototype, "selectedDevice", void 0);
|
|
155
171
|
__decorate([
|
|
156
172
|
property({ type: String })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-menu.js","sourceRoot":"","sources":["../../src/components/settings-menu.ts"],"names":[],"mappings":";;;;;;AAAA,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAkC,MAAM,KAAK,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAChD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,aAAa,MAAM,sBAAsB,CAAC;AAG1C,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAa1C;QACE,KAAK,EAAE,CAAC;
|
|
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: Object })\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 get effectiveSelectedLanguage(): string {\n return this.selectedLanguage || LANGUAGES_SUPPORTED[0] || '';\n }\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 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 private _selectLanguage(language: string): void {\n if (!LANGUAGES_SUPPORTED.includes(language)) {\n return;\n }\n this.selectedLanguage = language;\n this.dispatchEvent(\n new CustomEvent('language-changed', {\n detail: {\n language: language,\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?.deviceId === device.deviceId}\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._selectLanguage((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.effectiveSelectedLanguage === 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"]}
|
package/dist/constants.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
export const LANGUAGES_SUPPORTED = ['en', 'da'];
|
|
1
|
+
export const LANGUAGES_SUPPORTED = ['en', 'en-GB', 'da', 'de', 'fr', 'de-CH', 'sv', 'es', 'it', 'nl', 'no', 'pt'];
|
|
2
2
|
export const DEFAULT_DICTATION_CONFIG = {
|
|
3
3
|
primaryLanguage: 'en',
|
|
4
4
|
interimResults: true,
|
|
5
5
|
spokenPunctuation: true,
|
|
6
6
|
automaticPunctuation: true,
|
|
7
|
-
model: 'others',
|
|
8
7
|
};
|
|
9
8
|
//# sourceMappingURL=constants.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAClH,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';\n\nexport const LANGUAGES_SUPPORTED = ['en', 'en-GB', 'da', 'de', 'fr', 'de-CH', 'sv', 'es', 'it', 'nl', 'no', 'pt'];\nexport const DEFAULT_DICTATION_CONFIG: DictationConfig = {\n primaryLanguage: 'en',\n interimResults: true,\n spokenPunctuation: true,\n automaticPunctuation: true,\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"]}
|
package/package.json
CHANGED
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@corti/dictation-web",
|
|
3
|
-
"description": "Web component for Corti Dictation",
|
|
4
|
-
"author": "Corti ApS",
|
|
5
|
-
"version": "0.1.
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"main": "dist/index.js",
|
|
9
|
-
"module": "dist/index.js",
|
|
10
|
-
"exports": {
|
|
11
|
-
"import": "./dist/index.js",
|
|
12
|
-
"default": "./dist/bundle.js"
|
|
13
|
-
},
|
|
14
|
-
"jsdelivr": "./dist/bundle.js",
|
|
15
|
-
"files": [
|
|
16
|
-
"dist"
|
|
17
|
-
],
|
|
18
|
-
"bugs": {
|
|
19
|
-
"url": "https://help.corti.app",
|
|
20
|
-
"email": "help@corti.ai"
|
|
21
|
-
},
|
|
22
|
-
"repository": "github:corticph/dictation-web-sdk",
|
|
23
|
-
"homepage": "https://help.corti.app/en/articles/10714657-introducing-the-corti-dictation-browser-sdk",
|
|
24
|
-
"keywords": [
|
|
25
|
-
"corti",
|
|
26
|
-
"dictation",
|
|
27
|
-
"web",
|
|
28
|
-
"sdk",
|
|
29
|
-
"speech",
|
|
30
|
-
"recognition",
|
|
31
|
-
"transcription",
|
|
32
|
-
"audio",
|
|
33
|
-
"medical",
|
|
34
|
-
"healthcare"
|
|
35
|
-
],
|
|
36
|
-
"scripts": {
|
|
37
|
-
"analyze": "cem analyze --litelement",
|
|
38
|
-
"build": "tsc && npm run analyze -- --exclude dist",
|
|
39
|
-
"build:bundle": "esbuild dist/index.js --bundle --outfile=dist/bundle.js --format=esm --platform=browser",
|
|
40
|
-
"release": "npm run build && npm run build:bundle && npm publish --access public",
|
|
41
|
-
"start": "npm run build && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"web-dev-server\"",
|
|
42
|
-
"prepublish": "tsc && npm run analyze -- --exclude dist",
|
|
43
|
-
"lint": "eslint --ext .ts,.tsx src --ignore-path .gitignore && prettier \"src/**/*.ts\" --check --ignore-path .gitignore",
|
|
44
|
-
"format": "eslint --ext .ts,.tsx src --fix --ignore-path .gitignore && prettier \"src/**/*.ts\" --write --ignore-path .gitignore",
|
|
45
|
-
"prepare": "husky && husky install",
|
|
46
|
-
"test": "tsc && wtr --coverage",
|
|
47
|
-
"test:watch": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"",
|
|
48
|
-
"storybook": "tsc && npm run analyze -- --exclude dist && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"storybook dev -p 8080\"",
|
|
49
|
-
"storybook:build": "tsc && npm run analyze -- --exclude dist && storybook build"
|
|
50
|
-
},
|
|
51
|
-
"dependencies": {
|
|
52
|
-
"lit": "^3.1.4"
|
|
53
|
-
},
|
|
54
|
-
"devDependencies": {
|
|
55
|
-
"@custom-elements-manifest/analyzer": "^0.10.3",
|
|
56
|
-
"@open-wc/eslint-config": "^12.0.3",
|
|
57
|
-
"@open-wc/testing": "^4.0.0",
|
|
58
|
-
"@storybook/addon-a11y": "^7.6.20",
|
|
59
|
-
"@storybook/addon-essentials": "^7.6.20",
|
|
60
|
-
"@storybook/addon-links": "^7.6.20",
|
|
61
|
-
"@storybook/web-components": "^7.6.20",
|
|
62
|
-
"@types/mocha": "^10.0.7",
|
|
63
|
-
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
64
|
-
"@typescript-eslint/parser": "^7.18.0",
|
|
65
|
-
"@web/dev-server": "^0.4.6",
|
|
66
|
-
"@web/storybook-builder": "^0.1.16",
|
|
67
|
-
"@web/storybook-framework-web-components": "^0.1.2",
|
|
68
|
-
"@web/test-runner": "^0.18.2",
|
|
69
|
-
"concurrently": "^8.2.2",
|
|
70
|
-
"esbuild": "^0.25.0",
|
|
71
|
-
"eslint": "^8.57.0",
|
|
72
|
-
"eslint-config-prettier": "^9.1.0",
|
|
73
|
-
"eslint-plugin-html": "^8.1.2",
|
|
74
|
-
"husky": "^8.0.0",
|
|
75
|
-
"lint-staged": "^15.2.7",
|
|
76
|
-
"prettier": "^3.3.2",
|
|
77
|
-
"sinon": "^19.0.2",
|
|
78
|
-
"storybook": "^7.6.20",
|
|
79
|
-
"tslib": "^2.6.3",
|
|
80
|
-
"typescript": "^5.5.3"
|
|
81
|
-
},
|
|
82
|
-
"customElements": "custom-elements.json",
|
|
83
|
-
"eslintConfig": {
|
|
84
|
-
"parser": "@typescript-eslint/parser",
|
|
85
|
-
"extends": [
|
|
86
|
-
"@open-wc",
|
|
87
|
-
"prettier"
|
|
88
|
-
],
|
|
89
|
-
"plugins": [
|
|
90
|
-
"@typescript-eslint"
|
|
91
|
-
],
|
|
92
|
-
"rules": {
|
|
93
|
-
"no-unused-vars": "off",
|
|
94
|
-
"@typescript-eslint/no-unused-vars": [
|
|
95
|
-
"error"
|
|
96
|
-
],
|
|
97
|
-
"import/no-unresolved": "off",
|
|
98
|
-
"import/extensions": [
|
|
99
|
-
"error",
|
|
100
|
-
"always",
|
|
101
|
-
{
|
|
102
|
-
"ignorePackages": true
|
|
103
|
-
}
|
|
104
|
-
]
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
"prettier": {
|
|
108
|
-
"singleQuote": true,
|
|
109
|
-
"arrowParens": "avoid"
|
|
110
|
-
},
|
|
111
|
-
"lint-staged": {
|
|
112
|
-
"*.ts": [
|
|
113
|
-
"eslint --fix",
|
|
114
|
-
"prettier --write"
|
|
115
|
-
]
|
|
116
|
-
}
|
|
117
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@corti/dictation-web",
|
|
3
|
+
"description": "Web component for Corti Dictation",
|
|
4
|
+
"author": "Corti ApS",
|
|
5
|
+
"version": "0.1.13",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"module": "dist/index.js",
|
|
10
|
+
"exports": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/bundle.js"
|
|
13
|
+
},
|
|
14
|
+
"jsdelivr": "./dist/bundle.js",
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://help.corti.app",
|
|
20
|
+
"email": "help@corti.ai"
|
|
21
|
+
},
|
|
22
|
+
"repository": "github:corticph/dictation-web-sdk",
|
|
23
|
+
"homepage": "https://help.corti.app/en/articles/10714657-introducing-the-corti-dictation-browser-sdk",
|
|
24
|
+
"keywords": [
|
|
25
|
+
"corti",
|
|
26
|
+
"dictation",
|
|
27
|
+
"web",
|
|
28
|
+
"sdk",
|
|
29
|
+
"speech",
|
|
30
|
+
"recognition",
|
|
31
|
+
"transcription",
|
|
32
|
+
"audio",
|
|
33
|
+
"medical",
|
|
34
|
+
"healthcare"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"analyze": "cem analyze --litelement",
|
|
38
|
+
"build": "tsc && npm run analyze -- --exclude dist",
|
|
39
|
+
"build:bundle": "esbuild dist/index.js --bundle --outfile=dist/bundle.js --format=esm --platform=browser",
|
|
40
|
+
"release": "npm run build && npm run build:bundle && npm publish --access public",
|
|
41
|
+
"start": "npm run build && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"web-dev-server\"",
|
|
42
|
+
"prepublish": "tsc && npm run analyze -- --exclude dist",
|
|
43
|
+
"lint": "eslint --ext .ts,.tsx src --ignore-path .gitignore && prettier \"src/**/*.ts\" --check --ignore-path .gitignore",
|
|
44
|
+
"format": "eslint --ext .ts,.tsx src --fix --ignore-path .gitignore && prettier \"src/**/*.ts\" --write --ignore-path .gitignore",
|
|
45
|
+
"prepare": "husky && husky install",
|
|
46
|
+
"test": "tsc && wtr --coverage",
|
|
47
|
+
"test:watch": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"",
|
|
48
|
+
"storybook": "tsc && npm run analyze -- --exclude dist && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"storybook dev -p 8080\"",
|
|
49
|
+
"storybook:build": "tsc && npm run analyze -- --exclude dist && storybook build"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"lit": "^3.1.4"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@custom-elements-manifest/analyzer": "^0.10.3",
|
|
56
|
+
"@open-wc/eslint-config": "^12.0.3",
|
|
57
|
+
"@open-wc/testing": "^4.0.0",
|
|
58
|
+
"@storybook/addon-a11y": "^7.6.20",
|
|
59
|
+
"@storybook/addon-essentials": "^7.6.20",
|
|
60
|
+
"@storybook/addon-links": "^7.6.20",
|
|
61
|
+
"@storybook/web-components": "^7.6.20",
|
|
62
|
+
"@types/mocha": "^10.0.7",
|
|
63
|
+
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
64
|
+
"@typescript-eslint/parser": "^7.18.0",
|
|
65
|
+
"@web/dev-server": "^0.4.6",
|
|
66
|
+
"@web/storybook-builder": "^0.1.16",
|
|
67
|
+
"@web/storybook-framework-web-components": "^0.1.2",
|
|
68
|
+
"@web/test-runner": "^0.18.2",
|
|
69
|
+
"concurrently": "^8.2.2",
|
|
70
|
+
"esbuild": "^0.25.0",
|
|
71
|
+
"eslint": "^8.57.0",
|
|
72
|
+
"eslint-config-prettier": "^9.1.0",
|
|
73
|
+
"eslint-plugin-html": "^8.1.2",
|
|
74
|
+
"husky": "^8.0.0",
|
|
75
|
+
"lint-staged": "^15.2.7",
|
|
76
|
+
"prettier": "^3.3.2",
|
|
77
|
+
"sinon": "^19.0.2",
|
|
78
|
+
"storybook": "^7.6.20",
|
|
79
|
+
"tslib": "^2.6.3",
|
|
80
|
+
"typescript": "^5.5.3"
|
|
81
|
+
},
|
|
82
|
+
"customElements": "custom-elements.json",
|
|
83
|
+
"eslintConfig": {
|
|
84
|
+
"parser": "@typescript-eslint/parser",
|
|
85
|
+
"extends": [
|
|
86
|
+
"@open-wc",
|
|
87
|
+
"prettier"
|
|
88
|
+
],
|
|
89
|
+
"plugins": [
|
|
90
|
+
"@typescript-eslint"
|
|
91
|
+
],
|
|
92
|
+
"rules": {
|
|
93
|
+
"no-unused-vars": "off",
|
|
94
|
+
"@typescript-eslint/no-unused-vars": [
|
|
95
|
+
"error"
|
|
96
|
+
],
|
|
97
|
+
"import/no-unresolved": "off",
|
|
98
|
+
"import/extensions": [
|
|
99
|
+
"error",
|
|
100
|
+
"always",
|
|
101
|
+
{
|
|
102
|
+
"ignorePackages": true
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
"prettier": {
|
|
108
|
+
"singleQuote": true,
|
|
109
|
+
"arrowParens": "avoid"
|
|
110
|
+
},
|
|
111
|
+
"lint-staged": {
|
|
112
|
+
"*.ts": [
|
|
113
|
+
"eslint --fix",
|
|
114
|
+
"prettier --write"
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
}
|