@tilde-nlp/ngx-translate 1.0.0
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/README.md +2 -0
- package/esm2020/lib/components/shared/extension-dialog/components/index.mjs +2 -0
- package/esm2020/lib/components/shared/extension-dialog/components/open-extension-dialog/open-extension-dialog.component.mjs +24 -0
- package/esm2020/lib/components/shared/extension-dialog/extension-dialog.component.mjs +133 -0
- package/esm2020/lib/components/shared/extension-dialog/extension-dialog.module.mjs +51 -0
- package/esm2020/lib/components/shared/extension-dialog/index.mjs +6 -0
- package/esm2020/lib/components/shared/extension-dialog/models/enums/file-categories.enum.mjs +9 -0
- package/esm2020/lib/components/shared/extension-dialog/models/enums/file-extensions.enum.mjs +35 -0
- package/esm2020/lib/components/shared/extension-dialog/models/enums/file-type-icons.enum.mjs +13 -0
- package/esm2020/lib/components/shared/extension-dialog/models/enums/file-types.enum.mjs +13 -0
- package/esm2020/lib/components/shared/extension-dialog/models/enums/index.mjs +5 -0
- package/esm2020/lib/components/shared/extension-dialog/models/index.mjs +3 -0
- package/esm2020/lib/components/shared/extension-dialog/models/interfaces/config.mjs +2 -0
- package/esm2020/lib/components/shared/extension-dialog/models/interfaces/dialog-data.model.mjs +2 -0
- package/esm2020/lib/components/shared/extension-dialog/models/interfaces/index.mjs +3 -0
- package/esm2020/lib/components/shared/extension-dialog/services/extension-dialog.service.mjs +22 -0
- package/esm2020/lib/components/shared/extension-dialog/services/index.mjs +2 -0
- package/esm2020/lib/components/shared/text-to-speech/index.mjs +3 -0
- package/esm2020/lib/components/shared/text-to-speech/models/text-to-speech-settings.model.mjs +2 -0
- package/esm2020/lib/components/shared/text-to-speech/text-to-speech.component.mjs +62 -0
- package/esm2020/lib/components/shared/text-to-speech/text-to-speech.module.mjs +36 -0
- package/esm2020/lib/components/shared/vendor-disclaimer/vendor-disclaimer.component.mjs +39 -0
- package/esm2020/lib/components/shared/vendor-disclaimer/vendor-disclaimer.module.mjs +28 -0
- package/esm2020/lib/factories/file-api-service.factory.mjs +12 -0
- package/esm2020/lib/factories/system-service.factory.mjs +12 -0
- package/esm2020/lib/factories/text-api-service.factory.mjs +12 -0
- package/esm2020/lib/i18n/available-languages.mjs +19 -0
- package/esm2020/lib/i18n/de.mjs +378 -0
- package/esm2020/lib/i18n/en.mjs +426 -0
- package/esm2020/lib/i18n/et.mjs +378 -0
- package/esm2020/lib/i18n/fi.mjs +383 -0
- package/esm2020/lib/i18n/lt.mjs +378 -0
- package/esm2020/lib/i18n/lv.mjs +391 -0
- package/esm2020/lib/i18n/models/available-languages.model.mjs +2 -0
- package/esm2020/lib/i18n/pl.mjs +378 -0
- package/esm2020/lib/i18n/sv.mjs +242 -0
- package/esm2020/lib/injection-tokens/file-api-service.token.mjs +2 -0
- package/esm2020/lib/injection-tokens/index.mjs +6 -0
- package/esm2020/lib/injection-tokens/system-service.token.mjs +2 -0
- package/esm2020/lib/injection-tokens/text-api-service.token.mjs +2 -0
- package/esm2020/lib/injection-tokens/tld-translate-config.token.mjs +2 -0
- package/esm2020/lib/injection-tokens/translation-api-version.token.mjs +2 -0
- package/esm2020/lib/modules/material.module.mjs +97 -0
- package/esm2020/lib/modules/tld-audio/index.mjs +4 -0
- package/esm2020/lib/modules/tld-audio/models/audio-error-case.model.mjs +13 -0
- package/esm2020/lib/modules/tld-audio/models/dictate-configurationi.model.mjs +2 -0
- package/esm2020/lib/modules/tld-audio/models/index.mjs +3 -0
- package/esm2020/lib/modules/tld-audio/models/transcription-update.model.mjs +2 -0
- package/esm2020/lib/modules/tld-audio/services/audio-record.service.mjs +116 -0
- package/esm2020/lib/modules/tld-audio/services/index.mjs +4 -0
- package/esm2020/lib/modules/tld-audio/services/tld-voice-input-api.service.mjs +48 -0
- package/esm2020/lib/modules/tld-audio/services/tld-voice-input.service.mjs +60 -0
- package/esm2020/lib/modules/tld-audio/tld-audio.module.mjs +41 -0
- package/esm2020/lib/modules/tld-audio/tld-dictate/tld-dictate.component.mjs +151 -0
- package/esm2020/lib/modules/tld-audio/tld-record/tld-record.component.mjs +87 -0
- package/esm2020/lib/modules/tld-common/animations/pulse.animation.mjs +11 -0
- package/esm2020/lib/modules/tld-common/components/index.mjs +10 -0
- package/esm2020/lib/modules/tld-common/components/open-close-button/open-close-button.component.mjs +41 -0
- package/esm2020/lib/modules/tld-common/components/source-and-target-wrapper/source-and-target-wrapper.component.mjs +44 -0
- package/esm2020/lib/modules/tld-common/components/tld-file-upload/tld-file-upload.component.mjs +103 -0
- package/esm2020/lib/modules/tld-common/components/tld-lang-list/tld-lang-list.component.mjs +193 -0
- package/esm2020/lib/modules/tld-common/components/tld-list-menu/tld-list-menu.component.mjs +60 -0
- package/esm2020/lib/modules/tld-common/components/tld-loader/tld-loader.component.mjs +12 -0
- package/esm2020/lib/modules/tld-common/components/tld-message/tld-message.component.mjs +49 -0
- package/esm2020/lib/modules/tld-common/components/tld-translate-achievement/tld-translate-achievement.component.mjs +17 -0
- package/esm2020/lib/modules/tld-common/components/translate-button/tld-translate-button.service.mjs +30 -0
- package/esm2020/lib/modules/tld-common/components/translate-button/translate-button.component.mjs +59 -0
- package/esm2020/lib/modules/tld-common/directives/drag-and-drop.directive.mjs +57 -0
- package/esm2020/lib/modules/tld-common/directives/index.mjs +2 -0
- package/esm2020/lib/modules/tld-common/index.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/auth-options.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/common.mjs +107 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-audio-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-term-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-text-to-speech-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-translate-api-v2-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-translate-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-translate-core-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-translate-file-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-translate-text-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/configs/tld-translate-web-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/core/index.mjs +3 -0
- package/esm2020/lib/modules/tld-common/models/core/language-menu-version.enum.mjs +6 -0
- package/esm2020/lib/modules/tld-common/models/core/translation-api-version.model.mjs +6 -0
- package/esm2020/lib/modules/tld-common/models/errors/error-codes.enum.mjs +27 -0
- package/esm2020/lib/modules/tld-common/models/errors/error-codes.type.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/errors/error.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/file-upload.model.mjs +10 -0
- package/esm2020/lib/modules/tld-common/models/index.mjs +22 -0
- package/esm2020/lib/modules/tld-common/models/lang-list-item.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/language-with-translation.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/message.model.mjs +7 -0
- package/esm2020/lib/modules/tld-common/models/selected-language.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/download-file-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/file-api-service.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/file-meta.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/file-translation-substatus.model.mjs +9 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/get-file-status-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/get-file-translation-status-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/remove-file-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/source-file-preview-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/start-file-translation-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/file-api/translated-document-preview-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/index.mjs +19 -0
- package/esm2020/lib/modules/tld-common/models/services/system/system.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/system/tld-system-api-service.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/text-api/check-grammar-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/text-api/tld-translate-text-api-service.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/text-api/translate-paragraph-request-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-job-state.model.mjs +7 -0
- package/esm2020/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-job.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-start-job-request-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-common/pipes/index.mjs +2 -0
- package/esm2020/lib/modules/tld-common/pipes/translate-domain.pipe.mjs +27 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icon.service.mjs +30 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/excel.icon.mjs +22 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/index.mjs +10 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/interchange.icon.mjs +6 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/office-other.icon.mjs +6 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/other.icon.mjs +6 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/pdf.icon.mjs +12 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/powerpoint.icon.mjs +10 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/scanned.icon.mjs +6 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/web.icon.mjs +6 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons/file-types/word.icon.mjs +11 -0
- package/esm2020/lib/modules/tld-common/services/icon-service/icons.mjs +52 -0
- package/esm2020/lib/modules/tld-common/services/index.mjs +5 -0
- package/esm2020/lib/modules/tld-common/services/scroll/tld-scroll.service.mjs +43 -0
- package/esm2020/lib/modules/tld-common/services/tld-alert.service.mjs +139 -0
- package/esm2020/lib/modules/tld-common/services/tld-highlight.service.mjs +25 -0
- package/esm2020/lib/modules/tld-common/services/tld-translate-config.service.mjs +226 -0
- package/esm2020/lib/modules/tld-common/services/wtw-link-params.service.mjs +33 -0
- package/esm2020/lib/modules/tld-common/tld-common.module.mjs +97 -0
- package/esm2020/lib/modules/tld-document/download-button/download-button.component.mjs +78 -0
- package/esm2020/lib/modules/tld-document/image-conversion-help/image-conversion-help.component.mjs +32 -0
- package/esm2020/lib/modules/tld-document/index.mjs +8 -0
- package/esm2020/lib/modules/tld-document/models/file-conversion-types.model.mjs +6 -0
- package/esm2020/lib/modules/tld-document/models/index.mjs +6 -0
- package/esm2020/lib/modules/tld-document/models/start-translation.model.mjs +2 -0
- package/esm2020/lib/modules/tld-document/models/translate-file.model.mjs +2 -0
- package/esm2020/lib/modules/tld-document/models/translation-statuss.model.mjs +15 -0
- package/esm2020/lib/modules/tld-document/models/upload-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-document/pdf-conversion-help/pdf-conversion-help.component.mjs +32 -0
- package/esm2020/lib/modules/tld-document/services/api/file-api.service.mjs +166 -0
- package/esm2020/lib/modules/tld-document/services/api/models/file-preview-v1-progress-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-document/services/api/models/file-preview-v1-response-body.model.mjs +2 -0
- package/esm2020/lib/modules/tld-document/services/api/models/get-file-translation-status-v1-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-document/services/api-v2/file-api-v2.service.mjs +87 -0
- package/esm2020/lib/modules/tld-document/services/api-v2/models/file-category-v2.model.mjs +6 -0
- package/esm2020/lib/modules/tld-document/services/api-v2/models/file-translation-status-v2-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-document/services/index.mjs +3 -0
- package/esm2020/lib/modules/tld-document/services/tld-translate-file.service.mjs +398 -0
- package/esm2020/lib/modules/tld-document/tld-document.module.mjs +70 -0
- package/esm2020/lib/modules/tld-document/tld-file-translate-base.component.mjs +76 -0
- package/esm2020/lib/modules/tld-document/tld-translate-file-multiple/tld-translate-file-multiple.component.mjs +94 -0
- package/esm2020/lib/modules/tld-term/index.mjs +7 -0
- package/esm2020/lib/modules/tld-term/models/converted-collection-tooltip-key.model.mjs +7 -0
- package/esm2020/lib/modules/tld-term/models/converted-collection-type.model.mjs +9 -0
- package/esm2020/lib/modules/tld-term/models/index.mjs +7 -0
- package/esm2020/lib/modules/tld-term/models/mt-api/tld-mt-term-collection.model.mjs +2 -0
- package/esm2020/lib/modules/tld-term/models/mt-collection-status.model.mjs +7 -0
- package/esm2020/lib/modules/tld-term/models/term-api/tld-term-collection-languages.model.mjs +2 -0
- package/esm2020/lib/modules/tld-term/models/term-api/tld-term-collection.model.mjs +2 -0
- package/esm2020/lib/modules/tld-term/models/tld-converted-collection.model.mjs +114 -0
- package/esm2020/lib/modules/tld-term/services/index.mjs +4 -0
- package/esm2020/lib/modules/tld-term/services/mt-collections-api.service.mjs +33 -0
- package/esm2020/lib/modules/tld-term/services/term-api.service.mjs +34 -0
- package/esm2020/lib/modules/tld-term/services/tld-term-collections.service.mjs +253 -0
- package/esm2020/lib/modules/tld-term/tld-term-collection/tld-term-collection.component.mjs +19 -0
- package/esm2020/lib/modules/tld-term/tld-term-collection-list/tld-term-collection-list.component.mjs +99 -0
- package/esm2020/lib/modules/tld-term/tld-term-create-collection-dialog/tld-term-create-collection-dialog.component.mjs +47 -0
- package/esm2020/lib/modules/tld-term/tld-term-menu/tld-term-menu.component.mjs +36 -0
- package/esm2020/lib/modules/tld-term/tld-term-promotion/tld-term-promotion.component.mjs +35 -0
- package/esm2020/lib/modules/tld-term/tld-term.module.mjs +67 -0
- package/esm2020/lib/modules/tld-text/components/highlight-tree/highlight-tree.component.mjs +109 -0
- package/esm2020/lib/modules/tld-text/components/progress-indicator/progress-indicator.component.mjs +35 -0
- package/esm2020/lib/modules/tld-text/components/textarea-with-background/textarea-with-background.component.mjs +153 -0
- package/esm2020/lib/modules/tld-text/components/tld-dictionary/tld-dictionary.component.mjs +56 -0
- package/esm2020/lib/modules/tld-text/components/tld-translate-source/tld-translate-source.component.mjs +60 -0
- package/esm2020/lib/modules/tld-text/components/tld-translate-suggest/dialog/suggest-translation.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/components/tld-translate-suggest/dialog/tld-translate-suggest-dialog.component.mjs +92 -0
- package/esm2020/lib/modules/tld-text/components/tld-translate-suggest/tld-translate-suggest.component.mjs +60 -0
- package/esm2020/lib/modules/tld-text/components/tld-translate-text/tld-translate-text.component.mjs +272 -0
- package/esm2020/lib/modules/tld-text/index.mjs +9 -0
- package/esm2020/lib/modules/tld-text/models/check-grammar-response-v2.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/dictionary.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/get-sentence-v1-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/grammar-check-base.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/grammar-check-meta.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/grammar-check-replacement.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/grammar-correction-v2.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/highlight-params.model.mjs +11 -0
- package/esm2020/lib/modules/tld-text/models/highlight-tree-type.model.mjs +12 -0
- package/esm2020/lib/modules/tld-text/models/highlight-tree.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/highlight.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/index.mjs +11 -0
- package/esm2020/lib/modules/tld-text/models/retranslate-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/source-text-changed.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/translate-paragraph-params.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/translate-paragraph-response-v1.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/translate-paragraph-response-v2.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/translate-paragraph-response.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/models/untranslated-paragraph.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/services/api/tld-translate-text-api.service.mjs +187 -0
- package/esm2020/lib/modules/tld-text/services/api-v2/tld-translate-text-api-v2.service.mjs +110 -0
- package/esm2020/lib/modules/tld-text/services/index.mjs +2 -0
- package/esm2020/lib/modules/tld-text/services/tld-translate-text.service.mjs +380 -0
- package/esm2020/lib/modules/tld-text/tld-text.module.mjs +95 -0
- package/esm2020/lib/modules/tld-text/utils/index.mjs +2 -0
- package/esm2020/lib/modules/tld-text/utils/models/existing-paragraph-info.model.mjs +2 -0
- package/esm2020/lib/modules/tld-text/utils/models/index.mjs +2 -0
- package/esm2020/lib/modules/tld-text/utils/tld-translate-text.utils.mjs +56 -0
- package/esm2020/lib/modules/tld-tooltip/index.mjs +5 -0
- package/esm2020/lib/modules/tld-tooltip/models/active-data.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/models/domain.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/models/index.mjs +5 -0
- package/esm2020/lib/modules/tld-tooltip/models/switcher-options.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/models/system-metadata-keys.model.mjs +7 -0
- package/esm2020/lib/modules/tld-tooltip/models/vendor.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api/models/description.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api/models/language.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api/models/metadata.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api/models/name.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api/models/system.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api/tld-system-api.service.mjs +57 -0
- package/esm2020/lib/modules/tld-tooltip/services/api-v2/models/error.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api-v2/models/get-langauge-direction.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api-v2/models/language-direction.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/api-v2/tld-system-api-v2.service.mjs +60 -0
- package/esm2020/lib/modules/tld-tooltip/services/index.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/services/tld-system.service.mjs +302 -0
- package/esm2020/lib/modules/tld-tooltip/tld-domain-list/tld-domain-list.component.mjs +69 -0
- package/esm2020/lib/modules/tld-tooltip/tld-tooltip.module.mjs +95 -0
- package/esm2020/lib/modules/tld-tooltip/tld-translate-switcher/tld-translate-switcher.component.mjs +188 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/dropdown/translation-system-picker-dropdown.component.mjs +179 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/dropdown-body/translation-system-picker-dropdown-body.component.mjs +209 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/filter/translation-system-picker-filter.component.mjs +48 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/index.mjs +8 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/language-list/translation-system-picker-language-list.component.mjs +31 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/dropdown-body-config.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/grouped-language-item.mjs +3 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/index.mjs +6 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/opened-menu.mjs +7 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/translated-language.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/models/translated-system.model.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/services/index.mjs +2 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/services/translation-system-picker.service.mjs +58 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/system-list/translation-system-picker-system-list.component.mjs +31 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/system-picker-button/translation-system-picker-button.component.mjs +27 -0
- package/esm2020/lib/modules/tld-tooltip/translation-system-picker/translation-system-picker.component.mjs +79 -0
- package/esm2020/lib/modules/tld-translate-file/tld-translate-file.component.mjs +65 -0
- package/esm2020/lib/modules/tld-web/index.mjs +3 -0
- package/esm2020/lib/modules/tld-web/tld-translate-web/tld-translate-web.component.mjs +499 -0
- package/esm2020/lib/modules/tld-web/tld-translate-web.service.mjs +16 -0
- package/esm2020/lib/modules/tld-web/tld-web.module.mjs +52 -0
- package/esm2020/lib/tld-translate-body/tld-translate-body.component.mjs +60 -0
- package/esm2020/lib/tld-translate.component.mjs +229 -0
- package/esm2020/lib/tld-translate.module.mjs +118 -0
- package/esm2020/public-api.mjs +43 -0
- package/esm2020/tilde-nlp-ngx-translate.mjs +5 -0
- package/fesm2015/tilde-nlp-ngx-translate.mjs +11019 -0
- package/fesm2015/tilde-nlp-ngx-translate.mjs.map +1 -0
- package/fesm2020/tilde-nlp-ngx-translate.mjs +10912 -0
- package/fesm2020/tilde-nlp-ngx-translate.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/shared/extension-dialog/components/index.d.ts +1 -0
- package/lib/components/shared/extension-dialog/components/open-extension-dialog/open-extension-dialog.component.d.ts +12 -0
- package/lib/components/shared/extension-dialog/extension-dialog.component.d.ts +15 -0
- package/lib/components/shared/extension-dialog/extension-dialog.module.d.ts +15 -0
- package/lib/components/shared/extension-dialog/index.d.ts +5 -0
- package/lib/components/shared/extension-dialog/models/enums/file-categories.enum.d.ts +7 -0
- package/lib/components/shared/extension-dialog/models/enums/file-extensions.enum.d.ts +33 -0
- package/lib/components/shared/extension-dialog/models/enums/file-type-icons.enum.d.ts +11 -0
- package/lib/components/shared/extension-dialog/models/enums/file-types.enum.d.ts +11 -0
- package/lib/components/shared/extension-dialog/models/enums/index.d.ts +4 -0
- package/lib/components/shared/extension-dialog/models/index.d.ts +2 -0
- package/lib/components/shared/extension-dialog/models/interfaces/config.d.ts +18 -0
- package/lib/components/shared/extension-dialog/models/interfaces/dialog-data.model.d.ts +3 -0
- package/lib/components/shared/extension-dialog/models/interfaces/index.d.ts +2 -0
- package/lib/components/shared/extension-dialog/services/extension-dialog.service.d.ts +9 -0
- package/lib/components/shared/extension-dialog/services/index.d.ts +1 -0
- package/lib/components/shared/text-to-speech/index.d.ts +2 -0
- package/lib/components/shared/text-to-speech/models/text-to-speech-settings.model.d.ts +23 -0
- package/lib/components/shared/text-to-speech/text-to-speech.component.d.ts +18 -0
- package/lib/components/shared/text-to-speech/text-to-speech.module.d.ts +11 -0
- package/lib/components/shared/vendor-disclaimer/vendor-disclaimer.component.d.ts +17 -0
- package/lib/components/shared/vendor-disclaimer/vendor-disclaimer.module.d.ts +9 -0
- package/lib/factories/file-api-service.factory.d.ts +7 -0
- package/lib/factories/system-service.factory.d.ts +6 -0
- package/lib/factories/text-api-service.factory.d.ts +6 -0
- package/lib/i18n/available-languages.d.ts +2 -0
- package/lib/i18n/de.d.ts +377 -0
- package/lib/i18n/en.d.ts +425 -0
- package/lib/i18n/et.d.ts +377 -0
- package/lib/i18n/fi.d.ts +382 -0
- package/lib/i18n/lt.d.ts +377 -0
- package/lib/i18n/lv.d.ts +390 -0
- package/lib/i18n/models/available-languages.model.d.ts +10 -0
- package/lib/i18n/pl.d.ts +377 -0
- package/lib/i18n/sv.d.ts +241 -0
- package/lib/injection-tokens/file-api-service.token.d.ts +1 -0
- package/lib/injection-tokens/index.d.ts +5 -0
- package/lib/injection-tokens/system-service.token.d.ts +1 -0
- package/lib/injection-tokens/text-api-service.token.d.ts +1 -0
- package/lib/injection-tokens/tld-translate-config.token.d.ts +1 -0
- package/lib/injection-tokens/translation-api-version.token.d.ts +1 -0
- package/lib/modules/material.module.d.ts +27 -0
- package/lib/modules/tld-audio/index.d.ts +3 -0
- package/lib/modules/tld-audio/models/audio-error-case.model.d.ts +11 -0
- package/lib/modules/tld-audio/models/dictate-configurationi.model.d.ts +6 -0
- package/lib/modules/tld-audio/models/index.d.ts +2 -0
- package/lib/modules/tld-audio/models/transcription-update.model.d.ts +4 -0
- package/lib/modules/tld-audio/services/audio-record.service.d.ts +35 -0
- package/lib/modules/tld-audio/services/index.d.ts +3 -0
- package/lib/modules/tld-audio/services/tld-voice-input-api.service.d.ts +16 -0
- package/lib/modules/tld-audio/services/tld-voice-input.service.d.ts +20 -0
- package/lib/modules/tld-audio/tld-audio.module.d.ts +14 -0
- package/lib/modules/tld-audio/tld-dictate/tld-dictate.component.d.ts +43 -0
- package/lib/modules/tld-audio/tld-record/tld-record.component.d.ts +32 -0
- package/lib/modules/tld-common/animations/pulse.animation.d.ts +1 -0
- package/lib/modules/tld-common/components/index.d.ts +9 -0
- package/lib/modules/tld-common/components/open-close-button/open-close-button.component.d.ts +15 -0
- package/lib/modules/tld-common/components/source-and-target-wrapper/source-and-target-wrapper.component.d.ts +19 -0
- package/lib/modules/tld-common/components/tld-file-upload/tld-file-upload.component.d.ts +28 -0
- package/lib/modules/tld-common/components/tld-lang-list/tld-lang-list.component.d.ts +52 -0
- package/lib/modules/tld-common/components/tld-list-menu/tld-list-menu.component.d.ts +24 -0
- package/lib/modules/tld-common/components/tld-loader/tld-loader.component.d.ts +5 -0
- package/lib/modules/tld-common/components/tld-message/tld-message.component.d.ts +18 -0
- package/lib/modules/tld-common/components/tld-translate-achievement/tld-translate-achievement.component.d.ts +6 -0
- package/lib/modules/tld-common/components/translate-button/tld-translate-button.service.d.ts +12 -0
- package/lib/modules/tld-common/components/translate-button/translate-button.component.d.ts +22 -0
- package/lib/modules/tld-common/directives/drag-and-drop.directive.d.ts +14 -0
- package/lib/modules/tld-common/directives/index.d.ts +1 -0
- package/lib/modules/tld-common/index.d.ts +1 -0
- package/lib/modules/tld-common/models/auth-options.model.d.ts +4 -0
- package/lib/modules/tld-common/models/common.d.ts +28 -0
- package/lib/modules/tld-common/models/configs/tld-audio-config.model.d.ts +22 -0
- package/lib/modules/tld-common/models/configs/tld-term-config.model.d.ts +27 -0
- package/lib/modules/tld-common/models/configs/tld-text-to-speech-config.model.d.ts +11 -0
- package/lib/modules/tld-common/models/configs/tld-translate-api-v2-config.model.d.ts +11 -0
- package/lib/modules/tld-common/models/configs/tld-translate-config.model.d.ts +18 -0
- package/lib/modules/tld-common/models/configs/tld-translate-core-config.model.d.ts +42 -0
- package/lib/modules/tld-common/models/configs/tld-translate-file-config.model.d.ts +25 -0
- package/lib/modules/tld-common/models/configs/tld-translate-text-config.model.d.ts +39 -0
- package/lib/modules/tld-common/models/configs/tld-translate-web-config.model.d.ts +10 -0
- package/lib/modules/tld-common/models/core/index.d.ts +2 -0
- package/lib/modules/tld-common/models/core/language-menu-version.enum.d.ts +4 -0
- package/lib/modules/tld-common/models/core/translation-api-version.model.d.ts +4 -0
- package/lib/modules/tld-common/models/errors/error-codes.enum.d.ts +21 -0
- package/lib/modules/tld-common/models/errors/error-codes.type.d.ts +4 -0
- package/lib/modules/tld-common/models/errors/error.model.d.ts +3 -0
- package/lib/modules/tld-common/models/file-upload.model.d.ts +13 -0
- package/lib/modules/tld-common/models/index.d.ts +21 -0
- package/lib/modules/tld-common/models/lang-list-item.model.d.ts +6 -0
- package/lib/modules/tld-common/models/language-with-translation.model.d.ts +6 -0
- package/lib/modules/tld-common/models/message.model.d.ts +11 -0
- package/lib/modules/tld-common/models/selected-language.model.d.ts +4 -0
- package/lib/modules/tld-common/models/services/file-api/download-file-params.model.d.ts +5 -0
- package/lib/modules/tld-common/models/services/file-api/file-api-service.model.d.ts +17 -0
- package/lib/modules/tld-common/models/services/file-api/file-meta.model.d.ts +8 -0
- package/lib/modules/tld-common/models/services/file-api/file-translation-substatus.model.d.ts +7 -0
- package/lib/modules/tld-common/models/services/file-api/get-file-status-params.model.d.ts +6 -0
- package/lib/modules/tld-common/models/services/file-api/get-file-translation-status-response.model.d.ts +13 -0
- package/lib/modules/tld-common/models/services/file-api/remove-file-params.model.d.ts +4 -0
- package/lib/modules/tld-common/models/services/file-api/source-file-preview-response.model.d.ts +8 -0
- package/lib/modules/tld-common/models/services/file-api/start-file-translation-params.model.d.ts +6 -0
- package/lib/modules/tld-common/models/services/file-api/translated-document-preview-params.model.d.ts +4 -0
- package/lib/modules/tld-common/models/services/index.d.ts +18 -0
- package/lib/modules/tld-common/models/services/system/system.model.d.ts +17 -0
- package/lib/modules/tld-common/models/services/system/tld-system-api-service.model.d.ts +5 -0
- package/lib/modules/tld-common/models/services/text-api/check-grammar-response.model.d.ts +6 -0
- package/lib/modules/tld-common/models/services/text-api/tld-translate-text-api-service.model.d.ts +26 -0
- package/lib/modules/tld-common/models/services/text-api/translate-paragraph-request-params.model.d.ts +6 -0
- package/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-job-state.model.d.ts +5 -0
- package/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-job.model.d.ts +21 -0
- package/lib/modules/tld-common/models/services/voice-to-text/voice-to-text-start-job-request-params.model.d.ts +7 -0
- package/lib/modules/tld-common/pipes/index.d.ts +1 -0
- package/lib/modules/tld-common/pipes/translate-domain.pipe.d.ts +13 -0
- package/lib/modules/tld-common/services/icon-service/icon.service.d.ts +12 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/excel.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/index.d.ts +9 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/interchange.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/office-other.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/other.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/pdf.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/powerpoint.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/scanned.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/web.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons/file-types/word.icon.d.ts +1 -0
- package/lib/modules/tld-common/services/icon-service/icons.d.ts +3 -0
- package/lib/modules/tld-common/services/index.d.ts +4 -0
- package/lib/modules/tld-common/services/scroll/tld-scroll.service.d.ts +12 -0
- package/lib/modules/tld-common/services/tld-alert.service.d.ts +33 -0
- package/lib/modules/tld-common/services/tld-highlight.service.d.ts +14 -0
- package/lib/modules/tld-common/services/tld-translate-config.service.d.ts +39 -0
- package/lib/modules/tld-common/services/wtw-link-params.service.d.ts +13 -0
- package/lib/modules/tld-common/tld-common.module.d.ts +23 -0
- package/lib/modules/tld-document/download-button/download-button.component.d.ts +30 -0
- package/lib/modules/tld-document/image-conversion-help/image-conversion-help.component.d.ts +21 -0
- package/lib/modules/tld-document/index.d.ts +7 -0
- package/lib/modules/tld-document/models/file-conversion-types.model.d.ts +4 -0
- package/lib/modules/tld-document/models/index.d.ts +5 -0
- package/lib/modules/tld-document/models/start-translation.model.d.ts +16 -0
- package/lib/modules/tld-document/models/translate-file.model.d.ts +33 -0
- package/lib/modules/tld-document/models/translation-statuss.model.d.ts +12 -0
- package/lib/modules/tld-document/models/upload-response.model.d.ts +8 -0
- package/lib/modules/tld-document/pdf-conversion-help/pdf-conversion-help.component.d.ts +21 -0
- package/lib/modules/tld-document/services/api/file-api.service.d.ts +26 -0
- package/lib/modules/tld-document/services/api/models/file-preview-v1-progress-response.model.d.ts +6 -0
- package/lib/modules/tld-document/services/api/models/file-preview-v1-response-body.model.d.ts +8 -0
- package/lib/modules/tld-document/services/api/models/get-file-translation-status-v1-response.model.d.ts +11 -0
- package/lib/modules/tld-document/services/api-v2/file-api-v2.service.d.ts +22 -0
- package/lib/modules/tld-document/services/api-v2/models/file-category-v2.model.d.ts +4 -0
- package/lib/modules/tld-document/services/api-v2/models/file-translation-status-v2-response.model.d.ts +20 -0
- package/lib/modules/tld-document/services/index.d.ts +2 -0
- package/lib/modules/tld-document/services/tld-translate-file.service.d.ts +60 -0
- package/lib/modules/tld-document/tld-document.module.d.ts +19 -0
- package/lib/modules/tld-document/tld-file-translate-base.component.d.ts +29 -0
- package/lib/modules/tld-document/tld-translate-file-multiple/tld-translate-file-multiple.component.d.ts +40 -0
- package/lib/modules/tld-term/index.d.ts +6 -0
- package/lib/modules/tld-term/models/converted-collection-tooltip-key.model.d.ts +5 -0
- package/lib/modules/tld-term/models/converted-collection-type.model.d.ts +7 -0
- package/lib/modules/tld-term/models/index.d.ts +6 -0
- package/lib/modules/tld-term/models/mt-api/tld-mt-term-collection.model.d.ts +15 -0
- package/lib/modules/tld-term/models/mt-collection-status.model.d.ts +5 -0
- package/lib/modules/tld-term/models/term-api/tld-term-collection-languages.model.d.ts +11 -0
- package/lib/modules/tld-term/models/term-api/tld-term-collection.model.d.ts +46 -0
- package/lib/modules/tld-term/models/tld-converted-collection.model.d.ts +43 -0
- package/lib/modules/tld-term/services/index.d.ts +3 -0
- package/lib/modules/tld-term/services/mt-collections-api.service.d.ts +13 -0
- package/lib/modules/tld-term/services/term-api.service.d.ts +15 -0
- package/lib/modules/tld-term/services/tld-term-collections.service.d.ts +57 -0
- package/lib/modules/tld-term/tld-term-collection/tld-term-collection.component.d.ts +9 -0
- package/lib/modules/tld-term/tld-term-collection-list/tld-term-collection-list.component.d.ts +39 -0
- package/lib/modules/tld-term/tld-term-create-collection-dialog/tld-term-create-collection-dialog.component.d.ts +20 -0
- package/lib/modules/tld-term/tld-term-menu/tld-term-menu.component.d.ts +13 -0
- package/lib/modules/tld-term/tld-term-promotion/tld-term-promotion.component.d.ts +17 -0
- package/lib/modules/tld-term/tld-term.module.d.ts +22 -0
- package/lib/modules/tld-text/components/highlight-tree/highlight-tree.component.d.ts +27 -0
- package/lib/modules/tld-text/components/progress-indicator/progress-indicator.component.d.ts +20 -0
- package/lib/modules/tld-text/components/textarea-with-background/textarea-with-background.component.d.ts +40 -0
- package/lib/modules/tld-text/components/tld-dictionary/tld-dictionary.component.d.ts +24 -0
- package/lib/modules/tld-text/components/tld-translate-source/tld-translate-source.component.d.ts +36 -0
- package/lib/modules/tld-text/components/tld-translate-suggest/dialog/suggest-translation.model.d.ts +11 -0
- package/lib/modules/tld-text/components/tld-translate-suggest/dialog/tld-translate-suggest-dialog.component.d.ts +33 -0
- package/lib/modules/tld-text/components/tld-translate-suggest/tld-translate-suggest.component.d.ts +24 -0
- package/lib/modules/tld-text/components/tld-translate-text/tld-translate-text.component.d.ts +104 -0
- package/lib/modules/tld-text/index.d.ts +8 -0
- package/lib/modules/tld-text/models/check-grammar-response-v2.model.d.ts +4 -0
- package/lib/modules/tld-text/models/dictionary.model.d.ts +28 -0
- package/lib/modules/tld-text/models/get-sentence-v1-response.model.d.ts +5 -0
- package/lib/modules/tld-text/models/grammar-check-base.model.d.ts +6 -0
- package/lib/modules/tld-text/models/grammar-check-meta.model.d.ts +5 -0
- package/lib/modules/tld-text/models/grammar-check-replacement.model.d.ts +5 -0
- package/lib/modules/tld-text/models/grammar-correction-v2.model.d.ts +9 -0
- package/lib/modules/tld-text/models/highlight-params.model.d.ts +10 -0
- package/lib/modules/tld-text/models/highlight-tree-type.model.d.ts +10 -0
- package/lib/modules/tld-text/models/highlight-tree.model.d.ts +22 -0
- package/lib/modules/tld-text/models/highlight.model.d.ts +10 -0
- package/lib/modules/tld-text/models/index.d.ts +10 -0
- package/lib/modules/tld-text/models/retranslate-params.model.d.ts +4 -0
- package/lib/modules/tld-text/models/source-text-changed.model.d.ts +6 -0
- package/lib/modules/tld-text/models/translate-paragraph-params.model.d.ts +6 -0
- package/lib/modules/tld-text/models/translate-paragraph-response-v1.model.d.ts +15 -0
- package/lib/modules/tld-text/models/translate-paragraph-response-v2.model.d.ts +9 -0
- package/lib/modules/tld-text/models/translate-paragraph-response.model.d.ts +7 -0
- package/lib/modules/tld-text/models/untranslated-paragraph.model.d.ts +4 -0
- package/lib/modules/tld-text/services/api/tld-translate-text-api.service.d.ts +24 -0
- package/lib/modules/tld-text/services/api-v2/tld-translate-text-api-v2.service.d.ts +17 -0
- package/lib/modules/tld-text/services/index.d.ts +1 -0
- package/lib/modules/tld-text/services/tld-translate-text.service.d.ts +104 -0
- package/lib/modules/tld-text/tld-text.module.d.ts +27 -0
- package/lib/modules/tld-text/utils/index.d.ts +1 -0
- package/lib/modules/tld-text/utils/models/existing-paragraph-info.model.d.ts +5 -0
- package/lib/modules/tld-text/utils/models/index.d.ts +1 -0
- package/lib/modules/tld-text/utils/tld-translate-text.utils.d.ts +9 -0
- package/lib/modules/tld-tooltip/index.d.ts +4 -0
- package/lib/modules/tld-tooltip/models/active-data.model.d.ts +24 -0
- package/lib/modules/tld-tooltip/models/domain.model.d.ts +8 -0
- package/lib/modules/tld-tooltip/models/index.d.ts +4 -0
- package/lib/modules/tld-tooltip/models/switcher-options.model.d.ts +14 -0
- package/lib/modules/tld-tooltip/models/system-metadata-keys.model.d.ts +5 -0
- package/lib/modules/tld-tooltip/models/vendor.model.d.ts +4 -0
- package/lib/modules/tld-tooltip/services/api/models/description.model.d.ts +4 -0
- package/lib/modules/tld-tooltip/services/api/models/language.model.d.ts +5 -0
- package/lib/modules/tld-tooltip/services/api/models/metadata.model.d.ts +4 -0
- package/lib/modules/tld-tooltip/services/api/models/name.model.d.ts +4 -0
- package/lib/modules/tld-tooltip/services/api/models/system.model.d.ts +14 -0
- package/lib/modules/tld-tooltip/services/api/tld-system-api.service.d.ts +15 -0
- package/lib/modules/tld-tooltip/services/api-v2/models/error.model.d.ts +4 -0
- package/lib/modules/tld-tooltip/services/api-v2/models/get-langauge-direction.d.ts +6 -0
- package/lib/modules/tld-tooltip/services/api-v2/models/language-direction.model.d.ts +7 -0
- package/lib/modules/tld-tooltip/services/api-v2/tld-system-api-v2.service.d.ts +15 -0
- package/lib/modules/tld-tooltip/services/index.d.ts +1 -0
- package/lib/modules/tld-tooltip/services/tld-system.service.d.ts +57 -0
- package/lib/modules/tld-tooltip/tld-domain-list/tld-domain-list.component.d.ts +33 -0
- package/lib/modules/tld-tooltip/tld-tooltip.module.d.ts +25 -0
- package/lib/modules/tld-tooltip/tld-translate-switcher/tld-translate-switcher.component.d.ts +64 -0
- package/lib/modules/tld-tooltip/translation-system-picker/dropdown/translation-system-picker-dropdown.component.d.ts +44 -0
- package/lib/modules/tld-tooltip/translation-system-picker/dropdown-body/translation-system-picker-dropdown-body.component.d.ts +65 -0
- package/lib/modules/tld-tooltip/translation-system-picker/filter/translation-system-picker-filter.component.d.ts +17 -0
- package/lib/modules/tld-tooltip/translation-system-picker/index.d.ts +7 -0
- package/lib/modules/tld-tooltip/translation-system-picker/language-list/translation-system-picker-language-list.component.d.ts +14 -0
- package/lib/modules/tld-tooltip/translation-system-picker/models/dropdown-body-config.model.d.ts +11 -0
- package/lib/modules/tld-tooltip/translation-system-picker/models/grouped-language-item.d.ts +8 -0
- package/lib/modules/tld-tooltip/translation-system-picker/models/index.d.ts +5 -0
- package/lib/modules/tld-tooltip/translation-system-picker/models/opened-menu.d.ts +5 -0
- package/lib/modules/tld-tooltip/translation-system-picker/models/translated-language.model.d.ts +4 -0
- package/lib/modules/tld-tooltip/translation-system-picker/models/translated-system.model.d.ts +4 -0
- package/lib/modules/tld-tooltip/translation-system-picker/services/index.d.ts +1 -0
- package/lib/modules/tld-tooltip/translation-system-picker/services/translation-system-picker.service.d.ts +24 -0
- package/lib/modules/tld-tooltip/translation-system-picker/system-list/translation-system-picker-system-list.component.d.ts +13 -0
- package/lib/modules/tld-tooltip/translation-system-picker/system-picker-button/translation-system-picker-button.component.d.ts +10 -0
- package/lib/modules/tld-tooltip/translation-system-picker/translation-system-picker.component.d.ts +34 -0
- package/lib/modules/tld-translate-file/tld-translate-file.component.d.ts +37 -0
- package/lib/modules/tld-web/index.d.ts +2 -0
- package/lib/modules/tld-web/tld-translate-web/tld-translate-web.component.d.ts +85 -0
- package/lib/modules/tld-web/tld-translate-web.service.d.ts +7 -0
- package/lib/modules/tld-web/tld-web.module.d.ts +14 -0
- package/lib/tld-translate-body/tld-translate-body.component.d.ts +23 -0
- package/lib/tld-translate.component.d.ts +65 -0
- package/lib/tld-translate.module.d.ts +23 -0
- package/package.json +40 -0
- package/public-api.d.ts +28 -0
- package/src/assets/webcomponent/styles.css +1 -0
- package/src/assets/webcomponent/tld-translate.js +3 -0
- package/src/assets/webtranslate/page-translate-widget.js +4934 -0
- package/src/assets/webtranslate/remove.png +0 -0
- package/src/assets/webtranslate/tilde_logo.png +0 -0
- package/src/assets/webtranslate/translate-website.js +393 -0
- package/src/assets/webtranslate/widget.css +139 -0
- package/src/styles/colors.scss +15 -0
- package/src/styles/fonts.scss +3 -0
- package/src/styles/mixin/border-default.scss +10 -0
- package/src/styles/mixin/tld-translate-accent-colors.scss +46 -0
- package/src/styles/mixin/tld-translate-colors.scss +7 -0
- package/src/styles/mixin/tld-translate-placeholders.scss +5 -0
- package/src/styles/mixin/tld-translate-primary-colors.scss +5 -0
- package/src/styles/styles.scss +377 -0
- package/src/styles/translator-borders.scss +28 -0
- package/tilde-nlp-ngx-translate-1.0.0.tgz +0 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { EventEmitter, Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { AudioErrorCase } from '../models/audio-error-case.model';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AudioRecordService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.defaultBlobType = "audio/wav";
|
|
8
|
+
this.chunks = [];
|
|
9
|
+
this.recorderEnded = new EventEmitter();
|
|
10
|
+
this._onRecordingStatusChange = new Subject();
|
|
11
|
+
this._onRecordStart = new Subject();
|
|
12
|
+
this._onError = new Subject();
|
|
13
|
+
this.appendToChunks = (event) => {
|
|
14
|
+
this.chunks.push(event.data);
|
|
15
|
+
this.currentFileSizeBytes += event.data.size;
|
|
16
|
+
if (this.recorder.state !== "inactive") {
|
|
17
|
+
if (this.maxFileSizeBytes && this.maxFileSizeBytes < this.currentFileSizeBytes) {
|
|
18
|
+
this.throwError(AudioErrorCase.MAX_SIZE_EXCEEDED);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
this.recordingStopped = () => {
|
|
23
|
+
const blob = new Blob(this.chunks, { type: this.blobType ?? this.defaultBlobType });
|
|
24
|
+
this.blobType = null;
|
|
25
|
+
this.chunks = [];
|
|
26
|
+
this.recorderEnded.emit(blob);
|
|
27
|
+
this.clear();
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
get recordTimeDate() { return this._recordTimeDate; }
|
|
31
|
+
get onRecordingStatusChange() { return this._onRecordingStatusChange.asObservable(); }
|
|
32
|
+
get onRecordStart() { return this._onRecordStart.asObservable(); }
|
|
33
|
+
get onError() { return this._onError.asObservable(); }
|
|
34
|
+
get isRecording() { return this._isRecording; }
|
|
35
|
+
static guc() {
|
|
36
|
+
return navigator.mediaDevices.getUserMedia({ audio: true });
|
|
37
|
+
}
|
|
38
|
+
getUserContent() {
|
|
39
|
+
return AudioRecordService.guc();
|
|
40
|
+
}
|
|
41
|
+
startRecording(dataUpdateTimeFrame, maxFileSizeInBytes, type) {
|
|
42
|
+
this.currentFileSizeBytes = 0;
|
|
43
|
+
this.maxFileSizeBytes = maxFileSizeInBytes;
|
|
44
|
+
this._recordTimeDate = new Date(0, 0, 0, 0, 0, 0);
|
|
45
|
+
this.blobType = type;
|
|
46
|
+
if (this._isRecording) {
|
|
47
|
+
this.throwError(AudioErrorCase.ALREADY_RECORDING);
|
|
48
|
+
}
|
|
49
|
+
AudioRecordService.guc().then((mediaStream) => {
|
|
50
|
+
this._onRecordStart.next(null);
|
|
51
|
+
this.recordTimeSeconds = 0;
|
|
52
|
+
this.recorder = new MediaRecorder(mediaStream);
|
|
53
|
+
this.addListeners();
|
|
54
|
+
this.recorder.start(dataUpdateTimeFrame);
|
|
55
|
+
this.timerRef = setInterval(() => {
|
|
56
|
+
this.recordTimeSeconds++;
|
|
57
|
+
// New date every time, so that angular date pipe updates in ui
|
|
58
|
+
this._recordTimeDate = new Date(0, 0, 0, 0, 0, this.recordTimeSeconds);
|
|
59
|
+
}, 1000);
|
|
60
|
+
this.toggleRecordingStatus(true);
|
|
61
|
+
}).catch((error) => {
|
|
62
|
+
if (error.name === "NotAllowedError") {
|
|
63
|
+
this.throwError(AudioErrorCase.MIC_NOT_ALLOWED);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.throwError(AudioErrorCase.CANT_START_RECORDING);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
;
|
|
70
|
+
}
|
|
71
|
+
stopRecording() {
|
|
72
|
+
return new Promise((resolve, reject) => {
|
|
73
|
+
this.recorderEnded.subscribe((blob) => {
|
|
74
|
+
this.toggleRecordingStatus(false);
|
|
75
|
+
if (this.timerRef) {
|
|
76
|
+
clearInterval(this.timerRef);
|
|
77
|
+
}
|
|
78
|
+
resolve(blob);
|
|
79
|
+
}, _ => {
|
|
80
|
+
this.throwError(AudioErrorCase.RECORDER_TIMEOUT);
|
|
81
|
+
reject(AudioErrorCase.RECORDER_TIMEOUT);
|
|
82
|
+
});
|
|
83
|
+
this.recorder.stop();
|
|
84
|
+
}).catch(() => {
|
|
85
|
+
this.throwError(AudioErrorCase.USER_CONSENT_FAILED);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
addListeners() {
|
|
89
|
+
this.recorder.addEventListener('dataavailable', event => {
|
|
90
|
+
this.appendToChunks(event);
|
|
91
|
+
});
|
|
92
|
+
this.recorder.addEventListener('stop', () => {
|
|
93
|
+
this.recordingStopped();
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
clear() {
|
|
97
|
+
this.recorder = null;
|
|
98
|
+
this.chunks = [];
|
|
99
|
+
}
|
|
100
|
+
toggleRecordingStatus(isRecording) {
|
|
101
|
+
this._isRecording = isRecording;
|
|
102
|
+
this._onRecordingStatusChange.next(this._isRecording);
|
|
103
|
+
}
|
|
104
|
+
throwError(code) {
|
|
105
|
+
this._onError.next(code);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
AudioRecordService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecordService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
109
|
+
AudioRecordService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecordService, providedIn: 'root' });
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecordService, decorators: [{
|
|
111
|
+
type: Injectable,
|
|
112
|
+
args: [{
|
|
113
|
+
providedIn: 'root'
|
|
114
|
+
}]
|
|
115
|
+
}] });
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8tcmVjb3JkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtYXVkaW8vc2VydmljZXMvYXVkaW8tcmVjb3JkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBT2xFLE1BQU0sT0FBTyxrQkFBa0I7SUFIL0I7UUFLbUIsb0JBQWUsR0FBRyxXQUFXLENBQUM7UUFDdkMsV0FBTSxHQUFlLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFVckMsNkJBQXdCLEdBQXFCLElBQUksT0FBTyxFQUFFLENBQUM7UUFHM0QsbUJBQWMsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUc3QyxhQUFRLEdBQWlCLElBQUksT0FBTyxFQUFFLENBQUM7UUE2RXZDLG1CQUFjLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBRTdDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO2dCQUN0QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFO29CQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIs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LEVBQUU7WUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFxQk8sS0FBSztRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxXQUFvQjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUNoQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQW9CO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7OytHQWhJVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBdWRpb0Vycm9yQ2FzZSB9IGZyb20gJy4uL21vZGVscy9hdWRpby1lcnJvci1jYXNlLm1vZGVsJztcclxuXHJcbmRlY2xhcmUgdmFyIE1lZGlhUmVjb3JkZXI6IGFueTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGlvUmVjb3JkU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBibG9iVHlwZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEJsb2JUeXBlID0gXCJhdWRpby93YXZcIjtcclxuICBwcml2YXRlIGNodW5rczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHByb3RlY3RlZCByZWNvcmRlckVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHByaXZhdGUgcmVjb3JkZXI6IGFueTtcclxuICAvL05vZGVKcy5UaW1lb3V0P1xyXG4gIHByaXZhdGUgdGltZXJSZWY6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSByZWNvcmRUaW1lU2Vjb25kczogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIF9yZWNvcmRUaW1lRGF0ZTogRGF0ZTtcclxuICBnZXQgcmVjb3JkVGltZURhdGUoKSB7IHJldHVybiB0aGlzLl9yZWNvcmRUaW1lRGF0ZTsgfVxyXG5cclxuICBwcml2YXRlIF9vblJlY29yZGluZ1N0YXR1c0NoYW5nZTogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZ2V0IG9uUmVjb3JkaW5nU3RhdHVzQ2hhbmdlKCkgeyByZXR1cm4gdGhpcy5fb25SZWNvcmRpbmdTdGF0dXNDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfb25SZWNvcmRTdGFydDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgb25SZWNvcmRTdGFydCgpIHsgcmV0dXJuIHRoaXMuX29uUmVjb3JkU3RhcnQuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfb25FcnJvcjogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgb25FcnJvcigpIHsgcmV0dXJuIHRoaXMuX29uRXJyb3IuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgZ2V0IGlzUmVjb3JkaW5nKCkgeyByZXR1cm4gdGhpcy5faXNSZWNvcmRpbmc7IH1cclxuICBwcml2YXRlIF9pc1JlY29yZGluZzogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ3VjKCkge1xyXG4gICAgcmV0dXJuIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1heEZpbGVTaXplQnl0ZXM6IG51bWJlcjtcclxuICBwcml2YXRlIGN1cnJlbnRGaWxlU2l6ZUJ5dGVzOiBudW1iZXI7XHJcblxyXG4gIGdldFVzZXJDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIEF1ZGlvUmVjb3JkU2VydmljZS5ndWMoKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0UmVjb3JkaW5nKGRhdGFVcGRhdGVUaW1lRnJhbWU6IG51bWJlciwgbWF4RmlsZVNpemVJbkJ5dGVzOiBudW1iZXIsIHR5cGU/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY3VycmVudEZpbGVTaXplQnl0ZXMgPSAwO1xyXG4gICAgdGhpcy5tYXhGaWxlU2l6ZUJ5dGVzID0gbWF4RmlsZVNpemVJbkJ5dGVzO1xyXG4gICAgdGhpcy5fcmVjb3JkVGltZURhdGUgPSBuZXcgRGF0ZSgwLCAwLCAwLCAwLCAwLCAwKTtcclxuICAgIHRoaXMuYmxvYlR5cGUgPSB0eXBlO1xyXG4gICAgaWYgKHRoaXMuX2lzUmVjb3JkaW5nKSB7XHJcbiAgICAgIHRoaXMudGhyb3dFcnJvcihBdWRpb0Vycm9yQ2FzZS5BTFJFQURZX1JFQ09SRElORyk7XHJcbiAgICB9XHJcblxyXG4gICAgQXVkaW9SZWNvcmRTZXJ2aWNlLmd1YygpLnRoZW4oKG1lZGlhU3RyZWFtKSA9PiB7XHJcbiAgICAgIHRoaXMuX29uUmVjb3JkU3RhcnQubmV4dChudWxsKVxyXG4gICAgICB0aGlzLnJlY29yZFRpbWVTZWNvbmRzID0gMDtcclxuICAgICAgdGhpcy5yZWNvcmRlciA9IG5ldyBNZWRpYVJlY29yZGVyKG1lZGlhU3RyZWFtKTtcclxuICAgICAgdGhpcy5hZGRMaXN0ZW5lcnMoKTtcclxuICAgICAgdGhpcy5yZWNvcmRlci5zdGFydChkYXRhVXBkYXRlVGltZUZyYW1lKTtcclxuICAgICAgdGhpcy50aW1lclJlZiA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlY29yZFRpbWVTZWNvbmRzKys7XHJcbiAgICAgICAgLy8gTmV3IGRhdGUgZXZlcnkgdGltZSwgc28gdGhhdCBhbmd1bGFyIGRhdGUgcGlwZSB1cGRhdGVzIGluIHVpXHJcbiAgICAgICAgdGhpcy5fcmVjb3JkVGltZURhdGUgPSBuZXcgRGF0ZSgwLCAwLCAwLCAwLCAwLCB0aGlzLnJlY29yZFRpbWVTZWNvbmRzKTtcclxuICAgICAgfSwgMTAwMClcclxuXHJcbiAgICAgIHRoaXMudG9nZ2xlUmVjb3JkaW5nU3RhdHVzKHRydWUpO1xyXG4gICAgfSkuY2F0Y2goKGVycm9yOiBET01FeGNlcHRpb24pID0+IHtcclxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiTm90QWxsb3dlZEVycm9yXCIpIHtcclxuICAgICAgICB0aGlzLnRocm93RXJyb3IoQXVkaW9FcnJvckNhc2UuTUlDX05PVF9BTExPV0VEKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRocm93RXJyb3IoQXVkaW9FcnJvckNhc2UuQ0FOVF9TVEFSVF9SRUNPUkRJTkcpO1xyXG4gICAgICB9XHJcbiAgICB9KTs7XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nKCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5yZWNvcmRlckVuZGVkLnN1YnNjcmliZSgoYmxvYikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlUmVjb3JkaW5nU3RhdHVzKGZhbHNlKTtcclxuICAgICAgICBpZiAodGhpcy50aW1lclJlZikge1xyXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyUmVmKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZShibG9iKTtcclxuICAgICAgfSwgXyA9PiB7XHJcbiAgICAgICAgdGhpcy50aHJvd0Vycm9yKEF1ZGlvRXJyb3JDYXNlLlJFQ09SREVSX1RJTUVPVVQpO1xyXG4gICAgICAgIHJlamVjdChBdWRpb0Vycm9yQ2FzZS5SRUNPUkRFUl9USU1FT1VUKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVjb3JkZXIuc3RvcCgpO1xyXG4gICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICB0aGlzLnRocm93RXJyb3IoQXVkaW9FcnJvckNhc2UuVVNFUl9DT05TRU5UX0ZBSUxFRCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkTGlzdGVuZXJzKCkge1xyXG4gICAgdGhpcy5yZWNvcmRlci5hZGRFdmVudExpc3RlbmVyKCdkYXRhYXZhaWxhYmxlJywgZXZlbnQgPT4ge1xyXG4gICAgICB0aGlzLmFwcGVuZFRvQ2h1bmtzKGV2ZW50KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVjb3JkZXIuYWRkRXZlbnRMaXN0ZW5lcignc3RvcCcsICgpID0+IHtcclxuICAgICAgdGhpcy5yZWNvcmRpbmdTdG9wcGVkKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwZW5kVG9DaHVua3MgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5jaHVua3MucHVzaChldmVudC5kYXRhKTtcclxuICAgIHRoaXMuY3VycmVudEZpbGVTaXplQnl0ZXMgKz0gZXZlbnQuZGF0YS5zaXplO1xyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZGVyLnN0YXRlICE9PSBcImluYWN0aXZlXCIpIHtcclxuICAgICAgaWYgKHRoaXMubWF4RmlsZVNpemVCeXRlcyAmJiB0aGlzLm1heEZpbGVTaXplQnl0ZXMgPCB0aGlzLmN1cnJlbnRGaWxlU2l6ZUJ5dGVzKSB7XHJcbiAgICAgICAgdGhpcy50aHJvd0Vycm9yKEF1ZGlvRXJyb3JDYXNlLk1BWF9TSVpFX0VYQ0VFREVEKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgcmVjb3JkaW5nU3RvcHBlZCA9ICgpID0+IHtcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYih0aGlzLmNodW5rcywgeyB0eXBlOiB0aGlzLmJsb2JUeXBlID8/IHRoaXMuZGVmYXVsdEJsb2JUeXBlIH0pO1xyXG4gICAgdGhpcy5ibG9iVHlwZSA9IG51bGw7XHJcbiAgICB0aGlzLmNodW5rcyA9IFtdO1xyXG4gICAgdGhpcy5yZWNvcmRlckVuZGVkLmVtaXQoYmxvYik7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBjbGVhcigpIHtcclxuICAgIHRoaXMucmVjb3JkZXIgPSBudWxsO1xyXG4gICAgdGhpcy5jaHVua3MgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlUmVjb3JkaW5nU3RhdHVzKGlzUmVjb3JkaW5nOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc1JlY29yZGluZyA9IGlzUmVjb3JkaW5nO1xyXG4gICAgdGhpcy5fb25SZWNvcmRpbmdTdGF0dXNDaGFuZ2UubmV4dCh0aGlzLl9pc1JlY29yZGluZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRocm93RXJyb3IoY29kZTogQXVkaW9FcnJvckNhc2UpIHtcclxuICAgIHRoaXMuX29uRXJyb3IubmV4dChjb2RlKTtcclxuICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './tld-voice-input-api.service';
|
|
2
|
+
export * from './tld-voice-input.service';
|
|
3
|
+
export * from './audio-record.service';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtYXVkaW8vc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RsZC12b2ljZS1pbnB1dC1hcGkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdGxkLXZvaWNlLWlucHV0LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F1ZGlvLXJlY29yZC5zZXJ2aWNlJzsiXX0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
import * as i2 from "../../tld-common/services";
|
|
6
|
+
export class TldVoiceInputApiService {
|
|
7
|
+
constructor(http, config) {
|
|
8
|
+
this.http = http;
|
|
9
|
+
this.config = config;
|
|
10
|
+
}
|
|
11
|
+
get audioConfig() { return this.config.audioConfig; }
|
|
12
|
+
startJob(params) {
|
|
13
|
+
if (!this.audioConfig.audioApiUrl) {
|
|
14
|
+
console.error("Speech API url not defined");
|
|
15
|
+
throw null;
|
|
16
|
+
}
|
|
17
|
+
const formData = new FormData();
|
|
18
|
+
formData.append("file", params.file);
|
|
19
|
+
formData.append("langauge", params.language);
|
|
20
|
+
return this.http.post(this.audioConfig.audioApiUrl, formData).pipe(map(response => this.mapJob(response)));
|
|
21
|
+
}
|
|
22
|
+
getJobInfo(jobId) {
|
|
23
|
+
return this.http.get(`${this.audioConfig.audioApiUrl}/${jobId}`).pipe(map(response => this.mapJob(response)));
|
|
24
|
+
}
|
|
25
|
+
mapJob(response) {
|
|
26
|
+
// converts to VoiceToTextState, so it suits enum conventions.
|
|
27
|
+
const state = response.state.toUpperCase().replace(/ /g, "_");
|
|
28
|
+
return {
|
|
29
|
+
createdAt: new Date(response.created_at),
|
|
30
|
+
fileName: response.file_name,
|
|
31
|
+
jobId: response.job_id,
|
|
32
|
+
language: response.language,
|
|
33
|
+
state,
|
|
34
|
+
updatedAt: new Date(response.updated_at),
|
|
35
|
+
errorMessage: response.error_message,
|
|
36
|
+
transcription: response.transcription
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
TldVoiceInputApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldVoiceInputApiService, deps: [{ token: i1.HttpClient }, { token: i2.TldTranslateConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
41
|
+
TldVoiceInputApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldVoiceInputApiService, providedIn: 'root' });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldVoiceInputApiService, decorators: [{
|
|
43
|
+
type: Injectable,
|
|
44
|
+
args: [{
|
|
45
|
+
providedIn: 'root'
|
|
46
|
+
}]
|
|
47
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.TldTranslateConfigService }]; } });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXZvaWNlLWlucHV0LWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLWF1ZGlvL3NlcnZpY2VzL3RsZC12b2ljZS1pbnB1dC1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU9yQyxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQTZCLElBQWdCLEVBQzFCLE1BQWlDO1FBRHZCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7SUFBSSxDQUFDO0lBSHpELElBQVksV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBSzdELFFBQVEsQ0FBQyxNQUF5QztRQUVoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sSUFBSSxDQUFDO1NBQ1o7UUFFRCxNQUFNLFFBQVEsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUMvRixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ3ZDLENBQUE7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZ0MsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDbEcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUdPLE1BQU0sQ0FBQyxRQUF1QztRQUNwRCw4REFBOEQ7UUFDOUQsTUFBTSxLQUFLLEdBQVEsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxRQUFRLEVBQUUsUUFBUSxDQUFDLFNBQVM7WUFDNUIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3RCLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtZQUMzQixLQUFLO1lBQ0wsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDeEMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxhQUFhO1lBQ3BDLGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYTtTQUN0QyxDQUFDO0lBQ0osQ0FBQzs7b0hBMUNVLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElWb2ljZVRvVGV4dEpvYiwgSVZvaWNlVG9UZXh0Sm9iU2VydmVyUmVzcG9uc2UsIElWb2ljZVRvVGV4dFN0YXJ0Sm9iUmVxdWVzdFBhcmFtcyB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVm9pY2VJbnB1dEFwaVNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIGdldCBhdWRpb0NvbmZpZygpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnOyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlKSB7IH1cclxuXHJcbiAgc3RhcnRKb2IocGFyYW1zOiBJVm9pY2VUb1RleHRTdGFydEpvYlJlcXVlc3RQYXJhbXMpOiBPYnNlcnZhYmxlPElWb2ljZVRvVGV4dEpvYj4ge1xyXG5cclxuICAgIGlmICghdGhpcy5hdWRpb0NvbmZpZy5hdWRpb0FwaVVybCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiU3BlZWNoIEFQSSB1cmwgbm90IGRlZmluZWRcIik7XHJcbiAgICAgIHRocm93IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIHBhcmFtcy5maWxlKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZChcImxhbmdhdWdlXCIsIHBhcmFtcy5sYW5ndWFnZSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SVZvaWNlVG9UZXh0Sm9iU2VydmVyUmVzcG9uc2U+KHRoaXMuYXVkaW9Db25maWcuYXVkaW9BcGlVcmwsIGZvcm1EYXRhKS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gdGhpcy5tYXBKb2IocmVzcG9uc2UpKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0Sm9iSW5mbyhqb2JJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJVm9pY2VUb1RleHRKb2JTZXJ2ZXJSZXNwb25zZT4oYCR7dGhpcy5hdWRpb0NvbmZpZy5hdWRpb0FwaVVybH0vJHtqb2JJZH1gKS5waXBlKFxyXG4gICAgICBtYXAocmVzcG9uc2UgPT4gdGhpcy5tYXBKb2IocmVzcG9uc2UpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIG1hcEpvYihyZXNwb25zZTogSVZvaWNlVG9UZXh0Sm9iU2VydmVyUmVzcG9uc2UpOiBJVm9pY2VUb1RleHRKb2Ige1xyXG4gICAgLy8gY29udmVydHMgdG8gVm9pY2VUb1RleHRTdGF0ZSwgc28gaXQgc3VpdHMgZW51bSBjb252ZW50aW9ucy5cclxuICAgIGNvbnN0IHN0YXRlOiBhbnkgPSByZXNwb25zZS5zdGF0ZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoLyAvZywgXCJfXCIpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZShyZXNwb25zZS5jcmVhdGVkX2F0KSxcclxuICAgICAgZmlsZU5hbWU6IHJlc3BvbnNlLmZpbGVfbmFtZSxcclxuICAgICAgam9iSWQ6IHJlc3BvbnNlLmpvYl9pZCxcclxuICAgICAgbGFuZ3VhZ2U6IHJlc3BvbnNlLmxhbmd1YWdlLFxyXG4gICAgICBzdGF0ZSxcclxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZShyZXNwb25zZS51cGRhdGVkX2F0KSxcclxuICAgICAgZXJyb3JNZXNzYWdlOiByZXNwb25zZS5lcnJvcl9tZXNzYWdlLFxyXG4gICAgICB0cmFuc2NyaXB0aW9uOiByZXNwb25zZS50cmFuc2NyaXB0aW9uXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { VoiceToTextState } from '../../tld-common/models';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./tld-voice-input-api.service";
|
|
6
|
+
export class TldVoiceInputService {
|
|
7
|
+
constructor(api) {
|
|
8
|
+
this.api = api;
|
|
9
|
+
this.timeoutMs = 1000;
|
|
10
|
+
this.transcribtionTextUpdated = new Subject();
|
|
11
|
+
}
|
|
12
|
+
get onTranscribtionTextUpdated() { return this.transcribtionTextUpdated.asObservable(); }
|
|
13
|
+
startTranscribtion(params) {
|
|
14
|
+
this.isProcessing = true;
|
|
15
|
+
this.api.startJob(params).subscribe((job) => {
|
|
16
|
+
this.activeJob = job;
|
|
17
|
+
this.lastTranscribtion = job.transcription;
|
|
18
|
+
this.scheduleProgressCheckIfNecessary();
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
stopProcessing() {
|
|
22
|
+
if (this.isProcessing) {
|
|
23
|
+
this.activeJob = null;
|
|
24
|
+
this.isProcessing = false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
checkProgress() {
|
|
28
|
+
if (!this.activeJob) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
this.api.getJobInfo(this.activeJob.jobId).subscribe((response) => {
|
|
32
|
+
this.activeJob = response;
|
|
33
|
+
const isCompleted = VoiceToTextState.COMPLETED === response.state;
|
|
34
|
+
if ((response.transcription && this.lastTranscribtion !== response.transcription) || isCompleted) {
|
|
35
|
+
this.transcribtionTextUpdated.next({ text: response.transcription, completed: isCompleted });
|
|
36
|
+
}
|
|
37
|
+
this.lastTranscribtion = response.transcription;
|
|
38
|
+
this.scheduleProgressCheckIfNecessary();
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
scheduleProgressCheckIfNecessary() {
|
|
42
|
+
if (this.activeJob.state === VoiceToTextState.COMPLETED) {
|
|
43
|
+
this.isProcessing = false;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
this.checkProgress();
|
|
48
|
+
}, this.timeoutMs);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
TldVoiceInputService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldVoiceInputService, deps: [{ token: i1.TldVoiceInputApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
53
|
+
TldVoiceInputService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldVoiceInputService, providedIn: 'root' });
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldVoiceInputService, decorators: [{
|
|
55
|
+
type: Injectable,
|
|
56
|
+
args: [{
|
|
57
|
+
providedIn: 'root'
|
|
58
|
+
}]
|
|
59
|
+
}], ctorParameters: function () { return [{ type: i1.TldVoiceInputApiService }]; } });
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXZvaWNlLWlucHV0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtYXVkaW8vc2VydmljZXMvdGxkLXZvaWNlLWlucHV0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBc0QsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBTy9HLE1BQU0sT0FBTyxvQkFBb0I7SUFXL0IsWUFBNkIsR0FBNEI7UUFBNUIsUUFBRyxHQUFILEdBQUcsQ0FBeUI7UUFOeEMsY0FBUyxHQUFHLElBQUksQ0FBQztRQUdqQiw2QkFBd0IsR0FBdUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUdqQyxDQUFDO0lBRjlELElBQUksMEJBQTBCLEtBQUssT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBSXpGLGtCQUFrQixDQUFDLE1BQXlDO1FBQzFELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQzNDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1lBQzFCLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxFQUFFO2dCQUNoRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7YUFDN0Y7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztZQUNoRCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyxnQ0FBZ0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7WUFDdkQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDM0I7YUFDSTtZQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDcEI7SUFDSCxDQUFDOztpSEF0RFUsb0JBQW9CO3FIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElWb2ljZVRvVGV4dEpvYiwgSVZvaWNlVG9UZXh0U3RhcnRKb2JSZXF1ZXN0UGFyYW1zLCBWb2ljZVRvVGV4dFN0YXRlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJVHJhbnNjcmlwdGlvblVwZGF0ZU1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3RyYW5zY3JpcHRpb24tdXBkYXRlLm1vZGVsJztcclxuaW1wb3J0IHsgVGxkVm9pY2VJbnB1dEFwaVNlcnZpY2UgfSBmcm9tICcuL3RsZC12b2ljZS1pbnB1dC1hcGkuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRWb2ljZUlucHV0U2VydmljZSB7XHJcblxyXG4gIGFjdGl2ZUpvYjogSVZvaWNlVG9UZXh0Sm9iO1xyXG4gIGlzUHJvY2Vzc2luZzogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0TXMgPSAxMDAwO1xyXG4gIHByaXZhdGUgbGFzdFRyYW5zY3JpYnRpb246IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2NyaWJ0aW9uVGV4dFVwZGF0ZWQ6IFN1YmplY3Q8SVRyYW5zY3JpcHRpb25VcGRhdGVNb2RlbD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBvblRyYW5zY3JpYnRpb25UZXh0VXBkYXRlZCgpIHsgcmV0dXJuIHRoaXMudHJhbnNjcmlidGlvblRleHRVcGRhdGVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBpOiBUbGRWb2ljZUlucHV0QXBpU2VydmljZSkgeyB9XHJcblxyXG4gIHN0YXJ0VHJhbnNjcmlidGlvbihwYXJhbXM6IElWb2ljZVRvVGV4dFN0YXJ0Sm9iUmVxdWVzdFBhcmFtcykge1xyXG4gICAgdGhpcy5pc1Byb2Nlc3NpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5hcGkuc3RhcnRKb2IocGFyYW1zKS5zdWJzY3JpYmUoKGpvYikgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZUpvYiA9IGpvYjtcclxuICAgICAgdGhpcy5sYXN0VHJhbnNjcmlidGlvbiA9IGpvYi50cmFuc2NyaXB0aW9uO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlUHJvZ3Jlc3NDaGVja0lmTmVjZXNzYXJ5KCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc3RvcFByb2Nlc3NpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5pc1Byb2Nlc3NpbmcpIHtcclxuICAgICAgdGhpcy5hY3RpdmVKb2IgPSBudWxsO1xyXG4gICAgICB0aGlzLmlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Byb2dyZXNzKCkge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUpvYikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcGkuZ2V0Sm9iSW5mbyh0aGlzLmFjdGl2ZUpvYi5qb2JJZCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZUpvYiA9IHJlc3BvbnNlO1xyXG4gICAgICBjb25zdCBpc0NvbXBsZXRlZCA9IFZvaWNlVG9UZXh0U3RhdGUuQ09NUExFVEVEID09PSByZXNwb25zZS5zdGF0ZTtcclxuICAgICAgaWYgKChyZXNwb25zZS50cmFuc2NyaXB0aW9uICYmIHRoaXMubGFzdFRyYW5zY3JpYnRpb24gIT09IHJlc3BvbnNlLnRyYW5zY3JpcHRpb24pIHx8IGlzQ29tcGxldGVkKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2NyaWJ0aW9uVGV4dFVwZGF0ZWQubmV4dCh7IHRleHQ6IHJlc3BvbnNlLnRyYW5zY3JpcHRpb24sIGNvbXBsZXRlZDogaXNDb21wbGV0ZWR9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RUcmFuc2NyaWJ0aW9uID0gcmVzcG9uc2UudHJhbnNjcmlwdGlvbjtcclxuICAgICAgdGhpcy5zY2hlZHVsZVByb2dyZXNzQ2hlY2tJZk5lY2Vzc2FyeSgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2NoZWR1bGVQcm9ncmVzc0NoZWNrSWZOZWNlc3NhcnkoKSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVKb2Iuc3RhdGUgPT09IFZvaWNlVG9UZXh0U3RhdGUuQ09NUExFVEVEKSB7XHJcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja1Byb2dyZXNzKCk7XHJcbiAgICAgIH0sIHRoaXMudGltZW91dE1zKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { FlexLayoutModule } from '@angular/flex-layout';
|
|
4
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
6
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
7
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
8
|
+
import { TldDictateComponent } from './tld-dictate/tld-dictate.component';
|
|
9
|
+
import { TldRecordComponent } from './tld-record/tld-record.component';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
export class TldAudioModule {
|
|
12
|
+
}
|
|
13
|
+
TldAudioModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldAudioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
14
|
+
TldAudioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: TldAudioModule, declarations: [TldRecordComponent, TldDictateComponent], imports: [CommonModule,
|
|
15
|
+
TranslateModule,
|
|
16
|
+
MatTooltipModule,
|
|
17
|
+
MatIconModule,
|
|
18
|
+
FlexLayoutModule,
|
|
19
|
+
MatButtonModule], exports: [TldRecordComponent, TldDictateComponent] });
|
|
20
|
+
TldAudioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldAudioModule, imports: [CommonModule,
|
|
21
|
+
TranslateModule,
|
|
22
|
+
MatTooltipModule,
|
|
23
|
+
MatIconModule,
|
|
24
|
+
FlexLayoutModule,
|
|
25
|
+
MatButtonModule] });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldAudioModule, decorators: [{
|
|
27
|
+
type: NgModule,
|
|
28
|
+
args: [{
|
|
29
|
+
declarations: [TldRecordComponent, TldDictateComponent],
|
|
30
|
+
imports: [
|
|
31
|
+
CommonModule,
|
|
32
|
+
TranslateModule,
|
|
33
|
+
MatTooltipModule,
|
|
34
|
+
MatIconModule,
|
|
35
|
+
FlexLayoutModule,
|
|
36
|
+
MatButtonModule
|
|
37
|
+
],
|
|
38
|
+
exports: [TldRecordComponent, TldDictateComponent]
|
|
39
|
+
}]
|
|
40
|
+
}] });
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLWF1ZGlvLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC1hdWRpby90bGQtYXVkaW8ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQWV2RSxNQUFNLE9BQU8sY0FBYzs7MkdBQWQsY0FBYzs0R0FBZCxjQUFjLGlCQVhWLGtCQUFrQixFQUFFLG1CQUFtQixhQUVwRCxZQUFZO1FBQ1osZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixhQUFhO1FBQ2IsZ0JBQWdCO1FBQ2hCLGVBQWUsYUFFUCxrQkFBa0IsRUFBRSxtQkFBbUI7NEdBRXRDLGNBQWMsWUFUdkIsWUFBWTtRQUNaLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixlQUFlOzJGQUlOLGNBQWM7a0JBWjFCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUM7b0JBQ3ZELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsZUFBZTtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUM7aUJBQ25EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBUbGREaWN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi90bGQtZGljdGF0ZS90bGQtZGljdGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUbGRSZWNvcmRDb21wb25lbnQgfSBmcm9tICcuL3RsZC1yZWNvcmQvdGxkLXJlY29yZC5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbVGxkUmVjb3JkQ29tcG9uZW50LCBUbGREaWN0YXRlQ29tcG9uZW50XSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIEZsZXhMYXlvdXRNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtUbGRSZWNvcmRDb21wb25lbnQsIFRsZERpY3RhdGVDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRBdWRpb01vZHVsZSB7IH1cclxuIl19
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { AsrClient, RecognitionStatus } from 'asr-api-client';
|
|
3
|
+
import { AudioErrorCase } from '../models/audio-error-case.model';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/material/tooltip";
|
|
7
|
+
import * as i3 from "@angular/flex-layout/flex";
|
|
8
|
+
import * as i4 from "@angular/material/button";
|
|
9
|
+
import * as i5 from "@ngx-translate/core";
|
|
10
|
+
export class TldDictateComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.recordLength = new Date(0, 0, 0, 0, 0, 0);
|
|
13
|
+
this.visualizataionId = "dictate-visualization";
|
|
14
|
+
/**
|
|
15
|
+
* Last recognized text
|
|
16
|
+
*/
|
|
17
|
+
this.result = new EventEmitter();
|
|
18
|
+
this.partialResult = new EventEmitter();
|
|
19
|
+
this.isDictating = new EventEmitter();
|
|
20
|
+
this.onError = new EventEmitter();
|
|
21
|
+
}
|
|
22
|
+
onResize() {
|
|
23
|
+
this.setCanvasWidth();
|
|
24
|
+
}
|
|
25
|
+
get maxLength() { return this.configuration?.maxLength; }
|
|
26
|
+
;
|
|
27
|
+
get isRecording() { return this._isRecording; }
|
|
28
|
+
set isRecording(value) {
|
|
29
|
+
const shouldClearSource = !this.isRecording && value;
|
|
30
|
+
// if record ended, dictate text emitted one last time, so it translates automatically.
|
|
31
|
+
this._isRecording = value;
|
|
32
|
+
this.isDictating.emit(this._isRecording);
|
|
33
|
+
if (shouldClearSource) {
|
|
34
|
+
this.dictatedText = "";
|
|
35
|
+
}
|
|
36
|
+
if (!this.isRecording && this.interval) {
|
|
37
|
+
this.recordLength = new Date(0, 0, 0, 0, 0, 0);
|
|
38
|
+
clearInterval(this.interval);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
set dictatedText(value) {
|
|
42
|
+
this._dictatedText = value;
|
|
43
|
+
this.result.emit(this._dictatedText);
|
|
44
|
+
}
|
|
45
|
+
get dictatedText() { return this._dictatedText; }
|
|
46
|
+
set language(value) {
|
|
47
|
+
this._language = value;
|
|
48
|
+
this.asrClient?.changeLanguage(value);
|
|
49
|
+
}
|
|
50
|
+
ngOnInit() {
|
|
51
|
+
const config = {
|
|
52
|
+
appId: this.configuration.appId,
|
|
53
|
+
appSecret: this.configuration.appSecret,
|
|
54
|
+
language: this._language,
|
|
55
|
+
apiUrl: this.configuration.apiUrl,
|
|
56
|
+
visualizerConfig: {
|
|
57
|
+
visualizerId: this.visualizataionId
|
|
58
|
+
},
|
|
59
|
+
onResult: (result) => { this.handleResult(result); },
|
|
60
|
+
onRecordingStartStop: (isRecording) => {
|
|
61
|
+
this.isRecording = isRecording;
|
|
62
|
+
setTimeout(() => {
|
|
63
|
+
this.setCanvasWidth();
|
|
64
|
+
this.asrClient.audioVisualizer?.visualizeAudio();
|
|
65
|
+
}, 1);
|
|
66
|
+
},
|
|
67
|
+
onError: (error) => {
|
|
68
|
+
if (error.name === "NotAllowedError") {
|
|
69
|
+
this.emitError(AudioErrorCase.MIC_NOT_ALLOWED);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
},
|
|
74
|
+
onMessage: (message) => {
|
|
75
|
+
if (message === RecognitionStatus.NoSpeech) {
|
|
76
|
+
this.emitError(AudioErrorCase.NO_SPEECH);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
this.asrClient = new AsrClient(config);
|
|
81
|
+
this.findMic();
|
|
82
|
+
}
|
|
83
|
+
startRecording() {
|
|
84
|
+
this.asrClient.beginVoiceRecognition();
|
|
85
|
+
this.interval = setInterval(() => {
|
|
86
|
+
const recordTimeInSeconds = this.asrClient?.audioContext?.currentTime ?? 0;
|
|
87
|
+
if (this.maxLength && recordTimeInSeconds > this.maxLength) {
|
|
88
|
+
this.stopRecording();
|
|
89
|
+
this.emitError(AudioErrorCase.MAX_TIME_EXCEEDED);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.recordLength = new Date(0, 0, 0, 0, 0, recordTimeInSeconds);
|
|
93
|
+
}, 1000);
|
|
94
|
+
}
|
|
95
|
+
stopRecording() {
|
|
96
|
+
this.asrClient.endVoiceRecognition();
|
|
97
|
+
}
|
|
98
|
+
setCanvasWidth() {
|
|
99
|
+
this.canvasWidth = this.canvasWrapper?.nativeElement.offsetWidth;
|
|
100
|
+
}
|
|
101
|
+
findMic() {
|
|
102
|
+
navigator.mediaDevices.enumerateDevices().then((devices) => {
|
|
103
|
+
this.hasAnyMicrophone = false;
|
|
104
|
+
for (const device of devices) {
|
|
105
|
+
if (device.kind === "audioinput") {
|
|
106
|
+
this.hasAnyMicrophone = true;
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
handleResult(result) {
|
|
113
|
+
// not necessary to display <unk> tags
|
|
114
|
+
const resultText = result.hypotheses[0].transcript?.replace("<unk>", "");
|
|
115
|
+
if (result.final) {
|
|
116
|
+
let text = (this.dictatedText.length > 0 ? " " : "") + resultText + (resultText.endsWith(".") ? "" : ".");
|
|
117
|
+
this.dictatedText += text;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.partialResult.emit(resultText);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
emitError(error) {
|
|
124
|
+
this.onError.emit(error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
TldDictateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldDictateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
128
|
+
TldDictateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TldDictateComponent, selector: "tld-dictate", inputs: { configuration: "configuration", language: "language" }, outputs: { result: "result", partialResult: "partialResult", isDictating: "isDictating", onError: "onError" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "canvasWrapper", first: true, predicate: ["canvasWrapper"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"!isRecording\">\r\n <button [disabled]=\"!hasAnyMicrophone\" mat-button mat-icon-button fxLayoutAlign=\"center center\"\r\n (click)=\"startRecording()\" color=\"accent\"\r\n [attr.aria-label]=\"(hasAnyMicrophone?'AUDIO.START':'AUDIO.MIC_NOT_FOUND') | translate\">\r\n <span class=\"material-icons\" *ngIf=\"hasAnyMicrophone\" color=\"accent\" [matTooltip]=\"'AUDIO.START' | translate\">\r\n mic\r\n </span>\r\n <span class=\"material-icons\" [matTooltip]=\"'AUDIO.MIC_NOT_FOUND' | translate\" *ngIf=\"!hasAnyMicrophone\">\r\n mic_off\r\n </span>\r\n </button>\r\n</ng-container>\r\n<ng-container *ngIf=\"isRecording\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start end\">\r\n <div fxLayout=column>\r\n <button mat-button mat-icon-button fxLayoutAlign=\"center center\" [disabled]=\"!isRecording\"\r\n (click)=\"stopRecording()\" color=\"accent\" [matTooltip]=\"'AUDIO.STOP' | translate\"\r\n [attr.aria-label]=\"'AUDIO.STOP' | translate\">\r\n <span class=\"material-icons\">\r\n stop\r\n </span>\r\n </button>\r\n <div class=\"tld-audio-timer\" fxLayoutAlign=\"center center\">\r\n {{recordLength | date: 'mm:ss'}}\r\n </div>\r\n </div>\r\n <div fxFlex #canvasWrapper>\r\n <canvas [attr.width]=\"canvasWidth\" height=\"60\" [attr.id]=\"visualizataionId\"></canvas>\r\n </div>\r\n </div>\r\n</ng-container>", styles: ["button{border:1px solid rgba(0,0,0,.12);min-width:40px}#dictate-visualization{margin-left:1em}.tld-audio-timer{font-size:10px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldDictateComponent, decorators: [{
|
|
130
|
+
type: Component,
|
|
131
|
+
args: [{ selector: 'tld-dictate', template: "<ng-container *ngIf=\"!isRecording\">\r\n <button [disabled]=\"!hasAnyMicrophone\" mat-button mat-icon-button fxLayoutAlign=\"center center\"\r\n (click)=\"startRecording()\" color=\"accent\"\r\n [attr.aria-label]=\"(hasAnyMicrophone?'AUDIO.START':'AUDIO.MIC_NOT_FOUND') | translate\">\r\n <span class=\"material-icons\" *ngIf=\"hasAnyMicrophone\" color=\"accent\" [matTooltip]=\"'AUDIO.START' | translate\">\r\n mic\r\n </span>\r\n <span class=\"material-icons\" [matTooltip]=\"'AUDIO.MIC_NOT_FOUND' | translate\" *ngIf=\"!hasAnyMicrophone\">\r\n mic_off\r\n </span>\r\n </button>\r\n</ng-container>\r\n<ng-container *ngIf=\"isRecording\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start end\">\r\n <div fxLayout=column>\r\n <button mat-button mat-icon-button fxLayoutAlign=\"center center\" [disabled]=\"!isRecording\"\r\n (click)=\"stopRecording()\" color=\"accent\" [matTooltip]=\"'AUDIO.STOP' | translate\"\r\n [attr.aria-label]=\"'AUDIO.STOP' | translate\">\r\n <span class=\"material-icons\">\r\n stop\r\n </span>\r\n </button>\r\n <div class=\"tld-audio-timer\" fxLayoutAlign=\"center center\">\r\n {{recordLength | date: 'mm:ss'}}\r\n </div>\r\n </div>\r\n <div fxFlex #canvasWrapper>\r\n <canvas [attr.width]=\"canvasWidth\" height=\"60\" [attr.id]=\"visualizataionId\"></canvas>\r\n </div>\r\n </div>\r\n</ng-container>", styles: ["button{border:1px solid rgba(0,0,0,.12);min-width:40px}#dictate-visualization{margin-left:1em}.tld-audio-timer{font-size:10px}\n"] }]
|
|
132
|
+
}], ctorParameters: function () { return []; }, propDecorators: { onResize: [{
|
|
133
|
+
type: HostListener,
|
|
134
|
+
args: ['window:resize', []]
|
|
135
|
+
}], canvasWrapper: [{
|
|
136
|
+
type: ViewChild,
|
|
137
|
+
args: ["canvasWrapper"]
|
|
138
|
+
}], result: [{
|
|
139
|
+
type: Output
|
|
140
|
+
}], partialResult: [{
|
|
141
|
+
type: Output
|
|
142
|
+
}], isDictating: [{
|
|
143
|
+
type: Output
|
|
144
|
+
}], onError: [{
|
|
145
|
+
type: Output
|
|
146
|
+
}], configuration: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], language: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}] } });
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLWRpY3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLWF1ZGlvL3RsZC1kaWN0YXRlL3RsZC1kaWN0YXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC1hdWRpby90bGQtZGljdGF0ZS90bGQtZGljdGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLFNBQVMsRUFBMEIsaUJBQWlCLEVBQTJCLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0csT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7O0FBUWxFLE1BQU0sT0FBTyxtQkFBbUI7SUEyRDlCO1FBbkRBLGlCQUFZLEdBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQWlDdkMscUJBQWdCLEdBQUcsdUJBQXVCLENBQUM7UUFHcEQ7O1dBRUc7UUFDTyxXQUFNLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDMUQsa0JBQWEsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNqRSxnQkFBVyxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ2pFLFlBQU8sR0FBaUMsSUFBSSxZQUFZLEVBQWtCLENBQUM7SUFVckYsQ0FBQztJQXpERCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFV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QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRSxhQUFhO3NCQUFyQixLQUFLO2dCQUdPLFFBQVE7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBc3JDbGllbnQsIEFzckNsaWVudENvbmZpZ3VyYXRpb24sIFJlY29nbml0aW9uU3RhdHVzLCBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCB9IGZyb20gJ2Fzci1hcGktY2xpZW50JztcclxuaW1wb3J0IHsgQXVkaW9FcnJvckNhc2UgfSBmcm9tICcuLi9tb2RlbHMvYXVkaW8tZXJyb3ItY2FzZS5tb2RlbCc7XHJcbmltcG9ydCB7IElEaWN0YXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9kaWN0YXRlLWNvbmZpZ3VyYXRpb25pLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGxkLWRpY3RhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90bGQtZGljdGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGxkLWRpY3RhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkRGljdGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbXSlcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuc2V0Q2FudmFzV2lkdGgoKTtcclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNXcmFwcGVyXCIpIGNhbnZhc1dyYXBwZXI6IEVsZW1lbnRSZWY8YW55PjtcclxuICByZWNvcmRMZW5ndGg6IERhdGUgPSBuZXcgRGF0ZSgwLCAwLCAwLCAwLCAwLCAwKTtcclxuICBjYW52YXNXaWR0aDogbnVtYmVyO1xyXG4gIGlzUHJvY2Vzc2luZzogYm9vbGVhbjtcclxuICBoYXNBbnlNaWNyb3Bob25lOiBib29sZWFuO1xyXG4gIC8vIGFzckFwaUNsaWVudDogQVNSQXBpQ2xpZW50O1xyXG4gIGFzckNsaWVudDogQXNyQ2xpZW50O1xyXG5cclxuICBnZXQgbWF4TGVuZ3RoKCkgeyByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uPy5tYXhMZW5ndGggfTtcclxuXHJcbiAgcHJpdmF0ZSBfaXNSZWNvcmRpbmc6IGJvb2xlYW47XHJcbiAgZ2V0IGlzUmVjb3JkaW5nKCkgeyByZXR1cm4gdGhpcy5faXNSZWNvcmRpbmc7IH1cclxuICBzZXQgaXNSZWNvcmRpbmcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHNob3VsZENsZWFyU291cmNlID0gIXRoaXMuaXNSZWNvcmRpbmcgJiYgdmFsdWU7XHJcbiAgICAvLyBpZiByZWNvcmQgZW5kZWQsIGRpY3RhdGUgdGV4dCBlbWl0dGVkIG9uZSBsYXN0IHRpbWUsIHNvIGl0IHRyYW5zbGF0ZXMgYXV0b21hdGljYWxseS5cclxuICAgIHRoaXMuX2lzUmVjb3JkaW5nID0gdmFsdWU7XHJcbiAgICB0aGlzLmlzRGljdGF0aW5nLmVtaXQodGhpcy5faXNSZWNvcmRpbmcpO1xyXG4gICAgaWYgKHNob3VsZENsZWFyU291cmNlKSB7XHJcbiAgICAgIHRoaXMuZGljdGF0ZWRUZXh0ID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcgJiYgdGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnJlY29yZExlbmd0aCA9IG5ldyBEYXRlKDAsIDAsIDAsIDAsIDAsIDApO1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGljdGF0ZWRUZXh0OiBzdHJpbmc7XHJcbiAgc2V0IGRpY3RhdGVkVGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kaWN0YXRlZFRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVzdWx0LmVtaXQodGhpcy5fZGljdGF0ZWRUZXh0KTtcclxuICB9XHJcbiAgZ2V0IGRpY3RhdGVkVGV4dCgpIHsgcmV0dXJuIHRoaXMuX2RpY3RhdGVkVGV4dDsgfVxyXG5cclxuICByZWFkb25seSB2aXN1YWxpemF0YWlvbklkID0gXCJkaWN0YXRlLXZpc3VhbGl6YXRpb25cIjtcclxuICBwcml2YXRlIGludGVydmFsOiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIExhc3QgcmVjb2duaXplZCB0ZXh0XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHJlc3VsdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgcGFydGlhbFJlc3VsdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgaXNEaWN0YXRpbmc6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgb25FcnJvcjogRXZlbnRFbWl0dGVyPEF1ZGlvRXJyb3JDYXNlPiA9IG5ldyBFdmVudEVtaXR0ZXI8QXVkaW9FcnJvckNhc2U+KCk7XHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbjogSURpY3RhdGVDb25maWd1cmF0aW9uO1xyXG5cclxuICBwcml2YXRlIF9sYW5ndWFnZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNldCBsYW5ndWFnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sYW5ndWFnZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5hc3JDbGllbnQ/LmNoYW5nZUxhbmd1YWdlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBjb25maWc6IEFzckNsaWVudENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgIGFwcElkOiB0aGlzLmNvbmZpZ3VyYXRpb24uYXBwSWQsXHJcbiAgICAgIGFwcFNlY3JldDogdGhpcy5jb25maWd1cmF0aW9uLmFwcFNlY3JldCxcclxuICAgICAgbGFuZ3VhZ2U6IHRoaXMuX2xhbmd1YWdlLFxyXG4gICAgICBhcGlVcmw6IHRoaXMuY29uZmlndXJhdGlvbi5hcGlVcmwsXHJcbiAgICAgIHZpc3VhbGl6ZXJDb25maWc6IHtcclxuICAgICAgICB2aXN1YWxpemVySWQ6IHRoaXMudmlzdWFsaXphdGFpb25JZFxyXG4gICAgICB9LFxyXG4gICAgICBvblJlc3VsdDogKHJlc3VsdCkgPT4geyB0aGlzLmhhbmRsZVJlc3VsdChyZXN1bHQpIH0sXHJcbiAgICAgIG9uUmVjb3JkaW5nU3RhcnRTdG9wOiAoaXNSZWNvcmRpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmlzUmVjb3JkaW5nID0gaXNSZWNvcmRpbmc7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldENhbnZhc1dpZHRoKCk7XHJcbiAgICAgICAgICB0aGlzLmFzckNsaWVudC5hdWRpb1Zpc3VhbGl6ZXI/LnZpc3VhbGl6ZUF1ZGlvKCk7XHJcbiAgICAgICAgfSwgMSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIk5vdEFsbG93ZWRFcnJvclwiKSB7XHJcbiAgICAgICAgICB0aGlzLmVtaXRFcnJvcihBdWRpb0Vycm9yQ2FzZS5NSUNfTk9UX0FMTE9XRUQpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgfSxcclxuICAgICAgb25NZXNzYWdlOiAobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgIGlmIChtZXNzYWdlID09PSBSZWNvZ25pdGlvblN0YXR1cy5Ob1NwZWVjaCkge1xyXG4gICAgICAgICAgdGhpcy5lbWl0RXJyb3IoQXVkaW9FcnJvckNhc2UuTk9fU1BFRUNIKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYXNyQ2xpZW50ID0gbmV3IEFzckNsaWVudChjb25maWcpO1xyXG5cclxuICAgIHRoaXMuZmluZE1pYygpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmFzckNsaWVudC5iZWdpblZvaWNlUmVjb2duaXRpb24oKTtcclxuICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlY29yZFRpbWVJblNlY29uZHMgPSB0aGlzLmFzckNsaWVudD8uYXVkaW9Db250ZXh0Py5jdXJyZW50VGltZSA/PyAwO1xyXG4gICAgICBpZiAodGhpcy5tYXhMZW5ndGggJiYgcmVjb3JkVGltZUluU2Vjb25kcyA+IHRoaXMubWF4TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0RXJyb3IoQXVkaW9FcnJvckNhc2UuTUFYX1RJTUVfRVhDRUVERUQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlY29yZExlbmd0aCA9IG5ldyBEYXRlKDAsIDAsIDAsIDAsIDAsIHJlY29yZFRpbWVJblNlY29uZHMpO1xyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nKCkge1xyXG4gICAgdGhpcy5hc3JDbGllbnQuZW5kVm9pY2VSZWNvZ25pdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDYW52YXNXaWR0aCgpIHtcclxuICAgIHRoaXMuY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhc1dyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRNaWMoKSB7XHJcbiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKChkZXZpY2VzOiBNZWRpYURldmljZUluZm9bXSkgPT4ge1xyXG4gICAgICB0aGlzLmhhc0FueU1pY3JvcGhvbmUgPSBmYWxzZTtcclxuICAgICAgZm9yIChjb25zdCBkZXZpY2Ugb2YgZGV2aWNlcykge1xyXG4gICAgICAgIGlmIChkZXZpY2Uua2luZCA9PT0gXCJhdWRpb2lucHV0XCIpIHtcclxuICAgICAgICAgIHRoaXMuaGFzQW55TWljcm9waG9uZSA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUmVzdWx0KHJlc3VsdDogU3BlZWNoUmVjb2duaXRpb25SZXN1bHQpIHtcclxuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gZGlzcGxheSA8dW5rPiB0YWdzXHJcbiAgICBjb25zdCByZXN1bHRUZXh0ID0gcmVzdWx0Lmh5cG90aGVzZXNbMF0udHJhbnNjcmlwdD8ucmVwbGFjZShcIjx1bms+XCIsIFwiXCIpO1xyXG4gICAgaWYgKHJlc3VsdC5maW5hbCkge1xyXG4gICAgICBsZXQgdGV4dCA9ICh0aGlzLmRpY3RhdGVkVGV4dC5sZW5ndGggPiAwID8gXCIgXCIgOiBcIlwiKSArIHJlc3VsdFRleHQgKyAocmVzdWx0VGV4dC5lbmRzV2l0aChcIi5cIikgPyBcIlwiIDogXCIuXCIpO1xyXG4gICAgICB0aGlzLmRpY3RhdGVkVGV4dCArPSB0ZXh0O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGFydGlhbFJlc3VsdC5lbWl0KHJlc3VsdFRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0RXJyb3IoZXJyb3I6IEF1ZGlvRXJyb3JDYXNlKSB7XHJcbiAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnJvcik7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIj5cclxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFoYXNBbnlNaWNyb3Bob25lXCIgbWF0LWJ1dHRvbiBtYXQtaWNvbi1idXR0b24gZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJzdGFydFJlY29yZGluZygpXCIgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGhhc0FueU1pY3JvcGhvbmU/J0FVRElPLlNUQVJUJzonQVVESU8uTUlDX05PVF9GT1VORCcpIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiICpuZ0lmPVwiaGFzQW55TWljcm9waG9uZVwiIGNvbG9yPVwiYWNjZW50XCIgW21hdFRvb2x0aXBdPVwiJ0FVRElPLlNUQVJUJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICBtaWNcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIFttYXRUb29sdGlwXT1cIidBVURJTy5NSUNfTk9UX0ZPVU5EJyB8IHRyYW5zbGF0ZVwiICpuZ0lmPVwiIWhhc0FueU1pY3JvcGhvbmVcIj5cclxuICAgICAgICAgICAgbWljX29mZlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG48L25nLWNvbnRhaW5lcj5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmVjb3JkaW5nXCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGVuZFwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9Y29sdW1uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0LWljb24tYnV0dG9uIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgW2Rpc2FibGVkXT1cIiFpc1JlY29yZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RvcFJlY29yZGluZygpXCIgY29sb3I9XCJhY2NlbnRcIiBbbWF0VG9vbHRpcF09XCInQVVESU8uU1RPUCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQVVESU8uU1RPUCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICBzdG9wXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGxkLWF1ZGlvLXRpbWVyXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIHt7cmVjb3JkTGVuZ3RoIHwgZGF0ZTogJ21tOnNzJ319XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4ICNjYW52YXNXcmFwcGVyPlxyXG4gICAgICAgICAgICA8Y2FudmFzIFthdHRyLndpZHRoXT1cImNhbnZhc1dpZHRoXCIgaGVpZ2h0PVwiNjBcIiBbYXR0ci5pZF09XCJ2aXN1YWxpemF0YWlvbklkXCI+PC9jYW52YXM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+Il19
|