keevo-components 2.0.191 → 2.0.192

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 (195) hide show
  1. package/esm2022/keevo-components.mjs +5 -0
  2. package/esm2022/lib/api/base-components/base-component-button.mjs +39 -0
  3. package/esm2022/lib/api/base-components/base-component-chart.mjs +104 -0
  4. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +308 -0
  5. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +91 -0
  6. package/esm2022/lib/api/base-components/base-component-crud.mjs +80 -0
  7. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -0
  8. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +242 -0
  9. package/esm2022/lib/api/base-components/base-component-input.mjs +101 -0
  10. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +174 -0
  11. package/esm2022/lib/api/base-components/base-component-table.mjs +354 -0
  12. package/esm2022/lib/api/base-components/base-component.mjs +51 -0
  13. package/esm2022/lib/api/components/chart/chart.config.mjs +2 -0
  14. package/esm2022/lib/api/components/chart/chart.model.mjs +2 -0
  15. package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -0
  16. package/esm2022/lib/api/components/chart/orchartnode.mjs +2 -0
  17. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -0
  18. package/esm2022/lib/api/components/step/step.model.mjs +2 -0
  19. package/esm2022/lib/api/components/stepper/kv-stepperpanel.mjs +2 -0
  20. package/esm2022/lib/api/components/table/action-item.mjs +2 -0
  21. package/esm2022/lib/api/components/table/kv-menuitem.mjs +46 -0
  22. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +2 -0
  23. package/esm2022/lib/api/components/table/table.config.column.mjs +2 -0
  24. package/esm2022/lib/api/components/table/table.config.mjs +2 -0
  25. package/esm2022/lib/api/components/table/table.paginate.mjs +10 -0
  26. package/esm2022/lib/api/components/table/tabledit.config.mjs +2 -0
  27. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +2 -0
  28. package/esm2022/lib/api/components/tree-table/tree-table-keys.mjs +2 -0
  29. package/esm2022/lib/api/components/tree-table/tree-table.config.mjs +3 -0
  30. package/esm2022/lib/api/directives/directives.module.mjs +30 -0
  31. package/esm2022/lib/api/directives/drag/drag.directive.mjs +52 -0
  32. package/esm2022/lib/api/directives/stepper/dynamicinput.directive.mjs +31 -0
  33. package/esm2022/lib/api/directives/template/template.directive.mjs +24 -0
  34. package/esm2022/lib/api/helpers/component-providers.mjs +16 -0
  35. package/esm2022/lib/api/helpers/keevo-validators.mjs +171 -0
  36. package/esm2022/lib/api/helpers/severity-color.mjs +73 -0
  37. package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -0
  38. package/esm2022/lib/api/modules/primeng.module.mjs +287 -0
  39. package/esm2022/lib/api/pipes/capitalize.pipe.mjs +47 -0
  40. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +25 -0
  41. package/esm2022/lib/api/pipes/mask.pipe.mjs +29 -0
  42. package/esm2022/lib/api/pipes/pipes.module.mjs +39 -0
  43. package/esm2022/lib/api/pipes/telefone.pipe.mjs +45 -0
  44. package/esm2022/lib/api/services/base.api.service.mjs +74 -0
  45. package/esm2022/lib/api/services/breadcrumbs.service.mjs +64 -0
  46. package/esm2022/lib/api/services/chat.service.mjs +37 -0
  47. package/esm2022/lib/api/services/component.service.mjs +37 -0
  48. package/esm2022/lib/api/services/docs.service.mjs +129 -0
  49. package/esm2022/lib/api/services/form.service.mjs +95 -0
  50. package/esm2022/lib/api/services/image.cutter.service.mjs +193 -0
  51. package/esm2022/lib/api/services/imagens.service.mjs +28 -0
  52. package/esm2022/lib/api/services/notification.service.mjs +69 -0
  53. package/esm2022/lib/api/services/object.service.mjs +39 -0
  54. package/esm2022/lib/api/services/orgchart.service.mjs +64 -0
  55. package/esm2022/lib/api/services/pdf.service.mjs +48 -0
  56. package/esm2022/lib/api/types/breadcrumb.model.mjs +2 -0
  57. package/esm2022/lib/api/types/severity.mjs +2 -0
  58. package/esm2022/lib/components/keevo-components.module.mjs +239 -0
  59. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +142 -0
  60. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +55 -0
  61. package/esm2022/lib/components/kv-button/kv-button.component.mjs +54 -0
  62. package/esm2022/lib/components/kv-button/kv-button.module.mjs +28 -0
  63. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +25 -0
  64. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +39 -0
  65. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +17 -0
  66. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +17 -0
  67. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +39 -0
  68. package/esm2022/lib/components/kv-card-selection/kv-card-selection.component.mjs +60 -0
  69. package/esm2022/lib/components/kv-card-selection/kv-card-selection.module.mjs +31 -0
  70. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +34 -0
  71. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +28 -0
  72. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +166 -0
  73. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +32 -0
  74. package/esm2022/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.mjs +32 -0
  75. package/esm2022/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.mjs +22 -0
  76. package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.component.mjs +186 -0
  77. package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.module.mjs +44 -0
  78. package/esm2022/lib/components/kv-detailed-list/kv-detailed-list.component.mjs +171 -0
  79. package/esm2022/lib/components/kv-error/kv-error.component.mjs +26 -0
  80. package/esm2022/lib/components/kv-error/kv-error.module.mjs +35 -0
  81. package/esm2022/lib/components/kv-file-upload/kv-file-upload.component.mjs +191 -0
  82. package/esm2022/lib/components/kv-file-upload/kv-file-upload.module.mjs +23 -0
  83. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.component.mjs +46 -0
  84. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.module.mjs +20 -0
  85. package/esm2022/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.mjs +68 -0
  86. package/esm2022/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.mjs +24 -0
  87. package/esm2022/lib/components/kv-filter-card/kv-filter-card.component.mjs +29 -0
  88. package/esm2022/lib/components/kv-filter-card/kv-filter-card.module.mjs +34 -0
  89. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.component.mjs +92 -0
  90. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.module.mjs +31 -0
  91. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.pipe.mjs +30 -0
  92. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.mjs +29 -0
  93. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.mjs +28 -0
  94. package/esm2022/lib/components/kv-g-icon/kv-g-icon.component.mjs +11 -0
  95. package/esm2022/lib/components/kv-g-icon/kv-g-icon.module.mjs +19 -0
  96. package/esm2022/lib/components/kv-home-card/kv-home-card.component.mjs +27 -0
  97. package/esm2022/lib/components/kv-home-card/kv-home-card.module.mjs +32 -0
  98. package/esm2022/lib/components/kv-icon/kv-icon.component.mjs +31 -0
  99. package/esm2022/lib/components/kv-icon/kv-icon.model.mjs +2 -0
  100. package/esm2022/lib/components/kv-icon/kv-icon.module.mjs +24 -0
  101. package/esm2022/lib/components/kv-image-upload/kv-image-upload.component.mjs +136 -0
  102. package/esm2022/lib/components/kv-image-upload/kv-image-upload.module.mjs +18 -0
  103. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +29 -0
  104. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +105 -0
  105. package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.mjs +18 -0
  106. package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.mjs +40 -0
  107. package/esm2022/lib/components/kv-inputs/kv-editor/config/kv-editor.config.mjs +110 -0
  108. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +271 -0
  109. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.mjs +7 -0
  110. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.mjs +135 -0
  111. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.mjs +168 -0
  112. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.mjs +78 -0
  113. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.mjs +95 -0
  114. package/esm2022/lib/components/kv-inputs/kv-editor/types/kv-editor.types.mjs +2 -0
  115. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +163 -0
  116. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +30 -0
  117. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +59 -0
  118. package/esm2022/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.mjs +66 -0
  119. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +33 -0
  120. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +38 -0
  121. package/esm2022/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.mjs +42 -0
  122. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +50 -0
  123. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +43 -0
  124. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +24 -0
  125. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +165 -0
  126. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +60 -0
  127. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +60 -0
  128. package/esm2022/lib/components/kv-inputs/kv-select-button/kv-select-button.component.mjs +46 -0
  129. package/esm2022/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.mjs +72 -0
  130. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +42 -0
  131. package/esm2022/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.mjs +58 -0
  132. package/esm2022/lib/components/kv-label/kv-label.component.mjs +15 -0
  133. package/esm2022/lib/components/kv-label/kv-label.module.mjs +24 -0
  134. package/esm2022/lib/components/kv-layout/dropdown-master/dropdown-master.component.mjs +28 -0
  135. package/esm2022/lib/components/kv-layout/kv-layout.module.mjs +72 -0
  136. package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +454 -0
  137. package/esm2022/lib/components/kv-layout/top-icons/top-icons.component.mjs +15 -0
  138. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +16 -0
  139. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +28 -0
  140. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +29 -0
  141. package/esm2022/lib/components/kv-login/kv-login.component.mjs +62 -0
  142. package/esm2022/lib/components/kv-login/kv-login.module.mjs +47 -0
  143. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +98 -0
  144. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +20 -0
  145. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +225 -0
  146. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +59 -0
  147. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +190 -0
  148. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +41 -0
  149. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.component.mjs +205 -0
  150. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.module.mjs +51 -0
  151. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +386 -0
  152. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +39 -0
  153. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +58 -0
  154. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +28 -0
  155. package/esm2022/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.mjs +62 -0
  156. package/esm2022/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.mjs +28 -0
  157. package/esm2022/lib/components/kv-report/kv-report.component.mjs +44 -0
  158. package/esm2022/lib/components/kv-report/kv-report.module.mjs +24 -0
  159. package/esm2022/lib/components/kv-stacked-bar-chart/kv-stacked-bar-chart.component.mjs +57 -0
  160. package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +74 -0
  161. package/esm2022/lib/components/kv-stepper/kv-stepper.module.mjs +47 -0
  162. package/esm2022/lib/components/kv-steps/kv-steps.component.mjs +105 -0
  163. package/esm2022/lib/components/kv-table/kv-table.component.mjs +680 -0
  164. package/esm2022/lib/components/kv-table/kv-table.module.mjs +40 -0
  165. package/esm2022/lib/components/kv-table-draggable/kv-table-draggable.component.mjs +852 -0
  166. package/esm2022/lib/components/kv-table-draggable/kv-table-draggable.module.mjs +44 -0
  167. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +341 -0
  168. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +45 -0
  169. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.component.mjs +516 -0
  170. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.module.mjs +40 -0
  171. package/esm2022/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.mjs +17 -0
  172. package/esm2022/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.mjs +18 -0
  173. package/esm2022/lib/components/kv-table-viewer/kv-table-viewer.component.mjs +293 -0
  174. package/esm2022/lib/components/kv-tag/kv-tag.component.mjs +19 -0
  175. package/esm2022/lib/components/kv-tag/kv-tag.module.mjs +24 -0
  176. package/esm2022/lib/components/kv-tags/kv-tags.component.mjs +36 -0
  177. package/esm2022/lib/components/kv-tags/kv-tags.module.mjs +27 -0
  178. package/esm2022/lib/components/kv-timeline/kv-timeline.component.mjs +77 -0
  179. package/esm2022/lib/components/kv-tree-environment/components/kv-tree-environment/kv-tree-environment.component.mjs +290 -0
  180. package/esm2022/lib/components/kv-tree-environment/components/no-arvore/no-arvore.component.mjs +94 -0
  181. package/esm2022/lib/components/kv-tree-environment/models/no-arvore.model.mjs +2 -0
  182. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +334 -0
  183. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +39 -0
  184. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +70 -0
  185. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +28 -0
  186. package/esm2022/lib/components/kv-widget-card/kv-widget-card.component.mjs +102 -0
  187. package/esm2022/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.mjs +40 -0
  188. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +68 -0
  189. package/esm2022/lib/components/kv-workspace/logo/kv-workspace-logo.component.mjs +22 -0
  190. package/esm2022/lib/components/kv-workspace/master/kv-workspace-master.component.mjs +78 -0
  191. package/esm2022/lib/components/kv-workspace/workspace/kv-workspace.component.mjs +87 -0
  192. package/esm2022/public-api.mjs +323 -0
  193. package/fesm2022/keevo-components.mjs +13777 -0
  194. package/fesm2022/keevo-components.mjs.map +1 -0
  195. package/package.json +10 -2
@@ -0,0 +1,40 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { KvTableExpandableComponent } from './kv-table-expandable.component';
4
+ import { FormsModule } from '@angular/forms';
5
+ import { KvButtonsModule } from '../kv-buttons/kv-button.module';
6
+ import { KvInputsModule } from '../kv-inputs/kv-inputs.module';
7
+ import { PrimeNgModule } from '../../api/modules/primeng.module';
8
+ import { KvButtonModule } from '../kv-button/kv-button.module';
9
+ import * as i0 from "@angular/core";
10
+ export class KvTableExpandableModule {
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableExpandableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: KvTableExpandableModule, declarations: [KvTableExpandableComponent], imports: [CommonModule,
13
+ PrimeNgModule,
14
+ FormsModule,
15
+ KvInputsModule,
16
+ KvButtonsModule,
17
+ KvButtonModule], exports: [KvTableExpandableComponent] }); }
18
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableExpandableModule, imports: [CommonModule,
19
+ PrimeNgModule,
20
+ FormsModule,
21
+ KvInputsModule,
22
+ KvButtonsModule,
23
+ KvButtonModule] }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableExpandableModule, decorators: [{
26
+ type: NgModule,
27
+ args: [{
28
+ declarations: [KvTableExpandableComponent],
29
+ imports: [
30
+ CommonModule,
31
+ PrimeNgModule,
32
+ FormsModule,
33
+ KvInputsModule,
34
+ KvButtonsModule,
35
+ KvButtonModule
36
+ ],
37
+ exports: [KvTableExpandableComponent]
38
+ }]
39
+ }] });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZXhwYW5kYWJsZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10YWJsZS1leHBhbmRhYmxlL2t2LXRhYmxlLWV4cGFuZGFibGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBYy9ELE1BQU0sT0FBTyx1QkFBdUI7OEdBQXZCLHVCQUF1QjsrR0FBdkIsdUJBQXVCLGlCQVhuQiwwQkFBMEIsYUFFdkMsWUFBWTtZQUNaLGFBQWE7WUFDYixXQUFXO1lBQ1gsY0FBYztZQUNkLGVBQWU7WUFDZixjQUFjLGFBRU4sMEJBQTBCOytHQUV6Qix1QkFBdUIsWUFUaEMsWUFBWTtZQUNaLGFBQWE7WUFDYixXQUFXO1lBQ1gsY0FBYztZQUNkLGVBQWU7WUFDZixjQUFjOzsyRkFJTCx1QkFBdUI7a0JBWm5DLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQzFDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGVBQWU7d0JBQ2YsY0FBYztxQkFDZjtvQkFDRCxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBLdlRhYmxlRXhwYW5kYWJsZUNvbXBvbmVudCB9IGZyb20gJy4va3YtdGFibGUtZXhwYW5kYWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgS3ZCdXR0b25zTW9kdWxlIH0gZnJvbSAnLi4va3YtYnV0dG9ucy9rdi1idXR0b24ubW9kdWxlJztcclxuaW1wb3J0IHsgS3ZJbnB1dHNNb2R1bGUgfSBmcm9tICcuLi9rdi1pbnB1dHMva3YtaW5wdXRzLm1vZHVsZSc7XHJcbmltcG9ydCB7IFByaW1lTmdNb2R1bGUgfSBmcm9tICcuLi8uLi9hcGkvbW9kdWxlcy9wcmltZW5nLm1vZHVsZSc7XHJcbmltcG9ydCB7IEt2QnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4va3YtYnV0dG9uL2t2LWJ1dHRvbi5tb2R1bGUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtLdlRhYmxlRXhwYW5kYWJsZUNvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUHJpbWVOZ01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgS3ZJbnB1dHNNb2R1bGUsXHJcbiAgICBLdkJ1dHRvbnNNb2R1bGUsXHJcbiAgICBLdkJ1dHRvbk1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW0t2VGFibGVFeHBhbmRhYmxlQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUYWJsZUV4cGFuZGFibGVNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { KvButtonModule } from '../../../kv-button/kv-button.module';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../kv-button/kv-button.component";
5
+ export class ActionsLoteFieldComponent {
6
+ constructor() {
7
+ this.selectedItems = input([]);
8
+ this.actionsLote = input(undefined);
9
+ }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ActionsLoteFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: ActionsLoteFieldComponent, isStandalone: true, selector: "actions-lote-field", inputs: { selectedItems: { classPropertyName: "selectedItems", publicName: "selectedItems", isSignal: true, isRequired: false, transformFunction: null }, actionsLote: { classPropertyName: "actionsLote", publicName: "actionsLote", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\r\n class=\"h-full flex flex-column gap-8 align-items-center justify-content-center\"\r\n>\r\n <div class=\"flex flex-column gap-3 align-items-center justify-content-center\">\r\n <img\r\n src=\"https://work-assets.keevo.com.br/img/Sem_Dados.png\"\r\n class=\"h-5rem w-auto\"\r\n />\r\n <span class=\"text-gray-600 text-sm font-medium\"\r\n >{{ this.selectedItems()?.length }} itens selecionados</span\r\n >\r\n </div>\r\n\r\n <div class=\"flex flex-column gap-2\">\r\n @if(actionsLote()) { @for(action of actionsLote(); track $index) {\r\n <kv-button\r\n [icon]=\"action?.icon || ''\"\r\n [label]=\"action?.label || ''\"\r\n severity=\"secondary\"\r\n type=\"text\"\r\n (onClick)=\"action?.command($event)\"\r\n />\r\n } }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: KvButtonModule }, { kind: "component", type: i1.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup", "popupIcon"], outputs: ["iconChange", "onClick"] }] }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ActionsLoteFieldComponent, decorators: [{
14
+ type: Component,
15
+ args: [{ selector: 'actions-lote-field', standalone: true, imports: [KvButtonModule], template: "<div\r\n class=\"h-full flex flex-column gap-8 align-items-center justify-content-center\"\r\n>\r\n <div class=\"flex flex-column gap-3 align-items-center justify-content-center\">\r\n <img\r\n src=\"https://work-assets.keevo.com.br/img/Sem_Dados.png\"\r\n class=\"h-5rem w-auto\"\r\n />\r\n <span class=\"text-gray-600 text-sm font-medium\"\r\n >{{ this.selectedItems()?.length }} itens selecionados</span\r\n >\r\n </div>\r\n\r\n <div class=\"flex flex-column gap-2\">\r\n @if(actionsLote()) { @for(action of actionsLote(); track $index) {\r\n <kv-button\r\n [icon]=\"action?.icon || ''\"\r\n [label]=\"action?.label || ''\"\r\n severity=\"secondary\"\r\n type=\"text\"\r\n (onClick)=\"action?.command($event)\"\r\n />\r\n } }\r\n </div>\r\n</div>\r\n" }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1sb3RlLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRhYmxlLXZpZXdlci9jb21wb25lbnRzL2FjdGlvbnMtbG90ZS1maWVsZC9hY3Rpb25zLWxvdGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtdmlld2VyL2NvbXBvbmVudHMvYWN0aW9ucy1sb3RlLWZpZWxkL2FjdGlvbnMtbG90ZS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUE7OztBQVNwRSxNQUFNLE9BQU8seUJBQXlCO0lBUHRDO1FBU0Usa0JBQWEsR0FBRyxLQUFLLENBQVEsRUFBRSxDQUFDLENBQUM7UUFFakMsZ0JBQVcsR0FBRyxLQUFLLENBQXlCLFNBQVMsQ0FBQyxDQUFDO0tBQ3hEOzhHQUxZLHlCQUF5QjtrR0FBekIseUJBQXlCLG9YQ1h0Qyx3ekJBeUJBLHlERGxCWSxjQUFjOzsyRkFJYix5QkFBeUI7a0JBUHJDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEt2QnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4va3YtYnV0dG9uL2t2LWJ1dHRvbi5tb2R1bGUnXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FjdGlvbnMtbG90ZS1maWVsZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbS3ZCdXR0b25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb25zLWxvdGUtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hY3Rpb25zLWxvdGUtZmllbGQuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25zTG90ZUZpZWxkQ29tcG9uZW50IHtcclxuXHJcbiAgc2VsZWN0ZWRJdGVtcyA9IGlucHV0PGFueVtdPihbXSk7XHJcblxyXG4gIGFjdGlvbnNMb3RlID0gaW5wdXQ8TWVudUl0ZW1bXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbHVtbiBnYXAtOCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgPGltZ1xyXG4gICAgICBzcmM9XCJodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9pbWcvU2VtX0RhZG9zLnBuZ1wiXHJcbiAgICAgIGNsYXNzPVwiaC01cmVtIHctYXV0b1wiXHJcbiAgICAvPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIHRleHQtc20gZm9udC1tZWRpdW1cIlxyXG4gICAgICA+e3sgdGhpcy5zZWxlY3RlZEl0ZW1zKCk/Lmxlbmd0aCB9fSBpdGVucyBzZWxlY2lvbmFkb3M8L3NwYW5cclxuICAgID5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIj5cclxuICAgIEBpZihhY3Rpb25zTG90ZSgpKSB7IEBmb3IoYWN0aW9uIG9mIGFjdGlvbnNMb3RlKCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgPGt2LWJ1dHRvblxyXG4gICAgICBbaWNvbl09XCJhY3Rpb24/Lmljb24gfHwgJydcIlxyXG4gICAgICBbbGFiZWxdPVwiYWN0aW9uPy5sYWJlbCB8fCAnJ1wiXHJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAob25DbGljayk9XCJhY3Rpb24/LmNvbW1hbmQoJGV2ZW50KVwiXHJcbiAgICAvPlxyXG4gICAgfSB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { TieredMenuModule } from 'primeng/tieredmenu';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "primeng/tieredmenu";
5
+ import * as i2 from "primeng/tooltip";
6
+ import * as i3 from "primeng/api";
7
+ export class ActionsRowMenuComponent {
8
+ constructor() {
9
+ this.actionsRow = input(undefined);
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ActionsRowMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: ActionsRowMenuComponent, isStandalone: true, selector: "actions-row-menu", inputs: { actionsRow: { classPropertyName: "actionsRow", publicName: "actionsRow", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span\r\n class=\"text-lg right-0 pr-2 material-symbols-outlined cursor-pointer text-gray-800 hover:text-gray-600 transition-all transition-duration-300 absolute\"\r\n (click)=\"menu.toggle($event)\"\r\n>\r\n more_vert\r\n</span>\r\n\r\n<p-tieredMenu #menu [popup]=\"true\" [model]=\"actionsRow()\" appendTo=\"body\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n [pTooltip]=\"item.tooltip\"\r\n tooltipPosition=\"left\"\r\n class=\"cursor-pointer h-2rem flex align-items-center\"\r\n >\r\n <span class=\"text-sm pl-2\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n</p-tieredMenu>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TieredMenuModule }, { kind: "component", type: i1.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] }); }
13
+ }
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: ActionsRowMenuComponent, decorators: [{
15
+ type: Component,
16
+ args: [{ selector: 'actions-row-menu', standalone: true, imports: [TieredMenuModule], template: "<span\r\n class=\"text-lg right-0 pr-2 material-symbols-outlined cursor-pointer text-gray-800 hover:text-gray-600 transition-all transition-duration-300 absolute\"\r\n (click)=\"menu.toggle($event)\"\r\n>\r\n more_vert\r\n</span>\r\n\r\n<p-tieredMenu #menu [popup]=\"true\" [model]=\"actionsRow()\" appendTo=\"body\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n [pTooltip]=\"item.tooltip\"\r\n tooltipPosition=\"left\"\r\n class=\"cursor-pointer h-2rem flex align-items-center\"\r\n >\r\n <span class=\"text-sm pl-2\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n</p-tieredMenu>\r\n" }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1yb3ctbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10YWJsZS12aWV3ZXIvY29tcG9uZW50cy9hY3Rpb25zLXJvdy1tZW51L2FjdGlvbnMtcm93LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtdmlld2VyL2NvbXBvbmVudHMvYWN0aW9ucy1yb3ctbWVudS9hY3Rpb25zLXJvdy1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQVN0RCxNQUFNLE9BQU8sdUJBQXVCO0lBUHBDO1FBUUUsZUFBVSxHQUFHLEtBQUssQ0FBeUIsU0FBUyxDQUFDLENBQUM7S0FDdkQ7OEdBRlksdUJBQXVCO2tHQUF2Qix1QkFBdUIsK05DWHBDLDJwQkFvQkEseUREYlksZ0JBQWdCOzsyRkFJZix1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVGllcmVkTWVudU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGllcmVkbWVudSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FjdGlvbnMtcm93LW1lbnUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1RpZXJlZE1lbnVNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb25zLXJvdy1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWN0aW9ucy1yb3ctbWVudS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjdGlvbnNSb3dNZW51Q29tcG9uZW50IHtcclxuICBhY3Rpb25zUm93ID0gaW5wdXQ8TWVudUl0ZW1bXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxufVxyXG4iLCI8c3BhblxyXG4gIGNsYXNzPVwidGV4dC1sZyByaWdodC0wIHByLTIgbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciB0ZXh0LWdyYXktODAwIGhvdmVyOnRleHQtZ3JheS02MDAgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDAgYWJzb2x1dGVcIlxyXG4gIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpXCJcclxuPlxyXG4gIG1vcmVfdmVydFxyXG48L3NwYW4+XHJcblxyXG48cC10aWVyZWRNZW51ICNtZW51IFtwb3B1cF09XCJ0cnVlXCIgW21vZGVsXT1cImFjdGlvbnNSb3coKVwiIGFwcGVuZFRvPVwiYm9keVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIFtwVG9vbHRpcF09XCJpdGVtLnRvb2x0aXBcIlxyXG4gICAgICB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCJcclxuICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBoLTJyZW0gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gcGwtMlwiPlxyXG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9wLXRpZXJlZE1lbnU+XHJcbiJdfQ==
@@ -0,0 +1,293 @@
1
+ import { Component, computed, contentChildren, effect, ElementRef, HostListener, inject, input, output, Renderer2, signal, untracked, ViewChild } from '@angular/core';
2
+ import { ButtonModule } from 'primeng/button';
3
+ import { SkeletonModule } from 'primeng/skeleton';
4
+ import { TableModule } from 'primeng/table';
5
+ import { KvInputsModule } from "../kv-inputs/kv-inputs.module";
6
+ import { KvButtonModule } from "../kv-button/kv-button.module";
7
+ import { OverlayPanelModule } from 'primeng/overlaypanel';
8
+ import { ActionsLoteFieldComponent } from './components/actions-lote-field/actions-lote-field.component';
9
+ import { KvTagsModule } from "../kv-tags/kv-tags.module";
10
+ import { CommonModule, DatePipe } from '@angular/common';
11
+ import { animate, state, style, transition, trigger } from '@angular/animations';
12
+ import { TooltipModule } from 'primeng/tooltip';
13
+ import { TieredMenuModule } from 'primeng/tieredmenu';
14
+ import { ActionsRowMenuComponent } from './components/actions-row-menu/actions-row-menu.component';
15
+ import { CpfCnpjPipe } from '../../api/pipes/cpfcnpj.pipe';
16
+ import { TelefonePipe } from '../../api/pipes/telefone.pipe';
17
+ import { TemplateDirective } from '../../api/directives/template/template.directive';
18
+ import { FormsModule } from '@angular/forms';
19
+ import { InputTextModule } from 'primeng/inputtext';
20
+ import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
21
+ import * as i0 from "@angular/core";
22
+ import * as i1 from "primeng/inputtext";
23
+ import * as i2 from "@angular/common";
24
+ import * as i3 from "primeng/tooltip";
25
+ import * as i4 from "primeng/table";
26
+ import * as i5 from "primeng/api";
27
+ import * as i6 from "../kv-button/kv-button.component";
28
+ import * as i7 from "primeng/overlaypanel";
29
+ import * as i8 from "../kv-tags/kv-tags.component";
30
+ import * as i9 from "@angular/forms";
31
+ export class KvTableViewerComponent {
32
+ constructor() {
33
+ this.cpfCnpjPipe = inject(CpfCnpjPipe);
34
+ this.telefonePipe = inject(TelefonePipe);
35
+ this.datePipe = inject(DatePipe);
36
+ this.breakpointObserver = inject(BreakpointObserver);
37
+ this.elementRef = inject(ElementRef);
38
+ this.renderer = inject(Renderer2);
39
+ this.columns = input([]);
40
+ this.actionsRow = input([]);
41
+ this.actionsHeader = input(undefined);
42
+ this.actionsLote = input(undefined);
43
+ this.data = input([]);
44
+ this.totalRecords = input(0);
45
+ this.loading = input(false);
46
+ this.rows = input(10);
47
+ this.rowsPerPageOptions = input([10, 25, 50]);
48
+ this.paginator = input(true);
49
+ this.lazy = input(true);
50
+ this.scrollable = input(true);
51
+ this.pageLinks = input(2);
52
+ this.currentPageReportTemplate = input('{first} - {last} de {totalRecords}');
53
+ this.selectionPageOnly = input(true);
54
+ this.selectableTable = input(true);
55
+ this.showHeader = input(true);
56
+ this.showHeaderTemplate = input(false);
57
+ this.tableViewerSize = input('col-8');
58
+ this.searchInput = input(true);
59
+ this.filterButton = input(true);
60
+ this.idName = input(undefined);
61
+ this.emptyTableImg = input('https://work-assets.keevo.com.br/img/Nenhum_registro_localizado.png');
62
+ this.isSelectedPrimaryItem = input(false);
63
+ this.overlayElement = null;
64
+ this.selectedItems = signal([]);
65
+ this.selectedItem = signal(null);
66
+ this.first = signal(0);
67
+ this.searchValue = signal('');
68
+ this.lastEmittedSort = signal(null);
69
+ this.isMobile = signal(false);
70
+ this.onPageChange = output();
71
+ this.onClickRowItem = output();
72
+ this.onSelectItems = output();
73
+ this.onSearch = output();
74
+ this.onSort = output();
75
+ this.templates = contentChildren(TemplateDirective);
76
+ this._templates = input({}, { alias: 'templates' });
77
+ this.getCustomTemplate = computed(() => (templatename) => {
78
+ const templates = this._templates();
79
+ return templates[templatename];
80
+ });
81
+ this.isRowSelected = computed(() => {
82
+ return this.selectedItems()?.length > 0 || this.selectedItem();
83
+ });
84
+ this.verifyItemSelecionado = computed(() => (rowData) => {
85
+ let isSelected;
86
+ let idName = this.idName() || 'id';
87
+ if (this.selectableTable())
88
+ isSelected = this.selectedItems().find((item) => item[idName] == rowData[idName]);
89
+ else
90
+ isSelected = this.selectedItem()?.[idName] == rowData[idName];
91
+ return isSelected;
92
+ });
93
+ this.transformData = computed(() => (type, value) => {
94
+ if (type === 'cpfcnpj')
95
+ return this.cpfCnpjPipe.transform(value);
96
+ if (type === 'telefone')
97
+ return this.telefonePipe.transform(value);
98
+ if (type === 'money')
99
+ return this.transformMoney(value);
100
+ if (type === 'date')
101
+ return this.datePipe.transform(value, 'dd/MM/yyyy', 'UTC');
102
+ if (type === 'datetime')
103
+ return this.datePipe.transform(value, 'dd/MM/yyyy hh:mm');
104
+ if (type === 'dateMonthYear')
105
+ return this.datePipe.transform(value, 'MM/yyyy');
106
+ else
107
+ return value;
108
+ });
109
+ this.handleTableSize = computed(() => {
110
+ const selectedItems = this.selectedItems();
111
+ const selectedItem = this.selectedItem();
112
+ if (selectedItems?.length == 0 && !selectedItem)
113
+ return 'col-12';
114
+ else
115
+ return this.tableViewerSize();
116
+ });
117
+ this.isPopupButton = computed(() => (action) => {
118
+ return (action.items && action.items?.length > 0) || false;
119
+ });
120
+ this.hasActionsRow = computed(() => {
121
+ return this.actionsRow()?.length > 0;
122
+ });
123
+ this.showSelectedItem = computed(() => {
124
+ return this.selectedItems()?.length == 1 || this.selectedItem();
125
+ });
126
+ this.hasSelectedItems = computed(() => {
127
+ return this.selectedItems()?.length > 1;
128
+ });
129
+ this.returnColspan = computed(() => {
130
+ return this.columns().length + 1;
131
+ });
132
+ this.isEmptyTable = computed(() => {
133
+ return this.data()?.length == 0;
134
+ });
135
+ this.breakpointObserver
136
+ .observe([Breakpoints.HandsetPortrait, '(max-width: 768px)'])
137
+ .subscribe(state => this.isMobile.set(state.matches));
138
+ effect(() => {
139
+ this.onSelectItems.emit(this.selectedItems());
140
+ this.onSearch.emit(this.searchValue());
141
+ });
142
+ effect(() => {
143
+ const dados = this.data();
144
+ const isSelectedPrimaryItem = this.isSelectedPrimaryItem();
145
+ if (dados && dados.length > 0 && isSelectedPrimaryItem) {
146
+ untracked(() => this.rowSelect(dados[0]));
147
+ }
148
+ });
149
+ }
150
+ toggleOverlayPanel(event) {
151
+ event.stopPropagation();
152
+ this.op.toggle(event);
153
+ setTimeout(() => {
154
+ if (this.op.overlayVisible) {
155
+ this.createOverlay();
156
+ }
157
+ else {
158
+ this.removeOverlay();
159
+ }
160
+ }, 0);
161
+ }
162
+ onClickOutside(event) {
163
+ if (!this.op || !this.op.overlayVisible) {
164
+ return;
165
+ }
166
+ const targetElement = event.target;
167
+ const filterButton = this.elementRef.nativeElement.querySelector('[label="Filtrar"]');
168
+ if (filterButton && filterButton.contains(targetElement)) {
169
+ return;
170
+ }
171
+ if (targetElement.closest('.p-overlaypanel')) {
172
+ return;
173
+ }
174
+ }
175
+ closeFilter() {
176
+ this.op?.hide();
177
+ this.removeOverlay();
178
+ }
179
+ toggleFilter(event) {
180
+ if (event) {
181
+ event.stopPropagation();
182
+ }
183
+ this.op?.toggle(event);
184
+ }
185
+ createOverlay() {
186
+ if (this.overlayElement) {
187
+ return;
188
+ }
189
+ this.overlayElement = this.renderer.createElement('div');
190
+ this.renderer.addClass(this.overlayElement, 'filter-overlay');
191
+ this.renderer.listen(this.overlayElement, 'click', () => {
192
+ this.closeFilter();
193
+ });
194
+ this.renderer.appendChild(document.body, this.overlayElement);
195
+ }
196
+ handlePageChange(event) {
197
+ this.first.set(event.first);
198
+ this.onPageChange.emit(event);
199
+ }
200
+ handleSort(event) {
201
+ const currentSortState = this.lastEmittedSort();
202
+ if (currentSortState && currentSortState.field === event.field && currentSortState.order === event.order) {
203
+ return;
204
+ }
205
+ this.lastEmittedSort.set({ field: event.field, order: event.order });
206
+ let ordenacao = `${event.field} ${event.order === 1 ? 'ASC' : 'DESC'} `;
207
+ let ordernacaoGroup = { column: event.field, direction: event.order === 1 ? 'ASC' : 'DESC' };
208
+ this.onSort.emit({ ordenacao: ordenacao, ordernacaoGroup: ordernacaoGroup });
209
+ }
210
+ rowSelect(rowData) {
211
+ if (this.selectableTable()) {
212
+ if (this.selectedItems().includes(rowData))
213
+ this.selectedItems.update((items) => items.filter(item => item !== rowData));
214
+ else
215
+ this.selectedItems.update((items) => [...items, rowData]);
216
+ if (this.selectedItems()?.length === 1)
217
+ this.onClickRowItem.emit(this.selectedItems()[0]);
218
+ else
219
+ this.onClickRowItem.emit(rowData);
220
+ }
221
+ else {
222
+ this.selectedItem.set(rowData);
223
+ this.onClickRowItem.emit(rowData);
224
+ }
225
+ }
226
+ transformMoney(valor) {
227
+ const formatter = new Intl.NumberFormat('pt-BR', {
228
+ style: 'currency',
229
+ currency: 'BRL',
230
+ });
231
+ return formatter.format(valor);
232
+ }
233
+ removeOverlay() {
234
+ if (this.overlayElement) {
235
+ this.renderer.removeChild(document.body, this.overlayElement);
236
+ this.overlayElement = null;
237
+ }
238
+ }
239
+ ngOnDestroy() {
240
+ this.removeOverlay();
241
+ }
242
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
243
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableViewerComponent, isStandalone: true, selector: "kv-table-viewer", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, actionsRow: { classPropertyName: "actionsRow", publicName: "actionsRow", isSignal: true, isRequired: false, transformFunction: null }, actionsHeader: { classPropertyName: "actionsHeader", publicName: "actionsHeader", isSignal: true, isRequired: false, transformFunction: null }, actionsLote: { classPropertyName: "actionsLote", publicName: "actionsLote", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, pageLinks: { classPropertyName: "pageLinks", publicName: "pageLinks", isSignal: true, isRequired: false, transformFunction: null }, currentPageReportTemplate: { classPropertyName: "currentPageReportTemplate", publicName: "currentPageReportTemplate", isSignal: true, isRequired: false, transformFunction: null }, selectionPageOnly: { classPropertyName: "selectionPageOnly", publicName: "selectionPageOnly", isSignal: true, isRequired: false, transformFunction: null }, selectableTable: { classPropertyName: "selectableTable", publicName: "selectableTable", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, showHeaderTemplate: { classPropertyName: "showHeaderTemplate", publicName: "showHeaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, tableViewerSize: { classPropertyName: "tableViewerSize", publicName: "tableViewerSize", isSignal: true, isRequired: false, transformFunction: null }, searchInput: { classPropertyName: "searchInput", publicName: "searchInput", isSignal: true, isRequired: false, transformFunction: null }, filterButton: { classPropertyName: "filterButton", publicName: "filterButton", isSignal: true, isRequired: false, transformFunction: null }, idName: { classPropertyName: "idName", publicName: "idName", isSignal: true, isRequired: false, transformFunction: null }, emptyTableImg: { classPropertyName: "emptyTableImg", publicName: "emptyTableImg", isSignal: true, isRequired: false, transformFunction: null }, isSelectedPrimaryItem: { classPropertyName: "isSelectedPrimaryItem", publicName: "isSelectedPrimaryItem", isSignal: true, isRequired: false, transformFunction: null }, _templates: { classPropertyName: "_templates", publicName: "templates", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onPageChange: "onPageChange", onClickRowItem: "onClickRowItem", onSelectItems: "onSelectItems", onSearch: "onSearch", onSort: "onSort" }, host: { listeners: { "document:click": "onClickOutside($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "op", first: true, predicate: ["op"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"h-full flex flex-row p-2 kv-table-viewer overflow-hidden {{\r\n isEmptyTable() ? 'empty-table' : ''\r\n }}\"\r\n>\r\n @if(!this.selectedItem() || !isMobile() && !selectableTable()) {\r\n <div\r\n class=\"h-full {{ handleTableSize() }} m-0 p-0 flex flex-column gap-2\"\r\n [style.transition]=\"'all 0.3s ease-in-out'\"\r\n >\r\n @if(showHeaderTemplate()) {\r\n <div>\r\n <ng-content select=\"[tableHeaderTemplate]\"> </ng-content>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between flex-initial\"\r\n >\r\n <div class=\"flex flex-row align-items-center gap-2\">\r\n @if(searchInput()) {\r\n <input\r\n style=\"height: 1.875rem\"\r\n placeholder=\"Pesquisar...\"\r\n type=\"text\"\r\n pInputText\r\n [(ngModel)]=\"searchValue\"\r\n class=\"text-xs\"\r\n />\r\n\r\n } @if(filterButton()) {\r\n <kv-button\r\n label=\"Filtrar\"\r\n icon=\"filter_alt\"\r\n severity=\"tertiary\"\r\n (onClick)=\"toggleOverlayPanel($event)\"\r\n ></kv-button>\r\n }\r\n\r\n <p-overlayPanel #op [dismissable]=\"false\">\r\n <ng-content select=\"[filtro]\"> </ng-content>\r\n </p-overlayPanel>\r\n </div>\r\n <div class=\"flex flex-row gap-2\">\r\n @if(actionsHeader()) { @for(action of actionsHeader(); track $index) {\r\n <kv-button\r\n [icon]=\"action?.icon || ''\"\r\n [label]=\"action?.label || ''\"\r\n [severity]=\"action['severity'] || 'tertiary'\"\r\n (onClick)=\"action?.command($event)\"\r\n [popupIcon]=\"false\"\r\n [items]=\"action.items || []\"\r\n [popup]=\"isPopupButton()(action)\"\r\n ></kv-button>\r\n } } @if(selectedItem()) {\r\n <kv-button\r\n [pTooltip]=\"'Recolher'\"\r\n icon=\"reorder\"\r\n severity=\"tertiary\"\r\n (onClick)=\"selectedItem.set(null)\"\r\n ></kv-button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex-1 h-full overflow-hidden\">\r\n <p-table\r\n [value]=\"data()\"\r\n [lazy]=\"lazy()\"\r\n [selectionPageOnly]=\"selectionPageOnly()\"\r\n [columns]=\"columns()\"\r\n [paginator]=\"paginator()\"\r\n [rows]=\"rows()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [loading]=\"loading()\"\r\n [pageLinks]=\"pageLinks()\"\r\n [first]=\"first()\"\r\n [scrollable]=\"scrollable()\"\r\n scrollHeight=\"flex\"\r\n [showCurrentPageReport]=\"true\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate()\"\r\n (onPage)=\"handlePageChange($event)\"\r\n (onSort)=\"handleSort($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n [(selection)]=\"selectedItems\"\r\n styleClass=\"p-datatable-sm text-xs overflow-y-auto h-full flex flex-column h-full\"\r\n >\r\n @if(showHeader()) {\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if(selectableTable()) {\r\n <th style=\"width: 4rem\"><p-tableHeaderCheckbox /></th>\r\n } @for (col of columns; track col.field) {\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"!col?.sortable\"\r\n [style]=\"{ width: col.width || 'auto' }\"\r\n >\r\n <div class=\"flex flex-row align-items-center gap-1\">\r\n <span>{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\">\r\n <tr\r\n class=\"cursor-pointer {{\r\n verifyItemSelecionado()(rowData) && 'bg-gray-100'\r\n }} hover:bg-gray-200\"\r\n >\r\n @if(selectableTable()) {\r\n <td><p-tableCheckbox [value]=\"rowData\" /></td>\r\n } @for (col of columns; track col.field) {\r\n <td (click)=\"rowSelect(rowData)\" style=\"word-break: break-all;\">\r\n @if(col?.template) {\r\n <div class=\"flex flex-row gap-2 align-items-center\">\r\n @if (getCustomTemplate()(col.template.name)) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate()(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n }\r\n </div>\r\n } @else if(col?.icon) {\r\n <span class=\"material-symbols-outlined text-lg\">\r\n {{ col.icon(rowData) }}\r\n </span>\r\n } @else if(col?.tag) {\r\n <kv-tags [tags]=\"[col.tag(rowData)]\" />\r\n } @else {\r\n {{ transformData()(col.pipe, rowData[col.field]) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"returnColspan()\">\r\n <div\r\n class=\"w-full h-full flex align-items-center justify-content-center\"\r\n >\r\n <img [src]=\"emptyTableImg()\" class=\"h-10rem w-auto\" />\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n\r\n }\r\n\r\n <div\r\n class=\"shadow-2 p-0 m-0 col selected-item-field ml-2 flex flex-column\"\r\n [@slideInOut]=\"isRowSelected() ? 'i.n' : 'out'\"\r\n [style.overflow]=\"'hidden'\"\r\n >\r\n @if(hasSelectedItems()) {\r\n <actions-lote-field\r\n class=\"h-full\"\r\n [selectedItems]=\"selectedItems()\"\r\n [actionsLote]=\"actionsLote()\"\r\n />\r\n } @else if(showSelectedItem()) {\r\n <div class=\"bg-gray-100 w-full h-auto p-2 relative\">\r\n @if(hasActionsRow()) {\r\n <actions-row-menu [actionsRow]=\"actionsRow()\" />\r\n }\r\n\r\n @if(isMobile()) {\r\n <div class=\"h-2rem w-2rem\">\r\n <kv-button\r\n icon=\"arrow_back\"\r\n severity=\"tertiary\"\r\n [pTooltip]=\"'Voltar'\"\r\n (onClick)=\"selectedItem.set(null)\"\r\n />\r\n </div>\r\n }\r\n\r\n <ng-content select=\"[selectedItemHeader]\"></ng-content>\r\n </div>\r\n <div class=\"p-2 overflow-y-auto h-full\">\r\n <ng-content select=\"[selectedItem]\"></ng-content>\r\n </div>\r\n }\r\n\r\n <!-- @else { Nenhum item selecionado } -->\r\n </div>\r\n</div>\r\n", styles: ["::ng-deep .filter-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:transparent;z-index:1299}::ng-deep .p-overlaypanel{z-index:1400!important}::ng-deep .kv-table-viewer .p-datatable-wrapper{overflow-x:hidden}::ng-deep .kv-table-viewer .p-paginator .p-paginator-pages .p-paginator-page{font-size:.75rem;min-width:2rem;height:2rem}::ng-deep .kv-table-viewer .p-paginator .p-paginator-current{font-size:.75rem}::ng-deep .kv-table-viewer .p-inputwrapper .p-dropdown{margin:0;height:auto}::ng-deep .p-paginator-rpp-options .p-dropdown-panel .p-dropdown-items{padding:.25rem}::ng-deep .p-paginator-rpp-options .p-dropdown-item{border-radius:.25rem;height:1.5rem;display:flex;align-items:center;justify-content:center}::ng-deep .p-paginator-rpp-options .p-dropdown-item .p-dropdown-label{padding:.5rem}::ng-deep .p-paginator-rpp-options .p-dropdown-item .p-dropdown-trigger{width:1.5rem}::ng-deep .p-paginator-bottom .p-link{min-width:2rem;height:2rem}::ng-deep .p-paginator{padding:0rem}::ng-deep .p-dropdown-label{font-size:.75rem}::ng-deep .p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .empty-table .p-datatable-table{height:100%}::ng-deep .p-menu{padding:.25rem}::ng-deep .p-menu-list .p-menuitem .p-menuitem-content .p-menuitem-link{font-size:.75rem;padding:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i1.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i4.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i4.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i4.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: KvInputsModule }, { kind: "ngmodule", type: KvButtonModule }, { kind: "component", type: i6.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup", "popupIcon"], outputs: ["iconChange", "onClick"] }, { kind: "ngmodule", type: OverlayPanelModule }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: ActionsLoteFieldComponent, selector: "actions-lote-field", inputs: ["selectedItems", "actionsLote"] }, { kind: "ngmodule", type: KvTagsModule }, { kind: "component", type: i8.KvTagsComponent, selector: "kv-tags", inputs: ["tags", "hover", "clickable"], outputs: ["onClickTag"] }, { kind: "ngmodule", type: TieredMenuModule }, { kind: "component", type: ActionsRowMenuComponent, selector: "actions-row-menu", inputs: ["actionsRow"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], animations: [
244
+ trigger('slideInOut', [
245
+ state('in', style({
246
+ width: '*',
247
+ opacity: 1,
248
+ transform: 'translateX(0)'
249
+ })),
250
+ state('out', style({
251
+ width: '0px',
252
+ opacity: 0,
253
+ transform: 'translateX(100%)'
254
+ })),
255
+ transition('out => in', [
256
+ animate('300ms ease-in-out')
257
+ ]),
258
+ transition('in => out', [
259
+ animate('200ms ease-in-out')
260
+ ])
261
+ ])
262
+ ] }); }
263
+ }
264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableViewerComponent, decorators: [{
265
+ type: Component,
266
+ args: [{ selector: 'kv-table-viewer', standalone: true, imports: [InputTextModule, CommonModule, TooltipModule, TableModule, SkeletonModule, ButtonModule, KvInputsModule, KvButtonModule, OverlayPanelModule, ActionsLoteFieldComponent, KvTagsModule, TieredMenuModule, ActionsRowMenuComponent, FormsModule], animations: [
267
+ trigger('slideInOut', [
268
+ state('in', style({
269
+ width: '*',
270
+ opacity: 1,
271
+ transform: 'translateX(0)'
272
+ })),
273
+ state('out', style({
274
+ width: '0px',
275
+ opacity: 0,
276
+ transform: 'translateX(100%)'
277
+ })),
278
+ transition('out => in', [
279
+ animate('300ms ease-in-out')
280
+ ]),
281
+ transition('in => out', [
282
+ animate('200ms ease-in-out')
283
+ ])
284
+ ])
285
+ ], template: "<div\r\n class=\"h-full flex flex-row p-2 kv-table-viewer overflow-hidden {{\r\n isEmptyTable() ? 'empty-table' : ''\r\n }}\"\r\n>\r\n @if(!this.selectedItem() || !isMobile() && !selectableTable()) {\r\n <div\r\n class=\"h-full {{ handleTableSize() }} m-0 p-0 flex flex-column gap-2\"\r\n [style.transition]=\"'all 0.3s ease-in-out'\"\r\n >\r\n @if(showHeaderTemplate()) {\r\n <div>\r\n <ng-content select=\"[tableHeaderTemplate]\"> </ng-content>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between flex-initial\"\r\n >\r\n <div class=\"flex flex-row align-items-center gap-2\">\r\n @if(searchInput()) {\r\n <input\r\n style=\"height: 1.875rem\"\r\n placeholder=\"Pesquisar...\"\r\n type=\"text\"\r\n pInputText\r\n [(ngModel)]=\"searchValue\"\r\n class=\"text-xs\"\r\n />\r\n\r\n } @if(filterButton()) {\r\n <kv-button\r\n label=\"Filtrar\"\r\n icon=\"filter_alt\"\r\n severity=\"tertiary\"\r\n (onClick)=\"toggleOverlayPanel($event)\"\r\n ></kv-button>\r\n }\r\n\r\n <p-overlayPanel #op [dismissable]=\"false\">\r\n <ng-content select=\"[filtro]\"> </ng-content>\r\n </p-overlayPanel>\r\n </div>\r\n <div class=\"flex flex-row gap-2\">\r\n @if(actionsHeader()) { @for(action of actionsHeader(); track $index) {\r\n <kv-button\r\n [icon]=\"action?.icon || ''\"\r\n [label]=\"action?.label || ''\"\r\n [severity]=\"action['severity'] || 'tertiary'\"\r\n (onClick)=\"action?.command($event)\"\r\n [popupIcon]=\"false\"\r\n [items]=\"action.items || []\"\r\n [popup]=\"isPopupButton()(action)\"\r\n ></kv-button>\r\n } } @if(selectedItem()) {\r\n <kv-button\r\n [pTooltip]=\"'Recolher'\"\r\n icon=\"reorder\"\r\n severity=\"tertiary\"\r\n (onClick)=\"selectedItem.set(null)\"\r\n ></kv-button>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex-1 h-full overflow-hidden\">\r\n <p-table\r\n [value]=\"data()\"\r\n [lazy]=\"lazy()\"\r\n [selectionPageOnly]=\"selectionPageOnly()\"\r\n [columns]=\"columns()\"\r\n [paginator]=\"paginator()\"\r\n [rows]=\"rows()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [loading]=\"loading()\"\r\n [pageLinks]=\"pageLinks()\"\r\n [first]=\"first()\"\r\n [scrollable]=\"scrollable()\"\r\n scrollHeight=\"flex\"\r\n [showCurrentPageReport]=\"true\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate()\"\r\n (onPage)=\"handlePageChange($event)\"\r\n (onSort)=\"handleSort($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n [(selection)]=\"selectedItems\"\r\n styleClass=\"p-datatable-sm text-xs overflow-y-auto h-full flex flex-column h-full\"\r\n >\r\n @if(showHeader()) {\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if(selectableTable()) {\r\n <th style=\"width: 4rem\"><p-tableHeaderCheckbox /></th>\r\n } @for (col of columns; track col.field) {\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"!col?.sortable\"\r\n [style]=\"{ width: col.width || 'auto' }\"\r\n >\r\n <div class=\"flex flex-row align-items-center gap-1\">\r\n <span>{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\r\n }\r\n </div>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-columns=\"columns\">\r\n <tr\r\n class=\"cursor-pointer {{\r\n verifyItemSelecionado()(rowData) && 'bg-gray-100'\r\n }} hover:bg-gray-200\"\r\n >\r\n @if(selectableTable()) {\r\n <td><p-tableCheckbox [value]=\"rowData\" /></td>\r\n } @for (col of columns; track col.field) {\r\n <td (click)=\"rowSelect(rowData)\" style=\"word-break: break-all;\">\r\n @if(col?.template) {\r\n <div class=\"flex flex-row gap-2 align-items-center\">\r\n @if (getCustomTemplate()(col.template.name)) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate()(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n }\r\n </div>\r\n } @else if(col?.icon) {\r\n <span class=\"material-symbols-outlined text-lg\">\r\n {{ col.icon(rowData) }}\r\n </span>\r\n } @else if(col?.tag) {\r\n <kv-tags [tags]=\"[col.tag(rowData)]\" />\r\n } @else {\r\n {{ transformData()(col.pipe, rowData[col.field]) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"returnColspan()\">\r\n <div\r\n class=\"w-full h-full flex align-items-center justify-content-center\"\r\n >\r\n <img [src]=\"emptyTableImg()\" class=\"h-10rem w-auto\" />\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n\r\n }\r\n\r\n <div\r\n class=\"shadow-2 p-0 m-0 col selected-item-field ml-2 flex flex-column\"\r\n [@slideInOut]=\"isRowSelected() ? 'i.n' : 'out'\"\r\n [style.overflow]=\"'hidden'\"\r\n >\r\n @if(hasSelectedItems()) {\r\n <actions-lote-field\r\n class=\"h-full\"\r\n [selectedItems]=\"selectedItems()\"\r\n [actionsLote]=\"actionsLote()\"\r\n />\r\n } @else if(showSelectedItem()) {\r\n <div class=\"bg-gray-100 w-full h-auto p-2 relative\">\r\n @if(hasActionsRow()) {\r\n <actions-row-menu [actionsRow]=\"actionsRow()\" />\r\n }\r\n\r\n @if(isMobile()) {\r\n <div class=\"h-2rem w-2rem\">\r\n <kv-button\r\n icon=\"arrow_back\"\r\n severity=\"tertiary\"\r\n [pTooltip]=\"'Voltar'\"\r\n (onClick)=\"selectedItem.set(null)\"\r\n />\r\n </div>\r\n }\r\n\r\n <ng-content select=\"[selectedItemHeader]\"></ng-content>\r\n </div>\r\n <div class=\"p-2 overflow-y-auto h-full\">\r\n <ng-content select=\"[selectedItem]\"></ng-content>\r\n </div>\r\n }\r\n\r\n <!-- @else { Nenhum item selecionado } -->\r\n </div>\r\n</div>\r\n", styles: ["::ng-deep .filter-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:transparent;z-index:1299}::ng-deep .p-overlaypanel{z-index:1400!important}::ng-deep .kv-table-viewer .p-datatable-wrapper{overflow-x:hidden}::ng-deep .kv-table-viewer .p-paginator .p-paginator-pages .p-paginator-page{font-size:.75rem;min-width:2rem;height:2rem}::ng-deep .kv-table-viewer .p-paginator .p-paginator-current{font-size:.75rem}::ng-deep .kv-table-viewer .p-inputwrapper .p-dropdown{margin:0;height:auto}::ng-deep .p-paginator-rpp-options .p-dropdown-panel .p-dropdown-items{padding:.25rem}::ng-deep .p-paginator-rpp-options .p-dropdown-item{border-radius:.25rem;height:1.5rem;display:flex;align-items:center;justify-content:center}::ng-deep .p-paginator-rpp-options .p-dropdown-item .p-dropdown-label{padding:.5rem}::ng-deep .p-paginator-rpp-options .p-dropdown-item .p-dropdown-trigger{width:1.5rem}::ng-deep .p-paginator-bottom .p-link{min-width:2rem;height:2rem}::ng-deep .p-paginator{padding:0rem}::ng-deep .p-dropdown-label{font-size:.75rem}::ng-deep .p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .empty-table .p-datatable-table{height:100%}::ng-deep .p-menu{padding:.25rem}::ng-deep .p-menu-list .p-menuitem .p-menuitem-content .p-menuitem-link{font-size:.75rem;padding:.5rem}\n"] }]
286
+ }], ctorParameters: () => [], propDecorators: { op: [{
287
+ type: ViewChild,
288
+ args: ['op']
289
+ }], onClickOutside: [{
290
+ type: HostListener,
291
+ args: ['document:click', ['$event']]
292
+ }] } });
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRhYmxlLXZpZXdlci9rdi10YWJsZS12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtdmlld2VyL2t2LXRhYmxlLXZpZXdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9MLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFF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QUMsbUJBQW1CLENBQUM7NkJBQzdCLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFdBQVcsRUFBRTtnQ0FDdEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDOzZCQUM3QixDQUFDO3lCQUNILENBQUM7cUJBQ0g7d0RBSWdCLEVBQUU7c0JBQWxCLFNBQVM7dUJBQUMsSUFBSTtnQkE2SmYsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgY29udGVudENoaWxkcmVuLCBlZmZlY3QsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBpbnB1dCwgT25EZXN0cm95LCBvdXRwdXQsIFJlbmRlcmVyMiwgc2lnbmFsLCBUZW1wbGF0ZVJlZiwgdW50cmFja2VkLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc2tlbGV0b24nO1xyXG5pbXBvcnQgeyBUYWJsZU1vZHVsZSwgVGFibGVQYWdlRXZlbnQgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgS3ZJbnB1dHNNb2R1bGUgfSBmcm9tIFwiLi4va3YtaW5wdXRzL2t2LWlucHV0cy5tb2R1bGVcIjtcclxuaW1wb3J0IHsgS3ZCdXR0b25Nb2R1bGUgfSBmcm9tIFwiLi4va3YtYnV0dG9uL2t2LWJ1dHRvbi5tb2R1bGVcIjtcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsLCBPdmVybGF5UGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcbmltcG9ydCB7IEFjdGlvbnNMb3RlRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWN0aW9ucy1sb3RlLWZpZWxkL2FjdGlvbnMtbG90ZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBLdlRhZ3NNb2R1bGUgfSBmcm9tIFwiLi4va3YtdGFncy9rdi10YWdzLm1vZHVsZVwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVGllcmVkTWVudU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGllcmVkbWVudSc7XHJcbmltcG9ydCB7IEFjdGlvbnNSb3dNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FjdGlvbnMtcm93LW1lbnUvYWN0aW9ucy1yb3ctbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDcGZDbnBqUGlwZSB9IGZyb20gJy4uLy4uL2FwaS9waXBlcy9jcGZjbnBqLnBpcGUnO1xyXG5pbXBvcnQgeyBUZWxlZm9uZVBpcGUgfSBmcm9tICcuLi8uLi9hcGkvcGlwZXMvdGVsZWZvbmUucGlwZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYXBpL2RpcmVjdGl2ZXMvdGVtcGxhdGUvdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5cclxuaW50ZXJmYWNlIENvbHVtblRhYmxlVmlld2VyIHtcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIGhlYWRlcjogc3RyaW5nO1xyXG4gIHdpZHRoPzogc3RyaW5nO1xyXG4gIGljb24/OiAocm93RGF0YTogYW55KSA9PiBzdHJpbmc7XHJcbiAgdGFnPzogKHJvd0RhdGE6IGFueSkgPT4geyBsYWJlbDogc3RyaW5nLCBzZXZlcml0eTogc3RyaW5nLCBpY29uOiBzdHJpbmcgfTtcclxuICBwaXBlPzogJ2NwZmNucGonIHwgJ3RlbGVmb25lJyB8ICdtb25leScgfCAnZGF0ZScgfCAnZGF0ZXRpbWUnIHwgJ2RhdGVNb250aFllYXInIHwgdW5kZWZpbmVkO1xyXG4gIHRlbXBsYXRlPzogeyBuYW1lOiBzdHJpbmcgfTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10YWJsZS12aWV3ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0lucHV0VGV4dE1vZHVsZSwgQ29tbW9uTW9kdWxlLCBUb29sdGlwTW9kdWxlLCBUYWJsZU1vZHVsZSwgU2tlbGV0b25Nb2R1bGUsIEJ1dHRvbk1vZHVsZSwgS3ZJbnB1dHNNb2R1bGUsIEt2QnV0dG9uTW9kdWxlLCBPdmVybGF5UGFuZWxNb2R1bGUsIEFjdGlvbnNMb3RlRmllbGRDb21wb25lbnQsIEt2VGFnc01vZHVsZSwgVGllcmVkTWVudU1vZHVsZSwgQWN0aW9uc1Jvd01lbnVDb21wb25lbnQsIEZvcm1zTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtdGFibGUtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4va3YtdGFibGUtdmlld2VyLmNvbXBvbmVudC5zY3NzJyxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdzbGlkZUluT3V0JywgW1xyXG4gICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7XHJcbiAgICAgICAgd2lkdGg6ICcqJyxcclxuICAgICAgICBvcGFjaXR5OiAxLFxyXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoJ291dCcsIHN0eWxlKHtcclxuICAgICAgICB3aWR0aDogJzBweCcsXHJcbiAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMCUpJ1xyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ291dCA9PiBpbicsIFtcclxuICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluLW91dCcpXHJcbiAgICAgIF0pLFxyXG4gICAgICB0cmFuc2l0aW9uKCdpbiA9PiBvdXQnLCBbXHJcbiAgICAgICAgYW5pbWF0ZSgnMjAwbXMgZWFzZS1pbi1vdXQnKVxyXG4gICAgICBdKVxyXG4gICAgXSlcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdlRhYmxlVmlld2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnb3AnKSBvcCE6IE92ZXJsYXlQYW5lbDtcclxuXHJcbiAgY3BmQ25walBpcGUgPSBpbmplY3QoQ3BmQ25walBpcGUpO1xyXG4gIHRlbGVmb25lUGlwZSA9IGluamVjdChUZWxlZm9uZVBpcGUpO1xyXG4gIGRhdGVQaXBlID0gaW5qZWN0KERhdGVQaXBlKTtcclxuICBicmVha3BvaW50T2JzZXJ2ZXIgPSBpbmplY3QoQnJlYWtwb2ludE9ic2VydmVyKTtcclxuICBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcblxyXG4gIGNvbHVtbnMgPSBpbnB1dDxDb2x1bW5UYWJsZVZpZXdlcltdPihbXSk7XHJcblxyXG4gIGFjdGlvbnNSb3cgPSBpbnB1dDxNZW51SXRlbVtdIHwgW10+KFtdKTtcclxuICBhY3Rpb25zSGVhZGVyID0gaW5wdXQ8TWVudUl0ZW1bXSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBhY3Rpb25zTG90ZSA9IGlucHV0PE1lbnVJdGVtW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblxyXG4gIGRhdGEgPSBpbnB1dDxhbnlbXT4oW10pO1xyXG4gIHRvdGFsUmVjb3JkcyA9IGlucHV0PG51bWJlcj4oMCk7XHJcbiAgbG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByb3dzID0gaW5wdXQ8bnVtYmVyPigxMCk7XHJcbiAgcm93c1BlclBhZ2VPcHRpb25zID0gaW5wdXQ8bnVtYmVyW10+KFsxMCwgMjUsIDUwXSk7XHJcbiAgcGFnaW5hdG9yID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgbGF6eSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIHNjcm9sbGFibGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBwYWdlTGlua3MgPSBpbnB1dDxudW1iZXI+KDIpO1xyXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGUgPSBpbnB1dDxzdHJpbmc+KCd7Zmlyc3R9IC0ge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9Jyk7XHJcbiAgc2VsZWN0aW9uUGFnZU9ubHkgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHJcblxyXG4gIHNlbGVjdGFibGVUYWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIHNob3dIZWFkZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBzaG93SGVhZGVyVGVtcGxhdGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgdGFibGVWaWV3ZXJTaXplID0gaW5wdXQ8c3RyaW5nPignY29sLTgnKTtcclxuICBzZWFyY2hJbnB1dCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIGZpbHRlckJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG4gIGlkTmFtZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBlbXB0eVRhYmxlSW1nID0gaW5wdXQ8c3RyaW5nPignaHR0cHM6Ly93b3JrLWFzc2V0cy5rZWV2by5jb20uYnIvaW1nL05lbmh1bV9yZWdpc3Ryb19sb2NhbGl6YWRvLnBuZycpO1xyXG4gIGlzU2VsZWN0ZWRQcmltYXJ5SXRlbSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBvdmVybGF5RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgc2VsZWN0ZWRJdGVtcyA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG4gIHNlbGVjdGVkSXRlbSA9IHNpZ25hbDxhbnk+KG51bGwpO1xyXG4gIGZpcnN0ID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcbiAgc2VhcmNoVmFsdWUgPSBzaWduYWwoJycpO1xyXG4gIGxhc3RFbWl0dGVkU29ydCA9IHNpZ25hbDx7IGZpZWxkOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIgfSB8IG51bGw+KG51bGwpO1xyXG4gIGlzTW9iaWxlID0gc2lnbmFsKGZhbHNlKTtcclxuICBcclxuXHJcbiAgb25QYWdlQ2hhbmdlID0gb3V0cHV0PFRhYmxlUGFnZUV2ZW50PigpO1xyXG4gIG9uQ2xpY2tSb3dJdGVtID0gb3V0cHV0PGFueT4oKTtcclxuICBvblNlbGVjdEl0ZW1zID0gb3V0cHV0PGFueVtdPigpO1xyXG4gIG9uU2VhcmNoID0gb3V0cHV0PHN0cmluZz4oKTtcclxuICBvblNvcnQgPSBvdXRwdXQ8YW55PigpO1xyXG5cclxuICB0ZW1wbGF0ZXMgPSBjb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIF90ZW1wbGF0ZXMgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+Pj4oe30sIHsgYWxpYXM6ICd0ZW1wbGF0ZXMnIH0pO1xyXG4gIGdldEN1c3RvbVRlbXBsYXRlID0gY29tcHV0ZWQoKCkgPT4gKHRlbXBsYXRlbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPT4ge1xyXG4gICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5fdGVtcGxhdGVzKCk7XHJcbiAgICByZXR1cm4gdGVtcGxhdGVzW3RlbXBsYXRlbmFtZV07XHJcbiAgfSk7XHJcblxyXG4gIGlzUm93U2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zKCk/Lmxlbmd0aCA+IDAgfHwgdGhpcy5zZWxlY3RlZEl0ZW0oKTtcclxuICB9KTtcclxuXHJcbiAgdmVyaWZ5SXRlbVNlbGVjaW9uYWRvID0gY29tcHV0ZWQoKCkgPT4gKHJvd0RhdGE6IGFueSkgPT4ge1xyXG4gICAgbGV0IGlzU2VsZWN0ZWQ7XHJcblxyXG4gICAgbGV0IGlkTmFtZSA9IHRoaXMuaWROYW1lKCkgfHwgJ2lkJztcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RhYmxlVGFibGUoKSlcclxuICAgICAgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbVtpZE5hbWVdID09IHJvd0RhdGFbaWROYW1lXSk7XHJcbiAgICBlbHNlIGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSXRlbSgpPy5baWROYW1lXSA9PSByb3dEYXRhW2lkTmFtZV07XHJcblxyXG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQ7XHJcbiAgfSlcclxuXHJcbiAgdHJhbnNmb3JtRGF0YSA9IGNvbXB1dGVkKCgpID0+ICh0eXBlOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcclxuICAgIGlmICh0eXBlID09PSAnY3BmY25waicpIHJldHVybiB0aGlzLmNwZkNucGpQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICBpZiAodHlwZSA9PT0gJ3RlbGVmb25lJykgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICBpZiAodHlwZSA9PT0gJ21vbmV5JykgcmV0dXJuIHRoaXMudHJhbnNmb3JtTW9uZXkodmFsdWUpO1xyXG4gICAgaWYgKHR5cGUgPT09ICdkYXRlJykgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScsICdVVEMnKTtcclxuICAgIGlmICh0eXBlID09PSAnZGF0ZXRpbWUnKSByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5IGhoOm1tJyk7XHJcbiAgICBpZiAodHlwZSA9PT0gJ2RhdGVNb250aFllYXInKSByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdNTS95eXl5Jyk7XHJcblxyXG4gICAgZWxzZSByZXR1cm4gdmFsdWU7XHJcbiAgfSlcclxuXHJcbiAgaGFuZGxlVGFibGVTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZEl0ZW0oKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoID09IDAgJiYgIXNlbGVjdGVkSXRlbSlcclxuICAgICAgcmV0dXJuICdjb2wtMTInO1xyXG4gICAgZWxzZSByZXR1cm4gdGhpcy50YWJsZVZpZXdlclNpemUoKTtcclxuICB9KVxyXG5cclxuICBpc1BvcHVwQnV0dG9uID0gY29tcHV0ZWQoKCkgPT4gKGFjdGlvbjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gKGFjdGlvbi5pdGVtcyAmJiBhY3Rpb24uaXRlbXM/Lmxlbmd0aCA+IDApIHx8IGZhbHNlO1xyXG4gIH0pXHJcblxyXG4gIGhhc0FjdGlvbnNSb3cgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zUm93KCk/Lmxlbmd0aCA+IDA7XHJcbiAgfSlcclxuXHJcbiAgc2hvd1NlbGVjdGVkSXRlbSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMoKT8ubGVuZ3RoID09IDEgfHwgdGhpcy5zZWxlY3RlZEl0ZW0oKTtcclxuICB9KVxyXG5cclxuICBoYXNTZWxlY3RlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcygpPy5sZW5ndGggPiAxO1xyXG4gIH0pXHJcblxyXG5cclxuICByZXR1cm5Db2xzcGFuID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucygpLmxlbmd0aCArIDE7XHJcbiAgfSk7XHJcblxyXG4gIGlzRW1wdHlUYWJsZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEoKT8ubGVuZ3RoID09IDBcclxuICB9KTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcclxuICAgICAgLm9ic2VydmUoW0JyZWFrcG9pbnRzLkhhbmRzZXRQb3J0cmFpdCwgJyhtYXgtd2lkdGg6IDc2OHB4KSddKVxyXG4gICAgICAuc3Vic2NyaWJlKHN0YXRlID0+IHRoaXMuaXNNb2JpbGUuc2V0KHN0YXRlLm1hdGNoZXMpKTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLm9uU2VsZWN0SXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbXMoKSk7XHJcbiAgICAgIHRoaXMub25TZWFyY2guZW1pdCh0aGlzLnNlYXJjaFZhbHVlKCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBkYWRvcyA9IHRoaXMuZGF0YSgpO1xyXG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRQcmltYXJ5SXRlbSA9IHRoaXMuaXNTZWxlY3RlZFByaW1hcnlJdGVtKCk7XHJcblxyXG4gICAgICAgIGlmKGRhZG9zICYmIGRhZG9zLmxlbmd0aCA+IDAgJiYgaXNTZWxlY3RlZFByaW1hcnlJdGVtKSB7XHJcbiAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5yb3dTZWxlY3QoZGFkb3NbMF0pKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU92ZXJsYXlQYW5lbChldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5vcC50b2dnbGUoZXZlbnQpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZih0aGlzLm9wLm92ZXJsYXlWaXNpYmxlKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVPdmVybGF5KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVPdmVybGF5KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMub3AgfHwgIXRoaXMub3Aub3ZlcmxheVZpc2libGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBcclxuICAgIGNvbnN0IGZpbHRlckJ1dHRvbiA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tsYWJlbD1cIkZpbHRyYXJcIl0nKTtcclxuICAgIGlmIChmaWx0ZXJCdXR0b24gJiYgZmlsdGVyQnV0dG9uLmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFyZ2V0RWxlbWVudC5jbG9zZXN0KCcucC1vdmVybGF5cGFuZWwnKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLm9wPy5oaWRlKCk7XHJcbiAgICB0aGlzLnJlbW92ZU92ZXJsYXkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVGaWx0ZXIoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZihldmVudCkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICAgIHRoaXMub3A/LnRvZ2dsZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoKSB7XHJcbiAgICBpZih0aGlzLm92ZXJsYXlFbGVtZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm92ZXJsYXlFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5vdmVybGF5RWxlbWVudCwgJ2ZpbHRlci1vdmVybGF5Jyk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5vdmVybGF5RWxlbWVudCwgJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsb3NlRmlsdGVyKCk7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuYm9keSwgdGhpcy5vdmVybGF5RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYWdlQ2hhbmdlKGV2ZW50OiBUYWJsZVBhZ2VFdmVudCkge1xyXG4gICAgdGhpcy5maXJzdC5zZXQoZXZlbnQuZmlyc3QpO1xyXG4gICAgdGhpcy5vblBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVTb3J0KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTb3J0U3RhdGUgPSB0aGlzLmxhc3RFbWl0dGVkU29ydCgpO1xyXG5cclxuICAgIGlmIChjdXJyZW50U29ydFN0YXRlICYmIGN1cnJlbnRTb3J0U3RhdGUuZmllbGQgPT09IGV2ZW50LmZpZWxkICYmIGN1cnJlbnRTb3J0U3RhdGUub3JkZXIgPT09IGV2ZW50Lm9yZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhc3RFbWl0dGVkU29ydC5zZXQoeyBmaWVsZDogZXZlbnQuZmllbGQsIG9yZGVyOiBldmVudC5vcmRlciB9KTtcclxuXHJcbiAgICBsZXQgb3JkZW5hY2FvID0gYCR7ZXZlbnQuZmllbGR9ICR7ZXZlbnQub3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ30gYDtcclxuICAgIGxldCBvcmRlcm5hY2FvR3JvdXAgPSB7IGNvbHVtbjogZXZlbnQuZmllbGQsIGRpcmVjdGlvbjogZXZlbnQub3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJyB9O1xyXG4gICAgdGhpcy5vblNvcnQuZW1pdCh7IG9yZGVuYWNhbzogb3JkZW5hY2FvLCBvcmRlcm5hY2FvR3JvdXA6IG9yZGVybmFjYW9Hcm91cCB9KTtcclxuICB9XHJcblxyXG4gIHJvd1NlbGVjdChyb3dEYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGFibGVUYWJsZSgpKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMoKS5pbmNsdWRlcyhyb3dEYXRhKSlcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMudXBkYXRlKChpdGVtczogYW55W10pID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IHJvd0RhdGEpKTtcclxuICAgICAgZWxzZSB0aGlzLnNlbGVjdGVkSXRlbXMudXBkYXRlKChpdGVtczogYW55W10pID0+IFsuLi5pdGVtcywgcm93RGF0YV0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcygpPy5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgdGhpcy5vbkNsaWNrUm93SXRlbS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcygpWzBdKTtcclxuICAgICAgZWxzZSB0aGlzLm9uQ2xpY2tSb3dJdGVtLmVtaXQocm93RGF0YSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbS5zZXQocm93RGF0YSk7XHJcbiAgICAgIHRoaXMub25DbGlja1Jvd0l0ZW0uZW1pdChyb3dEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Nb25leSh2YWxvcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgncHQtQlInLCB7XHJcbiAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxyXG4gICAgICBjdXJyZW5jeTogJ0JSTCcsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWxvcik7XHJcbiAgfVxyXG5cclxuICByZW1vdmVPdmVybGF5KCkge1xyXG4gICAgaWYodGhpcy5vdmVybGF5RWxlbWVudCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHksIHRoaXMub3ZlcmxheUVsZW1lbnQpO1xyXG4gICAgICB0aGlzLm92ZXJsYXlFbGVtZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucmVtb3ZlT3ZlcmxheSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJoLWZ1bGwgZmxleCBmbGV4LXJvdyBwLTIga3YtdGFibGUtdmlld2VyIG92ZXJmbG93LWhpZGRlbiB7e1xyXG4gICAgaXNFbXB0eVRhYmxlKCkgPyAnZW1wdHktdGFibGUnIDogJydcclxuICB9fVwiXHJcbj5cclxuICBAaWYoIXRoaXMuc2VsZWN0ZWRJdGVtKCkgfHwgIWlzTW9iaWxlKCkgJiYgIXNlbGVjdGFibGVUYWJsZSgpKSB7XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJoLWZ1bGwge3sgaGFuZGxlVGFibGVTaXplKCkgfX0gbS0wIHAtMCBmbGV4IGZsZXgtY29sdW1uIGdhcC0yXCJcclxuICAgIFtzdHlsZS50cmFuc2l0aW9uXT1cIidhbGwgMC4zcyBlYXNlLWluLW91dCdcIlxyXG4gID5cclxuICAgIEBpZihzaG93SGVhZGVyVGVtcGxhdGUoKSkge1xyXG4gICAgPGRpdj5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3RhYmxlSGVhZGVyVGVtcGxhdGVdXCI+IDwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LWluaXRpYWxcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICBAaWYoc2VhcmNoSW5wdXQoKSkge1xyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEuODc1cmVtXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVzcXVpc2FyLi4uXCJcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzXCJcclxuICAgICAgICAvPlxyXG5cclxuICAgICAgICB9IEBpZihmaWx0ZXJCdXR0b24oKSkge1xyXG4gICAgICAgIDxrdi1idXR0b25cclxuICAgICAgICAgIGxhYmVsPVwiRmlsdHJhclwiXHJcbiAgICAgICAgICBpY29uPVwiZmlsdGVyX2FsdFwiXHJcbiAgICAgICAgICBzZXZlcml0eT1cInRlcnRpYXJ5XCJcclxuICAgICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZU92ZXJsYXlQYW5lbCgkZXZlbnQpXCJcclxuICAgICAgICA+PC9rdi1idXR0b24+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8cC1vdmVybGF5UGFuZWwgI29wIFtkaXNtaXNzYWJsZV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZpbHRyb11cIj4gPC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvcC1vdmVybGF5UGFuZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMlwiPlxyXG4gICAgICAgIEBpZihhY3Rpb25zSGVhZGVyKCkpIHsgQGZvcihhY3Rpb24gb2YgYWN0aW9uc0hlYWRlcigpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICBbaWNvbl09XCJhY3Rpb24/Lmljb24gfHwgJydcIlxyXG4gICAgICAgICAgW2xhYmVsXT1cImFjdGlvbj8ubGFiZWwgfHwgJydcIlxyXG4gICAgICAgICAgW3NldmVyaXR5XT1cImFjdGlvblsnc2V2ZXJpdHknXSB8fCAndGVydGlhcnknXCJcclxuICAgICAgICAgIChvbkNsaWNrKT1cImFjdGlvbj8uY29tbWFuZCgkZXZlbnQpXCJcclxuICAgICAgICAgIFtwb3B1cEljb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW2l0ZW1zXT1cImFjdGlvbi5pdGVtcyB8fCBbXVwiXHJcbiAgICAgICAgICBbcG9wdXBdPVwiaXNQb3B1cEJ1dHRvbigpKGFjdGlvbilcIlxyXG4gICAgICAgID48L2t2LWJ1dHRvbj5cclxuICAgICAgICB9IH0gQGlmKHNlbGVjdGVkSXRlbSgpKSB7XHJcbiAgICAgICAgPGt2LWJ1dHRvblxyXG4gICAgICAgICAgW3BUb29sdGlwXT1cIidSZWNvbGhlcidcIlxyXG4gICAgICAgICAgaWNvbj1cInJlb3JkZXJcIlxyXG4gICAgICAgICAgc2V2ZXJpdHk9XCJ0ZXJ0aWFyeVwiXHJcbiAgICAgICAgICAob25DbGljayk9XCJzZWxlY3RlZEl0ZW0uc2V0KG51bGwpXCJcclxuICAgICAgICA+PC9rdi1idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICA8cC10YWJsZVxyXG4gICAgICAgIFt2YWx1ZV09XCJkYXRhKClcIlxyXG4gICAgICAgIFtsYXp5XT1cImxhenkoKVwiXHJcbiAgICAgICAgW3NlbGVjdGlvblBhZ2VPbmx5XT1cInNlbGVjdGlvblBhZ2VPbmx5KClcIlxyXG4gICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnMoKVwiXHJcbiAgICAgICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3IoKVwiXHJcbiAgICAgICAgW3Jvd3NdPVwicm93cygpXCJcclxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3JkcygpXCJcclxuICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nKClcIlxyXG4gICAgICAgIFtwYWdlTGlua3NdPVwicGFnZUxpbmtzKClcIlxyXG4gICAgICAgIFtmaXJzdF09XCJmaXJzdCgpXCJcclxuICAgICAgICBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlKClcIlxyXG4gICAgICAgIHNjcm9sbEhlaWdodD1cImZsZXhcIlxyXG4gICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwiY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZSgpXCJcclxuICAgICAgICAob25QYWdlKT1cImhhbmRsZVBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uU29ydCk9XCJoYW5kbGVTb3J0KCRldmVudClcIlxyXG4gICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zKClcIlxyXG4gICAgICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc20gdGV4dC14cyBvdmVyZmxvdy15LWF1dG8gaC1mdWxsIGZsZXggZmxleC1jb2x1bW4gaC1mdWxsXCJcclxuICAgICAgPlxyXG4gICAgICAgIEBpZihzaG93SGVhZGVyKCkpIHtcclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIEBpZihzZWxlY3RhYmxlVGFibGUoKSkge1xyXG4gICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNHJlbVwiPjxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggLz48L3RoPlxyXG4gICAgICAgICAgICB9IEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayBjb2wuZmllbGQpIHtcclxuICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCIhY29sPy5zb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6IGNvbC53aWR0aCB8fCAnYXV0bycgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICBAaWYgKGNvbC5zb3J0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5maWVsZFwiIGNsYXNzPVwicGItMVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIj5cclxuICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHt7XHJcbiAgICAgICAgICAgICAgdmVyaWZ5SXRlbVNlbGVjaW9uYWRvKCkocm93RGF0YSkgJiYgJ2JnLWdyYXktMTAwJ1xyXG4gICAgICAgICAgICB9fSBob3ZlcjpiZy1ncmF5LTIwMFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEBpZihzZWxlY3RhYmxlVGFibGUoKSkge1xyXG4gICAgICAgICAgICA8dGQ+PHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwicm93RGF0YVwiIC8+PC90ZD5cclxuICAgICAgICAgICAgfSBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgY29sLmZpZWxkKSB7XHJcbiAgICAgICAgICAgIDx0ZCAoY2xpY2spPVwicm93U2VsZWN0KHJvd0RhdGEpXCIgc3R5bGU9XCJ3b3JkLWJyZWFrOiBicmVhay1hbGw7XCI+XHJcbiAgICAgICAgICAgICAgQGlmKGNvbD8udGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoZ2V0Q3VzdG9tVGVtcGxhdGUoKShjb2wudGVtcGxhdGUubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoKShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYoY29sPy5pY29uKSB7XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5pY29uKHJvd0RhdGEpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYoY29sPy50YWcpIHtcclxuICAgICAgICAgICAgICA8a3YtdGFncyBbdGFnc109XCJbY29sLnRhZyhyb3dEYXRhKV1cIiAvPlxyXG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgIHt7IHRyYW5zZm9ybURhdGEoKShjb2wucGlwZSwgcm93RGF0YVtjb2wuZmllbGRdKSB9fVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInJldHVybkNvbHNwYW4oKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZW1wdHlUYWJsZUltZygpXCIgY2xhc3M9XCJoLTEwcmVtIHctYXV0b1wiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICB9XHJcblxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwic2hhZG93LTIgcC0wIG0tMCBjb2wgc2VsZWN0ZWQtaXRlbS1maWVsZCBtbC0yIGZsZXggZmxleC1jb2x1bW5cIlxyXG4gICAgW0BzbGlkZUluT3V0XT1cImlzUm93U2VsZWN0ZWQoKSA/ICdpLm4nIDogJ291dCdcIlxyXG4gICAgW3N0eWxlLm92ZXJmbG93XT1cIidoaWRkZW4nXCJcclxuICA+XHJcbiAgICBAaWYoaGFzU2VsZWN0ZWRJdGVtcygpKSB7XHJcbiAgICA8YWN0aW9ucy1sb3RlLWZpZWxkXHJcbiAgICAgIGNsYXNzPVwiaC1mdWxsXCJcclxuICAgICAgW3NlbGVjdGVkSXRlbXNdPVwic2VsZWN0ZWRJdGVtcygpXCJcclxuICAgICAgW2FjdGlvbnNMb3RlXT1cImFjdGlvbnNMb3RlKClcIlxyXG4gICAgLz5cclxuICAgIH0gQGVsc2UgaWYoc2hvd1NlbGVjdGVkSXRlbSgpKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmctZ3JheS0xMDAgdy1mdWxsIGgtYXV0byBwLTIgcmVsYXRpdmVcIj5cclxuICAgICAgQGlmKGhhc0FjdGlvbnNSb3coKSkge1xyXG4gICAgICA8YWN0aW9ucy1yb3ctbWVudSBbYWN0aW9uc1Jvd109XCJhY3Rpb25zUm93KClcIiAvPlxyXG4gICAgICB9XHJcblxyXG4gICAgICBAaWYoaXNNb2JpbGUoKSkge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTJyZW0gdy0ycmVtXCI+XHJcbiAgICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICAgIGljb249XCJhcnJvd19iYWNrXCJcclxuICAgICAgICAgICAgc2V2ZXJpdHk9XCJ0ZXJ0aWFyeVwiXHJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCInVm9sdGFyJ1wiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cInNlbGVjdGVkSXRlbS5zZXQobnVsbClcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3NlbGVjdGVkSXRlbUhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTIgb3ZlcmZsb3cteS1hdXRvIGgtZnVsbFwiPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2VsZWN0ZWRJdGVtXVwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDwhLS0gQGVsc2UgeyBOZW5odW0gaXRlbSBzZWxlY2lvbmFkbyB9IC0tPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,19 @@
1
+ import { Component, input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Component for displaying a tag.
5
+ */
6
+ export class KvTagComponent {
7
+ constructor() {
8
+ this.severity = input('system');
9
+ this.border = input(false);
10
+ this.color = input(null);
11
+ }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.8", type: KvTagComponent, selector: "kv-tag", inputs: { severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\r\n class=\"kv-tag {{severity()}} {{!border() && 'no-border'}}\"\r\n [style.backgroundColor]=\"color() ? color() + '0D' : ''\"\r\n [style.color]=\"color()\"\r\n>\r\n <ng-content></ng-content>\r\n</div> \r\n", styles: [".kv-tag{--kv-text-success: 75, 181, 67;--kv-text-info: 0, 123, 255;--kv-text-warn: 194, 91, 12;--kv-text-danger: 220, 53, 69;--kv-text-contrast: 33, 37, 41;--kv-bg-success: 75, 181, 67;--kv-bg-info: 0, 123, 255;--kv-bg-warn: 255, 235, 209;--kv-bg-danger: 220, 53, 69;--kv-bg-contrast: 33, 37, 41;padding:.2rem .5rem;border-radius:.5rem;font-size:.8rem;font-weight:600}.kv-tag.system{background-color:rgba(var(--kv-color-system),.05);border:1px solid rgba(var(--kv-color-system),.1);color:rgba(var(--kv-color-system),1)}.kv-tag.success{background-color:rgba(var(--kv-bg-success),.05);border:1px solid rgba(var(--kv-bg-success),.1);color:rgba(var(--kv-text-success),1)}.kv-tag.info{background-color:rgba(var(--kv-bg-info),.05);border:1px solid rgba(var(--kv-bg-info),.1);color:rgba(var(--kv-text-info),1)}.kv-tag.warn{background-color:rgba(var(--kv-bg-warn),1);border:1px solid rgba(var(--kv-bg-warn),.1);color:rgba(var(--kv-text-warn),1)}.kv-tag.danger{background-color:rgba(var(--kv-bg-danger),.05);border:1px solid rgba(var(--kv-bg-danger),.1);color:rgba(var(--kv-text-danger),1)}.kv-tag.contrast{background-color:rgba(var(--kv-bg-contrast),1);border:1px solid rgba(var(--kv-bg-contrast),.1);color:rgba(var(--kv-background-card),1)}.kv-tag.no-border{border:none}\n"] }); }
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTagComponent, decorators: [{
16
+ type: Component,
17
+ args: [{ selector: 'kv-tag', template: "<div\r\n class=\"kv-tag {{severity()}} {{!border() && 'no-border'}}\"\r\n [style.backgroundColor]=\"color() ? color() + '0D' : ''\"\r\n [style.color]=\"color()\"\r\n>\r\n <ng-content></ng-content>\r\n</div> \r\n", styles: [".kv-tag{--kv-text-success: 75, 181, 67;--kv-text-info: 0, 123, 255;--kv-text-warn: 194, 91, 12;--kv-text-danger: 220, 53, 69;--kv-text-contrast: 33, 37, 41;--kv-bg-success: 75, 181, 67;--kv-bg-info: 0, 123, 255;--kv-bg-warn: 255, 235, 209;--kv-bg-danger: 220, 53, 69;--kv-bg-contrast: 33, 37, 41;padding:.2rem .5rem;border-radius:.5rem;font-size:.8rem;font-weight:600}.kv-tag.system{background-color:rgba(var(--kv-color-system),.05);border:1px solid rgba(var(--kv-color-system),.1);color:rgba(var(--kv-color-system),1)}.kv-tag.success{background-color:rgba(var(--kv-bg-success),.05);border:1px solid rgba(var(--kv-bg-success),.1);color:rgba(var(--kv-text-success),1)}.kv-tag.info{background-color:rgba(var(--kv-bg-info),.05);border:1px solid rgba(var(--kv-bg-info),.1);color:rgba(var(--kv-text-info),1)}.kv-tag.warn{background-color:rgba(var(--kv-bg-warn),1);border:1px solid rgba(var(--kv-bg-warn),.1);color:rgba(var(--kv-text-warn),1)}.kv-tag.danger{background-color:rgba(var(--kv-bg-danger),.05);border:1px solid rgba(var(--kv-bg-danger),.1);color:rgba(var(--kv-text-danger),1)}.kv-tag.contrast{background-color:rgba(var(--kv-bg-contrast),1);border:1px solid rgba(var(--kv-bg-contrast),.1);color:rgba(var(--kv-background-card),1)}.kv-tag.no-border{border:none}\n"] }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFnLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRhZy9rdi10YWcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFnL2t2LXRhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT25FOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFSM0I7UUFVRSxhQUFRLEdBQUcsS0FBSyxDQUFnRSxRQUFRLENBQUMsQ0FBQztRQUMxRixXQUFNLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQy9CLFVBQUssR0FBRyxLQUFLLENBQWdCLElBQUksQ0FBQyxDQUFDO0tBRXBDOzhHQU5ZLGNBQWM7a0dBQWQsY0FBYyw4YUNWM0IsNE5BT0E7OzJGREdhLGNBQWM7a0JBUjFCLFNBQVM7K0JBQ0UsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtdGFnJyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtdGFnLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4va3YtdGFnLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG4vKipcclxuICogQ29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGEgdGFnLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEt2VGFnQ29tcG9uZW50IHtcclxuXHJcbiAgc2V2ZXJpdHkgPSBpbnB1dDwnc3lzdGVtJ3wgJ3N1Y2Nlc3MnIHwgJ2luZm8nIHwgJ3dhcm4nIHwgJ2RhbmdlcicgfCAnY29udHJhc3QnPignc3lzdGVtJyk7XHJcbiAgYm9yZGVyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNvbG9yID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcblxyXG59IiwiPGRpdlxyXG4gIGNsYXNzPVwia3YtdGFnIHt7c2V2ZXJpdHkoKX19IHt7IWJvcmRlcigpICYmICduby1ib3JkZXInfX1cIlxyXG4gIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY29sb3IoKSA/IGNvbG9yKCkgKyAnMEQnIDogJydcIlxyXG4gIFtzdHlsZS5jb2xvcl09XCJjb2xvcigpXCJcclxuPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj4gIFxyXG4iXX0=
@@ -0,0 +1,24 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { KvTagComponent } from './kv-tag.component';
4
+ import * as i0 from "@angular/core";
5
+ export class KvTagModule {
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTagModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.8", ngImport: i0, type: KvTagModule, declarations: [KvTagComponent], imports: [CommonModule], exports: [KvTagComponent] }); }
8
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTagModule, imports: [CommonModule] }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTagModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ declarations: [
14
+ KvTagComponent
15
+ ],
16
+ imports: [
17
+ CommonModule
18
+ ],
19
+ exports: [
20
+ KvTagComponent
21
+ ]
22
+ }]
23
+ }] });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFnLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRhZy9rdi10YWcubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFlcEQsTUFBTSxPQUFPLFdBQVc7OEdBQVgsV0FBVzsrR0FBWCxXQUFXLGlCQVRwQixjQUFjLGFBR2QsWUFBWSxhQUdaLGNBQWM7K0dBR0wsV0FBVyxZQU5wQixZQUFZOzsyRkFNSCxXQUFXO2tCQVh2QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixjQUFjO3FCQUNmO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxjQUFjO3FCQUNmO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgS3ZUYWdDb21wb25lbnQgfSBmcm9tICcuL2t2LXRhZy5jb21wb25lbnQnO1xyXG5cclxuXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgS3ZUYWdDb21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgS3ZUYWdDb21wb25lbnRcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdlRhZ01vZHVsZSB7IH1cclxuIl19