@seniorsistemas/data-seniorx-core 2.3.0 → 3.0.0

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 (262) hide show
  1. package/core/constants/autocomplete.const.d.ts +4 -0
  2. package/core/constants/context-selector.const.d.ts +1 -0
  3. package/core/constants/gantt.const.d.ts +7 -0
  4. package/core/constants/hyperlink.const.d.ts +1 -0
  5. package/core/constants/inline-edit.const.d.ts +4 -0
  6. package/core/constants/kanban.const.d.ts +2 -0
  7. package/core/constants/pin-code-field.const.d.ts +5 -0
  8. package/core/constants/rating-scale.const.d.ts +1 -0
  9. package/core/constants/spotlight.const.d.ts +8 -0
  10. package/core/constants/star-rating.const.d.ts +4 -0
  11. package/core/constants/stepper.const.d.ts +1 -0
  12. package/core/constants/tiered-menu.const.d.ts +3 -0
  13. package/core/types/autocomplete.type.d.ts +9 -0
  14. package/core/types/chat.type.d.ts +12 -0
  15. package/core/types/checkbox-list.type.d.ts +12 -0
  16. package/core/types/gantt.type.d.ts +22 -0
  17. package/core/types/grid-menu.type.d.ts +13 -0
  18. package/core/types/hyperlink.type.d.ts +1 -0
  19. package/core/types/image-cropper.type.d.ts +20 -0
  20. package/core/types/inline-edit.type.d.ts +26 -0
  21. package/core/types/kanban.type.d.ts +36 -0
  22. package/core/types/panel.type.d.ts +16 -0
  23. package/core/types/profile-picture-picker.type.d.ts +9 -0
  24. package/core/types/rating-scale.type.d.ts +5 -0
  25. package/core/types/select-button.type.d.ts +1 -0
  26. package/core/types/spotlight.type.d.ts +34 -0
  27. package/core/types/star-rating.type.d.ts +1 -0
  28. package/core/types/stepper.type.d.ts +20 -0
  29. package/core/types/table-column.type.d.ts +3 -1
  30. package/core/types/table-options.type.d.ts +8 -2
  31. package/core/types/table.type.d.ts +1 -1
  32. package/core/types/tiered-menu.type.d.ts +16 -0
  33. package/core/types/tree.type.d.ts +25 -0
  34. package/core/types/workspace-switch.type.d.ts +6 -0
  35. package/core/utils/body-scroll.util.d.ts +2 -0
  36. package/core/utils/roving-focus.util.d.ts +2 -0
  37. package/core/utils/selection.util.d.ts +3 -0
  38. package/core/utils/tree.util.d.ts +4 -0
  39. package/esm2022/core/constants/autocomplete.const.mjs +5 -0
  40. package/esm2022/core/constants/context-selector.const.mjs +2 -0
  41. package/esm2022/core/constants/gantt.const.mjs +7 -0
  42. package/esm2022/core/constants/hyperlink.const.mjs +2 -1
  43. package/esm2022/core/constants/inline-edit.const.mjs +5 -0
  44. package/esm2022/core/constants/kanban.const.mjs +3 -0
  45. package/esm2022/core/constants/pin-code-field.const.mjs +6 -0
  46. package/esm2022/core/constants/rating-scale.const.mjs +2 -0
  47. package/esm2022/core/constants/spotlight.const.mjs +9 -0
  48. package/esm2022/core/constants/star-rating.const.mjs +5 -0
  49. package/esm2022/core/constants/stepper.const.mjs +2 -0
  50. package/esm2022/core/constants/table.const.mjs +2 -2
  51. package/esm2022/core/constants/tiered-menu.const.mjs +4 -0
  52. package/esm2022/core/types/autocomplete.type.mjs +2 -0
  53. package/esm2022/core/types/chat.type.mjs +2 -0
  54. package/esm2022/core/types/checkbox-list.type.mjs +2 -0
  55. package/esm2022/core/types/gantt.type.mjs +2 -0
  56. package/esm2022/core/types/grid-menu.type.mjs +2 -0
  57. package/esm2022/core/types/hyperlink.type.mjs +1 -1
  58. package/esm2022/core/types/image-cropper.type.mjs +2 -0
  59. package/esm2022/core/types/inline-edit.type.mjs +2 -0
  60. package/esm2022/core/types/kanban.type.mjs +2 -0
  61. package/esm2022/core/types/panel.type.mjs +9 -0
  62. package/esm2022/core/types/profile-picture-picker.type.mjs +2 -0
  63. package/esm2022/core/types/rating-scale.type.mjs +2 -0
  64. package/esm2022/core/types/select-button.type.mjs +1 -1
  65. package/esm2022/core/types/spotlight.type.mjs +2 -0
  66. package/esm2022/core/types/star-rating.type.mjs +2 -0
  67. package/esm2022/core/types/stepper.type.mjs +7 -0
  68. package/esm2022/core/types/table-column.type.mjs +1 -1
  69. package/esm2022/core/types/table-options.type.mjs +1 -1
  70. package/esm2022/core/types/table.type.mjs +1 -1
  71. package/esm2022/core/types/tiered-menu.type.mjs +2 -0
  72. package/esm2022/core/types/tree.type.mjs +2 -0
  73. package/esm2022/core/types/workspace-switch.type.mjs +2 -0
  74. package/esm2022/core/utils/body-scroll.util.mjs +19 -0
  75. package/esm2022/core/utils/combobox.util.mjs +3 -2
  76. package/esm2022/core/utils/roving-focus.util.mjs +20 -0
  77. package/esm2022/core/utils/selection.util.mjs +13 -0
  78. package/esm2022/core/utils/string.util.mjs +8 -3
  79. package/esm2022/core/utils/tree.util.mjs +23 -0
  80. package/esm2022/features/accordion/accordion.component.mjs +2 -2
  81. package/esm2022/features/accordion/{accordion-item.component.mjs → components/accordion-item/accordion-item.component.mjs} +7 -7
  82. package/esm2022/features/autocomplete/autocomplete.component.mjs +501 -0
  83. package/esm2022/features/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +30 -0
  84. package/esm2022/features/breadcrumb/breadcrumb.component.mjs +2 -2
  85. package/esm2022/features/card-list/card/card.component.mjs +63 -99
  86. package/esm2022/features/chat/chat.component.mjs +126 -0
  87. package/esm2022/features/checkbox-list/checkbox-list.component.mjs +125 -0
  88. package/esm2022/features/combobox/combobox.component.mjs +20 -8
  89. package/esm2022/features/context-selector/context-selector.component.mjs +198 -0
  90. package/esm2022/features/filters/filters.component.mjs +1 -1
  91. package/esm2022/features/gantt/components/gantt-side-table/gantt-side-table.component.mjs +17 -0
  92. package/esm2022/features/gantt/gantt-date.utils.mjs +97 -0
  93. package/esm2022/features/gantt/gantt.component.mjs +89 -0
  94. package/esm2022/features/gantt/gantt.engine.mjs +662 -0
  95. package/esm2022/features/grid-menu/grid-menu.component.mjs +104 -0
  96. package/esm2022/features/hyperlink/hyperlink.component.mjs +7 -4
  97. package/esm2022/features/icon-picker/icon-picker.component.mjs +3 -3
  98. package/esm2022/features/image-cropper/image-cropper.component.mjs +218 -0
  99. package/esm2022/features/image-cropper/services/image-cropper.service.mjs +50 -0
  100. package/esm2022/features/infinite-scroll/infinite-scroll.directive.mjs +89 -0
  101. package/esm2022/features/info-sign/info-sign.component.mjs +3 -3
  102. package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +38 -0
  103. package/esm2022/features/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +29 -0
  104. package/esm2022/features/inline-edit/components/fields/inline-edit-textarea/inline-edit-textarea.component.mjs +29 -0
  105. package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +131 -0
  106. package/esm2022/features/inline-edit/fields/inline-edit-field.mjs +17 -0
  107. package/esm2022/features/inline-edit/fields/inline-edit-number-field.mjs +15 -0
  108. package/esm2022/features/inline-edit/fields/inline-edit-text-field.mjs +11 -0
  109. package/esm2022/features/inline-edit/fields/inline-edit-textarea-field.mjs +15 -0
  110. package/esm2022/features/inline-edit/inline-edit.component.mjs +27 -0
  111. package/esm2022/features/interactive-content/interactive-content.directive.mjs +140 -0
  112. package/esm2022/features/kanban/components/kanban-column/kanban-column.component.mjs +88 -0
  113. package/esm2022/features/kanban/components/kanban-item/kanban-item.component.mjs +72 -0
  114. package/esm2022/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.mjs +19 -0
  115. package/esm2022/features/kanban/directives/kanban-template.directive.mjs +22 -0
  116. package/esm2022/features/kanban/kanban.component.mjs +198 -0
  117. package/esm2022/features/kanban/services/kanban-event.service.mjs +27 -0
  118. package/esm2022/features/loading-state/loading-state.component.mjs +3 -62
  119. package/esm2022/features/mouse-events/directives/double-click.directive.mjs +34 -0
  120. package/esm2022/features/mouse-events/directives/long-press.directive.mjs +61 -0
  121. package/esm2022/features/paginator/paginator.component.mjs +8 -3
  122. package/esm2022/features/panel/panel.component.mjs +43 -11
  123. package/esm2022/features/pin-code-field/pin-code-field.component.mjs +234 -0
  124. package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +330 -0
  125. package/esm2022/features/rating-scale/rating-scale.component.mjs +86 -0
  126. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +3 -3
  127. package/esm2022/features/scaffold/scaffold.component.mjs +4 -6
  128. package/esm2022/features/select-button/select-button.component.mjs +7 -4
  129. package/esm2022/features/speech-recognition/services/speech-recognition.service.mjs +148 -0
  130. package/esm2022/features/speech-recognition/services/text-to-speech.service.mjs +88 -0
  131. package/esm2022/features/speech-recognition/speech-recognition.component.mjs +243 -0
  132. package/esm2022/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.mjs +521 -0
  133. package/esm2022/features/spotlight/directives/spotlight-step.directive.mjs +38 -0
  134. package/esm2022/features/spotlight/services/spotlight-tour.service.mjs +179 -0
  135. package/esm2022/features/spotlight/spotlight.component.mjs +160 -0
  136. package/esm2022/features/star-rating/star-rating.component.mjs +95 -0
  137. package/esm2022/features/stepper/stepper.component.mjs +86 -0
  138. package/esm2022/features/switch/switch.component.mjs +12 -8
  139. package/esm2022/features/tab/{tab-item.component.mjs → components/tab-item/tab-item.component.mjs} +1 -1
  140. package/esm2022/features/tab/tab.component.mjs +4 -4
  141. package/esm2022/features/table/components/table-cell-content.component.mjs +14 -5
  142. package/esm2022/features/table/table.component.mjs +220 -29
  143. package/esm2022/features/table/utils/table-data.util.mjs +71 -8
  144. package/esm2022/features/table/utils/table-layout.util.mjs +21 -1
  145. package/esm2022/features/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +367 -0
  146. package/esm2022/features/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.mjs +11 -0
  147. package/esm2022/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +97 -0
  148. package/esm2022/features/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +181 -0
  149. package/esm2022/features/tiered-menu/directives/tiered-menu.directive.mjs +246 -0
  150. package/esm2022/features/tiered-menu/services/tiered-menu.event.service.mjs +16 -0
  151. package/esm2022/features/tiered-menu/services/tiered-menu.global.service.mjs +12 -0
  152. package/esm2022/features/tiered-menu/services/tiered-menu.service.mjs +49 -0
  153. package/esm2022/features/tree/components/tree-node-item/tree-node-item.component.mjs +169 -0
  154. package/esm2022/features/tree/tree.component.mjs +211 -0
  155. package/esm2022/features/visual-sql-editor/components/visual-sql-editor-field-modal/visual-sql-editor-field-modal.component.mjs +41 -0
  156. package/esm2022/features/visual-sql-editor/components/visual-sql-editor-filter-modal/visual-sql-editor-filter-modal.component.mjs +38 -0
  157. package/esm2022/features/visual-sql-editor/components/visual-sql-editor-join-modal/visual-sql-editor-join-modal.component.mjs +29 -0
  158. package/esm2022/features/visual-sql-editor/components/visual-sql-editor-sort-modal/visual-sql-editor-sort-modal.component.mjs +29 -0
  159. package/esm2022/features/visual-sql-editor/components/visual-sql-editor-source-modal/visual-sql-editor-source-modal.component.mjs +35 -0
  160. package/esm2022/features/visual-sql-editor/services/visual-sql-editor-flow.service.mjs +106 -0
  161. package/esm2022/features/visual-sql-editor/services/visual-sql-editor-state.service.mjs +230 -0
  162. package/esm2022/features/visual-sql-editor/types/visual-sql-editor.types.mjs +2 -0
  163. package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-sanitize.util.mjs +72 -0
  164. package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-sql.util.mjs +281 -0
  165. package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-text.util.mjs +37 -0
  166. package/esm2022/features/visual-sql-editor/utils/visual-sql-editor.constants.mjs +89 -0
  167. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +172 -630
  168. package/esm2022/locales/en.json +351 -3
  169. package/esm2022/locales/es-CO.json +351 -3
  170. package/esm2022/locales/pt.json +351 -3
  171. package/esm2022/providers/features.provider.mjs +40 -4
  172. package/esm2022/public-api.mjs +56 -3
  173. package/features/accordion/accordion.component.d.ts +1 -1
  174. package/features/accordion/{accordion-item.component.d.ts → components/accordion-item/accordion-item.component.d.ts} +1 -1
  175. package/features/autocomplete/autocomplete.component.d.ts +102 -0
  176. package/features/autocomplete/components/autocomplete-chip/autocomplete-chip.component.d.ts +11 -0
  177. package/features/card-list/card/card.component.d.ts +14 -34
  178. package/features/chat/chat.component.d.ts +31 -0
  179. package/features/checkbox-list/checkbox-list.component.d.ts +26 -0
  180. package/features/combobox/combobox.component.d.ts +2 -1
  181. package/features/context-selector/context-selector.component.d.ts +37 -0
  182. package/features/gantt/components/gantt-side-table/gantt-side-table.component.d.ts +8 -0
  183. package/features/gantt/gantt-date.utils.d.ts +36 -0
  184. package/features/gantt/gantt.component.d.ts +24 -0
  185. package/features/gantt/gantt.engine.d.ts +52 -0
  186. package/features/grid-menu/grid-menu.component.d.ts +29 -0
  187. package/features/hyperlink/hyperlink.component.d.ts +2 -1
  188. package/features/image-cropper/image-cropper.component.d.ts +43 -0
  189. package/features/image-cropper/services/image-cropper.service.d.ts +13 -0
  190. package/features/infinite-scroll/infinite-scroll.directive.d.ts +25 -0
  191. package/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.d.ts +13 -0
  192. package/features/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.d.ts +13 -0
  193. package/features/inline-edit/components/fields/inline-edit-textarea/inline-edit-textarea.component.d.ts +13 -0
  194. package/features/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +37 -0
  195. package/features/inline-edit/fields/inline-edit-field.d.ts +12 -0
  196. package/features/inline-edit/fields/inline-edit-number-field.d.ts +9 -0
  197. package/features/inline-edit/fields/inline-edit-text-field.d.ts +7 -0
  198. package/features/inline-edit/fields/inline-edit-textarea-field.d.ts +9 -0
  199. package/features/inline-edit/inline-edit.component.d.ts +13 -0
  200. package/features/interactive-content/interactive-content.directive.d.ts +31 -0
  201. package/features/kanban/components/kanban-column/kanban-column.component.d.ts +22 -0
  202. package/features/kanban/components/kanban-item/kanban-item.component.d.ts +23 -0
  203. package/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.d.ts +8 -0
  204. package/features/kanban/directives/kanban-template.directive.d.ts +10 -0
  205. package/features/kanban/kanban.component.d.ts +32 -0
  206. package/features/kanban/services/kanban-event.service.d.ts +15 -0
  207. package/features/loading-state/loading-state.component.d.ts +0 -2
  208. package/features/mouse-events/directives/double-click.directive.d.ts +11 -0
  209. package/features/mouse-events/directives/long-press.directive.d.ts +14 -0
  210. package/features/panel/panel.component.d.ts +12 -3
  211. package/features/pin-code-field/pin-code-field.component.d.ts +44 -0
  212. package/features/profile-picture-picker/profile-picture-picker.component.d.ts +77 -0
  213. package/features/rating-scale/rating-scale.component.d.ts +24 -0
  214. package/features/select-button/select-button.component.d.ts +2 -1
  215. package/features/speech-recognition/services/speech-recognition.service.d.ts +29 -0
  216. package/features/speech-recognition/services/text-to-speech.service.d.ts +24 -0
  217. package/features/speech-recognition/speech-recognition.component.d.ts +50 -0
  218. package/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.d.ts +59 -0
  219. package/features/spotlight/directives/spotlight-step.directive.d.ts +13 -0
  220. package/features/spotlight/services/spotlight-tour.service.d.ts +46 -0
  221. package/features/spotlight/spotlight.component.d.ts +59 -0
  222. package/features/star-rating/star-rating.component.d.ts +26 -0
  223. package/features/stepper/stepper.component.d.ts +23 -0
  224. package/features/switch/switch.component.d.ts +2 -1
  225. package/features/tab/tab.component.d.ts +1 -1
  226. package/features/table/components/table-cell-content.component.d.ts +4 -3
  227. package/features/table/table.component.d.ts +40 -5
  228. package/features/table/utils/table-data.util.d.ts +1 -0
  229. package/features/table/utils/table-layout.util.d.ts +1 -0
  230. package/features/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +49 -0
  231. package/features/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.d.ts +5 -0
  232. package/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.d.ts +19 -0
  233. package/features/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +26 -0
  234. package/features/tiered-menu/directives/tiered-menu.directive.d.ts +44 -0
  235. package/features/tiered-menu/services/tiered-menu.event.service.d.ts +13 -0
  236. package/features/tiered-menu/services/tiered-menu.global.service.d.ts +7 -0
  237. package/features/tiered-menu/services/tiered-menu.service.d.ts +14 -0
  238. package/features/tree/components/tree-node-item/tree-node-item.component.d.ts +37 -0
  239. package/features/tree/tree.component.d.ts +37 -0
  240. package/features/visual-sql-editor/components/visual-sql-editor-field-modal/visual-sql-editor-field-modal.component.d.ts +18 -0
  241. package/features/visual-sql-editor/components/visual-sql-editor-filter-modal/visual-sql-editor-filter-modal.component.d.ts +17 -0
  242. package/features/visual-sql-editor/components/visual-sql-editor-join-modal/visual-sql-editor-join-modal.component.d.ts +13 -0
  243. package/features/visual-sql-editor/components/visual-sql-editor-sort-modal/visual-sql-editor-sort-modal.component.d.ts +13 -0
  244. package/features/visual-sql-editor/components/visual-sql-editor-source-modal/visual-sql-editor-source-modal.component.d.ts +15 -0
  245. package/features/visual-sql-editor/services/visual-sql-editor-flow.service.d.ts +26 -0
  246. package/features/visual-sql-editor/services/visual-sql-editor-state.service.d.ts +72 -0
  247. package/features/visual-sql-editor/types/visual-sql-editor.types.d.ts +182 -0
  248. package/features/visual-sql-editor/utils/visual-sql-editor-sanitize.util.d.ts +14 -0
  249. package/features/visual-sql-editor/utils/visual-sql-editor-sql.util.d.ts +81 -0
  250. package/features/visual-sql-editor/utils/visual-sql-editor-text.util.d.ts +15 -0
  251. package/features/visual-sql-editor/utils/visual-sql-editor.constants.d.ts +36 -0
  252. package/features/visual-sql-editor/visual-sql-editor.component.d.ts +37 -199
  253. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +14883 -6353
  254. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  255. package/package.json +8 -8
  256. package/public-api.d.ts +72 -2
  257. package/src/locales/en.json +353 -15
  258. package/src/locales/es-CO.json +352 -14
  259. package/src/locales/pt.json +352 -14
  260. package/styles/sdc-global-variables.scss +1 -1
  261. package/styles.css +1 -1
  262. /package/features/tab/{tab-item.component.d.ts → components/tab-item/tab-item.component.d.ts} +0 -0
@@ -0,0 +1,29 @@
1
+ import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { TextareaComponent } from '../../../../textarea/textarea.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ export class InlineEditTextareaComponent {
7
+ field;
8
+ formGroup;
9
+ tempValue = '';
10
+ ngOnInit() {
11
+ this.tempValue = this.formGroup.get(this.field.name)?.value ?? '';
12
+ }
13
+ saveValue() {
14
+ this.formGroup.get(this.field.name)?.setValue(this.tempValue);
15
+ }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineEditTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InlineEditTextareaComponent, isStandalone: true, selector: "sdc-inline-edit-textarea", inputs: { field: "field", formGroup: "formGroup" }, ngImport: i0, template: "<sdc-textarea\n [(ngModel)]=\"tempValue\"\n width=\"100%\"\n [rows]=\"field.rows || 3\"\n [placeholder]=\"field.placeholder || ''\"\n [maxlength]=\"field.maxlength || 524288\"\n></sdc-textarea>\n", styles: [".sdc-inline-edit-textarea__input{width:100%;box-sizing:border-box;resize:vertical}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TextareaComponent, selector: "sdc-textarea", inputs: ["infoTooltip", "infoTooltipPosition", "infoTooltipEvent", "rows", "autoResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineEditTextareaComponent, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'sdc-inline-edit-textarea', standalone: true, imports: [FormsModule, TextareaComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<sdc-textarea\n [(ngModel)]=\"tempValue\"\n width=\"100%\"\n [rows]=\"field.rows || 3\"\n [placeholder]=\"field.placeholder || ''\"\n [maxlength]=\"field.maxlength || 524288\"\n></sdc-textarea>\n", styles: [".sdc-inline-edit-textarea__input{width:100%;box-sizing:border-box;resize:vertical}\n"] }]
22
+ }], propDecorators: { field: [{
23
+ type: Input,
24
+ args: [{ required: true }]
25
+ }], formGroup: [{
26
+ type: Input,
27
+ args: [{ required: true }]
28
+ }] } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQtdGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9pbmxpbmUtZWRpdC9jb21wb25lbnRzL2ZpZWxkcy9pbmxpbmUtZWRpdC10ZXh0YXJlYS9pbmxpbmUtZWRpdC10ZXh0YXJlYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2lubGluZS1lZGl0L2NvbXBvbmVudHMvZmllbGRzL2lubGluZS1lZGl0LXRleHRhcmVhL2lubGluZS1lZGl0LXRleHRhcmVhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7O0FBVzVFLE1BQU0sT0FBTywyQkFBMkI7SUFDWCxLQUFLLENBQTJCO0lBQ2hDLFNBQVMsQ0FBYTtJQUVqRCxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRWYsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7d0dBWlUsMkJBQTJCOzRGQUEzQiwyQkFBMkIsd0lDZnhDLDBNQU9BLDZJREVZLFdBQVcsa2dCQUFFLGlCQUFpQjs7NEZBTTdCLDJCQUEyQjtrQkFUdkMsU0FBUzsrQkFDRSwwQkFBMEIsY0FDeEIsSUFBSSxXQUNQLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLG1CQUd4Qix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxRQUFROzhCQUdkLEtBQUs7c0JBQS9CLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNFLFNBQVM7c0JBQW5DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IElubGluZUVkaXRUZXh0QXJlYUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vZmllbGRzL2lubGluZS1lZGl0LXRleHRhcmVhLWZpZWxkJztcbmltcG9ydCB7IFRleHRhcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vdGV4dGFyZWEvdGV4dGFyZWEuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLWlubGluZS1lZGl0LXRleHRhcmVhJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0Zvcm1zTW9kdWxlLCBUZXh0YXJlYUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmxpbmUtZWRpdC10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lubGluZS1lZGl0LXRleHRhcmVhLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBJbmxpbmVFZGl0VGV4dGFyZWFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmaWVsZCE6IElubGluZUVkaXRUZXh0QXJlYUZpZWxkO1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG5cbiAgdGVtcFZhbHVlID0gJyc7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5maWVsZC5uYW1lKT8udmFsdWUgPz8gJyc7XG4gIH1cblxuICBzYXZlVmFsdWUoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZmllbGQubmFtZSk/LnNldFZhbHVlKHRoaXMudGVtcFZhbHVlKTtcbiAgfVxufVxuIiwiPHNkYy10ZXh0YXJlYVxuICBbKG5nTW9kZWwpXT1cInRlbXBWYWx1ZVwiXG4gIHdpZHRoPVwiMTAwJVwiXG4gIFtyb3dzXT1cImZpZWxkLnJvd3MgfHwgM1wiXG4gIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ1wiXG4gIFttYXhsZW5ndGhdPVwiZmllbGQubWF4bGVuZ3RoIHx8IDUyNDI4OFwiXG4+PC9zZGMtdGV4dGFyZWE+XG4iXX0=
@@ -0,0 +1,131 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewChild, ViewEncapsulation, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { TranslateModule } from '@ngx-translate/core';
4
+ import { ButtonComponent } from '../../../button/button.component';
5
+ import { ControlErrorsComponent } from '../../../control-errors/control-errors.component';
6
+ import { InlineEditTextField } from '../../fields/inline-edit-text-field';
7
+ import { InlineEditNumberField } from '../../fields/inline-edit-number-field';
8
+ import { InlineEditTextAreaField } from '../../fields/inline-edit-textarea-field';
9
+ import { InlineEditTextComponent } from '../fields/inline-edit-text/inline-edit-text.component';
10
+ import { InlineEditNumberComponent } from '../fields/inline-edit-number/inline-edit-number.component';
11
+ import { InlineEditTextareaComponent } from '../fields/inline-edit-textarea/inline-edit-textarea.component';
12
+ import { INLINE_EDIT_ADD_INFO_KEY, INLINE_EDIT_CANCEL_KEY, INLINE_EDIT_EDIT_KEY, INLINE_EDIT_SAVE_KEY } from '../../../../core/constants/inline-edit.const';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@ngx-translate/core";
15
+ export class InlineEditItemComponent {
16
+ cdr = inject(ChangeDetectorRef);
17
+ field;
18
+ formGroup;
19
+ errorMessages;
20
+ textEditor;
21
+ numberEditor;
22
+ textareaEditor;
23
+ isEditing = false;
24
+ originalValue = null;
25
+ addInfoKey = INLINE_EDIT_ADD_INFO_KEY;
26
+ editKey = INLINE_EDIT_EDIT_KEY;
27
+ saveKey = INLINE_EDIT_SAVE_KEY;
28
+ cancelKey = INLINE_EDIT_CANCEL_KEY;
29
+ ngOnInit() {
30
+ this.originalValue = this.formGroup.get(this.field.name)?.value ?? null;
31
+ }
32
+ get hasValue() {
33
+ const value = this.formGroup.get(this.field.name)?.value;
34
+ return value !== null && value !== undefined && value !== '';
35
+ }
36
+ get showValue() {
37
+ return !this.isEditing && this.hasValue;
38
+ }
39
+ get showEmptyButton() {
40
+ return !this.isEditing && !this.hasValue;
41
+ }
42
+ get showEditButton() {
43
+ return !this.isEditing && this.hasValue;
44
+ }
45
+ get fieldType() {
46
+ if (this.field instanceof InlineEditTextField) {
47
+ return 'text';
48
+ }
49
+ if (this.field instanceof InlineEditNumberField) {
50
+ return 'number';
51
+ }
52
+ if (this.field instanceof InlineEditTextAreaField) {
53
+ return 'textarea';
54
+ }
55
+ return 'text';
56
+ }
57
+ get resolvedErrorMessages() {
58
+ const fieldMessages = typeof this.field.errorMessages === 'function'
59
+ ? this.field.errorMessages()
60
+ : (this.field.errorMessages ?? {});
61
+ return { ...(this.errorMessages ?? {}), ...fieldMessages };
62
+ }
63
+ asTextField() {
64
+ if (this.field instanceof InlineEditTextField) {
65
+ return this.field;
66
+ }
67
+ throw new Error('Inline edit field is not a text field.');
68
+ }
69
+ asNumberField() {
70
+ if (this.field instanceof InlineEditNumberField) {
71
+ return this.field;
72
+ }
73
+ throw new Error('Inline edit field is not a number field.');
74
+ }
75
+ asTextareaField() {
76
+ if (this.field instanceof InlineEditTextAreaField) {
77
+ return this.field;
78
+ }
79
+ throw new Error('Inline edit field is not a textarea field.');
80
+ }
81
+ onEdit() {
82
+ this.originalValue = this.formGroup.get(this.field.name)?.value ?? null;
83
+ this.isEditing = true;
84
+ this.cdr.markForCheck();
85
+ }
86
+ onSave() {
87
+ this.textEditor?.saveValue();
88
+ this.numberEditor?.saveValue();
89
+ this.textareaEditor?.saveValue();
90
+ this.originalValue = this.formGroup.get(this.field.name)?.value ?? null;
91
+ this.isEditing = false;
92
+ this.cdr.markForCheck();
93
+ }
94
+ onCancel() {
95
+ this.formGroup.get(this.field.name)?.setValue(this.originalValue);
96
+ this.isEditing = false;
97
+ this.cdr.markForCheck();
98
+ }
99
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineEditItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
100
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InlineEditItemComponent, isStandalone: true, selector: "sdc-inline-edit-item", inputs: { field: "field", formGroup: "formGroup", errorMessages: "errorMessages" }, viewQueries: [{ propertyName: "textEditor", first: true, predicate: InlineEditTextComponent, descendants: true }, { propertyName: "numberEditor", first: true, predicate: InlineEditNumberComponent, descendants: true }, { propertyName: "textareaEditor", first: true, predicate: InlineEditTextareaComponent, descendants: true }], ngImport: i0, template: "<div class=\"sdc-inline-edit-item\">\n <span\n class=\"sdc-inline-edit-item__label\"\n [title]=\"field.tooltip || ''\"\n [attr.aria-label]=\"field.label\"\n >\n {{ field.label }}\n </span>\n\n <div class=\"sdc-inline-edit-item__content\">\n @if (showValue) {\n <span class=\"sdc-inline-edit-item__value\">\n {{ formGroup.get(field.name)?.value }}\n </span>\n }\n\n @if (showEmptyButton) {\n <sdc-button\n priority=\"link\"\n [label]=\"addInfoKey | translate\"\n (clicked)=\"onEdit()\"\n ></sdc-button>\n }\n\n @if (isEditing) {\n <div class=\"sdc-inline-edit-item__editor\" [attr.aria-label]=\"field.label\">\n @switch (fieldType) {\n @case ('text') {\n <sdc-inline-edit-text [field]=\"asTextField()\" [formGroup]=\"formGroup\"></sdc-inline-edit-text>\n }\n @case ('number') {\n <sdc-inline-edit-number [field]=\"asNumberField()\" [formGroup]=\"formGroup\"></sdc-inline-edit-number>\n }\n @case ('textarea') {\n <sdc-inline-edit-textarea\n [field]=\"asTextareaField()\"\n [formGroup]=\"formGroup\"\n ></sdc-inline-edit-textarea>\n }\n }\n </div>\n }\n\n <div class=\"sdc-inline-edit-item__actions\">\n @if (showEditButton) {\n <sdc-button\n priority=\"link\"\n [auxiliary]=\"true\"\n icon=\"fas fa-edit\"\n [tooltip]=\"editKey | translate\"\n [attr.aria-expanded]=\"isEditing\"\n (clicked)=\"onEdit()\"\n ></sdc-button>\n }\n\n @if (isEditing) {\n <sdc-button\n priority=\"default\"\n [auxiliary]=\"true\"\n icon=\"fas fa-check\"\n [tooltip]=\"saveKey | translate\"\n (clicked)=\"onSave()\"\n ></sdc-button>\n\n <sdc-button\n priority=\"default\"\n [auxiliary]=\"true\"\n icon=\"fas fa-times\"\n [tooltip]=\"cancelKey | translate\"\n (clicked)=\"onCancel()\"\n ></sdc-button>\n }\n </div>\n </div>\n\n <sdc-control-errors\n [control]=\"formGroup.get(field.name)\"\n [errorMessages]=\"resolvedErrorMessages\"\n showWhen=\"dirty-or-touched\"\n ></sdc-control-errors>\n</div>\n", styles: [".sdc-inline-edit-item{--sdc-inline-edit-label-color: #334155;--sdc-inline-edit-label-size: .875rem;--sdc-inline-edit-label-weight: 600;--sdc-inline-edit-value-color: #475569;--sdc-inline-edit-value-size: .9375rem;--sdc-inline-edit-gap: .75rem;display:flex;flex-direction:column;gap:.5rem;padding:.5rem 0}.sdc-inline-edit-item__label{color:var(--sdc-inline-edit-label-color);font-size:var(--sdc-inline-edit-label-size);font-weight:var(--sdc-inline-edit-label-weight);line-height:1.25rem}.sdc-inline-edit-item__content{display:flex;align-items:center;gap:var(--sdc-inline-edit-gap);flex-wrap:nowrap;min-width:0}.sdc-inline-edit-item__value{color:var(--sdc-inline-edit-value-color);font-size:var(--sdc-inline-edit-value-size);display:inline-flex;align-items:center;flex:1 1 auto;min-height:2rem;min-width:0;word-break:break-word}.sdc-inline-edit-item__editor{flex:1 1 auto;min-width:0}.sdc-inline-edit-item__actions{display:flex;align-items:center;gap:.25rem;flex-shrink:0}@media (max-width: 640px){.sdc-inline-edit-item__content{align-items:flex-start;flex-wrap:wrap}.sdc-inline-edit-item__editor,.sdc-inline-edit-item__value{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["id", "label", "ariaLabel", "disabled", "width", "priority", "size", "type", "icon", "rightIcon", "auxiliary", "caret", "tooltip", "animation", "slide", "styleClass", "badge", "menuOptions", "menuContext", "model"], outputs: ["clicked"] }, { kind: "component", type: ControlErrorsComponent, selector: "sdc-control-errors", inputs: ["id", "control", "errorMessages", "showWhen", "form"] }, { kind: "component", type: InlineEditTextComponent, selector: "sdc-inline-edit-text", inputs: ["field", "formGroup"] }, { kind: "component", type: InlineEditNumberComponent, selector: "sdc-inline-edit-number", inputs: ["field", "formGroup"] }, { kind: "component", type: InlineEditTextareaComponent, selector: "sdc-inline-edit-textarea", inputs: ["field", "formGroup"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineEditItemComponent, decorators: [{
103
+ type: Component,
104
+ args: [{ selector: 'sdc-inline-edit-item', standalone: true, imports: [
105
+ CommonModule,
106
+ TranslateModule,
107
+ ButtonComponent,
108
+ ControlErrorsComponent,
109
+ InlineEditTextComponent,
110
+ InlineEditNumberComponent,
111
+ InlineEditTextareaComponent
112
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-inline-edit-item\">\n <span\n class=\"sdc-inline-edit-item__label\"\n [title]=\"field.tooltip || ''\"\n [attr.aria-label]=\"field.label\"\n >\n {{ field.label }}\n </span>\n\n <div class=\"sdc-inline-edit-item__content\">\n @if (showValue) {\n <span class=\"sdc-inline-edit-item__value\">\n {{ formGroup.get(field.name)?.value }}\n </span>\n }\n\n @if (showEmptyButton) {\n <sdc-button\n priority=\"link\"\n [label]=\"addInfoKey | translate\"\n (clicked)=\"onEdit()\"\n ></sdc-button>\n }\n\n @if (isEditing) {\n <div class=\"sdc-inline-edit-item__editor\" [attr.aria-label]=\"field.label\">\n @switch (fieldType) {\n @case ('text') {\n <sdc-inline-edit-text [field]=\"asTextField()\" [formGroup]=\"formGroup\"></sdc-inline-edit-text>\n }\n @case ('number') {\n <sdc-inline-edit-number [field]=\"asNumberField()\" [formGroup]=\"formGroup\"></sdc-inline-edit-number>\n }\n @case ('textarea') {\n <sdc-inline-edit-textarea\n [field]=\"asTextareaField()\"\n [formGroup]=\"formGroup\"\n ></sdc-inline-edit-textarea>\n }\n }\n </div>\n }\n\n <div class=\"sdc-inline-edit-item__actions\">\n @if (showEditButton) {\n <sdc-button\n priority=\"link\"\n [auxiliary]=\"true\"\n icon=\"fas fa-edit\"\n [tooltip]=\"editKey | translate\"\n [attr.aria-expanded]=\"isEditing\"\n (clicked)=\"onEdit()\"\n ></sdc-button>\n }\n\n @if (isEditing) {\n <sdc-button\n priority=\"default\"\n [auxiliary]=\"true\"\n icon=\"fas fa-check\"\n [tooltip]=\"saveKey | translate\"\n (clicked)=\"onSave()\"\n ></sdc-button>\n\n <sdc-button\n priority=\"default\"\n [auxiliary]=\"true\"\n icon=\"fas fa-times\"\n [tooltip]=\"cancelKey | translate\"\n (clicked)=\"onCancel()\"\n ></sdc-button>\n }\n </div>\n </div>\n\n <sdc-control-errors\n [control]=\"formGroup.get(field.name)\"\n [errorMessages]=\"resolvedErrorMessages\"\n showWhen=\"dirty-or-touched\"\n ></sdc-control-errors>\n</div>\n", styles: [".sdc-inline-edit-item{--sdc-inline-edit-label-color: #334155;--sdc-inline-edit-label-size: .875rem;--sdc-inline-edit-label-weight: 600;--sdc-inline-edit-value-color: #475569;--sdc-inline-edit-value-size: .9375rem;--sdc-inline-edit-gap: .75rem;display:flex;flex-direction:column;gap:.5rem;padding:.5rem 0}.sdc-inline-edit-item__label{color:var(--sdc-inline-edit-label-color);font-size:var(--sdc-inline-edit-label-size);font-weight:var(--sdc-inline-edit-label-weight);line-height:1.25rem}.sdc-inline-edit-item__content{display:flex;align-items:center;gap:var(--sdc-inline-edit-gap);flex-wrap:nowrap;min-width:0}.sdc-inline-edit-item__value{color:var(--sdc-inline-edit-value-color);font-size:var(--sdc-inline-edit-value-size);display:inline-flex;align-items:center;flex:1 1 auto;min-height:2rem;min-width:0;word-break:break-word}.sdc-inline-edit-item__editor{flex:1 1 auto;min-width:0}.sdc-inline-edit-item__actions{display:flex;align-items:center;gap:.25rem;flex-shrink:0}@media (max-width: 640px){.sdc-inline-edit-item__content{align-items:flex-start;flex-wrap:wrap}.sdc-inline-edit-item__editor,.sdc-inline-edit-item__value{width:100%}}\n"] }]
113
+ }], propDecorators: { field: [{
114
+ type: Input,
115
+ args: [{ required: true }]
116
+ }], formGroup: [{
117
+ type: Input,
118
+ args: [{ required: true }]
119
+ }], errorMessages: [{
120
+ type: Input
121
+ }], textEditor: [{
122
+ type: ViewChild,
123
+ args: [InlineEditTextComponent]
124
+ }], numberEditor: [{
125
+ type: ViewChild,
126
+ args: [InlineEditNumberComponent]
127
+ }], textareaEditor: [{
128
+ type: ViewChild,
129
+ args: [InlineEditTextareaComponent]
130
+ }] } });
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2lubGluZS1lZGl0L2NvbXBvbmVudHMvaW5saW5lLWVkaXQtaXRlbS9pbmxpbmUtZWRpdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvaW5saW5lLWVkaXQvY29tcG9uZW50cy9pbmxpbmUtZWRpdC1pdGVtL2lubGluZS1lZGl0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUUxRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM1RyxPQUFPLEVBQ0wsd0JBQXdC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Q0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQzt3R0E3R1UsdUJBQXVCOzRGQUF2Qix1QkFBdUIsZ05BT3ZCLHVCQUF1QiwrRUFDdkIseUJBQXlCLGlGQUN6QiwyQkFBMkIsZ0RDeER4QywweEVBaUZBLDJxQ0QvQ0ksWUFBWSw4QkFDWixlQUFlLDRGQUNmLGVBQWUsOFNBQ2Ysc0JBQXNCLCtIQUN0Qix1QkFBdUIsaUdBQ3ZCLHlCQUF5QixtR0FDekIsMkJBQTJCOzs0RkFPbEIsdUJBQXVCO2tCQWpCbkMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixlQUFlO3dCQUNmLHNCQUFzQjt3QkFDdEIsdUJBQXVCO3dCQUN2Qix5QkFBeUI7d0JBQ3pCLDJCQUEyQjtxQkFDNUIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFFBQVE7OEJBS2QsS0FBSztzQkFBL0IsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ0UsU0FBUztzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRStDLFVBQVU7c0JBQTlELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNxQixZQUFZO3NCQUFsRSxTQUFTO3VCQUFDLHlCQUF5QjtnQkFDcUIsY0FBYztzQkFBdEUsU0FBUzt1QkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb250cm9sRXJyb3JzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29udHJvbC1lcnJvcnMvY29udHJvbC1lcnJvcnMuY29tcG9uZW50JztcbmltcG9ydCB7IElubGluZUVkaXRGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9pbmxpbmUtZWRpdC1maWVsZCc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0VGV4dEZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL2lubGluZS1lZGl0LXRleHQtZmllbGQnO1xuaW1wb3J0IHsgSW5saW5lRWRpdE51bWJlckZpZWxkIH0gZnJvbSAnLi4vLi4vZmllbGRzL2lubGluZS1lZGl0LW51bWJlci1maWVsZCc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0VGV4dEFyZWFGaWVsZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9pbmxpbmUtZWRpdC10ZXh0YXJlYS1maWVsZCc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0VGV4dENvbXBvbmVudCB9IGZyb20gJy4uL2ZpZWxkcy9pbmxpbmUtZWRpdC10ZXh0L2lubGluZS1lZGl0LXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IElubGluZUVkaXROdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZHMvaW5saW5lLWVkaXQtbnVtYmVyL2lubGluZS1lZGl0LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5saW5lRWRpdFRleHRhcmVhQ29tcG9uZW50IH0gZnJvbSAnLi4vZmllbGRzL2lubGluZS1lZGl0LXRleHRhcmVhL2lubGluZS1lZGl0LXRleHRhcmVhLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBJTkxJTkVfRURJVF9BRERfSU5GT19LRVksXG4gIElOTElORV9FRElUX0NBTkNFTF9LRVksXG4gIElOTElORV9FRElUX0VESVRfS0VZLFxuICBJTkxJTkVfRURJVF9TQVZFX0tFWVxufSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2NvbnN0YW50cy9pbmxpbmUtZWRpdC5jb25zdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NkYy1pbmxpbmUtZWRpdC1pdGVtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIENvbnRyb2xFcnJvcnNDb21wb25lbnQsXG4gICAgSW5saW5lRWRpdFRleHRDb21wb25lbnQsXG4gICAgSW5saW5lRWRpdE51bWJlckNvbXBvbmVudCxcbiAgICBJbmxpbmVFZGl0VGV4dGFyZWFDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2lubGluZS1lZGl0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbmxpbmUtZWRpdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBJbmxpbmVFZGl0SXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmaWVsZCE6IElubGluZUVkaXRGaWVsZDtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICBAVmlld0NoaWxkKElubGluZUVkaXRUZXh0Q29tcG9uZW50KSBwcml2YXRlIHJlYWRvbmx5IHRleHRFZGl0b3I/OiBJbmxpbmVFZGl0VGV4dENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChJbmxpbmVFZGl0TnVtYmVyQ29tcG9uZW50KSBwcml2YXRlIHJlYWRvbmx5IG51bWJlckVkaXRvcj86IElubGluZUVkaXROdW1iZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoSW5saW5lRWRpdFRleHRhcmVhQ29tcG9uZW50KSBwcml2YXRlIHJlYWRvbmx5IHRleHRhcmVhRWRpdG9yPzogSW5saW5lRWRpdFRleHRhcmVhQ29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCBpc0VkaXRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlOiB1bmtub3duID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWRkSW5mb0tleSA9IElOTElORV9FRElUX0FERF9JTkZPX0tFWTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVkaXRLZXkgPSBJTkxJTkVfRURJVF9FRElUX0tFWTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNhdmVLZXkgPSBJTkxJTkVfRURJVF9TQVZFX0tFWTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbmNlbEtleSA9IElOTElORV9FRElUX0NBTkNFTF9LRVk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZmllbGQubmFtZSk/LnZhbHVlID8/IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGhhc1ZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZmllbGQubmFtZSk/LnZhbHVlO1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc2hvd1ZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0VkaXRpbmcgJiYgdGhpcy5oYXNWYWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc2hvd0VtcHR5QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0VkaXRpbmcgJiYgIXRoaXMuaGFzVmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHNob3dFZGl0QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0VkaXRpbmcgJiYgdGhpcy5oYXNWYWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZmllbGRUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmllbGQgaW5zdGFuY2VvZiBJbmxpbmVFZGl0VGV4dEZpZWxkKSB7XG4gICAgICByZXR1cm4gJ3RleHQnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpZWxkIGluc3RhbmNlb2YgSW5saW5lRWRpdE51bWJlckZpZWxkKSB7XG4gICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmllbGQgaW5zdGFuY2VvZiBJbmxpbmVFZGl0VGV4dEFyZWFGaWVsZCkge1xuICAgICAgcmV0dXJuICd0ZXh0YXJlYSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICd0ZXh0JztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgcmVzb2x2ZWRFcnJvck1lc3NhZ2VzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGZpZWxkTWVzc2FnZXMgPVxuICAgICAgdHlwZW9mIHRoaXMuZmllbGQuZXJyb3JNZXNzYWdlcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHRoaXMuZmllbGQuZXJyb3JNZXNzYWdlcygpXG4gICAgICAgIDogKHRoaXMuZmllbGQuZXJyb3JNZXNzYWdlcyA/PyB7fSk7XG5cbiAgICByZXR1cm4geyAuLi4odGhpcy5lcnJvck1lc3NhZ2VzID8/IHt9KSwgLi4uZmllbGRNZXNzYWdlcyB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzVGV4dEZpZWxkKCk6IElubGluZUVkaXRUZXh0RmllbGQge1xuICAgIGlmICh0aGlzLmZpZWxkIGluc3RhbmNlb2YgSW5saW5lRWRpdFRleHRGaWVsZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmllbGQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbmxpbmUgZWRpdCBmaWVsZCBpcyBub3QgYSB0ZXh0IGZpZWxkLicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzTnVtYmVyRmllbGQoKTogSW5saW5lRWRpdE51bWJlckZpZWxkIHtcbiAgICBpZiAodGhpcy5maWVsZCBpbnN0YW5jZW9mIElubGluZUVkaXROdW1iZXJGaWVsZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmllbGQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbmxpbmUgZWRpdCBmaWVsZCBpcyBub3QgYSBudW1iZXIgZmllbGQuJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXNUZXh0YXJlYUZpZWxkKCk6IElubGluZUVkaXRUZXh0QXJlYUZpZWxkIHtcbiAgICBpZiAodGhpcy5maWVsZCBpbnN0YW5jZW9mIElubGluZUVkaXRUZXh0QXJlYUZpZWxkKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWVsZDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lubGluZSBlZGl0IGZpZWxkIGlzIG5vdCBhIHRleHRhcmVhIGZpZWxkLicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRWRpdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5maWVsZC5uYW1lKT8udmFsdWUgPz8gbnVsbDtcbiAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TYXZlKCk6IHZvaWQge1xuICAgIHRoaXMudGV4dEVkaXRvcj8uc2F2ZVZhbHVlKCk7XG4gICAgdGhpcy5udW1iZXJFZGl0b3I/LnNhdmVWYWx1ZSgpO1xuICAgIHRoaXMudGV4dGFyZWFFZGl0b3I/LnNhdmVWYWx1ZSgpO1xuXG4gICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZmllbGQubmFtZSk/LnZhbHVlID8/IG51bGw7XG4gICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5maWVsZC5uYW1lKT8uc2V0VmFsdWUodGhpcy5vcmlnaW5hbFZhbHVlKTtcbiAgICB0aGlzLmlzRWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2RjLWlubGluZS1lZGl0LWl0ZW1cIj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cInNkYy1pbmxpbmUtZWRpdC1pdGVtX19sYWJlbFwiXG4gICAgW3RpdGxlXT1cImZpZWxkLnRvb2x0aXAgfHwgJydcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZmllbGQubGFiZWxcIlxuICA+XG4gICAge3sgZmllbGQubGFiZWwgfX1cbiAgPC9zcGFuPlxuXG4gIDxkaXYgY2xhc3M9XCJzZGMtaW5saW5lLWVkaXQtaXRlbV9fY29udGVudFwiPlxuICAgIEBpZiAoc2hvd1ZhbHVlKSB7XG4gICAgICA8c3BhbiBjbGFzcz1cInNkYy1pbmxpbmUtZWRpdC1pdGVtX192YWx1ZVwiPlxuICAgICAgICB7eyBmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy52YWx1ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgIH1cblxuICAgIEBpZiAoc2hvd0VtcHR5QnV0dG9uKSB7XG4gICAgICA8c2RjLWJ1dHRvblxuICAgICAgICBwcmlvcml0eT1cImxpbmtcIlxuICAgICAgICBbbGFiZWxdPVwiYWRkSW5mb0tleSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGlja2VkKT1cIm9uRWRpdCgpXCJcbiAgICAgID48L3NkYy1idXR0b24+XG4gICAgfVxuXG4gICAgQGlmIChpc0VkaXRpbmcpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzZGMtaW5saW5lLWVkaXQtaXRlbV9fZWRpdG9yXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJmaWVsZC5sYWJlbFwiPlxuICAgICAgICBAc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICBAY2FzZSAoJ3RleHQnKSB7XG4gICAgICAgICAgICA8c2RjLWlubGluZS1lZGl0LXRleHQgW2ZpZWxkXT1cImFzVGV4dEZpZWxkKClcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPjwvc2RjLWlubGluZS1lZGl0LXRleHQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgnbnVtYmVyJykge1xuICAgICAgICAgICAgPHNkYy1pbmxpbmUtZWRpdC1udW1iZXIgW2ZpZWxkXT1cImFzTnVtYmVyRmllbGQoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+PC9zZGMtaW5saW5lLWVkaXQtbnVtYmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAY2FzZSAoJ3RleHRhcmVhJykge1xuICAgICAgICAgICAgPHNkYy1pbmxpbmUtZWRpdC10ZXh0YXJlYVxuICAgICAgICAgICAgICBbZmllbGRdPVwiYXNUZXh0YXJlYUZpZWxkKClcIlxuICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgICAgICAgICA+PC9zZGMtaW5saW5lLWVkaXQtdGV4dGFyZWE+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8ZGl2IGNsYXNzPVwic2RjLWlubGluZS1lZGl0LWl0ZW1fX2FjdGlvbnNcIj5cbiAgICAgIEBpZiAoc2hvd0VkaXRCdXR0b24pIHtcbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBwcmlvcml0eT1cImxpbmtcIlxuICAgICAgICAgIFthdXhpbGlhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgaWNvbj1cImZhcyBmYS1lZGl0XCJcbiAgICAgICAgICBbdG9vbHRpcF09XCJlZGl0S2V5IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRWRpdGluZ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwib25FZGl0KClcIlxuICAgICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGlzRWRpdGluZykge1xuICAgICAgICA8c2RjLWJ1dHRvblxuICAgICAgICAgIHByaW9yaXR5PVwiZGVmYXVsdFwiXG4gICAgICAgICAgW2F1eGlsaWFyeV09XCJ0cnVlXCJcbiAgICAgICAgICBpY29uPVwiZmFzIGZhLWNoZWNrXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCJzYXZlS2V5IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJvblNhdmUoKVwiXG4gICAgICAgID48L3NkYy1idXR0b24+XG5cbiAgICAgICAgPHNkYy1idXR0b25cbiAgICAgICAgICBwcmlvcml0eT1cImRlZmF1bHRcIlxuICAgICAgICAgIFthdXhpbGlhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgaWNvbj1cImZhcyBmYS10aW1lc1wiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiY2FuY2VsS2V5IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCJcbiAgICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHNkYy1jb250cm9sLWVycm9yc1xuICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxuICAgIFtlcnJvck1lc3NhZ2VzXT1cInJlc29sdmVkRXJyb3JNZXNzYWdlc1wiXG4gICAgc2hvd1doZW49XCJkaXJ0eS1vci10b3VjaGVkXCJcbiAgPjwvc2RjLWNvbnRyb2wtZXJyb3JzPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Classe base abstrata para todos os campos do InlineEdit.
3
+ * Estenda esta classe para criar novos tipos de campo.
4
+ */
5
+ export class InlineEditField {
6
+ label;
7
+ name;
8
+ tooltip;
9
+ errorMessages;
10
+ constructor(opts) {
11
+ this.label = opts.label;
12
+ this.name = opts.name;
13
+ this.tooltip = opts.tooltip;
14
+ this.errorMessages = opts.errorMessages;
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQtZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2lubGluZS1lZGl0L2ZpZWxkcy9pbmxpbmUtZWRpdC1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLGVBQWU7SUFDMUIsS0FBSyxDQUFTO0lBQ2QsSUFBSSxDQUFTO0lBQ2IsT0FBTyxDQUFVO0lBQ2pCLGFBQWEsQ0FBMkQ7SUFFakYsWUFBWSxJQUE0QjtRQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDMUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbmxpbmVFZGl0RmllbGRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90eXBlcy9pbmxpbmUtZWRpdC50eXBlJztcblxuLyoqXG4gKiBDbGFzc2UgYmFzZSBhYnN0cmF0YSBwYXJhIHRvZG9zIG9zIGNhbXBvcyBkbyBJbmxpbmVFZGl0LlxuICogRXN0ZW5kYSBlc3RhIGNsYXNzZSBwYXJhIGNyaWFyIG5vdm9zIHRpcG9zIGRlIGNhbXBvLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lRWRpdEZpZWxkIHtcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0b29sdGlwPzogc3RyaW5nO1xuICByZWFkb25seSBlcnJvck1lc3NhZ2VzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcblxuICBjb25zdHJ1Y3RvcihvcHRzOiBJbmxpbmVFZGl0RmllbGRPcHRpb25zKSB7XG4gICAgdGhpcy5sYWJlbCA9IG9wdHMubGFiZWw7XG4gICAgdGhpcy5uYW1lID0gb3B0cy5uYW1lO1xuICAgIHRoaXMudG9vbHRpcCA9IG9wdHMudG9vbHRpcDtcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBvcHRzLmVycm9yTWVzc2FnZXM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { InlineEditField } from './inline-edit-field';
2
+ export class InlineEditNumberField extends InlineEditField {
3
+ placeholder;
4
+ min;
5
+ max;
6
+ step;
7
+ constructor(opts) {
8
+ super(opts);
9
+ this.placeholder = opts.placeholder;
10
+ this.min = opts.min;
11
+ this.max = opts.max;
12
+ this.step = opts.step;
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQtbnVtYmVyLWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9pbmxpbmUtZWRpdC9maWVsZHMvaW5saW5lLWVkaXQtbnVtYmVyLWZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQUMvQyxXQUFXLENBQVU7SUFDckIsR0FBRyxDQUFVO0lBQ2IsR0FBRyxDQUFVO0lBQ2IsSUFBSSxDQUFVO0lBRXZCLFlBQVksSUFBa0M7UUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNwQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5saW5lRWRpdE51bWJlckZpZWxkT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdHlwZXMvaW5saW5lLWVkaXQudHlwZSc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0RmllbGQgfSBmcm9tICcuL2lubGluZS1lZGl0LWZpZWxkJztcblxuZXhwb3J0IGNsYXNzIElubGluZUVkaXROdW1iZXJGaWVsZCBleHRlbmRzIElubGluZUVkaXRGaWVsZCB7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICByZWFkb25seSBtaW4/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heD86IG51bWJlcjtcbiAgcmVhZG9ubHkgc3RlcD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRzOiBJbmxpbmVFZGl0TnVtYmVyRmllbGRPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IG9wdHMucGxhY2Vob2xkZXI7XG4gICAgdGhpcy5taW4gPSBvcHRzLm1pbjtcbiAgICB0aGlzLm1heCA9IG9wdHMubWF4O1xuICAgIHRoaXMuc3RlcCA9IG9wdHMuc3RlcDtcbiAgfVxufVxuIl19
@@ -0,0 +1,11 @@
1
+ import { InlineEditField } from './inline-edit-field';
2
+ export class InlineEditTextField extends InlineEditField {
3
+ placeholder;
4
+ maxlength;
5
+ constructor(opts) {
6
+ super(opts);
7
+ this.placeholder = opts.placeholder;
8
+ this.maxlength = opts.maxlength;
9
+ }
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQtdGV4dC1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvaW5saW5lLWVkaXQvZmllbGRzL2lubGluZS1lZGl0LXRleHQtZmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxlQUFlO0lBQzdDLFdBQVcsQ0FBVTtJQUNyQixTQUFTLENBQVU7SUFFNUIsWUFBWSxJQUFnQztRQUMxQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5saW5lRWRpdFRleHRGaWVsZE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3R5cGVzL2lubGluZS1lZGl0LnR5cGUnO1xuaW1wb3J0IHsgSW5saW5lRWRpdEZpZWxkIH0gZnJvbSAnLi9pbmxpbmUtZWRpdC1maWVsZCc7XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVFZGl0VGV4dEZpZWxkIGV4dGVuZHMgSW5saW5lRWRpdEZpZWxkIHtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1heGxlbmd0aD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRzOiBJbmxpbmVFZGl0VGV4dEZpZWxkT3B0aW9ucykge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBvcHRzLnBsYWNlaG9sZGVyO1xuICAgIHRoaXMubWF4bGVuZ3RoID0gb3B0cy5tYXhsZW5ndGg7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { InlineEditField } from './inline-edit-field';
2
+ export class InlineEditTextAreaField extends InlineEditField {
3
+ rows;
4
+ cols;
5
+ placeholder;
6
+ maxlength;
7
+ constructor(opts) {
8
+ super(opts);
9
+ this.rows = opts.rows;
10
+ this.cols = opts.cols;
11
+ this.placeholder = opts.placeholder;
12
+ this.maxlength = opts.maxlength;
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQtdGV4dGFyZWEtZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2lubGluZS1lZGl0L2ZpZWxkcy9pbmxpbmUtZWRpdC10ZXh0YXJlYS1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGVBQWU7SUFDakQsSUFBSSxDQUFVO0lBQ2QsSUFBSSxDQUFVO0lBQ2QsV0FBVyxDQUFVO0lBQ3JCLFNBQVMsQ0FBVTtJQUU1QixZQUFZLElBQW9DO1FBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElubGluZUVkaXRUZXh0QXJlYUZpZWxkT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdHlwZXMvaW5saW5lLWVkaXQudHlwZSc7XG5pbXBvcnQgeyBJbmxpbmVFZGl0RmllbGQgfSBmcm9tICcuL2lubGluZS1lZGl0LWZpZWxkJztcblxuZXhwb3J0IGNsYXNzIElubGluZUVkaXRUZXh0QXJlYUZpZWxkIGV4dGVuZHMgSW5saW5lRWRpdEZpZWxkIHtcbiAgcmVhZG9ubHkgcm93cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgY29scz86IG51bWJlcjtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1heGxlbmd0aD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihvcHRzOiBJbmxpbmVFZGl0VGV4dEFyZWFGaWVsZE9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLnJvd3MgPSBvcHRzLnJvd3M7XG4gICAgdGhpcy5jb2xzID0gb3B0cy5jb2xzO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBvcHRzLnBsYWNlaG9sZGVyO1xuICAgIHRoaXMubWF4bGVuZ3RoID0gb3B0cy5tYXhsZW5ndGg7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,27 @@
1
+ import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { InlineEditItemComponent } from './components/inline-edit-item/inline-edit-item.component';
4
+ import * as i0 from "@angular/core";
5
+ export class InlineEditComponent {
6
+ /** FormGroup que contém os controles para cada campo. */
7
+ formGroup;
8
+ /** Lista de campos a renderizar. Cada item gera um sdc-inline-edit-item. */
9
+ fields = [];
10
+ /** Mensagens de erro globais, aplicadas a todos os campos (podem ser sobrescritas por campo). */
11
+ errorMessages;
12
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InlineEditComponent, isStandalone: true, selector: "sdc-inline-edit", inputs: { formGroup: "formGroup", fields: "fields", errorMessages: "errorMessages" }, ngImport: i0, template: "<div class=\"sdc-inline-edit\">\n @for (field of fields; track field.name) {\n <sdc-inline-edit-item\n [field]=\"field\"\n [formGroup]=\"formGroup\"\n [errorMessages]=\"errorMessages\"\n >\n </sdc-inline-edit-item>\n }\n</div>\n", styles: [".sdc-inline-edit{display:flex;flex-direction:column;gap:1rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: InlineEditItemComponent, selector: "sdc-inline-edit-item", inputs: ["field", "formGroup", "errorMessages"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineEditComponent, decorators: [{
16
+ type: Component,
17
+ args: [{ selector: 'sdc-inline-edit', standalone: true, imports: [CommonModule, InlineEditItemComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-inline-edit\">\n @for (field of fields; track field.name) {\n <sdc-inline-edit-item\n [field]=\"field\"\n [formGroup]=\"formGroup\"\n [errorMessages]=\"errorMessages\"\n >\n </sdc-inline-edit-item>\n }\n</div>\n", styles: [".sdc-inline-edit{display:flex;flex-direction:column;gap:1rem}\n"] }]
18
+ }], propDecorators: { formGroup: [{
19
+ type: Input,
20
+ args: [{ required: true }]
21
+ }], fields: [{
22
+ type: Input,
23
+ args: [{ required: true }]
24
+ }], errorMessages: [{
25
+ type: Input
26
+ }] } });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWVkaXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9pbmxpbmUtZWRpdC9pbmxpbmUtZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2lubGluZS1lZGl0L2lubGluZS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUkvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7QUFXbkcsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qix5REFBeUQ7SUFDOUIsU0FBUyxDQUFhO0lBRWpELDRFQUE0RTtJQUNqRCxNQUFNLEdBQXNCLEVBQUUsQ0FBQztJQUUxRCxpR0FBaUc7SUFDeEYsYUFBYSxDQUEwQjt3R0FSckMsbUJBQW1COzRGQUFuQixtQkFBbUIsaUtDaEJoQyxnUUFVQSx3SERBWSxZQUFZLCtCQUFFLHVCQUF1Qjs7NEZBTXBDLG1CQUFtQjtrQkFUL0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLENBQUMsbUJBRy9CLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFFBQVE7OEJBSWQsU0FBUztzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBR0UsTUFBTTtzQkFBaEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBR2hCLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IElubGluZUVkaXRGaWVsZCB9IGZyb20gJy4vZmllbGRzL2lubGluZS1lZGl0LWZpZWxkJztcbmltcG9ydCB7IElubGluZUVkaXRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2lubGluZS1lZGl0LWl0ZW0vaW5saW5lLWVkaXQtaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtaW5saW5lLWVkaXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJbmxpbmVFZGl0SXRlbUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmxpbmUtZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2lubGluZS1lZGl0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBJbmxpbmVFZGl0Q29tcG9uZW50IHtcbiAgLyoqIEZvcm1Hcm91cCBxdWUgY29udMOpbSBvcyBjb250cm9sZXMgcGFyYSBjYWRhIGNhbXBvLiAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG5cbiAgLyoqIExpc3RhIGRlIGNhbXBvcyBhIHJlbmRlcml6YXIuIENhZGEgaXRlbSBnZXJhIHVtIHNkYy1pbmxpbmUtZWRpdC1pdGVtLiAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBmaWVsZHM6IElubGluZUVkaXRGaWVsZFtdID0gW107XG5cbiAgLyoqIE1lbnNhZ2VucyBkZSBlcnJvIGdsb2JhaXMsIGFwbGljYWRhcyBhIHRvZG9zIG9zIGNhbXBvcyAocG9kZW0gc2VyIHNvYnJlc2NyaXRhcyBwb3IgY2FtcG8pLiAqL1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2VzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbiIsIjxkaXYgY2xhc3M9XCJzZGMtaW5saW5lLWVkaXRcIj5cbiAgQGZvciAoZmllbGQgb2YgZmllbGRzOyB0cmFjayBmaWVsZC5uYW1lKSB7XG4gICAgPHNkYy1pbmxpbmUtZWRpdC1pdGVtXG4gICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgW2Vycm9yTWVzc2FnZXNdPVwiZXJyb3JNZXNzYWdlc1wiXG4gICAgPlxuICAgIDwvc2RjLWlubGluZS1lZGl0LWl0ZW0+XG4gIH1cbjwvZGl2PlxuIl19
@@ -0,0 +1,140 @@
1
+ import { Directive, ElementRef, EventEmitter, HostListener, Input, Output, Renderer2, booleanAttribute, inject } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class InteractiveContentDirective {
4
+ hostRef = inject(ElementRef);
5
+ renderer = inject(Renderer2);
6
+ initialTabIndex = null;
7
+ initialRole = null;
8
+ initialAriaDisabled = null;
9
+ capturedInitialAttributes = false;
10
+ focusable = true;
11
+ disabled = false;
12
+ stopPropagation = false;
13
+ role = 'button';
14
+ activated = new EventEmitter();
15
+ ngOnInit() {
16
+ this.captureInitialAttributes();
17
+ this.syncAccessibilityAttributes();
18
+ }
19
+ ngOnChanges() {
20
+ if (!this.capturedInitialAttributes) {
21
+ return;
22
+ }
23
+ this.syncAccessibilityAttributes();
24
+ }
25
+ onClick(event) {
26
+ if (!this.canActivate(event)) {
27
+ return;
28
+ }
29
+ this.activated.emit(event);
30
+ }
31
+ onKeydown(event) {
32
+ if (event.key !== 'Enter' && event.key !== ' ') {
33
+ return;
34
+ }
35
+ if (!this.canActivate(event)) {
36
+ return;
37
+ }
38
+ if (event.key === ' ') {
39
+ event.preventDefault();
40
+ }
41
+ this.activated.emit(event);
42
+ }
43
+ canActivate(event) {
44
+ if (this.disabled) {
45
+ event.preventDefault();
46
+ event.stopPropagation();
47
+ return false;
48
+ }
49
+ if (this.stopPropagation) {
50
+ event.stopPropagation();
51
+ }
52
+ return true;
53
+ }
54
+ captureInitialAttributes() {
55
+ if (this.capturedInitialAttributes) {
56
+ return;
57
+ }
58
+ const host = this.hostRef.nativeElement;
59
+ this.initialTabIndex = host.getAttribute('tabindex');
60
+ this.initialRole = host.getAttribute('role');
61
+ this.initialAriaDisabled = host.getAttribute('aria-disabled');
62
+ this.capturedInitialAttributes = true;
63
+ }
64
+ syncAccessibilityAttributes() {
65
+ const host = this.hostRef.nativeElement;
66
+ this.syncTabIndex(host);
67
+ this.syncRole(host);
68
+ this.syncAriaDisabled(host);
69
+ }
70
+ syncTabIndex(host) {
71
+ if (this.initialTabIndex === null) {
72
+ if (this.focusable && !this.disabled) {
73
+ this.renderer.setAttribute(host, 'tabindex', '0');
74
+ }
75
+ else {
76
+ this.renderer.removeAttribute(host, 'tabindex');
77
+ }
78
+ }
79
+ else {
80
+ this.renderer.setAttribute(host, 'tabindex', this.initialTabIndex);
81
+ }
82
+ }
83
+ syncRole(host) {
84
+ if (this.initialRole === null) {
85
+ if (this.role) {
86
+ this.renderer.setAttribute(host, 'role', this.role);
87
+ }
88
+ else {
89
+ this.renderer.removeAttribute(host, 'role');
90
+ }
91
+ }
92
+ else {
93
+ this.renderer.setAttribute(host, 'role', this.initialRole);
94
+ }
95
+ }
96
+ syncAriaDisabled(host) {
97
+ const ARIA_DISABLED = 'aria-disabled';
98
+ if (this.initialAriaDisabled === null) {
99
+ if (this.disabled) {
100
+ this.renderer.setAttribute(host, ARIA_DISABLED, 'true');
101
+ }
102
+ else {
103
+ this.renderer.removeAttribute(host, ARIA_DISABLED);
104
+ }
105
+ }
106
+ else {
107
+ this.renderer.setAttribute(host, ARIA_DISABLED, this.initialAriaDisabled);
108
+ }
109
+ }
110
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InteractiveContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
111
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: InteractiveContentDirective, isStandalone: true, selector: "[sdcInteractiveContent]", inputs: { focusable: ["focusable", "focusable", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], stopPropagation: ["stopPropagation", "stopPropagation", booleanAttribute], role: "role" }, outputs: { activated: "sdcInteractiveContent" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeydown($event)" } }, usesOnChanges: true, ngImport: i0 });
112
+ }
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InteractiveContentDirective, decorators: [{
114
+ type: Directive,
115
+ args: [{
116
+ selector: '[sdcInteractiveContent]',
117
+ standalone: true
118
+ }]
119
+ }], propDecorators: { focusable: [{
120
+ type: Input,
121
+ args: [{ transform: booleanAttribute }]
122
+ }], disabled: [{
123
+ type: Input,
124
+ args: [{ transform: booleanAttribute }]
125
+ }], stopPropagation: [{
126
+ type: Input,
127
+ args: [{ transform: booleanAttribute }]
128
+ }], role: [{
129
+ type: Input
130
+ }], activated: [{
131
+ type: Output,
132
+ args: ['sdcInteractiveContent']
133
+ }], onClick: [{
134
+ type: HostListener,
135
+ args: ['click', ['$event']]
136
+ }], onKeydown: [{
137
+ type: HostListener,
138
+ args: ['keydown', ['$event']]
139
+ }] } });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUtY29udGVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2ludGVyYWN0aXZlLWNvbnRlbnQvaW50ZXJhY3RpdmUtY29udGVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDOztBQVF2QixNQUFNLE9BQU8sMkJBQTJCO0lBQ3JCLE9BQU8sR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdEMsZUFBZSxHQUFrQixJQUFJLENBQUM7SUFDdEMsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDbEMsbUJBQW1CLEdBQWtCLElBQUksQ0FBQztJQUMxQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7SUFFRixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN2RCxJQUFJLEdBQThCLFFBQVEsQ0FBQztJQUVuQixTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztJQUV2RSxRQUFRO1FBQ04sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBR1MsT0FBTyxDQUFDLEtBQWlCO1FB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aEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxRQUFRO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGVBQWU7c0JBQXRELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLElBQUk7c0JBQVosS0FBSztnQkFFMkIsU0FBUztzQkFBekMsTUFBTTt1QkFBQyx1QkFBdUI7Z0JBZ0JyQixPQUFPO3NCQURoQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFVdkIsU0FBUztzQkFEbEIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIFNkY0ludGVyYWN0aXZlQ29udGVudFJvbGUgPSAnYnV0dG9uJyB8ICdsaW5rJyB8ICdvcHRpb24nIHwgbnVsbDtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NkY0ludGVyYWN0aXZlQ29udGVudF0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBob3N0UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHByaXZhdGUgaW5pdGlhbFRhYkluZGV4OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpbml0aWFsUm9sZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaW5pdGlhbEFyaWFEaXNhYmxlZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2FwdHVyZWRJbml0aWFsQXR0cmlidXRlcyA9IGZhbHNlO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmb2N1c2FibGUgPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHN0b3BQcm9wYWdhdGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSByb2xlOiBTZGNJbnRlcmFjdGl2ZUNvbnRlbnRSb2xlID0gJ2J1dHRvbic7XG5cbiAgQE91dHB1dCgnc2RjSW50ZXJhY3RpdmVDb250ZW50JykgYWN0aXZhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhcHR1cmVJbml0aWFsQXR0cmlidXRlcygpO1xuICAgIHRoaXMuc3luY0FjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FwdHVyZWRJbml0aWFsQXR0cmlidXRlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3luY0FjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbkFjdGl2YXRlKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZhdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInICYmIGV2ZW50LmtleSAhPT0gJyAnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhbkFjdGl2YXRlKGV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICcgJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2YXRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuQWN0aXZhdGUoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjYXB0dXJlSW5pdGlhbEF0dHJpYnV0ZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FwdHVyZWRJbml0aWFsQXR0cmlidXRlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLmluaXRpYWxUYWJJbmRleCA9IGhvc3QuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgIHRoaXMuaW5pdGlhbFJvbGUgPSBob3N0LmdldEF0dHJpYnV0ZSgncm9sZScpO1xuICAgIHRoaXMuaW5pdGlhbEFyaWFEaXNhYmxlZCA9IGhvc3QuZ2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG4gICAgdGhpcy5jYXB0dXJlZEluaXRpYWxBdHRyaWJ1dGVzID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0FjY2Vzc2liaWxpdHlBdHRyaWJ1dGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnN5bmNUYWJJbmRleChob3N0KTtcbiAgICB0aGlzLnN5bmNSb2xlKGhvc3QpO1xuICAgIHRoaXMuc3luY0FyaWFEaXNhYmxlZChob3N0KTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1RhYkluZGV4KGhvc3Q6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFRhYkluZGV4ID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5mb2N1c2FibGUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaG9zdCwgJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGhvc3QsICd0YWJpbmRleCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShob3N0LCAndGFiaW5kZXgnLCB0aGlzLmluaXRpYWxUYWJJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jUm9sZShob3N0OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmluaXRpYWxSb2xlID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5yb2xlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGhvc3QsICdyb2xlJywgdGhpcy5yb2xlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGhvc3QsICdyb2xlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGhvc3QsICdyb2xlJywgdGhpcy5pbml0aWFsUm9sZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQXJpYURpc2FibGVkKGhvc3Q6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgQVJJQV9ESVNBQkxFRCA9ICdhcmlhLWRpc2FibGVkJztcbiAgICBpZiAodGhpcy5pbml0aWFsQXJpYURpc2FibGVkID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShob3N0LCBBUklBX0RJU0FCTEVELCAndHJ1ZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUoaG9zdCwgQVJJQV9ESVNBQkxFRCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGhvc3QsIEFSSUFfRElTQUJMRUQsIHRoaXMuaW5pdGlhbEFyaWFEaXNhYmxlZCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,88 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, inject } from '@angular/core';
3
+ import { Subject, takeUntil } from 'rxjs';
4
+ import { KanbanEventService } from '../../services/kanban-event.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class KanbanColumnComponent {
8
+ data;
9
+ showCheckbox = true;
10
+ headerTemplate = null;
11
+ emptyMessageTemplate = null;
12
+ allSelected = false;
13
+ showColumnMenu = false;
14
+ eventService = inject(KanbanEventService);
15
+ destroy$ = new Subject();
16
+ ngOnInit() {
17
+ this.eventService.selectAllColumnItems$
18
+ .pipe(takeUntil(this.destroy$))
19
+ .subscribe(col => {
20
+ if (col === this.data) {
21
+ this.allSelected = true;
22
+ }
23
+ });
24
+ this.eventService.unselectAllColumnItems$
25
+ .pipe(takeUntil(this.destroy$))
26
+ .subscribe(col => {
27
+ if (col === this.data) {
28
+ this.allSelected = false;
29
+ }
30
+ });
31
+ this.eventService.selectItem$
32
+ .pipe(takeUntil(this.destroy$))
33
+ .subscribe(() => this._updateAllSelectedState());
34
+ this.eventService.unselectItem$
35
+ .pipe(takeUntil(this.destroy$))
36
+ .subscribe(() => this._updateAllSelectedState());
37
+ }
38
+ ngOnDestroy() {
39
+ this.destroy$.next();
40
+ this.destroy$.complete();
41
+ }
42
+ onSelectAll(event) {
43
+ const checked = event.target.checked;
44
+ if (checked) {
45
+ this.eventService.emitSelectAllColumnItems(this.data);
46
+ this.data.items
47
+ .filter(item => !item.disabled && !item.frozen)
48
+ .forEach(item => this.eventService.emitSelectItem(item));
49
+ }
50
+ else {
51
+ this.eventService.emitUnselectAllColumnItems(this.data);
52
+ this.data.items.forEach(item => this.eventService.emitUnselectItem(item));
53
+ }
54
+ }
55
+ toggleMenu(event) {
56
+ event.stopPropagation();
57
+ this.showColumnMenu = !this.showColumnMenu;
58
+ }
59
+ onOptionClick(event, optionCommand) {
60
+ event.stopPropagation();
61
+ this.showColumnMenu = false;
62
+ optionCommand(this.data);
63
+ }
64
+ getSelectableItems() {
65
+ return this.data.items.filter(item => !item.disabled && !item.frozen);
66
+ }
67
+ _updateAllSelectedState() {
68
+ const selectable = this.getSelectableItems();
69
+ if (selectable.length === 0) {
70
+ this.allSelected = false;
71
+ }
72
+ }
73
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KanbanColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
74
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: KanbanColumnComponent, isStandalone: true, selector: "sdc-kanban-column", inputs: { data: "data", showCheckbox: "showCheckbox", headerTemplate: "headerTemplate", emptyMessageTemplate: "emptyMessageTemplate" }, ngImport: i0, template: "<div class=\"sdc-kanban-column\">\n <div class=\"sdc-kanban-column__header\">\n @if (showCheckbox) {\n <input\n [id]=\"'kanban-column-' + data.id + '-checkbox'\"\n type=\"checkbox\"\n class=\"sdc-kanban-column__checkbox\"\n [attr.aria-label]=\"data.title\"\n [checked]=\"allSelected\"\n (change)=\"onSelectAll($event)\">\n }\n @if (!headerTemplate) {\n <span class=\"sdc-kanban-column__title\">{{ data.title }} ({{ data.items.length }})</span>\n } @else {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: data }\"></ng-container>\n }\n @if (data.options?.length) {\n <button\n class=\"sdc-kanban-column__menu-btn\"\n type=\"button\"\n (click)=\"toggleMenu($event)\">\n <i class=\"fas fa-ellipsis-h\"></i>\n </button>\n @if (showColumnMenu) {\n <ul class=\"sdc-kanban-column__menu\">\n @for (option of data.options; track option) {\n @if (option.divider) {\n <li class=\"sdc-kanban-column__menu-divider\"></li>\n } @else {\n <li class=\"sdc-kanban-column__menu-item\" [class.sdc-kanban-column__menu-item--disabled]=\"option.disabled\">\n <button\n type=\"button\"\n class=\"sdc-kanban-column__menu-action\"\n [disabled]=\"option.disabled\"\n (click)=\"onOptionClick($event, option.command)\">\n @if (option.iconClass) {\n <i [class]=\"option.iconClass\"></i>\n }\n @if (option.label) {\n <span>{{ option.label }}</span>\n }\n </button>\n </li>\n }\n }\n </ul>\n }\n }\n </div>\n <div class=\"sdc-kanban-column__body\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".sdc-kanban-column{--sdc-kanban-column-bg: #fbfafc;--sdc-kanban-column-border: #dedce5;--sdc-kanban-column-width: 20rem;--sdc-kanban-column-radius: .5rem;--sdc-kanban-column-header-padding: .75rem 1rem;--sdc-kanban-column-body-padding: .75rem;--sdc-kanban-column-menu-bg: #fff;--sdc-kanban-column-menu-shadow: 0 2px 8px rgba(0, 0, 0, .15);display:flex;flex-direction:column;width:var(--sdc-kanban-column-width);min-width:var(--sdc-kanban-column-width);background-color:var(--sdc-kanban-column-bg);border:1px solid var(--sdc-kanban-column-border);border-radius:var(--sdc-kanban-column-radius);border-top-color:var(--sdc-kanban-column-accent, var(--sdc-kanban-column-border));border-top-width:3px;overflow:hidden}.sdc-kanban-column__header{display:flex;align-items:center;gap:.5rem;padding:var(--sdc-kanban-column-header-padding);border-bottom:1px solid var(--sdc-kanban-column-border);position:relative;flex-shrink:0}.sdc-kanban-column__checkbox{flex-shrink:0;cursor:pointer}.sdc-kanban-column__title{flex:1;font-weight:600;font-size:.875rem;color:#3d3b4a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-kanban-column__menu-btn{margin-left:auto;background:none;border:none;cursor:pointer;padding:.25rem;border-radius:2px;color:#6b6880;line-height:1}.sdc-kanban-column__menu-btn:hover{background-color:#0000000d}.sdc-kanban-column__menu{position:absolute;top:2.5rem;right:.5rem;z-index:100;background-color:var(--sdc-kanban-column-menu-bg);border:1px solid var(--sdc-kanban-column-border);border-radius:4px;box-shadow:var(--sdc-kanban-column-menu-shadow);list-style:none;margin:0;padding:.25rem 0;min-width:10rem}.sdc-kanban-column__menu-divider{border-top:1px solid var(--sdc-kanban-column-border);margin:.25rem 0}.sdc-kanban-column__menu-action{display:flex;align-items:center;gap:.5rem;width:100%;background:none;border:none;cursor:pointer;padding:.5rem 1rem;font-size:.875rem;text-align:left}.sdc-kanban-column__menu-action:hover:not(:disabled){background-color:#0000000a}.sdc-kanban-column__menu-item--disabled .sdc-kanban-column__menu-action{opacity:.5;cursor:not-allowed}.sdc-kanban-column__body{flex:1;max-height:var(--sdc-kanban-column-max-height, 32rem);overflow-y:auto;padding:var(--sdc-kanban-column-body-padding)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
75
+ }
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KanbanColumnComponent, decorators: [{
77
+ type: Component,
78
+ args: [{ selector: 'sdc-kanban-column', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-kanban-column\">\n <div class=\"sdc-kanban-column__header\">\n @if (showCheckbox) {\n <input\n [id]=\"'kanban-column-' + data.id + '-checkbox'\"\n type=\"checkbox\"\n class=\"sdc-kanban-column__checkbox\"\n [attr.aria-label]=\"data.title\"\n [checked]=\"allSelected\"\n (change)=\"onSelectAll($event)\">\n }\n @if (!headerTemplate) {\n <span class=\"sdc-kanban-column__title\">{{ data.title }} ({{ data.items.length }})</span>\n } @else {\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { $implicit: data }\"></ng-container>\n }\n @if (data.options?.length) {\n <button\n class=\"sdc-kanban-column__menu-btn\"\n type=\"button\"\n (click)=\"toggleMenu($event)\">\n <i class=\"fas fa-ellipsis-h\"></i>\n </button>\n @if (showColumnMenu) {\n <ul class=\"sdc-kanban-column__menu\">\n @for (option of data.options; track option) {\n @if (option.divider) {\n <li class=\"sdc-kanban-column__menu-divider\"></li>\n } @else {\n <li class=\"sdc-kanban-column__menu-item\" [class.sdc-kanban-column__menu-item--disabled]=\"option.disabled\">\n <button\n type=\"button\"\n class=\"sdc-kanban-column__menu-action\"\n [disabled]=\"option.disabled\"\n (click)=\"onOptionClick($event, option.command)\">\n @if (option.iconClass) {\n <i [class]=\"option.iconClass\"></i>\n }\n @if (option.label) {\n <span>{{ option.label }}</span>\n }\n </button>\n </li>\n }\n }\n </ul>\n }\n }\n </div>\n <div class=\"sdc-kanban-column__body\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".sdc-kanban-column{--sdc-kanban-column-bg: #fbfafc;--sdc-kanban-column-border: #dedce5;--sdc-kanban-column-width: 20rem;--sdc-kanban-column-radius: .5rem;--sdc-kanban-column-header-padding: .75rem 1rem;--sdc-kanban-column-body-padding: .75rem;--sdc-kanban-column-menu-bg: #fff;--sdc-kanban-column-menu-shadow: 0 2px 8px rgba(0, 0, 0, .15);display:flex;flex-direction:column;width:var(--sdc-kanban-column-width);min-width:var(--sdc-kanban-column-width);background-color:var(--sdc-kanban-column-bg);border:1px solid var(--sdc-kanban-column-border);border-radius:var(--sdc-kanban-column-radius);border-top-color:var(--sdc-kanban-column-accent, var(--sdc-kanban-column-border));border-top-width:3px;overflow:hidden}.sdc-kanban-column__header{display:flex;align-items:center;gap:.5rem;padding:var(--sdc-kanban-column-header-padding);border-bottom:1px solid var(--sdc-kanban-column-border);position:relative;flex-shrink:0}.sdc-kanban-column__checkbox{flex-shrink:0;cursor:pointer}.sdc-kanban-column__title{flex:1;font-weight:600;font-size:.875rem;color:#3d3b4a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sdc-kanban-column__menu-btn{margin-left:auto;background:none;border:none;cursor:pointer;padding:.25rem;border-radius:2px;color:#6b6880;line-height:1}.sdc-kanban-column__menu-btn:hover{background-color:#0000000d}.sdc-kanban-column__menu{position:absolute;top:2.5rem;right:.5rem;z-index:100;background-color:var(--sdc-kanban-column-menu-bg);border:1px solid var(--sdc-kanban-column-border);border-radius:4px;box-shadow:var(--sdc-kanban-column-menu-shadow);list-style:none;margin:0;padding:.25rem 0;min-width:10rem}.sdc-kanban-column__menu-divider{border-top:1px solid var(--sdc-kanban-column-border);margin:.25rem 0}.sdc-kanban-column__menu-action{display:flex;align-items:center;gap:.5rem;width:100%;background:none;border:none;cursor:pointer;padding:.5rem 1rem;font-size:.875rem;text-align:left}.sdc-kanban-column__menu-action:hover:not(:disabled){background-color:#0000000a}.sdc-kanban-column__menu-item--disabled .sdc-kanban-column__menu-action{opacity:.5;cursor:not-allowed}.sdc-kanban-column__body{flex:1;max-height:var(--sdc-kanban-column-max-height, 32rem);overflow-y:auto;padding:var(--sdc-kanban-column-body-padding)}\n"] }]
79
+ }], propDecorators: { data: [{
80
+ type: Input
81
+ }], showCheckbox: [{
82
+ type: Input
83
+ }], headerTemplate: [{
84
+ type: Input
85
+ }], emptyMessageTemplate: [{
86
+ type: Input
87
+ }] } });
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FuYmFuLWNvbHVtbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2thbmJhbi9jb21wb25lbnRzL2thbmJhbi1jb2x1bW4va2FuYmFuLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2thbmJhbi9jb21wb25lbnRzL2thbmJhbi1jb2x1bW4va2FuYmFuLWNvbHVtbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUlMLGlCQUFpQixFQUNqQixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7OztBQVd6RSxNQUFNLE9BQU8scUJBQXFCO0lBQ3ZCLElBQUksQ0FBZ0I7SUFDcEIsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixjQUFjLEdBQWdDLElBQUksQ0FBQztJQUNuRCxvQkFBb0IsR0FBZ0MsSUFBSSxDQUFDO0lBRWxFLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUVOLFlBQVksR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMxQyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVoRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUI7YUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxF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QUFDO1FBQzdDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzt3R0E3RVUscUJBQXFCOzRGQUFyQixxQkFBcUIscU5DekJsQyw0NERBcURBLDB2RURsQ1ksWUFBWTs7NEZBTVgscUJBQXFCO2tCQVRqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBR04sdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsUUFBUTs4QkFHaEMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgdHlwZSB7IEthbmJhbkNvbHVtbiwgS2FuYmFuSXRlbSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdHlwZXMva2FuYmFuLnR5cGUnO1xuaW1wb3J0IHsgS2FuYmFuRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMva2FuYmFuLWV2ZW50LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMta2FuYmFuLWNvbHVtbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4va2FuYmFuLWNvbHVtbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9rYW5iYW4tY29sdW1uLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIEthbmJhbkNvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZGF0YSE6IEthbmJhbkNvbHVtbjtcbiAgQElucHV0KCkgc2hvd0NoZWNrYm94ID0gdHJ1ZTtcbiAgQElucHV0KCkgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGVtcHR5TWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwgPSBudWxsO1xuXG4gIGFsbFNlbGVjdGVkID0gZmFsc2U7XG4gIHNob3dDb2x1bW5NZW51ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2UgPSBpbmplY3QoS2FuYmFuRXZlbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFNlcnZpY2Uuc2VsZWN0QWxsQ29sdW1uSXRlbXMkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGNvbCA9PiB7XG4gICAgICAgIGlmIChjb2wgPT09IHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnVuc2VsZWN0QWxsQ29sdW1uSXRlbXMkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGNvbCA9PiB7XG4gICAgICAgIGlmIChjb2wgPT09IHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50U2VydmljZS5zZWxlY3RJdGVtJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVBbGxTZWxlY3RlZFN0YXRlKCkpO1xuXG4gICAgdGhpcy5ldmVudFNlcnZpY2UudW5zZWxlY3RJdGVtJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVBbGxTZWxlY3RlZFN0YXRlKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25TZWxlY3RBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLmV2ZW50U2VydmljZS5lbWl0U2VsZWN0QWxsQ29sdW1uSXRlbXModGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuZGF0YS5pdGVtc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQgJiYgIWl0ZW0uZnJvemVuKVxuICAgICAgICAuZm9yRWFjaChpdGVtID0+IHRoaXMuZXZlbnRTZXJ2aWNlLmVtaXRTZWxlY3RJdGVtKGl0ZW0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZW1pdFVuc2VsZWN0QWxsQ29sdW1uSXRlbXModGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuZGF0YS5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5ldmVudFNlcnZpY2UuZW1pdFVuc2VsZWN0SXRlbShpdGVtKSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTWVudShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNob3dDb2x1bW5NZW51ID0gIXRoaXMuc2hvd0NvbHVtbk1lbnU7XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKGV2ZW50OiBFdmVudCwgb3B0aW9uQ29tbWFuZDogKGNvbHVtbjogS2FuYmFuQ29sdW1uKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zaG93Q29sdW1uTWVudSA9IGZhbHNlO1xuICAgIG9wdGlvbkNvbW1hbmQodGhpcy5kYXRhKTtcbiAgfVxuXG4gIGdldFNlbGVjdGFibGVJdGVtcygpOiBLYW5iYW5JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQgJiYgIWl0ZW0uZnJvemVuKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUFsbFNlbGVjdGVkU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuZ2V0U2VsZWN0YWJsZUl0ZW1zKCk7XG4gICAgaWYgKHNlbGVjdGFibGUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2RjLWthbmJhbi1jb2x1bW5cIj5cbiAgPGRpdiBjbGFzcz1cInNkYy1rYW5iYW4tY29sdW1uX19oZWFkZXJcIj5cbiAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgPGlucHV0XG4gICAgICAgIFtpZF09XCIna2FuYmFuLWNvbHVtbi0nICsgZGF0YS5pZCArICctY2hlY2tib3gnXCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9XCJzZGMta2FuYmFuLWNvbHVtbl9fY2hlY2tib3hcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImRhdGEudGl0bGVcIlxuICAgICAgICBbY2hlY2tlZF09XCJhbGxTZWxlY3RlZFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RBbGwoJGV2ZW50KVwiPlxuICAgIH1cbiAgICBAaWYgKCFoZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJzZGMta2FuYmFuLWNvbHVtbl9fdGl0bGVcIj57eyBkYXRhLnRpdGxlIH19ICh7eyBkYXRhLml0ZW1zLmxlbmd0aCB9fSk8L3NwYW4+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGlmIChkYXRhLm9wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInNkYy1rYW5iYW4tY29sdW1uX19tZW51LWJ0blwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWVsbGlwc2lzLWhcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIEBpZiAoc2hvd0NvbHVtbk1lbnUpIHtcbiAgICAgICAgPHVsIGNsYXNzPVwic2RjLWthbmJhbi1jb2x1bW5fX21lbnVcIj5cbiAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZGF0YS5vcHRpb25zOyB0cmFjayBvcHRpb24pIHtcbiAgICAgICAgICAgIEBpZiAob3B0aW9uLmRpdmlkZXIpIHtcbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwic2RjLWthbmJhbi1jb2x1bW5fX21lbnUtZGl2aWRlclwiPjwvbGk+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGxpIGNsYXNzPVwic2RjLWthbmJhbi1jb2x1bW5fX21lbnUtaXRlbVwiIFtjbGFzcy5zZGMta2FuYmFuLWNvbHVtbl9fbWVudS1pdGVtLS1kaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2RjLWthbmJhbi1jb2x1bW5fX21lbnUtYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2soJGV2ZW50LCBvcHRpb24uY29tbWFuZClcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAob3B0aW9uLmljb25DbGFzcykge1xuICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwib3B0aW9uLmljb25DbGFzc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAob3B0aW9uLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvdWw+XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInNkYy1rYW5iYW4tY29sdW1uX19ib2R5XCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19