@seniorsistemas/angular-components 19.3.1 → 19.3.3
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/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.d.ts +1 -2
- package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +0 -1
- package/chips/lib/chips/chips/chips.component.d.ts +1 -2
- package/code-editor/lib/code-editor/code-editor.component.d.ts +0 -2
- package/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations.module.d.ts +1 -3
- package/common/lib/svg-factory/svg-factory.directive.d.ts +1 -2
- package/content-generator/lib/content-generator/content-generator.component.d.ts +1 -6
- package/content-generator/lib/services/IAssist/iassist.service.d.ts +0 -3
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +0 -3
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.d.ts +0 -2
- package/currency/lib/currency.service.d.ts +0 -2
- package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +3 -7
- package/custom-fields/lib/custom-fields/custom-fields.service.d.ts +0 -2
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +2 -4
- package/dynamic-form/dynamic-form/components/lookup/types/lookup-models.d.ts +4 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +2 -1
- package/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.d.ts +1 -2
- package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +1 -3
- package/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.d.ts +1 -2
- package/dynamic-form/dynamic-form/form-field/fields/chips/chips-field.component.d.ts +1 -3
- package/dynamic-form/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.d.ts +1 -2
- package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +1 -3
- package/dynamic-form/dynamic-form/form-field/fields/file-picker/file-picker-field.component.d.ts +1 -2
- package/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.d.ts +1 -3
- package/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.d.ts +1 -2
- package/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.d.ts +1 -2
- package/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.d.ts +1 -2
- package/dynamic-form/public-api.d.ts +1 -0
- package/empty-state/lib/empty-state/go-back/go-back.component.d.ts +0 -2
- package/esm2022/badge/lib/badge/badge.component.mjs +3 -3
- package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +10 -13
- package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +7 -11
- package/esm2022/chips/lib/chips/chips/chips.component.mjs +5 -8
- package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +6 -9
- package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations.module.mjs +8 -13
- package/esm2022/common/lib/svg-factory/svg-factory.directive.mjs +6 -10
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +24 -30
- package/esm2022/content-generator/lib/services/IAssist/iassist.service.mjs +9 -12
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +15 -23
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +6 -9
- package/esm2022/currency/lib/currency.service.mjs +6 -9
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +17 -25
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +6 -9
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +26 -35
- package/esm2022/dynamic-form/dynamic-form/components/lookup/types/lookup-models.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +6 -10
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +12 -17
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +5 -8
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/chips/chips-field.component.mjs +12 -17
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +5 -8
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +13 -19
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/file-picker/file-picker-field.component.mjs +6 -10
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +14 -19
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +5 -8
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +5 -8
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +5 -8
- package/esm2022/dynamic-form/public-api.mjs +1 -1
- package/esm2022/empty-state/lib/empty-state/go-back/go-back.component.mjs +8 -11
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +17 -21
- package/esm2022/gantt/lib/gantt/components/gantt/gantt.mjs +6 -2
- package/esm2022/gantt/lib/gantt/gantt.component.mjs +8 -4
- package/esm2022/global-search/lib/global-search/global-search.component.mjs +5 -8
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +7 -12
- package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +5 -8
- package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +6 -10
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.mjs +9 -12
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +14 -17
- package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +12 -15
- package/esm2022/insights/lib/insights/components/insights-card/insights-card.component.mjs +15 -19
- package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +5 -8
- package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +10 -13
- package/esm2022/kanban/lib/kanban/components/kanban-item/kanban-item.component.mjs +10 -13
- package/esm2022/kanban/lib/kanban/kanban.component.mjs +23 -17
- package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +10 -16
- package/esm2022/locale/lib/locale/locale.service.mjs +8 -12
- package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +6 -9
- package/esm2022/locale/lib/locale/pipes/localized-currency.pipe.mjs +6 -9
- package/esm2022/locale/lib/locale/pipes/localized-date.pipe.mjs +6 -9
- package/esm2022/locale/lib/locale/pipes/localized-number.pipe.mjs +6 -9
- package/esm2022/locale/lib/locale/pipes/localized-time.pipe.mjs +6 -9
- package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +6 -9
- package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +5 -8
- package/esm2022/numeric/lib/numeric.pipe.mjs +8 -12
- package/esm2022/numeric/lib/numeric.service.mjs +6 -9
- package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +8 -11
- package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +10 -16
- package/esm2022/picklist/lib/picklist/picklist.component.mjs +5 -8
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +15 -19
- package/esm2022/progressbar/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.mjs +8 -11
- package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +5 -4
- package/esm2022/select-button/lib/select-button/select-button.component.mjs +3 -3
- package/esm2022/shared/lib/accessibility/paginator-accessibility.directive.mjs +8 -13
- package/esm2022/shared/lib/accessibility/table-checkbox-accessibility.directive.mjs +5 -8
- package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +9 -12
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +12 -16
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.service.mjs +12 -16
- package/esm2022/speech-recognition/lib/speech-recognition/text-to-speech.service.mjs +8 -10
- package/esm2022/split-button/lib/split-button/split-button.component.mjs +5 -8
- package/esm2022/table/lib/table/row-toggler/row-toggler.directive.mjs +7 -7
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +19 -28
- package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +9 -16
- package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +11 -13
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +5 -8
- package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +8 -11
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +16 -24
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +8 -11
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +12 -16
- package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +13 -25
- package/esm2022/toast/lib/toast/toast.service.mjs +7 -12
- package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +10 -14
- package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +6 -10
- package/fesm2022/seniorsistemas-angular-components-badge.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +10 -12
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +6 -10
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +10 -18
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -9
- package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +29 -40
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +16 -28
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-currency.mjs +5 -8
- package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +45 -59
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +111 -163
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +4 -8
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +17 -22
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs +12 -4
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +6 -11
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +5 -9
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +29 -38
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-insights.mjs +17 -22
- package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs +30 -30
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +7 -15
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-locale.mjs +22 -41
- package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +5 -8
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs +9 -16
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +13 -24
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +14 -21
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +11 -14
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +10 -18
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +7 -10
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +23 -34
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +10 -12
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +29 -46
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +4 -7
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +6 -9
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +30 -55
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs +6 -11
- package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tree.mjs +9 -14
- package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +5 -9
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
- package/file-picker/lib/file-picker/file-picker.component.d.ts +0 -4
- package/file-upload/README.md +9 -37
- package/gantt/lib/gantt/gantt.component.d.ts +1 -0
- package/global-search/lib/global-search/global-search.component.d.ts +1 -2
- package/ia-insight/README.md +17 -0
- package/image-cropper/lib/image-cropper/image-cropper.service.d.ts +1 -2
- package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +1 -2
- package/info-sign/lib/info-sign/info-sign.directive.d.ts +1 -2
- package/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.d.ts +1 -2
- package/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.d.ts +0 -2
- package/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +0 -2
- package/insights/lib/insights/components/insights-card/insights-card.component.d.ts +0 -4
- package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +1 -2
- package/kanban/lib/kanban/components/kanban-column/kanban-column.component.d.ts +0 -2
- package/kanban/lib/kanban/components/kanban-item/kanban-item.component.d.ts +0 -2
- package/kanban/lib/kanban/kanban.component.d.ts +2 -2
- package/loading-state/lib/loading-state/loading-state.directive.d.ts +1 -2
- package/locale/lib/locale/locale.service.d.ts +0 -3
- package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +0 -2
- package/locale/lib/locale/pipes/localized-currency.pipe.d.ts +0 -2
- package/locale/lib/locale/pipes/localized-date.pipe.d.ts +0 -2
- package/locale/lib/locale/pipes/localized-number.pipe.d.ts +0 -2
- package/locale/lib/locale/pipes/localized-time.pipe.d.ts +0 -2
- package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +0 -2
- package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +1 -2
- package/numeric/lib/numeric.pipe.d.ts +0 -3
- package/numeric/lib/numeric.service.d.ts +0 -2
- package/package.json +1 -1
- package/password-strength/lib/password-strength/password-strength.component.d.ts +0 -2
- package/password-strength/lib/password-strength/password-strength.directive.d.ts +1 -2
- package/picklist/lib/picklist/picklist.component.d.ts +1 -2
- package/product-header/README.md +17 -0
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +0 -4
- package/progressbar/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.d.ts +0 -2
- package/progressbar/lib/progressbar/progressbar.module.d.ts +2 -1
- package/shared/lib/accessibility/paginator-accessibility.directive.d.ts +1 -3
- package/shared/lib/accessibility/table-checkbox-accessibility.directive.d.ts +1 -2
- package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +0 -2
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +0 -4
- package/speech-recognition/lib/speech-recognition/speech-recognition.service.d.ts +1 -5
- package/speech-recognition/lib/speech-recognition/text-to-speech.service.d.ts +1 -3
- package/split-button/lib/split-button/split-button.component.d.ts +1 -2
- package/table/lib/table/row-toggler/row-toggler.directive.d.ts +1 -1
- package/table/lib/table/table-column/table-columns.component.d.ts +2 -6
- package/table/lib/table/table-paging/table-paging.component.d.ts +0 -3
- package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -1
- package/text-area/lib/text-area/text-area.component.d.ts +1 -2
- package/text-area-ia/README.md +17 -0
- package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +0 -2
- package/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +1 -3
- package/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.d.ts +0 -2
- package/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +0 -2
- package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +1 -5
- package/toast/lib/toast/toast.service.d.ts +0 -2
- package/tree/lib/tree/components/tree-node-item/tree-node-item.component.d.ts +1 -3
- package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +1 -2
- package/confirm-dialog/README.md +0 -226
- package/numeric-mask/README.md +0 -395
- package/pin-code-field/README.md +0 -366
- package/spotlight/README.md +0 -311
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-speech-recognition.mjs","sources":["../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition.service.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/text-to-speech.service.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition/speech-recognition.component.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition/speech-recognition.component.html","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition.module.ts","../../projects/angular-components/speech-recognition/src/seniorsistemas-angular-components-speech-recognition.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\nimport { ToastService } from '@seniorsistemas/angular-components/toast';\n\nexport type MicrophoneStatus = 'active' | 'inactive';\nexport interface SpeechResult {\n text: string;\n isFinal: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SpeechRecognitionService {\n hasSupportSpeechRecognition = false;\n isListening = false;\n readonly microphoneStatus$ = new Subject<MicrophoneStatus>();\n private recognition!: SpeechRecognition;\n private readonly TIMEOUT_NO_MESSAGE = 3000;\n\n constructor(\n private readonly localeService: LocaleService,\n private readonly ngZone: NgZone,\n private readonly toastService: ToastService,\n private translateService: TranslateService,\n ) {\n this.setRecognition();\n }\n\n listen() {\n const speechSubject = new Subject<SpeechResult>();\n if (this.isListening) {\n speechSubject.error('Already listening');\n }\n this.hasMicrophoneAccess.then((hasAccess) => {\n if (!hasAccess) {\n this.toastService.show({ severity: 'error', text: this.translateService.instant('platform.angular_components.no_microphone_permission') });\n speechSubject.error('Microphone access is disabled');\n return;\n }\n this.microphoneStatus$.next('active');\n\n this.isListening = true;\n this.recognition.continuous = true;\n this.recognition.interimResults = true;\n this.recognition.maxAlternatives = 1;\n let silenceTimer: any;\n const restartSilenceTimer = () => {\n if (silenceTimer !== undefined) {\n clearTimeout(silenceTimer);\n }\n\n silenceTimer = setTimeout(() => {\n this.recognition.stop();\n }, this.TIMEOUT_NO_MESSAGE);\n };\n let fullTranscript = '';\n let interimTranscript = '';\n\n this.recognition.onresult = (event: SpeechRecognitionEvent) => {\n this.ngZone.run(() => {\n restartSilenceTimer();\n let interimTranscript = '';\n for (let i = event.resultIndex; i < event.results.length; ++i) {\n const transcript = event.results[i][0].transcript;\n if (event.results[i].isFinal) {\n fullTranscript += transcript + '\\n';\n } else {\n interimTranscript += transcript;\n }\n }\n interimTranscript = interimTranscript;\n speechSubject.next({ text: fullTranscript + interimTranscript, isFinal: false });\n })\n };\n this.recognition.onerror = () => {\n this.ngZone.run(() => {\n if (silenceTimer !== undefined) {\n clearTimeout(silenceTimer);\n }\n this.isListening = false;\n speechSubject.error('Speech recognition error');\n this.microphoneStatus$.next('inactive')\n })\n };\n\n this.recognition.onend = () => {\n this.ngZone.run(() => {\n if (silenceTimer !== undefined) {\n clearTimeout(silenceTimer);\n }\n speechSubject.next({ text: fullTranscript + interimTranscript, isFinal: true });\n this.isListening = false;\n speechSubject.complete();\n this.microphoneStatus$.next('inactive')\n })\n };\n this.recognition.start();\n })\n return speechSubject;\n }\n\n\n stop() {\n this.recognition.stop();\n }\n\n private setRecognition() {\n const SpeechRecognitionConstructor =\n (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\n\n if (!SpeechRecognitionConstructor) {\n console.warn('Speech recognition is not supported in this browser.');\n return;\n }\n this.hasSupportSpeechRecognition = true;\n this.recognition = new SpeechRecognitionConstructor();\n this.recognition.lang = this.localeService.getLocaleOptions()?.locale || 'pt-BR';\n this.recognition.interimResults = false;\n this.recognition.maxAlternatives = 1;\n this.localeService.getLocale().subscribe(locale => this.recognition.lang = locale);\n }\n\n private get hasMicrophoneAccess() {\n return new Promise(async (resolve) => {\n const permission = await navigator.permissions.query({ name: 'microphone' as PermissionName });\n if (permission.state === 'denied') {\n resolve(false);\n } else if (permission.state === 'granted') {\n resolve(true)\n } else if (permission.state === 'prompt') {\n try {\n navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {\n stream.getTracks().forEach(t => t.stop());\n }).catch(() => {\n resolve(false);\n });\n permission.onchange = () => {\n this.ngZone.run(() => {\n resolve(permission.state === 'granted' ? true : false);\n })\n }\n } catch (error) {\n resolve(false);\n }\n }\n })\n }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TextToSpeechService {\n private readonly utterance = new SpeechSynthesisUtterance();\n private activeVoice: SpeechSynthesisVoice | undefined;\n voices: SpeechSynthesisVoice[] = [];\n constructor(private readonly locale: LocaleService, private readonly ngZone: NgZone) {\n this.setVoices();\n }\n\n private setVoices() {\n let _voices = speechSynthesis.getVoices();\n\n if (!_voices.length) {\n speechSynthesis.onvoiceschanged = () => {\n this.ngZone.run(() => {\n _voices = speechSynthesis.getVoices();\n const currentLang = this.locale.getLocaleOptions()?.locale || 'pt-BR';\n this.setActiveVoice(_voices, currentLang);\n this.locale.getLocale().subscribe((locale) => {\n this.setActiveVoice(_voices, locale);\n })\n })\n }\n }\n }\n\n /**\n * Updates the active voice\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SpeechSynthesisVoice/voiceURI)\n * @param voiceUri\n */\n updateVoice(voiceUri: string) {\n this.activeVoice = this.voices.find((voice) => voice.voiceURI === voiceUri);\n }\n\n\n speak(text: string, speed: number = 1) {\n return new Promise((resolve) => {\n if (!this.activeVoice) {\n return resolve(true);\n }\n this.utterance.text = text;\n this.utterance.voice = this.activeVoice as SpeechSynthesisVoice;\n this.utterance.rate = speed;\n speechSynthesis.speak(this.utterance);\n this.utterance.onend = () => {\n this.ngZone.run(() => {\n resolve(true);\n })\n }\n })\n }\n\n pause() {\n speechSynthesis.pause();\n }\n\n resume() {\n speechSynthesis.resume();\n }\n\n cancel() {\n speechSynthesis.cancel();\n }\n\n get hasVoice() {\n return !!this.activeVoice;\n }\n\n private setActiveVoice(voices: SpeechSynthesisVoice[], lang: string) {\n const _voice = voices.find((voice) => voice.lang === lang);\n if (_voice) {\n this.activeVoice = _voice;\n }\n }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SpeechRecognitionService } from '../speech-recognition.service';\nimport { TextToSpeechService } from '../text-to-speech.service';\n\n/**\n * @description Componente de reconhecimento de voz que integra a Web Speech API para\n * transcrever a fala do usuário em texto, inserída diretamente em um `<textarea>` fornecido.\n * Suporta também text-to-speech para leitura em voz alta do conteúdo do campo.\n *\n * @example\n * ```html\n * <s-speech-recognition\n * [textAreaElement]=\"textAreaRef.nativeElement\"\n * (recognizedText)=\"onTextoReconhecido($event)\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-speech-recognition',\n templateUrl: './speech-recognition.component.html',\n styleUrls: ['./speech-recognition.component.scss'],\n})\nexport class SpeechRecognitionComponent implements OnInit, OnDestroy {\n private static TOOLBAR_ACTIVE = false;\n /** @description Referência ao elemento `<textarea>` nativo que receberá o texto transcrito. Campo obrigatório. */\n @Input({ required: true }) textAreaElement!: HTMLTextAreaElement;\n /** @description Quando `true`, mantém o texto existente no campo ao iniciar novo reconhecimento. @default false */\n @Input() keepContext = false;\n /** @description Placeholder exibido no textarea durante o reconhecimento de voz. @default '' */\n @Input() speechRecognitionPlaceholder = '';\n private _recognizedText = '';\n private originalTextAreaElementText = '';\n private isDoneTextToSpeech = false;\n private readonly onDestroy$ = new Subject<void>();\n private readonly VOICE_SPEEDS = [0.5, 1, 1.5, 2];\n private readonly keydownEventListener = (event: KeyboardEvent) => {\n if (this.disabled) {\n event.preventDefault();\n }\n };\n\n disabled = false;\n isListeningUserVoice = false;\n voiceSpeed = 1;\n isDisabledMicrophone = false;\n\n canRenderMicrophone = true;\n canRenderTextToSpeech = true;\n canRenderListeningText = false;\n canRenderDiscard = false;\n canRenderAprove = false;\n canRenderTextToSpeechToolbar = false;\n\n isPlayingTextToSpeech = false;\n\n /** @description Emitido quando o reconhecimento de voz é concluído, com o texto transcrito. */\n @Output() recognizedText = new EventEmitter<string>();\n constructor(\n private readonly speechRecognitionService: SpeechRecognitionService,\n private readonly textToSpeechService: TextToSpeechService,\n private readonly translateService: TranslateService,\n ) {}\n\n ngOnInit(): void {\n if (!this.hasSpeechRecognitionBrowserApi) {\n return;\n }\n if (!this.textAreaElement) {\n throw new Error('textAreaElement is required');\n }\n this.textAreaElement.placeholder = this.speechRecognitionPlaceholder\n ? this.speechRecognitionPlaceholder\n : this.translateService.instant('platform.angular_components.text_area_speech_recognition_placeholder');\n this.textAreaElement.addEventListener('keydown', this.keydownEventListener);\n this.speechRecognitionService.microphoneStatus$.pipe(takeUntil(this.onDestroy$)).subscribe((status) => {\n if (status === 'active') {\n this.onCloseToolbar();\n }\n });\n }\n\n onListen() {\n if (this.isDisabledMicrophone || this.isListening) {\n return;\n }\n this.disabled = true;\n this.canRenderMicrophone = false;\n this.canRenderListeningText = true;\n this.originalTextAreaElementText = this.textAreaElement.value;\n this.textAreaElement.value = '';\n this.isListeningUserVoice = true;\n this.speechRecognitionService\n .listen()\n .pipe(takeUntil(this.onDestroy$))\n .subscribe(\n ({ text, isFinal }) => {\n this._recognizedText = text;\n this.setTextAreaValue(text);\n this.scrollTextAreaBottom();\n if (isFinal) {\n this.canRenderAprove = true;\n this.canRenderDiscard = true;\n this.canRenderListeningText = false;\n this.isListeningUserVoice = false;\n }\n },\n () => {\n this.isListeningUserVoice = false;\n this.canRenderMicrophone = true;\n this.isDisabledMicrophone = false;\n this.canRenderListeningText = false;\n this.disabled = false;\n },\n );\n }\n\n private scrollTextAreaBottom() {\n setTimeout(() => {\n this.textAreaElement.scrollTop = this.textAreaElement.scrollHeight;\n }, 120);\n }\n\n onOpenToolbar() {\n if (this.isDisabledTextToSpeech) {\n return;\n }\n this.canRenderTextToSpeechToolbar = true;\n this.canRenderTextToSpeech = false;\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = true;\n this.speak();\n }\n\n onCloseToolbar() {\n this.canRenderTextToSpeechToolbar = false;\n this.canRenderTextToSpeech = true;\n this.stopTextToSpeech();\n this.voiceSpeed = 1;\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n }\n onDiscard() {\n this.canRenderAprove = false;\n this.canRenderDiscard = false;\n this.canRenderMicrophone = true;\n this.canRenderTextToSpeechToolbar = false;\n this.canRenderTextToSpeech = true;\n this._recognizedText = '';\n this.setTextAreaValue(this.originalTextAreaElementText);\n this.disabled = false;\n this.stopTextToSpeech();\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n }\n\n onAprove() {\n this.canRenderAprove = false;\n this.canRenderDiscard = false;\n this.canRenderMicrophone = true;\n this.canRenderTextToSpeechToolbar = false;\n this.canRenderTextToSpeech = true;\n if (this.keepContext) {\n const breakLine = this.originalTextAreaElementText.length > 0 ? '\\n' : '';\n this.originalTextAreaElementText += `${breakLine}${this._recognizedText}`;\n } else {\n this.originalTextAreaElementText = this._recognizedText;\n }\n this.recognizedText.emit(this.keepContext ? this.originalTextAreaElementText : this._recognizedText);\n this.scrollTextAreaBottom();\n this._recognizedText = '';\n this.disabled = false;\n this.textToSpeechService.cancel();\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n toggleTextToSpeech() {\n if (this.isPlayingTextToSpeech) {\n this.textToSpeechService.pause();\n } else {\n if (this.isDoneTextToSpeech) {\n this.speak();\n } else {\n this.textToSpeechService.resume();\n }\n }\n this.isPlayingTextToSpeech = !this.isPlayingTextToSpeech;\n }\n\n restartTextToSpeech() {\n this.textToSpeechService.cancel();\n this.speak();\n }\n\n updateVoiceSpeed() {\n const voiceSpeedIndex = this.VOICE_SPEEDS.indexOf(this.voiceSpeed);\n const nextVoiceSpeedIndex = this.VOICE_SPEEDS[voiceSpeedIndex + 1] ? voiceSpeedIndex + 1 : 0;\n this.voiceSpeed = this.VOICE_SPEEDS[nextVoiceSpeedIndex];\n this.textToSpeechService.cancel();\n this.speak();\n }\n\n stopListening() {\n this.speechRecognitionService.stop();\n }\n\n get isListening() {\n return this.speechRecognitionService.isListening;\n }\n\n get hasSpeechRecognitionBrowserApi() {\n return this.speechRecognitionService.hasSupportSpeechRecognition;\n }\n\n get isDisabledTextToSpeech() {\n const hasTextToSpeechVoice = this.textToSpeechService.hasVoice;\n return (\n !this.textToSpeech || !hasTextToSpeechVoice || this.isListening || SpeechRecognitionComponent.TOOLBAR_ACTIVE\n );\n }\n\n private setTextAreaValue(value: string) {\n this.textAreaElement.value = value;\n }\n\n private stopTextToSpeech() {\n this.isPlayingTextToSpeech = false;\n this.textToSpeechService.cancel();\n }\n\n private speak() {\n this.isDoneTextToSpeech = false;\n this.isPlayingTextToSpeech = true;\n this.textToSpeechService.speak(this.textToSpeech, this.voiceSpeed).then(() => {\n this.isPlayingTextToSpeech = false;\n this.isDoneTextToSpeech = true;\n });\n }\n\n private get textToSpeech() {\n return this.textAreaElement.value;\n }\n}\n\n","@if(hasSpeechRecognitionBrowserApi) {\n <section class=\"speech-recognition\">\n <div class=\"speech-recognition-text\">\n @if(canRenderMicrophone) {\n {{ 'platform.angular_components.text_area_before_speech' | translate }}\n }\n\n @if(isListeningUserVoice) {\n {{ 'platform.angular_components.text_area_while_speech' | translate }}\n }\n\n @if(canRenderAprove && canRenderDiscard) {\n {{ 'platform.angular_components.text_area_end_speech' | translate }}\n }\n </div>\n <div class=\"speech-recognition-buttons\">\n @if(canRenderListeningText) {\n <span\n (click)=\"stopListening()\"\n class=\"speech-recognition-item speech-recognition-item-regular\">\n <i class=\"far fa-ellipsis-h\"></i>\n </span>\n }\n\n @if(canRenderMicrophone) {\n <span\n (click)=\"onListen()\"\n class=\"speech-recognition-item speech-recognition-item-microphone\"\n [class.speech-recognition-item-disabled]=\"isDisabledMicrophone || isListening || disabled\">\n <i class=\"fas fa-microphone\"></i>\n </span>\n }\n\n\n @if(canRenderAprove) {\n <span\n (click)=\"onAprove()\"\n class=\"speech-recognition-item speech-recognition-item-aprove\">\n <i class=\"fas fa-check\"></i>\n </span>\n }\n\n @if(canRenderDiscard) {\n <span\n (click)=\"onDiscard()\"\n class=\"speech-recognition-item speech-recognition-item-discard\">\n <i class=\"fas fa-times\"></i>\n </span>\n }\n\n @if(canRenderTextToSpeech) {\n <span\n (click)=\"onOpenToolbar()\"\n class=\"speech-recognition-item speech-recognition-item-regular\"\n [class.speech-recognition-item-disabled]=\"isDisabledTextToSpeech\">\n <i class=\"fas fa-volume-down\"></i>\n </span>\n }\n\n @if(canRenderTextToSpeechToolbar) {\n <span\n class=\"speech-recognition-item-toolbar\">\n <i class=\"fas\" [class.fa-pause]=\"isPlayingTextToSpeech\" [class.fa-play]=\"!isPlayingTextToSpeech\"\n (click)=\"toggleTextToSpeech()\"></i>\n <i class=\"fas fa-backward\" (click)=\"restartTextToSpeech()\"></i>\n <span (click)=\"updateVoiceSpeed()\">\n {{ voiceSpeed }}x\n </span>\n <i class=\"fas fa-times\" (click)=\"onCloseToolbar()\"></i>\n </span>\n }\n </div>\n </section>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SpeechRecognitionComponent } from './speech-recognition/speech-recognition.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n declarations: [SpeechRecognitionComponent],\n imports: [\n CommonModule,\n TranslateModule\n ],\n exports: [SpeechRecognitionComponent]\n})\nexport class SpeechRecognitionModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SpeechRecognitionService","i2.TextToSpeechService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-speech-recognition.mjs","sources":["../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition.service.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/text-to-speech.service.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition/speech-recognition.component.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition/speech-recognition.component.html","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition.module.ts","../../projects/angular-components/speech-recognition/src/seniorsistemas-angular-components-speech-recognition.ts"],"sourcesContent":["import { Injectable, NgZone, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\nimport { ToastService } from '@seniorsistemas/angular-components/toast';\n\nexport type MicrophoneStatus = 'active' | 'inactive';\nexport interface SpeechResult {\n text: string;\n isFinal: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SpeechRecognitionService {\n private readonly localeService = inject(LocaleService);\n private readonly ngZone = inject(NgZone);\n private readonly toastService = inject(ToastService);\n private translateService = inject(TranslateService);\n\n hasSupportSpeechRecognition = false;\n isListening = false;\n readonly microphoneStatus$ = new Subject<MicrophoneStatus>();\n private recognition!: SpeechRecognition;\n private readonly TIMEOUT_NO_MESSAGE = 3000;\n\n constructor() {\n this.setRecognition();\n }\n\n listen() {\n const speechSubject = new Subject<SpeechResult>();\n if (this.isListening) {\n speechSubject.error('Already listening');\n }\n this.hasMicrophoneAccess.then((hasAccess) => {\n if (!hasAccess) {\n this.toastService.show({ severity: 'error', text: this.translateService.instant('platform.angular_components.no_microphone_permission') });\n speechSubject.error('Microphone access is disabled');\n return;\n }\n this.microphoneStatus$.next('active');\n\n this.isListening = true;\n this.recognition.continuous = true;\n this.recognition.interimResults = true;\n this.recognition.maxAlternatives = 1;\n let silenceTimer: any;\n const restartSilenceTimer = () => {\n if (silenceTimer !== undefined) {\n clearTimeout(silenceTimer);\n }\n\n silenceTimer = setTimeout(() => {\n this.recognition.stop();\n }, this.TIMEOUT_NO_MESSAGE);\n };\n let fullTranscript = '';\n let interimTranscript = '';\n\n this.recognition.onresult = (event: SpeechRecognitionEvent) => {\n this.ngZone.run(() => {\n restartSilenceTimer();\n let interimTranscript = '';\n for (let i = event.resultIndex; i < event.results.length; ++i) {\n const transcript = event.results[i][0].transcript;\n if (event.results[i].isFinal) {\n fullTranscript += transcript + '\\n';\n } else {\n interimTranscript += transcript;\n }\n }\n interimTranscript = interimTranscript;\n speechSubject.next({ text: fullTranscript + interimTranscript, isFinal: false });\n })\n };\n this.recognition.onerror = () => {\n this.ngZone.run(() => {\n if (silenceTimer !== undefined) {\n clearTimeout(silenceTimer);\n }\n this.isListening = false;\n speechSubject.error('Speech recognition error');\n this.microphoneStatus$.next('inactive')\n })\n };\n\n this.recognition.onend = () => {\n this.ngZone.run(() => {\n if (silenceTimer !== undefined) {\n clearTimeout(silenceTimer);\n }\n speechSubject.next({ text: fullTranscript + interimTranscript, isFinal: true });\n this.isListening = false;\n speechSubject.complete();\n this.microphoneStatus$.next('inactive')\n })\n };\n this.recognition.start();\n })\n return speechSubject;\n }\n\n\n stop() {\n this.recognition.stop();\n }\n\n private setRecognition() {\n const SpeechRecognitionConstructor =\n (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\n\n if (!SpeechRecognitionConstructor) {\n console.warn('Speech recognition is not supported in this browser.');\n return;\n }\n this.hasSupportSpeechRecognition = true;\n this.recognition = new SpeechRecognitionConstructor();\n this.recognition.lang = this.localeService.getLocaleOptions()?.locale || 'pt-BR';\n this.recognition.interimResults = false;\n this.recognition.maxAlternatives = 1;\n this.localeService.getLocale().subscribe(locale => this.recognition.lang = locale);\n }\n\n private get hasMicrophoneAccess() {\n return new Promise(async (resolve) => {\n const permission = await navigator.permissions.query({ name: 'microphone' as PermissionName });\n if (permission.state === 'denied') {\n resolve(false);\n } else if (permission.state === 'granted') {\n resolve(true)\n } else if (permission.state === 'prompt') {\n try {\n navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {\n stream.getTracks().forEach(t => t.stop());\n }).catch(() => {\n resolve(false);\n });\n permission.onchange = () => {\n this.ngZone.run(() => {\n resolve(permission.state === 'granted' ? true : false);\n })\n }\n } catch (error) {\n resolve(false);\n }\n }\n })\n }\n}\n","import { Injectable, NgZone, inject } from '@angular/core';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TextToSpeechService {\n private readonly locale = inject(LocaleService);\n private readonly ngZone = inject(NgZone);\n\n private readonly utterance = new SpeechSynthesisUtterance();\n private activeVoice: SpeechSynthesisVoice | undefined;\n voices: SpeechSynthesisVoice[] = [];\n constructor() {\n this.setVoices();\n }\n\n private setVoices() {\n let _voices = speechSynthesis.getVoices();\n\n if (!_voices.length) {\n speechSynthesis.onvoiceschanged = () => {\n this.ngZone.run(() => {\n _voices = speechSynthesis.getVoices();\n const currentLang = this.locale.getLocaleOptions()?.locale || 'pt-BR';\n this.setActiveVoice(_voices, currentLang);\n this.locale.getLocale().subscribe((locale) => {\n this.setActiveVoice(_voices, locale);\n })\n })\n }\n }\n }\n\n /**\n * Updates the active voice\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SpeechSynthesisVoice/voiceURI)\n * @param voiceUri\n */\n updateVoice(voiceUri: string) {\n this.activeVoice = this.voices.find((voice) => voice.voiceURI === voiceUri);\n }\n\n\n speak(text: string, speed: number = 1) {\n return new Promise((resolve) => {\n if (!this.activeVoice) {\n return resolve(true);\n }\n this.utterance.text = text;\n this.utterance.voice = this.activeVoice as SpeechSynthesisVoice;\n this.utterance.rate = speed;\n speechSynthesis.speak(this.utterance);\n this.utterance.onend = () => {\n this.ngZone.run(() => {\n resolve(true);\n })\n }\n })\n }\n\n pause() {\n speechSynthesis.pause();\n }\n\n resume() {\n speechSynthesis.resume();\n }\n\n cancel() {\n speechSynthesis.cancel();\n }\n\n get hasVoice() {\n return !!this.activeVoice;\n }\n\n private setActiveVoice(voices: SpeechSynthesisVoice[], lang: string) {\n const _voice = voices.find((voice) => voice.lang === lang);\n if (_voice) {\n this.activeVoice = _voice;\n }\n }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SpeechRecognitionService } from '../speech-recognition.service';\nimport { TextToSpeechService } from '../text-to-speech.service';\n\n/**\n * @description Componente de reconhecimento de voz que integra a Web Speech API para\n * transcrever a fala do usuário em texto, inserída diretamente em um `<textarea>` fornecido.\n * Suporta também text-to-speech para leitura em voz alta do conteúdo do campo.\n *\n * @example\n * ```html\n * <s-speech-recognition\n * [textAreaElement]=\"textAreaRef.nativeElement\"\n * (recognizedText)=\"onTextoReconhecido($event)\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-speech-recognition',\n templateUrl: './speech-recognition.component.html',\n styleUrls: ['./speech-recognition.component.scss'],\n})\nexport class SpeechRecognitionComponent implements OnInit, OnDestroy {\n private readonly speechRecognitionService = inject(SpeechRecognitionService);\n private readonly textToSpeechService = inject(TextToSpeechService);\n private readonly translateService = inject(TranslateService);\n\n private static TOOLBAR_ACTIVE = false;\n /** @description Referência ao elemento `<textarea>` nativo que receberá o texto transcrito. Campo obrigatório. */\n @Input({ required: true }) textAreaElement!: HTMLTextAreaElement;\n /** @description Quando `true`, mantém o texto existente no campo ao iniciar novo reconhecimento. @default false */\n @Input() keepContext = false;\n /** @description Placeholder exibido no textarea durante o reconhecimento de voz. @default '' */\n @Input() speechRecognitionPlaceholder = '';\n private _recognizedText = '';\n private originalTextAreaElementText = '';\n private isDoneTextToSpeech = false;\n private readonly onDestroy$ = new Subject<void>();\n private readonly VOICE_SPEEDS = [0.5, 1, 1.5, 2];\n private readonly keydownEventListener = (event: KeyboardEvent) => {\n if (this.disabled) {\n event.preventDefault();\n }\n };\n\n disabled = false;\n isListeningUserVoice = false;\n voiceSpeed = 1;\n isDisabledMicrophone = false;\n\n canRenderMicrophone = true;\n canRenderTextToSpeech = true;\n canRenderListeningText = false;\n canRenderDiscard = false;\n canRenderAprove = false;\n canRenderTextToSpeechToolbar = false;\n\n isPlayingTextToSpeech = false;\n\n /** @description Emitido quando o reconhecimento de voz é concluído, com o texto transcrito. */\n @Output() recognizedText = new EventEmitter<string>();\n\n ngOnInit(): void {\n if (!this.hasSpeechRecognitionBrowserApi) {\n return;\n }\n if (!this.textAreaElement) {\n throw new Error('textAreaElement is required');\n }\n this.textAreaElement.placeholder = this.speechRecognitionPlaceholder\n ? this.speechRecognitionPlaceholder\n : this.translateService.instant('platform.angular_components.text_area_speech_recognition_placeholder');\n this.textAreaElement.addEventListener('keydown', this.keydownEventListener);\n this.speechRecognitionService.microphoneStatus$.pipe(takeUntil(this.onDestroy$)).subscribe((status) => {\n if (status === 'active') {\n this.onCloseToolbar();\n }\n });\n }\n\n onListen() {\n if (this.isDisabledMicrophone || this.isListening) {\n return;\n }\n this.disabled = true;\n this.canRenderMicrophone = false;\n this.canRenderListeningText = true;\n this.originalTextAreaElementText = this.textAreaElement.value;\n this.textAreaElement.value = '';\n this.isListeningUserVoice = true;\n this.speechRecognitionService\n .listen()\n .pipe(takeUntil(this.onDestroy$))\n .subscribe(\n ({ text, isFinal }) => {\n this._recognizedText = text;\n this.setTextAreaValue(text);\n this.scrollTextAreaBottom();\n if (isFinal) {\n this.canRenderAprove = true;\n this.canRenderDiscard = true;\n this.canRenderListeningText = false;\n this.isListeningUserVoice = false;\n }\n },\n () => {\n this.isListeningUserVoice = false;\n this.canRenderMicrophone = true;\n this.isDisabledMicrophone = false;\n this.canRenderListeningText = false;\n this.disabled = false;\n },\n );\n }\n\n private scrollTextAreaBottom() {\n setTimeout(() => {\n this.textAreaElement.scrollTop = this.textAreaElement.scrollHeight;\n }, 120);\n }\n\n onOpenToolbar() {\n if (this.isDisabledTextToSpeech) {\n return;\n }\n this.canRenderTextToSpeechToolbar = true;\n this.canRenderTextToSpeech = false;\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = true;\n this.speak();\n }\n\n onCloseToolbar() {\n this.canRenderTextToSpeechToolbar = false;\n this.canRenderTextToSpeech = true;\n this.stopTextToSpeech();\n this.voiceSpeed = 1;\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n }\n onDiscard() {\n this.canRenderAprove = false;\n this.canRenderDiscard = false;\n this.canRenderMicrophone = true;\n this.canRenderTextToSpeechToolbar = false;\n this.canRenderTextToSpeech = true;\n this._recognizedText = '';\n this.setTextAreaValue(this.originalTextAreaElementText);\n this.disabled = false;\n this.stopTextToSpeech();\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n }\n\n onAprove() {\n this.canRenderAprove = false;\n this.canRenderDiscard = false;\n this.canRenderMicrophone = true;\n this.canRenderTextToSpeechToolbar = false;\n this.canRenderTextToSpeech = true;\n if (this.keepContext) {\n const breakLine = this.originalTextAreaElementText.length > 0 ? '\\n' : '';\n this.originalTextAreaElementText += `${breakLine}${this._recognizedText}`;\n } else {\n this.originalTextAreaElementText = this._recognizedText;\n }\n this.recognizedText.emit(this.keepContext ? this.originalTextAreaElementText : this._recognizedText);\n this.scrollTextAreaBottom();\n this._recognizedText = '';\n this.disabled = false;\n this.textToSpeechService.cancel();\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next();\n this.onDestroy$.complete();\n }\n\n toggleTextToSpeech() {\n if (this.isPlayingTextToSpeech) {\n this.textToSpeechService.pause();\n } else {\n if (this.isDoneTextToSpeech) {\n this.speak();\n } else {\n this.textToSpeechService.resume();\n }\n }\n this.isPlayingTextToSpeech = !this.isPlayingTextToSpeech;\n }\n\n restartTextToSpeech() {\n this.textToSpeechService.cancel();\n this.speak();\n }\n\n updateVoiceSpeed() {\n const voiceSpeedIndex = this.VOICE_SPEEDS.indexOf(this.voiceSpeed);\n const nextVoiceSpeedIndex = this.VOICE_SPEEDS[voiceSpeedIndex + 1] ? voiceSpeedIndex + 1 : 0;\n this.voiceSpeed = this.VOICE_SPEEDS[nextVoiceSpeedIndex];\n this.textToSpeechService.cancel();\n this.speak();\n }\n\n stopListening() {\n this.speechRecognitionService.stop();\n }\n\n get isListening() {\n return this.speechRecognitionService.isListening;\n }\n\n get hasSpeechRecognitionBrowserApi() {\n return this.speechRecognitionService.hasSupportSpeechRecognition;\n }\n\n get isDisabledTextToSpeech() {\n const hasTextToSpeechVoice = this.textToSpeechService.hasVoice;\n return (\n !this.textToSpeech || !hasTextToSpeechVoice || this.isListening || SpeechRecognitionComponent.TOOLBAR_ACTIVE\n );\n }\n\n private setTextAreaValue(value: string) {\n this.textAreaElement.value = value;\n }\n\n private stopTextToSpeech() {\n this.isPlayingTextToSpeech = false;\n this.textToSpeechService.cancel();\n }\n\n private speak() {\n this.isDoneTextToSpeech = false;\n this.isPlayingTextToSpeech = true;\n this.textToSpeechService.speak(this.textToSpeech, this.voiceSpeed).then(() => {\n this.isPlayingTextToSpeech = false;\n this.isDoneTextToSpeech = true;\n });\n }\n\n private get textToSpeech() {\n return this.textAreaElement.value;\n }\n}\n\n","@if(hasSpeechRecognitionBrowserApi) {\n <section class=\"speech-recognition\">\n <div class=\"speech-recognition-text\">\n @if(canRenderMicrophone) {\n {{ 'platform.angular_components.text_area_before_speech' | translate }}\n }\n\n @if(isListeningUserVoice) {\n {{ 'platform.angular_components.text_area_while_speech' | translate }}\n }\n\n @if(canRenderAprove && canRenderDiscard) {\n {{ 'platform.angular_components.text_area_end_speech' | translate }}\n }\n </div>\n <div class=\"speech-recognition-buttons\">\n @if(canRenderListeningText) {\n <span\n (click)=\"stopListening()\"\n class=\"speech-recognition-item speech-recognition-item-regular\">\n <i class=\"far fa-ellipsis-h\"></i>\n </span>\n }\n\n @if(canRenderMicrophone) {\n <span\n (click)=\"onListen()\"\n class=\"speech-recognition-item speech-recognition-item-microphone\"\n [class.speech-recognition-item-disabled]=\"isDisabledMicrophone || isListening || disabled\">\n <i class=\"fas fa-microphone\"></i>\n </span>\n }\n\n\n @if(canRenderAprove) {\n <span\n (click)=\"onAprove()\"\n class=\"speech-recognition-item speech-recognition-item-aprove\">\n <i class=\"fas fa-check\"></i>\n </span>\n }\n\n @if(canRenderDiscard) {\n <span\n (click)=\"onDiscard()\"\n class=\"speech-recognition-item speech-recognition-item-discard\">\n <i class=\"fas fa-times\"></i>\n </span>\n }\n\n @if(canRenderTextToSpeech) {\n <span\n (click)=\"onOpenToolbar()\"\n class=\"speech-recognition-item speech-recognition-item-regular\"\n [class.speech-recognition-item-disabled]=\"isDisabledTextToSpeech\">\n <i class=\"fas fa-volume-down\"></i>\n </span>\n }\n\n @if(canRenderTextToSpeechToolbar) {\n <span\n class=\"speech-recognition-item-toolbar\">\n <i class=\"fas\" [class.fa-pause]=\"isPlayingTextToSpeech\" [class.fa-play]=\"!isPlayingTextToSpeech\"\n (click)=\"toggleTextToSpeech()\"></i>\n <i class=\"fas fa-backward\" (click)=\"restartTextToSpeech()\"></i>\n <span (click)=\"updateVoiceSpeed()\">\n {{ voiceSpeed }}x\n </span>\n <i class=\"fas fa-times\" (click)=\"onCloseToolbar()\"></i>\n </span>\n }\n </div>\n </section>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SpeechRecognitionComponent } from './speech-recognition/speech-recognition.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n declarations: [SpeechRecognitionComponent],\n imports: [\n CommonModule,\n TranslateModule\n ],\n exports: [SpeechRecognitionComponent]\n})\nexport class SpeechRecognitionModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Component, Input, Output, HostListener, NgModule } from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, EventEmitter, Component, Input, Output, HostListener, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
|
|
@@ -20,7 +20,7 @@ import { CommonModule } from '@angular/common';
|
|
|
20
20
|
* @category Inputs
|
|
21
21
|
*/
|
|
22
22
|
class SplitButtonComponent {
|
|
23
|
-
_eRef;
|
|
23
|
+
_eRef = inject(ElementRef);
|
|
24
24
|
/** @description Desabilita o botão principal e o dropdown. @default false */
|
|
25
25
|
disabled = false;
|
|
26
26
|
/** @description Classe do ícone exibido no botão principal. Campo obrigatório. */
|
|
@@ -34,9 +34,6 @@ class SplitButtonComponent {
|
|
|
34
34
|
/** @description Emitido quando o usuário clica no botão principal (não no dropdown). */
|
|
35
35
|
buttonClicked = new EventEmitter();
|
|
36
36
|
open = false;
|
|
37
|
-
constructor(_eRef) {
|
|
38
|
-
this._eRef = _eRef;
|
|
39
|
-
}
|
|
40
37
|
onClickout(event) {
|
|
41
38
|
if (!this._eRef.nativeElement.contains(event.target)) {
|
|
42
39
|
this._closeDropdown();
|
|
@@ -60,13 +57,13 @@ class SplitButtonComponent {
|
|
|
60
57
|
_closeDropdown() {
|
|
61
58
|
this.open = false;
|
|
62
59
|
}
|
|
63
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonComponent, deps: [
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
64
61
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SplitButtonComponent, selector: "s-split-button", inputs: { disabled: "disabled", iconClass: "iconClass", label: "label", type: "type", options: "options" }, outputs: { buttonClicked: "buttonClicked" }, host: { listeners: { "document:click": "onClickout($event)" } }, ngImport: i0, template: "<div\n class=\"split-button\"\n [ngClass]=\"{\n 'split-button--primary': type === 'primary',\n 'split-button--secondary': type === 'secondary',\n 'split-button--default': type === 'default',\n 'split-button--disabled': disabled,\n }\"\n>\n <button\n class=\"button\"\n (click)=\"onButtonClick()\"\n >\n <span\n class=\"button__icon\"\n [ngClass]=\"iconClass\"\n ></span>\n <span class=\"button__label\">{{ label }}</span>\n </button>\n <button\n class=\"dropdown\"\n (click)=\"onDropdownClick()\"\n >\n <span\n class=\"dropdown__icon\"\n [ngClass]=\"{\n far: true,\n 'fa-chevron-down': !open,\n 'fa-chevron-up': open,\n }\"\n >\n </span>\n </button>\n</div>\n\n@if (this.open) {\n <ul class=\"options\">\n @for (option of options; track option.title) {\n <li (click)=\"onOptionClick(option)\">\n {{ option.title }}\n </li>\n }\n </ul>\n}\n", styles: [".split-button{display:flex;-webkit-user-select:none;user-select:none;max-height:35px}.split-button .button{align-items:center;border:none;border-radius:4px 0 0 4px;display:flex;padding:8px 8px 8px 12px;transition:all .3s ease-in-out}.split-button .button__icon{font-size:16px;padding:0 4px}.split-button .button__title{font-family:Open Sans,sans-serif;font-size:14px;font-weight:400;line-height:21px}.split-button .dropdown{align-items:center;border:none;border-left:1px solid #608190;border-radius:0 4px 4px 0;display:flex;justify-content:center;padding:12px 8px;transition:all .3s ease-in-out}.split-button--disabled{opacity:.5}.split-button--primary .button,.split-button--primary .dropdown{background-color:#428bca;color:#fff}.split-button--primary:not(.split-button--primary--disabled) .button,.split-button--primary:not(.split-button--primary--disabled) .dropdown{cursor:pointer}.split-button--primary:not(.split-button--primary--disabled) .button:hover,.split-button--primary:not(.split-button--primary--disabled) .dropdown:hover{background-color:#063951}.split-button--secondary .button,.split-button--secondary .dropdown{background-color:#7892a1;color:#fff}.split-button--secondary:not(.split-button--secondary--disabled) .button,.split-button--secondary:not(.split-button--secondary--disabled) .dropdown{cursor:pointer}.split-button--secondary:not(.split-button--secondary--disabled) .button:hover,.split-button--secondary:not(.split-button--secondary--disabled) .dropdown:hover{background-color:#697882}.split-button--default .button,.split-button--default .dropdown{background-color:unset;border:1px solid #d8d8d8;color:#333}.split-button--default:not(.split-button--default--disabled) .button,.split-button--default:not(.split-button--default--disabled) .dropdown{cursor:pointer}.split-button--default:not(.split-button--default--disabled) .button:hover,.split-button--default:not(.split-button--default--disabled) .dropdown:hover{background-color:#d8d8d8}.options{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;display:inline-block;list-style:none;margin:2px 0;padding:8px 0;position:absolute;-webkit-user-select:none;user-select:none;z-index:10}.options li{color:#333;cursor:pointer;font-family:Open Sans,sans-serif;font-weight:400;font-size:14px;line-height:21px;padding:8px 16px}.options li:hover{background-color:#d8d8d8}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
65
62
|
}
|
|
66
63
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonComponent, decorators: [{
|
|
67
64
|
type: Component,
|
|
68
65
|
args: [{ selector: 's-split-button', template: "<div\n class=\"split-button\"\n [ngClass]=\"{\n 'split-button--primary': type === 'primary',\n 'split-button--secondary': type === 'secondary',\n 'split-button--default': type === 'default',\n 'split-button--disabled': disabled,\n }\"\n>\n <button\n class=\"button\"\n (click)=\"onButtonClick()\"\n >\n <span\n class=\"button__icon\"\n [ngClass]=\"iconClass\"\n ></span>\n <span class=\"button__label\">{{ label }}</span>\n </button>\n <button\n class=\"dropdown\"\n (click)=\"onDropdownClick()\"\n >\n <span\n class=\"dropdown__icon\"\n [ngClass]=\"{\n far: true,\n 'fa-chevron-down': !open,\n 'fa-chevron-up': open,\n }\"\n >\n </span>\n </button>\n</div>\n\n@if (this.open) {\n <ul class=\"options\">\n @for (option of options; track option.title) {\n <li (click)=\"onOptionClick(option)\">\n {{ option.title }}\n </li>\n }\n </ul>\n}\n", styles: [".split-button{display:flex;-webkit-user-select:none;user-select:none;max-height:35px}.split-button .button{align-items:center;border:none;border-radius:4px 0 0 4px;display:flex;padding:8px 8px 8px 12px;transition:all .3s ease-in-out}.split-button .button__icon{font-size:16px;padding:0 4px}.split-button .button__title{font-family:Open Sans,sans-serif;font-size:14px;font-weight:400;line-height:21px}.split-button .dropdown{align-items:center;border:none;border-left:1px solid #608190;border-radius:0 4px 4px 0;display:flex;justify-content:center;padding:12px 8px;transition:all .3s ease-in-out}.split-button--disabled{opacity:.5}.split-button--primary .button,.split-button--primary .dropdown{background-color:#428bca;color:#fff}.split-button--primary:not(.split-button--primary--disabled) .button,.split-button--primary:not(.split-button--primary--disabled) .dropdown{cursor:pointer}.split-button--primary:not(.split-button--primary--disabled) .button:hover,.split-button--primary:not(.split-button--primary--disabled) .dropdown:hover{background-color:#063951}.split-button--secondary .button,.split-button--secondary .dropdown{background-color:#7892a1;color:#fff}.split-button--secondary:not(.split-button--secondary--disabled) .button,.split-button--secondary:not(.split-button--secondary--disabled) .dropdown{cursor:pointer}.split-button--secondary:not(.split-button--secondary--disabled) .button:hover,.split-button--secondary:not(.split-button--secondary--disabled) .dropdown:hover{background-color:#697882}.split-button--default .button,.split-button--default .dropdown{background-color:unset;border:1px solid #d8d8d8;color:#333}.split-button--default:not(.split-button--default--disabled) .button,.split-button--default:not(.split-button--default--disabled) .dropdown{cursor:pointer}.split-button--default:not(.split-button--default--disabled) .button:hover,.split-button--default:not(.split-button--default--disabled) .dropdown:hover{background-color:#d8d8d8}.options{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;display:inline-block;list-style:none;margin:2px 0;padding:8px 0;position:absolute;-webkit-user-select:none;user-select:none;z-index:10}.options li{color:#333;cursor:pointer;font-family:Open Sans,sans-serif;font-weight:400;font-size:14px;line-height:21px;padding:8px 16px}.options li:hover{background-color:#d8d8d8}\n"] }]
|
|
69
|
-
}],
|
|
66
|
+
}], propDecorators: { disabled: [{
|
|
70
67
|
type: Input
|
|
71
68
|
}], iconClass: [{
|
|
72
69
|
type: Input,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-split-button.mjs","sources":["../../projects/angular-components/split-button/src/lib/split-button/split-button.component.ts","../../projects/angular-components/split-button/src/lib/split-button/split-button.component.html","../../projects/angular-components/split-button/src/lib/split-button/split-button.module.ts","../../projects/angular-components/split-button/src/seniorsistemas-angular-components-split-button.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostListener, ElementRef } from '@angular/core';\n\nimport { SplitButtonOption } from './models/split-button-option';\nimport { SplitButtonType } from './models/split-button-type';\n\n/**\n * @description Botão composto com ação principal e dropdown de opções adicionais.\n * Ao clicar no botão principal emite `buttonClicked`; ao clicar no ícone de seta\n * abre/fecha o dropdown com a lista de `options`.\n *\n * @example\n * ```html\n * <s-split-button\n * label=\"Salvar\"\n * iconClass=\"fas fa-save\"\n * [options]=\"menuOpcoes\"\n * (buttonClicked)=\"onSalvar()\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-split-button',\n templateUrl: './split-button.component.html',\n styleUrls: ['./split-button.component.scss'],\n})\nexport class SplitButtonComponent {\n /** @description Desabilita o botão principal e o dropdown. @default false */\n @Input()\n public disabled = false;\n\n /** @description Classe do ícone exibido no botão principal. Campo obrigatório. */\n @Input({ required: true })\n public iconClass!: string;\n\n /** @description Rótulo do botão principal. Campo obrigatório. */\n @Input({ required: true })\n public label!: string;\n\n /** @description Estilo visual do botão (`'primary'` ou `'secondary'`). @default 'primary' */\n @Input()\n public type: SplitButtonType = 'primary';\n\n /** @description Lista de opções exibidas no dropdown. Campo obrigatório. */\n @Input({ required: true })\n public options!: SplitButtonOption[];\n\n /** @description Emitido quando o usuário clica no botão principal (não no dropdown). */\n @Output()\n public buttonClicked = new EventEmitter();\n\n public open = false;\n\n
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-split-button.mjs","sources":["../../projects/angular-components/split-button/src/lib/split-button/split-button.component.ts","../../projects/angular-components/split-button/src/lib/split-button/split-button.component.html","../../projects/angular-components/split-button/src/lib/split-button/split-button.module.ts","../../projects/angular-components/split-button/src/seniorsistemas-angular-components-split-button.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostListener, ElementRef, inject } from '@angular/core';\n\nimport { SplitButtonOption } from './models/split-button-option';\nimport { SplitButtonType } from './models/split-button-type';\n\n/**\n * @description Botão composto com ação principal e dropdown de opções adicionais.\n * Ao clicar no botão principal emite `buttonClicked`; ao clicar no ícone de seta\n * abre/fecha o dropdown com a lista de `options`.\n *\n * @example\n * ```html\n * <s-split-button\n * label=\"Salvar\"\n * iconClass=\"fas fa-save\"\n * [options]=\"menuOpcoes\"\n * (buttonClicked)=\"onSalvar()\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-split-button',\n templateUrl: './split-button.component.html',\n styleUrls: ['./split-button.component.scss'],\n})\nexport class SplitButtonComponent {\n private readonly _eRef = inject(ElementRef);\n\n /** @description Desabilita o botão principal e o dropdown. @default false */\n @Input()\n public disabled = false;\n\n /** @description Classe do ícone exibido no botão principal. Campo obrigatório. */\n @Input({ required: true })\n public iconClass!: string;\n\n /** @description Rótulo do botão principal. Campo obrigatório. */\n @Input({ required: true })\n public label!: string;\n\n /** @description Estilo visual do botão (`'primary'` ou `'secondary'`). @default 'primary' */\n @Input()\n public type: SplitButtonType = 'primary';\n\n /** @description Lista de opções exibidas no dropdown. Campo obrigatório. */\n @Input({ required: true })\n public options!: SplitButtonOption[];\n\n /** @description Emitido quando o usuário clica no botão principal (não no dropdown). */\n @Output()\n public buttonClicked = new EventEmitter();\n\n public open = false;\n\n @HostListener('document:click', ['$event'])\n public onClickout(event: MouseEvent) {\n if (!this._eRef.nativeElement.contains(event.target)) {\n this._closeDropdown();\n }\n }\n\n public onButtonClick() {\n if (!this.disabled) {\n this.buttonClicked.emit();\n this._closeDropdown();\n }\n }\n\n public onDropdownClick() {\n if (!this.disabled) {\n this.open = !this.open;\n }\n }\n\n public onOptionClick(option: SplitButtonOption) {\n option.action?.();\n this._closeDropdown();\n }\n\n private _closeDropdown() {\n this.open = false;\n }\n}\n\n","<div\n class=\"split-button\"\n [ngClass]=\"{\n 'split-button--primary': type === 'primary',\n 'split-button--secondary': type === 'secondary',\n 'split-button--default': type === 'default',\n 'split-button--disabled': disabled,\n }\"\n>\n <button\n class=\"button\"\n (click)=\"onButtonClick()\"\n >\n <span\n class=\"button__icon\"\n [ngClass]=\"iconClass\"\n ></span>\n <span class=\"button__label\">{{ label }}</span>\n </button>\n <button\n class=\"dropdown\"\n (click)=\"onDropdownClick()\"\n >\n <span\n class=\"dropdown__icon\"\n [ngClass]=\"{\n far: true,\n 'fa-chevron-down': !open,\n 'fa-chevron-up': open,\n }\"\n >\n </span>\n </button>\n</div>\n\n@if (this.open) {\n <ul class=\"options\">\n @for (option of options; track option.title) {\n <li (click)=\"onOptionClick(option)\">\n {{ option.title }}\n </li>\n }\n </ul>\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { SplitButtonComponent } from './split-button.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [SplitButtonComponent],\n exports: [SplitButtonComponent],\n})\nexport class SplitButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, Input, NgModule } from '@angular/core';
|
|
2
|
+
import { inject, Component, Input, NgModule } from '@angular/core';
|
|
3
|
+
import { Table, TableService } from 'primeng/table';
|
|
3
4
|
import { Subject } from 'rxjs';
|
|
4
5
|
import { takeUntil } from 'rxjs/operators';
|
|
5
|
-
import * as i1 from '
|
|
6
|
-
import * as i2 from '@seniorsistemas/angular-components/checkbox-list';
|
|
6
|
+
import * as i1 from '@seniorsistemas/angular-components/checkbox-list';
|
|
7
7
|
import { CheckboxListModule } from '@seniorsistemas/angular-components/checkbox-list';
|
|
8
|
-
import * as
|
|
8
|
+
import * as i2 from '@angular/forms';
|
|
9
9
|
import { FormsModule } from '@angular/forms';
|
|
10
10
|
import { CommonModule } from '@angular/common';
|
|
11
11
|
|
|
@@ -24,8 +24,8 @@ import { CommonModule } from '@angular/common';
|
|
|
24
24
|
* @category Data
|
|
25
25
|
*/
|
|
26
26
|
class TableHeaderCheckboxComponent {
|
|
27
|
-
table;
|
|
28
|
-
tableService;
|
|
27
|
+
table = inject(Table);
|
|
28
|
+
tableService = inject(TableService);
|
|
29
29
|
static nextId = 0;
|
|
30
30
|
/** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */
|
|
31
31
|
id = `s-table-header-checkbox-${TableHeaderCheckboxComponent.nextId++}`;
|
|
@@ -42,9 +42,7 @@ class TableHeaderCheckboxComponent {
|
|
|
42
42
|
hasFocus = false;
|
|
43
43
|
checkboxState = { checked: false };
|
|
44
44
|
_ngUnsubscribe = new Subject();
|
|
45
|
-
constructor(
|
|
46
|
-
this.table = table;
|
|
47
|
-
this.tableService = tableService;
|
|
45
|
+
constructor() {
|
|
48
46
|
this.table.tableService.valueSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {
|
|
49
47
|
this.checked = this.updateCheckedState();
|
|
50
48
|
});
|
|
@@ -148,14 +146,14 @@ class TableHeaderCheckboxComponent {
|
|
|
148
146
|
return true;
|
|
149
147
|
}
|
|
150
148
|
}
|
|
151
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableHeaderCheckboxComponent, deps: [
|
|
149
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableHeaderCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
152
150
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TableHeaderCheckboxComponent, selector: "s-table-header-checkbox", inputs: { id: "id", disabled: "disabled", rowProps: "rowProps", useAllObject: "useAllObject" }, ngImport: i0, template: `
|
|
153
151
|
<s-checkbox-list
|
|
154
152
|
[(ngModel)]="checkboxState"
|
|
155
153
|
(ngModelChange)="onClick()"
|
|
156
154
|
[data]="checkboxItems"
|
|
157
155
|
/>
|
|
158
|
-
`, isInline: true, dependencies: [{ kind: "component", type:
|
|
156
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i1.CheckboxListComponent, selector: "s-checkbox-list", inputs: ["data"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
159
157
|
}
|
|
160
158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableHeaderCheckboxComponent, decorators: [{
|
|
161
159
|
type: Component,
|
|
@@ -169,7 +167,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
169
167
|
/>
|
|
170
168
|
`,
|
|
171
169
|
}]
|
|
172
|
-
}], ctorParameters: () => [
|
|
170
|
+
}], ctorParameters: () => [], propDecorators: { id: [{
|
|
173
171
|
type: Input
|
|
174
172
|
}], disabled: [{
|
|
175
173
|
type: Input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-table-header.mjs","sources":["../../projects/angular-components/table-header/src/lib/table-header/table-header-checkbox.component.ts","../../projects/angular-components/table-header/src/lib/table-header/table-header-checkox.module.ts","../../projects/angular-components/table-header/src/seniorsistemas-angular-components-table-header.ts"],"sourcesContent":["import { Component, Input, OnDestroy, OnInit } from '@angular/core';\n\nimport { CheckboxListData, CheckboxListState } from '@seniorsistemas/angular-components/checkbox-list';\nimport { Table, TableService } from 'primeng/table';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @description Componente de checkbox de cabeçalho para tabelas PrimeNG.\n * Integra-se automaticamente ao `TableService` para sincronizar o estado\n * de seleção total/parcial com as linhas da tabela.\n *\n * @example\n * ```html\n * <th>\n * <s-table-header-checkbox [rowProps]=\"['id', 'name']\" />\n * </th>\n * ```\n *\n * @category Data\n */\n@Component({\n selector: 's-table-header-checkbox',\n template: `\n <s-checkbox-list\n [(ngModel)]=\"checkboxState\"\n (ngModelChange)=\"onClick()\"\n [data]=\"checkboxItems\"\n />\n `,\n})\nexport class TableHeaderCheckboxComponent implements OnInit, OnDestroy {\n public static nextId = 0;\n\n /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\n @Input()\n public id = `s-table-header-checkbox-${TableHeaderCheckboxComponent.nextId++}`;\n\n /** @description Desabilita o checkbox de cabeçalho. @default false */\n @Input()\n public disabled = false;\n\n /** @description Lista de propriedades dos itens da linha usadas para identificação. */\n @Input()\n public rowProps?: string[];\n\n /** @description Quando `true`, usa o objeto completo da linha em vez de propriedades específicas. */\n @Input()\n public useAllObject?: boolean;\n\n public checkboxItems: CheckboxListData = {\n label: '',\n };\n\n public checked = false;\n public hasFocus = false;\n public checkboxState: CheckboxListState = { checked: false };\n\n private _ngUnsubscribe = new Subject<void>();\n\n constructor(\n public readonly table: Table,\n public readonly tableService: TableService,\n ) {\n this.table.tableService.valueSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n\n this.table.tableService.selectionSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n }\n\n public ngOnInit(): void {\n this.checked = this.updateCheckedState();\n }\n\n public ngOnDestroy(): void {\n this._ngUnsubscribe.next();\n }\n\n public onFocus(): void {\n this.hasFocus = true;\n }\n\n public onBlur(): void {\n this.hasFocus = false;\n }\n\n public isDisabled(): boolean {\n return this.disabled || !this.table.value || !this.table.value.length;\n }\n\n public onClick(): void {\n if (!this.disabled) {\n if (this.table.value && this.table.value.length > 0) this.onToggleCheckbox(!this.checked);\n }\n }\n\n public updateCheckedState() {\n if (this.table.filteredValue) {\n const val = this.table.filteredValue;\n return (\n val &&\n val.length > 0 &&\n this.table.selection &&\n this.table.selection.length > 0 &&\n this.isAllFilteredValuesChecked()\n );\n } else {\n const val = this.table.value;\n return (\n val &&\n val.length > 0 &&\n this.table.selection &&\n this.table.selection.length > 0 &&\n this.isAllValuesChecked()\n );\n }\n }\n\n public onToggleCheckbox(checked: boolean): void {\n const { filteredValue, value, dataKey } = this.table;\n const gridData = checked ? (filteredValue ? filteredValue.slice() : value.slice()) : [];\n\n if (!dataKey) return;\n\n if (checked) {\n const unselecteds = gridData\n .filter(\n (record) => !this.table._selection.find((selected: any) => record[dataKey] === selected[dataKey]),\n )\n .map((record: any) => {\n if (this.useAllObject) return record;\n\n const newRecord: any = {};\n if (this.rowProps) this.rowProps.forEach((prop: string) => (newRecord[prop] = record[prop]));\n else newRecord[dataKey] = record[dataKey];\n return newRecord;\n });\n this.table._selection = [...this.table._selection, ...unselecteds];\n } else {\n value.forEach((data: any) => {\n this.table._selection = this.table._selection.filter(\n (record: any) => record[dataKey] !== data[dataKey],\n );\n });\n }\n\n this.table.updateSelectionKeys();\n this.table.selectionChange.emit(this.table._selection);\n this.tableService.onSelectionChange();\n\n if (this.table.isStateful()) this.table.saveState();\n }\n\n public isAllFilteredValuesChecked(): boolean {\n if (!this.table.filteredValue) {\n return false;\n } else {\n for (const rowData of this.table.filteredValue) {\n if (!this.table.isSelected(rowData)) {\n return false;\n }\n }\n return true;\n }\n }\n\n public isAllValuesChecked(): boolean {\n if (!this.table.value) {\n return false;\n } else {\n for (const rowData of this.table.value) {\n if (!this.table.isSelected(rowData)) {\n return false;\n }\n }\n return true;\n }\n }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { CheckboxListModule } from '@seniorsistemas/angular-components/checkbox-list';\nimport { TableHeaderCheckboxComponent } from './table-header-checkbox.component';\n\n@NgModule({\n imports: [CommonModule, CheckboxListModule, FormsModule],\n exports: [TableHeaderCheckboxComponent],\n declarations: [TableHeaderCheckboxComponent],\n})\nexport class TableHeaderCheckboxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-table-header.mjs","sources":["../../projects/angular-components/table-header/src/lib/table-header/table-header-checkbox.component.ts","../../projects/angular-components/table-header/src/lib/table-header/table-header-checkox.module.ts","../../projects/angular-components/table-header/src/seniorsistemas-angular-components-table-header.ts"],"sourcesContent":["import { Component, Input, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { CheckboxListData, CheckboxListState } from '@seniorsistemas/angular-components/checkbox-list';\nimport { Table, TableService } from 'primeng/table';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * @description Componente de checkbox de cabeçalho para tabelas PrimeNG.\n * Integra-se automaticamente ao `TableService` para sincronizar o estado\n * de seleção total/parcial com as linhas da tabela.\n *\n * @example\n * ```html\n * <th>\n * <s-table-header-checkbox [rowProps]=\"['id', 'name']\" />\n * </th>\n * ```\n *\n * @category Data\n */\n@Component({\n selector: 's-table-header-checkbox',\n template: `\n <s-checkbox-list\n [(ngModel)]=\"checkboxState\"\n (ngModelChange)=\"onClick()\"\n [data]=\"checkboxItems\"\n />\n `,\n})\nexport class TableHeaderCheckboxComponent implements OnInit, OnDestroy {\n readonly table = inject(Table);\n readonly tableService = inject(TableService);\n\n public static nextId = 0;\n\n /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\n @Input()\n public id = `s-table-header-checkbox-${TableHeaderCheckboxComponent.nextId++}`;\n\n /** @description Desabilita o checkbox de cabeçalho. @default false */\n @Input()\n public disabled = false;\n\n /** @description Lista de propriedades dos itens da linha usadas para identificação. */\n @Input()\n public rowProps?: string[];\n\n /** @description Quando `true`, usa o objeto completo da linha em vez de propriedades específicas. */\n @Input()\n public useAllObject?: boolean;\n\n public checkboxItems: CheckboxListData = {\n label: '',\n };\n\n public checked = false;\n public hasFocus = false;\n public checkboxState: CheckboxListState = { checked: false };\n\n private _ngUnsubscribe = new Subject<void>();\n\n constructor() {\n this.table.tableService.valueSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n\n this.table.tableService.selectionSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n }\n\n public ngOnInit(): void {\n this.checked = this.updateCheckedState();\n }\n\n public ngOnDestroy(): void {\n this._ngUnsubscribe.next();\n }\n\n public onFocus(): void {\n this.hasFocus = true;\n }\n\n public onBlur(): void {\n this.hasFocus = false;\n }\n\n public isDisabled(): boolean {\n return this.disabled || !this.table.value || !this.table.value.length;\n }\n\n public onClick(): void {\n if (!this.disabled) {\n if (this.table.value && this.table.value.length > 0) this.onToggleCheckbox(!this.checked);\n }\n }\n\n public updateCheckedState() {\n if (this.table.filteredValue) {\n const val = this.table.filteredValue;\n return (\n val &&\n val.length > 0 &&\n this.table.selection &&\n this.table.selection.length > 0 &&\n this.isAllFilteredValuesChecked()\n );\n } else {\n const val = this.table.value;\n return (\n val &&\n val.length > 0 &&\n this.table.selection &&\n this.table.selection.length > 0 &&\n this.isAllValuesChecked()\n );\n }\n }\n\n public onToggleCheckbox(checked: boolean): void {\n const { filteredValue, value, dataKey } = this.table;\n const gridData = checked ? (filteredValue ? filteredValue.slice() : value.slice()) : [];\n\n if (!dataKey) return;\n\n if (checked) {\n const unselecteds = gridData\n .filter(\n (record) => !this.table._selection.find((selected: any) => record[dataKey] === selected[dataKey]),\n )\n .map((record: any) => {\n if (this.useAllObject) return record;\n\n const newRecord: any = {};\n if (this.rowProps) this.rowProps.forEach((prop: string) => (newRecord[prop] = record[prop]));\n else newRecord[dataKey] = record[dataKey];\n return newRecord;\n });\n this.table._selection = [...this.table._selection, ...unselecteds];\n } else {\n value.forEach((data: any) => {\n this.table._selection = this.table._selection.filter(\n (record: any) => record[dataKey] !== data[dataKey],\n );\n });\n }\n\n this.table.updateSelectionKeys();\n this.table.selectionChange.emit(this.table._selection);\n this.tableService.onSelectionChange();\n\n if (this.table.isStateful()) this.table.saveState();\n }\n\n public isAllFilteredValuesChecked(): boolean {\n if (!this.table.filteredValue) {\n return false;\n } else {\n for (const rowData of this.table.filteredValue) {\n if (!this.table.isSelected(rowData)) {\n return false;\n }\n }\n return true;\n }\n }\n\n public isAllValuesChecked(): boolean {\n if (!this.table.value) {\n return false;\n } else {\n for (const rowData of this.table.value) {\n if (!this.table.isSelected(rowData)) {\n return false;\n }\n }\n return true;\n }\n }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { CheckboxListModule } from '@seniorsistemas/angular-components/checkbox-list';\nimport { TableHeaderCheckboxComponent } from './table-header-checkbox.component';\n\n@NgModule({\n imports: [CommonModule, CheckboxListModule, FormsModule],\n exports: [TableHeaderCheckboxComponent],\n declarations: [TableHeaderCheckboxComponent],\n})\nexport class TableHeaderCheckboxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|