keevo-components 2.0.105 → 2.0.107

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 (746) hide show
  1. package/ng-package.json +14 -0
  2. package/package.json +32 -42
  3. package/src/assets/.gitkeep +0 -0
  4. package/src/index.ts +1 -0
  5. package/src/lib/api/base-components/base-component-button.ts +29 -0
  6. package/src/lib/api/base-components/base-component-chart.ts +118 -0
  7. package/src/lib/api/base-components/base-component-crud-form.ts +377 -0
  8. package/src/lib/api/base-components/base-component-crud-list.ts +129 -0
  9. package/src/lib/api/base-components/base-component-crud.ts +92 -0
  10. package/src/lib/api/base-components/base-component-dropdown-external.ts +29 -0
  11. package/src/lib/api/base-components/base-component-dropdown-new.ts +112 -0
  12. package/src/lib/api/base-components/base-component-dropdown.ts +257 -0
  13. package/src/lib/api/base-components/base-component-input.ts +121 -0
  14. package/src/lib/api/base-components/base-component-multi-select.ts +187 -0
  15. package/src/lib/api/base-components/base-component-table.ts +366 -0
  16. package/src/lib/api/base-components/base-component.ts +47 -0
  17. package/src/lib/api/components/chart/chart.config.ts +15 -0
  18. package/src/lib/api/components/chart/chart.model.ts +12 -0
  19. package/src/lib/api/components/chart/orchart.config.ts +51 -0
  20. package/src/lib/api/components/chart/orchartnode.ts +44 -0
  21. package/src/lib/api/components/dropdown/filtro.combo.ts +4 -0
  22. package/{lib/api/components/step/step.model.d.ts → src/lib/api/components/step/step.model.ts} +15 -13
  23. package/src/lib/api/components/stepper/kv-stepperpanel.ts +10 -0
  24. package/src/lib/api/components/table/action-item.ts +13 -0
  25. package/src/lib/api/components/table/kv-menuitem.ts +198 -0
  26. package/src/lib/api/components/table/table-dropdown-control.ts +6 -0
  27. package/src/lib/api/components/table/table.config.column.ts +38 -0
  28. package/src/lib/api/components/table/table.config.ts +39 -0
  29. package/src/lib/api/components/table/table.paginate.ts +7 -0
  30. package/{lib/api/components/table/tabledit.config.d.ts → src/lib/api/components/table/tabledit.config.ts} +9 -8
  31. package/src/lib/api/components/table/tableedit.config.column.ts +12 -0
  32. package/src/lib/api/components/tree-table/tree-table-keys.ts +12 -0
  33. package/src/lib/api/components/tree-table/tree-table.config.ts +34 -0
  34. package/src/lib/api/directives/directives.module.ts +19 -0
  35. package/src/lib/api/directives/drag/drag.directive.ts +40 -0
  36. package/src/lib/api/directives/stepper/dynamicinput.directive.ts +23 -0
  37. package/src/lib/api/directives/template/template.directive.ts +15 -0
  38. package/src/lib/api/helpers/component-providers.ts +16 -0
  39. package/src/lib/api/helpers/keevo-validators.ts +174 -0
  40. package/src/lib/api/helpers/severity-color.ts +77 -0
  41. package/src/lib/api/helpers/translate-primeng.ts +25 -0
  42. package/src/lib/api/modules/primeng.module.ts +144 -0
  43. package/src/lib/api/pipes/capitalize.pipe.ts +47 -0
  44. package/src/lib/api/pipes/cpfcnpj.pipe.ts +21 -0
  45. package/src/lib/api/pipes/mask.pipe.ts +24 -0
  46. package/src/lib/api/pipes/pipes.module.ts +26 -0
  47. package/src/lib/api/pipes/telefone.pipe.ts +38 -0
  48. package/src/lib/api/services/base.api.service.ts +115 -0
  49. package/src/lib/api/services/breadcrumbs.service.ts +71 -0
  50. package/src/lib/api/services/chat.service.ts +39 -0
  51. package/src/lib/api/services/component.service.ts +44 -0
  52. package/src/lib/api/services/docs.service.ts +129 -0
  53. package/src/lib/api/services/form.service.ts +139 -0
  54. package/src/lib/api/services/image.cutter.service.ts +290 -0
  55. package/src/lib/api/services/imagens.service.ts +28 -0
  56. package/src/lib/api/services/notification.service.ts +88 -0
  57. package/src/lib/api/services/object.service.ts +33 -0
  58. package/src/lib/api/services/orgchart.service.ts +77 -0
  59. package/src/lib/api/services/pdf.service.ts +54 -0
  60. package/src/lib/api/types/breadcrumb.model.ts +5 -0
  61. package/src/lib/api/types/severity.ts +3 -0
  62. package/src/lib/api/types/stimulsoft.reports.d.ts +67463 -0
  63. package/src/lib/components/keevo-components-styles.scss +5 -0
  64. package/src/lib/components/keevo-components.module.ts +105 -0
  65. package/src/lib/components/kv-avatar/kv-avatar.component.html +75 -0
  66. package/src/lib/components/kv-avatar/kv-avatar.component.scss +162 -0
  67. package/src/lib/components/kv-avatar/kv-avatar.component.spec.ts +23 -0
  68. package/src/lib/components/kv-avatar/kv-avatar.component.ts +165 -0
  69. package/src/lib/components/kv-avatar/kv-avatar.module.ts +32 -0
  70. package/src/lib/components/kv-button/kv-button.component.html +26 -0
  71. package/src/lib/components/kv-button/kv-button.component.spec.ts +23 -0
  72. package/src/lib/components/kv-button/kv-button.component.ts +55 -0
  73. package/src/lib/components/kv-button/kv-button.module.ts +20 -0
  74. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.html +14 -0
  75. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.scss +6 -0
  76. package/src/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.ts +25 -0
  77. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.html +13 -0
  78. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.scss +33 -0
  79. package/src/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.ts +41 -0
  80. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.html +12 -0
  81. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.scss +18 -0
  82. package/src/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.ts +14 -0
  83. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.html +11 -0
  84. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.scss +17 -0
  85. package/src/lib/components/kv-buttons/kv-button-success/kv-button-success.component.ts +14 -0
  86. package/src/lib/components/kv-buttons/kv-button.module.ts +26 -0
  87. package/src/lib/components/kv-card-selection/kv-card-selection.component.html +63 -0
  88. package/src/lib/components/kv-card-selection/kv-card-selection.component.scss +54 -0
  89. package/src/lib/components/kv-card-selection/kv-card-selection.component.spec.ts +23 -0
  90. package/src/lib/components/kv-card-selection/kv-card-selection.component.ts +73 -0
  91. package/src/lib/components/kv-card-selection/kv-card-selection.module.ts +19 -0
  92. package/src/lib/components/kv-carousel/kv-carousel.component.html +26 -0
  93. package/src/lib/components/kv-carousel/kv-carousel.component.scss +47 -0
  94. package/src/lib/components/kv-carousel/kv-carousel.component.spec.ts +23 -0
  95. package/src/lib/components/kv-carousel/kv-carousel.component.ts +40 -0
  96. package/src/lib/components/kv-carousel/kv-carousel.module.ts +19 -0
  97. package/src/lib/components/kv-chart/kv-chart.component.html +38 -0
  98. package/src/lib/components/kv-chart/kv-chart.component.scss +0 -0
  99. package/src/lib/components/kv-chart/kv-chart.component.spec.ts +28 -0
  100. package/src/lib/components/kv-chart/kv-chart.component.ts +174 -0
  101. package/src/lib/components/kv-chart/kv-chart.module.ts +21 -0
  102. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.html +9 -0
  103. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.scss +7 -0
  104. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.spec.ts +23 -0
  105. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.ts +32 -0
  106. package/src/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.ts +14 -0
  107. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.html +229 -0
  108. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.scss +185 -0
  109. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.spec.ts +23 -0
  110. package/src/lib/components/kv-content-viewer/kv-content-viewer.component.ts +171 -0
  111. package/src/lib/components/kv-content-viewer/kv-content-viewer.module.ts +25 -0
  112. package/src/lib/components/kv-error/kv-error.component.html +3 -0
  113. package/src/lib/components/kv-error/kv-error.component.scss +5 -0
  114. package/src/lib/components/kv-error/kv-error.component.ts +27 -0
  115. package/src/lib/components/kv-error/kv-error.module.ts +26 -0
  116. package/src/lib/components/kv-file-upload/kv-file-upload.component.html +134 -0
  117. package/src/lib/components/kv-file-upload/kv-file-upload.component.scss +13 -0
  118. package/src/lib/components/kv-file-upload/kv-file-upload.component.spec.ts +23 -0
  119. package/src/lib/components/kv-file-upload/kv-file-upload.component.ts +200 -0
  120. package/src/lib/components/kv-file-upload/kv-file-upload.module.ts +13 -0
  121. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.html +16 -0
  122. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.scss +18 -0
  123. package/src/lib/components/kv-file-viewer/kv-file-viewer.component.ts +42 -0
  124. package/src/lib/components/kv-file-viewer/kv-file-viewer.module.ts +14 -0
  125. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.html +34 -0
  126. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.scss +17 -0
  127. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.ts +80 -0
  128. package/src/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.ts +15 -0
  129. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.html +103 -0
  130. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.scss +153 -0
  131. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.spec.ts +23 -0
  132. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.component.ts +73 -0
  133. package/src/lib/components/kv-file-viewer-preview/kv-file-viewer-preview.module.ts +18 -0
  134. package/src/lib/components/kv-filter-card/kv-filter-card.component.html +12 -0
  135. package/src/lib/components/kv-filter-card/kv-filter-card.component.scss +76 -0
  136. package/src/lib/components/kv-filter-card/kv-filter-card.component.spec.ts +23 -0
  137. package/src/lib/components/kv-filter-card/kv-filter-card.component.ts +18 -0
  138. package/src/lib/components/kv-filter-card/kv-filter-card.module.ts +23 -0
  139. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.html +81 -0
  140. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.scss +197 -0
  141. package/src/lib/components/kv-filter-cards/kv-filter-cards.component.ts +150 -0
  142. package/src/lib/components/kv-filter-cards/kv-filter-cards.module.ts +20 -0
  143. package/src/lib/components/kv-filter-cards/kv-filter-cards.pipe.ts +24 -0
  144. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.html +25 -0
  145. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.scss +22 -0
  146. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.spec.ts +23 -0
  147. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.ts +20 -0
  148. package/src/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.ts +20 -0
  149. package/src/lib/components/kv-g-icon/kv-g-icon.component.html +1 -0
  150. package/src/lib/components/kv-g-icon/kv-g-icon.component.scss +0 -0
  151. package/src/lib/components/kv-g-icon/kv-g-icon.component.spec.ts +23 -0
  152. package/src/lib/components/kv-g-icon/kv-g-icon.component.ts +10 -0
  153. package/src/lib/components/kv-g-icon/kv-g-icon.module.ts +11 -0
  154. package/src/lib/components/kv-home-card/kv-home-card.component.html +35 -0
  155. package/src/lib/components/kv-home-card/kv-home-card.component.scss +5 -0
  156. package/src/lib/components/kv-home-card/kv-home-card.component.spec.ts +23 -0
  157. package/src/lib/components/kv-home-card/kv-home-card.component.ts +33 -0
  158. package/src/lib/components/kv-home-card/kv-home-card.module.ts +18 -0
  159. package/src/lib/components/kv-icon/kv-icon.component.html +13 -0
  160. package/src/lib/components/kv-icon/kv-icon.component.scss +69 -0
  161. package/src/lib/components/kv-icon/kv-icon.component.spec.ts +28 -0
  162. package/src/lib/components/kv-icon/kv-icon.component.ts +30 -0
  163. package/src/lib/components/kv-icon/kv-icon.model.ts +3 -0
  164. package/src/lib/components/kv-icon/kv-icon.module.ts +16 -0
  165. package/src/lib/components/kv-image-upload/kv-image-upload.component.html +64 -0
  166. package/src/lib/components/kv-image-upload/kv-image-upload.component.scss +0 -0
  167. package/src/lib/components/kv-image-upload/kv-image-upload.component.ts +153 -0
  168. package/src/lib/components/kv-image-upload/kv-image-upload.module.ts +10 -0
  169. package/src/lib/components/kv-inputs/kv-check/kv-check.component.html +12 -0
  170. package/src/lib/components/kv-inputs/kv-check/kv-check.component.scss +38 -0
  171. package/src/lib/components/kv-inputs/kv-check/kv-check.component.ts +32 -0
  172. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.html +87 -0
  173. package/src/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.ts +119 -0
  174. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.html +13 -0
  175. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.scss +0 -0
  176. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.spec.ts +23 -0
  177. package/src/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.ts +16 -0
  178. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.html +18 -0
  179. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.scss +0 -0
  180. package/src/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.ts +41 -0
  181. package/src/lib/components/kv-inputs/kv-editor/config/kv-editor.config.ts +120 -0
  182. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.html +285 -0
  183. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.scss +182 -0
  184. package/src/lib/components/kv-inputs/kv-editor/kv-editor.component.ts +311 -0
  185. package/{lib/components/kv-inputs/kv-editor/kv-editor.d.ts → src/lib/components/kv-inputs/kv-editor/kv-editor.ts} +6 -6
  186. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.ts +156 -0
  187. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.ts +190 -0
  188. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.spec.ts +126 -0
  189. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.ts +84 -0
  190. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.spec.ts +176 -0
  191. package/src/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.ts +101 -0
  192. package/src/lib/components/kv-inputs/kv-editor/types/kv-editor.types.ts +36 -0
  193. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.html +37 -0
  194. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.scss +23 -0
  195. package/src/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.ts +197 -0
  196. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.html +24 -0
  197. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.scss +0 -0
  198. package/src/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.ts +35 -0
  199. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.html +23 -0
  200. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.scss +0 -0
  201. package/src/lib/components/kv-inputs/kv-input-number/kv-input-number.component.ts +61 -0
  202. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.html +33 -0
  203. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.scss +5 -0
  204. package/src/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.ts +63 -0
  205. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.html +24 -0
  206. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.scss +0 -0
  207. package/src/lib/components/kv-inputs/kv-input-password/kv-input-password.component.ts +26 -0
  208. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.html +23 -0
  209. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.scss +18 -0
  210. package/src/lib/components/kv-inputs/kv-input-text/kv-input-text.component.ts +40 -0
  211. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.html +30 -0
  212. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.scss +26 -0
  213. package/src/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.ts +38 -0
  214. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.html +53 -0
  215. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.scss +41 -0
  216. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.spec.ts +23 -0
  217. package/src/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.ts +48 -0
  218. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.html +23 -0
  219. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.scss +0 -0
  220. package/src/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.ts +40 -0
  221. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.html +24 -0
  222. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.scss +0 -0
  223. package/src/lib/components/kv-inputs/kv-input-time/kv-input-time.component.ts +27 -0
  224. package/src/lib/components/kv-inputs/kv-inputs.module.ts +100 -0
  225. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.html +87 -0
  226. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.scss +62 -0
  227. package/src/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.ts +54 -0
  228. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.html +19 -0
  229. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.scss +22 -0
  230. package/src/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.ts +63 -0
  231. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.html +26 -0
  232. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.scss +5 -0
  233. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.spec.ts +21 -0
  234. package/src/lib/components/kv-inputs/kv-select-button/kv-select-button.component.ts +30 -0
  235. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.html +28 -0
  236. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.scss +61 -0
  237. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.spec.ts +23 -0
  238. package/src/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.ts +43 -0
  239. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.html +23 -0
  240. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.scss +35 -0
  241. package/src/lib/components/kv-inputs/kv-switch/kv-switch.component.ts +54 -0
  242. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.html +68 -0
  243. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.scss +86 -0
  244. package/src/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.ts +59 -0
  245. package/src/lib/components/kv-label/kv-label.component.html +3 -0
  246. package/src/lib/components/kv-label/kv-label.component.scss +15 -0
  247. package/src/lib/components/kv-label/kv-label.component.spec.ts +23 -0
  248. package/src/lib/components/kv-label/kv-label.component.ts +14 -0
  249. package/src/lib/components/kv-label/kv-label.module.ts +17 -0
  250. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.html +25 -0
  251. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.scss +19 -0
  252. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.spec.ts +28 -0
  253. package/src/lib/components/kv-layout/dropdown-master/dropdown-master.component.ts +34 -0
  254. package/src/lib/components/kv-layout/kv-layout.module.ts +44 -0
  255. package/src/lib/components/kv-layout/layout/kv-layout.component.html +535 -0
  256. package/src/lib/components/kv-layout/layout/kv-layout.component.scss +267 -0
  257. package/src/lib/components/kv-layout/layout/kv-layout.component.spec.ts +23 -0
  258. package/src/lib/components/kv-layout/layout/kv-layout.component.ts +502 -0
  259. package/src/lib/components/kv-layout/top-icons/top-icons.component.html +26 -0
  260. package/src/lib/components/kv-layout/top-icons/top-icons.component.scss +71 -0
  261. package/src/lib/components/kv-layout/top-icons/top-icons.component.spec.ts +23 -0
  262. package/src/lib/components/kv-layout/top-icons/top-icons.component.ts +26 -0
  263. package/src/lib/components/kv-loader/kv-loader.component.html +1 -0
  264. package/src/lib/components/kv-loader/kv-loader.component.ts +11 -0
  265. package/src/lib/components/kv-loader/kv-loader.module.ts +17 -0
  266. package/src/lib/components/kv-loader/kv-loader.service.ts +29 -0
  267. package/src/lib/components/kv-login/kv-login.component.html +101 -0
  268. package/src/lib/components/kv-login/kv-login.component.scss +99 -0
  269. package/src/lib/components/kv-login/kv-login.component.spec.ts +23 -0
  270. package/src/lib/components/kv-login/kv-login.component.ts +97 -0
  271. package/src/lib/components/kv-login/kv-login.module.ts +33 -0
  272. package/src/lib/components/kv-modal/kv-modal.component.html +20 -0
  273. package/src/lib/components/kv-modal/kv-modal.component.scss +37 -0
  274. package/src/lib/components/kv-modal/kv-modal.component.spec.ts +21 -0
  275. package/src/lib/components/kv-modal/kv-modal.component.ts +111 -0
  276. package/src/lib/components/kv-modal/kv-modal.module.ts +12 -0
  277. package/src/lib/components/kv-orgchart/kv-orgchart.component.html +125 -0
  278. package/src/lib/components/kv-orgchart/kv-orgchart.component.scss +73 -0
  279. package/src/lib/components/kv-orgchart/kv-orgchart.component.ts +283 -0
  280. package/src/lib/components/kv-orgchart/kv-orgchart.module.ts +31 -0
  281. package/src/lib/components/kv-page-form/kv-page-form.component.html +91 -0
  282. package/src/lib/components/kv-page-form/kv-page-form.component.scss +100 -0
  283. package/src/lib/components/kv-page-form/kv-page-form.component.spec.ts +28 -0
  284. package/src/lib/components/kv-page-form/kv-page-form.component.ts +206 -0
  285. package/src/lib/components/kv-page-form/kv-page-form.module.ts +33 -0
  286. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.html +276 -0
  287. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.scss +85 -0
  288. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.spec.ts +23 -0
  289. package/src/lib/components/kv-page-stepper/kv-page-stepper.component.ts +223 -0
  290. package/src/lib/components/kv-page-stepper/kv-page-stepper.module.ts +36 -0
  291. package/src/lib/components/kv-pick-list/kv-pick-list.component.html +32 -0
  292. package/src/lib/components/kv-pick-list/kv-pick-list.component.scss +57 -0
  293. package/src/lib/components/kv-pick-list/kv-pick-list.component.spec.ts +26 -0
  294. package/src/lib/components/kv-pick-list/kv-pick-list.component.ts +461 -0
  295. package/src/lib/components/kv-pick-list/kv-pick-list.module.ts +24 -0
  296. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.html +38 -0
  297. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.scss +128 -0
  298. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.spec.ts +21 -0
  299. package/src/lib/components/kv-progress-bar/kv-progress-bar.component.ts +75 -0
  300. package/src/lib/components/kv-progress-bar/kv-progress-bar.module.ts +19 -0
  301. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.html +43 -0
  302. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.scss +130 -0
  303. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.spec.ts +23 -0
  304. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.ts +82 -0
  305. package/src/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.ts +18 -0
  306. package/src/lib/components/kv-report/kv-report.component.html +3 -0
  307. package/src/lib/components/kv-report/kv-report.component.scss +14 -0
  308. package/src/lib/components/kv-report/kv-report.component.spec.ts +28 -0
  309. package/src/lib/components/kv-report/kv-report.component.ts +44 -0
  310. package/src/lib/components/kv-report/kv-report.module.ts +18 -0
  311. package/src/lib/components/kv-stepper/kv-stepper.component.html +94 -0
  312. package/src/lib/components/kv-stepper/kv-stepper.component.scss +43 -0
  313. package/src/lib/components/kv-stepper/kv-stepper.component.spec.ts +23 -0
  314. package/src/lib/components/kv-stepper/kv-stepper.component.ts +73 -0
  315. package/src/lib/components/kv-stepper/kv-stepper.module.ts +27 -0
  316. package/src/lib/components/kv-steps/kv-steps.component.html +53 -0
  317. package/src/lib/components/kv-steps/kv-steps.component.scss +120 -0
  318. package/src/lib/components/kv-steps/kv-steps.component.ts +122 -0
  319. package/src/lib/components/kv-table/kv-table.component.html +655 -0
  320. package/src/lib/components/kv-table/kv-table.component.spec.ts +28 -0
  321. package/src/lib/components/kv-table/kv-table.component.ts +792 -0
  322. package/src/lib/components/kv-table/kv-table.module.ts +25 -0
  323. package/src/lib/components/kv-table-edit/kv-table-edit.component.html +913 -0
  324. package/src/lib/components/kv-table-edit/kv-table-edit.component.scss +829 -0
  325. package/src/lib/components/kv-table-edit/kv-table-edit.component.ts +425 -0
  326. package/src/lib/components/kv-table-edit/kv-table-edit.module.ts +31 -0
  327. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.html +634 -0
  328. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.scss +387 -0
  329. package/src/lib/components/kv-table-expandable/kv-table-expandable.component.ts +546 -0
  330. package/src/lib/components/kv-table-expandable/kv-table-expandable.module.ts +22 -0
  331. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.html +25 -0
  332. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.scss +0 -0
  333. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.spec.ts +23 -0
  334. package/src/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.ts +17 -0
  335. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.html +20 -0
  336. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.scss +0 -0
  337. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.spec.ts +23 -0
  338. package/src/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.ts +14 -0
  339. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.html +164 -0
  340. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.scss +80 -0
  341. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.spec.ts +23 -0
  342. package/src/lib/components/kv-table-viewer/kv-table-viewer.component.ts +183 -0
  343. package/src/lib/components/kv-tag/kv-tag.component.html +3 -0
  344. package/src/lib/components/kv-tag/kv-tag.component.scss +65 -0
  345. package/src/lib/components/kv-tag/kv-tag.component.spec.ts +23 -0
  346. package/src/lib/components/kv-tag/kv-tag.component.ts +16 -0
  347. package/src/lib/components/kv-tag/kv-tag.module.ts +18 -0
  348. package/src/lib/components/kv-tags/kv-tags.component.html +19 -0
  349. package/src/lib/components/kv-tags/kv-tags.component.scss +28 -0
  350. package/src/lib/components/kv-tags/kv-tags.component.ts +64 -0
  351. package/src/lib/components/kv-tags/kv-tags.module.ts +18 -0
  352. package/src/lib/components/kv-timeline/kv-timeline.component.html +28 -0
  353. package/src/lib/components/kv-timeline/kv-timeline.component.scss +6 -0
  354. package/src/lib/components/kv-timeline/kv-timeline.component.spec.ts +23 -0
  355. package/src/lib/components/kv-timeline/kv-timeline.component.ts +77 -0
  356. package/src/lib/components/kv-tree-table/kv-tree-table.component.html +492 -0
  357. package/src/lib/components/kv-tree-table/kv-tree-table.component.scss +187 -0
  358. package/src/lib/components/kv-tree-table/kv-tree-table.component.spec.ts +21 -0
  359. package/src/lib/components/kv-tree-table/kv-tree-table.component.ts +355 -0
  360. package/src/lib/components/kv-tree-table/kv-tree-table.module.ts +23 -0
  361. package/src/lib/components/kv-tree-view/kv-tree-view.component.html +16 -0
  362. package/src/lib/components/kv-tree-view/kv-tree-view.component.scss +19 -0
  363. package/src/lib/components/kv-tree-view/kv-tree-view.component.spec.ts +23 -0
  364. package/src/lib/components/kv-tree-view/kv-tree-view.component.ts +73 -0
  365. package/src/lib/components/kv-tree-view/kv-tree-view.module.ts +19 -0
  366. package/src/lib/components/kv-widget-card/kv-widget-card.component.html +71 -0
  367. package/src/lib/components/kv-widget-card/kv-widget-card.component.scss +27 -0
  368. package/src/lib/components/kv-widget-card/kv-widget-card.component.spec.ts +28 -0
  369. package/src/lib/components/kv-widget-card/kv-widget-card.component.ts +107 -0
  370. package/src/lib/components/kv-widget-card/kv-widget-card.module.ts +20 -0
  371. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.html +22 -0
  372. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.scss +36 -0
  373. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.spec.ts +28 -0
  374. package/src/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.ts +41 -0
  375. package/src/lib/components/kv-workspace/kv-workspace.module.ts +45 -0
  376. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.html +20 -0
  377. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.scss +0 -0
  378. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.spec.ts +28 -0
  379. package/src/lib/components/kv-workspace/logo/kv-workspace-logo.component.ts +18 -0
  380. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.html +35 -0
  381. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.scss +29 -0
  382. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.spec.ts +28 -0
  383. package/src/lib/components/kv-workspace/master/kv-workspace-master.component.ts +98 -0
  384. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.html +63 -0
  385. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.scss +62 -0
  386. package/src/lib/components/kv-workspace/workspace/kv-workspace.component.ts +91 -0
  387. package/{public-api.d.ts → src/public-api.ts} +361 -288
  388. package/tsconfig.lib.json +14 -0
  389. package/tsconfig.lib.prod.json +10 -0
  390. package/tsconfig.spec.json +14 -0
  391. package/esm2022/keevo-components.mjs +0 -5
  392. package/esm2022/lib/api/base-components/base-component-button.mjs +0 -39
  393. package/esm2022/lib/api/base-components/base-component-chart.mjs +0 -104
  394. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +0 -308
  395. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +0 -91
  396. package/esm2022/lib/api/base-components/base-component-crud.mjs +0 -80
  397. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +0 -31
  398. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +0 -238
  399. package/esm2022/lib/api/base-components/base-component-input.mjs +0 -101
  400. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +0 -174
  401. package/esm2022/lib/api/base-components/base-component-table.mjs +0 -354
  402. package/esm2022/lib/api/base-components/base-component.mjs +0 -51
  403. package/esm2022/lib/api/components/chart/chart.config.mjs +0 -2
  404. package/esm2022/lib/api/components/chart/chart.model.mjs +0 -2
  405. package/esm2022/lib/api/components/chart/orchart.config.mjs +0 -2
  406. package/esm2022/lib/api/components/chart/orchartnode.mjs +0 -2
  407. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +0 -2
  408. package/esm2022/lib/api/components/step/step.model.mjs +0 -2
  409. package/esm2022/lib/api/components/stepper/kv-stepperpanel.mjs +0 -2
  410. package/esm2022/lib/api/components/table/action-item.mjs +0 -2
  411. package/esm2022/lib/api/components/table/kv-menuitem.mjs +0 -46
  412. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +0 -2
  413. package/esm2022/lib/api/components/table/table.config.column.mjs +0 -2
  414. package/esm2022/lib/api/components/table/table.config.mjs +0 -2
  415. package/esm2022/lib/api/components/table/table.paginate.mjs +0 -10
  416. package/esm2022/lib/api/components/table/tabledit.config.mjs +0 -2
  417. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +0 -2
  418. package/esm2022/lib/api/components/tree-table/tree-table-keys.mjs +0 -2
  419. package/esm2022/lib/api/components/tree-table/tree-table.config.mjs +0 -3
  420. package/esm2022/lib/api/directives/directives.module.mjs +0 -30
  421. package/esm2022/lib/api/directives/drag/drag.directive.mjs +0 -52
  422. package/esm2022/lib/api/directives/stepper/dynamicinput.directive.mjs +0 -31
  423. package/esm2022/lib/api/directives/template/template.directive.mjs +0 -24
  424. package/esm2022/lib/api/helpers/component-providers.mjs +0 -16
  425. package/esm2022/lib/api/helpers/keevo-validators.mjs +0 -144
  426. package/esm2022/lib/api/helpers/translate-primeng.mjs +0 -23
  427. package/esm2022/lib/api/modules/primeng.module.mjs +0 -283
  428. package/esm2022/lib/api/pipes/capitalize.pipe.mjs +0 -47
  429. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +0 -25
  430. package/esm2022/lib/api/pipes/mask.pipe.mjs +0 -29
  431. package/esm2022/lib/api/pipes/pipes.module.mjs +0 -39
  432. package/esm2022/lib/api/pipes/telefone.pipe.mjs +0 -45
  433. package/esm2022/lib/api/services/base.api.service.mjs +0 -74
  434. package/esm2022/lib/api/services/breadcrumbs.service.mjs +0 -62
  435. package/esm2022/lib/api/services/chat.service.mjs +0 -37
  436. package/esm2022/lib/api/services/component.service.mjs +0 -37
  437. package/esm2022/lib/api/services/docs.service.mjs +0 -129
  438. package/esm2022/lib/api/services/form.service.mjs +0 -95
  439. package/esm2022/lib/api/services/image.cutter.service.mjs +0 -193
  440. package/esm2022/lib/api/services/imagens.service.mjs +0 -28
  441. package/esm2022/lib/api/services/notification.service.mjs +0 -69
  442. package/esm2022/lib/api/services/object.service.mjs +0 -39
  443. package/esm2022/lib/api/services/orgchart.service.mjs +0 -64
  444. package/esm2022/lib/api/services/pdf.service.mjs +0 -48
  445. package/esm2022/lib/api/types/breadcrumb.model.mjs +0 -2
  446. package/esm2022/lib/components/keevo-components.module.mjs +0 -232
  447. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +0 -142
  448. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +0 -55
  449. package/esm2022/lib/components/kv-button/kv-button.component.mjs +0 -51
  450. package/esm2022/lib/components/kv-button/kv-button.module.mjs +0 -28
  451. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +0 -25
  452. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +0 -39
  453. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +0 -17
  454. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +0 -17
  455. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +0 -39
  456. package/esm2022/lib/components/kv-card-selection/kv-card-selection.component.mjs +0 -60
  457. package/esm2022/lib/components/kv-card-selection/kv-card-selection.module.mjs +0 -31
  458. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +0 -34
  459. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +0 -28
  460. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +0 -166
  461. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +0 -32
  462. package/esm2022/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.mjs +0 -32
  463. package/esm2022/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.mjs +0 -22
  464. package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.component.mjs +0 -185
  465. package/esm2022/lib/components/kv-content-viewer/kv-content-viewer.module.mjs +0 -44
  466. package/esm2022/lib/components/kv-error/kv-error.component.mjs +0 -26
  467. package/esm2022/lib/components/kv-error/kv-error.module.mjs +0 -35
  468. package/esm2022/lib/components/kv-file-upload/kv-file-upload.component.mjs +0 -191
  469. package/esm2022/lib/components/kv-file-upload/kv-file-upload.module.mjs +0 -23
  470. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.component.mjs +0 -46
  471. package/esm2022/lib/components/kv-file-viewer/kv-file-viewer.module.mjs +0 -20
  472. package/esm2022/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.mjs +0 -68
  473. package/esm2022/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.mjs +0 -24
  474. package/esm2022/lib/components/kv-filter-card/kv-filter-card.component.mjs +0 -29
  475. package/esm2022/lib/components/kv-filter-card/kv-filter-card.module.mjs +0 -34
  476. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.component.mjs +0 -103
  477. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.module.mjs +0 -31
  478. package/esm2022/lib/components/kv-filter-cards/kv-filter-cards.pipe.mjs +0 -30
  479. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.mjs +0 -26
  480. package/esm2022/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.mjs +0 -28
  481. package/esm2022/lib/components/kv-g-icon/kv-g-icon.component.mjs +0 -11
  482. package/esm2022/lib/components/kv-g-icon/kv-g-icon.module.mjs +0 -19
  483. package/esm2022/lib/components/kv-home-card/kv-home-card.component.mjs +0 -27
  484. package/esm2022/lib/components/kv-home-card/kv-home-card.module.mjs +0 -32
  485. package/esm2022/lib/components/kv-image-upload/kv-image-upload.component.mjs +0 -136
  486. package/esm2022/lib/components/kv-image-upload/kv-image-upload.module.mjs +0 -18
  487. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +0 -29
  488. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +0 -102
  489. package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.mjs +0 -18
  490. package/esm2022/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.mjs +0 -40
  491. package/esm2022/lib/components/kv-inputs/kv-editor/config/kv-editor.config.mjs +0 -110
  492. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +0 -266
  493. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.mjs +0 -7
  494. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.mjs +0 -135
  495. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.mjs +0 -168
  496. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.mjs +0 -78
  497. package/esm2022/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.mjs +0 -95
  498. package/esm2022/lib/components/kv-inputs/kv-editor/types/kv-editor.types.mjs +0 -2
  499. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +0 -168
  500. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +0 -30
  501. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +0 -59
  502. package/esm2022/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.mjs +0 -66
  503. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +0 -33
  504. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +0 -38
  505. package/esm2022/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.mjs +0 -42
  506. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +0 -50
  507. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +0 -43
  508. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +0 -24
  509. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +0 -165
  510. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +0 -60
  511. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +0 -60
  512. package/esm2022/lib/components/kv-inputs/kv-select-button/kv-select-button.component.mjs +0 -46
  513. package/esm2022/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.mjs +0 -37
  514. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +0 -42
  515. package/esm2022/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.mjs +0 -58
  516. package/esm2022/lib/components/kv-label/kv-label.component.mjs +0 -15
  517. package/esm2022/lib/components/kv-label/kv-label.module.mjs +0 -24
  518. package/esm2022/lib/components/kv-layout/dropdown-master/dropdown-master.component.mjs +0 -28
  519. package/esm2022/lib/components/kv-layout/kv-layout.module.mjs +0 -72
  520. package/esm2022/lib/components/kv-layout/layout/kv-layout.component.mjs +0 -433
  521. package/esm2022/lib/components/kv-layout/top-icons/top-icons.component.mjs +0 -15
  522. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +0 -16
  523. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +0 -28
  524. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +0 -29
  525. package/esm2022/lib/components/kv-login/kv-login.component.mjs +0 -62
  526. package/esm2022/lib/components/kv-login/kv-login.module.mjs +0 -47
  527. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +0 -98
  528. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +0 -20
  529. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +0 -225
  530. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +0 -59
  531. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +0 -190
  532. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +0 -41
  533. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.component.mjs +0 -205
  534. package/esm2022/lib/components/kv-page-stepper/kv-page-stepper.module.mjs +0 -51
  535. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +0 -386
  536. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +0 -39
  537. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +0 -58
  538. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +0 -28
  539. package/esm2022/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.mjs +0 -62
  540. package/esm2022/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.mjs +0 -28
  541. package/esm2022/lib/components/kv-report/kv-report.component.mjs +0 -44
  542. package/esm2022/lib/components/kv-report/kv-report.module.mjs +0 -24
  543. package/esm2022/lib/components/kv-stepper/kv-stepper.component.mjs +0 -74
  544. package/esm2022/lib/components/kv-stepper/kv-stepper.module.mjs +0 -47
  545. package/esm2022/lib/components/kv-steps/kv-steps.component.mjs +0 -105
  546. package/esm2022/lib/components/kv-table/kv-table.component.mjs +0 -673
  547. package/esm2022/lib/components/kv-table/kv-table.module.mjs +0 -40
  548. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +0 -341
  549. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +0 -45
  550. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.component.mjs +0 -516
  551. package/esm2022/lib/components/kv-table-expandable/kv-table-expandable.module.mjs +0 -40
  552. package/esm2022/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.mjs +0 -17
  553. package/esm2022/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.mjs +0 -18
  554. package/esm2022/lib/components/kv-table-viewer/kv-table-viewer.component.mjs +0 -184
  555. package/esm2022/lib/components/kv-tag/kv-tag.component.mjs +0 -18
  556. package/esm2022/lib/components/kv-tag/kv-tag.module.mjs +0 -24
  557. package/esm2022/lib/components/kv-tags/kv-tags.component.mjs +0 -35
  558. package/esm2022/lib/components/kv-tags/kv-tags.module.mjs +0 -27
  559. package/esm2022/lib/components/kv-timeline/kv-timeline.component.mjs +0 -71
  560. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +0 -331
  561. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +0 -39
  562. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +0 -70
  563. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +0 -28
  564. package/esm2022/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.mjs +0 -40
  565. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +0 -68
  566. package/esm2022/lib/components/kv-workspace/logo/kv-workspace-logo.component.mjs +0 -22
  567. package/esm2022/lib/components/kv-workspace/master/kv-workspace-master.component.mjs +0 -78
  568. package/esm2022/lib/components/kv-workspace/workspace/kv-workspace.component.mjs +0 -87
  569. package/esm2022/public-api.mjs +0 -293
  570. package/fesm2022/keevo-components.mjs +0 -11977
  571. package/fesm2022/keevo-components.mjs.map +0 -1
  572. package/index.d.ts +0 -5
  573. package/lib/api/base-components/base-component-button.d.ts +0 -15
  574. package/lib/api/base-components/base-component-chart.d.ts +0 -40
  575. package/lib/api/base-components/base-component-crud-form.d.ts +0 -149
  576. package/lib/api/base-components/base-component-crud-list.d.ts +0 -70
  577. package/lib/api/base-components/base-component-crud.d.ts +0 -36
  578. package/lib/api/base-components/base-component-dropdown-external.d.ts +0 -15
  579. package/lib/api/base-components/base-component-dropdown.d.ts +0 -57
  580. package/lib/api/base-components/base-component-input.d.ts +0 -33
  581. package/lib/api/base-components/base-component-multi-select.d.ts +0 -40
  582. package/lib/api/base-components/base-component-table.d.ts +0 -88
  583. package/lib/api/base-components/base-component.d.ts +0 -22
  584. package/lib/api/components/chart/chart.config.d.ts +0 -14
  585. package/lib/api/components/chart/chart.model.d.ts +0 -12
  586. package/lib/api/components/chart/orchart.config.d.ts +0 -41
  587. package/lib/api/components/chart/orchartnode.d.ts +0 -34
  588. package/lib/api/components/dropdown/filtro.combo.d.ts +0 -4
  589. package/lib/api/components/stepper/kv-stepperpanel.d.ts +0 -9
  590. package/lib/api/components/table/action-item.d.ts +0 -13
  591. package/lib/api/components/table/kv-menuitem.d.ts +0 -152
  592. package/lib/api/components/table/table-dropdown-control.d.ts +0 -6
  593. package/lib/api/components/table/table.config.column.d.ts +0 -38
  594. package/lib/api/components/table/table.config.d.ts +0 -36
  595. package/lib/api/components/table/table.paginate.d.ts +0 -10
  596. package/lib/api/components/table/tableedit.config.column.d.ts +0 -11
  597. package/lib/api/components/tree-table/tree-table-keys.d.ts +0 -12
  598. package/lib/api/components/tree-table/tree-table.config.d.ts +0 -31
  599. package/lib/api/directives/directives.module.d.ts +0 -9
  600. package/lib/api/directives/drag/drag.directive.d.ts +0 -11
  601. package/lib/api/directives/stepper/dynamicinput.directive.d.ts +0 -15
  602. package/lib/api/directives/template/template.directive.d.ts +0 -11
  603. package/lib/api/helpers/component-providers.d.ts +0 -2
  604. package/lib/api/helpers/keevo-validators.d.ts +0 -18
  605. package/lib/api/helpers/translate-primeng.d.ts +0 -4
  606. package/lib/api/modules/primeng.module.d.ts +0 -69
  607. package/lib/api/pipes/capitalize.pipe.d.ts +0 -10
  608. package/lib/api/pipes/cpfcnpj.pipe.d.ts +0 -7
  609. package/lib/api/pipes/mask.pipe.d.ts +0 -7
  610. package/lib/api/pipes/pipes.module.d.ts +0 -11
  611. package/lib/api/pipes/telefone.pipe.d.ts +0 -7
  612. package/lib/api/services/base.api.service.d.ts +0 -25
  613. package/lib/api/services/breadcrumbs.service.d.ts +0 -16
  614. package/lib/api/services/chat.service.d.ts +0 -17
  615. package/lib/api/services/component.service.d.ts +0 -11
  616. package/lib/api/services/docs.service.d.ts +0 -12
  617. package/lib/api/services/form.service.d.ts +0 -31
  618. package/lib/api/services/image.cutter.service.d.ts +0 -16
  619. package/lib/api/services/imagens.service.d.ts +0 -10
  620. package/lib/api/services/notification.service.d.ts +0 -26
  621. package/lib/api/services/object.service.d.ts +0 -9
  622. package/lib/api/services/orgchart.service.d.ts +0 -20
  623. package/lib/api/services/pdf.service.d.ts +0 -7
  624. package/lib/api/types/breadcrumb.model.d.ts +0 -5
  625. package/lib/components/keevo-components.module.d.ts +0 -38
  626. package/lib/components/kv-avatar/kv-avatar.component.d.ts +0 -36
  627. package/lib/components/kv-avatar/kv-avatar.module.d.ts +0 -15
  628. package/lib/components/kv-button/kv-button.component.d.ts +0 -24
  629. package/lib/components/kv-button/kv-button.module.d.ts +0 -9
  630. package/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.d.ts +0 -11
  631. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +0 -19
  632. package/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.d.ts +0 -7
  633. package/lib/components/kv-buttons/kv-button-success/kv-button-success.component.d.ts +0 -7
  634. package/lib/components/kv-buttons/kv-button.module.d.ts +0 -11
  635. package/lib/components/kv-card-selection/kv-card-selection.component.d.ts +0 -25
  636. package/lib/components/kv-card-selection/kv-card-selection.module.d.ts +0 -10
  637. package/lib/components/kv-carousel/kv-carousel.component.d.ts +0 -17
  638. package/lib/components/kv-carousel/kv-carousel.module.d.ts +0 -9
  639. package/lib/components/kv-chart/kv-chart.component.d.ts +0 -57
  640. package/lib/components/kv-chart/kv-chart.module.d.ts +0 -10
  641. package/lib/components/kv-confirmation-modal/kv-confirmation-modal.component.d.ts +0 -12
  642. package/lib/components/kv-confirmation-modal/kv-confirmation-modal.module.d.ts +0 -10
  643. package/lib/components/kv-content-viewer/kv-content-viewer.component.d.ts +0 -56
  644. package/lib/components/kv-content-viewer/kv-content-viewer.module.d.ts +0 -14
  645. package/lib/components/kv-error/kv-error.component.d.ts +0 -12
  646. package/lib/components/kv-error/kv-error.module.d.ts +0 -10
  647. package/lib/components/kv-file-upload/kv-file-upload.component.d.ts +0 -35
  648. package/lib/components/kv-file-upload/kv-file-upload.module.d.ts +0 -10
  649. package/lib/components/kv-file-viewer/kv-file-viewer.component.d.ts +0 -21
  650. package/lib/components/kv-file-viewer/kv-file-viewer.module.d.ts +0 -8
  651. package/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.component.d.ts +0 -24
  652. package/lib/components/kv-file-viewer-novo/kv-file-viewer-novo.module.d.ts +0 -9
  653. package/lib/components/kv-filter-card/kv-filter-card.component.d.ts +0 -13
  654. package/lib/components/kv-filter-card/kv-filter-card.module.d.ts +0 -10
  655. package/lib/components/kv-filter-cards/kv-filter-cards.component.d.ts +0 -32
  656. package/lib/components/kv-filter-cards/kv-filter-cards.module.d.ts +0 -9
  657. package/lib/components/kv-filter-cards/kv-filter-cards.pipe.d.ts +0 -7
  658. package/lib/components/kv-filter-fieldset/kv-filter-fieldset.component.d.ts +0 -10
  659. package/lib/components/kv-filter-fieldset/kv-filter-fieldset.module.d.ts +0 -9
  660. package/lib/components/kv-g-icon/kv-g-icon.component.d.ts +0 -5
  661. package/lib/components/kv-g-icon/kv-g-icon.module.d.ts +0 -9
  662. package/lib/components/kv-home-card/kv-home-card.component.d.ts +0 -24
  663. package/lib/components/kv-home-card/kv-home-card.module.d.ts +0 -11
  664. package/lib/components/kv-image-upload/kv-image-upload.component.d.ts +0 -34
  665. package/lib/components/kv-image-upload/kv-image-upload.module.d.ts +0 -8
  666. package/lib/components/kv-inputs/kv-check/kv-check.component.d.ts +0 -12
  667. package/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.d.ts +0 -33
  668. package/lib/components/kv-inputs/kv-editor/components/kv-instrucoes-report/kv-instrucoes-report.component.d.ts +0 -8
  669. package/lib/components/kv-inputs/kv-editor/components/kv-report-modal/kv-report-modal.component.d.ts +0 -14
  670. package/lib/components/kv-inputs/kv-editor/config/kv-editor.config.d.ts +0 -55
  671. package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +0 -69
  672. package/lib/components/kv-inputs/kv-editor/services/kv-editor-mention.service.d.ts +0 -41
  673. package/lib/components/kv-inputs/kv-editor/services/kv-editor-pdf.service.d.ts +0 -41
  674. package/lib/components/kv-inputs/kv-editor/services/kv-editor-quill.service.d.ts +0 -28
  675. package/lib/components/kv-inputs/kv-editor/services/kv-editor-relatorio.service.d.ts +0 -45
  676. package/lib/components/kv-inputs/kv-editor/types/kv-editor.types.d.ts +0 -32
  677. package/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.d.ts +0 -34
  678. package/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.d.ts +0 -12
  679. package/lib/components/kv-inputs/kv-input-number/kv-input-number.component.d.ts +0 -19
  680. package/lib/components/kv-inputs/kv-input-number-addon/kv-input-number-addon.component.d.ts +0 -21
  681. package/lib/components/kv-inputs/kv-input-password/kv-input-password.component.d.ts +0 -13
  682. package/lib/components/kv-inputs/kv-input-text/kv-input-text.component.d.ts +0 -11
  683. package/lib/components/kv-inputs/kv-input-text-addon/kv-input-text-addon.component.d.ts +0 -13
  684. package/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.d.ts +0 -18
  685. package/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.d.ts +0 -16
  686. package/lib/components/kv-inputs/kv-input-time/kv-input-time.component.d.ts +0 -10
  687. package/lib/components/kv-inputs/kv-inputs.module.d.ts +0 -38
  688. package/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.d.ts +0 -20
  689. package/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.d.ts +0 -20
  690. package/lib/components/kv-inputs/kv-select-button/kv-select-button.component.d.ts +0 -19
  691. package/lib/components/kv-inputs/kv-select-buttons/kv-select-buttons.component.d.ts +0 -26
  692. package/lib/components/kv-inputs/kv-switch/kv-switch.component.d.ts +0 -16
  693. package/lib/components/kv-inputs/kv-tree-multi-select/kv-tree-multi-select.component.d.ts +0 -25
  694. package/lib/components/kv-label/kv-label.component.d.ts +0 -7
  695. package/lib/components/kv-label/kv-label.module.d.ts +0 -8
  696. package/lib/components/kv-layout/dropdown-master/dropdown-master.component.d.ts +0 -12
  697. package/lib/components/kv-layout/kv-layout.module.d.ts +0 -18
  698. package/lib/components/kv-layout/layout/kv-layout.component.d.ts +0 -156
  699. package/lib/components/kv-layout/top-icons/top-icons.component.d.ts +0 -16
  700. package/lib/components/kv-loader/kv-loader.component.d.ts +0 -7
  701. package/lib/components/kv-loader/kv-loader.module.d.ts +0 -9
  702. package/lib/components/kv-loader/kv-loader.service.d.ts +0 -10
  703. package/lib/components/kv-login/kv-login.component.d.ts +0 -32
  704. package/lib/components/kv-login/kv-login.module.d.ts +0 -13
  705. package/lib/components/kv-modal/kv-modal.component.d.ts +0 -27
  706. package/lib/components/kv-modal/kv-modal.module.d.ts +0 -10
  707. package/lib/components/kv-orgchart/kv-orgchart.component.d.ts +0 -45
  708. package/lib/components/kv-orgchart/kv-orgchart.module.d.ts +0 -17
  709. package/lib/components/kv-page-form/kv-page-form.component.d.ts +0 -98
  710. package/lib/components/kv-page-form/kv-page-form.module.d.ts +0 -12
  711. package/lib/components/kv-page-stepper/kv-page-stepper.component.d.ts +0 -84
  712. package/lib/components/kv-page-stepper/kv-page-stepper.module.d.ts +0 -14
  713. package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +0 -70
  714. package/lib/components/kv-pick-list/kv-pick-list.module.d.ts +0 -11
  715. package/lib/components/kv-progress-bar/kv-progress-bar.component.d.ts +0 -67
  716. package/lib/components/kv-progress-bar/kv-progress-bar.module.d.ts +0 -9
  717. package/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.component.d.ts +0 -71
  718. package/lib/components/kv-progress-bar-alternative/kv-progress-bar-alternative.module.d.ts +0 -9
  719. package/lib/components/kv-report/kv-report.component.d.ts +0 -18
  720. package/lib/components/kv-report/kv-report.module.d.ts +0 -8
  721. package/lib/components/kv-stepper/kv-stepper.component.d.ts +0 -32
  722. package/lib/components/kv-stepper/kv-stepper.module.d.ts +0 -13
  723. package/lib/components/kv-steps/kv-steps.component.d.ts +0 -21
  724. package/lib/components/kv-table/kv-table.component.d.ts +0 -154
  725. package/lib/components/kv-table/kv-table.module.d.ts +0 -12
  726. package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +0 -66
  727. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +0 -15
  728. package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +0 -119
  729. package/lib/components/kv-table-expandable/kv-table-expandable.module.d.ts +0 -13
  730. package/lib/components/kv-table-viewer/components/actions-lote-field/actions-lote-field.component.d.ts +0 -8
  731. package/lib/components/kv-table-viewer/components/actions-row-menu/actions-row-menu.component.d.ts +0 -7
  732. package/lib/components/kv-table-viewer/kv-table-viewer.component.d.ts +0 -72
  733. package/lib/components/kv-tag/kv-tag.component.d.ts +0 -7
  734. package/lib/components/kv-tag/kv-tag.module.d.ts +0 -8
  735. package/lib/components/kv-tags/kv-tags.component.d.ts +0 -31
  736. package/lib/components/kv-tags/kv-tags.module.d.ts +0 -8
  737. package/lib/components/kv-timeline/kv-timeline.component.d.ts +0 -18
  738. package/lib/components/kv-tree-table/kv-tree-table.component.d.ts +0 -86
  739. package/lib/components/kv-tree-table/kv-tree-table.module.d.ts +0 -11
  740. package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +0 -21
  741. package/lib/components/kv-tree-view/kv-tree-view.module.d.ts +0 -9
  742. package/lib/components/kv-workspace/empresa/kv-workspace-empresa.component.d.ts +0 -14
  743. package/lib/components/kv-workspace/kv-workspace.module.d.ts +0 -19
  744. package/lib/components/kv-workspace/logo/kv-workspace-logo.component.d.ts +0 -11
  745. package/lib/components/kv-workspace/master/kv-workspace-master.component.d.ts +0 -25
  746. package/lib/components/kv-workspace/workspace/kv-workspace.component.d.ts +0 -37
@@ -1,266 +0,0 @@
1
- import { Component, computed, EventEmitter, inject, input, Input, model, Output, signal, ViewChild, } from '@angular/core';
2
- import { DialogService } from 'primeng/dynamicdialog';
3
- import { BaseComponentInput } from '../../../api/base-components/base-component-input';
4
- import { ComponentProviders } from '../../../api/helpers/component-providers';
5
- import { KvInstrucoesReportComponent } from './components/kv-instrucoes-report/kv-instrucoes-report.component';
6
- import { KvEditorQuillService, KvEditorRelatorioService, KvEditorMentionService, KvEditorPdfService } from './kv-editor';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../../api/services/component.service";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "@angular/forms";
11
- import * as i4 from "../../kv-error/kv-error.component";
12
- import * as i5 from "primeng/tooltip";
13
- import * as i6 from "primeng/divider";
14
- import * as i7 from "primeng/progressbar";
15
- import * as i8 from "primeng/overlaypanel";
16
- import * as i9 from "primeng/skeleton";
17
- import * as i10 from "../../kv-tags/kv-tags.component";
18
- export class KvEditorComponent extends BaseComponentInput {
19
- constructor(componentService) {
20
- super(componentService);
21
- // Injeção de serviços
22
- this.quillService = inject(KvEditorQuillService);
23
- this.relatorioService = inject(KvEditorRelatorioService);
24
- this.mentionService = inject(KvEditorMentionService);
25
- this.pdfService = inject(KvEditorPdfService);
26
- this.dialogService = inject(DialogService);
27
- // Propriedades de configuração
28
- /**
29
- * @deprecated Essa propriedade não será mais utilizada por esse componente nas próximas versões.
30
- */
31
- this.canvaHeigth = '380px';
32
- this.contentType = 'html';
33
- this.readonly = false;
34
- this.debug = false;
35
- // Eventos
36
- this.onTextChange = new EventEmitter();
37
- this.onSelectionChange = new EventEmitter();
38
- this.outputRaw = new EventEmitter();
39
- this.outputHtml = new EventEmitter();
40
- // Propriedades internas
41
- this.updatingEditor = false;
42
- this.lastSelectionRange = null;
43
- this.editorReadyPromise = new Promise((resolve) => {
44
- this.editorReadyResolver = resolve;
45
- });
46
- this.htmlDoEditor = '';
47
- // Signals para controle de estado
48
- this.initLoadComplete = signal(false);
49
- this.isLoading = signal(true);
50
- this.editorToolbarHeight = signal('3rem');
51
- // tipoVisualizacao = signal<'valor' | 'descricao'>('descricao');
52
- this.filteredVariables = signal([]);
53
- this.clearedTemplate = signal(false);
54
- // Inputs para relatórios
55
- this.relatorios = input([]);
56
- this.idRelatorioInitial = model(0);
57
- this.printButton = input(true);
58
- this.labelEmptyDropdown = input('Selecione um relatório');
59
- this.instrucoesTemplate = input(undefined);
60
- // Computed properties para relatórios
61
- this.idRelatorioSelected = computed(() => this.relatorioService.getIdRelatorioSelected());
62
- this.relatorio = computed(() => this.relatorioService.getRelatorioSelected());
63
- this.isLoadingPdf = computed(() => this.pdfService.getIsLoadingPdf());
64
- this.messages = [{ severity: 'info', detail: 'Message Content' }];
65
- }
66
- // Métodos para gerenciar relatórios
67
- setRelatorioPorId(id) {
68
- const relatorio = this.relatorioService.setRelatorioPorId(id);
69
- if (relatorio) {
70
- this.setRelatorio(relatorio);
71
- }
72
- }
73
- setRelatorio(relatorio) {
74
- this.clearedTemplate.set(false);
75
- this.relatorioService.setRelatorio(relatorio);
76
- const modelo = relatorio.modeloRelatorio || '';
77
- const variaveis = relatorio.variaveis || [];
78
- this.htmlDoEditor = this.relatorioService.renderContrato(modelo, variaveis);
79
- this.updatingEditor = true;
80
- this.escrevaValor(this.htmlDoEditor);
81
- }
82
- ngOnInit() {
83
- super.ngOnInit();
84
- // Inicializa os relatórios no serviço
85
- this.relatorioService.setRelatorios(this.relatorios());
86
- if (!this.quill) {
87
- this.handleInit();
88
- }
89
- setTimeout(() => {
90
- this.isLoading.set(false);
91
- }, 1000);
92
- if (this.idRelatorioInitial()) {
93
- this.clearedTemplate.set(false);
94
- this.setRelatorioPorId(this.idRelatorioInitial());
95
- }
96
- else
97
- this.clearedTemplate.set(true);
98
- }
99
- async handleInit() {
100
- await this.quillService.loadCss();
101
- this.initializeQuillEditor();
102
- }
103
- initializeQuillEditor() {
104
- const config = {
105
- theme: 'snow',
106
- modules: {
107
- toolbar: '#kv-editor-toolbar',
108
- },
109
- placeholder: this.label ? this.label : '',
110
- readOnly: this.readonly,
111
- debug: this.debug,
112
- };
113
- this.quill = this.quillService.createQuillInstance('#kv-editor', config);
114
- this.setupQuillEvents();
115
- this.editorReadyResolver();
116
- this.initLoadComplete.set(true);
117
- setTimeout(() => {
118
- const control = this.formControl;
119
- if (control && control.markAsPristine) {
120
- control.markAsPristine();
121
- control.markAsUntouched();
122
- }
123
- }, 0);
124
- }
125
- setupQuillEvents() {
126
- this.quill.on('selection-change', (range, oldRange, source) => {
127
- if (range) {
128
- this.lastSelectionRange = range;
129
- }
130
- this.onSelectionChange.emit({
131
- range: range,
132
- oldRange: oldRange,
133
- source: source,
134
- });
135
- });
136
- this.quill.on('text-change', (delta, oldContents, source) => {
137
- if (this.relatorios().length > 0) {
138
- this.handleMention();
139
- }
140
- if (!this.updatingEditor) {
141
- this.updatingEditor = false;
142
- this.escrevaValor(this.quill.getSemanticHTML(), this.quill.getText());
143
- this.onTextChange.emit({
144
- delta: delta,
145
- oldContents: oldContents,
146
- source: source,
147
- });
148
- this.outputRaw.emit(this.quill.getText());
149
- this.outputHtml.emit(this.quill.getSemanticHTML());
150
- }
151
- });
152
- }
153
- writeValue(value) {
154
- this.updatingEditor = true;
155
- this.escrevaValor(value);
156
- }
157
- async escrevaValor(htmlvalue, rawvalue) {
158
- if (!this.initLoadComplete()) {
159
- await this.editorReadyPromise;
160
- }
161
- if (this.quill) {
162
- if (this.updatingEditor) {
163
- this.quill.clipboard.dangerouslyPasteHTML(htmlvalue);
164
- }
165
- this.updatingEditor = false;
166
- this.value = htmlvalue;
167
- if (rawvalue == "\n" || this.value == "\n") {
168
- this.value = '';
169
- }
170
- }
171
- else {
172
- this.updatingEditor = false;
173
- }
174
- this.outputHtml.emit(this.quill.getSemanticHTML());
175
- }
176
- getEditorSize() {
177
- let editorFieldHeight = document.getElementById('kv-editor-toolbar')?.offsetHeight;
178
- if (editorFieldHeight) {
179
- this.editorToolbarHeight.set(`${editorFieldHeight}px`);
180
- }
181
- }
182
- async openRelatorio() {
183
- if (this.isLoadingPdf())
184
- return;
185
- const htmlContent = this.quill.getSemanticHTML();
186
- const relatorio = this.relatorio();
187
- // const tipoVisualizacao = this.tipoVisualizacao();
188
- await this.pdfService.openRelatorio(htmlContent, relatorio, 'valor');
189
- }
190
- // Métodos para sistema de menções
191
- handleMention() {
192
- if (!this.relatorio())
193
- return;
194
- const result = this.mentionService.handleMention(this.quill, this.relatorio().variaveis);
195
- this.filteredVariables.set(result.filteredVariables);
196
- if (result.shouldShowPanel && result.mentionBounds) {
197
- this.showVariablesPanel(result.mentionBounds);
198
- }
199
- else {
200
- this.closeVariablesPanel();
201
- }
202
- }
203
- showVariablesPanel(bounds) {
204
- const anchorEl = this.mentionAnchor.nativeElement;
205
- anchorEl.style.top = `${bounds.top}px`;
206
- anchorEl.style.left = `${bounds.left}px`;
207
- this.opVariables.show(null, anchorEl);
208
- }
209
- selectVariableFromPanel(variable) {
210
- this.mentionService.insertVariable(this.quill, variable);
211
- this.closeVariablesPanel();
212
- }
213
- closeVariablesPanel() {
214
- if (this.opVariables) {
215
- this.opVariables.hide();
216
- }
217
- this.mentionService.closeMention();
218
- }
219
- showInstrucoes() {
220
- this.dialogService.open(KvInstrucoesReportComponent, {
221
- header: 'Instruções',
222
- width: '40%',
223
- height: '30%',
224
- modal: true,
225
- closable: true,
226
- data: {
227
- template: this.instrucoesTemplate()
228
- }
229
- });
230
- }
231
- clearTemplate() {
232
- // Limpa o template do editor
233
- this.clearedTemplate.set(true);
234
- this.setRelatorioPorId(0);
235
- this.writeValue('');
236
- }
237
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, deps: [{ token: i1.ComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
238
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvEditorComponent, selector: "kv-editor", inputs: { canvaHeigth: { classPropertyName: "canvaHeigth", publicName: "canvaHeigth", isSignal: false, isRequired: false, transformFunction: null }, contentType: { classPropertyName: "contentType", publicName: "contentType", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: false, isRequired: false, transformFunction: null }, relatorios: { classPropertyName: "relatorios", publicName: "relatorios", isSignal: true, isRequired: false, transformFunction: null }, idRelatorioInitial: { classPropertyName: "idRelatorioInitial", publicName: "idRelatorioInitial", isSignal: true, isRequired: false, transformFunction: null }, printButton: { classPropertyName: "printButton", publicName: "printButton", isSignal: true, isRequired: false, transformFunction: null }, labelEmptyDropdown: { classPropertyName: "labelEmptyDropdown", publicName: "labelEmptyDropdown", isSignal: true, isRequired: false, transformFunction: null }, instrucoesTemplate: { classPropertyName: "instrucoesTemplate", publicName: "instrucoesTemplate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onTextChange: "onTextChange", onSelectionChange: "onSelectionChange", outputRaw: "outputRaw", outputHtml: "outputHtml", idRelatorioInitial: "idRelatorioInitialChange" }, providers: ComponentProviders(KvEditorComponent), viewQueries: [{ propertyName: "opVariables", first: true, predicate: ["opVariables"], descendants: true }, { propertyName: "mentionAnchor", first: true, predicate: ["mentionAnchor"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"kv-editor-container h-full max-h-full flex flex-column overflow-hidden\"\r\n>\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-column flex-initial\"\r\n >\r\n @if(relatorios().length > 0) {\r\n <div class=\"flex flex-row justify-content-between\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-green-600 font-medium\"\r\n >\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n !clearedTemplate() ? (relatorio()?.label || labelEmptyDropdown()) : labelEmptyDropdown()\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n @if(!clearedTemplate()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"clearTemplate()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-orange-600 font-medium\"\r\n [pTooltip]=\"'Limpar Template'\"\r\n >\r\n layers_clear\r\n </span>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-blue-600 font-medium\"\r\n >\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n @if(printButton()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n }\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"arial\">Arial</option>\r\n <option value=\"times-new-roman\">Times New Roman</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style=\"\r\n height: 3px;\r\n border-right: 1px solid #e5e7eb;\r\n border-left: 1px solid #e5e7eb;\r\n border-top: none;\r\n border-bottom: none;\r\n \"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto w-full flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n style=\"border-top: none\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 16rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div\r\n #mentionAnchor\r\n style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"\r\n ></div>\r\n</div>\r\n\r\n<p-overlayPanel\r\n #opVariables\r\n [appendTo]=\"'body'\"\r\n (onHide)=\"closeVariablesPanel()\"\r\n>\r\n <div\r\n class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\"\r\n >\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\"\r\n >\r\n {{ variable.descricao }} (\r\n <span class=\"text-gray-400\">{{ variable.value }}</span> )\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-font-arial{font-family:Arial,Arial,sans-serif}:host ::ng-deep .ql-font-times-new-roman{font-family:Times New Roman,Times,serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:ng-deep p{text-align:justify!important}::ng-deep .scrollstyle,::ng-deep .ql-editor{overflow-x:hidden}::ng-deep .scrollstyle::-webkit-scrollbar,::ng-deep .ql-editor::-webkit-scrollbar{width:6px}::ng-deep .scrollstyle::-webkit-scrollbar:hover,::ng-deep .ql-editor::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scrollstyle::-webkit-scrollbar-thumb,::ng-deep .ql-editor::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scrollstyle:hover::-webkit-scrollbar-thumb,::ng-deep .ql-editor:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scrollstyle::-webkit-scrollbar-track,::ng-deep .ql-editor::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i4.KvErrorComponent, selector: "kv-error", inputs: ["formControl", "hasError"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i6.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i7.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "component", type: i8.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i9.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i10.KvTagsComponent, selector: "kv-tags", inputs: ["tags", "hover"], outputs: ["onClickTag"] }] }); }
239
- }
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorComponent, decorators: [{
241
- type: Component,
242
- args: [{ selector: 'kv-editor', providers: ComponentProviders(KvEditorComponent), template: "<div\r\n class=\"kv-editor-container h-full max-h-full flex flex-column overflow-hidden\"\r\n>\r\n <div\r\n #editor\r\n id=\"kv-editor-toolbar\"\r\n [ngClass]=\"{ 'error-border-toolbar': hasControlError() }\"\r\n class=\"flex flex-column flex-initial\"\r\n >\r\n @if(relatorios().length > 0) {\r\n <div class=\"flex flex-row justify-content-between\">\r\n <div class=\"flex flex-row gap-2\">\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"op.toggle($event)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-green-600 font-medium\"\r\n >\r\n contract\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">{{\r\n !clearedTemplate() ? (relatorio()?.label || labelEmptyDropdown()) : labelEmptyDropdown()\r\n }}</span>\r\n <span class=\"material-symbols-outlined text-lg\">\r\n keyboard_arrow_down\r\n </span>\r\n </div>\r\n\r\n @if(!clearedTemplate()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"clearTemplate()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-orange-600 font-medium\"\r\n [pTooltip]=\"'Limpar Template'\"\r\n >\r\n layers_clear\r\n </span>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"showInstrucoes()\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined text-lg text-blue-600 font-medium\"\r\n >\r\n info\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Instru\u00E7\u00F5es</span>\r\n </div>\r\n </div>\r\n\r\n @if(printButton()) {\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 p-2 border-round-lg border-1 border-gray-200 hover:shadow-1 hover:bg-gray-100 cursor-pointer transition-all transition-duration-300\"\r\n (click)=\"openRelatorio()\"\r\n >\r\n <span class=\"material-symbols-outlined text-lg font-medium\">\r\n print\r\n </span>\r\n <span class=\"font-semibold text-xs text-gray-600\">Imprimir</span>\r\n </div>\r\n }\r\n </div>\r\n\r\n <p-divider class=\"w-full\"></p-divider>\r\n\r\n }\r\n\r\n <div\r\n class=\"flex flex-row align-items-center justify-content-between w-full flex-initial\"\r\n >\r\n @if(isLoading()) {\r\n\r\n <div class=\"flex flex-row align-items-center gap-3 w-full\">\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n\r\n <p-skeleton\r\n styleClass=\"w-6rem\"\r\n [style]=\"{ height: '2rem' }\"\r\n ></p-skeleton>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"flex-row align-items-center flex-wrap gap-2 {{\r\n isLoading() ? 'hidden' : 'flex'\r\n }} w-full\"\r\n >\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-font\">\r\n <option value=\"roboto\">Roboto</option>\r\n <option value=\"arial\">Arial</option>\r\n <option value=\"times-new-roman\">Times New Roman</option>\r\n <option value=\"monospace\">Monospace</option>\r\n <option value=\"inter\">Inter</option>\r\n <option selected>Sans Serif</option>\r\n <option value=\"serif\">Serif</option>\r\n </select>\r\n\r\n <select class=\"ql-header\">\r\n <option value=\"1\">Titulo</option>\r\n <option value=\"2\">Subtitulo</option>\r\n <option selected>Normal</option>\r\n </select>\r\n\r\n <span class=\"ql-format-group\">\r\n <select title=\"Size\" class=\"ql-size\">\r\n <option value=\"15px\">15px</option>\r\n <option value=\"20px\">20px</option>\r\n <option value=\"30px\">30px</option>\r\n <option value=\"40px\">40px</option>\r\n <option value=\"50px\">50px</option>\r\n <option value=\"70px\">70px</option>\r\n <option value=\"90px\">90px</option>\r\n </select>\r\n </span>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-bold\"></button>\r\n <button class=\"ql-italic\"></button>\r\n <button class=\"ql-underline\"></button>\r\n <button class=\"ql-strike\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <select class=\"ql-color\"></select>\r\n <select class=\"ql-background\"></select>\r\n </span>\r\n\r\n @if(true) {\r\n <!-- <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-header\" value=\"1\"></button>\r\n <button class=\"ql-header\" value=\"2\"></button>\r\n </span> -->\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-link\"></button>\r\n <button class=\"ql-image\"></button>\r\n <button class=\"ql-video\"></button>\r\n </span>\r\n\r\n <p-divider layout=\"vertical\"></p-divider>\r\n\r\n <span class=\"ql-formats border-round-md\">\r\n <button class=\"ql-list\" value=\"ordered\"></button>\r\n <button class=\"ql-list\" value=\"bullet\"></button>\r\n <select class=\"ql-align\"></select>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n style=\"\r\n height: 3px;\r\n border-right: 1px solid #e5e7eb;\r\n border-left: 1px solid #e5e7eb;\r\n border-top: none;\r\n border-bottom: none;\r\n \"\r\n >\r\n @if(isLoadingPdf()) {\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" />\r\n }\r\n </div>\r\n\r\n <div\r\n id=\"kv-editor\"\r\n class=\"overflow-auto w-full flex-1 scrollstyle\"\r\n [ngClass]=\"{\r\n 'error-border': hasControlError(),\r\n 'pointer-events-none opacity-60': isLoadingPdf()\r\n }\"\r\n style=\"border-top: none\"\r\n ></div>\r\n</div>\r\n<kv-error [hasError]=\"hasControlError()\">{{ erroMessage() }}</kv-error>\r\n\r\n<!-- <link href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\" rel=\"stylesheet\" /> -->\r\n<link href=\"https://fonts.googleapis.com/css?family=Roboto\" rel=\"stylesheet\" />\r\n<script src=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js\"></script>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.bubble.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/atom-one-dark.min.css\"\r\n/>\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css\"\r\n/>\r\n\r\n<p-overlayPanel #op styleClass=\"overflow-hidden\">\r\n <div\r\n class=\"grid m-0 gap-2 p-2 max-w-20rem overflow-y-auto scrollstyle\"\r\n style=\"max-height: 16rem\"\r\n >\r\n @for(item of relatorios(); track $index) {\r\n <div\r\n class=\"col-12 cursor-pointer hover:bg-gray-100 transition-colors transition-duration-200 border-round-lg shadow-2 flex flex-column gap-2\"\r\n (click)=\"setRelatorio(item)\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center gap-2 justify-content-between\"\r\n >\r\n <span class=\"text-sm font-medium w-full\">{{ item.label }}</span>\r\n\r\n <kv-tags\r\n class=\"transition-opacity transition-duration-300 {{\r\n item?.id == idRelatorioSelected() ? 'opacity-100' : 'opacity-0'\r\n }}\"\r\n [tags]=\"[{ label: 'Selecionado', severity: 'primary' }]\"\r\n ></kv-tags>\r\n </div>\r\n <span class=\"text-xs text-gray-500\">{{ item.descricao }}</span>\r\n </div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n\r\n<div class=\"kv-editor-container flex flex-column overflow-hidden relative\">\r\n <div\r\n #mentionAnchor\r\n style=\"position: fixed; width: 1px; height: 1px; opacity: 0\"\r\n ></div>\r\n</div>\r\n\r\n<p-overlayPanel\r\n #opVariables\r\n [appendTo]=\"'body'\"\r\n (onHide)=\"closeVariablesPanel()\"\r\n>\r\n <div\r\n class=\"flex flex-column gap-1 p-1 overflow-y-auto scroll-virtual border-round-lg\"\r\n style=\"max-height: 250px; min-width: 250px; background-color: #333333\"\r\n >\r\n @for(variable of filteredVariables(); track variable.id) {\r\n <div\r\n class=\"p-2 cursor-pointer transition-colors transition-duration-200 border-round-lg text-sm text-white option-dropdown\"\r\n (click)=\"selectVariableFromPanel(variable)\"\r\n >\r\n {{ variable.descricao }} (\r\n <span class=\"text-gray-400\">{{ variable.value }}</span> )\r\n </div>\r\n } @empty {\r\n <div class=\"p-2 text-sm text-gray-500\">Nenhuma vari\u00E1vel encontrada.</div>\r\n }\r\n </div>\r\n</p-overlayPanel>\r\n", styles: [":host ::ng-deep .ql-font-roboto{font-family:Roboto,sans-serif}:host ::ng-deep .ql-font-inter{font-family:Inter var,sans-serif}:host ::ng-deep .ql-font-arial{font-family:Arial,Arial,sans-serif}:host ::ng-deep .ql-font-times-new-roman{font-family:Times New Roman,Times,serif}:host ::ng-deep .ql-tooltip.ql-editing[data-mode=video]{transform:translate(40%)}:host ::ng-deep #kv-editor-toolbar{border-radius:6px 6px 0 0;border:1px solid #e5e7eb}:host ::ng-deep #kv-editor{border-radius:0 0 6px 6px;border:1px solid #e5e7eb}.error-border-toolbar{transition:all ease-in .2s;border-top-color:#e24c4c!important;border-bottom-color:#e24c4c!important;border-left-color:#e24c4c!important;border-right-color:#e24c4c!important}.error-border{border-color:#e24c4c!important;transition:all ease-in .2s}:host ::ng-deep .blot-formatter__resize-handle{background:#eaeaea!important}:ng-deep p{text-align:justify!important}::ng-deep .scrollstyle,::ng-deep .ql-editor{overflow-x:hidden}::ng-deep .scrollstyle::-webkit-scrollbar,::ng-deep .ql-editor::-webkit-scrollbar{width:6px}::ng-deep .scrollstyle::-webkit-scrollbar:hover,::ng-deep .ql-editor::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scrollstyle::-webkit-scrollbar-thumb,::ng-deep .ql-editor::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scrollstyle:hover::-webkit-scrollbar-thumb,::ng-deep .ql-editor:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scrollstyle::-webkit-scrollbar-track,::ng-deep .ql-editor::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}:host ::ng-deep .editor-spinner-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80;display:flex;justify-content:center;align-items:center;z-index:100000;border-radius:inherit}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:after{background:#002542}::ng-deep .p-progressbar-indeterminate .p-progressbar-value:before{background:#002542}::ng-deep .scroll-virtual{overflow-x:hidden}::ng-deep .scroll-virtual::-webkit-scrollbar{width:8px}::ng-deep .scroll-virtual::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .scroll-virtual::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .scroll-virtual:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .scroll-virtual::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.option-dropdown{background-color:#333;transition:all ease-in .2s}.option-dropdown:hover{background-color:#444}\n"] }]
243
- }], ctorParameters: () => [{ type: i1.ComponentService }], propDecorators: { canvaHeigth: [{
244
- type: Input
245
- }], contentType: [{
246
- type: Input
247
- }], readonly: [{
248
- type: Input
249
- }], debug: [{
250
- type: Input
251
- }], onTextChange: [{
252
- type: Output
253
- }], onSelectionChange: [{
254
- type: Output
255
- }], outputRaw: [{
256
- type: Output
257
- }], outputHtml: [{
258
- type: Output
259
- }], opVariables: [{
260
- type: ViewChild,
261
- args: ['opVariables']
262
- }], mentionAnchor: [{
263
- type: ViewChild,
264
- args: ['mentionAnchor']
265
- }] } });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Iva3YtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUdSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBR0wsTUFBTSxFQUVOLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBRS9HLE9BQU8sRUFHTCxvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbkIsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7OztBQVFyQixNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQTBCO0lBRS9ELFlBQVksZ0JBQWtDO1FBQzVDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRzFCLHNCQUFzQjtRQUNkLGlCQUFZLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDNUMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixD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QXJCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFvQ21CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDSSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgaW5qZWN0LFxyXG4gIGlucHV0LFxyXG4gIElucHV0LFxyXG4gIG1vZGVsLFxyXG4gIE9uSW5pdCxcclxuICBvdXRwdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBzaWduYWwsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IFF1aWxsIGZyb20gJ3F1aWxsJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuXHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnRJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtaW5wdXQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQcm92aWRlcnMgfSBmcm9tICcuLi8uLi8uLi9hcGkvaGVscGVycy9jb21wb25lbnQtcHJvdmlkZXJzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEt2SW5zdHJ1Y29lc1JlcG9ydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9rdi1pbnN0cnVjb2VzLXJlcG9ydC9rdi1pbnN0cnVjb2VzLXJlcG9ydC5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBLdkVkaXRvclJlbGF0b3JpbyxcclxuICBLdkVkaXRvclZhcmlhdmVsLFxyXG4gIEt2RWRpdG9yUXVpbGxTZXJ2aWNlLFxyXG4gIEt2RWRpdG9yUmVsYXRvcmlvU2VydmljZSxcclxuICBLdkVkaXRvck1lbnRpb25TZXJ2aWNlLFxyXG4gIEt2RWRpdG9yUGRmU2VydmljZVxyXG59IGZyb20gJy4va3YtZWRpdG9yJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4va3YtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IENvbXBvbmVudFByb3ZpZGVycyhLdkVkaXRvckNvbXBvbmVudCksXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdkVkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnRJbnB1dDxzdHJpbmc+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29tcG9uZW50U2VydmljZTogQ29tcG9uZW50U2VydmljZSkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICAvLyBJbmplw6fDo28gZGUgc2VydmnDp29zXHJcbiAgcHJpdmF0ZSBxdWlsbFNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JRdWlsbFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVsYXRvcmlvU2VydmljZSA9IGluamVjdChLdkVkaXRvclJlbGF0b3Jpb1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgbWVudGlvblNlcnZpY2UgPSBpbmplY3QoS3ZFZGl0b3JNZW50aW9uU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBwZGZTZXJ2aWNlID0gaW5qZWN0KEt2RWRpdG9yUGRmU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgZGUgY29uZmlndXJhw6fDo29cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBFc3NhIHByb3ByaWVkYWRlIG7Do28gc2Vyw6EgbWFpcyB1dGlsaXphZGEgcG9yIGVzc2UgY29tcG9uZW50ZSBuYXMgcHLDs3hpbWFzIHZlcnPDtWVzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNhbnZhSGVpZ3RoOiBzdHJpbmcgPSAnMzgwcHgnO1xyXG5cclxuICBASW5wdXQoKSBjb250ZW50VHlwZTogJ2h0bWwnIHwgJ3RleHQnID0gJ2h0bWwnO1xyXG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gRXZlbnRvc1xyXG4gIEBPdXRwdXQoKSBvblRleHRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG91dHB1dFJhdzogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG91dHB1dEh0bWw6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBQcm9wcmllZGFkZXMgaW50ZXJuYXNcclxuICBwcml2YXRlIHVwZGF0aW5nRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uUmFuZ2U6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBlZGl0b3JSZWFkeVJlc29sdmVyITogKCkgPT4gdm9pZDtcclxuICBwcml2YXRlIGVkaXRvclJlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICB0aGlzLmVkaXRvclJlYWR5UmVzb2x2ZXIgPSByZXNvbHZlO1xyXG4gIH0pO1xyXG5cclxuICAvLyBJbnN0w6JuY2lhIGRvIFF1aWxsXHJcbiAgcXVpbGwhOiBRdWlsbDtcclxuICBodG1sRG9FZGl0b3IgPSAnJztcclxuXHJcbiAgLy8gU2lnbmFscyBwYXJhIGNvbnRyb2xlIGRlIGVzdGFkb1xyXG4gIGluaXRMb2FkQ29tcGxldGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzTG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcclxuICBlZGl0b3JUb29sYmFySGVpZ2h0ID0gc2lnbmFsPHN0cmluZz4oJzNyZW0nKTtcclxuICAvLyB0aXBvVmlzdWFsaXphY2FvID0gc2lnbmFsPCd2YWxvcicgfCAnZGVzY3JpY2FvJz4oJ2Rlc2NyaWNhbycpO1xyXG4gIGZpbHRlcmVkVmFyaWFibGVzID0gc2lnbmFsPEt2RWRpdG9yVmFyaWF2ZWxbXT4oW10pO1xyXG4gIGNsZWFyZWRUZW1wbGF0ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIC8vIElucHV0cyBwYXJhIHJlbGF0w7NyaW9zXHJcbiAgcmVsYXRvcmlvcyA9IGlucHV0PEt2RWRpdG9yUmVsYXRvcmlvW10+KFtdKTtcclxuICBpZFJlbGF0b3Jpb0luaXRpYWwgPSBtb2RlbDxudW1iZXI+KDApO1xyXG4gIHByaW50QnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgbGFiZWxFbXB0eURyb3Bkb3duID0gaW5wdXQ8c3RyaW5nPignU2VsZWNpb25lIHVtIHJlbGF0w7NyaW8nKTtcclxuICBpbnN0cnVjb2VzVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cclxuXHJcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBwYXJhIHJlbGF0w7NyaW9zXHJcbiAgaWRSZWxhdG9yaW9TZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVsYXRvcmlvU2VydmljZS5nZXRJZFJlbGF0b3Jpb1NlbGVjdGVkKCkpO1xyXG4gIHJlbGF0b3JpbyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVsYXRvcmlvU2VydmljZS5nZXRSZWxhdG9yaW9TZWxlY3RlZCgpKTtcclxuICBpc0xvYWRpbmdQZGYgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBkZlNlcnZpY2UuZ2V0SXNMb2FkaW5nUGRmKCkpO1xyXG5cclxuICAvLyBWaWV3Q2hpbGQgcGFyYSBvdmVybGF5IHBhbmVsc1xyXG4gIEBWaWV3Q2hpbGQoJ29wVmFyaWFibGVzJykgb3BWYXJpYWJsZXMhOiBPdmVybGF5UGFuZWw7XHJcbiAgQFZpZXdDaGlsZCgnbWVudGlvbkFuY2hvcicpIG1lbnRpb25BbmNob3IhOiBFbGVtZW50UmVmO1xyXG5cclxuICBtZXNzYWdlcyA9IFt7IHNldmVyaXR5OiAnaW5mbycsIGRldGFpbDogJ01lc3NhZ2UgQ29udGVudCcgfV07XHJcblxyXG4gIC8vIE3DqXRvZG9zIHBhcmEgZ2VyZW5jaWFyIHJlbGF0w7NyaW9zXHJcbiAgc2V0UmVsYXRvcmlvUG9ySWQoaWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgcmVsYXRvcmlvID0gdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3Jpb1BvcklkKGlkKTtcclxuICAgIGlmIChyZWxhdG9yaW8pIHtcclxuICAgICAgdGhpcy5zZXRSZWxhdG9yaW8ocmVsYXRvcmlvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFJlbGF0b3JpbyhyZWxhdG9yaW86IEt2RWRpdG9yUmVsYXRvcmlvKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyZWRUZW1wbGF0ZS5zZXQoZmFsc2UpO1xyXG4gICAgdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3JpbyhyZWxhdG9yaW8pO1xyXG4gICAgY29uc3QgbW9kZWxvID0gcmVsYXRvcmlvLm1vZGVsb1JlbGF0b3JpbyB8fCAnJztcclxuICAgIGNvbnN0IHZhcmlhdmVpcyA9IHJlbGF0b3Jpby52YXJpYXZlaXMgfHwgW107XHJcblxyXG4gICAgdGhpcy5odG1sRG9FZGl0b3IgPSB0aGlzLnJlbGF0b3Jpb1NlcnZpY2UucmVuZGVyQ29udHJhdG8obW9kZWxvLCB2YXJpYXZlaXMpO1xyXG4gICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IHRydWU7XHJcbiAgICB0aGlzLmVzY3JldmFWYWxvcih0aGlzLmh0bWxEb0VkaXRvcik7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgLy8gSW5pY2lhbGl6YSBvcyByZWxhdMOzcmlvcyBubyBzZXJ2acOnb1xyXG4gICAgdGhpcy5yZWxhdG9yaW9TZXJ2aWNlLnNldFJlbGF0b3Jpb3ModGhpcy5yZWxhdG9yaW9zKCkpO1xyXG5cclxuICAgIGlmICghdGhpcy5xdWlsbCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcclxuICAgIH0sIDEwMDApO1xyXG5cclxuICAgIGlmICh0aGlzLmlkUmVsYXRvcmlvSW5pdGlhbCgpKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJlZFRlbXBsYXRlLnNldChmYWxzZSk7XHJcbiAgICAgIHRoaXMuc2V0UmVsYXRvcmlvUG9ySWQodGhpcy5pZFJlbGF0b3Jpb0luaXRpYWwoKSk7XHJcbiAgICB9IGVsc2UgdGhpcy5jbGVhcmVkVGVtcGxhdGUuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMucXVpbGxTZXJ2aWNlLmxvYWRDc3MoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVF1aWxsRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUXVpbGxFZGl0b3IoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgIHRoZW1lOiAnc25vdycsXHJcbiAgICAgIG1vZHVsZXM6IHtcclxuICAgICAgICB0b29sYmFyOiAnI2t2LWVkaXRvci10b29sYmFyJyxcclxuICAgICAgfSxcclxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubGFiZWwgPyB0aGlzLmxhYmVsIDogJycsXHJcbiAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRvbmx5LFxyXG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5xdWlsbCA9IHRoaXMucXVpbGxTZXJ2aWNlLmNyZWF0ZVF1aWxsSW5zdGFuY2UoJyNrdi1lZGl0b3InLCBjb25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0dXBRdWlsbEV2ZW50cygpO1xyXG4gICAgdGhpcy5lZGl0b3JSZWFkeVJlc29sdmVyKCk7XHJcbiAgICB0aGlzLmluaXRMb2FkQ29tcGxldGUuc2V0KHRydWUpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcclxuICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5tYXJrQXNQcmlzdGluZSkge1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBRdWlsbEV2ZW50cygpOiB2b2lkIHtcclxuICAgIHRoaXMucXVpbGwub24oJ3NlbGVjdGlvbi1jaGFuZ2UnLCAocmFuZ2UsIG9sZFJhbmdlLCBzb3VyY2UpID0+IHtcclxuICAgICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uUmFuZ2UgPSByYW5nZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgIHJhbmdlOiByYW5nZSxcclxuICAgICAgICBvbGRSYW5nZTogb2xkUmFuZ2UsXHJcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5xdWlsbC5vbigndGV4dC1jaGFuZ2UnLCAoZGVsdGEsIG9sZENvbnRlbnRzLCBzb3VyY2UpID0+IHtcclxuICAgICAgaWYgKHRoaXMucmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmhhbmRsZU1lbnRpb24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0aGlzLnVwZGF0aW5nRWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXNjcmV2YVZhbG9yKHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCksIHRoaXMucXVpbGwuZ2V0VGV4dCgpKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblRleHRDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICBkZWx0YTogZGVsdGEsXHJcbiAgICAgICAgICBvbGRDb250ZW50czogb2xkQ29udGVudHMsXHJcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5vdXRwdXRSYXcuZW1pdCh0aGlzLnF1aWxsLmdldFRleHQoKSk7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRIdG1sLmVtaXQodGhpcy5xdWlsbC5nZXRTZW1hbnRpY0hUTUwoKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0aW5nRWRpdG9yID0gdHJ1ZTtcclxuICAgIHRoaXMuZXNjcmV2YVZhbG9yKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGVzY3JldmFWYWxvcihodG1sdmFsdWU6IGFueSwgcmF3dmFsdWU/OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5pbml0TG9hZENvbXBsZXRlKCkpIHtcclxuICAgICAgYXdhaXQgdGhpcy5lZGl0b3JSZWFkeVByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucXVpbGwpIHtcclxuICAgICAgaWYgKHRoaXMudXBkYXRpbmdFZGl0b3IpIHtcclxuICAgICAgICB0aGlzLnF1aWxsLmNsaXBib2FyZC5kYW5nZXJvdXNseVBhc3RlSFRNTChodG1sdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRpbmdFZGl0b3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy52YWx1ZSA9IGh0bWx2YWx1ZTtcclxuXHJcbiAgICAgIGlmIChyYXd2YWx1ZSA9PSBcIlxcblwiIHx8IHRoaXMudmFsdWUgPT0gXCJcXG5cIikge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGluZ0VkaXRvciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3V0cHV0SHRtbC5lbWl0KHRoaXMucXVpbGwuZ2V0U2VtYW50aWNIVE1MKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdG9yU2l6ZSgpOiB2b2lkIHtcclxuICAgIGxldCBlZGl0b3JGaWVsZEhlaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrdi1lZGl0b3ItdG9vbGJhcicpPy5vZmZzZXRIZWlnaHQ7XHJcbiAgICBpZiAoZWRpdG9yRmllbGRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5lZGl0b3JUb29sYmFySGVpZ2h0LnNldChgJHtlZGl0b3JGaWVsZEhlaWdodH1weGApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3BlblJlbGF0b3JpbygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmlzTG9hZGluZ1BkZigpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgaHRtbENvbnRlbnQgPSB0aGlzLnF1aWxsLmdldFNlbWFudGljSFRNTCgpO1xyXG4gICAgY29uc3QgcmVsYXRvcmlvID0gdGhpcy5yZWxhdG9yaW8oKTtcclxuICAgIC8vIGNvbnN0IHRpcG9WaXN1YWxpemFjYW8gPSB0aGlzLnRpcG9WaXN1YWxpemFjYW8oKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnBkZlNlcnZpY2Uub3BlblJlbGF0b3JpbyhodG1sQ29udGVudCwgcmVsYXRvcmlvLCAndmFsb3InKTtcclxuICB9XHJcblxyXG4gIC8vIE3DqXRvZG9zIHBhcmEgc2lzdGVtYSBkZSBtZW7Dp8O1ZXNcclxuICBoYW5kbGVNZW50aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJlbGF0b3JpbygpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tZW50aW9uU2VydmljZS5oYW5kbGVNZW50aW9uKHRoaXMucXVpbGwsIHRoaXMucmVsYXRvcmlvKCkhLnZhcmlhdmVpcyk7XHJcbiAgICB0aGlzLmZpbHRlcmVkVmFyaWFibGVzLnNldChyZXN1bHQuZmlsdGVyZWRWYXJpYWJsZXMpO1xyXG5cclxuICAgIGlmIChyZXN1bHQuc2hvdWxkU2hvd1BhbmVsICYmIHJlc3VsdC5tZW50aW9uQm91bmRzKSB7XHJcbiAgICAgIHRoaXMuc2hvd1ZhcmlhYmxlc1BhbmVsKHJlc3VsdC5tZW50aW9uQm91bmRzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xvc2VWYXJpYWJsZXNQYW5lbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93VmFyaWFibGVzUGFuZWwoYm91bmRzOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgYW5jaG9yRWwgPSB0aGlzLm1lbnRpb25BbmNob3IubmF0aXZlRWxlbWVudDtcclxuICAgIGFuY2hvckVsLnN0eWxlLnRvcCA9IGAke2JvdW5kcy50b3B9cHhgO1xyXG4gICAgYW5jaG9yRWwuc3R5bGUubGVmdCA9IGAke2JvdW5kcy5sZWZ0fXB4YDtcclxuICAgIHRoaXMub3BWYXJpYWJsZXMuc2hvdyhudWxsLCBhbmNob3JFbCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RWYXJpYWJsZUZyb21QYW5lbCh2YXJpYWJsZTogS3ZFZGl0b3JWYXJpYXZlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW50aW9uU2VydmljZS5pbnNlcnRWYXJpYWJsZSh0aGlzLnF1aWxsLCB2YXJpYWJsZSk7XHJcbiAgICB0aGlzLmNsb3NlVmFyaWFibGVzUGFuZWwoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlVmFyaWFibGVzUGFuZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcFZhcmlhYmxlcykge1xyXG4gICAgICB0aGlzLm9wVmFyaWFibGVzLmhpZGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMubWVudGlvblNlcnZpY2UuY2xvc2VNZW50aW9uKCk7XHJcbiAgfVxyXG5cclxuICBzaG93SW5zdHJ1Y29lcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEt2SW5zdHJ1Y29lc1JlcG9ydENvbXBvbmVudCwge1xyXG4gICAgICBoZWFkZXI6ICdJbnN0cnXDp8O1ZXMnLFxyXG4gICAgICB3aWR0aDogJzQwJScsXHJcbiAgICAgIGhlaWdodDogJzMwJScsXHJcbiAgICAgIG1vZGFsOiB0cnVlLFxyXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRlbXBsYXRlOiB0aGlzLmluc3RydWNvZXNUZW1wbGF0ZSgpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJUZW1wbGF0ZSgpIHtcclxuICAgIC8vIExpbXBhIG8gdGVtcGxhdGUgZG8gZWRpdG9yXHJcbiAgICB0aGlzLmNsZWFyZWRUZW1wbGF0ZS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLnNldFJlbGF0b3Jpb1BvcklkKDApO1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKCcnKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwia3YtZWRpdG9yLWNvbnRhaW5lciBoLWZ1bGwgbWF4LWgtZnVsbCBmbGV4IGZsZXgtY29sdW1uIG92ZXJmbG93LWhpZGRlblwiXHJcbj5cclxuICA8ZGl2XHJcbiAgICAjZWRpdG9yXHJcbiAgICBpZD1cImt2LWVkaXRvci10b29sYmFyXCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ2Vycm9yLWJvcmRlci10b29sYmFyJzogaGFzQ29udHJvbEVycm9yKCkgfVwiXHJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZmxleC1pbml0aWFsXCJcclxuICA+XHJcbiAgICBAaWYocmVsYXRvcmlvcygpLmxlbmd0aCA+IDApIHtcclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib3AudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIHRleHQtZ3JlZW4tNjAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgY29udHJhY3RcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZCB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj57e1xyXG4gICAgICAgICAgICAhY2xlYXJlZFRlbXBsYXRlKCkgPyAocmVsYXRvcmlvKCk/LmxhYmVsIHx8IGxhYmVsRW1wdHlEcm9wZG93bigpKSA6IGxhYmVsRW1wdHlEcm9wZG93bigpXHJcbiAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnXCI+XHJcbiAgICAgICAgICAgIGtleWJvYXJkX2Fycm93X2Rvd25cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgQGlmKCFjbGVhcmVkVGVtcGxhdGUoKSkge1xyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcC0yIGJvcmRlci1yb3VuZC1sZyBib3JkZXItMSBib3JkZXItZ3JheS0yMDAgaG92ZXI6c2hhZG93LTEgaG92ZXI6YmctZ3JheS0xMDAgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi0zMDBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyVGVtcGxhdGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgdGV4dC1vcmFuZ2UtNjAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIidMaW1wYXIgVGVtcGxhdGUnXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgbGF5ZXJzX2NsZWFyXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIHAtMiBib3JkZXItcm91bmQtbGcgYm9yZGVyLTEgYm9yZGVyLWdyYXktMjAwIGhvdmVyOnNoYWRvdy0xIGhvdmVyOmJnLWdyYXktMTAwIGN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zaXRpb24tZHVyYXRpb24tMzAwXCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93SW5zdHJ1Y29lcygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgaW5mb1xyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPkluc3RydcOnw7Vlczwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICBAaWYocHJpbnRCdXR0b24oKSkge1xyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgYm9yZGVyLXJvdW5kLWxnIGJvcmRlci0xIGJvcmRlci1ncmF5LTIwMCBob3ZlcjpzaGFkb3ctMSBob3ZlcjpiZy1ncmF5LTEwMCBjdXJzb3ItcG9pbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMFwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5SZWxhdG9yaW8oKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyBmb250LW1lZGl1bVwiPlxyXG4gICAgICAgICAgcHJpbnRcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPkltcHJpbWlyPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHAtZGl2aWRlciBjbGFzcz1cInctZnVsbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgIH1cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy1mdWxsIGZsZXgtaW5pdGlhbFwiXHJcbiAgICA+XHJcbiAgICAgIEBpZihpc0xvYWRpbmcoKSkge1xyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHctZnVsbFwiPlxyXG4gICAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy02cmVtXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIlxyXG4gICAgICAgID48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy02cmVtXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIlxyXG4gICAgICAgID48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy02cmVtXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIlxyXG4gICAgICAgID48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy02cmVtXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIlxyXG4gICAgICAgID48L3Atc2tlbGV0b24+XHJcblxyXG4gICAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy02cmVtXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogJzJyZW0nIH1cIlxyXG4gICAgICAgID48L3Atc2tlbGV0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwIGdhcC0yIHt7XHJcbiAgICAgICAgICBpc0xvYWRpbmcoKSA/ICdoaWRkZW4nIDogJ2ZsZXgnXHJcbiAgICAgICAgfX0gdy1mdWxsXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1mb250XCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyb2JvdG9cIj5Sb2JvdG88L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFyaWFsXCI+QXJpYWw8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRpbWVzLW5ldy1yb21hblwiPlRpbWVzIE5ldyBSb21hbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibW9ub3NwYWNlXCI+TW9ub3NwYWNlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpbnRlclwiPkludGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQ+U2FucyBTZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VyaWZcIj5TZXJpZjwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMVwiPlRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMlwiPlN1YnRpdHVsbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPk5vcm1hbDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCB0aXRsZT1cIlNpemVcIiBjbGFzcz1cInFsLXNpemVcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTVweFwiPjE1cHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjBweFwiPjIwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMzBweFwiPjMwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNDBweFwiPjQwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBweFwiPjUwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNzBweFwiPjcwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiOTBweFwiPjkwcHg8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1ib2xkXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtaXRhbGljXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdW5kZXJsaW5lXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtc3RyaWtlXCI+PC9idXR0b24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicWwtZm9ybWF0cyBib3JkZXItcm91bmQtbWRcIj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1jb2xvclwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInFsLWJhY2tncm91bmRcIj48L3NlbGVjdD5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIEBpZih0cnVlKSB7XHJcbiAgICAgICAgPCEtLSA8cC1kaXZpZGVyIGxheW91dD1cInZlcnRpY2FsXCI+PC9wLWRpdmlkZXI+XHJcblxyXG4gICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWhlYWRlclwiIHZhbHVlPVwiMVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1oZWFkZXJcIiB2YWx1ZT1cIjJcIj48L2J1dHRvbj5cclxuICAgICAgPC9zcGFuPiAtLT5cclxuXHJcbiAgICAgICAgPHAtZGl2aWRlciBsYXlvdXQ9XCJ2ZXJ0aWNhbFwiPjwvcC1kaXZpZGVyPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInFsLWZvcm1hdHMgYm9yZGVyLXJvdW5kLW1kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtbGlua1wiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWltYWdlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicWwtdmlkZW9cIj48L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxwLWRpdmlkZXIgbGF5b3V0PVwidmVydGljYWxcIj48L3AtZGl2aWRlcj5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxbC1mb3JtYXRzIGJvcmRlci1yb3VuZC1tZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInFsLWxpc3RcIiB2YWx1ZT1cIm9yZGVyZWRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJxbC1saXN0XCIgdmFsdWU9XCJidWxsZXRcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJxbC1hbGlnblwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgc3R5bGU9XCJcclxuICAgICAgaGVpZ2h0OiAzcHg7XHJcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlNWU3ZWI7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2U1ZTdlYjtcclxuICAgICAgYm9yZGVyLXRvcDogbm9uZTtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgIFwiXHJcbiAgPlxyXG4gICAgQGlmKGlzTG9hZGluZ1BkZigpKSB7XHJcbiAgICA8cC1wcm9ncmVzc0JhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzNweCcgfVwiIC8+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIGlkPVwia3YtZWRpdG9yXCJcclxuICAgIGNsYXNzPVwib3ZlcmZsb3ctYXV0byB3LWZ1bGwgZmxleC0xIHNjcm9sbHN0eWxlXCJcclxuICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgJ2Vycm9yLWJvcmRlcic6IGhhc0NvbnRyb2xFcnJvcigpLFxyXG4gICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBvcGFjaXR5LTYwJzogaXNMb2FkaW5nUGRmKClcclxuICAgIH1cIlxyXG4gICAgc3R5bGU9XCJib3JkZXItdG9wOiBub25lXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG48a3YtZXJyb3IgW2hhc0Vycm9yXT1cImhhc0NvbnRyb2xFcnJvcigpXCI+e3sgZXJyb01lc3NhZ2UoKSB9fTwva3YtZXJyb3I+XHJcblxyXG48IS0tIDxsaW5rIGhyZWY9XCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3F1aWxsQDIuMC4yL2Rpc3QvcXVpbGwuc25vdy5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgLz4gLS0+XHJcbjxsaW5rIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9Um9ib3RvXCIgcmVsPVwic3R5bGVzaGVldFwiIC8+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9xdWlsbEAyLjAuMi9kaXN0L3F1aWxsLmpzXCI+PC9zY3JpcHQ+XHJcbjxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uanNcIj48L3NjcmlwdD5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcXVpbGxAMi4wLjIvZGlzdC9xdWlsbC5idWJibGUuY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaGlnaGxpZ2h0LmpzLzExLjkuMC9zdHlsZXMvYXRvbS1vbmUtZGFyay5taW4uY3NzXCJcclxuLz5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9rYXRleEAwLjE2LjkvZGlzdC9rYXRleC5taW4uY3NzXCJcclxuLz5cclxuXHJcbjxwLW92ZXJsYXlQYW5lbCAjb3Agc3R5bGVDbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiZ3JpZCBtLTAgZ2FwLTIgcC0yIG1heC13LTIwcmVtIG92ZXJmbG93LXktYXV0byBzY3JvbGxzdHlsZVwiXHJcbiAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDE2cmVtXCJcclxuICA+XHJcbiAgICBAZm9yKGl0ZW0gb2YgcmVsYXRvcmlvcygpOyB0cmFjayAkaW5kZXgpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJjb2wtMTIgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctZ3JheS0xMDAgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNpdGlvbi1kdXJhdGlvbi0yMDAgYm9yZGVyLXJvdW5kLWxnIHNoYWRvdy0yIGZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIlxyXG4gICAgICAoY2xpY2spPVwic2V0UmVsYXRvcmlvKGl0ZW0pXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHctZnVsbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XHJcblxyXG4gICAgICAgIDxrdi10YWdzXHJcbiAgICAgICAgICBjbGFzcz1cInRyYW5zaXRpb24tb3BhY2l0eSB0cmFuc2l0aW9uLWR1cmF0aW9uLTMwMCB7e1xyXG4gICAgICAgICAgICBpdGVtPy5pZCA9PSBpZFJlbGF0b3Jpb1NlbGVjdGVkKCkgPyAnb3BhY2l0eS0xMDAnIDogJ29wYWNpdHktMCdcclxuICAgICAgICAgIH19XCJcclxuICAgICAgICAgIFt0YWdzXT1cIlt7IGxhYmVsOiAnU2VsZWNpb25hZG8nLCBzZXZlcml0eTogJ3ByaW1hcnknIH1dXCJcclxuICAgICAgICA+PC9rdi10YWdzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDBcIj57eyBpdGVtLmRlc2NyaWNhbyB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3Atb3ZlcmxheVBhbmVsPlxyXG5cclxuPGRpdiBjbGFzcz1cImt2LWVkaXRvci1jb250YWluZXIgZmxleCBmbGV4LWNvbHVtbiBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmVcIj5cclxuICA8ZGl2XHJcbiAgICAjbWVudGlvbkFuY2hvclxyXG4gICAgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAxcHg7IGhlaWdodDogMXB4OyBvcGFjaXR5OiAwXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPHAtb3ZlcmxheVBhbmVsXHJcbiAgI29wVmFyaWFibGVzXHJcbiAgW2FwcGVuZFRvXT1cIidib2R5J1wiXHJcbiAgKG9uSGlkZSk9XCJjbG9zZVZhcmlhYmxlc1BhbmVsKClcIlxyXG4+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0xIHAtMSBvdmVyZmxvdy15LWF1dG8gc2Nyb2xsLXZpcnR1YWwgYm9yZGVyLXJvdW5kLWxnXCJcclxuICAgIHN0eWxlPVwibWF4LWhlaWdodDogMjUwcHg7IG1pbi13aWR0aDogMjUwcHg7IGJhY2tncm91bmQtY29sb3I6ICMzMzMzMzNcIlxyXG4gID5cclxuICAgIEBmb3IodmFyaWFibGUgb2YgZmlsdGVyZWRWYXJpYWJsZXMoKTsgdHJhY2sgdmFyaWFibGUuaWQpIHtcclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJwLTIgY3Vyc29yLXBvaW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgdHJhbnNpdGlvbi1kdXJhdGlvbi0yMDAgYm9yZGVyLXJvdW5kLWxnIHRleHQtc20gdGV4dC13aGl0ZSBvcHRpb24tZHJvcGRvd25cIlxyXG4gICAgICAoY2xpY2spPVwic2VsZWN0VmFyaWFibGVGcm9tUGFuZWwodmFyaWFibGUpXCJcclxuICAgID5cclxuICAgICAge3sgdmFyaWFibGUuZGVzY3JpY2FvIH19IChcclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNDAwXCI+e3sgdmFyaWFibGUudmFsdWUgfX08L3NwYW4+IClcclxuICAgIDwvZGl2PlxyXG4gICAgfSBAZW1wdHkge1xyXG4gICAgPGRpdiBjbGFzcz1cInAtMiB0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj5OZW5odW1hIHZhcmnDoXZlbCBlbmNvbnRyYWRhLjwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG48L3Atb3ZlcmxheVBhbmVsPlxyXG4iXX0=
@@ -1,7 +0,0 @@
1
- export * from './types/kv-editor.types';
2
- export * from './services/kv-editor-quill.service';
3
- export * from './services/kv-editor-relatorio.service';
4
- export * from './services/kv-editor-mention.service';
5
- export * from './services/kv-editor-pdf.service';
6
- export * from './config/kv-editor.config';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtaW5wdXRzL2t2LWVkaXRvci9rdi1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3R5cGVzL2t2LWVkaXRvci50eXBlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLXF1aWxsLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2t2LWVkaXRvci1yZWxhdG9yaW8uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLW1lbnRpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva3YtZWRpdG9yLXBkZi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9jb25maWcva3YtZWRpdG9yLmNvbmZpZyc7XHJcbiJdfQ==
@@ -1,135 +0,0 @@
1
- import { Injectable, signal } from '@angular/core';
2
- import Quill from 'quill';
3
- import * as i0 from "@angular/core";
4
- export class KvEditorMentionService {
5
- constructor() {
6
- this.filteredVariables = signal([]);
7
- this.mentionStartIndex = null;
8
- this.mentionEndIndex = null;
9
- }
10
- /**
11
- * Processa o sistema de menções durante a digitação
12
- */
13
- handleMention(quill, variaveis) {
14
- const range = quill.getSelection();
15
- if (!range) {
16
- this.closeMention();
17
- return { shouldShowPanel: false, filteredVariables: [] };
18
- }
19
- const text = quill.getText(0, range.index);
20
- const lastHashIndex = text.lastIndexOf('#');
21
- if (lastHashIndex !== -1 && !/\s/.test(text.substring(lastHashIndex + 1))) {
22
- this.mentionStartIndex = lastHashIndex;
23
- this.mentionEndIndex = range.index;
24
- const searchTerm = text.substring(lastHashIndex + 1).toLowerCase();
25
- const filtered = variaveis.filter(v => v.descricao.toLowerCase().includes(searchTerm));
26
- this.filteredVariables.set(filtered);
27
- if (filtered.length > 0) {
28
- const bounds = this.calculateMentionBounds(quill, lastHashIndex);
29
- return {
30
- shouldShowPanel: true,
31
- filteredVariables: filtered,
32
- mentionBounds: bounds
33
- };
34
- }
35
- }
36
- this.closeMention();
37
- return { shouldShowPanel: false, filteredVariables: [] };
38
- }
39
- /**
40
- * Calcula a posição onde o painel de menções deve aparecer
41
- */
42
- calculateMentionBounds(quill, lastHashIndex) {
43
- const editorEl = document.querySelector('#kv-editor');
44
- if (!editorEl)
45
- return { top: 0, left: 0 };
46
- const editorRect = editorEl.getBoundingClientRect();
47
- // Verifica se o '#' está no início de uma linha
48
- const charBefore = lastHashIndex > 0 ? quill.getText(lastHashIndex - 1, 1) : null;
49
- const isAtStartOfLine = (lastHashIndex === 0 || charBefore === '\n');
50
- if (isAtStartOfLine) {
51
- // Posiciona no canto superior esquerdo do editor
52
- return {
53
- top: editorRect.top + 5,
54
- left: editorRect.left + 5
55
- };
56
- }
57
- else {
58
- // Usa getBounds() para posição precisa
59
- const cursorBounds = quill.getBounds(lastHashIndex);
60
- if (cursorBounds) {
61
- return {
62
- top: editorRect.top + cursorBounds.bottom,
63
- left: editorRect.left + cursorBounds.left
64
- };
65
- }
66
- else {
67
- return {
68
- top: editorRect.top + 5,
69
- left: editorRect.left + 5
70
- };
71
- }
72
- }
73
- }
74
- /**
75
- * Insere uma variável selecionada no editor
76
- */
77
- insertVariable(quill, variable) {
78
- const startIndex = this.mentionStartIndex;
79
- const endIndex = this.mentionEndIndex;
80
- if (startIndex === null || endIndex === null)
81
- return;
82
- const lengthToDelete = endIndex - startIndex;
83
- const variableHtml = `<span
84
- style="background-color: #e6f7ff; color: #0066cc; border-radius: 3px; padding: 2px 4px; font-weight: 500;"
85
- class="variavel-inserida"
86
- title="${variable.descricao}">${variable.descricao}</span>&nbsp;`;
87
- const insertedTextLength = variable.descricao.length + 1;
88
- const Delta = Quill.import('delta');
89
- const insertionDelta = quill.clipboard.convert({ html: variableHtml });
90
- quill.updateContents(new Delta()
91
- .retain(startIndex)
92
- .delete(lengthToDelete)
93
- .concat(insertionDelta), 'user');
94
- const newCursorPosition = startIndex + insertedTextLength;
95
- setTimeout(() => {
96
- quill.setSelection(newCursorPosition, 0, 'user');
97
- quill.focus();
98
- }, 0);
99
- this.closeMention();
100
- }
101
- /**
102
- * Fecha o sistema de menções
103
- */
104
- closeMention() {
105
- this.mentionStartIndex = null;
106
- this.mentionEndIndex = null;
107
- this.filteredVariables.set([]);
108
- }
109
- /**
110
- * Obtém as variáveis filtradas
111
- */
112
- getFilteredVariables() {
113
- return this.filteredVariables();
114
- }
115
- /**
116
- * Cria uma regex especial para busca em texto com HTML
117
- */
118
- createInterleavedRegex(text) {
119
- const specialChars = /[-\/\\^$*+?.()|[\]{}]/g;
120
- const pattern = text
121
- .split('')
122
- .map(char => char.replace(specialChars, '\\$&'))
123
- .join('(<[^>]*>)*');
124
- return new RegExp(pattern, 'gi');
125
- }
126
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorMentionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
127
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorMentionService, providedIn: 'root' }); }
128
- }
129
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvEditorMentionService, decorators: [{
130
- type: Injectable,
131
- args: [{
132
- providedIn: 'root'
133
- }]
134
- }] });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtZWRpdG9yLW1lbnRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LWlucHV0cy9rdi1lZGl0b3Ivc2VydmljZXMva3YtZWRpdG9yLW1lbnRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7O0FBTTFCLE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFLVSxzQkFBaUIsR0FBRyxNQUFNLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDeEMsb0JBQWUsR0FBa0IsSUFBSSxDQUFDO0tBZ0ovQztJQTlJQzs7T0FFRztJQUNILGFBQWEsQ0FBQyxLQUFZLEVBQUUsU0FBNkI7UUFLdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMzRCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLENBQUMs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SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCLENBQUMsSUFBWTtRQUNqQyxNQUFNLFlBQVksR0FBRyx3QkFBd0IsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJO2FBQ2pCLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQzthQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQzs4R0FuSlUsc0JBQXNCO2tIQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7MkZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEVsZW1lbnRSZWYsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUXVpbGwgZnJvbSAncXVpbGwnO1xyXG5pbXBvcnQgeyBLdkVkaXRvclZhcmlhdmVsIH0gZnJvbSAnLi4vdHlwZXMva3YtZWRpdG9yLnR5cGVzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2RWRpdG9yTWVudGlvblNlcnZpY2Uge1xyXG4gIFxyXG4gIHByaXZhdGUgZmlsdGVyZWRWYXJpYWJsZXMgPSBzaWduYWw8S3ZFZGl0b3JWYXJpYXZlbFtdPihbXSk7XHJcbiAgcHJpdmF0ZSBtZW50aW9uU3RhcnRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBtZW50aW9uRW5kSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzYSBvIHNpc3RlbWEgZGUgbWVuw6fDtWVzIGR1cmFudGUgYSBkaWdpdGHDp8Ojb1xyXG4gICAqL1xyXG4gIGhhbmRsZU1lbnRpb24ocXVpbGw6IFF1aWxsLCB2YXJpYXZlaXM6IEt2RWRpdG9yVmFyaWF2ZWxbXSk6IHtcclxuICAgIHNob3VsZFNob3dQYW5lbDogYm9vbGVhbjtcclxuICAgIGZpbHRlcmVkVmFyaWFibGVzOiBLdkVkaXRvclZhcmlhdmVsW107XHJcbiAgICBtZW50aW9uQm91bmRzPzogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH07XHJcbiAgfSB7XHJcbiAgICBjb25zdCByYW5nZSA9IHF1aWxsLmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFyYW5nZSkge1xyXG4gICAgICB0aGlzLmNsb3NlTWVudGlvbigpO1xyXG4gICAgICByZXR1cm4geyBzaG91bGRTaG93UGFuZWw6IGZhbHNlLCBmaWx0ZXJlZFZhcmlhYmxlczogW10gfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gcXVpbGwuZ2V0VGV4dCgwLCByYW5nZS5pbmRleCk7XHJcbiAgICBjb25zdCBsYXN0SGFzaEluZGV4ID0gdGV4dC5sYXN0SW5kZXhPZignIycpO1xyXG5cclxuICAgIGlmIChsYXN0SGFzaEluZGV4ICE9PSAtMSAmJiAhL1xccy8udGVzdCh0ZXh0LnN1YnN0cmluZyhsYXN0SGFzaEluZGV4ICsgMSkpKSB7XHJcbiAgICAgIHRoaXMubWVudGlvblN0YXJ0SW5kZXggPSBsYXN0SGFzaEluZGV4O1xyXG4gICAgICB0aGlzLm1lbnRpb25FbmRJbmRleCA9IHJhbmdlLmluZGV4O1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IHRleHQuc3Vic3RyaW5nKGxhc3RIYXNoSW5kZXggKyAxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IHZhcmlhdmVpcy5maWx0ZXIodiA9PiBcclxuICAgICAgICB2LmRlc2NyaWNhby50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmZpbHRlcmVkVmFyaWFibGVzLnNldChmaWx0ZXJlZCk7XHJcblxyXG4gICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuY2FsY3VsYXRlTWVudGlvbkJvdW5kcyhxdWlsbCwgbGFzdEhhc2hJbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNob3VsZFNob3dQYW5lbDogdHJ1ZSxcclxuICAgICAgICAgIGZpbHRlcmVkVmFyaWFibGVzOiBmaWx0ZXJlZCxcclxuICAgICAgICAgIG1lbnRpb25Cb3VuZHM6IGJvdW5kc1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsb3NlTWVudGlvbigpO1xyXG4gICAgcmV0dXJuIHsgc2hvdWxkU2hvd1BhbmVsOiBmYWxzZSwgZmlsdGVyZWRWYXJpYWJsZXM6IFtdIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhIGEgcG9zacOnw6NvIG9uZGUgbyBwYWluZWwgZGUgbWVuw6fDtWVzIGRldmUgYXBhcmVjZXJcclxuICAgKi9cclxuICBwcml2YXRlIGNhbGN1bGF0ZU1lbnRpb25Cb3VuZHMocXVpbGw6IFF1aWxsLCBsYXN0SGFzaEluZGV4OiBudW1iZXIpOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSB7XHJcbiAgICBjb25zdCBlZGl0b3JFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNrdi1lZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yRWwpIHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xyXG5cclxuICAgIGNvbnN0IGVkaXRvclJlY3QgPSBlZGl0b3JFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIFxyXG4gICAgLy8gVmVyaWZpY2Egc2UgbyAnIycgZXN0w6Egbm8gaW7DrWNpbyBkZSB1bWEgbGluaGFcclxuICAgIGNvbnN0IGNoYXJCZWZvcmUgPSBsYXN0SGFzaEluZGV4ID4gMCA/IHF1aWxsLmdldFRleHQobGFzdEhhc2hJbmRleCAtIDEsIDEpIDogbnVsbDtcclxuICAgIGNvbnN0IGlzQXRTdGFydE9mTGluZSA9IChsYXN0SGFzaEluZGV4ID09PSAwIHx8IGNoYXJCZWZvcmUgPT09ICdcXG4nKTtcclxuXHJcbiAgICBpZiAoaXNBdFN0YXJ0T2ZMaW5lKSB7XHJcbiAgICAgIC8vIFBvc2ljaW9uYSBubyBjYW50byBzdXBlcmlvciBlc3F1ZXJkbyBkbyBlZGl0b3JcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0b3A6IGVkaXRvclJlY3QudG9wICsgNSxcclxuICAgICAgICBsZWZ0OiBlZGl0b3JSZWN0LmxlZnQgKyA1XHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBVc2EgZ2V0Qm91bmRzKCkgcGFyYSBwb3Npw6fDo28gcHJlY2lzYVxyXG4gICAgICBjb25zdCBjdXJzb3JCb3VuZHMgPSBxdWlsbC5nZXRCb3VuZHMobGFzdEhhc2hJbmRleCk7XHJcbiAgICAgIGlmIChjdXJzb3JCb3VuZHMpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdG9wOiBlZGl0b3JSZWN0LnRvcCArIGN1cnNvckJvdW5kcy5ib3R0b20sXHJcbiAgICAgICAgICBsZWZ0OiBlZGl0b3JSZWN0LmxlZnQgKyBjdXJzb3JCb3VuZHMubGVmdFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRvcDogZWRpdG9yUmVjdC50b3AgKyA1LFxyXG4gICAgICAgICAgbGVmdDogZWRpdG9yUmVjdC5sZWZ0ICsgNVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VyZSB1bWEgdmFyacOhdmVsIHNlbGVjaW9uYWRhIG5vIGVkaXRvclxyXG4gICAqL1xyXG4gIGluc2VydFZhcmlhYmxlKHF1aWxsOiBRdWlsbCwgdmFyaWFibGU6IEt2RWRpdG9yVmFyaWF2ZWwpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLm1lbnRpb25TdGFydEluZGV4O1xyXG4gICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLm1lbnRpb25FbmRJbmRleDtcclxuXHJcbiAgICBpZiAoc3RhcnRJbmRleCA9PT0gbnVsbCB8fCBlbmRJbmRleCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGxlbmd0aFRvRGVsZXRlID0gZW5kSW5kZXggLSBzdGFydEluZGV4O1xyXG4gICAgY29uc3QgdmFyaWFibGVIdG1sID0gYDxzcGFuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U2ZjdmZjsgY29sb3I6ICMwMDY2Y2M7IGJvcmRlci1yYWRpdXM6IDNweDsgcGFkZGluZzogMnB4IDRweDsgZm9udC13ZWlnaHQ6IDUwMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFyaWF2ZWwtaW5zZXJpZGFcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIiR7dmFyaWFibGUuZGVzY3JpY2FvfVwiPiR7dmFyaWFibGUuZGVzY3JpY2FvfTwvc3Bhbj4mbmJzcDtgO1xyXG4gICAgXHJcbiAgICBjb25zdCBpbnNlcnRlZFRleHRMZW5ndGggPSB2YXJpYWJsZS5kZXNjcmljYW8ubGVuZ3RoICsgMTtcclxuICAgIGNvbnN0IERlbHRhID0gUXVpbGwuaW1wb3J0KCdkZWx0YScpO1xyXG4gICAgY29uc3QgaW5zZXJ0aW9uRGVsdGEgPSBxdWlsbC5jbGlwYm9hcmQuY29udmVydCh7IGh0bWw6IHZhcmlhYmxlSHRtbCB9KTtcclxuXHJcbiAgICBxdWlsbC51cGRhdGVDb250ZW50cyhcclxuICAgICAgbmV3IERlbHRhKClcclxuICAgICAgICAucmV0YWluKHN0YXJ0SW5kZXgpXHJcbiAgICAgICAgLmRlbGV0ZShsZW5ndGhUb0RlbGV0ZSlcclxuICAgICAgICAuY29uY2F0KGluc2VydGlvbkRlbHRhKSxcclxuICAgICAgJ3VzZXInXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld0N1cnNvclBvc2l0aW9uID0gc3RhcnRJbmRleCArIGluc2VydGVkVGV4dExlbmd0aDtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBxdWlsbC5zZXRTZWxlY3Rpb24obmV3Q3Vyc29yUG9zaXRpb24sIDAsICd1c2VyJyk7XHJcbiAgICAgIHF1aWxsLmZvY3VzKCk7XHJcbiAgICB9LCAwKTtcclxuXHJcbiAgICB0aGlzLmNsb3NlTWVudGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmVjaGEgbyBzaXN0ZW1hIGRlIG1lbsOnw7Vlc1xyXG4gICAqL1xyXG4gIGNsb3NlTWVudGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMubWVudGlvblN0YXJ0SW5kZXggPSBudWxsO1xyXG4gICAgdGhpcy5tZW50aW9uRW5kSW5kZXggPSBudWxsO1xyXG4gICAgdGhpcy5maWx0ZXJlZFZhcmlhYmxlcy5zZXQoW10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT2J0w6ltIGFzIHZhcmnDoXZlaXMgZmlsdHJhZGFzXHJcbiAgICovXHJcbiAgZ2V0RmlsdGVyZWRWYXJpYWJsZXMoKTogS3ZFZGl0b3JWYXJpYXZlbFtdIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkVmFyaWFibGVzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmlhIHVtYSByZWdleCBlc3BlY2lhbCBwYXJhIGJ1c2NhIGVtIHRleHRvIGNvbSBIVE1MXHJcbiAgICovXHJcbiAgY3JlYXRlSW50ZXJsZWF2ZWRSZWdleCh0ZXh0OiBzdHJpbmcpOiBSZWdFeHAge1xyXG4gICAgY29uc3Qgc3BlY2lhbENoYXJzID0gL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZztcclxuICAgIGNvbnN0IHBhdHRlcm4gPSB0ZXh0XHJcbiAgICAgIC5zcGxpdCgnJylcclxuICAgICAgLm1hcChjaGFyID0+IGNoYXIucmVwbGFjZShzcGVjaWFsQ2hhcnMsICdcXFxcJCYnKSlcclxuICAgICAgLmpvaW4oJyg8W14+XSo+KSonKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCAnZ2knKTtcclxuICB9XHJcbn1cclxuIl19