@seniorsistemas/angular-components 19.9.8 → 19.9.9

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 (166) hide show
  1. package/card/lib/card/card.component.d.ts +6 -2
  2. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +0 -1
  3. package/datepicker/README.md +6 -2
  4. package/datepicker/lib/datepicker/date-segment-input.d.ts +7 -1
  5. package/datepicker/lib/datepicker/datepicker.component.d.ts +137 -3
  6. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -0
  7. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +3 -3
  8. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +8 -3
  9. package/esm2022/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +4 -3
  10. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +3 -3
  11. package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +4 -2
  12. package/esm2022/button/lib/button/button.component.mjs +3 -3
  13. package/esm2022/card/lib/card/card.component.mjs +13 -5
  14. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -3
  15. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +3 -3
  16. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +3 -3
  17. package/esm2022/chips/lib/chips/chips/chips.component.mjs +3 -3
  18. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-style.mjs +3 -2
  19. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +3 -3
  20. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +14 -9
  21. package/esm2022/datepicker/lib/datepicker/date-segment-input.mjs +19 -2
  22. package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +405 -38
  23. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +3 -3
  24. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -1
  25. package/esm2022/drawer/lib/drawer/drawer.component.mjs +3 -3
  26. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
  27. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
  28. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
  29. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
  30. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
  31. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
  32. package/esm2022/editor/lib/editor/editor.component.mjs +3 -3
  33. package/esm2022/editor/lib/editor/toolbar-button/editor-toolbar-button.component.mjs +3 -3
  34. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +3 -3
  35. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +3 -3
  36. package/esm2022/gantt/lib/gantt/components/gantt/bar.mjs +2 -1
  37. package/esm2022/gantt/lib/gantt/gantt.component.mjs +3 -3
  38. package/esm2022/global-search/lib/global-search/global-search.component.mjs +16 -25
  39. package/esm2022/grid-menu/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.mjs +3 -3
  40. package/esm2022/input-text/lib/input-text/input-text.directive.mjs +3 -3
  41. package/esm2022/lib/locale/fallback.mjs +40 -13
  42. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +3 -3
  43. package/esm2022/object-card/lib/object-card/object-card.component.mjs +3 -3
  44. package/esm2022/paginator/lib/paginator/paginator.component.mjs +3 -3
  45. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +3 -3
  46. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +4 -10
  47. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +3 -3
  48. package/esm2022/select/lib/select/select.component.mjs +3 -3
  49. package/esm2022/select-button/lib/select-button/components/select-button-item/select-button-item.component.mjs +3 -3
  50. package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +6 -6
  51. package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +3 -3
  52. package/esm2022/slider/lib/slider/slider.component.mjs +67 -65
  53. package/esm2022/slider/lib/slider/slider.module.mjs +2 -2
  54. package/esm2022/split-button/lib/split-button/split-button.component.mjs +3 -3
  55. package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
  56. package/esm2022/stepper/lib/stepper/stepper.component.mjs +3 -3
  57. package/esm2022/switch/lib/switch/switch.component.mjs +5 -19
  58. package/esm2022/tabs/lib/tabs/tabs.component.mjs +3 -3
  59. package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
  60. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +10 -3
  61. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +3 -3
  62. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +3 -3
  63. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.global.service.mjs +4 -3
  64. package/esm2022/tile/lib/tile/tile.component.mjs +3 -3
  65. package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +20 -3
  66. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +3 -3
  67. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +2 -2
  68. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +10 -5
  70. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  71. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +5 -3
  72. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  73. package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
  74. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  75. package/fesm2022/seniorsistemas-angular-components-card.mjs +12 -4
  76. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  77. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +2 -2
  78. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  79. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -2
  80. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  81. package/fesm2022/seniorsistemas-angular-components-chips.mjs +4 -4
  82. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  83. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +2 -1
  84. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  85. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +2 -2
  86. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  87. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +13 -8
  88. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  89. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +422 -38
  90. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
  91. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +14 -2
  92. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  93. package/fesm2022/seniorsistemas-angular-components-drawer.mjs +2 -2
  94. package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
  95. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +12 -12
  96. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  97. package/fesm2022/seniorsistemas-angular-components-editor.mjs +4 -4
  98. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
  99. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +2 -2
  100. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  101. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +2 -2
  102. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  103. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +3 -2
  104. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  105. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +14 -23
  106. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  107. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +2 -2
  108. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  109. package/fesm2022/seniorsistemas-angular-components-input-text.mjs +2 -2
  110. package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
  111. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +2 -2
  112. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  113. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
  114. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  115. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +2 -2
  116. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  117. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +2 -2
  118. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  119. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +3 -9
  120. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  121. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +2 -2
  122. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  123. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +2 -2
  124. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  125. package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
  126. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  127. package/fesm2022/seniorsistemas-angular-components-shared.mjs +5 -5
  128. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  129. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +2 -2
  130. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
  131. package/fesm2022/seniorsistemas-angular-components-slider.mjs +67 -65
  132. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  133. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +2 -2
  134. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  135. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
  136. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  137. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +2 -2
  138. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  139. package/fesm2022/seniorsistemas-angular-components-switch.mjs +4 -18
  140. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  141. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +2 -2
  142. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  143. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
  144. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  145. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +9 -2
  146. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  147. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +2 -2
  148. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  149. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +5 -4
  150. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  151. package/fesm2022/seniorsistemas-angular-components-tile.mjs +2 -2
  152. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  153. package/fesm2022/seniorsistemas-angular-components-tree.mjs +20 -3
  154. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  155. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +2 -2
  156. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  157. package/fesm2022/seniorsistemas-angular-components.mjs +39 -12
  158. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  159. package/global-search/lib/global-search/global-search.component.d.ts +7 -3
  160. package/package.json +1 -1
  161. package/radio-button/lib/radio-button/radio-button.component.d.ts +0 -1
  162. package/slider/lib/slider/slider.component.d.ts +25 -7
  163. package/styles.css +5 -0
  164. package/switch/lib/switch/switch.component.d.ts +0 -2
  165. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +1 -0
  166. package/tree/lib/tree/components/tree-node-item/tree-node-item.component.d.ts +4 -0
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-text-area.mjs","sources":["../../projects/angular-components/text-area/src/lib/text-area/text-area.component.ts","../../projects/angular-components/text-area/src/lib/text-area/text-area.component.html","../../projects/angular-components/text-area/src/lib/text-area.module.ts","../../projects/angular-components/text-area/src/seniorsistemas-angular-components-text-area.ts"],"sourcesContent":["import { ChangeDetectorRef, Component, ElementRef, forwardRef, Input, ViewChild, inject } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\nimport { KeyFilterPattern, KeyFilter } from 'primeng/keyfilter';\r\nimport { NgStyle } from '@angular/common';\r\nimport { SpeechRecognitionComponent } from '@seniorsistemas/angular-components/speech-recognition';\r\n\r\n/**\r\n * @description Componente de área de texto com suporte a reconhecimento de voz,\r\n * filtro de teclas, comprimento máximo e integração com `ControlValueAccessor`.\r\n * Renderiza condicionalmente o componente `SpeechRecognitionComponent` quando\r\n * a flag `speechRecognition` está ativa.\r\n *\r\n * @example\r\n * ```html\r\n * <s-textarea\r\n * formControlName=\"descricao\"\r\n * [rows]=\"6\"\r\n * [maxLength]=\"500\"\r\n * placeholder=\"Digite aqui...\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-textarea',\r\n templateUrl: './text-area.component.html',\r\n styleUrls: ['./text-area.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TextAreaComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [FormsModule, KeyFilter, NgStyle, SpeechRecognitionComponent],\r\n})\r\nexport class TextAreaComponent implements ControlValueAccessor {\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n onChange: (value: string) => void = () => {};\r\n onTouched: (value: string) => void = () => {};\r\n disabled = false;\r\n value = '';\r\n private _textAreaElement: ElementRef<HTMLTextAreaElement> | undefined;\r\n\r\n @ViewChild('textArea', { read: ElementRef })\r\n public get textAreaElement(): ElementRef<HTMLTextAreaElement> {\r\n return this._textAreaElement as ElementRef<HTMLTextAreaElement>;\r\n }\r\n\r\n public set textAreaElement(value: ElementRef<HTMLTextAreaElement>) {\r\n this._textAreaElement = value;\r\n setTimeout(() => {\r\n this.renderTextArea = true;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n /** @description Identificador do elemento `<textarea>` no DOM. @default 'textarea-{random}' */\r\n @Input() inputId = `textarea-${Math.random()}`;\r\n /** @description Número de linhas visíveis no textarea. @default 5 */\r\n @Input() rows = 5;\r\n /** @description Habilita o botão de reconhecimento de voz. @default false */\r\n @Input() speechRecognition = false;\r\n /** @description Filtro de teclas aceitas, usando padrão ou expressão regular. */\r\n @Input() keyFilter: RegExp | KeyFilterPattern | null | undefined;\r\n /** @description Quando `true`, mantém o contexto ao reiniciar o reconhecimento de voz. @default false */\r\n @Input() keepContext = false;\r\n /** @description Placeholder exibido durante o reconhecimento de voz. @default '' */\r\n @Input() speechRecognitionPlaceholder = '';\r\n /** @description Número máximo de caracteres aceitos. @default null (ilimitado) */\r\n @Input() maxLength: number | null = null;\r\n /** @description Texto exibido quando o campo está vazio. */\r\n @Input() placeholder: string | undefined;\r\n\r\n private _inputStyle: Partial<CSSStyleDeclaration> = {\r\n resize: 'vertical',\r\n };\r\n /** @description Estilos inline aplicados ao elemento `<textarea>` interno. @default `{ resize: 'vertical' }` */\r\n @Input() get inputStyle(): Partial<CSSStyleDeclaration> {\r\n return this._inputStyle;\r\n }\r\n set inputStyle(value: Partial<CSSStyleDeclaration>) {\r\n this._inputStyle = {\r\n ...value,\r\n ...this._inputStyle,\r\n };\r\n }\r\n /** @description Coloca o textarea em modo somente leitura. @default false */\r\n @Input() readOnly = false;\r\n\r\n renderTextArea = false;\r\n\r\n writeValue(obj: string): void {\r\n this.value = obj;\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n setValue(value: string | number) {\r\n if (this.disabled) {\r\n return;\r\n }\r\n this.value = value.toString();\r\n this.writeValue(this.value);\r\n this.onChange(this.value);\r\n this.onTouched(this.value);\r\n }\r\n\r\n handleRecognizedText(recognizedText: string) {\r\n this.setValue(recognizedText);\r\n }\r\n}\r\n","@if (keyFilter) {\r\n <textarea\r\n #textArea\r\n class=\"textarea\"\r\n [pKeyFilter]=\"keyFilter\"\r\n [id]=\"inputId\"\r\n [rows]=\"rows\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"setValue($event)\"\r\n [disabled]=\"disabled\"\r\n [ngStyle]=\"inputStyle\"\r\n [readOnly]=\"readOnly\"\r\n [maxlength]=\"maxLength\"\r\n [placeholder]=\"placeholder ? placeholder : ''\"\r\n ></textarea>\r\n}\r\n\r\n@if (!keyFilter) {\r\n <textarea\r\n #textArea\r\n class=\"textarea\"\r\n [id]=\"inputId\"\r\n [rows]=\"rows\"\r\n [(ngModel)]=\"value\"\r\n [disabled]=\"disabled\"\r\n [ngStyle]=\"inputStyle\"\r\n [readOnly]=\"readOnly\"\r\n [maxlength]=\"maxLength\"\r\n [placeholder]=\"placeholder ? placeholder : ''\"\r\n (ngModelChange)=\"setValue($event)\"\r\n ></textarea>\r\n}\r\n\r\n@if (speechRecognition && renderTextArea) {\r\n <s-speech-recognition\r\n [textAreaElement]=\"textAreaElement.nativeElement\"\r\n [keepContext]=\"keepContext\"\r\n [speechRecognitionPlaceholder]=\"speechRecognitionPlaceholder\"\r\n [disabledSpeechRecognition]=\"disabled\"\r\n (recognizedText)=\"handleRecognizedText($event)\"\r\n />\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { TextAreaComponent } from './text-area/text-area.component';\r\n\r\n@NgModule({\r\n imports: [TextAreaComponent],\r\n exports: [TextAreaComponent],\r\n})\r\nexport class TextAreaModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAMA;;;;;;;;;;;;;;;;AAgBG;MAeU,iBAAiB,CAAA;AACT,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEjD,IAAA,QAAQ,GAA4B,MAAK,GAAG,CAAC;AAC7C,IAAA,SAAS,GAA4B,MAAK,GAAG,CAAC;IAC9C,QAAQ,GAAG,KAAK,CAAC;IACjB,KAAK,GAAG,EAAE,CAAC;AACH,IAAA,gBAAgB,CAA8C;AAEtE,IAAA,IACW,eAAe,GAAA;QACtB,OAAO,IAAI,CAAC,gBAAmD,CAAC;KACnE;IAED,IAAW,eAAe,CAAC,KAAsC,EAAA;AAC7D,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC7B,SAAC,CAAC,CAAC;KACN;;AAGQ,IAAA,OAAO,GAAG,CAAY,SAAA,EAAA,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;;IAEtC,IAAI,GAAG,CAAC,CAAC;;IAET,iBAAiB,GAAG,KAAK,CAAC;;AAE1B,IAAA,SAAS,CAA+C;;IAExD,WAAW,GAAG,KAAK,CAAC;;IAEpB,4BAA4B,GAAG,EAAE,CAAC;;IAElC,SAAS,GAAkB,IAAI,CAAC;;AAEhC,IAAA,WAAW,CAAqB;AAEjC,IAAA,WAAW,GAAiC;AAChD,QAAA,MAAM,EAAE,UAAU;KACrB,CAAC;;AAEF,IAAA,IAAa,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;IACD,IAAI,UAAU,CAAC,KAAmC,EAAA;QAC9C,IAAI,CAAC,WAAW,GAAG;AACf,YAAA,GAAG,KAAK;YACR,GAAG,IAAI,CAAC,WAAW;SACtB,CAAC;KACL;;IAEQ,QAAQ,GAAG,KAAK,CAAC;IAE1B,cAAc,GAAG,KAAK,CAAC;AAEvB,IAAA,UAAU,CAAC,GAAW,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;KACpB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACtB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC9B;AAED,IAAA,QAAQ,CAAC,KAAsB,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO;SACV;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;AAED,IAAA,oBAAoB,CAAC,cAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;KACjC;wGArFQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAVf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;SACJ,EAa8B,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,EC9C7C,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4zCA2CA,EDRc,MAAA,EAAA,CAAA,6UAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,kxBAAE,SAAS,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,0BAA0B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,sBAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAE5D,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAGX,SAAA,EAAA;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;qBACJ,EACW,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,CAAC,EAAA,QAAA,EAAA,4zCAAA,EAAA,MAAA,EAAA,CAAA,6UAAA,CAAA,EAAA,CAAA;8BAY3D,eAAe,EAAA,CAAA;sBADzB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAclC,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,4BAA4B,EAAA,CAAA;sBAApC,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAMO,UAAU,EAAA,CAAA;sBAAtB,KAAK;gBAUG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEnFG,cAAc,CAAA;wGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAd,cAAc,EAAA,OAAA,EAAA,CAHb,iBAAiB,CAAA,EAAA,OAAA,EAAA,CACjB,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAElB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAHb,iBAAiB,CAAA,EAAA,CAAA,CAAA;;4FAGlB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,iBAAiB,CAAC;oBAC5B,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC/B,iBAAA,CAAA;;;ACND;;AAEG;;;;"}
1
+ {"version":3,"file":"seniorsistemas-angular-components-text-area.mjs","sources":["../../projects/angular-components/text-area/src/lib/text-area/text-area.component.ts","../../projects/angular-components/text-area/src/lib/text-area/text-area.component.html","../../projects/angular-components/text-area/src/lib/text-area.module.ts","../../projects/angular-components/text-area/src/seniorsistemas-angular-components-text-area.ts"],"sourcesContent":["import { ChangeDetectorRef, Component, ElementRef, forwardRef, Input, ViewChild, inject } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\nimport { KeyFilterPattern, KeyFilter } from 'primeng/keyfilter';\r\nimport { NgStyle } from '@angular/common';\r\nimport { SpeechRecognitionComponent } from '@seniorsistemas/angular-components/speech-recognition';\r\n\r\n/**\r\n * @description Componente de área de texto com suporte a reconhecimento de voz,\r\n * filtro de teclas, comprimento máximo e integração com `ControlValueAccessor`.\r\n * Renderiza condicionalmente o componente `SpeechRecognitionComponent` quando\r\n * a flag `speechRecognition` está ativa.\r\n *\r\n * @example\r\n * ```html\r\n * <s-textarea\r\n * formControlName=\"descricao\"\r\n * [rows]=\"6\"\r\n * [maxLength]=\"500\"\r\n * placeholder=\"Digite aqui...\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n selector: 's-textarea',\r\n templateUrl: './text-area.component.html',\r\n styleUrls: ['./text-area.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TextAreaComponent),\r\n multi: true,\r\n },\r\n ],\r\n standalone: true,\r\n imports: [FormsModule, KeyFilter, NgStyle, SpeechRecognitionComponent],\r\n})\r\nexport class TextAreaComponent implements ControlValueAccessor {\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n onChange: (value: string) => void = () => {};\r\n onTouched: (value: string) => void = () => {};\r\n disabled = false;\r\n value = '';\r\n private _textAreaElement: ElementRef<HTMLTextAreaElement> | undefined;\r\n\r\n @ViewChild('textArea', { read: ElementRef })\r\n public get textAreaElement(): ElementRef<HTMLTextAreaElement> {\r\n return this._textAreaElement as ElementRef<HTMLTextAreaElement>;\r\n }\r\n\r\n public set textAreaElement(value: ElementRef<HTMLTextAreaElement>) {\r\n this._textAreaElement = value;\r\n setTimeout(() => {\r\n this.renderTextArea = true;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n /** @description Identificador do elemento `<textarea>` no DOM. @default 'textarea-{random}' */\r\n @Input() inputId = `textarea-${Math.random()}`;\r\n /** @description Número de linhas visíveis no textarea. @default 5 */\r\n @Input() rows = 5;\r\n /** @description Habilita o botão de reconhecimento de voz. @default false */\r\n @Input() speechRecognition = false;\r\n /** @description Filtro de teclas aceitas, usando padrão ou expressão regular. */\r\n @Input() keyFilter: RegExp | KeyFilterPattern | null | undefined;\r\n /** @description Quando `true`, mantém o contexto ao reiniciar o reconhecimento de voz. @default false */\r\n @Input() keepContext = false;\r\n /** @description Placeholder exibido durante o reconhecimento de voz. @default '' */\r\n @Input() speechRecognitionPlaceholder = '';\r\n /** @description Número máximo de caracteres aceitos. @default null (ilimitado) */\r\n @Input() maxLength: number | null = null;\r\n /** @description Texto exibido quando o campo está vazio. */\r\n @Input() placeholder: string | undefined;\r\n\r\n private _inputStyle: Partial<CSSStyleDeclaration> = {\r\n resize: 'vertical',\r\n };\r\n /** @description Estilos inline aplicados ao elemento `<textarea>` interno. @default `{ resize: 'vertical' }` */\r\n @Input() get inputStyle(): Partial<CSSStyleDeclaration> {\r\n return this._inputStyle;\r\n }\r\n set inputStyle(value: Partial<CSSStyleDeclaration>) {\r\n this._inputStyle = {\r\n ...value,\r\n ...this._inputStyle,\r\n };\r\n }\r\n /** @description Coloca o textarea em modo somente leitura. @default false */\r\n @Input() readOnly = false;\r\n\r\n renderTextArea = false;\r\n\r\n writeValue(obj: string): void {\r\n this.value = obj;\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n setValue(value: string | number) {\r\n if (this.disabled) {\r\n return;\r\n }\r\n this.value = value.toString();\r\n this.writeValue(this.value);\r\n this.onChange(this.value);\r\n this.onTouched(this.value);\r\n }\r\n\r\n handleRecognizedText(recognizedText: string) {\r\n this.setValue(recognizedText);\r\n }\r\n}\r\n","@if (keyFilter) {\r\n <textarea\r\n #textArea\r\n class=\"textarea\"\r\n [pKeyFilter]=\"keyFilter\"\r\n [id]=\"inputId\"\r\n [rows]=\"rows\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"setValue($event)\"\r\n [disabled]=\"disabled\"\r\n [ngStyle]=\"inputStyle\"\r\n [readOnly]=\"readOnly\"\r\n [maxlength]=\"maxLength\"\r\n [placeholder]=\"placeholder ? placeholder : ''\"\r\n ></textarea>\r\n}\r\n\r\n@if (!keyFilter) {\r\n <textarea\r\n #textArea\r\n class=\"textarea\"\r\n [id]=\"inputId\"\r\n [rows]=\"rows\"\r\n [(ngModel)]=\"value\"\r\n [disabled]=\"disabled\"\r\n [ngStyle]=\"inputStyle\"\r\n [readOnly]=\"readOnly\"\r\n [maxlength]=\"maxLength\"\r\n [placeholder]=\"placeholder ? placeholder : ''\"\r\n (ngModelChange)=\"setValue($event)\"\r\n ></textarea>\r\n}\r\n\r\n@if (speechRecognition && renderTextArea) {\r\n <s-speech-recognition\r\n [textAreaElement]=\"textAreaElement.nativeElement\"\r\n [keepContext]=\"keepContext\"\r\n [speechRecognitionPlaceholder]=\"speechRecognitionPlaceholder\"\r\n [disabledSpeechRecognition]=\"disabled\"\r\n (recognizedText)=\"handleRecognizedText($event)\"\r\n />\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { TextAreaComponent } from './text-area/text-area.component';\r\n\r\n@NgModule({\r\n imports: [TextAreaComponent],\r\n exports: [TextAreaComponent],\r\n})\r\nexport class TextAreaModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -109,6 +109,13 @@ class ThumbnailComponent {
109
109
  this.ngUnsubscribe.next();
110
110
  this.ngUnsubscribe.complete();
111
111
  }
112
+ onContainerKeydown(event) {
113
+ if (!this.hasAction || (event.key !== 'Enter' && event.key !== ' ')) {
114
+ return;
115
+ }
116
+ event.preventDefault();
117
+ event.currentTarget.click();
118
+ }
112
119
  ngAfterViewInit() {
113
120
  if (this.imgEl) {
114
121
  this.imgEl.nativeElement.addEventListener('load', () => {
@@ -126,11 +133,11 @@ class ThumbnailComponent {
126
133
  }
127
134
  }
128
135
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ThumbnailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
129
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ThumbnailComponent, isStandalone: true, selector: "s-thumbnail", inputs: { id: "id", size: "size", imageSource: "imageSource", imageFallback: "imageFallback", imageAlt: "imageAlt", iconClass: "iconClass", hasAction: "hasAction", actionIconClass: "actionIconClass", isTile: "isTile", isBrand: "isBrand" }, providers: [ThumbnailService], viewQueries: [{ propertyName: "imgEl", first: true, predicate: ["img"], descendants: true }], ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"thumbnail-container thumbnail-container--{{ size }}\"\n [ngClass]=\"{\n 'thumbnail-container--with-action': hasAction,\n 'thumbnail-container--brand': isBrand,\n }\"\n>\n @if (imageSource || imageFallback) {\n <div\n [id]=\"id + '-image-container'\"\n class=\"image-container\"\n [ngClass]=\"{\n 'image-container--rounded': !isBrand,\n }\"\n >\n @if (!fallback) {\n <img\n #img\n [id]=\"id + '-image'\"\n (error)=\"fallback = true\"\n [src]=\"imageSource\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && imageFallback) {\n <img\n #img\n [id]=\"id + '-image-fallback'\"\n (error)=\"imageFallback = undefined\"\n [src]=\"imageFallback\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && !imageFallback) {\n <i class=\"fallback-img-color far fa-image\"> </i>\n }\n </div>\n }\n\n @if (hasAction) {\n <div\n [id]=\"id + '-action-icon-container'\"\n class=\"action-icon-container action-icon-container--{{ size }}\"\n >\n <span\n [id]=\"id + '-action-icon'\"\n [class]=\"actionIconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n @if (!imageSource && !imageFallback) {\n <div\n [id]=\"id + '-icon-container'\"\n class=\"icon-container icon-container--{{ size }}\"\n [ngClass]=\"{ 'image-container--rounded': !isBrand }\"\n >\n <span\n [id]=\"id + '-icon'\"\n [class]=\"iconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:inline-block}.thumbnail-container{color:#fff;position:relative;text-align:center}.thumbnail-container--large{font-size:50px;height:100px;width:100px}.thumbnail-container--large.thumbnail-container--brand{width:200px}.thumbnail-container--medium{font-size:40px;height:70px;width:70px}.thumbnail-container--medium.thumbnail-container--brand{width:140px}.thumbnail-container--small{font-size:22px;height:40px;width:40px}.thumbnail-container--small.thumbnail-container--brand{width:80px}.thumbnail-container--with-action{cursor:pointer}.action-icon-container{background-color:#428bca;border-radius:50%;bottom:0;position:absolute;right:0}.action-icon-container--large,.action-icon-container--medium{font-size:10pt;height:25px;padding:3px;width:25px}.action-icon-container--small{font-size:6pt;height:16px;padding:2px;width:16px}.icon-container,.image-container{align-items:center;height:100%;overflow:hidden;width:100%}.icon-container--rounded,.image-container--rounded{border-radius:50%}.smallThumbnail{height:40px!important}.icon-container{background-color:#ccc;color:#fff}.icon-container--large{line-height:98px}.icon-container--medium{line-height:68px}.icon-container--small{line-height:38px}.image-container{align-items:center;background-color:#ccc;display:flex;justify-content:center}.image-container img{width:100%}.image-container img.exif-orientation-2{transform:rotateY(180deg)}.image-container img.exif-orientation-3{transform:rotate(180deg)}.image-container img.exif-orientation-4{transform:rotate(180deg) rotateY(180deg)}.image-container img.exif-orientation-5{transform:rotate(270deg) rotateY(180deg)}.image-container img.exif-orientation-6{transform:rotate(90deg)}.image-container img.exif-orientation-7{transform:rotate(90deg) rotateY(180deg)}.image-container img.exif-orientation-8{transform:rotate(270deg)}.fallback-img-color{color:#fff}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ThumbnailComponent, isStandalone: true, selector: "s-thumbnail", inputs: { id: "id", size: "size", imageSource: "imageSource", imageFallback: "imageFallback", imageAlt: "imageAlt", iconClass: "iconClass", hasAction: "hasAction", actionIconClass: "actionIconClass", isTile: "isTile", isBrand: "isBrand" }, providers: [ThumbnailService], viewQueries: [{ propertyName: "imgEl", first: true, predicate: ["img"], descendants: true }], ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"thumbnail-container thumbnail-container--{{ size }}\"\n [ngClass]=\"{\n 'thumbnail-container--with-action': hasAction,\n 'thumbnail-container--brand': isBrand,\n }\"\n [attr.tabindex]=\"hasAction ? 0 : null\"\n [attr.role]=\"hasAction ? 'button' : null\"\n (keydown)=\"onContainerKeydown($event)\"\n>\n @if (imageSource || imageFallback) {\n <div\n [id]=\"id + '-image-container'\"\n class=\"image-container\"\n [ngClass]=\"{\n 'image-container--rounded': !isBrand,\n }\"\n >\n @if (!fallback) {\n <img\n #img\n [id]=\"id + '-image'\"\n (error)=\"fallback = true\"\n [src]=\"imageSource\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && imageFallback) {\n <img\n #img\n [id]=\"id + '-image-fallback'\"\n (error)=\"imageFallback = undefined\"\n [src]=\"imageFallback\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && !imageFallback) {\n <i class=\"fallback-img-color far fa-image\"> </i>\n }\n </div>\n }\n\n @if (hasAction) {\n <div\n [id]=\"id + '-action-icon-container'\"\n class=\"action-icon-container action-icon-container--{{ size }}\"\n >\n <span\n [id]=\"id + '-action-icon'\"\n [class]=\"actionIconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n @if (!imageSource && !imageFallback) {\n <div\n [id]=\"id + '-icon-container'\"\n class=\"icon-container icon-container--{{ size }}\"\n [ngClass]=\"{ 'image-container--rounded': !isBrand }\"\n >\n <span\n [id]=\"id + '-icon'\"\n [class]=\"iconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:inline-block}.thumbnail-container{color:#fff;position:relative;text-align:center}.thumbnail-container--large{font-size:50px;height:100px;width:100px}.thumbnail-container--large.thumbnail-container--brand{width:200px}.thumbnail-container--medium{font-size:40px;height:70px;width:70px}.thumbnail-container--medium.thumbnail-container--brand{width:140px}.thumbnail-container--small{font-size:22px;height:40px;width:40px}.thumbnail-container--small.thumbnail-container--brand{width:80px}.thumbnail-container--with-action{cursor:pointer}.thumbnail-container--with-action:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.thumbnail-container--with-action:not(.thumbnail-container--brand):focus-visible{border-radius:50%}.action-icon-container{background-color:#428bca;border-radius:50%;bottom:0;position:absolute;right:0}.action-icon-container--large,.action-icon-container--medium{font-size:10pt;height:25px;padding:3px;width:25px}.action-icon-container--small{font-size:6pt;height:16px;padding:2px;width:16px}.icon-container,.image-container{align-items:center;height:100%;overflow:hidden;width:100%}.icon-container--rounded,.image-container--rounded{border-radius:50%}.smallThumbnail{height:40px!important}.icon-container{background-color:#ccc;color:#fff}.icon-container--large{line-height:98px}.icon-container--medium{line-height:68px}.icon-container--small{line-height:38px}.image-container{align-items:center;background-color:#ccc;display:flex;justify-content:center}.image-container img{width:100%}.image-container img.exif-orientation-2{transform:rotateY(180deg)}.image-container img.exif-orientation-3{transform:rotate(180deg)}.image-container img.exif-orientation-4{transform:rotate(180deg) rotateY(180deg)}.image-container img.exif-orientation-5{transform:rotate(270deg) rotateY(180deg)}.image-container img.exif-orientation-6{transform:rotate(90deg)}.image-container img.exif-orientation-7{transform:rotate(90deg) rotateY(180deg)}.image-container img.exif-orientation-8{transform:rotate(270deg)}.fallback-img-color{color:#fff}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
130
137
  }
131
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ThumbnailComponent, decorators: [{
132
139
  type: Component,
133
- args: [{ selector: 's-thumbnail', standalone: true, imports: [NgClass], providers: [ThumbnailService], template: "<div\n [id]=\"id\"\n class=\"thumbnail-container thumbnail-container--{{ size }}\"\n [ngClass]=\"{\n 'thumbnail-container--with-action': hasAction,\n 'thumbnail-container--brand': isBrand,\n }\"\n>\n @if (imageSource || imageFallback) {\n <div\n [id]=\"id + '-image-container'\"\n class=\"image-container\"\n [ngClass]=\"{\n 'image-container--rounded': !isBrand,\n }\"\n >\n @if (!fallback) {\n <img\n #img\n [id]=\"id + '-image'\"\n (error)=\"fallback = true\"\n [src]=\"imageSource\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && imageFallback) {\n <img\n #img\n [id]=\"id + '-image-fallback'\"\n (error)=\"imageFallback = undefined\"\n [src]=\"imageFallback\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && !imageFallback) {\n <i class=\"fallback-img-color far fa-image\"> </i>\n }\n </div>\n }\n\n @if (hasAction) {\n <div\n [id]=\"id + '-action-icon-container'\"\n class=\"action-icon-container action-icon-container--{{ size }}\"\n >\n <span\n [id]=\"id + '-action-icon'\"\n [class]=\"actionIconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n @if (!imageSource && !imageFallback) {\n <div\n [id]=\"id + '-icon-container'\"\n class=\"icon-container icon-container--{{ size }}\"\n [ngClass]=\"{ 'image-container--rounded': !isBrand }\"\n >\n <span\n [id]=\"id + '-icon'\"\n [class]=\"iconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:inline-block}.thumbnail-container{color:#fff;position:relative;text-align:center}.thumbnail-container--large{font-size:50px;height:100px;width:100px}.thumbnail-container--large.thumbnail-container--brand{width:200px}.thumbnail-container--medium{font-size:40px;height:70px;width:70px}.thumbnail-container--medium.thumbnail-container--brand{width:140px}.thumbnail-container--small{font-size:22px;height:40px;width:40px}.thumbnail-container--small.thumbnail-container--brand{width:80px}.thumbnail-container--with-action{cursor:pointer}.action-icon-container{background-color:#428bca;border-radius:50%;bottom:0;position:absolute;right:0}.action-icon-container--large,.action-icon-container--medium{font-size:10pt;height:25px;padding:3px;width:25px}.action-icon-container--small{font-size:6pt;height:16px;padding:2px;width:16px}.icon-container,.image-container{align-items:center;height:100%;overflow:hidden;width:100%}.icon-container--rounded,.image-container--rounded{border-radius:50%}.smallThumbnail{height:40px!important}.icon-container{background-color:#ccc;color:#fff}.icon-container--large{line-height:98px}.icon-container--medium{line-height:68px}.icon-container--small{line-height:38px}.image-container{align-items:center;background-color:#ccc;display:flex;justify-content:center}.image-container img{width:100%}.image-container img.exif-orientation-2{transform:rotateY(180deg)}.image-container img.exif-orientation-3{transform:rotate(180deg)}.image-container img.exif-orientation-4{transform:rotate(180deg) rotateY(180deg)}.image-container img.exif-orientation-5{transform:rotate(270deg) rotateY(180deg)}.image-container img.exif-orientation-6{transform:rotate(90deg)}.image-container img.exif-orientation-7{transform:rotate(90deg) rotateY(180deg)}.image-container img.exif-orientation-8{transform:rotate(270deg)}.fallback-img-color{color:#fff}\n"] }]
140
+ args: [{ selector: 's-thumbnail', standalone: true, imports: [NgClass], providers: [ThumbnailService], template: "<div\n [id]=\"id\"\n class=\"thumbnail-container thumbnail-container--{{ size }}\"\n [ngClass]=\"{\n 'thumbnail-container--with-action': hasAction,\n 'thumbnail-container--brand': isBrand,\n }\"\n [attr.tabindex]=\"hasAction ? 0 : null\"\n [attr.role]=\"hasAction ? 'button' : null\"\n (keydown)=\"onContainerKeydown($event)\"\n>\n @if (imageSource || imageFallback) {\n <div\n [id]=\"id + '-image-container'\"\n class=\"image-container\"\n [ngClass]=\"{\n 'image-container--rounded': !isBrand,\n }\"\n >\n @if (!fallback) {\n <img\n #img\n [id]=\"id + '-image'\"\n (error)=\"fallback = true\"\n [src]=\"imageSource\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && imageFallback) {\n <img\n #img\n [id]=\"id + '-image-fallback'\"\n (error)=\"imageFallback = undefined\"\n [src]=\"imageFallback\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && !imageFallback) {\n <i class=\"fallback-img-color far fa-image\"> </i>\n }\n </div>\n }\n\n @if (hasAction) {\n <div\n [id]=\"id + '-action-icon-container'\"\n class=\"action-icon-container action-icon-container--{{ size }}\"\n >\n <span\n [id]=\"id + '-action-icon'\"\n [class]=\"actionIconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n @if (!imageSource && !imageFallback) {\n <div\n [id]=\"id + '-icon-container'\"\n class=\"icon-container icon-container--{{ size }}\"\n [ngClass]=\"{ 'image-container--rounded': !isBrand }\"\n >\n <span\n [id]=\"id + '-icon'\"\n [class]=\"iconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n <ng-content></ng-content>\n</div>\n", styles: [":host{display:inline-block}.thumbnail-container{color:#fff;position:relative;text-align:center}.thumbnail-container--large{font-size:50px;height:100px;width:100px}.thumbnail-container--large.thumbnail-container--brand{width:200px}.thumbnail-container--medium{font-size:40px;height:70px;width:70px}.thumbnail-container--medium.thumbnail-container--brand{width:140px}.thumbnail-container--small{font-size:22px;height:40px;width:40px}.thumbnail-container--small.thumbnail-container--brand{width:80px}.thumbnail-container--with-action{cursor:pointer}.thumbnail-container--with-action:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.thumbnail-container--with-action:not(.thumbnail-container--brand):focus-visible{border-radius:50%}.action-icon-container{background-color:#428bca;border-radius:50%;bottom:0;position:absolute;right:0}.action-icon-container--large,.action-icon-container--medium{font-size:10pt;height:25px;padding:3px;width:25px}.action-icon-container--small{font-size:6pt;height:16px;padding:2px;width:16px}.icon-container,.image-container{align-items:center;height:100%;overflow:hidden;width:100%}.icon-container--rounded,.image-container--rounded{border-radius:50%}.smallThumbnail{height:40px!important}.icon-container{background-color:#ccc;color:#fff}.icon-container--large{line-height:98px}.icon-container--medium{line-height:68px}.icon-container--small{line-height:38px}.image-container{align-items:center;background-color:#ccc;display:flex;justify-content:center}.image-container img{width:100%}.image-container img.exif-orientation-2{transform:rotateY(180deg)}.image-container img.exif-orientation-3{transform:rotate(180deg)}.image-container img.exif-orientation-4{transform:rotate(180deg) rotateY(180deg)}.image-container img.exif-orientation-5{transform:rotate(270deg) rotateY(180deg)}.image-container img.exif-orientation-6{transform:rotate(90deg)}.image-container img.exif-orientation-7{transform:rotate(90deg) rotateY(180deg)}.image-container img.exif-orientation-8{transform:rotate(270deg)}.fallback-img-color{color:#fff}\n"] }]
134
141
  }], propDecorators: { imgEl: [{
135
142
  type: ViewChild,
136
143
  args: ['img', { static: false }]
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-thumbnail.mjs","sources":["../../projects/angular-components/thumbnail/src/lib/thumbnail/thumbnail.service.ts","../../projects/angular-components/thumbnail/src/lib/thumbnail/thumbnail.component.ts","../../projects/angular-components/thumbnail/src/lib/thumbnail/thumbnail.component.html","../../projects/angular-components/thumbnail/src/lib/thumbnail/thumbnail.module.ts","../../projects/angular-components/thumbnail/src/seniorsistemas-angular-components-thumbnail.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class ThumbnailService {\n public getBinaryFile(img: HTMLImageElement) {\n return new Promise(resolve => {\n const getOrientation = this.getOrientation.bind(this);\n\n let http: XMLHttpRequest | null = new XMLHttpRequest();\n http.addEventListener(\"load\", () => {\n if (http?.readyState === 4 && (http.status == 200 || http.status === 0)) {\n const orientation = getOrientation(http.response);\n http = null;\n resolve(orientation);\n }\n });\n\n http.addEventListener(\"error\", () => {\n http = null;\n throw new Error(\"Não foi possível carregar a imagem\");\n });\n\n http.open(\"GET\", img.src, true);\n http.responseType = \"arraybuffer\";\n http.send(null);\n });\n }\n\n /**\n * Retorna a tag da orientação EXIF {-1} Não definido, {-2} Não é formato JPEG, {1, 2, 3, 4, 5, 6, 7, 8} valores da orientação.\n */\n private getOrientation(file: ArrayBuffer): number {\n const view = new DataView(file);\n\n if (view.getUint16(0, false) != 0xffd8) return -2; // not jpeg\n\n const length = view.byteLength;\n let offset = 2;\n\n while (offset < length) {\n const marker = view.getUint16(offset, false);\n offset += 2;\n\n if (marker == 0xffe1) {\n if (view.getUint32((offset += 2), false) != 0x45786966) {\n return -1; // not defined\n }\n const little = view.getUint16((offset += 6), false) == 0x4949;\n offset += view.getUint32(offset + 4, little);\n const tags = view.getUint16(offset, little);\n offset += 2;\n\n for (let i = 0; i < tags; i++)\n if (view.getUint16(offset + i * 12, little) == 0x0112) return view.getUint16(offset + i * 12 + 8, little);\n // tslint:disable-next-line: no-bitwise\n } else if ((marker & 0xff00) != 0xff00) break;\n else offset += view.getUint16(offset, false);\n }\n return -1; // not defined\n }\n}\n","import { NgClass } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, inject, Input, OnDestroy, ViewChild } from '@angular/core';\r\n\r\nimport { from, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { ThumbnailSize } from './thumbnail-size';\r\nimport { ThumbnailService } from './thumbnail.service';\r\n\r\n/**\r\n * @description Componente de miniatura de imagem com suporte a imagem de fallback,\r\n * ícone de ação sobrepôsto, orientação automática e diferentes tamanhos predefinidos.\r\n *\r\n * @example\r\n * ```html\r\n * <s-thumbnail\r\n * [imageSource]=\"urlDaImagem\"\r\n * size=\"large\"\r\n * iconClass=\"fas fa-user\" />\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n selector: 's-thumbnail',\r\n templateUrl: './thumbnail.component.html',\r\n styleUrls: ['./thumbnail.component.scss'],\r\n standalone: true,\r\n imports: [NgClass],\r\n providers: [ThumbnailService],\r\n})\r\nexport class ThumbnailComponent implements AfterViewInit, OnDestroy {\r\n private readonly thumbnailService = inject(ThumbnailService);\r\n\r\n public static nextId = 0;\r\n public fallback = false;\r\n public orientation = 0;\r\n\r\n @ViewChild('img', { static: false })\r\n public imgEl: ElementRef | null = null;\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-thumbnail-${ThumbnailComponent.nextId++}`;\r\n\r\n /** @description Tamanho da miniatura: `'small'`, `'medium'`, `'large'`, etc. @default 'medium' */\r\n @Input()\r\n public size: ThumbnailSize = 'medium';\r\n\r\n /** @description URL da imagem principal. */\r\n @Input()\r\n public imageSource?: string;\r\n\r\n /** @description URL da imagem de fallback exibida quando a principal falha ao carregar. */\r\n @Input()\r\n public imageFallback?: string;\r\n\r\n /** @description Texto alternativo (atributo `alt`) da imagem. */\r\n @Input()\r\n public imageAlt?: string;\r\n\r\n /** @description Classe do ícone exibido quando não há imagem disponível. @default 'far fa-image' */\r\n @Input()\r\n public iconClass = 'far fa-image';\r\n\r\n /** @description Habilita a exibição de um botão de ação sobrepôsto. @default false */\r\n @Input()\r\n public hasAction = false;\r\n\r\n /** @description Classe do ícone do botão de ação. @default 'fas fa-camera' */\r\n @Input()\r\n public actionIconClass = 'fas fa-camera';\r\n\r\n /** @description Aplica estilo de tile ao thumbnail. @default false */\r\n @Input()\r\n public isTile = false;\r\n\r\n /** @description Aplica estilo de marca ao thumbnail. @default false */\r\n @Input()\r\n public isBrand = false;\r\n\r\n private ngUnsubscribe = new Subject<void>();\r\n\r\n public ngOnDestroy(): void {\r\n this.ngUnsubscribe.next();\r\n this.ngUnsubscribe.complete();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n if (this.imgEl) {\r\n this.imgEl.nativeElement.addEventListener('load', () => {\r\n from(this.thumbnailService.getBinaryFile(this.imgEl?.nativeElement))\r\n .pipe(takeUntil(this.ngUnsubscribe))\r\n .subscribe((value: unknown) => {\r\n if (typeof value === 'number') {\r\n this.orientation = value;\r\n } else {\r\n console.error('Valor retornado não é um número:', value);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","<div\n [id]=\"id\"\n class=\"thumbnail-container thumbnail-container--{{ size }}\"\n [ngClass]=\"{\n 'thumbnail-container--with-action': hasAction,\n 'thumbnail-container--brand': isBrand,\n }\"\n>\n @if (imageSource || imageFallback) {\n <div\n [id]=\"id + '-image-container'\"\n class=\"image-container\"\n [ngClass]=\"{\n 'image-container--rounded': !isBrand,\n }\"\n >\n @if (!fallback) {\n <img\n #img\n [id]=\"id + '-image'\"\n (error)=\"fallback = true\"\n [src]=\"imageSource\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && imageFallback) {\n <img\n #img\n [id]=\"id + '-image-fallback'\"\n (error)=\"imageFallback = undefined\"\n [src]=\"imageFallback\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && !imageFallback) {\n <i class=\"fallback-img-color far fa-image\"> </i>\n }\n </div>\n }\n\n @if (hasAction) {\n <div\n [id]=\"id + '-action-icon-container'\"\n class=\"action-icon-container action-icon-container--{{ size }}\"\n >\n <span\n [id]=\"id + '-action-icon'\"\n [class]=\"actionIconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n @if (!imageSource && !imageFallback) {\n <div\n [id]=\"id + '-icon-container'\"\n class=\"icon-container icon-container--{{ size }}\"\n [ngClass]=\"{ 'image-container--rounded': !isBrand }\"\n >\n <span\n [id]=\"id + '-icon'\"\n [class]=\"iconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { ThumbnailComponent } from './thumbnail.component';\r\nimport { ThumbnailService } from './thumbnail.service';\r\n\r\n@NgModule({\r\n imports: [ThumbnailComponent],\r\n exports: [ThumbnailComponent],\r\n providers: [ThumbnailService],\r\n})\r\nexport class ThumbnailModule {}\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-thumbnail.mjs","sources":["../../projects/angular-components/thumbnail/src/lib/thumbnail/thumbnail.service.ts","../../projects/angular-components/thumbnail/src/lib/thumbnail/thumbnail.component.ts","../../projects/angular-components/thumbnail/src/lib/thumbnail/thumbnail.component.html","../../projects/angular-components/thumbnail/src/lib/thumbnail/thumbnail.module.ts","../../projects/angular-components/thumbnail/src/seniorsistemas-angular-components-thumbnail.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class ThumbnailService {\n public getBinaryFile(img: HTMLImageElement) {\n return new Promise(resolve => {\n const getOrientation = this.getOrientation.bind(this);\n\n let http: XMLHttpRequest | null = new XMLHttpRequest();\n http.addEventListener(\"load\", () => {\n if (http?.readyState === 4 && (http.status == 200 || http.status === 0)) {\n const orientation = getOrientation(http.response);\n http = null;\n resolve(orientation);\n }\n });\n\n http.addEventListener(\"error\", () => {\n http = null;\n throw new Error(\"Não foi possível carregar a imagem\");\n });\n\n http.open(\"GET\", img.src, true);\n http.responseType = \"arraybuffer\";\n http.send(null);\n });\n }\n\n /**\n * Retorna a tag da orientação EXIF {-1} Não definido, {-2} Não é formato JPEG, {1, 2, 3, 4, 5, 6, 7, 8} valores da orientação.\n */\n private getOrientation(file: ArrayBuffer): number {\n const view = new DataView(file);\n\n if (view.getUint16(0, false) != 0xffd8) return -2; // not jpeg\n\n const length = view.byteLength;\n let offset = 2;\n\n while (offset < length) {\n const marker = view.getUint16(offset, false);\n offset += 2;\n\n if (marker == 0xffe1) {\n if (view.getUint32((offset += 2), false) != 0x45786966) {\n return -1; // not defined\n }\n const little = view.getUint16((offset += 6), false) == 0x4949;\n offset += view.getUint32(offset + 4, little);\n const tags = view.getUint16(offset, little);\n offset += 2;\n\n for (let i = 0; i < tags; i++)\n if (view.getUint16(offset + i * 12, little) == 0x0112) return view.getUint16(offset + i * 12 + 8, little);\n // tslint:disable-next-line: no-bitwise\n } else if ((marker & 0xff00) != 0xff00) break;\n else offset += view.getUint16(offset, false);\n }\n return -1; // not defined\n }\n}\n","import { NgClass } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, inject, Input, OnDestroy, ViewChild } from '@angular/core';\r\n\r\nimport { from, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { ThumbnailSize } from './thumbnail-size';\r\nimport { ThumbnailService } from './thumbnail.service';\r\n\r\n/**\r\n * @description Componente de miniatura de imagem com suporte a imagem de fallback,\r\n * ícone de ação sobrepôsto, orientação automática e diferentes tamanhos predefinidos.\r\n *\r\n * @example\r\n * ```html\r\n * <s-thumbnail\r\n * [imageSource]=\"urlDaImagem\"\r\n * size=\"large\"\r\n * iconClass=\"fas fa-user\" />\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n selector: 's-thumbnail',\r\n templateUrl: './thumbnail.component.html',\r\n styleUrls: ['./thumbnail.component.scss'],\r\n standalone: true,\r\n imports: [NgClass],\r\n providers: [ThumbnailService],\r\n})\r\nexport class ThumbnailComponent implements AfterViewInit, OnDestroy {\r\n private readonly thumbnailService = inject(ThumbnailService);\r\n\r\n public static nextId = 0;\r\n public fallback = false;\r\n public orientation = 0;\r\n\r\n @ViewChild('img', { static: false })\r\n public imgEl: ElementRef | null = null;\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-thumbnail-${ThumbnailComponent.nextId++}`;\r\n\r\n /** @description Tamanho da miniatura: `'small'`, `'medium'`, `'large'`, etc. @default 'medium' */\r\n @Input()\r\n public size: ThumbnailSize = 'medium';\r\n\r\n /** @description URL da imagem principal. */\r\n @Input()\r\n public imageSource?: string;\r\n\r\n /** @description URL da imagem de fallback exibida quando a principal falha ao carregar. */\r\n @Input()\r\n public imageFallback?: string;\r\n\r\n /** @description Texto alternativo (atributo `alt`) da imagem. */\r\n @Input()\r\n public imageAlt?: string;\r\n\r\n /** @description Classe do ícone exibido quando não há imagem disponível. @default 'far fa-image' */\r\n @Input()\r\n public iconClass = 'far fa-image';\r\n\r\n /** @description Habilita a exibição de um botão de ação sobrepôsto. @default false */\r\n @Input()\r\n public hasAction = false;\r\n\r\n /** @description Classe do ícone do botão de ação. @default 'fas fa-camera' */\r\n @Input()\r\n public actionIconClass = 'fas fa-camera';\r\n\r\n /** @description Aplica estilo de tile ao thumbnail. @default false */\r\n @Input()\r\n public isTile = false;\r\n\r\n /** @description Aplica estilo de marca ao thumbnail. @default false */\r\n @Input()\r\n public isBrand = false;\r\n\r\n private ngUnsubscribe = new Subject<void>();\r\n\r\n public ngOnDestroy(): void {\r\n this.ngUnsubscribe.next();\r\n this.ngUnsubscribe.complete();\r\n }\r\n\r\n public onContainerKeydown(event: KeyboardEvent): void {\r\n if (!this.hasAction || (event.key !== 'Enter' && event.key !== ' ')) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n (event.currentTarget as HTMLElement).click();\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n if (this.imgEl) {\r\n this.imgEl.nativeElement.addEventListener('load', () => {\r\n from(this.thumbnailService.getBinaryFile(this.imgEl?.nativeElement))\r\n .pipe(takeUntil(this.ngUnsubscribe))\r\n .subscribe((value: unknown) => {\r\n if (typeof value === 'number') {\r\n this.orientation = value;\r\n } else {\r\n console.error('Valor retornado não é um número:', value);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","<div\n [id]=\"id\"\n class=\"thumbnail-container thumbnail-container--{{ size }}\"\n [ngClass]=\"{\n 'thumbnail-container--with-action': hasAction,\n 'thumbnail-container--brand': isBrand,\n }\"\n [attr.tabindex]=\"hasAction ? 0 : null\"\n [attr.role]=\"hasAction ? 'button' : null\"\n (keydown)=\"onContainerKeydown($event)\"\n>\n @if (imageSource || imageFallback) {\n <div\n [id]=\"id + '-image-container'\"\n class=\"image-container\"\n [ngClass]=\"{\n 'image-container--rounded': !isBrand,\n }\"\n >\n @if (!fallback) {\n <img\n #img\n [id]=\"id + '-image'\"\n (error)=\"fallback = true\"\n [src]=\"imageSource\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && imageFallback) {\n <img\n #img\n [id]=\"id + '-image-fallback'\"\n (error)=\"imageFallback = undefined\"\n [src]=\"imageFallback\"\n [alt]=\"imageAlt\"\n [ngClass]=\"{\n smallThumbnail: isTile,\n 'exif-orientation-2': orientation === 2,\n 'exif-orientation-3': orientation === 3,\n 'exif-orientation-4': orientation === 4,\n 'exif-orientation-5': orientation === 5,\n 'exif-orientation-6': orientation === 6,\n 'exif-orientation-7': orientation === 7,\n 'exif-orientation-8': orientation === 8,\n }\"\n />\n }\n\n @if (fallback && !imageFallback) {\n <i class=\"fallback-img-color far fa-image\"> </i>\n }\n </div>\n }\n\n @if (hasAction) {\n <div\n [id]=\"id + '-action-icon-container'\"\n class=\"action-icon-container action-icon-container--{{ size }}\"\n >\n <span\n [id]=\"id + '-action-icon'\"\n [class]=\"actionIconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n @if (!imageSource && !imageFallback) {\n <div\n [id]=\"id + '-icon-container'\"\n class=\"icon-container icon-container--{{ size }}\"\n [ngClass]=\"{ 'image-container--rounded': !isBrand }\"\n >\n <span\n [id]=\"id + '-icon'\"\n [class]=\"iconClass\"\n aria-hidden=\"true\"\n >\n </span>\n </div>\n }\n\n <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { ThumbnailComponent } from './thumbnail.component';\r\nimport { ThumbnailService } from './thumbnail.service';\r\n\r\n@NgModule({\r\n imports: [ThumbnailComponent],\r\n exports: [ThumbnailComponent],\r\n providers: [ThumbnailService],\r\n})\r\nexport class ThumbnailModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -98,7 +98,7 @@ class ThumbnailItemComponent {
98
98
  }
99
99
  }
100
100
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ThumbnailItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ThumbnailItemComponent, isStandalone: true, selector: "s-thumbnail-item", inputs: { itemData: "itemData", isCheckable: "isCheckable", isChecked: "isChecked", combineCheckboxEvent: "combineCheckboxEvent" }, outputs: { checked: "checked", opened: "opened" }, ngImport: i0, template: "@if (itemData) {\r\n <button\r\n class=\"thumbnail-item\"\r\n (click)=\"onClick()\"\r\n >\r\n <div class=\"thumbnail-item-content\">\r\n <div class=\"content\">\r\n @if (itemData.type === 'video') {\r\n <s-thumbnail-item-video\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n [videoUrl]=\"itemData.videoUrl ? itemData.videoUrl : ''\"\r\n >\r\n </s-thumbnail-item-video>\r\n }\r\n @if (itemData.type === 'image') {\r\n <s-thumbnail-item-image\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n ></s-thumbnail-item-image>\r\n }\r\n @if (itemData.type === 'audio') {\r\n <i class=\"icon fas fa-volume-down\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.listen' | translate }}</span>\r\n }\r\n @if (itemData.type === 'file') {\r\n <i class=\"icon fas fa-file-alt\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.view' | translate }}</span>\r\n }\r\n </div>\r\n @if (isCheckable) {\r\n <form\r\n [formGroup]=\"checkboxFormGroup\"\r\n class=\"checkbox\"\r\n >\r\n <s-checkbox-list\r\n [data]=\"{ label: '' }\"\r\n formControlName=\"checkbox\"\r\n (click)=\"checkboxClick($event)\"\r\n ></s-checkbox-list>\r\n </form>\r\n }\r\n </div>\r\n <span class=\"file-name-label\">{{ itemData.fileName }}</span>\r\n </button>\r\n}\r\n", styles: [".thumbnail-item{align-items:center;background:transparent;border:none;cursor:pointer;display:inline-flex;flex-direction:column;justify-content:center;overflow:hidden;width:100px}.thumbnail-item-content{align-items:center;background-image:linear-gradient(to top right,#5288b6,#00c89a);border-radius:8px;display:flex;flex-direction:column;height:100px;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:100%;overflow:hidden}.thumbnail-item-content .checkbox{position:absolute;right:8px;top:8px}.thumbnail-item-content .content{align-items:center;color:#fff;display:flex;flex-direction:column;gap:4px;overflow:hidden;width:100%}.thumbnail-item-content .content .icon{font-size:24px}.thumbnail-item-content .content .label{font-size:12px;width:100%;padding:0 8px;overflow:hidden;text-overflow:ellipsis}.thumbnail-item:hover{transform:scale(1.05);transition:all .2s ease-in-out}.thumbnail-item .file-name-label{color:#525966;font-family:Open Sans,sans-serif;font-size:12px;overflow:hidden;text-align:center;text-overflow:ellipsis;text-wrap:nowrap;-webkit-user-select:none;user-select:none;width:100%}\n"], dependencies: [{ kind: "component", type: ThumbnailItemVideoComponent, selector: "s-thumbnail-item-video", inputs: ["imageUrl", "videoUrl"] }, { kind: "component", type: ThumbnailItemImageComponent, selector: "s-thumbnail-item-image", inputs: ["imageUrl"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CheckboxListComponent, selector: "s-checkbox-list", inputs: ["data"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
101
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ThumbnailItemComponent, isStandalone: true, selector: "s-thumbnail-item", inputs: { itemData: "itemData", isCheckable: "isCheckable", isChecked: "isChecked", combineCheckboxEvent: "combineCheckboxEvent" }, outputs: { checked: "checked", opened: "opened" }, ngImport: i0, template: "@if (itemData) {\r\n <button\r\n class=\"thumbnail-item\"\r\n (click)=\"onClick()\"\r\n >\r\n <div class=\"thumbnail-item-content\">\r\n <div class=\"content\">\r\n @if (itemData.type === 'video') {\r\n <s-thumbnail-item-video\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n [videoUrl]=\"itemData.videoUrl ? itemData.videoUrl : ''\"\r\n >\r\n </s-thumbnail-item-video>\r\n }\r\n @if (itemData.type === 'image') {\r\n <s-thumbnail-item-image\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n ></s-thumbnail-item-image>\r\n }\r\n @if (itemData.type === 'audio') {\r\n <i class=\"icon fas fa-volume-down\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.listen' | translate }}</span>\r\n }\r\n @if (itemData.type === 'file') {\r\n <i class=\"icon fas fa-file-alt\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.view' | translate }}</span>\r\n }\r\n </div>\r\n @if (isCheckable) {\r\n <form\r\n [formGroup]=\"checkboxFormGroup\"\r\n class=\"checkbox\"\r\n >\r\n <s-checkbox-list\r\n [data]=\"{ label: '' }\"\r\n formControlName=\"checkbox\"\r\n (click)=\"checkboxClick($event)\"\r\n ></s-checkbox-list>\r\n </form>\r\n }\r\n </div>\r\n <span class=\"file-name-label\">{{ itemData.fileName }}</span>\r\n </button>\r\n}\r\n", styles: [".thumbnail-item{align-items:center;background:transparent;border:none;cursor:pointer;display:inline-flex;flex-direction:column;justify-content:center;overflow:hidden;width:100px;border-radius:8px}.thumbnail-item:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.thumbnail-item-content{align-items:center;background-image:linear-gradient(to top right,#5288b6,#00c89a);border-radius:8px;display:flex;flex-direction:column;height:100px;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:100%;overflow:hidden}.thumbnail-item-content .checkbox{position:absolute;right:8px;top:8px}.thumbnail-item-content .content{align-items:center;color:#fff;display:flex;flex-direction:column;gap:4px;overflow:hidden;width:100%}.thumbnail-item-content .content .icon{font-size:24px}.thumbnail-item-content .content .label{font-size:12px;width:100%;padding:0 8px;overflow:hidden;text-overflow:ellipsis}.thumbnail-item:hover{transform:scale(1.05);transition:transform .2s ease-in-out}.thumbnail-item .file-name-label{color:#525966;font-family:Open Sans,sans-serif;font-size:12px;overflow:hidden;text-align:center;text-overflow:ellipsis;text-wrap:nowrap;-webkit-user-select:none;user-select:none;width:100%}\n"], dependencies: [{ kind: "component", type: ThumbnailItemVideoComponent, selector: "s-thumbnail-item-video", inputs: ["imageUrl", "videoUrl"] }, { kind: "component", type: ThumbnailItemImageComponent, selector: "s-thumbnail-item-image", inputs: ["imageUrl"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CheckboxListComponent, selector: "s-checkbox-list", inputs: ["data"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
102
102
  }
103
103
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ThumbnailItemComponent, decorators: [{
104
104
  type: Component,
@@ -109,7 +109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
109
109
  ReactiveFormsModule,
110
110
  CheckboxListComponent,
111
111
  TranslatePipe,
112
- ], template: "@if (itemData) {\r\n <button\r\n class=\"thumbnail-item\"\r\n (click)=\"onClick()\"\r\n >\r\n <div class=\"thumbnail-item-content\">\r\n <div class=\"content\">\r\n @if (itemData.type === 'video') {\r\n <s-thumbnail-item-video\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n [videoUrl]=\"itemData.videoUrl ? itemData.videoUrl : ''\"\r\n >\r\n </s-thumbnail-item-video>\r\n }\r\n @if (itemData.type === 'image') {\r\n <s-thumbnail-item-image\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n ></s-thumbnail-item-image>\r\n }\r\n @if (itemData.type === 'audio') {\r\n <i class=\"icon fas fa-volume-down\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.listen' | translate }}</span>\r\n }\r\n @if (itemData.type === 'file') {\r\n <i class=\"icon fas fa-file-alt\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.view' | translate }}</span>\r\n }\r\n </div>\r\n @if (isCheckable) {\r\n <form\r\n [formGroup]=\"checkboxFormGroup\"\r\n class=\"checkbox\"\r\n >\r\n <s-checkbox-list\r\n [data]=\"{ label: '' }\"\r\n formControlName=\"checkbox\"\r\n (click)=\"checkboxClick($event)\"\r\n ></s-checkbox-list>\r\n </form>\r\n }\r\n </div>\r\n <span class=\"file-name-label\">{{ itemData.fileName }}</span>\r\n </button>\r\n}\r\n", styles: [".thumbnail-item{align-items:center;background:transparent;border:none;cursor:pointer;display:inline-flex;flex-direction:column;justify-content:center;overflow:hidden;width:100px}.thumbnail-item-content{align-items:center;background-image:linear-gradient(to top right,#5288b6,#00c89a);border-radius:8px;display:flex;flex-direction:column;height:100px;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:100%;overflow:hidden}.thumbnail-item-content .checkbox{position:absolute;right:8px;top:8px}.thumbnail-item-content .content{align-items:center;color:#fff;display:flex;flex-direction:column;gap:4px;overflow:hidden;width:100%}.thumbnail-item-content .content .icon{font-size:24px}.thumbnail-item-content .content .label{font-size:12px;width:100%;padding:0 8px;overflow:hidden;text-overflow:ellipsis}.thumbnail-item:hover{transform:scale(1.05);transition:all .2s ease-in-out}.thumbnail-item .file-name-label{color:#525966;font-family:Open Sans,sans-serif;font-size:12px;overflow:hidden;text-align:center;text-overflow:ellipsis;text-wrap:nowrap;-webkit-user-select:none;user-select:none;width:100%}\n"] }]
112
+ ], template: "@if (itemData) {\r\n <button\r\n class=\"thumbnail-item\"\r\n (click)=\"onClick()\"\r\n >\r\n <div class=\"thumbnail-item-content\">\r\n <div class=\"content\">\r\n @if (itemData.type === 'video') {\r\n <s-thumbnail-item-video\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n [videoUrl]=\"itemData.videoUrl ? itemData.videoUrl : ''\"\r\n >\r\n </s-thumbnail-item-video>\r\n }\r\n @if (itemData.type === 'image') {\r\n <s-thumbnail-item-image\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n ></s-thumbnail-item-image>\r\n }\r\n @if (itemData.type === 'audio') {\r\n <i class=\"icon fas fa-volume-down\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.listen' | translate }}</span>\r\n }\r\n @if (itemData.type === 'file') {\r\n <i class=\"icon fas fa-file-alt\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.view' | translate }}</span>\r\n }\r\n </div>\r\n @if (isCheckable) {\r\n <form\r\n [formGroup]=\"checkboxFormGroup\"\r\n class=\"checkbox\"\r\n >\r\n <s-checkbox-list\r\n [data]=\"{ label: '' }\"\r\n formControlName=\"checkbox\"\r\n (click)=\"checkboxClick($event)\"\r\n ></s-checkbox-list>\r\n </form>\r\n }\r\n </div>\r\n <span class=\"file-name-label\">{{ itemData.fileName }}</span>\r\n </button>\r\n}\r\n", styles: [".thumbnail-item{align-items:center;background:transparent;border:none;cursor:pointer;display:inline-flex;flex-direction:column;justify-content:center;overflow:hidden;width:100px;border-radius:8px}.thumbnail-item:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.thumbnail-item-content{align-items:center;background-image:linear-gradient(to top right,#5288b6,#00c89a);border-radius:8px;display:flex;flex-direction:column;height:100px;justify-content:center;position:relative;-webkit-user-select:none;user-select:none;width:100%;overflow:hidden}.thumbnail-item-content .checkbox{position:absolute;right:8px;top:8px}.thumbnail-item-content .content{align-items:center;color:#fff;display:flex;flex-direction:column;gap:4px;overflow:hidden;width:100%}.thumbnail-item-content .content .icon{font-size:24px}.thumbnail-item-content .content .label{font-size:12px;width:100%;padding:0 8px;overflow:hidden;text-overflow:ellipsis}.thumbnail-item:hover{transform:scale(1.05);transition:transform .2s ease-in-out}.thumbnail-item .file-name-label{color:#525966;font-family:Open Sans,sans-serif;font-size:12px;overflow:hidden;text-align:center;text-overflow:ellipsis;text-wrap:nowrap;-webkit-user-select:none;user-select:none;width:100%}\n"] }]
113
113
  }], propDecorators: { itemData: [{
114
114
  type: Input
115
115
  }], isCheckable: [{
@@ -1 +1 @@
1
- {"version":3,"file":"seniorsistemas-angular-components-thumbnails.mjs","sources":["../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-image/thumbnail-item-image.component.ts","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-image/thumbnail-item-image.component.html","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-video/thumbnail-item-video.component.ts","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-video/thumbnail-item-video.component.html","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.ts","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.html","../../projects/angular-components/thumbnails/src/lib/thumbnails/thumbnails.component.ts","../../projects/angular-components/thumbnails/src/lib/thumbnails/thumbnails.component.html","../../projects/angular-components/thumbnails/src/lib/thumbnails/thumbnails.module.ts","../../projects/angular-components/thumbnails/src/seniorsistemas-angular-components-thumbnails.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 's-thumbnail-item-image',\r\n templateUrl: './thumbnail-item-image.component.html',\r\n styleUrls: ['./thumbnail-item-image.component.scss'],\r\n standalone: true,\r\n imports: [NgStyle, TranslatePipe],\r\n})\r\nexport class ThumbnailItemImageComponent {\r\n @Input({ required: true })\r\n public imageUrl = '';\r\n}\r\n","<div class=\"thumbnail-item-image\">\r\n @if (imageUrl) {\r\n <div\r\n class=\"thumbnail-image\"\r\n [ngStyle]=\"{ backgroundImage: 'url(' + imageUrl + ')' }\"\r\n ></div>\r\n } @else {\r\n <div class=\"content\">\r\n <i class=\"icon fas fa-image\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.view' | translate }}</span>\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass, NgStyle } from '@angular/common';\r\nimport { Component, ElementRef, HostListener, Input, ViewChild } from '@angular/core';\r\n\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 's-thumbnail-item-video',\r\n templateUrl: './thumbnail-item-video.component.html',\r\n styleUrls: ['./thumbnail-item-video.component.scss'],\r\n standalone: true,\r\n imports: [NgClass, NgStyle, TranslatePipe],\r\n})\r\nexport class ThumbnailItemVideoComponent {\r\n @Input({ required: true })\r\n public imageUrl!: string;\r\n\r\n @Input({ required: true })\r\n public videoUrl!: string;\r\n\r\n @ViewChild('videoPlayer') videoPlayer!: ElementRef;\r\n\r\n @HostListener('mouseenter') onMouseEnter(): void {\r\n if (this.videoPlayer?.nativeElement) {\r\n this.videoPlayer.nativeElement.play();\r\n }\r\n }\r\n\r\n @HostListener('mouseleave') onMouseLeave(): void {\r\n if (this.videoPlayer?.nativeElement) {\r\n this.videoPlayer.nativeElement.pause();\r\n this.videoPlayer.nativeElement.currentTime = 0;\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"thumbnail-item-video\"\r\n [ngClass]=\"{ 'thumbnail-item-video--playable': videoUrl }\"\r\n>\r\n <div\r\n class=\"thumbnail-image\"\r\n [ngStyle]=\"{ backgroundImage: 'url(' + imageUrl + ')' }\"\r\n ></div>\r\n <div class=\"play-overlay\">\r\n <i class=\"icon fas fa-play\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.watch' | translate }}</span>\r\n </div>\r\n @if (videoUrl) {\r\n <video\r\n #videoPlayer\r\n class=\"thumbnail-video-preview\"\r\n [src]=\"videoUrl\"\r\n [loop]=\"true\"\r\n [muted]=\"true\"\r\n preload=\"none\"\r\n ></video>\r\n }\r\n</div>\r\n","import { Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { CheckboxListComponent, CheckboxListState } from '@seniorsistemas/angular-components/checkbox-list';\r\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\r\n\r\nimport { ThumbnailsItem } from '../../models/thumbnails-item';\r\nimport { ThumbnailItemImageComponent } from './components/thumbnail-item-image/thumbnail-item-image.component';\r\nimport { ThumbnailItemVideoComponent } from './components/thumbnail-item-video/thumbnail-item-video.component';\r\n\r\n@Component({\r\n selector: 's-thumbnail-item',\r\n templateUrl: './thumbnail-item.component.html',\r\n styleUrls: ['./thumbnail-item.component.scss'],\r\n standalone: true,\r\n imports: [\r\n ThumbnailItemVideoComponent,\r\n ThumbnailItemImageComponent,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CheckboxListComponent,\r\n TranslatePipe,\r\n ],\r\n})\r\nexport class ThumbnailItemComponent implements OnInit {\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n @Input()\r\n public itemData!: ThumbnailsItem;\r\n\r\n @Input()\r\n public isCheckable = true;\r\n\r\n @Input()\r\n public isChecked = false;\r\n\r\n @Input() combineCheckboxEvent = true;\r\n\r\n @Output()\r\n public checked = new EventEmitter<{ item: ThumbnailsItem; selected: boolean }>();\r\n\r\n @Output()\r\n public opened = new EventEmitter<ThumbnailsItem>();\r\n\r\n public checkboxFormGroup: FormGroup = new FormGroup({});\r\n\r\n public ngOnInit(): void {\r\n this._validateItemData();\r\n this._createFormGroup();\r\n }\r\n\r\n public onClick() {\r\n this.opened.emit(this.itemData);\r\n }\r\n\r\n public checkboxClick(event: Event): void {\r\n if (this.combineCheckboxEvent) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n private _createFormGroup(): void {\r\n this.checkboxFormGroup = new FormGroup({\r\n checkbox: new FormControl({ checked: this.isChecked }),\r\n });\r\n\r\n this.checkboxFormGroup\r\n .get('checkbox')\r\n ?.valueChanges.pipe(takeUntilDestroyed(this._destroyRef))\r\n .subscribe((value: CheckboxListState) => {\r\n this.checked.emit({ item: this.itemData, selected: value.checked });\r\n });\r\n }\r\n\r\n private _validateItemData(): void {\r\n if (isNullOrUndefined(this.itemData)) {\r\n throw new Error('itemData is required');\r\n }\r\n }\r\n}\r\n","@if (itemData) {\r\n <button\r\n class=\"thumbnail-item\"\r\n (click)=\"onClick()\"\r\n >\r\n <div class=\"thumbnail-item-content\">\r\n <div class=\"content\">\r\n @if (itemData.type === 'video') {\r\n <s-thumbnail-item-video\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n [videoUrl]=\"itemData.videoUrl ? itemData.videoUrl : ''\"\r\n >\r\n </s-thumbnail-item-video>\r\n }\r\n @if (itemData.type === 'image') {\r\n <s-thumbnail-item-image\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n ></s-thumbnail-item-image>\r\n }\r\n @if (itemData.type === 'audio') {\r\n <i class=\"icon fas fa-volume-down\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.listen' | translate }}</span>\r\n }\r\n @if (itemData.type === 'file') {\r\n <i class=\"icon fas fa-file-alt\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.view' | translate }}</span>\r\n }\r\n </div>\r\n @if (isCheckable) {\r\n <form\r\n [formGroup]=\"checkboxFormGroup\"\r\n class=\"checkbox\"\r\n >\r\n <s-checkbox-list\r\n [data]=\"{ label: '' }\"\r\n formControlName=\"checkbox\"\r\n (click)=\"checkboxClick($event)\"\r\n ></s-checkbox-list>\r\n </form>\r\n }\r\n </div>\r\n <span class=\"file-name-label\">{{ itemData.fileName }}</span>\r\n </button>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { ThumbnailItemComponent } from './components/thumbnail-item/thumbnail-item.component';\r\nimport { ThumbnailsItem } from './models/thumbnails-item';\r\n\r\n/**\r\n * @description Componente de galeria de miniaturas com suporte a seleção múltipla\r\n * e abertura de itens. Gerencia o estado de seleção internamente e emite eventos\r\n * para o componente pai.\r\n *\r\n * @example\r\n * ```html\r\n * <s-thumbnails\r\n * [items]=\"miniaturas\"\r\n * [selectable]=\"true\"\r\n * [(selection)]=\"itensSelecionados\"\r\n * (itemOpened)=\"onItemAberto($event)\" />\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n selector: 's-thumbnails',\r\n templateUrl: './thumbnails.component.html',\r\n styleUrls: ['./thumbnails.component.scss'],\r\n standalone: true,\r\n imports: [ThumbnailItemComponent],\r\n})\r\nexport class ThumbnailsComponent {\r\n /** @description Lista de itens exibidos na galeria. @default [] */\r\n @Input()\r\n public items: ThumbnailsItem[] = [];\r\n\r\n /** @description Habilita a seleção de itens. @default true */\r\n @Input()\r\n public selectable = true;\r\n\r\n /** @description Quando `true`, combina o evento de checkbox com o de seleção. @default true */\r\n @Input() combineCheckboxEvent = true;\r\n\r\n /**\r\n * @description Lista de itens atualmente selecionados. Suporta two-way binding.\r\n * @default []\r\n */\r\n @Input()\r\n public set selection(items: ThumbnailsItem[]) {\r\n this._selection = [...items];\r\n }\r\n\r\n /** @description Emitido quando a seleção de itens muda. */\r\n @Output()\r\n public selectionChange = new EventEmitter<ThumbnailsItem[]>();\r\n\r\n /** @description Emitido quando o usuário abre um item (clique duplo ou ação de abrir). */\r\n @Output()\r\n public itemOpened = new EventEmitter<ThumbnailsItem>();\r\n\r\n private _selection: ThumbnailsItem[] = [];\r\n\r\n public onItemOpened(item: ThumbnailsItem): void {\r\n this.itemOpened.emit(item);\r\n }\r\n\r\n public onItemSelected(items: { item: ThumbnailsItem; selected: boolean }): void {\r\n if (items.selected) {\r\n this._selection.push(items.item);\r\n } else {\r\n this._selection.splice(\r\n this._selection.findIndex((item) => item === items.item),\r\n 1,\r\n );\r\n }\r\n\r\n this.selectionChange.emit(this._selection);\r\n }\r\n\r\n public isSelected(item: ThumbnailsItem) {\r\n return this._selection.some((i: ThumbnailsItem) => i.id === item.id);\r\n }\r\n}\r\n","<div class=\"thumbnails\">\n @for(item of items; track $index) {\n <s-thumbnail-item\n [combineCheckboxEvent]=\"combineCheckboxEvent\"\n [itemData]=\"item\"\n [isCheckable]=\"selectable\"\n [isChecked]=\"isSelected(item)\"\n (checked)=\"onItemSelected($event)\"\n (opened)=\"onItemOpened($event)\">\n </s-thumbnail-item>\n }\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { ThumbnailsComponent } from './thumbnails.component';\r\n\r\n@NgModule({\r\n imports: [ThumbnailsComponent],\r\n exports: [ThumbnailsComponent],\r\n})\r\nexport class ThumbnailsModule {}\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-thumbnails.mjs","sources":["../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-image/thumbnail-item-image.component.ts","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-image/thumbnail-item-image.component.html","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-video/thumbnail-item-video.component.ts","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-video/thumbnail-item-video.component.html","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.ts","../../projects/angular-components/thumbnails/src/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.html","../../projects/angular-components/thumbnails/src/lib/thumbnails/thumbnails.component.ts","../../projects/angular-components/thumbnails/src/lib/thumbnails/thumbnails.component.html","../../projects/angular-components/thumbnails/src/lib/thumbnails/thumbnails.module.ts","../../projects/angular-components/thumbnails/src/seniorsistemas-angular-components-thumbnails.ts"],"sourcesContent":["import { NgStyle } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 's-thumbnail-item-image',\r\n templateUrl: './thumbnail-item-image.component.html',\r\n styleUrls: ['./thumbnail-item-image.component.scss'],\r\n standalone: true,\r\n imports: [NgStyle, TranslatePipe],\r\n})\r\nexport class ThumbnailItemImageComponent {\r\n @Input({ required: true })\r\n public imageUrl = '';\r\n}\r\n","<div class=\"thumbnail-item-image\">\r\n @if (imageUrl) {\r\n <div\r\n class=\"thumbnail-image\"\r\n [ngStyle]=\"{ backgroundImage: 'url(' + imageUrl + ')' }\"\r\n ></div>\r\n } @else {\r\n <div class=\"content\">\r\n <i class=\"icon fas fa-image\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.view' | translate }}</span>\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass, NgStyle } from '@angular/common';\r\nimport { Component, ElementRef, HostListener, Input, ViewChild } from '@angular/core';\r\n\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\n\r\n@Component({\r\n selector: 's-thumbnail-item-video',\r\n templateUrl: './thumbnail-item-video.component.html',\r\n styleUrls: ['./thumbnail-item-video.component.scss'],\r\n standalone: true,\r\n imports: [NgClass, NgStyle, TranslatePipe],\r\n})\r\nexport class ThumbnailItemVideoComponent {\r\n @Input({ required: true })\r\n public imageUrl!: string;\r\n\r\n @Input({ required: true })\r\n public videoUrl!: string;\r\n\r\n @ViewChild('videoPlayer') videoPlayer!: ElementRef;\r\n\r\n @HostListener('mouseenter') onMouseEnter(): void {\r\n if (this.videoPlayer?.nativeElement) {\r\n this.videoPlayer.nativeElement.play();\r\n }\r\n }\r\n\r\n @HostListener('mouseleave') onMouseLeave(): void {\r\n if (this.videoPlayer?.nativeElement) {\r\n this.videoPlayer.nativeElement.pause();\r\n this.videoPlayer.nativeElement.currentTime = 0;\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"thumbnail-item-video\"\r\n [ngClass]=\"{ 'thumbnail-item-video--playable': videoUrl }\"\r\n>\r\n <div\r\n class=\"thumbnail-image\"\r\n [ngStyle]=\"{ backgroundImage: 'url(' + imageUrl + ')' }\"\r\n ></div>\r\n <div class=\"play-overlay\">\r\n <i class=\"icon fas fa-play\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.watch' | translate }}</span>\r\n </div>\r\n @if (videoUrl) {\r\n <video\r\n #videoPlayer\r\n class=\"thumbnail-video-preview\"\r\n [src]=\"videoUrl\"\r\n [loop]=\"true\"\r\n [muted]=\"true\"\r\n preload=\"none\"\r\n ></video>\r\n }\r\n</div>\r\n","import { Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { TranslatePipe } from '@ngx-translate/core';\r\nimport { CheckboxListComponent, CheckboxListState } from '@seniorsistemas/angular-components/checkbox-list';\r\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\r\n\r\nimport { ThumbnailsItem } from '../../models/thumbnails-item';\r\nimport { ThumbnailItemImageComponent } from './components/thumbnail-item-image/thumbnail-item-image.component';\r\nimport { ThumbnailItemVideoComponent } from './components/thumbnail-item-video/thumbnail-item-video.component';\r\n\r\n@Component({\r\n selector: 's-thumbnail-item',\r\n templateUrl: './thumbnail-item.component.html',\r\n styleUrls: ['./thumbnail-item.component.scss'],\r\n standalone: true,\r\n imports: [\r\n ThumbnailItemVideoComponent,\r\n ThumbnailItemImageComponent,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CheckboxListComponent,\r\n TranslatePipe,\r\n ],\r\n})\r\nexport class ThumbnailItemComponent implements OnInit {\r\n private readonly _destroyRef = inject(DestroyRef);\r\n\r\n @Input()\r\n public itemData!: ThumbnailsItem;\r\n\r\n @Input()\r\n public isCheckable = true;\r\n\r\n @Input()\r\n public isChecked = false;\r\n\r\n @Input() combineCheckboxEvent = true;\r\n\r\n @Output()\r\n public checked = new EventEmitter<{ item: ThumbnailsItem; selected: boolean }>();\r\n\r\n @Output()\r\n public opened = new EventEmitter<ThumbnailsItem>();\r\n\r\n public checkboxFormGroup: FormGroup = new FormGroup({});\r\n\r\n public ngOnInit(): void {\r\n this._validateItemData();\r\n this._createFormGroup();\r\n }\r\n\r\n public onClick() {\r\n this.opened.emit(this.itemData);\r\n }\r\n\r\n public checkboxClick(event: Event): void {\r\n if (this.combineCheckboxEvent) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n private _createFormGroup(): void {\r\n this.checkboxFormGroup = new FormGroup({\r\n checkbox: new FormControl({ checked: this.isChecked }),\r\n });\r\n\r\n this.checkboxFormGroup\r\n .get('checkbox')\r\n ?.valueChanges.pipe(takeUntilDestroyed(this._destroyRef))\r\n .subscribe((value: CheckboxListState) => {\r\n this.checked.emit({ item: this.itemData, selected: value.checked });\r\n });\r\n }\r\n\r\n private _validateItemData(): void {\r\n if (isNullOrUndefined(this.itemData)) {\r\n throw new Error('itemData is required');\r\n }\r\n }\r\n}\r\n","@if (itemData) {\r\n <button\r\n class=\"thumbnail-item\"\r\n (click)=\"onClick()\"\r\n >\r\n <div class=\"thumbnail-item-content\">\r\n <div class=\"content\">\r\n @if (itemData.type === 'video') {\r\n <s-thumbnail-item-video\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n [videoUrl]=\"itemData.videoUrl ? itemData.videoUrl : ''\"\r\n >\r\n </s-thumbnail-item-video>\r\n }\r\n @if (itemData.type === 'image') {\r\n <s-thumbnail-item-image\r\n [imageUrl]=\"itemData.imageUrl ? itemData.imageUrl : ''\"\r\n ></s-thumbnail-item-image>\r\n }\r\n @if (itemData.type === 'audio') {\r\n <i class=\"icon fas fa-volume-down\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.listen' | translate }}</span>\r\n }\r\n @if (itemData.type === 'file') {\r\n <i class=\"icon fas fa-file-alt\"></i>\r\n <span class=\"label\">{{ 'platform.angular_components.view' | translate }}</span>\r\n }\r\n </div>\r\n @if (isCheckable) {\r\n <form\r\n [formGroup]=\"checkboxFormGroup\"\r\n class=\"checkbox\"\r\n >\r\n <s-checkbox-list\r\n [data]=\"{ label: '' }\"\r\n formControlName=\"checkbox\"\r\n (click)=\"checkboxClick($event)\"\r\n ></s-checkbox-list>\r\n </form>\r\n }\r\n </div>\r\n <span class=\"file-name-label\">{{ itemData.fileName }}</span>\r\n </button>\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { ThumbnailItemComponent } from './components/thumbnail-item/thumbnail-item.component';\r\nimport { ThumbnailsItem } from './models/thumbnails-item';\r\n\r\n/**\r\n * @description Componente de galeria de miniaturas com suporte a seleção múltipla\r\n * e abertura de itens. Gerencia o estado de seleção internamente e emite eventos\r\n * para o componente pai.\r\n *\r\n * @example\r\n * ```html\r\n * <s-thumbnails\r\n * [items]=\"miniaturas\"\r\n * [selectable]=\"true\"\r\n * [(selection)]=\"itensSelecionados\"\r\n * (itemOpened)=\"onItemAberto($event)\" />\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n selector: 's-thumbnails',\r\n templateUrl: './thumbnails.component.html',\r\n styleUrls: ['./thumbnails.component.scss'],\r\n standalone: true,\r\n imports: [ThumbnailItemComponent],\r\n})\r\nexport class ThumbnailsComponent {\r\n /** @description Lista de itens exibidos na galeria. @default [] */\r\n @Input()\r\n public items: ThumbnailsItem[] = [];\r\n\r\n /** @description Habilita a seleção de itens. @default true */\r\n @Input()\r\n public selectable = true;\r\n\r\n /** @description Quando `true`, combina o evento de checkbox com o de seleção. @default true */\r\n @Input() combineCheckboxEvent = true;\r\n\r\n /**\r\n * @description Lista de itens atualmente selecionados. Suporta two-way binding.\r\n * @default []\r\n */\r\n @Input()\r\n public set selection(items: ThumbnailsItem[]) {\r\n this._selection = [...items];\r\n }\r\n\r\n /** @description Emitido quando a seleção de itens muda. */\r\n @Output()\r\n public selectionChange = new EventEmitter<ThumbnailsItem[]>();\r\n\r\n /** @description Emitido quando o usuário abre um item (clique duplo ou ação de abrir). */\r\n @Output()\r\n public itemOpened = new EventEmitter<ThumbnailsItem>();\r\n\r\n private _selection: ThumbnailsItem[] = [];\r\n\r\n public onItemOpened(item: ThumbnailsItem): void {\r\n this.itemOpened.emit(item);\r\n }\r\n\r\n public onItemSelected(items: { item: ThumbnailsItem; selected: boolean }): void {\r\n if (items.selected) {\r\n this._selection.push(items.item);\r\n } else {\r\n this._selection.splice(\r\n this._selection.findIndex((item) => item === items.item),\r\n 1,\r\n );\r\n }\r\n\r\n this.selectionChange.emit(this._selection);\r\n }\r\n\r\n public isSelected(item: ThumbnailsItem) {\r\n return this._selection.some((i: ThumbnailsItem) => i.id === item.id);\r\n }\r\n}\r\n","<div class=\"thumbnails\">\n @for(item of items; track $index) {\n <s-thumbnail-item\n [combineCheckboxEvent]=\"combineCheckboxEvent\"\n [itemData]=\"item\"\n [isCheckable]=\"selectable\"\n [isChecked]=\"isSelected(item)\"\n (checked)=\"onItemSelected($event)\"\n (opened)=\"onItemOpened($event)\">\n </s-thumbnail-item>\n }\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { ThumbnailsComponent } from './thumbnails.component';\r\n\r\n@NgModule({\r\n imports: [ThumbnailsComponent],\r\n exports: [ThumbnailsComponent],\r\n})\r\nexport class ThumbnailsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -62,10 +62,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
62
62
  class TieredMenuGlobalService {
63
63
  lastInstance;
64
64
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuGlobalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
65
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuGlobalService });
65
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuGlobalService, providedIn: 'root' });
66
66
  }
67
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuGlobalService, decorators: [{
68
- type: Injectable
68
+ type: Injectable,
69
+ args: [{ providedIn: 'root' }]
69
70
  }] });
70
71
 
71
72
  class TieredMenuEventService {
@@ -120,11 +121,11 @@ class TieredMenuItemComponent {
120
121
  window.clearTimeout(this._showTimeout);
121
122
  }
122
123
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
123
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TieredMenuItemComponent, isStandalone: true, selector: "s-tiered-menu-item", inputs: { item: "item", focused: "focused", highlight: "highlight", triggerEvent: "triggerEvent", closeOnClick: "closeOnClick" }, host: { listeners: { "click": "onClick()", "touchend": "onClick()", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0, template: "<div\n [id]=\"item.id\"\n class=\"tiered-menu-item\"\n role=\"menuitem\"\n [tabindex]=\"focused && !item.disabled ? 0 : -1\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.aria-haspopup]=\"item.submenu ? 'menu' : null\"\n [attr.aria-expanded]=\"item.submenu ? item.isOpen : null\"\n [attr.data-key]=\"item.dataKey\"\n [ngClass]=\"{\n 'tiered-menu-item--open': item.isOpen,\n 'tiered-menu-item--focused': focused,\n 'tiered-menu-item--disabled': item.disabled,\n }\"\n>\n <div class=\"tiered-menu-item-content\">\n <span\n class=\"icon\"\n [ngClass]=\"item.iconClass\"\n ></span>\n <span class=\"label\">{{ item.label }}</span>\n </div>\n @if (item.submenu) {\n <span\n class=\"submenu-icon fas\"\n [class.fa-chevron-left]=\"item.isOpen\"\n [class.fa-chevron-right]=\"!item.isOpen\"\n >\n </span>\n }\n</div>\n", styles: [".tiered-menu-item{align-items:center;display:flex;justify-content:space-between;padding:8px 16px;-webkit-user-select:none;user-select:none;cursor:pointer}.tiered-menu-item .tiered-menu-item-content .label{margin:0 12px;white-space:nowrap}.tiered-menu-item:hover{background-color:#e9e6e6}.tiered-menu-item--focused{background-color:#ccc!important}.tiered-menu-item--open{background-color:#e4e2e2}.tiered-menu-item--disabled{opacity:50%;cursor:default}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
124
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TieredMenuItemComponent, isStandalone: true, selector: "s-tiered-menu-item", inputs: { item: "item", focused: "focused", highlight: "highlight", triggerEvent: "triggerEvent", closeOnClick: "closeOnClick" }, host: { listeners: { "click": "onClick()", "touchend": "onClick()", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0, template: "<div\n [id]=\"item.id\"\n class=\"tiered-menu-item\"\n role=\"menuitem\"\n [tabindex]=\"focused && !item.disabled ? 0 : -1\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.aria-haspopup]=\"item.submenu ? 'menu' : null\"\n [attr.aria-expanded]=\"item.submenu ? item.isOpen : null\"\n [attr.data-key]=\"item.dataKey\"\n [ngClass]=\"{\n 'tiered-menu-item--open': item.isOpen,\n 'tiered-menu-item--focused': focused,\n 'tiered-menu-item--disabled': item.disabled,\n }\"\n>\n <div class=\"tiered-menu-item-content\">\n <span\n class=\"icon\"\n [ngClass]=\"item.iconClass\"\n ></span>\n <span class=\"label\">{{ item.label }}</span>\n </div>\n @if (item.submenu) {\n <span\n class=\"submenu-icon fas\"\n [class.fa-chevron-left]=\"item.isOpen\"\n [class.fa-chevron-right]=\"!item.isOpen\"\n >\n </span>\n }\n</div>\n", styles: [".tiered-menu-item{align-items:center;display:flex;justify-content:space-between;padding:8px 16px;-webkit-user-select:none;user-select:none;cursor:pointer}.tiered-menu-item .tiered-menu-item-content .label{margin:0 12px;white-space:nowrap}.tiered-menu-item:hover{background-color:#e9e6e6}.tiered-menu-item--focused{background-color:#ccc!important;outline:2px solid var(--s-focus-ring-color);outline-offset:-2px}.tiered-menu-item--open{background-color:#e4e2e2}.tiered-menu-item--disabled{opacity:50%;cursor:default}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
124
125
  }
125
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuItemComponent, decorators: [{
126
127
  type: Component,
127
- args: [{ selector: 's-tiered-menu-item', standalone: true, imports: [NgClass], template: "<div\n [id]=\"item.id\"\n class=\"tiered-menu-item\"\n role=\"menuitem\"\n [tabindex]=\"focused && !item.disabled ? 0 : -1\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.aria-haspopup]=\"item.submenu ? 'menu' : null\"\n [attr.aria-expanded]=\"item.submenu ? item.isOpen : null\"\n [attr.data-key]=\"item.dataKey\"\n [ngClass]=\"{\n 'tiered-menu-item--open': item.isOpen,\n 'tiered-menu-item--focused': focused,\n 'tiered-menu-item--disabled': item.disabled,\n }\"\n>\n <div class=\"tiered-menu-item-content\">\n <span\n class=\"icon\"\n [ngClass]=\"item.iconClass\"\n ></span>\n <span class=\"label\">{{ item.label }}</span>\n </div>\n @if (item.submenu) {\n <span\n class=\"submenu-icon fas\"\n [class.fa-chevron-left]=\"item.isOpen\"\n [class.fa-chevron-right]=\"!item.isOpen\"\n >\n </span>\n }\n</div>\n", styles: [".tiered-menu-item{align-items:center;display:flex;justify-content:space-between;padding:8px 16px;-webkit-user-select:none;user-select:none;cursor:pointer}.tiered-menu-item .tiered-menu-item-content .label{margin:0 12px;white-space:nowrap}.tiered-menu-item:hover{background-color:#e9e6e6}.tiered-menu-item--focused{background-color:#ccc!important}.tiered-menu-item--open{background-color:#e4e2e2}.tiered-menu-item--disabled{opacity:50%;cursor:default}\n"] }]
128
+ args: [{ selector: 's-tiered-menu-item', standalone: true, imports: [NgClass], template: "<div\n [id]=\"item.id\"\n class=\"tiered-menu-item\"\n role=\"menuitem\"\n [tabindex]=\"focused && !item.disabled ? 0 : -1\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.aria-haspopup]=\"item.submenu ? 'menu' : null\"\n [attr.aria-expanded]=\"item.submenu ? item.isOpen : null\"\n [attr.data-key]=\"item.dataKey\"\n [ngClass]=\"{\n 'tiered-menu-item--open': item.isOpen,\n 'tiered-menu-item--focused': focused,\n 'tiered-menu-item--disabled': item.disabled,\n }\"\n>\n <div class=\"tiered-menu-item-content\">\n <span\n class=\"icon\"\n [ngClass]=\"item.iconClass\"\n ></span>\n <span class=\"label\">{{ item.label }}</span>\n </div>\n @if (item.submenu) {\n <span\n class=\"submenu-icon fas\"\n [class.fa-chevron-left]=\"item.isOpen\"\n [class.fa-chevron-right]=\"!item.isOpen\"\n >\n </span>\n }\n</div>\n", styles: [".tiered-menu-item{align-items:center;display:flex;justify-content:space-between;padding:8px 16px;-webkit-user-select:none;user-select:none;cursor:pointer}.tiered-menu-item .tiered-menu-item-content .label{margin:0 12px;white-space:nowrap}.tiered-menu-item:hover{background-color:#e9e6e6}.tiered-menu-item--focused{background-color:#ccc!important;outline:2px solid var(--s-focus-ring-color);outline-offset:-2px}.tiered-menu-item--open{background-color:#e4e2e2}.tiered-menu-item--disabled{opacity:50%;cursor:default}\n"] }]
128
129
  }], propDecorators: { item: [{
129
130
  type: Input,
130
131
  args: [{ required: true }]