@seniorsistemas/angular-components 19.9.3 → 19.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/autocomplete/README.md +4 -0
  2. package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +7 -1
  3. package/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.d.ts +3 -1
  4. package/checkbox/lib/checkbox/checkbox.component.d.ts +1 -6
  5. package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +8 -0
  6. package/content-generator/lib/content-generator/content-generator.component.d.ts +2 -2
  7. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +2 -0
  8. package/drawer/README.md +9 -2
  9. package/drawer/lib/drawer/drawer.component.d.ts +12 -1
  10. package/editor/lib/editor/editor.component.d.ts +1 -1
  11. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +10 -4
  12. package/esm2022/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +5 -3
  13. package/esm2022/button/lib/button/button.component.mjs +3 -3
  14. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -9
  15. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +17 -5
  16. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +9 -8
  17. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +18 -3
  18. package/esm2022/drawer/lib/drawer/drawer.component.mjs +33 -11
  19. package/esm2022/drawer/lib/drawer/drawer.module.mjs +2 -2
  20. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
  21. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
  22. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +3 -3
  23. package/esm2022/dynamic-form/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +4 -3
  24. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
  25. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
  26. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
  27. package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs +2 -2
  28. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
  29. package/esm2022/editor/lib/editor/editor.component.mjs +8 -8
  30. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +4 -4
  31. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +4 -4
  32. package/esm2022/global-search/lib/global-search/global-search.module.mjs +2 -2
  33. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +3 -3
  34. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +2 -3
  35. package/esm2022/insights/lib/insights/components/insights-card/insights-card.component.mjs +21 -3
  36. package/esm2022/insights/lib/insights/components/insights-sidebar/insights-sidebar.component.mjs +14 -3
  37. package/esm2022/insights/lib/insights/insights.component.mjs +15 -4
  38. package/esm2022/paginator/lib/models/paginator.models.mjs +1 -1
  39. package/esm2022/paginator/lib/paginator/paginator.component.mjs +19 -13
  40. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +19 -8
  41. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +3 -4
  42. package/esm2022/rating-scale/lib/rating-scale/models/rating-scale-node.mjs +1 -1
  43. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +23 -3
  44. package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +5 -3
  45. package/esm2022/select/lib/select/select.component.mjs +6 -4
  46. package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +6 -5
  47. package/esm2022/slider/lib/slider/slider.component.mjs +3 -3
  48. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +58 -8
  49. package/esm2022/split-button/lib/split-button/split-button.component.mjs +11 -3
  50. package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
  51. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +1 -1
  52. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +14 -21
  53. package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
  54. package/esm2022/token-list/lib/token-list/token-list.component.mjs +7 -3
  55. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +3 -2
  56. package/esm2022/utils/lib/utils/utils.mjs +49 -3
  57. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +13 -5
  58. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  59. package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
  60. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  61. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +16 -4
  62. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  63. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -8
  64. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  65. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +8 -6
  66. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  67. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +17 -2
  68. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-drawer.mjs +32 -9
  70. package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
  71. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +17 -17
  72. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  73. package/fesm2022/seniorsistemas-angular-components-editor.mjs +7 -7
  74. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
  75. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +3 -3
  76. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  77. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +3 -3
  78. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  79. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +3 -4
  80. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  81. package/fesm2022/seniorsistemas-angular-components-insights.mjs +47 -7
  82. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  83. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +18 -12
  84. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  85. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +20 -9
  86. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  87. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +22 -2
  88. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  89. package/fesm2022/seniorsistemas-angular-components-select.mjs +9 -5
  90. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  91. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +5 -4
  92. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
  93. package/fesm2022/seniorsistemas-angular-components-slider.mjs +2 -2
  94. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  95. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +57 -7
  96. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  97. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +10 -2
  98. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  99. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
  100. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  101. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +13 -20
  102. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  103. package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
  104. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  105. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
  106. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  107. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +6 -2
  108. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  109. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +2 -1
  110. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  111. package/fesm2022/seniorsistemas-angular-components-utils.mjs +49 -3
  112. package/fesm2022/seniorsistemas-angular-components-utils.mjs.map +1 -1
  113. package/global-search/lib/global-search/global-search.module.d.ts +1 -1
  114. package/insights/README.md +12 -0
  115. package/insights/lib/insights/components/insights-card/insights-card.component.d.ts +22 -1
  116. package/insights/lib/insights/components/insights-sidebar/insights-sidebar.component.d.ts +9 -1
  117. package/insights/lib/insights/insights.component.d.ts +9 -1
  118. package/package.json +1 -3
  119. package/paginator/lib/models/paginator.models.d.ts +1 -0
  120. package/paginator/lib/paginator/paginator.component.d.ts +3 -1
  121. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +3 -1
  122. package/rating-scale/README.md +38 -13
  123. package/rating-scale/lib/rating-scale/models/rating-scale-node.d.ts +8 -0
  124. package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +4 -1
  125. package/select/README.md +2 -0
  126. package/select/lib/select/components/select-option/select-option.component.d.ts +3 -1
  127. package/select/lib/select/select.component.d.ts +3 -1
  128. package/side-sheet/README.md +4 -4
  129. package/side-sheet/lib/side-sheet/side-sheet.component.d.ts +1 -0
  130. package/speech-recognition/README.md +1 -0
  131. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +4 -1
  132. package/split-button/README.md +2 -0
  133. package/split-button/lib/split-button/split-button.component.d.ts +5 -1
  134. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +1 -4
  135. package/token-list/lib/token-list/token-list.component.d.ts +3 -1
  136. package/utils/lib/utils/utils.d.ts +21 -0
@@ -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, 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';\r\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { SpeechRecognitionService } from '../speech-recognition.service';\r\nimport { TextToSpeechService } from '../text-to-speech.service';\r\n\r\n/**\r\n * @description Componente de reconhecimento de voz que integra a Web Speech API para\r\n * transcrever a fala do usuário em texto, inserída diretamente em um `<textarea>` fornecido.\r\n * Suporta também text-to-speech para leitura em voz alta do conteúdo do campo.\r\n *\r\n * @example\r\n * ```html\r\n * <s-speech-recognition\r\n * [textAreaElement]=\"textAreaRef.nativeElement\"\r\n * (recognizedText)=\"onTextoReconhecido($event)\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-speech-recognition',\r\n templateUrl: './speech-recognition.component.html',\r\n styleUrls: ['./speech-recognition.component.scss'],\r\n standalone: true,\r\n imports: [TranslatePipe],\r\n})\r\nexport class SpeechRecognitionComponent implements OnInit, OnDestroy {\r\n private readonly speechRecognitionService = inject(SpeechRecognitionService);\r\n private readonly textToSpeechService = inject(TextToSpeechService);\r\n private readonly translateService = inject(TranslateService);\r\n\r\n private static TOOLBAR_ACTIVE = false;\r\n /** @description Referência ao elemento `<textarea>` nativo que receberá o texto transcrito. Campo obrigatório. */\r\n @Input({ required: true }) textAreaElement!: HTMLTextAreaElement;\r\n /** @description Quando `true`, mantém o texto existente no campo ao iniciar novo reconhecimento. @default false */\r\n @Input() keepContext = false;\r\n /** @description Placeholder exibido no textarea durante o reconhecimento de voz. @default '' */\r\n @Input() speechRecognitionPlaceholder = '';\r\n private _recognizedText = '';\r\n private originalTextAreaElementText = '';\r\n private isDoneTextToSpeech = false;\r\n private readonly onDestroy$ = new Subject<void>();\r\n private readonly VOICE_SPEEDS = [0.5, 1, 1.5, 2];\r\n private readonly keydownEventListener = (event: KeyboardEvent) => {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n disabled = false;\r\n isListeningUserVoice = false;\r\n voiceSpeed = 1;\r\n isDisabledMicrophone = false;\r\n\r\n canRenderMicrophone = true;\r\n canRenderTextToSpeech = true;\r\n canRenderListeningText = false;\r\n canRenderDiscard = false;\r\n canRenderAprove = false;\r\n canRenderTextToSpeechToolbar = false;\r\n\r\n isPlayingTextToSpeech = false;\r\n\r\n /** @description Emitido quando o reconhecimento de voz é concluído, com o texto transcrito. */\r\n @Output() recognizedText = new EventEmitter<string>();\r\n\r\n ngOnInit(): void {\r\n if (!this.hasSpeechRecognitionBrowserApi) {\r\n return;\r\n }\r\n if (!this.textAreaElement) {\r\n throw new Error('textAreaElement is required');\r\n }\r\n this.textAreaElement.placeholder = this.speechRecognitionPlaceholder\r\n ? this.speechRecognitionPlaceholder\r\n : this.translateService.instant('platform.angular_components.text_area_speech_recognition_placeholder');\r\n this.textAreaElement.addEventListener('keydown', this.keydownEventListener);\r\n this.speechRecognitionService.microphoneStatus$.pipe(takeUntil(this.onDestroy$)).subscribe((status) => {\r\n if (status === 'active') {\r\n this.onCloseToolbar();\r\n }\r\n });\r\n }\r\n\r\n onListen() {\r\n if (this.isDisabledMicrophone || this.isListening) {\r\n return;\r\n }\r\n this.disabled = true;\r\n this.canRenderMicrophone = false;\r\n this.canRenderListeningText = true;\r\n this.originalTextAreaElementText = this.textAreaElement.value;\r\n this.textAreaElement.value = '';\r\n this.isListeningUserVoice = true;\r\n this.speechRecognitionService\r\n .listen()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n ({ text, isFinal }) => {\r\n this._recognizedText = text;\r\n this.setTextAreaValue(text);\r\n this.scrollTextAreaBottom();\r\n if (isFinal) {\r\n this.canRenderAprove = true;\r\n this.canRenderDiscard = true;\r\n this.canRenderListeningText = false;\r\n this.isListeningUserVoice = false;\r\n }\r\n },\r\n () => {\r\n this.isListeningUserVoice = false;\r\n this.canRenderMicrophone = true;\r\n this.isDisabledMicrophone = false;\r\n this.canRenderListeningText = false;\r\n this.disabled = false;\r\n },\r\n );\r\n }\r\n\r\n private scrollTextAreaBottom() {\r\n setTimeout(() => {\r\n this.textAreaElement.scrollTop = this.textAreaElement.scrollHeight;\r\n }, 120);\r\n }\r\n\r\n onOpenToolbar() {\r\n if (this.isDisabledTextToSpeech) {\r\n return;\r\n }\r\n this.canRenderTextToSpeechToolbar = true;\r\n this.canRenderTextToSpeech = false;\r\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = true;\r\n this.speak();\r\n }\r\n\r\n onCloseToolbar() {\r\n this.canRenderTextToSpeechToolbar = false;\r\n this.canRenderTextToSpeech = true;\r\n this.stopTextToSpeech();\r\n this.voiceSpeed = 1;\r\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\r\n }\r\n onDiscard() {\r\n this.canRenderAprove = false;\r\n this.canRenderDiscard = false;\r\n this.canRenderMicrophone = true;\r\n this.canRenderTextToSpeechToolbar = false;\r\n this.canRenderTextToSpeech = true;\r\n this._recognizedText = '';\r\n this.setTextAreaValue(this.originalTextAreaElementText);\r\n this.disabled = false;\r\n this.stopTextToSpeech();\r\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\r\n }\r\n\r\n onAprove() {\r\n this.canRenderAprove = false;\r\n this.canRenderDiscard = false;\r\n this.canRenderMicrophone = true;\r\n this.canRenderTextToSpeechToolbar = false;\r\n this.canRenderTextToSpeech = true;\r\n if (this.keepContext) {\r\n const breakLine = this.originalTextAreaElementText.length > 0 ? '\\n' : '';\r\n this.originalTextAreaElementText += `${breakLine}${this._recognizedText}`;\r\n } else {\r\n this.originalTextAreaElementText = this._recognizedText;\r\n }\r\n this.recognizedText.emit(this.keepContext ? this.originalTextAreaElementText : this._recognizedText);\r\n this.scrollTextAreaBottom();\r\n this._recognizedText = '';\r\n this.disabled = false;\r\n this.textToSpeechService.cancel();\r\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n this.onDestroy$.complete();\r\n }\r\n\r\n toggleTextToSpeech() {\r\n if (this.isPlayingTextToSpeech) {\r\n this.textToSpeechService.pause();\r\n } else {\r\n if (this.isDoneTextToSpeech) {\r\n this.speak();\r\n } else {\r\n this.textToSpeechService.resume();\r\n }\r\n }\r\n this.isPlayingTextToSpeech = !this.isPlayingTextToSpeech;\r\n }\r\n\r\n restartTextToSpeech() {\r\n this.textToSpeechService.cancel();\r\n this.speak();\r\n }\r\n\r\n updateVoiceSpeed() {\r\n const voiceSpeedIndex = this.VOICE_SPEEDS.indexOf(this.voiceSpeed);\r\n const nextVoiceSpeedIndex = this.VOICE_SPEEDS[voiceSpeedIndex + 1] ? voiceSpeedIndex + 1 : 0;\r\n this.voiceSpeed = this.VOICE_SPEEDS[nextVoiceSpeedIndex];\r\n this.textToSpeechService.cancel();\r\n this.speak();\r\n }\r\n\r\n stopListening() {\r\n this.speechRecognitionService.stop();\r\n }\r\n\r\n get isListening() {\r\n return this.speechRecognitionService.isListening;\r\n }\r\n\r\n get hasSpeechRecognitionBrowserApi() {\r\n return this.speechRecognitionService.hasSupportSpeechRecognition;\r\n }\r\n\r\n get isDisabledTextToSpeech() {\r\n const hasTextToSpeechVoice = this.textToSpeechService.hasVoice;\r\n return (\r\n !this.textToSpeech || !hasTextToSpeechVoice || this.isListening || SpeechRecognitionComponent.TOOLBAR_ACTIVE\r\n );\r\n }\r\n\r\n private setTextAreaValue(value: string) {\r\n this.textAreaElement.value = value;\r\n }\r\n\r\n private stopTextToSpeech() {\r\n this.isPlayingTextToSpeech = false;\r\n this.textToSpeechService.cancel();\r\n }\r\n\r\n private speak() {\r\n this.isDoneTextToSpeech = false;\r\n this.isPlayingTextToSpeech = true;\r\n this.textToSpeechService.speak(this.textToSpeech, this.voiceSpeed).then(() => {\r\n this.isPlayingTextToSpeech = false;\r\n this.isDoneTextToSpeech = true;\r\n });\r\n }\r\n\r\n private get textToSpeech() {\r\n return this.textAreaElement.value;\r\n }\r\n}\r\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 { NgModule } from '@angular/core';\r\nimport { SpeechRecognitionComponent } from './speech-recognition/speech-recognition.component';\r\n\r\n@NgModule({\r\n imports: [SpeechRecognitionComponent],\r\n exports: [SpeechRecognitionComponent],\r\n})\r\nexport class SpeechRecognitionModule {}\r\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-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, input, isSignal } from '@angular/core';\r\nimport { TranslateService, TranslatePipe } from '@ngx-translate/core';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { SpeechRecognitionService } from '../speech-recognition.service';\r\nimport { TextToSpeechService } from '../text-to-speech.service';\r\n\r\nfunction SkipIf(...propNames: Array<keyof SpeechRecognitionComponent>) {\r\n return function (\r\n _target: unknown,\r\n _propertyKey: string,\r\n descriptor: TypedPropertyDescriptor<(...args: any[]) => any>\r\n ) {\r\n const original = descriptor.value;\r\n\r\n if (original) {\r\n descriptor.value = function (this: Record<string, any>, ...args: any[]) {\r\n\r\n const shouldSkip = propNames.some((propName) => {\r\n const targetProp = this[propName];\r\n\r\n\r\n return typeof targetProp === 'function'\r\n ? Boolean(targetProp())\r\n : Boolean(targetProp);\r\n });\r\n\r\n if (shouldSkip) {\r\n return;\r\n }\r\n\r\n return original.apply(this, args);\r\n };\r\n }\r\n\r\n return descriptor;\r\n };\r\n}\r\n\r\n/**\r\n * @description Componente de reconhecimento de voz que integra a Web Speech API para\r\n * transcrever a fala do usuário em texto, inserída diretamente em um `<textarea>` fornecido.\r\n * Suporta também text-to-speech para leitura em voz alta do conteúdo do campo.\r\n *\r\n * @example\r\n * ```html\r\n * <s-speech-recognition\r\n * [textAreaElement]=\"textAreaRef.nativeElement\"\r\n * (recognizedText)=\"onTextoReconhecido($event)\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-speech-recognition',\r\n templateUrl: './speech-recognition.component.html',\r\n styleUrls: ['./speech-recognition.component.scss'],\r\n standalone: true,\r\n imports: [TranslatePipe],\r\n})\r\nexport class SpeechRecognitionComponent implements OnInit, OnDestroy {\r\n private readonly speechRecognitionService = inject(SpeechRecognitionService);\r\n private readonly textToSpeechService = inject(TextToSpeechService);\r\n private readonly translateService = inject(TranslateService);\r\n\r\n private static TOOLBAR_ACTIVE = false;\r\n /** @description Referência ao elemento `<textarea>` nativo que receberá o texto transcrito. Campo obrigatório. */\r\n @Input({ required: true }) textAreaElement!: HTMLTextAreaElement;\r\n /** @description Quando `true`, mantém o texto existente no campo ao iniciar novo reconhecimento. @default false */\r\n @Input() keepContext = false;\r\n /** @description Placeholder exibido no textarea durante o reconhecimento de voz. @default '' */\r\n @Input() speechRecognitionPlaceholder = '';\r\n /** @description Classe do ícone do botão de mais opções. @default 'far fa-ellipsis-h' */\r\n @Input() moreOptionsIconClass = 'far fa-ellipsis-h';\r\n \r\n private _recognizedText = '';\r\n private originalTextAreaElementText = '';\r\n private isDoneTextToSpeech = false;\r\n private readonly onDestroy$ = new Subject<void>();\r\n private readonly VOICE_SPEEDS = [0.5, 1, 1.5, 2];\r\n private readonly keydownEventListener = (event: KeyboardEvent) => {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n disabledSpeechRecognition = input(false);\r\n\r\n disabled = false;\r\n isListeningUserVoice = false;\r\n voiceSpeed = 1;\r\n isDisabledMicrophone = false;\r\n\r\n canRenderMicrophone = true;\r\n canRenderTextToSpeech = true;\r\n canRenderListeningText = false;\r\n canRenderDiscard = false;\r\n canRenderAprove = false;\r\n canRenderTextToSpeechToolbar = false;\r\n\r\n isPlayingTextToSpeech = false;\r\n\r\n /** @description Emitido quando o reconhecimento de voz é concluído, com o texto transcrito. */\r\n @Output() recognizedText = new EventEmitter<string>();\r\n\r\n ngOnInit(): void {\r\n if (!this.hasSpeechRecognitionBrowserApi) {\r\n return;\r\n }\r\n if (!this.textAreaElement) {\r\n throw new Error('textAreaElement is required');\r\n }\r\n this.textAreaElement.placeholder = this.speechRecognitionPlaceholder\r\n ? this.speechRecognitionPlaceholder\r\n : this.translateService.instant('platform.angular_components.text_area_speech_recognition_placeholder');\r\n this.textAreaElement.addEventListener('keydown', this.keydownEventListener);\r\n this.speechRecognitionService.microphoneStatus$.pipe(takeUntil(this.onDestroy$)).subscribe((status) => {\r\n if (status === 'active') {\r\n this.onCloseToolbar();\r\n }\r\n });\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition', 'isDisabledMicrophone', 'isListening')\r\n onListen() {\r\n this.disabled = true;\r\n this.canRenderMicrophone = false;\r\n this.canRenderListeningText = true;\r\n this.originalTextAreaElementText = this.textAreaElement.value;\r\n this.textAreaElement.value = '';\r\n this.isListeningUserVoice = true;\r\n this.speechRecognitionService\r\n .listen()\r\n .pipe(takeUntil(this.onDestroy$))\r\n .subscribe(\r\n ({ text, isFinal }) => {\r\n this._recognizedText = text;\r\n this.setTextAreaValue(text);\r\n this.scrollTextAreaBottom();\r\n if (isFinal) {\r\n this.canRenderAprove = true;\r\n this.canRenderDiscard = true;\r\n this.canRenderListeningText = false;\r\n this.isListeningUserVoice = false;\r\n }\r\n },\r\n () => {\r\n this.isListeningUserVoice = false;\r\n this.canRenderMicrophone = true;\r\n this.isDisabledMicrophone = false;\r\n this.canRenderListeningText = false;\r\n this.disabled = false;\r\n },\r\n );\r\n }\r\n\r\n private scrollTextAreaBottom() {\r\n setTimeout(() => {\r\n this.textAreaElement.scrollTop = this.textAreaElement.scrollHeight;\r\n }, 120);\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition')\r\n onOpenToolbar() {\r\n if (this.isDisabledTextToSpeech) {\r\n return;\r\n }\r\n this.canRenderTextToSpeechToolbar = true;\r\n this.canRenderTextToSpeech = false;\r\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = true;\r\n this.speak();\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition')\r\n onCloseToolbar() {\r\n this.canRenderTextToSpeechToolbar = false;\r\n this.canRenderTextToSpeech = true;\r\n this.stopTextToSpeech();\r\n this.voiceSpeed = 1;\r\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition')\r\n onDiscard() {\r\n this.canRenderAprove = false;\r\n this.canRenderDiscard = false;\r\n this.canRenderMicrophone = true;\r\n this.canRenderTextToSpeechToolbar = false;\r\n this.canRenderTextToSpeech = true;\r\n this._recognizedText = '';\r\n this.setTextAreaValue(this.originalTextAreaElementText);\r\n this.disabled = false;\r\n this.stopTextToSpeech();\r\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition')\r\n onAprove() {\r\n this.canRenderAprove = false;\r\n this.canRenderDiscard = false;\r\n this.canRenderMicrophone = true;\r\n this.canRenderTextToSpeechToolbar = false;\r\n this.canRenderTextToSpeech = true;\r\n if (this.keepContext) {\r\n const breakLine = this.originalTextAreaElementText.length > 0 ? '\\n' : '';\r\n this.originalTextAreaElementText += `${breakLine}${this._recognizedText}`;\r\n } else {\r\n this.originalTextAreaElementText = this._recognizedText;\r\n }\r\n this.recognizedText.emit(this.keepContext ? this.originalTextAreaElementText : this._recognizedText);\r\n this.scrollTextAreaBottom();\r\n this._recognizedText = '';\r\n this.disabled = false;\r\n this.textToSpeechService.cancel();\r\n SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n this.onDestroy$.complete();\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition')\r\n toggleTextToSpeech() {\r\n if (this.isPlayingTextToSpeech) {\r\n this.textToSpeechService.pause();\r\n } else {\r\n if (this.isDoneTextToSpeech) {\r\n this.speak();\r\n } else {\r\n this.textToSpeechService.resume();\r\n }\r\n }\r\n this.isPlayingTextToSpeech = !this.isPlayingTextToSpeech;\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition')\r\n restartTextToSpeech() {\r\n this.textToSpeechService.cancel();\r\n this.speak();\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition')\r\n updateVoiceSpeed() {\r\n const voiceSpeedIndex = this.VOICE_SPEEDS.indexOf(this.voiceSpeed);\r\n const nextVoiceSpeedIndex = this.VOICE_SPEEDS[voiceSpeedIndex + 1] ? voiceSpeedIndex + 1 : 0;\r\n this.voiceSpeed = this.VOICE_SPEEDS[nextVoiceSpeedIndex];\r\n this.textToSpeechService.cancel();\r\n this.speak();\r\n }\r\n\r\n @SkipIf('disabledSpeechRecognition')\r\n stopListening() {\r\n this.speechRecognitionService.stop();\r\n }\r\n\r\n\r\n get isListening() {\r\n return this.speechRecognitionService.isListening;\r\n }\r\n\r\n get hasSpeechRecognitionBrowserApi() {\r\n return this.speechRecognitionService.hasSupportSpeechRecognition;\r\n }\r\n\r\n get isDisabledTextToSpeech() {\r\n const hasTextToSpeechVoice = this.textToSpeechService.hasVoice;\r\n return (\r\n !this.textToSpeech || !hasTextToSpeechVoice || this.isListening || SpeechRecognitionComponent.TOOLBAR_ACTIVE\r\n );\r\n }\r\n\r\n private setTextAreaValue(value: string) {\r\n this.textAreaElement.value = value;\r\n }\r\n\r\n private stopTextToSpeech() {\r\n this.isPlayingTextToSpeech = false;\r\n this.textToSpeechService.cancel();\r\n }\r\n\r\n private speak() {\r\n this.isDoneTextToSpeech = false;\r\n this.isPlayingTextToSpeech = true;\r\n this.textToSpeechService.speak(this.textToSpeech, this.voiceSpeed).then(() => {\r\n this.isPlayingTextToSpeech = false;\r\n this.isDoneTextToSpeech = true;\r\n });\r\n }\r\n\r\n private get textToSpeech() {\r\n return this.textAreaElement.value;\r\n }\r\n}\r\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 [class.speech-recognition-item-disabled]=\"disabledSpeechRecognition()\">\n <i [class]=\"moreOptionsIconClass\"></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 || disabledSpeechRecognition()\">\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 { NgModule } from '@angular/core';\r\nimport { SpeechRecognitionComponent } from './speech-recognition/speech-recognition.component';\r\n\r\n@NgModule({\r\n imports: [SpeechRecognitionComponent],\r\n exports: [SpeechRecognitionComponent],\r\n})\r\nexport class SpeechRecognitionModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -30,6 +30,10 @@ class SplitButtonComponent {
30
30
  type = 'primary';
31
31
  /** @description Lista de opções exibidas no dropdown. Campo obrigatório. */
32
32
  options;
33
+ /** @description Classe do ícone exibido quando o dropdown está fechado. @default 'far fa-chevron-down' */
34
+ openIcon = 'far fa-chevron-down';
35
+ /** @description Classe do ícone exibido quando o dropdown está aberto. @default 'far fa-chevron-up' */
36
+ closeIcon = 'far fa-chevron-up';
33
37
  /** @description Emitido quando o usuário clica no botão principal (não no dropdown). */
34
38
  buttonClicked = new EventEmitter();
35
39
  open = false;
@@ -57,11 +61,11 @@ class SplitButtonComponent {
57
61
  this.open = false;
58
62
  }
59
63
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
60
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SplitButtonComponent, isStandalone: true, 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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SplitButtonComponent, isStandalone: true, selector: "s-split-button", inputs: { disabled: "disabled", iconClass: "iconClass", label: "label", type: "type", options: "options", openIcon: "openIcon", closeIcon: "closeIcon" }, 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 [class]=\"open ? closeIcon : openIcon\"\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: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
61
65
  }
62
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonComponent, decorators: [{
63
67
  type: Component,
64
- args: [{ selector: 's-split-button', standalone: true, imports: [NgClass], 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"] }]
68
+ args: [{ selector: 's-split-button', standalone: true, imports: [NgClass], 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 [class]=\"open ? closeIcon : openIcon\"\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"] }]
65
69
  }], propDecorators: { disabled: [{
66
70
  type: Input
67
71
  }], iconClass: [{
@@ -75,6 +79,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
75
79
  }], options: [{
76
80
  type: Input,
77
81
  args: [{ required: true }]
82
+ }], openIcon: [{
83
+ type: Input
84
+ }], closeIcon: [{
85
+ type: Input
78
86
  }], buttonClicked: [{
79
87
  type: Output
80
88
  }], onClickout: [{
@@ -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 { NgClass } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\r\n\r\nimport { SplitButtonOption } from './models/split-button-option';\r\nimport { SplitButtonType } from './models/split-button-type';\r\n\r\n/**\r\n * @description Botão composto com ação principal e dropdown de opções adicionais.\r\n * Ao clicar no botão principal emite `buttonClicked`; ao clicar no ícone de seta\r\n * abre/fecha o dropdown com a lista de `options`.\r\n *\r\n * @example\r\n * ```html\r\n * <s-split-button\r\n * label=\"Salvar\"\r\n * iconClass=\"fas fa-save\"\r\n * [options]=\"menuOpcoes\"\r\n * (buttonClicked)=\"onSalvar()\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-split-button',\r\n templateUrl: './split-button.component.html',\r\n styleUrls: ['./split-button.component.scss'],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class SplitButtonComponent {\r\n private readonly _eRef = inject(ElementRef);\r\n\r\n /** @description Desabilita o botão principal e o dropdown. @default false */\r\n @Input()\r\n public disabled = false;\r\n\r\n /** @description Classe do ícone exibido no botão principal. Campo obrigatório. */\r\n @Input({ required: true })\r\n public iconClass!: string;\r\n\r\n /** @description Rótulo do botão principal. Campo obrigatório. */\r\n @Input({ required: true })\r\n public label!: string;\r\n\r\n /** @description Estilo visual do botão (`'primary'` ou `'secondary'`). @default 'primary' */\r\n @Input()\r\n public type: SplitButtonType = 'primary';\r\n\r\n /** @description Lista de opções exibidas no dropdown. Campo obrigatório. */\r\n @Input({ required: true })\r\n public options!: SplitButtonOption[];\r\n\r\n /** @description Emitido quando o usuário clica no botão principal (não no dropdown). */\r\n @Output()\r\n public buttonClicked = new EventEmitter();\r\n\r\n public open = false;\r\n\r\n @HostListener('document:click', ['$event'])\r\n public onClickout(event: MouseEvent) {\r\n if (!this._eRef.nativeElement.contains(event.target)) {\r\n this._closeDropdown();\r\n }\r\n }\r\n\r\n public onButtonClick() {\r\n if (!this.disabled) {\r\n this.buttonClicked.emit();\r\n this._closeDropdown();\r\n }\r\n }\r\n\r\n public onDropdownClick() {\r\n if (!this.disabled) {\r\n this.open = !this.open;\r\n }\r\n }\r\n\r\n public onOptionClick(option: SplitButtonOption) {\r\n option.action?.();\r\n this._closeDropdown();\r\n }\r\n\r\n private _closeDropdown() {\r\n this.open = false;\r\n }\r\n}\r\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';\r\n\r\nimport { SplitButtonComponent } from './split-button.component';\r\n\r\n@NgModule({\r\n imports: [SplitButtonComponent],\r\n exports: [SplitButtonComponent],\r\n})\r\nexport class SplitButtonModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;AAMA;;;;;;;;;;;;;;;AAeG;MAQU,oBAAoB,CAAA;AACZ,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;;IAIrC,QAAQ,GAAG,KAAK,CAAC;;AAIjB,IAAA,SAAS,CAAU;;AAInB,IAAA,KAAK,CAAU;;IAIf,IAAI,GAAoB,SAAS,CAAC;;AAIlC,IAAA,OAAO,CAAuB;;AAI9B,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;IAEnC,IAAI,GAAG,KAAK,CAAC;AAGb,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAClD,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;KACJ;IAEM,aAAa,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;KACJ;IAEM,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1B;KACJ;AAEM,IAAA,aAAa,CAAC,MAAyB,EAAA;AAC1C,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC;QAClB,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;IAEO,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;KACrB;wGAxDQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BjC,mmCA4CA,EAAA,MAAA,EAAA,CAAA,+zEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjBc,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAER,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGd,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,mmCAAA,EAAA,MAAA,EAAA,CAAA,+zEAAA,CAAA,EAAA,CAAA;8BAOX,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAKC,SAAS,EAAA,CAAA;sBADf,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAKlB,KAAK,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAKlB,IAAI,EAAA,CAAA;sBADV,KAAK;gBAKC,OAAO,EAAA,CAAA;sBADb,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAKlB,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAMA,UAAU,EAAA,CAAA;sBADhB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MElDjC,iBAAiB,CAAA;wGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAjB,iBAAiB,EAAA,OAAA,EAAA,CAHhB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CACpB,oBAAoB,CAAA,EAAA,CAAA,CAAA;yGAErB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,oBAAoB,CAAC;oBAC/B,OAAO,EAAE,CAAC,oBAAoB,CAAC;AAClC,iBAAA,CAAA;;;ACPD;;AAEG;;;;"}
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 { NgClass } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from '@angular/core';\r\n\r\nimport { SplitButtonOption } from './models/split-button-option';\r\nimport { SplitButtonType } from './models/split-button-type';\r\n\r\n/**\r\n * @description Botão composto com ação principal e dropdown de opções adicionais.\r\n * Ao clicar no botão principal emite `buttonClicked`; ao clicar no ícone de seta\r\n * abre/fecha o dropdown com a lista de `options`.\r\n *\r\n * @example\r\n * ```html\r\n * <s-split-button\r\n * label=\"Salvar\"\r\n * iconClass=\"fas fa-save\"\r\n * [options]=\"menuOpcoes\"\r\n * (buttonClicked)=\"onSalvar()\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-split-button',\r\n templateUrl: './split-button.component.html',\r\n styleUrls: ['./split-button.component.scss'],\r\n standalone: true,\r\n imports: [NgClass],\r\n})\r\nexport class SplitButtonComponent {\r\n private readonly _eRef = inject(ElementRef);\r\n\r\n /** @description Desabilita o botão principal e o dropdown. @default false */\r\n @Input()\r\n public disabled = false;\r\n\r\n /** @description Classe do ícone exibido no botão principal. Campo obrigatório. */\r\n @Input({ required: true })\r\n public iconClass!: string;\r\n\r\n /** @description Rótulo do botão principal. Campo obrigatório. */\r\n @Input({ required: true })\r\n public label!: string;\r\n\r\n /** @description Estilo visual do botão (`'primary'` ou `'secondary'`). @default 'primary' */\r\n @Input()\r\n public type: SplitButtonType = 'primary';\r\n\r\n /** @description Lista de opções exibidas no dropdown. Campo obrigatório. */\r\n @Input({ required: true })\r\n public options!: SplitButtonOption[];\r\n\r\n /** @description Classe do ícone exibido quando o dropdown está fechado. @default 'far fa-chevron-down' */\r\n @Input()\r\n public openIcon = 'far fa-chevron-down';\r\n\r\n /** @description Classe do ícone exibido quando o dropdown está aberto. @default 'far fa-chevron-up' */\r\n @Input()\r\n public closeIcon = 'far fa-chevron-up';\r\n\r\n /** @description Emitido quando o usuário clica no botão principal (não no dropdown). */\r\n @Output()\r\n public buttonClicked = new EventEmitter();\r\n\r\n public open = false;\r\n\r\n @HostListener('document:click', ['$event'])\r\n public onClickout(event: MouseEvent) {\r\n if (!this._eRef.nativeElement.contains(event.target)) {\r\n this._closeDropdown();\r\n }\r\n }\r\n\r\n public onButtonClick() {\r\n if (!this.disabled) {\r\n this.buttonClicked.emit();\r\n this._closeDropdown();\r\n }\r\n }\r\n\r\n public onDropdownClick() {\r\n if (!this.disabled) {\r\n this.open = !this.open;\r\n }\r\n }\r\n\r\n public onOptionClick(option: SplitButtonOption) {\r\n option.action?.();\r\n this._closeDropdown();\r\n }\r\n\r\n private _closeDropdown() {\r\n this.open = false;\r\n }\r\n}\r\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 [class]=\"open ? closeIcon : openIcon\"\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';\r\n\r\nimport { SplitButtonComponent } from './split-button.component';\r\n\r\n@NgModule({\r\n imports: [SplitButtonComponent],\r\n exports: [SplitButtonComponent],\r\n})\r\nexport class SplitButtonModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -65,7 +65,7 @@ class StarRatingComponent {
65
65
  useExisting: StarRatingComponent,
66
66
  multi: true,
67
67
  },
68
- ], ngImport: i0, template: "@let justifyContentClassName = 'justify-' + justifyContent();\n<section [class]=\"justifyContentClassName\" class=\"flex gap-2\" [class.opacity-50]=\"disabled()\">\n @for(item of elementsRender(); track item) {\n @let isActivated = selectedStar() <= item;\n <i\n [class.fas]=\"!isActivated\"\n [class.far]=\"isActivated\"\n [class.cursor-pointer]=\"!disabled()\"\n class=\"fa-star text-buttercup-500 cursor-pointer\"\n (sInteractiveContent)=\"onSelectStar(item + 1)\">\n </i>\n }\n</section>\n", dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }] });
68
+ ], ngImport: i0, template: "@let justifyContentClassName = 'justify-' + justifyContent();\n<section [class]=\"justifyContentClassName\" class=\"flex gap-2\" [class.opacity-50]=\"disabled()\">\n @for(item of elementsRender(); track item) {\n @let isActivated = selectedStar() <= item;\n <i\n [class.fas]=\"!isActivated\"\n [class.far]=\"isActivated\"\n [class.cursor-pointer]=\"!disabled()\"\n class=\"fa-star text-buttercup-500 cursor-pointer\"\n [disabled]=\"disabled()\"\n (sInteractiveContent)=\"onSelectStar(item + 1)\">\n </i>\n }\n</section>\n", dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }] });
69
69
  }
70
70
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StarRatingComponent, decorators: [{
71
71
  type: Component,
@@ -75,7 +75,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
75
75
  useExisting: StarRatingComponent,
76
76
  multi: true,
77
77
  },
78
- ], template: "@let justifyContentClassName = 'justify-' + justifyContent();\n<section [class]=\"justifyContentClassName\" class=\"flex gap-2\" [class.opacity-50]=\"disabled()\">\n @for(item of elementsRender(); track item) {\n @let isActivated = selectedStar() <= item;\n <i\n [class.fas]=\"!isActivated\"\n [class.far]=\"isActivated\"\n [class.cursor-pointer]=\"!disabled()\"\n class=\"fa-star text-buttercup-500 cursor-pointer\"\n (sInteractiveContent)=\"onSelectStar(item + 1)\">\n </i>\n }\n</section>\n" }]
78
+ ], template: "@let justifyContentClassName = 'justify-' + justifyContent();\n<section [class]=\"justifyContentClassName\" class=\"flex gap-2\" [class.opacity-50]=\"disabled()\">\n @for(item of elementsRender(); track item) {\n @let isActivated = selectedStar() <= item;\n <i\n [class.fas]=\"!isActivated\"\n [class.far]=\"isActivated\"\n [class.cursor-pointer]=\"!disabled()\"\n class=\"fa-star text-buttercup-500 cursor-pointer\"\n [disabled]=\"disabled()\"\n (sInteractiveContent)=\"onSelectStar(item + 1)\">\n </i>\n }\n</section>\n" }]
79
79
  }] });
80
80
 
81
81
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-star-rating.mjs","sources":["../../projects/angular-components/star-rating/src/star-rating/star-rating.component.ts","../../projects/angular-components/star-rating/src/star-rating/star-rating.component.html","../../projects/angular-components/star-rating/src/seniorsistemas-angular-components-star-rating.ts"],"sourcesContent":["import { Component, computed, input, model } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\nimport { JustifyTypes } from './star-rating-models';\n\n/**\n * @description Componente de avaliação por estrelas com suporte a `ControlValueAccessor`\n * para integração com formulários Angular. Permite configurar o número de estrelas,\n * alinhamento e estado desabilitado. Clicar na estrela já selecionada a deseleciona.\n *\n * @example\n * ```html\n * <s-star-rating [starsRange]=\"5\" formControlName=\"avaliacao\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-star-rating',\n standalone: true,\n imports: [InteractiveContentDirective],\n templateUrl: './star-rating.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: StarRatingComponent,\n multi: true,\n },\n ],\n})\nexport class StarRatingComponent implements ControlValueAccessor {\n onChange: (value: number) => void = () => {};\n onTouched: (value: number) => void = () => {};\n\n /** @description Índice da estrela atualmente selecionada (1-based). @default 0 */\n selectedStar = model(0);\n /** @description Número total de estrelas exibidas. @default 5 */\n starsRange = input(5);\n /** @description Alinhamento horizontal das estrelas. @default 'center' */\n justifyContent = input<JustifyTypes>('center');\n /** @description Desabilita a seleção de estrelas. @default false */\n disabled = model(false);\n\n protected readonly elementsRender = computed(() => {\n const elements = this.starsRange();\n return Array.from({ length: elements }).map((_x, $index) => $index);\n });\n\n writeValue(obj: number): void {\n if (obj !== null) {\n this.selectedStar.set(obj);\n }\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n onSelectStar(selectedIndex: number) {\n this.storeValue(selectedIndex);\n }\n\n private storeValue(selectedIndex: number) {\n if (this.disabled()) {\n return;\n }\n if (selectedIndex === this.selectedStar()) {\n selectedIndex = 0;\n }\n this.writeValue(selectedIndex);\n this.onChange(selectedIndex);\n this.onTouched(selectedIndex);\n }\n}\n\n","@let justifyContentClassName = 'justify-' + justifyContent();\n<section [class]=\"justifyContentClassName\" class=\"flex gap-2\" [class.opacity-50]=\"disabled()\">\n @for(item of elementsRender(); track item) {\n @let isActivated = selectedStar() <= item;\n <i\n [class.fas]=\"!isActivated\"\n [class.far]=\"isActivated\"\n [class.cursor-pointer]=\"!disabled()\"\n class=\"fa-star text-buttercup-500 cursor-pointer\"\n (sInteractiveContent)=\"onSelectStar(item + 1)\">\n </i>\n }\n</section>\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-star-rating.mjs","sources":["../../projects/angular-components/star-rating/src/star-rating/star-rating.component.ts","../../projects/angular-components/star-rating/src/star-rating/star-rating.component.html","../../projects/angular-components/star-rating/src/seniorsistemas-angular-components-star-rating.ts"],"sourcesContent":["import { Component, computed, input, model } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\nimport { JustifyTypes } from './star-rating-models';\n\n/**\n * @description Componente de avaliação por estrelas com suporte a `ControlValueAccessor`\n * para integração com formulários Angular. Permite configurar o número de estrelas,\n * alinhamento e estado desabilitado. Clicar na estrela já selecionada a deseleciona.\n *\n * @example\n * ```html\n * <s-star-rating [starsRange]=\"5\" formControlName=\"avaliacao\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-star-rating',\n standalone: true,\n imports: [InteractiveContentDirective],\n templateUrl: './star-rating.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: StarRatingComponent,\n multi: true,\n },\n ],\n})\nexport class StarRatingComponent implements ControlValueAccessor {\n onChange: (value: number) => void = () => {};\n onTouched: (value: number) => void = () => {};\n\n /** @description Índice da estrela atualmente selecionada (1-based). @default 0 */\n selectedStar = model(0);\n /** @description Número total de estrelas exibidas. @default 5 */\n starsRange = input(5);\n /** @description Alinhamento horizontal das estrelas. @default 'center' */\n justifyContent = input<JustifyTypes>('center');\n /** @description Desabilita a seleção de estrelas. @default false */\n disabled = model(false);\n\n protected readonly elementsRender = computed(() => {\n const elements = this.starsRange();\n return Array.from({ length: elements }).map((_x, $index) => $index);\n });\n\n writeValue(obj: number): void {\n if (obj !== null) {\n this.selectedStar.set(obj);\n }\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n onSelectStar(selectedIndex: number) {\n this.storeValue(selectedIndex);\n }\n\n private storeValue(selectedIndex: number) {\n if (this.disabled()) {\n return;\n }\n if (selectedIndex === this.selectedStar()) {\n selectedIndex = 0;\n }\n this.writeValue(selectedIndex);\n this.onChange(selectedIndex);\n this.onTouched(selectedIndex);\n }\n}\n\n","@let justifyContentClassName = 'justify-' + justifyContent();\n<section [class]=\"justifyContentClassName\" class=\"flex gap-2\" [class.opacity-50]=\"disabled()\">\n @for(item of elementsRender(); track item) {\n @let isActivated = selectedStar() <= item;\n <i\n [class.fas]=\"!isActivated\"\n [class.far]=\"isActivated\"\n [class.cursor-pointer]=\"!disabled()\"\n class=\"fa-star text-buttercup-500 cursor-pointer\"\n [disabled]=\"disabled()\"\n (sInteractiveContent)=\"onSelectStar(item + 1)\">\n </i>\n }\n</section>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Component, Input, NgModule } from '@angular/core';
3
- import { CheckboxListComponent } from '@seniorsistemas/angular-components/checkbox-list';
3
+ import { CheckboxComponent } from '@seniorsistemas/angular-components/checkbox';
4
4
  import { Table, TableService } from 'primeng/table';
5
5
  import { Subject } from 'rxjs';
6
6
  import { takeUntil } from 'rxjs/operators';
7
- import * as i1 from '@angular/forms';
8
- import { FormsModule } from '@angular/forms';
9
7
 
10
8
  /**
11
9
  * @description Componente de checkbox de cabeçalho para tabelas PrimeNG.
@@ -33,12 +31,8 @@ class TableHeaderCheckboxComponent {
33
31
  rowProps;
34
32
  /** @description Quando `true`, usa o objeto completo da linha em vez de propriedades específicas. */
35
33
  useAllObject;
36
- checkboxItems = {
37
- label: '',
38
- };
39
34
  checked = false;
40
35
  hasFocus = false;
41
- checkboxState = { checked: false };
42
36
  _ngUnsubscribe = new Subject();
43
37
  constructor() {
44
38
  this.table.tableService.valueSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {
@@ -63,10 +57,11 @@ class TableHeaderCheckboxComponent {
63
57
  isDisabled() {
64
58
  return this.disabled || !this.table.value || !this.table.value.length;
65
59
  }
66
- onClick() {
60
+ onClick(checked) {
67
61
  if (!this.disabled) {
68
- if (this.table.value && this.table.value.length > 0)
69
- this.onToggleCheckbox(!this.checked);
62
+ if (this.table.value && this.table.value.length > 0) {
63
+ this.onToggleCheckbox(checked);
64
+ }
70
65
  }
71
66
  }
72
67
  updateCheckedState() {
@@ -146,26 +141,24 @@ class TableHeaderCheckboxComponent {
146
141
  }
147
142
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableHeaderCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
148
143
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TableHeaderCheckboxComponent, isStandalone: true, selector: "s-table-header-checkbox", inputs: { id: "id", disabled: "disabled", rowProps: "rowProps", useAllObject: "useAllObject" }, ngImport: i0, template: `
149
- <s-checkbox-list
150
- [(ngModel)]="checkboxState"
151
- (ngModelChange)="onClick()"
152
- [data]="checkboxItems"
144
+ <s-checkbox
145
+ [checked]="checked"
146
+ (checkedChange)="onClick($event)"
153
147
  />
154
- `, isInline: true, dependencies: [{ kind: "component", type: CheckboxListComponent, selector: "s-checkbox-list", inputs: ["data"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
148
+ `, isInline: true, dependencies: [{ kind: "component", type: CheckboxComponent, selector: "s-checkbox", inputs: ["disabled", "checked", "indeterminate", "label", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "checkedChange"] }] });
155
149
  }
156
150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableHeaderCheckboxComponent, decorators: [{
157
151
  type: Component,
158
152
  args: [{
159
153
  selector: 's-table-header-checkbox',
160
154
  template: `
161
- <s-checkbox-list
162
- [(ngModel)]="checkboxState"
163
- (ngModelChange)="onClick()"
164
- [data]="checkboxItems"
155
+ <s-checkbox
156
+ [checked]="checked"
157
+ (checkedChange)="onClick($event)"
165
158
  />
166
159
  `,
167
160
  standalone: true,
168
- imports: [CheckboxListComponent, FormsModule],
161
+ imports: [CheckboxComponent],
169
162
  }]
170
163
  }], ctorParameters: () => [], propDecorators: { id: [{
171
164
  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, inject } from '@angular/core';\r\n\r\nimport {\r\n CheckboxListData,\r\n CheckboxListState,\r\n CheckboxListComponent,\r\n} from '@seniorsistemas/angular-components/checkbox-list';\r\nimport { Table, TableService } from 'primeng/table';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n/**\r\n * @description Componente de checkbox de cabeçalho para tabelas PrimeNG.\r\n * Integra-se automaticamente ao `TableService` para sincronizar o estado\r\n * de seleção total/parcial com as linhas da tabela.\r\n *\r\n * @example\r\n * ```html\r\n * <th>\r\n * <s-table-header-checkbox [rowProps]=\"['id', 'name']\" />\r\n * </th>\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n selector: 's-table-header-checkbox',\r\n template: `\r\n <s-checkbox-list\r\n [(ngModel)]=\"checkboxState\"\r\n (ngModelChange)=\"onClick()\"\r\n [data]=\"checkboxItems\"\r\n />\r\n `,\r\n standalone: true,\r\n imports: [CheckboxListComponent, FormsModule],\r\n})\r\nexport class TableHeaderCheckboxComponent implements OnInit, OnDestroy {\r\n readonly table = inject(Table);\r\n readonly tableService = inject(TableService);\r\n\r\n public static nextId = 0;\r\n\r\n /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\r\n @Input()\r\n public id = `s-table-header-checkbox-${TableHeaderCheckboxComponent.nextId++}`;\r\n\r\n /** @description Desabilita o checkbox de cabeçalho. @default false */\r\n @Input()\r\n public disabled = false;\r\n\r\n /** @description Lista de propriedades dos itens da linha usadas para identificação. */\r\n @Input()\r\n public rowProps?: string[];\r\n\r\n /** @description Quando `true`, usa o objeto completo da linha em vez de propriedades específicas. */\r\n @Input()\r\n public useAllObject?: boolean;\r\n\r\n public checkboxItems: CheckboxListData = {\r\n label: '',\r\n };\r\n\r\n public checked = false;\r\n public hasFocus = false;\r\n public checkboxState: CheckboxListState = { checked: false };\r\n\r\n private _ngUnsubscribe = new Subject<void>();\r\n\r\n constructor() {\r\n this.table.tableService.valueSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\r\n this.checked = this.updateCheckedState();\r\n });\r\n\r\n this.table.tableService.selectionSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\r\n this.checked = this.updateCheckedState();\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.checked = this.updateCheckedState();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._ngUnsubscribe.next();\r\n }\r\n\r\n public onFocus(): void {\r\n this.hasFocus = true;\r\n }\r\n\r\n public onBlur(): void {\r\n this.hasFocus = false;\r\n }\r\n\r\n public isDisabled(): boolean {\r\n return this.disabled || !this.table.value || !this.table.value.length;\r\n }\r\n\r\n public onClick(): void {\r\n if (!this.disabled) {\r\n if (this.table.value && this.table.value.length > 0) this.onToggleCheckbox(!this.checked);\r\n }\r\n }\r\n\r\n public updateCheckedState() {\r\n if (this.table.filteredValue) {\r\n const val = this.table.filteredValue;\r\n return (\r\n val &&\r\n val.length > 0 &&\r\n this.table.selection &&\r\n this.table.selection.length > 0 &&\r\n this.isAllFilteredValuesChecked()\r\n );\r\n } else {\r\n const val = this.table.value;\r\n return (\r\n val &&\r\n val.length > 0 &&\r\n this.table.selection &&\r\n this.table.selection.length > 0 &&\r\n this.isAllValuesChecked()\r\n );\r\n }\r\n }\r\n\r\n public onToggleCheckbox(checked: boolean): void {\r\n const { filteredValue, value, dataKey } = this.table;\r\n const gridData = checked ? (filteredValue ? filteredValue.slice() : value.slice()) : [];\r\n\r\n if (!dataKey) return;\r\n\r\n if (checked) {\r\n const unselecteds = gridData\r\n .filter(\r\n (record) => !this.table._selection.find((selected: any) => record[dataKey] === selected[dataKey]),\r\n )\r\n .map((record: any) => {\r\n if (this.useAllObject) return record;\r\n\r\n const newRecord: any = {};\r\n if (this.rowProps) this.rowProps.forEach((prop: string) => (newRecord[prop] = record[prop]));\r\n else newRecord[dataKey] = record[dataKey];\r\n return newRecord;\r\n });\r\n this.table._selection = [...this.table._selection, ...unselecteds];\r\n } else {\r\n value.forEach((data: any) => {\r\n this.table._selection = this.table._selection.filter(\r\n (record: any) => record[dataKey] !== data[dataKey],\r\n );\r\n });\r\n }\r\n\r\n this.table.updateSelectionKeys();\r\n this.table.selectionChange.emit(this.table._selection);\r\n this.tableService.onSelectionChange();\r\n\r\n if (this.table.isStateful()) this.table.saveState();\r\n }\r\n\r\n public isAllFilteredValuesChecked(): boolean {\r\n if (!this.table.filteredValue) {\r\n return false;\r\n } else {\r\n for (const rowData of this.table.filteredValue) {\r\n if (!this.table.isSelected(rowData)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n public isAllValuesChecked(): boolean {\r\n if (!this.table.value) {\r\n return false;\r\n } else {\r\n for (const rowData of this.table.value) {\r\n if (!this.table.isSelected(rowData)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TableHeaderCheckboxComponent } from './table-header-checkbox.component';\r\n\r\n@NgModule({\r\n imports: [TableHeaderCheckboxComponent],\r\n exports: [TableHeaderCheckboxComponent],\r\n})\r\nexport class TableHeaderCheckboxModule {}\r\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';\r\n\r\nimport { CheckboxComponent } from '@seniorsistemas/angular-components/checkbox';\r\nimport { Table, TableService } from 'primeng/table';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/**\r\n * @description Componente de checkbox de cabeçalho para tabelas PrimeNG.\r\n * Integra-se automaticamente ao `TableService` para sincronizar o estado\r\n * de seleção total/parcial com as linhas da tabela.\r\n *\r\n * @example\r\n * ```html\r\n * <th>\r\n * <s-table-header-checkbox [rowProps]=\"['id', 'name']\" />\r\n * </th>\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n selector: 's-table-header-checkbox',\r\n template: `\r\n <s-checkbox\r\n [checked]=\"checked\"\r\n (checkedChange)=\"onClick($event)\"\r\n />\r\n `,\r\n standalone: true,\r\n imports: [CheckboxComponent],\r\n})\r\nexport class TableHeaderCheckboxComponent implements OnInit, OnDestroy {\r\n readonly table = inject(Table);\r\n readonly tableService = inject(TableService);\r\n\r\n public static nextId = 0;\r\n\r\n /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\r\n @Input()\r\n public id = `s-table-header-checkbox-${TableHeaderCheckboxComponent.nextId++}`;\r\n\r\n /** @description Desabilita o checkbox de cabeçalho. @default false */\r\n @Input()\r\n public disabled = false;\r\n\r\n /** @description Lista de propriedades dos itens da linha usadas para identificação. */\r\n @Input()\r\n public rowProps?: string[];\r\n\r\n /** @description Quando `true`, usa o objeto completo da linha em vez de propriedades específicas. */\r\n @Input()\r\n public useAllObject?: boolean;\r\n\r\n public checked = false;\r\n public hasFocus = false;\r\n\r\n private _ngUnsubscribe = new Subject<void>();\r\n\r\n constructor() {\r\n this.table.tableService.valueSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\r\n this.checked = this.updateCheckedState();\r\n });\r\n\r\n this.table.tableService.selectionSource$.pipe(takeUntil(this._ngUnsubscribe)).subscribe(() => {\r\n this.checked = this.updateCheckedState();\r\n });\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.checked = this.updateCheckedState();\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._ngUnsubscribe.next();\r\n }\r\n\r\n public onFocus(): void {\r\n this.hasFocus = true;\r\n }\r\n\r\n public onBlur(): void {\r\n this.hasFocus = false;\r\n }\r\n\r\n public isDisabled(): boolean {\r\n return this.disabled || !this.table.value || !this.table.value.length;\r\n }\r\n\r\n public onClick(checked: boolean): void {\r\n if (!this.disabled) {\r\n if (this.table.value && this.table.value.length > 0) {\r\n this.onToggleCheckbox(checked);\r\n }\r\n }\r\n }\r\n\r\n public updateCheckedState() {\r\n if (this.table.filteredValue) {\r\n const val = this.table.filteredValue;\r\n return (\r\n val &&\r\n val.length > 0 &&\r\n this.table.selection &&\r\n this.table.selection.length > 0 &&\r\n this.isAllFilteredValuesChecked()\r\n );\r\n } else {\r\n const val = this.table.value;\r\n return (\r\n val &&\r\n val.length > 0 &&\r\n this.table.selection &&\r\n this.table.selection.length > 0 &&\r\n this.isAllValuesChecked()\r\n );\r\n }\r\n }\r\n\r\n public onToggleCheckbox(checked: boolean): void {\r\n const { filteredValue, value, dataKey } = this.table;\r\n const gridData = checked ? (filteredValue ? filteredValue.slice() : value.slice()) : [];\r\n\r\n if (!dataKey) return;\r\n\r\n if (checked) {\r\n const unselecteds = gridData\r\n .filter(\r\n (record) => !this.table._selection.find((selected: any) => record[dataKey] === selected[dataKey]),\r\n )\r\n .map((record: any) => {\r\n if (this.useAllObject) return record;\r\n\r\n const newRecord: any = {};\r\n if (this.rowProps) this.rowProps.forEach((prop: string) => (newRecord[prop] = record[prop]));\r\n else newRecord[dataKey] = record[dataKey];\r\n return newRecord;\r\n });\r\n this.table._selection = [...this.table._selection, ...unselecteds];\r\n } else {\r\n value.forEach((data: any) => {\r\n this.table._selection = this.table._selection.filter(\r\n (record: any) => record[dataKey] !== data[dataKey],\r\n );\r\n });\r\n }\r\n\r\n this.table.updateSelectionKeys();\r\n this.table.selectionChange.emit(this.table._selection);\r\n this.tableService.onSelectionChange();\r\n\r\n if (this.table.isStateful()) this.table.saveState();\r\n }\r\n\r\n public isAllFilteredValuesChecked(): boolean {\r\n if (!this.table.filteredValue) {\r\n return false;\r\n } else {\r\n for (const rowData of this.table.filteredValue) {\r\n if (!this.table.isSelected(rowData)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n public isAllValuesChecked(): boolean {\r\n if (!this.table.value) {\r\n return false;\r\n } else {\r\n for (const rowData of this.table.value) {\r\n if (!this.table.isSelected(rowData)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { TableHeaderCheckboxComponent } from './table-header-checkbox.component';\r\n\r\n@NgModule({\r\n imports: [TableHeaderCheckboxComponent],\r\n exports: [TableHeaderCheckboxComponent],\r\n})\r\nexport class TableHeaderCheckboxModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAOA;;;;;;;;;;;;;AAaG;MAYU,4BAA4B,CAAA;AAC5B,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAEtC,IAAA,OAAO,MAAM,GAAG,CAAC,CAAC;;AAIlB,IAAA,EAAE,GAAG,CAA2B,wBAAA,EAAA,4BAA4B,CAAC,MAAM,EAAE,EAAE,CAAC;;IAIxE,QAAQ,GAAG,KAAK,CAAC;;AAIjB,IAAA,QAAQ,CAAY;;AAIpB,IAAA,YAAY,CAAW;IAEvB,OAAO,GAAG,KAAK,CAAC;IAChB,QAAQ,GAAG,KAAK,CAAC;AAEhB,IAAA,cAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;AAE7C,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACrF,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7C,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACzF,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7C,SAAC,CAAC,CAAC;KACN;IAEM,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC5C;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;KAC9B;IAEM,OAAO,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACxB;IAEM,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACzB;IAEM,UAAU,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;KACzE;AAEM,IAAA,OAAO,CAAC,OAAgB,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;aAClC;SACJ;KACJ;IAEM,kBAAkB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AACrC,YAAA,QACI,GAAG;gBACH,GAAG,CAAC,MAAM,GAAG,CAAC;gBACd,IAAI,CAAC,KAAK,CAAC,SAAS;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AAC/B,gBAAA,IAAI,CAAC,0BAA0B,EAAE,EACnC;SACL;aAAM;AACH,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC7B,YAAA,QACI,GAAG;gBACH,GAAG,CAAC,MAAM,GAAG,CAAC;gBACd,IAAI,CAAC,KAAK,CAAC,SAAS;AACpB,gBAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AAC/B,gBAAA,IAAI,CAAC,kBAAkB,EAAE,EAC3B;SACL;KACJ;AAEM,IAAA,gBAAgB,CAAC,OAAgB,EAAA;QACpC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACrD,MAAM,QAAQ,GAAG,OAAO,IAAI,aAAa,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;AAExF,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,OAAO,EAAE;YACT,MAAM,WAAW,GAAG,QAAQ;AACvB,iBAAA,MAAM,CACH,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAa,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,CACpG;AACA,iBAAA,GAAG,CAAC,CAAC,MAAW,KAAI;gBACjB,IAAI,IAAI,CAAC,YAAY;AAAE,oBAAA,OAAO,MAAM,CAAC;gBAErC,MAAM,SAAS,GAAQ,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAY,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;oBACxF,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC1C,gBAAA,OAAO,SAAS,CAAC;AACrB,aAAC,CAAC,CAAC;AACP,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC;SACtE;aAAM;AACH,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,KAAI;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAChD,CAAC,MAAW,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CACrD,CAAC;AACN,aAAC,CAAC,CAAC;SACN;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC;AAEtC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;KACvD;IAEM,0BAA0B,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AAC3B,YAAA,OAAO,KAAK,CAAC;SAChB;aAAM;YACH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;gBAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACjC,oBAAA,OAAO,KAAK,CAAC;iBAChB;aACJ;AACD,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;IAEM,kBAAkB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC;SAChB;aAAM;YACH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACjC,oBAAA,OAAO,KAAK,CAAC;iBAChB;aACJ;AACD,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;wGAlJQ,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EAT3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;AAKT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAES,iBAAiB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,eAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAElB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAXxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC/B,iBAAA,CAAA;wDASU,EAAE,EAAA,CAAA;sBADR,KAAK;gBAKC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAKC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAKC,YAAY,EAAA,CAAA;sBADlB,KAAK;;;MC3CG,yBAAyB,CAAA;wGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAzB,yBAAyB,EAAA,OAAA,EAAA,CAHxB,4BAA4B,CAAA,EAAA,OAAA,EAAA,CAC5B,4BAA4B,CAAA,EAAA,CAAA,CAAA;AAE7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YAHxB,4BAA4B,CAAA,EAAA,CAAA,CAAA;;4FAG7B,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,4BAA4B,CAAC;oBACvC,OAAO,EAAE,CAAC,4BAA4B,CAAC;AAC1C,iBAAA,CAAA;;;ACPD;;AAEG;;;;"}
@@ -508,7 +508,7 @@ class TableColumnsComponent {
508
508
  return columns.sort((a, b) => (a.sequence ?? 0) - (b.sequence ?? 0));
509
509
  }
510
510
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableColumnsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
511
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableColumnsComponent, isStandalone: true, selector: "s-table-columns", inputs: { columns: "columns", rowValue: "rowValue", locale: "locale" }, viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #columnsTemplate>\n @for (column of formattedColumns; track $index; let i = $index) {\n <td\n [ngStyle]=\"column.style\"\n (click)=\"column.onColumnClick ? column.onColumnClick(rowValue) : null\"\n >\n @if (column.type !== 'TOKENS' || !isArray(column.columnValue)) {\n <div [ngClass]=\"{ 'compact-column': column.compact }\">\n @if (column.type !== 'LINK') {\n <span\n [sTooltip]=\"column.tooltip\"\n [escape]=\"false\"\n >\n <ng-container *ngTemplateOutlet=\"columnValueTemplate\"></ng-container>\n </span>\n }\n\n @if (column.type === 'LINK') {\n @if (cellsData[i]?.[0]?.isUninformed) {\n <span class=\"sds-empty-value\">{{ cellsData[i]?.[0]?.value }}</span>\n } @else {\n <a\n [sTooltip]=\"column.tooltip\"\n [escape]=\"false\"\n (click)=\"column.onLinkClick ? column.onLinkClick(rowValue) : null\"\n >\n <ng-container *ngTemplateOutlet=\"columnValueTemplate\"></ng-container>\n </a>\n }\n }\n\n <ng-template #columnValueTemplate>\n @for (cellData of cellsData[i]; track $index) {\n @if (cellData.isUninformed) {\n <span class=\"sds-empty-value\">{{ cellData.value }}</span>\n } @else {\n @if (column.badgeConfigs) {\n <s-badge\n [sTooltip]=\"column.tooltip\"\n [color]=\"column.badgeConfigs.color\"\n [text]=\"cellData.value\"\n ></s-badge>\n } @else {\n <span\n [ngClass]=\"{\n 'column-cell-red': column.color === 'Red',\n 'column-cell-orange': column.color === 'Orange',\n 'column-cell-yellow': column.color === 'Yellow',\n 'column-cell-green': column.color === 'Green',\n 'column-cell-blue': column.color === 'Blue',\n }\"\n >{{ cellData.value }}</span\n >\n }\n }\n\n @if (cellData.separator) {\n <span>{{ cellData.separator }}</span>\n }\n }\n\n @if (!!column.infoSign) {\n <span *sInfoSign=\"column.infoSign\"></span>\n }\n </ng-template>\n </div>\n } @else {\n <s-token-list\n [tokens]=\"getTokensByColumn(column)\"\n [hidePointerEvents]=\"true\"\n ></s-token-list>\n\n @if (!!column.infoSign) {\n <span *sInfoSign=\"column.infoSign\"></span>\n }\n }\n </td>\n }\n</ng-template>\n\n", styles: [":host{display:none}.compact-column{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.column-cell-red{color:#c13018}.column-cell-orange{color:#f8931f}.column-cell-yellow{color:#fcbf10}.column-cell-green{color:#0c9348}.column-cell-blue{color:#428bca}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "directive", type: InfoSignDirective, selector: "[sInfoSign]", inputs: ["sInfoSign", "sInfoSignDisplayTime", "sInfoSignFocusedInputRef", "sInfoSignUseFocusedInputRef"] }, { kind: "component", type: TokenListComponent, selector: "s-token-list", inputs: ["id", "tokens", "removableTokens", "hidePointerEvents"], outputs: ["tokenSelected", "tokenRemoved"] }] });
511
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TableColumnsComponent, isStandalone: true, selector: "s-table-columns", inputs: { columns: "columns", rowValue: "rowValue", locale: "locale" }, viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #columnsTemplate>\n @for (column of formattedColumns; track $index; let i = $index) {\n <td\n [ngStyle]=\"column.style\"\n (click)=\"column.onColumnClick ? column.onColumnClick(rowValue) : null\"\n >\n @if (column.type !== 'TOKENS' || !isArray(column.columnValue)) {\n <div [ngClass]=\"{ 'compact-column': column.compact }\">\n @if (column.type !== 'LINK') {\n <span\n [sTooltip]=\"column.tooltip\"\n [escape]=\"false\"\n >\n <ng-container *ngTemplateOutlet=\"columnValueTemplate\"></ng-container>\n </span>\n }\n\n @if (column.type === 'LINK') {\n @if (cellsData[i]?.[0]?.isUninformed) {\n <span class=\"sds-empty-value\">{{ cellsData[i]?.[0]?.value }}</span>\n } @else {\n <a\n [sTooltip]=\"column.tooltip\"\n [escape]=\"false\"\n (click)=\"column.onLinkClick ? column.onLinkClick(rowValue) : null\"\n >\n <ng-container *ngTemplateOutlet=\"columnValueTemplate\"></ng-container>\n </a>\n }\n }\n\n <ng-template #columnValueTemplate>\n @for (cellData of cellsData[i]; track $index) {\n @if (cellData.isUninformed) {\n <span class=\"sds-empty-value\">{{ cellData.value }}</span>\n } @else {\n @if (column.badgeConfigs) {\n <s-badge\n [sTooltip]=\"column.tooltip\"\n [color]=\"column.badgeConfigs.color\"\n [text]=\"cellData.value\"\n ></s-badge>\n } @else {\n <span\n [ngClass]=\"{\n 'column-cell-red': column.color === 'Red',\n 'column-cell-orange': column.color === 'Orange',\n 'column-cell-yellow': column.color === 'Yellow',\n 'column-cell-green': column.color === 'Green',\n 'column-cell-blue': column.color === 'Blue',\n }\"\n >{{ cellData.value }}</span\n >\n }\n }\n\n @if (cellData.separator) {\n <span>{{ cellData.separator }}</span>\n }\n }\n\n @if (!!column.infoSign) {\n <span *sInfoSign=\"column.infoSign\"></span>\n }\n </ng-template>\n </div>\n } @else {\n <s-token-list\n [tokens]=\"getTokensByColumn(column)\"\n [hidePointerEvents]=\"true\"\n ></s-token-list>\n\n @if (!!column.infoSign) {\n <span *sInfoSign=\"column.infoSign\"></span>\n }\n }\n </td>\n }\n</ng-template>\n\n", styles: [":host{display:none}.compact-column{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.column-cell-red{color:#c13018}.column-cell-orange{color:#f8931f}.column-cell-yellow{color:#fcbf10}.column-cell-green{color:#0c9348}.column-cell-blue{color:#428bca}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "directive", type: InfoSignDirective, selector: "[sInfoSign]", inputs: ["sInfoSign", "sInfoSignDisplayTime", "sInfoSignFocusedInputRef", "sInfoSignUseFocusedInputRef"] }, { kind: "component", type: TokenListComponent, selector: "s-token-list", inputs: ["id", "tokens", "removableTokens", "hidePointerEvents", "removeIconClass"], outputs: ["tokenSelected", "tokenRemoved"] }] });
512
512
  }
513
513
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableColumnsComponent, decorators: [{
514
514
  type: Component,