@gnggln/ng-ui-system 1.0.0-alpha.2 → 1.0.0-alpha.21

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 (721) hide show
  1. package/accordion/entry-accordion.d.ts +4 -0
  2. package/accordion/index.d.ts +5 -0
  3. package/accordion/lib/components/accordion/accordion.component.d.ts +125 -0
  4. package/accordion/lib/components/accordion/accordion.types.d.ts +64 -0
  5. package/accordion/lib/components/accordion/index.d.ts +2 -0
  6. package/accordion/lib/core/types/index.d.ts +133 -0
  7. package/base-layout/entry-base-layout.d.ts +4 -0
  8. package/base-layout/index.d.ts +5 -0
  9. package/base-layout/lib/components/base-layout/base-layout.component.d.ts +108 -0
  10. package/base-layout/lib/components/base-layout/base-layout.types.d.ts +40 -0
  11. package/base-layout/lib/components/base-layout/index.d.ts +13 -0
  12. package/base-layout/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
  13. package/base-layout/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
  14. package/base-layout/lib/components/blackbox/blackbox.service.d.ts +144 -0
  15. package/base-layout/lib/components/blackbox/blackbox.types.d.ts +238 -0
  16. package/base-layout/lib/components/button/button-area.component.d.ts +93 -0
  17. package/base-layout/lib/components/button/button.component.d.ts +61 -0
  18. package/base-layout/lib/components/button/button.types.d.ts +75 -0
  19. package/base-layout/lib/components/page-header/breadcrumb.service.d.ts +96 -0
  20. package/base-layout/lib/components/page-header/page-header.component.d.ts +59 -0
  21. package/base-layout/lib/components/page-header/page-header.types.d.ts +96 -0
  22. package/base-layout/lib/core/types/index.d.ts +133 -0
  23. package/blackbox/entry-blackbox.d.ts +4 -0
  24. package/blackbox/index.d.ts +5 -0
  25. package/blackbox/lib/components/blackbox/blackbox-debugger.component.d.ts +80 -0
  26. package/blackbox/lib/components/blackbox/blackbox-debugger.service.d.ts +34 -0
  27. package/blackbox/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
  28. package/blackbox/lib/components/blackbox/blackbox-json-viewer.component.d.ts +18 -0
  29. package/blackbox/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
  30. package/blackbox/lib/components/blackbox/blackbox.interceptor.d.ts +38 -0
  31. package/blackbox/lib/components/blackbox/blackbox.service.d.ts +144 -0
  32. package/blackbox/lib/components/blackbox/blackbox.types.d.ts +238 -0
  33. package/blackbox/lib/components/blackbox/index.d.ts +23 -0
  34. package/blackbox/lib/components/blackbox/ui-track.directive.d.ts +20 -0
  35. package/blackbox/lib/components/button/button-area.component.d.ts +93 -0
  36. package/blackbox/lib/components/button/button.component.d.ts +61 -0
  37. package/blackbox/lib/components/button/button.types.d.ts +75 -0
  38. package/blackbox/lib/components/button/index.d.ts +15 -0
  39. package/blackbox/lib/components/modal/confirm-dialog.component.d.ts +46 -0
  40. package/blackbox/lib/components/modal/index.d.ts +4 -0
  41. package/blackbox/lib/components/modal/modal.component.d.ts +44 -0
  42. package/blackbox/lib/components/modal/modal.service.d.ts +93 -0
  43. package/blackbox/lib/components/modal/modal.types.d.ts +110 -0
  44. package/blackbox/lib/core/types/index.d.ts +133 -0
  45. package/button/entry-button.d.ts +4 -0
  46. package/button/index.d.ts +5 -0
  47. package/button/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
  48. package/button/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
  49. package/button/lib/components/blackbox/blackbox.service.d.ts +144 -0
  50. package/button/lib/components/blackbox/blackbox.types.d.ts +238 -0
  51. package/button/lib/components/button/button-area.component.d.ts +93 -0
  52. package/button/lib/components/button/button.component.d.ts +61 -0
  53. package/button/lib/components/button/button.types.d.ts +75 -0
  54. package/button/lib/components/button/index.d.ts +15 -0
  55. package/button/lib/core/types/index.d.ts +133 -0
  56. package/core/entry-core.d.ts +5 -0
  57. package/core/index.d.ts +5 -0
  58. package/core/lib/core/types/index.d.ts +133 -0
  59. package/core/lib/core/utils/index.d.ts +60 -0
  60. package/crud-table/entry-crud-table.d.ts +4 -0
  61. package/crud-table/index.d.ts +5 -0
  62. package/crud-table/lib/components/accordion/accordion.component.d.ts +125 -0
  63. package/crud-table/lib/components/accordion/accordion.types.d.ts +64 -0
  64. package/crud-table/lib/components/accordion/index.d.ts +2 -0
  65. package/crud-table/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
  66. package/crud-table/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
  67. package/crud-table/lib/components/blackbox/blackbox.service.d.ts +144 -0
  68. package/crud-table/lib/components/blackbox/blackbox.types.d.ts +238 -0
  69. package/crud-table/lib/components/button/button-area.component.d.ts +93 -0
  70. package/crud-table/lib/components/button/button.component.d.ts +61 -0
  71. package/crud-table/lib/components/button/button.types.d.ts +75 -0
  72. package/crud-table/lib/components/button/index.d.ts +15 -0
  73. package/crud-table/lib/components/crud-table/crud-table.component.d.ts +143 -0
  74. package/crud-table/lib/components/crud-table/crud-table.types.d.ts +207 -0
  75. package/crud-table/lib/components/crud-table/index.d.ts +15 -0
  76. package/crud-table/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
  77. package/crud-table/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
  78. package/crud-table/lib/components/form-builder/form-builder.component.d.ts +279 -0
  79. package/crud-table/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
  80. package/crud-table/lib/components/form-builder/services/form-error-state.matcher.d.ts +9 -0
  81. package/crud-table/lib/components/form-builder/services/form-field-error.service.d.ts +38 -0
  82. package/crud-table/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
  83. package/crud-table/lib/components/form-builder/services/location.service.d.ts +83 -0
  84. package/crud-table/lib/components/form-builder/services/nominatim-geocoding.service.d.ts +37 -0
  85. package/crud-table/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +31 -0
  86. package/crud-table/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
  87. package/crud-table/lib/components/form-builder/sub-components/form-fields/form-number-field.component.d.ts +42 -0
  88. package/crud-table/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.d.ts +45 -0
  89. package/crud-table/lib/components/form-builder/sub-components/form-fields/form-select-field.component.d.ts +44 -0
  90. package/crud-table/lib/components/form-builder/sub-components/form-fields/form-text-field.component.d.ts +62 -0
  91. package/crud-table/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.d.ts +39 -0
  92. package/crud-table/lib/components/form-builder/sub-components/form-fields/index.d.ts +5 -0
  93. package/crud-table/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.d.ts +84 -0
  94. package/crud-table/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
  95. package/crud-table/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
  96. package/crud-table/lib/components/form-builder/types/condition.types.d.ts +51 -0
  97. package/crud-table/lib/components/form-builder/types/field.types.d.ts +330 -0
  98. package/crud-table/lib/components/form-builder/types/geocoded-location.types.d.ts +116 -0
  99. package/crud-table/lib/components/form-builder/types/schema.types.d.ts +304 -0
  100. package/crud-table/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
  101. package/crud-table/lib/components/form-builder/types/validation.types.d.ts +179 -0
  102. package/crud-table/lib/components/modal/confirm-dialog.component.d.ts +46 -0
  103. package/crud-table/lib/components/modal/modal.service.d.ts +93 -0
  104. package/crud-table/lib/components/modal/modal.types.d.ts +110 -0
  105. package/crud-table/lib/core/logging/logger.config.d.ts +18 -0
  106. package/crud-table/lib/core/logging/logger.service.d.ts +75 -0
  107. package/crud-table/lib/core/logging/logger.types.d.ts +70 -0
  108. package/crud-table/lib/core/types/index.d.ts +133 -0
  109. package/esm2022/accordion/entry-accordion.mjs +5 -0
  110. package/esm2022/accordion/gnggln-ng-ui-system-accordion.mjs +5 -0
  111. package/esm2022/accordion/lib/components/accordion/accordion.component.mjs +398 -0
  112. package/esm2022/accordion/lib/components/accordion/accordion.types.mjs +6 -0
  113. package/esm2022/accordion/lib/components/accordion/index.mjs +2 -0
  114. package/esm2022/accordion/lib/core/types/index.mjs +6 -0
  115. package/esm2022/base-layout/entry-base-layout.mjs +5 -0
  116. package/esm2022/base-layout/gnggln-ng-ui-system-base-layout.mjs +5 -0
  117. package/esm2022/base-layout/lib/components/base-layout/base-layout.component.mjs +272 -0
  118. package/esm2022/base-layout/lib/components/base-layout/base-layout.types.mjs +6 -0
  119. package/esm2022/base-layout/lib/components/base-layout/index.mjs +14 -0
  120. package/esm2022/base-layout/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
  121. package/esm2022/base-layout/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
  122. package/esm2022/base-layout/lib/components/blackbox/blackbox.service.mjs +323 -0
  123. package/esm2022/base-layout/lib/components/blackbox/blackbox.types.mjs +25 -0
  124. package/esm2022/base-layout/lib/components/button/button-area.component.mjs +210 -0
  125. package/esm2022/base-layout/lib/components/button/button.component.mjs +180 -0
  126. package/esm2022/base-layout/lib/components/button/button.types.mjs +6 -0
  127. package/esm2022/base-layout/lib/components/page-header/breadcrumb.service.mjs +243 -0
  128. package/esm2022/base-layout/lib/components/page-header/page-header.component.mjs +243 -0
  129. package/esm2022/base-layout/lib/components/page-header/page-header.types.mjs +21 -0
  130. package/esm2022/base-layout/lib/core/types/index.mjs +6 -0
  131. package/esm2022/blackbox/entry-blackbox.mjs +5 -0
  132. package/esm2022/blackbox/gnggln-ng-ui-system-blackbox.mjs +5 -0
  133. package/esm2022/blackbox/lib/components/blackbox/blackbox-debugger.component.mjs +904 -0
  134. package/esm2022/blackbox/lib/components/blackbox/blackbox-debugger.service.mjs +51 -0
  135. package/esm2022/blackbox/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
  136. package/esm2022/blackbox/lib/components/blackbox/blackbox-json-viewer.component.mjs +66 -0
  137. package/esm2022/blackbox/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
  138. package/esm2022/blackbox/lib/components/blackbox/blackbox.interceptor.mjs +135 -0
  139. package/esm2022/blackbox/lib/components/blackbox/blackbox.service.mjs +323 -0
  140. package/esm2022/blackbox/lib/components/blackbox/blackbox.types.mjs +25 -0
  141. package/esm2022/blackbox/lib/components/blackbox/index.mjs +27 -0
  142. package/esm2022/blackbox/lib/components/blackbox/ui-track.directive.mjs +69 -0
  143. package/esm2022/blackbox/lib/components/button/button-area.component.mjs +210 -0
  144. package/esm2022/blackbox/lib/components/button/button.component.mjs +180 -0
  145. package/esm2022/blackbox/lib/components/button/button.types.mjs +6 -0
  146. package/esm2022/blackbox/lib/components/button/index.mjs +16 -0
  147. package/esm2022/blackbox/lib/components/modal/confirm-dialog.component.mjs +151 -0
  148. package/esm2022/blackbox/lib/components/modal/index.mjs +4 -0
  149. package/esm2022/blackbox/lib/components/modal/modal.component.mjs +139 -0
  150. package/esm2022/blackbox/lib/components/modal/modal.service.mjs +197 -0
  151. package/esm2022/blackbox/lib/components/modal/modal.types.mjs +6 -0
  152. package/esm2022/blackbox/lib/core/types/index.mjs +6 -0
  153. package/esm2022/button/entry-button.mjs +5 -0
  154. package/esm2022/button/gnggln-ng-ui-system-button.mjs +5 -0
  155. package/esm2022/button/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
  156. package/esm2022/button/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
  157. package/esm2022/button/lib/components/blackbox/blackbox.service.mjs +323 -0
  158. package/esm2022/button/lib/components/blackbox/blackbox.types.mjs +25 -0
  159. package/esm2022/button/lib/components/button/button-area.component.mjs +210 -0
  160. package/esm2022/button/lib/components/button/button.component.mjs +180 -0
  161. package/esm2022/button/lib/components/button/button.types.mjs +6 -0
  162. package/esm2022/button/lib/components/button/index.mjs +16 -0
  163. package/esm2022/button/lib/core/types/index.mjs +6 -0
  164. package/esm2022/core/entry-core.mjs +6 -0
  165. package/esm2022/core/gnggln-ng-ui-system-core.mjs +5 -0
  166. package/esm2022/core/lib/core/types/index.mjs +6 -0
  167. package/esm2022/core/lib/core/utils/index.mjs +102 -0
  168. package/esm2022/crud-table/entry-crud-table.mjs +5 -0
  169. package/esm2022/crud-table/gnggln-ng-ui-system-crud-table.mjs +5 -0
  170. package/esm2022/crud-table/lib/components/accordion/accordion.component.mjs +398 -0
  171. package/esm2022/crud-table/lib/components/accordion/accordion.types.mjs +6 -0
  172. package/esm2022/crud-table/lib/components/accordion/index.mjs +2 -0
  173. package/esm2022/crud-table/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
  174. package/esm2022/crud-table/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
  175. package/esm2022/crud-table/lib/components/blackbox/blackbox.service.mjs +323 -0
  176. package/esm2022/crud-table/lib/components/blackbox/blackbox.types.mjs +25 -0
  177. package/esm2022/crud-table/lib/components/button/button-area.component.mjs +210 -0
  178. package/esm2022/crud-table/lib/components/button/button.component.mjs +180 -0
  179. package/esm2022/crud-table/lib/components/button/button.types.mjs +6 -0
  180. package/esm2022/crud-table/lib/components/button/index.mjs +16 -0
  181. package/esm2022/crud-table/lib/components/crud-table/crud-table.component.mjs +789 -0
  182. package/esm2022/crud-table/lib/components/crud-table/crud-table.types.mjs +6 -0
  183. package/esm2022/crud-table/lib/components/crud-table/index.mjs +16 -0
  184. package/esm2022/crud-table/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
  185. package/esm2022/crud-table/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
  186. package/esm2022/crud-table/lib/components/form-builder/form-builder.component.mjs +1351 -0
  187. package/esm2022/crud-table/lib/components/form-builder/services/form-condition.service.mjs +132 -0
  188. package/esm2022/crud-table/lib/components/form-builder/services/form-error-state.matcher.mjs +10 -0
  189. package/esm2022/crud-table/lib/components/form-builder/services/form-field-error.service.mjs +103 -0
  190. package/esm2022/crud-table/lib/components/form-builder/services/form-validation.service.mjs +381 -0
  191. package/esm2022/crud-table/lib/components/form-builder/services/location.service.mjs +141 -0
  192. package/esm2022/crud-table/lib/components/form-builder/services/nominatim-geocoding.service.mjs +120 -0
  193. package/esm2022/crud-table/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +190 -0
  194. package/esm2022/crud-table/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
  195. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +113 -0
  196. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +105 -0
  197. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +126 -0
  198. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-text-field.component.mjs +147 -0
  199. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.mjs +99 -0
  200. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/index.mjs +6 -0
  201. package/esm2022/crud-table/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.mjs +322 -0
  202. package/esm2022/crud-table/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
  203. package/esm2022/crud-table/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
  204. package/esm2022/crud-table/lib/components/form-builder/types/condition.types.mjs +6 -0
  205. package/esm2022/crud-table/lib/components/form-builder/types/field.types.mjs +6 -0
  206. package/esm2022/crud-table/lib/components/form-builder/types/geocoded-location.types.mjs +6 -0
  207. package/esm2022/crud-table/lib/components/form-builder/types/schema.types.mjs +6 -0
  208. package/esm2022/crud-table/lib/components/form-builder/types/territoriale.types.mjs +6 -0
  209. package/esm2022/crud-table/lib/components/form-builder/types/validation.types.mjs +10 -0
  210. package/esm2022/crud-table/lib/components/modal/confirm-dialog.component.mjs +151 -0
  211. package/esm2022/crud-table/lib/components/modal/modal.service.mjs +197 -0
  212. package/esm2022/crud-table/lib/components/modal/modal.types.mjs +6 -0
  213. package/esm2022/crud-table/lib/core/logging/logger.config.mjs +18 -0
  214. package/esm2022/crud-table/lib/core/logging/logger.service.mjs +295 -0
  215. package/esm2022/crud-table/lib/core/logging/logger.types.mjs +7 -0
  216. package/esm2022/crud-table/lib/core/types/index.mjs +6 -0
  217. package/esm2022/crud-table/lib/sources/location-data.opt.json +8942 -0
  218. package/esm2022/crud-table/lib/sources/nazioni.opt.json +215 -0
  219. package/esm2022/form-builder/entry-form-builder.mjs +5 -0
  220. package/esm2022/form-builder/gnggln-ng-ui-system-form-builder.mjs +5 -0
  221. package/esm2022/form-builder/lib/components/accordion/accordion.component.mjs +398 -0
  222. package/esm2022/form-builder/lib/components/accordion/accordion.types.mjs +6 -0
  223. package/esm2022/form-builder/lib/components/accordion/index.mjs +2 -0
  224. package/esm2022/form-builder/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
  225. package/esm2022/form-builder/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
  226. package/esm2022/form-builder/lib/components/blackbox/blackbox.service.mjs +323 -0
  227. package/esm2022/form-builder/lib/components/blackbox/blackbox.types.mjs +25 -0
  228. package/esm2022/form-builder/lib/components/button/button-area.component.mjs +210 -0
  229. package/esm2022/form-builder/lib/components/button/button.component.mjs +180 -0
  230. package/esm2022/form-builder/lib/components/button/button.types.mjs +6 -0
  231. package/esm2022/form-builder/lib/components/button/index.mjs +16 -0
  232. package/esm2022/form-builder/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
  233. package/esm2022/form-builder/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
  234. package/esm2022/form-builder/lib/components/form-builder/form-builder.component.mjs +1351 -0
  235. package/esm2022/form-builder/lib/components/form-builder/form-wizard.component.mjs +1064 -0
  236. package/esm2022/form-builder/lib/components/form-builder/index.mjs +24 -0
  237. package/esm2022/form-builder/lib/components/form-builder/services/form-condition.service.mjs +132 -0
  238. package/esm2022/form-builder/lib/components/form-builder/services/form-error-state.matcher.mjs +10 -0
  239. package/esm2022/form-builder/lib/components/form-builder/services/form-field-error.service.mjs +103 -0
  240. package/esm2022/form-builder/lib/components/form-builder/services/form-validation.service.mjs +381 -0
  241. package/esm2022/form-builder/lib/components/form-builder/services/location.service.mjs +141 -0
  242. package/esm2022/form-builder/lib/components/form-builder/services/nominatim-geocoding.service.mjs +120 -0
  243. package/esm2022/form-builder/lib/components/form-builder/services/wizard-sync.service.mjs +84 -0
  244. package/esm2022/form-builder/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +190 -0
  245. package/esm2022/form-builder/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
  246. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +113 -0
  247. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +105 -0
  248. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +126 -0
  249. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-text-field.component.mjs +147 -0
  250. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.mjs +99 -0
  251. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/index.mjs +6 -0
  252. package/esm2022/form-builder/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.mjs +322 -0
  253. package/esm2022/form-builder/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
  254. package/esm2022/form-builder/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
  255. package/esm2022/form-builder/lib/components/form-builder/types/condition.types.mjs +6 -0
  256. package/esm2022/form-builder/lib/components/form-builder/types/field.types.mjs +6 -0
  257. package/esm2022/form-builder/lib/components/form-builder/types/geocoded-location.types.mjs +6 -0
  258. package/esm2022/form-builder/lib/components/form-builder/types/index.mjs +3 -0
  259. package/esm2022/form-builder/lib/components/form-builder/types/schema.types.mjs +6 -0
  260. package/esm2022/form-builder/lib/components/form-builder/types/territoriale.types.mjs +6 -0
  261. package/esm2022/form-builder/lib/components/form-builder/types/validation.types.mjs +10 -0
  262. package/esm2022/form-builder/lib/core/logging/logger.config.mjs +18 -0
  263. package/esm2022/form-builder/lib/core/logging/logger.service.mjs +295 -0
  264. package/esm2022/form-builder/lib/core/logging/logger.types.mjs +7 -0
  265. package/esm2022/form-builder/lib/core/types/index.mjs +6 -0
  266. package/esm2022/form-builder/lib/sources/location-data.opt.json +8942 -0
  267. package/esm2022/form-builder/lib/sources/nazioni.opt.json +215 -0
  268. package/esm2022/form-builder-editor/entry-form-builder-editor.mjs +5 -0
  269. package/esm2022/form-builder-editor/gnggln-ng-ui-system-form-builder-editor.mjs +5 -0
  270. package/esm2022/form-builder-editor/lib/components/accordion/accordion.component.mjs +398 -0
  271. package/esm2022/form-builder-editor/lib/components/accordion/accordion.types.mjs +6 -0
  272. package/esm2022/form-builder-editor/lib/components/accordion/index.mjs +2 -0
  273. package/esm2022/form-builder-editor/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
  274. package/esm2022/form-builder-editor/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
  275. package/esm2022/form-builder-editor/lib/components/blackbox/blackbox.service.mjs +323 -0
  276. package/esm2022/form-builder-editor/lib/components/blackbox/blackbox.types.mjs +25 -0
  277. package/esm2022/form-builder-editor/lib/components/button/button-area.component.mjs +210 -0
  278. package/esm2022/form-builder-editor/lib/components/button/button.component.mjs +180 -0
  279. package/esm2022/form-builder-editor/lib/components/button/button.types.mjs +6 -0
  280. package/esm2022/form-builder-editor/lib/components/button/index.mjs +16 -0
  281. package/esm2022/form-builder-editor/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
  282. package/esm2022/form-builder-editor/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
  283. package/esm2022/form-builder-editor/lib/components/form-builder/form-builder.component.mjs +1351 -0
  284. package/esm2022/form-builder-editor/lib/components/form-builder/services/form-condition.service.mjs +132 -0
  285. package/esm2022/form-builder-editor/lib/components/form-builder/services/form-error-state.matcher.mjs +10 -0
  286. package/esm2022/form-builder-editor/lib/components/form-builder/services/form-field-error.service.mjs +103 -0
  287. package/esm2022/form-builder-editor/lib/components/form-builder/services/form-validation.service.mjs +381 -0
  288. package/esm2022/form-builder-editor/lib/components/form-builder/services/location.service.mjs +141 -0
  289. package/esm2022/form-builder-editor/lib/components/form-builder/services/nominatim-geocoding.service.mjs +120 -0
  290. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +190 -0
  291. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
  292. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +113 -0
  293. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +105 -0
  294. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +126 -0
  295. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-text-field.component.mjs +147 -0
  296. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.mjs +99 -0
  297. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/index.mjs +6 -0
  298. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.mjs +322 -0
  299. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
  300. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
  301. package/esm2022/form-builder-editor/lib/components/form-builder/types/condition.types.mjs +6 -0
  302. package/esm2022/form-builder-editor/lib/components/form-builder/types/field.types.mjs +6 -0
  303. package/esm2022/form-builder-editor/lib/components/form-builder/types/geocoded-location.types.mjs +6 -0
  304. package/esm2022/form-builder-editor/lib/components/form-builder/types/index.mjs +3 -0
  305. package/esm2022/form-builder-editor/lib/components/form-builder/types/schema.types.mjs +6 -0
  306. package/esm2022/form-builder-editor/lib/components/form-builder/types/territoriale.types.mjs +6 -0
  307. package/esm2022/form-builder-editor/lib/components/form-builder/types/validation.types.mjs +10 -0
  308. package/esm2022/form-builder-editor/lib/components/form-builder-editor/form-builder-editor.component.mjs +730 -0
  309. package/esm2022/form-builder-editor/lib/components/form-builder-editor/form-builder-editor.service.mjs +56 -0
  310. package/esm2022/form-builder-editor/lib/components/form-builder-editor/index.mjs +23 -0
  311. package/esm2022/form-builder-editor/lib/components/form-builder-editor/presets/editor-presets.mjs +395 -0
  312. package/esm2022/form-builder-editor/lib/components/form-builder-editor/services/editor-persistence.service.mjs +190 -0
  313. package/esm2022/form-builder-editor/lib/components/form-builder-editor/services/editor-state.service.mjs +324 -0
  314. package/esm2022/form-builder-editor/lib/components/form-builder-editor/services/field-factory.service.mjs +188 -0
  315. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.mjs +667 -0
  316. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.mjs +317 -0
  317. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.mjs +611 -0
  318. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.mjs +267 -0
  319. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.mjs +276 -0
  320. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.mjs +323 -0
  321. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +238 -0
  322. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +473 -0
  323. package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.mjs +473 -0
  324. package/esm2022/form-builder-editor/lib/components/form-builder-editor/types/editor.types.mjs +6 -0
  325. package/esm2022/form-builder-editor/lib/components/modal/confirm-dialog.component.mjs +151 -0
  326. package/esm2022/form-builder-editor/lib/components/modal/index.mjs +4 -0
  327. package/esm2022/form-builder-editor/lib/components/modal/modal.component.mjs +139 -0
  328. package/esm2022/form-builder-editor/lib/components/modal/modal.service.mjs +197 -0
  329. package/esm2022/form-builder-editor/lib/components/modal/modal.types.mjs +6 -0
  330. package/esm2022/form-builder-editor/lib/core/logging/logger.config.mjs +18 -0
  331. package/esm2022/form-builder-editor/lib/core/logging/logger.service.mjs +295 -0
  332. package/esm2022/form-builder-editor/lib/core/logging/logger.types.mjs +7 -0
  333. package/esm2022/form-builder-editor/lib/core/types/index.mjs +6 -0
  334. package/esm2022/form-builder-editor/lib/sources/location-data.opt.json +8942 -0
  335. package/esm2022/form-builder-editor/lib/sources/nazioni.opt.json +215 -0
  336. package/esm2022/http/entry-http.mjs +5 -0
  337. package/esm2022/http/gnggln-ng-ui-system-http.mjs +5 -0
  338. package/esm2022/http/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
  339. package/esm2022/http/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
  340. package/esm2022/http/lib/components/blackbox/blackbox.service.mjs +323 -0
  341. package/esm2022/http/lib/components/blackbox/blackbox.types.mjs +25 -0
  342. package/esm2022/http/lib/components/http/http-message.handler.mjs +143 -0
  343. package/esm2022/http/lib/components/http/http.service.mjs +228 -0
  344. package/esm2022/http/lib/components/http/http.tokens.mjs +29 -0
  345. package/esm2022/http/lib/components/http/http.types.mjs +6 -0
  346. package/esm2022/http/lib/components/http/index.mjs +19 -0
  347. package/esm2022/http/lib/components/layout-builder/layout-builder.types.mjs +9 -0
  348. package/esm2022/http/lib/components/layout-builder/layout.service.mjs +239 -0
  349. package/esm2022/http/lib/components/toast/toast-container.component.mjs +80 -0
  350. package/esm2022/http/lib/components/toast/toast.component.mjs +151 -0
  351. package/esm2022/http/lib/components/toast/toast.service.mjs +156 -0
  352. package/esm2022/http/lib/components/toast/toast.types.mjs +12 -0
  353. package/esm2022/http/lib/core/types/index.mjs +6 -0
  354. package/esm2022/http/lib/core/utils/index.mjs +102 -0
  355. package/esm2022/layout-builder/entry-layout-builder.mjs +5 -0
  356. package/esm2022/layout-builder/gnggln-ng-ui-system-layout-builder.mjs +5 -0
  357. package/esm2022/layout-builder/lib/components/layout-builder/index.mjs +18 -0
  358. package/esm2022/layout-builder/lib/components/layout-builder/layout-builder.component.mjs +1804 -0
  359. package/esm2022/layout-builder/lib/components/layout-builder/layout-builder.types.mjs +9 -0
  360. package/esm2022/layout-builder/lib/components/layout-builder/layout.service.mjs +239 -0
  361. package/esm2022/layout-builder/lib/core/types/index.mjs +6 -0
  362. package/esm2022/lib/components/accordion/accordion.component.mjs +106 -61
  363. package/esm2022/lib/components/accordion/accordion.types.mjs +1 -1
  364. package/esm2022/lib/components/base-layout/base-layout.component.mjs +88 -34
  365. package/esm2022/lib/components/base-layout/base-layout.types.mjs +1 -1
  366. package/esm2022/lib/components/base-layout/index.mjs +1 -1
  367. package/esm2022/lib/components/blackbox/blackbox-debugger.component.mjs +904 -0
  368. package/esm2022/lib/components/blackbox/blackbox-debugger.service.mjs +51 -0
  369. package/esm2022/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
  370. package/esm2022/lib/components/blackbox/blackbox-json-viewer.component.mjs +66 -0
  371. package/esm2022/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
  372. package/esm2022/lib/components/blackbox/blackbox.interceptor.mjs +135 -0
  373. package/esm2022/lib/components/blackbox/blackbox.service.mjs +323 -0
  374. package/esm2022/lib/components/blackbox/blackbox.types.mjs +25 -0
  375. package/esm2022/lib/components/blackbox/index.mjs +27 -0
  376. package/esm2022/lib/components/blackbox/ui-track.directive.mjs +69 -0
  377. package/esm2022/lib/components/button/button-area.component.mjs +16 -2
  378. package/esm2022/lib/components/button/button.component.mjs +23 -7
  379. package/esm2022/lib/components/button/button.types.mjs +1 -1
  380. package/esm2022/lib/components/crud-table/crud-table.component.mjs +14 -14
  381. package/esm2022/lib/components/form-builder/form-builder.component.mjs +710 -183
  382. package/esm2022/lib/components/form-builder/form-wizard.component.mjs +789 -235
  383. package/esm2022/lib/components/form-builder/index.mjs +7 -2
  384. package/esm2022/lib/components/form-builder/services/form-error-state.matcher.mjs +10 -0
  385. package/esm2022/lib/components/form-builder/services/form-field-error.service.mjs +103 -0
  386. package/esm2022/lib/components/form-builder/services/location.service.mjs +4 -3
  387. package/esm2022/lib/components/form-builder/services/nominatim-geocoding.service.mjs +120 -0
  388. package/esm2022/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +142 -113
  389. package/esm2022/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +113 -0
  390. package/esm2022/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +105 -0
  391. package/esm2022/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +126 -0
  392. package/esm2022/lib/components/form-builder/sub-components/form-fields/form-text-field.component.mjs +147 -0
  393. package/esm2022/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.mjs +99 -0
  394. package/esm2022/lib/components/form-builder/sub-components/form-fields/index.mjs +6 -0
  395. package/esm2022/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.mjs +322 -0
  396. package/esm2022/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +3 -3
  397. package/esm2022/lib/components/form-builder/types/field.types.mjs +1 -1
  398. package/esm2022/lib/components/form-builder/types/geocoded-location.types.mjs +6 -0
  399. package/esm2022/lib/components/form-builder/types/index.mjs +3 -2
  400. package/esm2022/lib/components/form-builder/types/schema.types.mjs +1 -1
  401. package/esm2022/lib/components/form-builder/types/validation.types.mjs +6 -2
  402. package/esm2022/lib/components/form-builder-editor/form-builder-editor.component.mjs +3 -3
  403. package/esm2022/lib/components/form-builder-editor/index.mjs +3 -1
  404. package/esm2022/lib/components/form-builder-editor/presets/editor-presets.mjs +395 -0
  405. package/esm2022/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +2 -2
  406. package/esm2022/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +2 -1
  407. package/esm2022/lib/components/http/http-message.handler.mjs +143 -0
  408. package/esm2022/lib/components/http/http.service.mjs +228 -0
  409. package/esm2022/lib/components/http/http.tokens.mjs +29 -0
  410. package/esm2022/lib/components/http/http.types.mjs +6 -0
  411. package/esm2022/lib/components/http/index.mjs +19 -0
  412. package/esm2022/lib/components/layout-builder/layout-builder.component.mjs +27 -15
  413. package/esm2022/lib/components/modal/confirm-dialog.component.mjs +3 -3
  414. package/esm2022/lib/components/modal/modal.service.mjs +5 -2
  415. package/esm2022/lib/components/page-header/breadcrumb.service.mjs +5 -4
  416. package/esm2022/lib/components/table/paginated-table.component.mjs +17 -3
  417. package/esm2022/lib/components/table/table.types.mjs +1 -1
  418. package/esm2022/lib/components/toast/index.mjs +18 -0
  419. package/esm2022/lib/components/toast/toast-container.component.mjs +80 -0
  420. package/esm2022/lib/components/toast/toast.component.mjs +151 -0
  421. package/esm2022/lib/components/toast/toast.service.mjs +156 -0
  422. package/esm2022/lib/components/toast/toast.types.mjs +12 -0
  423. package/esm2022/lib/core/logging/index.mjs +10 -0
  424. package/esm2022/lib/core/logging/logger.config.mjs +18 -0
  425. package/esm2022/lib/core/logging/logger.service.mjs +295 -0
  426. package/esm2022/lib/core/logging/logger.types.mjs +7 -0
  427. package/esm2022/lib/core/types/index.mjs +1 -1
  428. package/esm2022/lib/core/utils/index.mjs +50 -1
  429. package/esm2022/lib/version/ng-ui-system-version.mjs +12 -0
  430. package/esm2022/modal/entry-modal.mjs +5 -0
  431. package/esm2022/modal/gnggln-ng-ui-system-modal.mjs +5 -0
  432. package/esm2022/modal/lib/components/button/button.component.mjs +180 -0
  433. package/esm2022/modal/lib/components/button/button.types.mjs +6 -0
  434. package/esm2022/modal/lib/components/modal/confirm-dialog.component.mjs +151 -0
  435. package/esm2022/modal/lib/components/modal/index.mjs +4 -0
  436. package/esm2022/modal/lib/components/modal/modal.component.mjs +139 -0
  437. package/esm2022/modal/lib/components/modal/modal.service.mjs +197 -0
  438. package/esm2022/modal/lib/components/modal/modal.types.mjs +6 -0
  439. package/esm2022/modal/lib/core/types/index.mjs +6 -0
  440. package/esm2022/page-header/entry-page-header.mjs +5 -0
  441. package/esm2022/page-header/gnggln-ng-ui-system-page-header.mjs +5 -0
  442. package/esm2022/page-header/lib/components/page-header/breadcrumb.service.mjs +243 -0
  443. package/esm2022/page-header/lib/components/page-header/index.mjs +20 -0
  444. package/esm2022/page-header/lib/components/page-header/page-header.component.mjs +243 -0
  445. package/esm2022/page-header/lib/components/page-header/page-header.types.mjs +21 -0
  446. package/esm2022/public-api.mjs +17 -8
  447. package/esm2022/table/entry-table.mjs +5 -0
  448. package/esm2022/table/gnggln-ng-ui-system-table.mjs +5 -0
  449. package/esm2022/table/lib/components/table/index.mjs +2 -0
  450. package/esm2022/table/lib/components/table/paginated-table.component.mjs +421 -0
  451. package/esm2022/table/lib/components/table/table.types.mjs +6 -0
  452. package/esm2022/table/lib/core/utils/index.mjs +102 -0
  453. package/esm2022/toast/entry-toast.mjs +5 -0
  454. package/esm2022/toast/gnggln-ng-ui-system-toast.mjs +5 -0
  455. package/esm2022/toast/lib/components/toast/index.mjs +18 -0
  456. package/esm2022/toast/lib/components/toast/toast-container.component.mjs +80 -0
  457. package/esm2022/toast/lib/components/toast/toast.component.mjs +151 -0
  458. package/esm2022/toast/lib/components/toast/toast.service.mjs +156 -0
  459. package/esm2022/toast/lib/components/toast/toast.types.mjs +12 -0
  460. package/esm2022/toast/lib/core/types/index.mjs +6 -0
  461. package/esm2022/toast/lib/core/utils/index.mjs +102 -0
  462. package/fesm2022/gnggln-ng-ui-system-accordion.mjs +409 -0
  463. package/fesm2022/gnggln-ng-ui-system-accordion.mjs.map +1 -0
  464. package/fesm2022/gnggln-ng-ui-system-base-layout.mjs +1905 -0
  465. package/fesm2022/gnggln-ng-ui-system-base-layout.mjs.map +1 -0
  466. package/fesm2022/gnggln-ng-ui-system-blackbox.mjs +2829 -0
  467. package/fesm2022/gnggln-ng-ui-system-blackbox.mjs.map +1 -0
  468. package/fesm2022/gnggln-ng-ui-system-button.mjs +1148 -0
  469. package/fesm2022/gnggln-ng-ui-system-button.mjs.map +1 -0
  470. package/fesm2022/gnggln-ng-ui-system-core.mjs +117 -0
  471. package/fesm2022/gnggln-ng-ui-system-core.mjs.map +1 -0
  472. package/fesm2022/gnggln-ng-ui-system-crud-table.mjs +49600 -0
  473. package/fesm2022/gnggln-ng-ui-system-crud-table.mjs.map +1 -0
  474. package/fesm2022/gnggln-ng-ui-system-form-builder-editor.mjs +54332 -0
  475. package/fesm2022/gnggln-ng-ui-system-form-builder-editor.mjs.map +1 -0
  476. package/fesm2022/gnggln-ng-ui-system-form-builder.mjs +49609 -0
  477. package/fesm2022/gnggln-ng-ui-system-form-builder.mjs.map +1 -0
  478. package/fesm2022/gnggln-ng-ui-system-http.mjs +1878 -0
  479. package/fesm2022/gnggln-ng-ui-system-http.mjs.map +1 -0
  480. package/fesm2022/gnggln-ng-ui-system-layout-builder.mjs +2064 -0
  481. package/fesm2022/gnggln-ng-ui-system-layout-builder.mjs.map +1 -0
  482. package/fesm2022/gnggln-ng-ui-system-modal.mjs +664 -0
  483. package/fesm2022/gnggln-ng-ui-system-modal.mjs.map +1 -0
  484. package/fesm2022/gnggln-ng-ui-system-page-header.mjs +526 -0
  485. package/fesm2022/gnggln-ng-ui-system-page-header.mjs.map +1 -0
  486. package/fesm2022/gnggln-ng-ui-system-table.mjs +533 -0
  487. package/fesm2022/gnggln-ng-ui-system-table.mjs.map +1 -0
  488. package/fesm2022/gnggln-ng-ui-system-toast.mjs +516 -0
  489. package/fesm2022/gnggln-ng-ui-system-toast.mjs.map +1 -0
  490. package/fesm2022/gnggln-ng-ui-system.mjs +10068 -4234
  491. package/fesm2022/gnggln-ng-ui-system.mjs.map +1 -1
  492. package/form-builder/entry-form-builder.d.ts +4 -0
  493. package/form-builder/index.d.ts +5 -0
  494. package/form-builder/lib/components/accordion/accordion.component.d.ts +125 -0
  495. package/form-builder/lib/components/accordion/accordion.types.d.ts +64 -0
  496. package/form-builder/lib/components/accordion/index.d.ts +2 -0
  497. package/form-builder/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
  498. package/form-builder/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
  499. package/form-builder/lib/components/blackbox/blackbox.service.d.ts +144 -0
  500. package/form-builder/lib/components/blackbox/blackbox.types.d.ts +238 -0
  501. package/form-builder/lib/components/button/button-area.component.d.ts +93 -0
  502. package/form-builder/lib/components/button/button.component.d.ts +61 -0
  503. package/form-builder/lib/components/button/button.types.d.ts +75 -0
  504. package/form-builder/lib/components/button/index.d.ts +15 -0
  505. package/form-builder/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
  506. package/form-builder/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
  507. package/form-builder/lib/components/form-builder/form-builder.component.d.ts +279 -0
  508. package/form-builder/lib/components/form-builder/form-wizard.component.d.ts +172 -0
  509. package/form-builder/lib/components/form-builder/index.d.ts +19 -0
  510. package/form-builder/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
  511. package/form-builder/lib/components/form-builder/services/form-error-state.matcher.d.ts +9 -0
  512. package/form-builder/lib/components/form-builder/services/form-field-error.service.d.ts +38 -0
  513. package/form-builder/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
  514. package/form-builder/lib/components/form-builder/services/location.service.d.ts +83 -0
  515. package/form-builder/lib/components/form-builder/services/nominatim-geocoding.service.d.ts +37 -0
  516. package/form-builder/lib/components/form-builder/services/wizard-sync.service.d.ts +63 -0
  517. package/form-builder/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +31 -0
  518. package/form-builder/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
  519. package/form-builder/lib/components/form-builder/sub-components/form-fields/form-number-field.component.d.ts +42 -0
  520. package/form-builder/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.d.ts +45 -0
  521. package/form-builder/lib/components/form-builder/sub-components/form-fields/form-select-field.component.d.ts +44 -0
  522. package/form-builder/lib/components/form-builder/sub-components/form-fields/form-text-field.component.d.ts +62 -0
  523. package/form-builder/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.d.ts +39 -0
  524. package/form-builder/lib/components/form-builder/sub-components/form-fields/index.d.ts +5 -0
  525. package/form-builder/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.d.ts +84 -0
  526. package/form-builder/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
  527. package/form-builder/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
  528. package/form-builder/lib/components/form-builder/types/condition.types.d.ts +51 -0
  529. package/form-builder/lib/components/form-builder/types/field.types.d.ts +330 -0
  530. package/form-builder/lib/components/form-builder/types/geocoded-location.types.d.ts +116 -0
  531. package/form-builder/lib/components/form-builder/types/index.d.ts +6 -0
  532. package/form-builder/lib/components/form-builder/types/schema.types.d.ts +304 -0
  533. package/form-builder/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
  534. package/form-builder/lib/components/form-builder/types/validation.types.d.ts +179 -0
  535. package/form-builder/lib/core/logging/logger.config.d.ts +18 -0
  536. package/form-builder/lib/core/logging/logger.service.d.ts +75 -0
  537. package/form-builder/lib/core/logging/logger.types.d.ts +70 -0
  538. package/form-builder/lib/core/types/index.d.ts +133 -0
  539. package/form-builder-editor/entry-form-builder-editor.d.ts +4 -0
  540. package/form-builder-editor/index.d.ts +5 -0
  541. package/form-builder-editor/lib/components/accordion/accordion.component.d.ts +125 -0
  542. package/form-builder-editor/lib/components/accordion/accordion.types.d.ts +64 -0
  543. package/form-builder-editor/lib/components/accordion/index.d.ts +2 -0
  544. package/form-builder-editor/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
  545. package/form-builder-editor/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
  546. package/form-builder-editor/lib/components/blackbox/blackbox.service.d.ts +144 -0
  547. package/form-builder-editor/lib/components/blackbox/blackbox.types.d.ts +238 -0
  548. package/form-builder-editor/lib/components/button/button-area.component.d.ts +93 -0
  549. package/form-builder-editor/lib/components/button/button.component.d.ts +61 -0
  550. package/form-builder-editor/lib/components/button/button.types.d.ts +75 -0
  551. package/form-builder-editor/lib/components/button/index.d.ts +15 -0
  552. package/form-builder-editor/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
  553. package/form-builder-editor/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
  554. package/form-builder-editor/lib/components/form-builder/form-builder.component.d.ts +279 -0
  555. package/form-builder-editor/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
  556. package/form-builder-editor/lib/components/form-builder/services/form-error-state.matcher.d.ts +9 -0
  557. package/form-builder-editor/lib/components/form-builder/services/form-field-error.service.d.ts +38 -0
  558. package/form-builder-editor/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
  559. package/form-builder-editor/lib/components/form-builder/services/location.service.d.ts +83 -0
  560. package/form-builder-editor/lib/components/form-builder/services/nominatim-geocoding.service.d.ts +37 -0
  561. package/form-builder-editor/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +31 -0
  562. package/form-builder-editor/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
  563. package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-number-field.component.d.ts +42 -0
  564. package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.d.ts +45 -0
  565. package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-select-field.component.d.ts +44 -0
  566. package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-text-field.component.d.ts +62 -0
  567. package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.d.ts +39 -0
  568. package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/index.d.ts +5 -0
  569. package/form-builder-editor/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.d.ts +84 -0
  570. package/form-builder-editor/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
  571. package/form-builder-editor/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
  572. package/form-builder-editor/lib/components/form-builder/types/condition.types.d.ts +51 -0
  573. package/form-builder-editor/lib/components/form-builder/types/field.types.d.ts +330 -0
  574. package/form-builder-editor/lib/components/form-builder/types/geocoded-location.types.d.ts +116 -0
  575. package/form-builder-editor/lib/components/form-builder/types/index.d.ts +6 -0
  576. package/form-builder-editor/lib/components/form-builder/types/schema.types.d.ts +304 -0
  577. package/form-builder-editor/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
  578. package/form-builder-editor/lib/components/form-builder/types/validation.types.d.ts +179 -0
  579. package/form-builder-editor/lib/components/form-builder-editor/form-builder-editor.component.d.ts +117 -0
  580. package/form-builder-editor/lib/components/form-builder-editor/form-builder-editor.service.d.ts +38 -0
  581. package/form-builder-editor/lib/components/form-builder-editor/index.d.ts +17 -0
  582. package/form-builder-editor/lib/components/form-builder-editor/presets/editor-presets.d.ts +25 -0
  583. package/form-builder-editor/lib/components/form-builder-editor/services/editor-persistence.service.d.ts +42 -0
  584. package/form-builder-editor/lib/components/form-builder-editor/services/editor-state.service.d.ts +66 -0
  585. package/form-builder-editor/lib/components/form-builder-editor/services/field-factory.service.d.ts +28 -0
  586. package/form-builder-editor/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.d.ts +139 -0
  587. package/form-builder-editor/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.d.ts +43 -0
  588. package/form-builder-editor/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.d.ts +83 -0
  589. package/form-builder-editor/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.d.ts +40 -0
  590. package/form-builder-editor/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.d.ts +51 -0
  591. package/form-builder-editor/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.d.ts +63 -0
  592. package/form-builder-editor/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.d.ts +68 -0
  593. package/form-builder-editor/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.d.ts +82 -0
  594. package/form-builder-editor/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.d.ts +112 -0
  595. package/form-builder-editor/lib/components/form-builder-editor/types/editor.types.d.ts +124 -0
  596. package/form-builder-editor/lib/components/modal/confirm-dialog.component.d.ts +46 -0
  597. package/form-builder-editor/lib/components/modal/index.d.ts +4 -0
  598. package/form-builder-editor/lib/components/modal/modal.component.d.ts +44 -0
  599. package/form-builder-editor/lib/components/modal/modal.service.d.ts +93 -0
  600. package/form-builder-editor/lib/components/modal/modal.types.d.ts +110 -0
  601. package/form-builder-editor/lib/core/logging/logger.config.d.ts +18 -0
  602. package/form-builder-editor/lib/core/logging/logger.service.d.ts +75 -0
  603. package/form-builder-editor/lib/core/logging/logger.types.d.ts +70 -0
  604. package/form-builder-editor/lib/core/types/index.d.ts +133 -0
  605. package/http/entry-http.d.ts +4 -0
  606. package/http/index.d.ts +5 -0
  607. package/http/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
  608. package/http/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
  609. package/http/lib/components/blackbox/blackbox.service.d.ts +144 -0
  610. package/http/lib/components/blackbox/blackbox.types.d.ts +238 -0
  611. package/http/lib/components/http/http-message.handler.d.ts +59 -0
  612. package/http/lib/components/http/http.service.d.ts +98 -0
  613. package/http/lib/components/http/http.tokens.d.ts +29 -0
  614. package/http/lib/components/http/http.types.d.ts +50 -0
  615. package/http/lib/components/http/index.d.ts +17 -0
  616. package/http/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
  617. package/http/lib/components/layout-builder/layout.service.d.ts +100 -0
  618. package/http/lib/components/toast/toast-container.component.d.ts +27 -0
  619. package/http/lib/components/toast/toast.component.d.ts +37 -0
  620. package/http/lib/components/toast/toast.service.d.ts +39 -0
  621. package/http/lib/components/toast/toast.types.d.ts +52 -0
  622. package/http/lib/core/types/index.d.ts +133 -0
  623. package/http/lib/core/utils/index.d.ts +60 -0
  624. package/layout-builder/entry-layout-builder.d.ts +4 -0
  625. package/layout-builder/index.d.ts +5 -0
  626. package/layout-builder/lib/components/layout-builder/index.d.ts +16 -0
  627. package/layout-builder/lib/components/layout-builder/layout-builder.component.d.ts +85 -0
  628. package/layout-builder/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
  629. package/layout-builder/lib/components/layout-builder/layout.service.d.ts +100 -0
  630. package/layout-builder/lib/core/types/index.d.ts +133 -0
  631. package/lib/components/accordion/accordion.component.d.ts +10 -3
  632. package/lib/components/accordion/accordion.types.d.ts +2 -0
  633. package/lib/components/base-layout/base-layout.component.d.ts +36 -11
  634. package/lib/components/base-layout/base-layout.types.d.ts +14 -0
  635. package/lib/components/base-layout/index.d.ts +1 -1
  636. package/lib/components/blackbox/blackbox-debugger.component.d.ts +80 -0
  637. package/lib/components/blackbox/blackbox-debugger.service.d.ts +34 -0
  638. package/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
  639. package/lib/components/blackbox/blackbox-json-viewer.component.d.ts +18 -0
  640. package/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
  641. package/lib/components/blackbox/blackbox.interceptor.d.ts +38 -0
  642. package/lib/components/blackbox/blackbox.service.d.ts +144 -0
  643. package/lib/components/blackbox/blackbox.types.d.ts +238 -0
  644. package/lib/components/blackbox/index.d.ts +23 -0
  645. package/lib/components/blackbox/ui-track.directive.d.ts +20 -0
  646. package/lib/components/button/button-area.component.d.ts +6 -1
  647. package/lib/components/button/button.component.d.ts +8 -2
  648. package/lib/components/button/button.types.d.ts +5 -0
  649. package/lib/components/form-builder/form-builder.component.d.ts +125 -29
  650. package/lib/components/form-builder/form-wizard.component.d.ts +89 -4
  651. package/lib/components/form-builder/index.d.ts +7 -1
  652. package/lib/components/form-builder/services/form-error-state.matcher.d.ts +9 -0
  653. package/lib/components/form-builder/services/form-field-error.service.d.ts +38 -0
  654. package/lib/components/form-builder/services/nominatim-geocoding.service.d.ts +37 -0
  655. package/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +9 -6
  656. package/lib/components/form-builder/sub-components/form-fields/form-number-field.component.d.ts +42 -0
  657. package/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.d.ts +45 -0
  658. package/lib/components/form-builder/sub-components/form-fields/form-select-field.component.d.ts +44 -0
  659. package/lib/components/form-builder/sub-components/form-fields/form-text-field.component.d.ts +62 -0
  660. package/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.d.ts +39 -0
  661. package/lib/components/form-builder/sub-components/form-fields/index.d.ts +5 -0
  662. package/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.d.ts +84 -0
  663. package/lib/components/form-builder/types/field.types.d.ts +48 -6
  664. package/lib/components/form-builder/types/geocoded-location.types.d.ts +116 -0
  665. package/lib/components/form-builder/types/index.d.ts +4 -3
  666. package/lib/components/form-builder/types/schema.types.d.ts +83 -6
  667. package/lib/components/form-builder/types/validation.types.d.ts +5 -0
  668. package/lib/components/form-builder-editor/index.d.ts +2 -0
  669. package/lib/components/form-builder-editor/presets/editor-presets.d.ts +25 -0
  670. package/lib/components/http/http-message.handler.d.ts +59 -0
  671. package/lib/components/http/http.service.d.ts +98 -0
  672. package/lib/components/http/http.tokens.d.ts +29 -0
  673. package/lib/components/http/http.types.d.ts +50 -0
  674. package/lib/components/http/index.d.ts +17 -0
  675. package/lib/components/page-header/breadcrumb.service.d.ts +2 -2
  676. package/lib/components/table/table.types.d.ts +5 -0
  677. package/lib/components/toast/index.d.ts +17 -0
  678. package/lib/components/toast/toast-container.component.d.ts +27 -0
  679. package/lib/components/toast/toast.component.d.ts +37 -0
  680. package/lib/components/toast/toast.service.d.ts +39 -0
  681. package/lib/components/toast/toast.types.d.ts +52 -0
  682. package/lib/core/logging/index.d.ts +8 -0
  683. package/lib/core/logging/logger.config.d.ts +18 -0
  684. package/lib/core/logging/logger.service.d.ts +75 -0
  685. package/lib/core/logging/logger.types.d.ts +70 -0
  686. package/lib/core/types/index.d.ts +76 -0
  687. package/lib/core/utils/index.d.ts +31 -0
  688. package/lib/version/ng-ui-system-version.d.ts +9 -0
  689. package/modal/entry-modal.d.ts +4 -0
  690. package/modal/index.d.ts +5 -0
  691. package/modal/lib/components/button/button.component.d.ts +61 -0
  692. package/modal/lib/components/button/button.types.d.ts +75 -0
  693. package/modal/lib/components/modal/confirm-dialog.component.d.ts +46 -0
  694. package/modal/lib/components/modal/index.d.ts +4 -0
  695. package/modal/lib/components/modal/modal.component.d.ts +44 -0
  696. package/modal/lib/components/modal/modal.service.d.ts +93 -0
  697. package/modal/lib/components/modal/modal.types.d.ts +110 -0
  698. package/modal/lib/core/types/index.d.ts +133 -0
  699. package/package.json +93 -8
  700. package/page-header/entry-page-header.d.ts +4 -0
  701. package/page-header/index.d.ts +5 -0
  702. package/page-header/lib/components/page-header/breadcrumb.service.d.ts +96 -0
  703. package/page-header/lib/components/page-header/index.d.ts +16 -0
  704. package/page-header/lib/components/page-header/page-header.component.d.ts +59 -0
  705. package/page-header/lib/components/page-header/page-header.types.d.ts +96 -0
  706. package/public-api.d.ts +11 -6
  707. package/table/entry-table.d.ts +4 -0
  708. package/table/index.d.ts +5 -0
  709. package/table/lib/components/table/index.d.ts +2 -0
  710. package/table/lib/components/table/paginated-table.component.d.ts +85 -0
  711. package/table/lib/components/table/table.types.d.ts +86 -0
  712. package/table/lib/core/utils/index.d.ts +60 -0
  713. package/toast/entry-toast.d.ts +4 -0
  714. package/toast/index.d.ts +5 -0
  715. package/toast/lib/components/toast/index.d.ts +17 -0
  716. package/toast/lib/components/toast/toast-container.component.d.ts +27 -0
  717. package/toast/lib/components/toast/toast.component.d.ts +37 -0
  718. package/toast/lib/components/toast/toast.service.d.ts +39 -0
  719. package/toast/lib/components/toast/toast.types.d.ts +52 -0
  720. package/toast/lib/core/types/index.d.ts +133 -0
  721. package/toast/lib/core/utils/index.d.ts +60 -0
@@ -0,0 +1,99 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation, inject, } from '@angular/core';
2
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
3
+ import { ErrorStateMatcher } from '@angular/material/core';
4
+ import { MatFormFieldModule } from '@angular/material/form-field';
5
+ import { MatInputModule } from '@angular/material/input';
6
+ import { MatTooltipModule } from '@angular/material/tooltip';
7
+ import { LucideAngularModule } from 'lucide-angular';
8
+ import { UiFormFieldErrorService } from '../../services/form-field-error.service';
9
+ import { UiFormErrorStateMatcher } from '../../services/form-error-state.matcher';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/forms";
12
+ import * as i2 from "@angular/material/form-field";
13
+ import * as i3 from "@angular/material/input";
14
+ import * as i4 from "@angular/material/tooltip";
15
+ import * as i5 from "lucide-angular";
16
+ /**
17
+ * Campo atomico textarea — stesso rendering del form-builder.
18
+ *
19
+ * @selector ui-form-textarea-field
20
+ */
21
+ export class UiFormTextareaFieldComponent {
22
+ constructor() {
23
+ this.fieldErrorService = inject(UiFormFieldErrorService);
24
+ this.readonly = false;
25
+ this.errors = null;
26
+ this.rows = 4;
27
+ this.blurred = new EventEmitter();
28
+ }
29
+ get effectiveLabel() {
30
+ return this.field?.label ?? this.label ?? '';
31
+ }
32
+ get effectivePlaceholder() {
33
+ return this.field?.placeholder ?? this.placeholder ?? '';
34
+ }
35
+ get isReadonly() {
36
+ return this.readonly || this.field?.readonly === true;
37
+ }
38
+ get effectiveRules() {
39
+ return this.field?.validation ?? this.validationRules ?? [];
40
+ }
41
+ /** Controllo del campo in modalità builder. */
42
+ get fieldControl() {
43
+ if (!this.field || !this.formGroup)
44
+ return null;
45
+ const c = this.formGroup.get(this.field.key);
46
+ return c instanceof FormControl ? c : null;
47
+ }
48
+ get effectiveMaxLength() {
49
+ if (this.maxLength != null)
50
+ return this.maxLength;
51
+ return this.fieldErrorService.resolveMaxLength(this.effectiveRules);
52
+ }
53
+ resolvedErrors(control) {
54
+ if (this.errors != null)
55
+ return this.errors;
56
+ return this.fieldErrorService.getFieldErrors(control, this.effectiveRules);
57
+ }
58
+ charCount(control) {
59
+ return this.fieldErrorService.getCharCount(control, this.effectiveMaxLength);
60
+ }
61
+ onBlur() {
62
+ this.blurred.emit();
63
+ }
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiFormTextareaFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UiFormTextareaFieldComponent, isStandalone: true, selector: "ui-form-textarea-field", inputs: { field: "field", formGroup: "formGroup", readonly: "readonly", errors: "errors", control: "control", label: "label", placeholder: "placeholder", rows: "rows", maxLength: "maxLength", validationRules: "validationRules" }, outputs: { blurred: "blurred" }, providers: [{ provide: ErrorStateMatcher, useClass: UiFormErrorStateMatcher }], ngImport: i0, template: "@if (field && formGroup) {\r\n <div [formGroup]=\"formGroup\" class=\"ui-form-builder__textarea-wrapper\">\r\n <mat-form-field appearance=\"outline\" class=\"ui-form-builder__full-width\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ effectiveLabel }}</mat-label>\r\n <textarea\r\n matInput\r\n [formControlName]=\"field.key\"\r\n [placeholder]=\"effectivePlaceholder\"\r\n [readonly]=\"isReadonly\"\r\n [rows]=\"rows\"\r\n (blur)=\"onBlur()\"\r\n ></textarea>\r\n @if (field.iconTooltip) {\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n type=\"button\"\r\n [matTooltip]=\"field.iconTooltip.text\"\r\n [attr.aria-label]=\"field.iconTooltip.text\"\r\n >\r\n <lucide-icon [name]=\"field.iconTooltip.icon || 'info'\" [size]=\"18\" />\r\n </button>\r\n }\r\n <mat-error>\r\n @for (err of resolvedErrors(fieldControl); track $index) {\r\n <div>{{ err }}</div>\r\n }\r\n </mat-error>\r\n @if (charCount(fieldControl); as cc) {\r\n <mat-hint\r\n align=\"end\"\r\n class=\"ui-form-builder__char-count\"\r\n [class.ui-form-builder__char-count--warn]=\"cc.current > cc.max * 0.9\"\r\n [class.ui-form-builder__char-count--error]=\"cc.current > cc.max\"\r\n >\r\n {{ cc.current }} / {{ cc.max }}\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n </div>\r\n} @else if (control) {\r\n <div class=\"ui-form-field-atom ui-form-builder__textarea-wrapper\">\r\n <mat-form-field appearance=\"outline\" class=\"ui-form-builder__full-width\" subscriptSizing=\"dynamic\">\r\n @if (effectiveLabel) {\r\n <mat-label>{{ effectiveLabel }}</mat-label>\r\n }\r\n <textarea\r\n matInput\r\n [formControl]=\"control\"\r\n [placeholder]=\"effectivePlaceholder\"\r\n [rows]=\"rows\"\r\n [attr.maxlength]=\"effectiveMaxLength\"\r\n (blur)=\"onBlur()\"\r\n ></textarea>\r\n <mat-error>\r\n @for (err of resolvedErrors(control); track $index) {\r\n <div>{{ err }}</div>\r\n }\r\n </mat-error>\r\n @if (charCount(control); as cc) {\r\n <mat-hint\r\n align=\"end\"\r\n class=\"ui-form-builder__char-count\"\r\n [class.ui-form-builder__char-count--warn]=\"cc.current > cc.max * 0.9\"\r\n [class.ui-form-builder__char-count--error]=\"cc.current > cc.max\"\r\n >\r\n {{ cc.current }} / {{ cc.max }}\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n </div>\r\n}\r\n", styles: ["ui-form-text-field,ui-form-textarea-field,ui-form-number-field,ui-form-select-field,ui-form-radio-field{display:block;width:100%}.ui-form-field-atom{display:block;width:100%}.ui-form-field-atom mat-error,ui-form-text-field mat-error,ui-form-textarea-field mat-error,ui-form-number-field mat-error,ui-form-select-field mat-error{font-size:var(--ui-font-size-xs, 12px);display:flex;flex-direction:column;gap:2px;transform:translateY(-5px)}.ui-form-field-atom .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,.ui-form-field-atom .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,.ui-form-field-atom .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing,ui-form-text-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,ui-form-text-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,ui-form-text-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing,ui-form-textarea-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,ui-form-textarea-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,ui-form-textarea-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing,ui-form-number-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,ui-form-number-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,ui-form-number-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing,ui-form-select-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,ui-form-select-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,ui-form-select-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing{border-color:var(--ui-color-error, #dc2626)!important}.ui-form-field-atom .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label,ui-form-text-field .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label,ui-form-textarea-field .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label,ui-form-number-field .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label,ui-form-select-field .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label{color:var(--ui-color-error, #dc2626)}.ui-form-field-atom mat-hint.ui-form-builder__char-count,ui-form-text-field mat-hint.ui-form-builder__char-count,ui-form-textarea-field mat-hint.ui-form-builder__char-count{font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);padding:var(--ui-spacing-2)}.ui-form-field-atom mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--warn,ui-form-text-field mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--warn,ui-form-textarea-field mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--warn{color:var(--ui-color-warn, #d97706)}.ui-form-field-atom mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--error,ui-form-text-field mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--error,ui-form-textarea-field mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--error{color:var(--ui-color-error, #dc2626);font-weight:var(--ui-font-weight-semibold)}.ui-form-field-atom .ui-form-builder__textarea-wrapper,ui-form-textarea-field .ui-form-builder__textarea-wrapper{position:relative}ui-form-radio-field .ui-form-builder__field-label,.ui-form-field-atom.ui-form-builder__radio-wrapper .ui-form-builder__field-label{display:block;font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);margin-bottom:var(--ui-spacing-4)}ui-form-radio-field .ui-form-builder__required,.ui-form-field-atom.ui-form-builder__radio-wrapper .ui-form-builder__required{color:var(--ui-color-error, #dc2626);margin-left:2px}ui-form-radio-field .ui-form-builder__field-error,.ui-form-field-atom.ui-form-builder__radio-wrapper .ui-form-builder__field-error{margin-top:var(--ui-spacing-1);font-size:var(--ui-font-size-xs);color:var(--ui-color-error, #dc2626);display:flex;flex-direction:column;gap:2px}ui-form-radio-field mat-radio-group,.ui-form-field-atom.ui-form-builder__radio-wrapper mat-radio-group{display:flex;flex-wrap:wrap;gap:var(--ui-spacing-3)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i5.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiFormTextareaFieldComponent, decorators: [{
68
+ type: Component,
69
+ args: [{ selector: 'ui-form-textarea-field', standalone: true, imports: [
70
+ ReactiveFormsModule,
71
+ MatFormFieldModule,
72
+ MatInputModule,
73
+ MatTooltipModule,
74
+ LucideAngularModule,
75
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [{ provide: ErrorStateMatcher, useClass: UiFormErrorStateMatcher }], template: "@if (field && formGroup) {\r\n <div [formGroup]=\"formGroup\" class=\"ui-form-builder__textarea-wrapper\">\r\n <mat-form-field appearance=\"outline\" class=\"ui-form-builder__full-width\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{ effectiveLabel }}</mat-label>\r\n <textarea\r\n matInput\r\n [formControlName]=\"field.key\"\r\n [placeholder]=\"effectivePlaceholder\"\r\n [readonly]=\"isReadonly\"\r\n [rows]=\"rows\"\r\n (blur)=\"onBlur()\"\r\n ></textarea>\r\n @if (field.iconTooltip) {\r\n <button\r\n matSuffix\r\n mat-icon-button\r\n type=\"button\"\r\n [matTooltip]=\"field.iconTooltip.text\"\r\n [attr.aria-label]=\"field.iconTooltip.text\"\r\n >\r\n <lucide-icon [name]=\"field.iconTooltip.icon || 'info'\" [size]=\"18\" />\r\n </button>\r\n }\r\n <mat-error>\r\n @for (err of resolvedErrors(fieldControl); track $index) {\r\n <div>{{ err }}</div>\r\n }\r\n </mat-error>\r\n @if (charCount(fieldControl); as cc) {\r\n <mat-hint\r\n align=\"end\"\r\n class=\"ui-form-builder__char-count\"\r\n [class.ui-form-builder__char-count--warn]=\"cc.current > cc.max * 0.9\"\r\n [class.ui-form-builder__char-count--error]=\"cc.current > cc.max\"\r\n >\r\n {{ cc.current }} / {{ cc.max }}\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n </div>\r\n} @else if (control) {\r\n <div class=\"ui-form-field-atom ui-form-builder__textarea-wrapper\">\r\n <mat-form-field appearance=\"outline\" class=\"ui-form-builder__full-width\" subscriptSizing=\"dynamic\">\r\n @if (effectiveLabel) {\r\n <mat-label>{{ effectiveLabel }}</mat-label>\r\n }\r\n <textarea\r\n matInput\r\n [formControl]=\"control\"\r\n [placeholder]=\"effectivePlaceholder\"\r\n [rows]=\"rows\"\r\n [attr.maxlength]=\"effectiveMaxLength\"\r\n (blur)=\"onBlur()\"\r\n ></textarea>\r\n <mat-error>\r\n @for (err of resolvedErrors(control); track $index) {\r\n <div>{{ err }}</div>\r\n }\r\n </mat-error>\r\n @if (charCount(control); as cc) {\r\n <mat-hint\r\n align=\"end\"\r\n class=\"ui-form-builder__char-count\"\r\n [class.ui-form-builder__char-count--warn]=\"cc.current > cc.max * 0.9\"\r\n [class.ui-form-builder__char-count--error]=\"cc.current > cc.max\"\r\n >\r\n {{ cc.current }} / {{ cc.max }}\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n </div>\r\n}\r\n", styles: ["ui-form-text-field,ui-form-textarea-field,ui-form-number-field,ui-form-select-field,ui-form-radio-field{display:block;width:100%}.ui-form-field-atom{display:block;width:100%}.ui-form-field-atom mat-error,ui-form-text-field mat-error,ui-form-textarea-field mat-error,ui-form-number-field mat-error,ui-form-select-field mat-error{font-size:var(--ui-font-size-xs, 12px);display:flex;flex-direction:column;gap:2px;transform:translateY(-5px)}.ui-form-field-atom .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,.ui-form-field-atom .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,.ui-form-field-atom .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing,ui-form-text-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,ui-form-text-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,ui-form-text-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing,ui-form-textarea-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,ui-form-textarea-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,ui-form-textarea-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing,ui-form-number-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,ui-form-number-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,ui-form-number-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing,ui-form-select-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__leading,ui-form-select-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__notch,ui-form-select-field .mat-mdc-form-field.mat-form-field-invalid .mdc-notched-outline__trailing{border-color:var(--ui-color-error, #dc2626)!important}.ui-form-field-atom .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label,ui-form-text-field .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label,ui-form-textarea-field .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label,ui-form-number-field .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label,ui-form-select-field .mat-mdc-form-field.mat-form-field-invalid .mat-mdc-floating-label{color:var(--ui-color-error, #dc2626)}.ui-form-field-atom mat-hint.ui-form-builder__char-count,ui-form-text-field mat-hint.ui-form-builder__char-count,ui-form-textarea-field mat-hint.ui-form-builder__char-count{font-size:var(--ui-font-size-xs);color:var(--ui-color-text-muted);padding:var(--ui-spacing-2)}.ui-form-field-atom mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--warn,ui-form-text-field mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--warn,ui-form-textarea-field mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--warn{color:var(--ui-color-warn, #d97706)}.ui-form-field-atom mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--error,ui-form-text-field mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--error,ui-form-textarea-field mat-hint.ui-form-builder__char-count.ui-form-builder__char-count--error{color:var(--ui-color-error, #dc2626);font-weight:var(--ui-font-weight-semibold)}.ui-form-field-atom .ui-form-builder__textarea-wrapper,ui-form-textarea-field .ui-form-builder__textarea-wrapper{position:relative}ui-form-radio-field .ui-form-builder__field-label,.ui-form-field-atom.ui-form-builder__radio-wrapper .ui-form-builder__field-label{display:block;font-size:var(--ui-font-size-sm);font-weight:var(--ui-font-weight-medium);color:var(--ui-color-text);margin-bottom:var(--ui-spacing-4)}ui-form-radio-field .ui-form-builder__required,.ui-form-field-atom.ui-form-builder__radio-wrapper .ui-form-builder__required{color:var(--ui-color-error, #dc2626);margin-left:2px}ui-form-radio-field .ui-form-builder__field-error,.ui-form-field-atom.ui-form-builder__radio-wrapper .ui-form-builder__field-error{margin-top:var(--ui-spacing-1);font-size:var(--ui-font-size-xs);color:var(--ui-color-error, #dc2626);display:flex;flex-direction:column;gap:2px}ui-form-radio-field mat-radio-group,.ui-form-field-atom.ui-form-builder__radio-wrapper mat-radio-group{display:flex;flex-wrap:wrap;gap:var(--ui-spacing-3)}\n"] }]
76
+ }], propDecorators: { field: [{
77
+ type: Input
78
+ }], formGroup: [{
79
+ type: Input
80
+ }], readonly: [{
81
+ type: Input
82
+ }], errors: [{
83
+ type: Input
84
+ }], control: [{
85
+ type: Input
86
+ }], label: [{
87
+ type: Input
88
+ }], placeholder: [{
89
+ type: Input
90
+ }], rows: [{
91
+ type: Input
92
+ }], maxLength: [{
93
+ type: Input
94
+ }], validationRules: [{
95
+ type: Input
96
+ }], blurred: [{
97
+ type: Output
98
+ }] } });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10ZXh0YXJlYS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0tYnVpbGRlci9zdWItY29tcG9uZW50cy9mb3JtLWZpZWxkcy9mb3JtLXRleHRhcmVhLWZpZWxkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXVpLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1idWlsZGVyL3N1Yi1jb21wb25lbnRzL2Zvcm0tZmllbGRzL2Zvcm0tdGV4dGFyZWEtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7O0FBSWxGOzs7O0dBSUc7QUFpQkgsTUFBTSxPQUFPLDRCQUE0QjtJQWhCekM7UUFpQm1CLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBSTVELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFvQixJQUFJLENBQUM7UUFLL0IsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUlSLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0tBMEM5QztJQXhDQyxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLElBQUksQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVELCtDQUErQztJQUMvQyxJQUFJLFlBQVk7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDaEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUEyQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQTJCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7K0dBeERVLDRCQUE0QjttR0FBNUIsNEJBQTRCLDRVQUo1QixDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxDQUFDLDBCQ3JDaEYsK21GQXdFQSwreElEM0NJLG1CQUFtQixzaENBQ25CLGtCQUFrQixnbUJBQ2xCLGNBQWMsMFdBQ2QsZ0JBQWdCLDRUQUNoQixtQkFBbUI7OzRGQVFWLDRCQUE0QjtrQkFoQnhDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLG1CQUFtQjtxQkFDcEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksYUFDMUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQzs4QkFPckUsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgaW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSB9IGZyb20gJ2x1Y2lkZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgVWlGb3JtRmllbGRFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLWZpZWxkLWVycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUZvcm1FcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tZXJyb3Itc3RhdGUubWF0Y2hlcic7XHJcbmltcG9ydCB7IFVpRm9ybUZpZWxkRGVzY3JpcHRvciB9IGZyb20gJy4uLy4uL3R5cGVzL2ZpZWxkLnR5cGVzJztcclxuaW1wb3J0IHsgVWlWYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4uLy4uL3R5cGVzL3ZhbGlkYXRpb24udHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIENhbXBvIGF0b21pY28gdGV4dGFyZWEg4oCUIHN0ZXNzbyByZW5kZXJpbmcgZGVsIGZvcm0tYnVpbGRlci5cclxuICpcclxuICogQHNlbGVjdG9yIHVpLWZvcm0tdGV4dGFyZWEtZmllbGRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktZm9ybS10ZXh0YXJlYS1maWVsZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTHVjaWRlQW5ndWxhck1vZHVsZSxcclxuICBdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBFcnJvclN0YXRlTWF0Y2hlciwgdXNlQ2xhc3M6IFVpRm9ybUVycm9yU3RhdGVNYXRjaGVyIH1dLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLXRleHRhcmVhLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vZm9ybS1maWVsZHMuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVaUZvcm1UZXh0YXJlYUZpZWxkQ29tcG9uZW50IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGZpZWxkRXJyb3JTZXJ2aWNlID0gaW5qZWN0KFVpRm9ybUZpZWxkRXJyb3JTZXJ2aWNlKTtcclxuXHJcbiAgQElucHV0KCkgZmllbGQ/OiBVaUZvcm1GaWVsZERlc2NyaXB0b3I7XHJcbiAgQElucHV0KCkgZm9ybUdyb3VwPzogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBjb250cm9sPzogRm9ybUNvbnRyb2w7XHJcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcm93cyA9IDQ7XHJcbiAgQElucHV0KCkgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHZhbGlkYXRpb25SdWxlcz86IFVpVmFsaWRhdGlvblJ1bGVbXTtcclxuXHJcbiAgQE91dHB1dCgpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIGdldCBlZmZlY3RpdmVMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQ/LmxhYmVsID8/IHRoaXMubGFiZWwgPz8gJyc7XHJcbiAgfVxyXG5cclxuICBnZXQgZWZmZWN0aXZlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkPy5wbGFjZWhvbGRlciA/PyB0aGlzLnBsYWNlaG9sZGVyID8/ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUmVhZG9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkb25seSB8fCB0aGlzLmZpZWxkPy5yZWFkb25seSA9PT0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldCBlZmZlY3RpdmVSdWxlcygpOiBVaVZhbGlkYXRpb25SdWxlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQ/LnZhbGlkYXRpb24gPz8gdGhpcy52YWxpZGF0aW9uUnVsZXMgPz8gW107XHJcbiAgfVxyXG5cclxuICAvKiogQ29udHJvbGxvIGRlbCBjYW1wbyBpbiBtb2RhbGl0w6AgYnVpbGRlci4gKi9cclxuICBnZXQgZmllbGRDb250cm9sKCk6IEZvcm1Db250cm9sIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGQgfHwgIXRoaXMuZm9ybUdyb3VwKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGMgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5maWVsZC5rZXkpO1xyXG4gICAgcmV0dXJuIGMgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCA/IGMgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVmZmVjdGl2ZU1heExlbmd0aCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHRoaXMubWF4TGVuZ3RoICE9IG51bGwpIHJldHVybiB0aGlzLm1heExlbmd0aDtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JTZXJ2aWNlLnJlc29sdmVNYXhMZW5ndGgodGhpcy5lZmZlY3RpdmVSdWxlcyk7XHJcbiAgfVxyXG5cclxuICByZXNvbHZlZEVycm9ycyhjb250cm9sOiBGb3JtQ29udHJvbCB8IG51bGwpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAodGhpcy5lcnJvcnMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuZXJyb3JzO1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRFcnJvclNlcnZpY2UuZ2V0RmllbGRFcnJvcnMoY29udHJvbCwgdGhpcy5lZmZlY3RpdmVSdWxlcyk7XHJcbiAgfVxyXG5cclxuICBjaGFyQ291bnQoY29udHJvbDogRm9ybUNvbnRyb2wgfCBudWxsKTogeyBjdXJyZW50OiBudW1iZXI7IG1heDogbnVtYmVyIH0gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JTZXJ2aWNlLmdldENoYXJDb3VudChjb250cm9sLCB0aGlzLmVmZmVjdGl2ZU1heExlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJsdXJyZWQuZW1pdCgpO1xyXG4gIH1cclxufVxyXG4iLCJAaWYgKGZpZWxkICYmIGZvcm1Hcm91cCkge1xyXG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cInVpLWZvcm0tYnVpbGRlcl9fdGV4dGFyZWEtd3JhcHBlclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ1aS1mb3JtLWJ1aWxkZXJfX2Z1bGwtd2lkdGhcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3sgZWZmZWN0aXZlTGFiZWwgfX08L21hdC1sYWJlbD5cclxuICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVmZmVjdGl2ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkb25seVwiXHJcbiAgICAgICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgQGlmIChmaWVsZC5pY29uVG9vbHRpcCkge1xyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIFttYXRUb29sdGlwXT1cImZpZWxkLmljb25Ub29sdGlwLnRleHRcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJmaWVsZC5pY29uVG9vbHRpcC50ZXh0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bHVjaWRlLWljb24gW25hbWVdPVwiZmllbGQuaWNvblRvb2x0aXAuaWNvbiB8fCAnaW5mbydcIiBbc2l6ZV09XCIxOFwiIC8+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIH1cclxuICAgICAgPG1hdC1lcnJvcj5cclxuICAgICAgICBAZm9yIChlcnIgb2YgcmVzb2x2ZWRFcnJvcnMoZmllbGRDb250cm9sKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2Pnt7IGVyciB9fTwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgIEBpZiAoY2hhckNvdW50KGZpZWxkQ29udHJvbCk7IGFzIGNjKSB7XHJcbiAgICAgICAgPG1hdC1oaW50XHJcbiAgICAgICAgICBhbGlnbj1cImVuZFwiXHJcbiAgICAgICAgICBjbGFzcz1cInVpLWZvcm0tYnVpbGRlcl9fY2hhci1jb3VudFwiXHJcbiAgICAgICAgICBbY2xhc3MudWktZm9ybS1idWlsZGVyX19jaGFyLWNvdW50LS13YXJuXT1cImNjLmN1cnJlbnQgPiBjYy5tYXggKiAwLjlcIlxyXG4gICAgICAgICAgW2NsYXNzLnVpLWZvcm0tYnVpbGRlcl9fY2hhci1jb3VudC0tZXJyb3JdPVwiY2MuY3VycmVudCA+IGNjLm1heFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgY2MuY3VycmVudCB9fSAvIHt7IGNjLm1heCB9fVxyXG4gICAgICAgIDwvbWF0LWhpbnQ+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcbn0gQGVsc2UgaWYgKGNvbnRyb2wpIHtcclxuICA8ZGl2IGNsYXNzPVwidWktZm9ybS1maWVsZC1hdG9tIHVpLWZvcm0tYnVpbGRlcl9fdGV4dGFyZWEtd3JhcHBlclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ1aS1mb3JtLWJ1aWxkZXJfX2Z1bGwtd2lkdGhcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XHJcbiAgICAgIEBpZiAoZWZmZWN0aXZlTGFiZWwpIHtcclxuICAgICAgICA8bWF0LWxhYmVsPnt7IGVmZmVjdGl2ZUxhYmVsIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgIH1cclxuICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVmZmVjdGl2ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICBbcm93c109XCJyb3dzXCJcclxuICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiZWZmZWN0aXZlTWF4TGVuZ3RoXCJcclxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgIEBmb3IgKGVyciBvZiByZXNvbHZlZEVycm9ycyhjb250cm9sKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2Pnt7IGVyciB9fTwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgIEBpZiAoY2hhckNvdW50KGNvbnRyb2wpOyBhcyBjYykge1xyXG4gICAgICAgIDxtYXQtaGludFxyXG4gICAgICAgICAgYWxpZ249XCJlbmRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ1aS1mb3JtLWJ1aWxkZXJfX2NoYXItY291bnRcIlxyXG4gICAgICAgICAgW2NsYXNzLnVpLWZvcm0tYnVpbGRlcl9fY2hhci1jb3VudC0td2Fybl09XCJjYy5jdXJyZW50ID4gY2MubWF4ICogMC45XCJcclxuICAgICAgICAgIFtjbGFzcy51aS1mb3JtLWJ1aWxkZXJfX2NoYXItY291bnQtLWVycm9yXT1cImNjLmN1cnJlbnQgPiBjYy5tYXhcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGNjLmN1cnJlbnQgfX0gLyB7eyBjYy5tYXggfX1cclxuICAgICAgICA8L21hdC1oaW50PlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG59XHJcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export { UiFormTextFieldComponent } from './form-text-field.component';
2
+ export { UiFormTextareaFieldComponent } from './form-textarea-field.component';
3
+ export { UiFormNumberFieldComponent } from './form-number-field.component';
4
+ export { UiFormSelectFieldComponent } from './form-select-field.component';
5
+ export { UiFormRadioFieldComponent } from './form-radio-field.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0tYnVpbGRlci9zdWItY29tcG9uZW50cy9mb3JtLWZpZWxkcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFVpRm9ybVRleHRGaWVsZENvbXBvbmVudCB9IGZyb20gJy4vZm9ybS10ZXh0LWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IFVpRm9ybVRleHRhcmVhRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2Zvcm0tdGV4dGFyZWEtZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0IHsgVWlGb3JtTnVtYmVyRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2Zvcm0tbnVtYmVyLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IFVpRm9ybVNlbGVjdEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBVaUZvcm1SYWRpb0ZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLXJhZGlvLWZpZWxkLmNvbXBvbmVudCc7XHJcbiJdfQ==
@@ -0,0 +1,322 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, Input, ViewChild, ViewEncapsulation, forwardRef, inject, } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms';
5
+ import { MatAutocompleteModule, } from '@angular/material/autocomplete';
6
+ import { MatFormFieldModule } from '@angular/material/form-field';
7
+ import { MatInputModule } from '@angular/material/input';
8
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
9
+ import { NgForOf } from '@angular/common';
10
+ import { EMPTY, debounceTime, distinctUntilChanged, switchMap, tap, catchError, map, of } from 'rxjs';
11
+ import { UiNominatimGeocodingService } from '../../services/nominatim-geocoding.service';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/forms";
14
+ import * as i2 from "@angular/material/form-field";
15
+ import * as i3 from "@angular/material/input";
16
+ import * as i4 from "@angular/material/autocomplete";
17
+ import * as i5 from "@angular/material/core";
18
+ import * as i6 from "@angular/material/progress-spinner";
19
+ /**
20
+ * Campo indirizzo con ricerca geocodificata (Nominatim) e selezione atomica da autocomplete.
21
+ * Implementa `ControlValueAccessor`; il valore è {@link UiGeocodedLocationType} o `null`.
22
+ *
23
+ * L'applicazione host deve fornire `provideHttpClient()` (o `HttpClient` equivalente).
24
+ */
25
+ export class UiLocationGeocodedComponent {
26
+ constructor() {
27
+ this.nominatim = inject(UiNominatimGeocodingService);
28
+ this.cdr = inject(ChangeDetectorRef);
29
+ this.destroyRef = inject(DestroyRef);
30
+ this.document = inject(DOCUMENT);
31
+ /** Configurazione ricerca (URL base, debounce, limiti). */
32
+ this.config = {};
33
+ /** Placeholder dell'input. */
34
+ this.placeholder = '';
35
+ /** Etichetta accessibile dell'input (se la label visibile è esterna al componente). */
36
+ this.inputAriaLabel = 'Cerca indirizzo';
37
+ /** `id` HTML dell'input (per associare la label esterna con `for`). */
38
+ this.inputId = '';
39
+ /** Input in sola lettura (testo non modificabile). */
40
+ this.readonly = false;
41
+ /** Testo digitabile e label selezionata (sempre stringa, compatibile con MatAutocomplete). */
42
+ this.searchControl = new FormControl('', { nonNullable: true });
43
+ /** Suggerimenti correnti per il pannello autocomplete. */
44
+ this.suggestions = [];
45
+ /** Ultima query usata per evidenziare i match nel pannello. */
46
+ this.lastQueryForHighlight = '';
47
+ this.panelState = 'idle';
48
+ this._disabled = false;
49
+ this.selected = null;
50
+ /** Evita che la selezione da autocomplete venga trattata come cancellazione del valore. */
51
+ this.selecting = false;
52
+ /** `pointerdown` sul pannello overlay (fase capture): il blur dell'input avviene prima del click; senza questo si azzera il valore. */
53
+ this.pointerDownOnOverlay = false;
54
+ this.resultCache = new Map();
55
+ this.maxCacheEntries = 40;
56
+ this.onChange = () => { };
57
+ this.onTouched = () => { };
58
+ /** Imposta il flag prima del blur quando l'utente preme sul pannello (stesso gesto del click su `mat-option`). */
59
+ this.onDocumentPointerDown = (e) => {
60
+ if (!this.autoTrigger?.panelOpen) {
61
+ return;
62
+ }
63
+ const t = e.target;
64
+ if (!(t instanceof Node)) {
65
+ return;
66
+ }
67
+ if (this.document.querySelector('.cdk-overlay-container')?.contains(t)) {
68
+ this.pointerDownOnOverlay = true;
69
+ }
70
+ };
71
+ }
72
+ /** Disabilita il campo. */
73
+ set disabled(v) {
74
+ this._disabled = v;
75
+ this.syncDisabled();
76
+ }
77
+ get disabled() {
78
+ return this._disabled;
79
+ }
80
+ ngOnInit() {
81
+ const minChars = this.config.minChars ?? 3;
82
+ const debounceMs = this.config.debounceMs ?? 200;
83
+ this.document.addEventListener('pointerdown', this.onDocumentPointerDown, true);
84
+ this.destroyRef.onDestroy(() => {
85
+ this.document.removeEventListener('pointerdown', this.onDocumentPointerDown, true);
86
+ });
87
+ this.searchControl.valueChanges
88
+ .pipe(tap((text) => {
89
+ if (this.selecting) {
90
+ return;
91
+ }
92
+ if (this.selected && text !== this.selected.label) {
93
+ this.selected = null;
94
+ this.onChange(null);
95
+ }
96
+ }), debounceTime(debounceMs), distinctUntilChanged(), switchMap((text) => {
97
+ const t = text.trim();
98
+ if (t.length < minChars) {
99
+ this.suggestions = [];
100
+ this.panelState = 'idle';
101
+ this.lastQueryForHighlight = '';
102
+ this.cdr.markForCheck();
103
+ return EMPTY;
104
+ }
105
+ const cacheKey = t.toLowerCase();
106
+ const cached = this.resultCache.get(cacheKey);
107
+ if (cached) {
108
+ return of({ q: t, items: cached });
109
+ }
110
+ this.panelState = 'loading';
111
+ this.cdr.markForCheck();
112
+ return this.nominatim.search(t, this.config).pipe(tap((items) => this.pushCache(cacheKey, items)), map((items) => ({ q: t, items })), catchError(() => {
113
+ this.panelState = 'error';
114
+ this.suggestions = [];
115
+ this.cdr.markForCheck();
116
+ return EMPTY;
117
+ }));
118
+ }), takeUntilDestroyed(this.destroyRef))
119
+ .subscribe((payload) => {
120
+ this.lastQueryForHighlight = payload.q;
121
+ this.suggestions = payload.items;
122
+ this.panelState = payload.items.length ? 'results' : 'empty';
123
+ this.cdr.markForCheck();
124
+ });
125
+ }
126
+ pushCache(key, items) {
127
+ if (this.resultCache.size >= this.maxCacheEntries) {
128
+ const first = this.resultCache.keys().next().value;
129
+ if (first !== undefined) {
130
+ this.resultCache.delete(first);
131
+ }
132
+ }
133
+ this.resultCache.set(key, items);
134
+ }
135
+ onOptionSelected(event) {
136
+ this.pointerDownOnOverlay = false;
137
+ const opts = event.source.options?.toArray() ?? [];
138
+ const idx = opts.indexOf(event.option);
139
+ let opt = idx >= 0 ? this.suggestions[idx] : undefined;
140
+ if (!opt && typeof event.option.value === 'string') {
141
+ opt = this.suggestions.find((o) => o.label === event.option.value);
142
+ }
143
+ if (!opt) {
144
+ return;
145
+ }
146
+ this.selecting = true;
147
+ this.selected = opt;
148
+ this.searchControl.setValue(opt.label, { emitEvent: false });
149
+ this.onChange(opt);
150
+ this.onTouched();
151
+ setTimeout(() => {
152
+ this.selecting = false;
153
+ }, 0);
154
+ }
155
+ /**
156
+ * Chiusura focus sull'input: differita così `optionSelected` può aggiornare il modello prima di eventuale reset.
157
+ * `pointerDownOnOverlay` copre il caso blur → click sulla lista (relatedTarget spesso null).
158
+ */
159
+ onBlur(event) {
160
+ const next = event.relatedTarget;
161
+ if (next?.closest?.('.cdk-overlay-container')) {
162
+ return;
163
+ }
164
+ const hadPointerOnPanel = this.pointerDownOnOverlay;
165
+ setTimeout(() => {
166
+ this.pointerDownOnOverlay = false;
167
+ if (this.selecting || this.autoTrigger?.panelOpen || hadPointerOnPanel) {
168
+ return;
169
+ }
170
+ const text = this.searchControl.value?.trim() ?? '';
171
+ if (!this.selected) {
172
+ if (text.length > 0) {
173
+ this.searchControl.setValue('', { emitEvent: false });
174
+ }
175
+ this.onChange(null);
176
+ }
177
+ this.onTouched();
178
+ }, 0);
179
+ }
180
+ /**
181
+ * Identità stabile per `@for` sui suggerimenti (evita `??` nel template e problemi di codegen).
182
+ */
183
+ trackSuggestion(opt) {
184
+ return String(opt.placeId ?? opt.label);
185
+ }
186
+ /** Segmenta la label per evidenziazione accessibile (match letterale case-insensitive). */
187
+ highlightParts(label) {
188
+ const q = this.lastQueryForHighlight.trim();
189
+ if (!q) {
190
+ return [{ text: label, highlight: false }];
191
+ }
192
+ const lower = label.toLowerCase();
193
+ const qi = lower.indexOf(q.toLowerCase());
194
+ if (qi < 0) {
195
+ return [{ text: label, highlight: false }];
196
+ }
197
+ const parts = [];
198
+ if (qi > 0) {
199
+ parts.push({ text: label.slice(0, qi), highlight: false });
200
+ }
201
+ parts.push({ text: label.slice(qi, qi + q.length), highlight: true });
202
+ if (qi + q.length < label.length) {
203
+ parts.push({ text: label.slice(qi + q.length), highlight: false });
204
+ }
205
+ return parts;
206
+ }
207
+ /** Messaggio per `aria-live` in base allo stato del pannello. */
208
+ getStatusMessage() {
209
+ switch (this.panelState) {
210
+ case 'loading':
211
+ return 'Ricerca indirizzi in corso';
212
+ case 'results':
213
+ return `${this.suggestions.length} suggerimenti disponibili`;
214
+ case 'empty':
215
+ return 'Nessun risultato per la ricerca';
216
+ case 'error':
217
+ return 'Errore durante la ricerca. Riprova.';
218
+ default:
219
+ return '';
220
+ }
221
+ }
222
+ // ─── ControlValueAccessor ───────────────────────────────────────
223
+ writeValue(value) {
224
+ if (value && typeof value === 'object' && 'latitude' in value) {
225
+ this.selected = this.ensureTerritory(value);
226
+ this.searchControl.setValue(value.label, { emitEvent: false });
227
+ }
228
+ else {
229
+ this.selected = null;
230
+ this.searchControl.setValue('', { emitEvent: false });
231
+ }
232
+ this.cdr.markForCheck();
233
+ }
234
+ registerOnChange(fn) {
235
+ this.onChange = fn;
236
+ }
237
+ registerOnTouched(fn) {
238
+ this.onTouched = fn;
239
+ }
240
+ setDisabledState(isDisabled) {
241
+ this._disabled = isDisabled;
242
+ this.syncDisabled();
243
+ }
244
+ syncDisabled() {
245
+ if (this._disabled) {
246
+ this.searchControl.disable({ emitEvent: false });
247
+ }
248
+ else {
249
+ this.searchControl.enable({ emitEvent: false });
250
+ }
251
+ this.cdr.markForCheck();
252
+ }
253
+ /**
254
+ * Completa `territory` e gli slice `italian` / `foreign` se assenti (payload legacy o altri provider).
255
+ */
256
+ ensureTerritory(v) {
257
+ if (v.territory) {
258
+ return { ...v, territory: v.territory };
259
+ }
260
+ const cc = v.countryCode?.toUpperCase();
261
+ const isItalian = cc === 'IT';
262
+ return {
263
+ ...v,
264
+ territory: isItalian ? 'italian' : 'foreign',
265
+ italian: isItalian
266
+ ? (v.italian ?? {
267
+ comune: v.city,
268
+ provincia: v.province,
269
+ regione: v.region,
270
+ })
271
+ : undefined,
272
+ foreign: !isItalian
273
+ ? (v.foreign ?? {
274
+ locality: v.city,
275
+ adminArea: v.province ?? v.region,
276
+ countryCode: cc,
277
+ })
278
+ : undefined,
279
+ };
280
+ }
281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiLocationGeocodedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
282
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UiLocationGeocodedComponent, isStandalone: true, selector: "ui-location-geocoded", inputs: { config: "config", placeholder: "placeholder", inputAriaLabel: "inputAriaLabel", inputId: "inputId", disabled: "disabled", readonly: "readonly" }, providers: [
283
+ {
284
+ provide: NG_VALUE_ACCESSOR,
285
+ useExisting: forwardRef(() => UiLocationGeocodedComponent),
286
+ multi: true,
287
+ },
288
+ ], viewQueries: [{ propertyName: "autoTrigger", first: true, predicate: ["autoTrigger"], descendants: true }], ngImport: i0, template: "<div class=\"ui-location-geocoded\">\r\n <span class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ getStatusMessage() }}\r\n </span>\r\n\r\n <mat-form-field appearance=\"outline\" class=\"ui-location-geocoded__field\" subscriptSizing=\"dynamic\">\r\n <input\r\n #autoTrigger=\"matAutocompleteTrigger\"\r\n matInput\r\n type=\"text\"\r\n [attr.id]=\"inputId || null\"\r\n [formControl]=\"searchControl\"\r\n [matAutocomplete]=\"auto\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [attr.aria-label]=\"inputAriaLabel\"\r\n [attr.aria-invalid]=\"panelState === 'error'\"\r\n [attr.aria-busy]=\"panelState === 'loading'\"\r\n autocomplete=\"off\"\r\n autocorrect=\"off\"\r\n spellcheck=\"false\"\r\n (blur)=\"onBlur($event)\"\r\n />\r\n\r\n @if (panelState === 'loading') {\r\n <mat-spinner matSuffix class=\"ui-location-geocoded__spinner\" diameter=\"20\" />\r\n }\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n class=\"ui-location-geocoded__panel\"\r\n (optionSelected)=\"onOptionSelected($event)\"\r\n [autoActiveFirstOption]=\"false\"\r\n >\r\n @for (opt of suggestions; track trackSuggestion(opt)) {\r\n <mat-option class=\"ui-location-geocoded__option\" [value]=\"opt.label\">\r\n <span class=\"ui-location-geocoded__option-text\">\r\n <ng-container *ngFor=\"let part of highlightParts(opt.label)\">\r\n <span [class.ui-location-geocoded__match]=\"part.highlight\">{{ part.text }}</span>\r\n </ng-container>\r\n </span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n\r\n @if (panelState !== 'error') {\r\n <mat-hint class=\"ui-location-geocoded__hint\">\r\n @if (config.biasCountry) {\r\n <span class=\"ui-location-geocoded__scope\">\r\n Ambito: solo paese {{ config.biasCountry.toUpperCase() }} \u2014 luoghi in altri paesi non compaiono tra i risultati.\r\n </span>\r\n }\r\n @if (panelState === 'idle') {\r\n Digita almeno {{ config.minChars ?? 3 }} caratteri per cercare.\r\n } @else if (panelState === 'loading') {\r\n Ricerca in corso...\r\n } @else if (panelState === 'empty') {\r\n @if (config.biasCountry) {\r\n Nessun risultato in questo paese. Per cercare fuori da questo paese rimuovi il filtro paese dalla configurazione del campo.\r\n } @else {\r\n Nessun indirizzo trovato. Modifica la ricerca.\r\n }\r\n } @else if (panelState === 'results') {\r\n {{ suggestions.length }} risultati. Usa frecce e Invio per selezionare.\r\n }\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n\r\n @if (panelState === 'error') {\r\n <div class=\"ui-location-geocoded__api-error\" role=\"alert\">\r\n Impossibile contattare il servizio di geocoding. Riprova.\r\n </div>\r\n }\r\n</div>\r\n", styles: [".ui-location-geocoded,.ui-location-geocoded__field{width:100%}.ui-location-geocoded__spinner{margin-right:4px}.ui-location-geocoded__panel{max-height:280px}.ui-location-geocoded__option-text{display:inline;white-space:normal;word-break:break-word}.ui-location-geocoded__match{font-weight:600;text-decoration:underline;text-underline-offset:2px}.ui-location-geocoded__hint{font-size:.75rem}.ui-location-geocoded__scope{display:block;margin-bottom:.35em;font-weight:500}.ui-location-geocoded__api-error{margin-top:4px;font-size:.875rem;color:var(--mat-form-field-error-text-color, #b3261e)}.cdk-visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
289
+ }
290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiLocationGeocodedComponent, decorators: [{
291
+ type: Component,
292
+ args: [{ selector: 'ui-location-geocoded', standalone: true, imports: [
293
+ NgForOf,
294
+ ReactiveFormsModule,
295
+ MatFormFieldModule,
296
+ MatInputModule,
297
+ MatAutocompleteModule,
298
+ MatProgressSpinnerModule,
299
+ ], providers: [
300
+ {
301
+ provide: NG_VALUE_ACCESSOR,
302
+ useExisting: forwardRef(() => UiLocationGeocodedComponent),
303
+ multi: true,
304
+ },
305
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ui-location-geocoded\">\r\n <span class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ getStatusMessage() }}\r\n </span>\r\n\r\n <mat-form-field appearance=\"outline\" class=\"ui-location-geocoded__field\" subscriptSizing=\"dynamic\">\r\n <input\r\n #autoTrigger=\"matAutocompleteTrigger\"\r\n matInput\r\n type=\"text\"\r\n [attr.id]=\"inputId || null\"\r\n [formControl]=\"searchControl\"\r\n [matAutocomplete]=\"auto\"\r\n [placeholder]=\"placeholder\"\r\n [readonly]=\"readonly\"\r\n [attr.aria-label]=\"inputAriaLabel\"\r\n [attr.aria-invalid]=\"panelState === 'error'\"\r\n [attr.aria-busy]=\"panelState === 'loading'\"\r\n autocomplete=\"off\"\r\n autocorrect=\"off\"\r\n spellcheck=\"false\"\r\n (blur)=\"onBlur($event)\"\r\n />\r\n\r\n @if (panelState === 'loading') {\r\n <mat-spinner matSuffix class=\"ui-location-geocoded__spinner\" diameter=\"20\" />\r\n }\r\n\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n class=\"ui-location-geocoded__panel\"\r\n (optionSelected)=\"onOptionSelected($event)\"\r\n [autoActiveFirstOption]=\"false\"\r\n >\r\n @for (opt of suggestions; track trackSuggestion(opt)) {\r\n <mat-option class=\"ui-location-geocoded__option\" [value]=\"opt.label\">\r\n <span class=\"ui-location-geocoded__option-text\">\r\n <ng-container *ngFor=\"let part of highlightParts(opt.label)\">\r\n <span [class.ui-location-geocoded__match]=\"part.highlight\">{{ part.text }}</span>\r\n </ng-container>\r\n </span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n\r\n @if (panelState !== 'error') {\r\n <mat-hint class=\"ui-location-geocoded__hint\">\r\n @if (config.biasCountry) {\r\n <span class=\"ui-location-geocoded__scope\">\r\n Ambito: solo paese {{ config.biasCountry.toUpperCase() }} \u2014 luoghi in altri paesi non compaiono tra i risultati.\r\n </span>\r\n }\r\n @if (panelState === 'idle') {\r\n Digita almeno {{ config.minChars ?? 3 }} caratteri per cercare.\r\n } @else if (panelState === 'loading') {\r\n Ricerca in corso...\r\n } @else if (panelState === 'empty') {\r\n @if (config.biasCountry) {\r\n Nessun risultato in questo paese. Per cercare fuori da questo paese rimuovi il filtro paese dalla configurazione del campo.\r\n } @else {\r\n Nessun indirizzo trovato. Modifica la ricerca.\r\n }\r\n } @else if (panelState === 'results') {\r\n {{ suggestions.length }} risultati. Usa frecce e Invio per selezionare.\r\n }\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n\r\n @if (panelState === 'error') {\r\n <div class=\"ui-location-geocoded__api-error\" role=\"alert\">\r\n Impossibile contattare il servizio di geocoding. Riprova.\r\n </div>\r\n }\r\n</div>\r\n", styles: [".ui-location-geocoded,.ui-location-geocoded__field{width:100%}.ui-location-geocoded__spinner{margin-right:4px}.ui-location-geocoded__panel{max-height:280px}.ui-location-geocoded__option-text{display:inline;white-space:normal;word-break:break-word}.ui-location-geocoded__match{font-weight:600;text-decoration:underline;text-underline-offset:2px}.ui-location-geocoded__hint{font-size:.75rem}.ui-location-geocoded__scope{display:block;margin-bottom:.35em;font-weight:500}.ui-location-geocoded__api-error{margin-top:4px;font-size:.875rem;color:var(--mat-form-field-error-text-color, #b3261e)}.cdk-visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
306
+ }], propDecorators: { config: [{
307
+ type: Input
308
+ }], placeholder: [{
309
+ type: Input
310
+ }], inputAriaLabel: [{
311
+ type: Input
312
+ }], inputId: [{
313
+ type: Input
314
+ }], disabled: [{
315
+ type: Input
316
+ }], readonly: [{
317
+ type: Input
318
+ }], autoTrigger: [{
319
+ type: ViewChild,
320
+ args: ['autoTrigger']
321
+ }] } });
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24tZ2VvY29kZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvc3ViLWNvbXBvbmVudHMvbG9jYXRpb24tZ2VvY29kZWQvbG9jYXRpb24tZ2VvY29kZWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvc3ViLWNvbXBvbmVudHMvbG9jYXRpb24tZ2VvY29kZWQvbG9jYXRpb24tZ2VvY29kZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBRUwsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wscUJBQXFCLEdBR3RCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFB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QUEyQixDQUFDO2dCQUMxRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Ysc0lDL0RILGsvRkEyRUEseXhCRHpCSSxPQUFPLGtIQUNQLG1CQUFtQix5a0JBQ25CLGtCQUFrQixrY0FDbEIsY0FBYywwV0FDZCxxQkFBcUIsdzFCQUNyQix3QkFBd0I7OzRGQWNmLDJCQUEyQjtrQkF2QnZDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxPQUFPO3dCQUNQLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsd0JBQXdCO3FCQUN6QixhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDOzRCQUMxRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOzhCQVd0QyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRzRCLFdBQVc7c0JBQTVDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRGVzdHJveVJlZixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgaW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7XHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxyXG4gIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsXHJcbiAgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcixcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xyXG5pbXBvcnQgeyBOZ0Zvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRU1QVFksIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN3aXRjaE1hcCwgdGFwLCBjYXRjaEVycm9yLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVpTm9taW5hdGltR2VvY29kaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vbWluYXRpbS1nZW9jb2Rpbmcuc2VydmljZSc7XHJcbmltcG9ydCB0eXBlIHtcclxuICBVaUdlb2NvZGVkTG9jYXRpb25JbnB1dCxcclxuICBVaUdlb2NvZGVkTG9jYXRpb25UeXBlLFxyXG4gIFVpTG9jYXRpb25HZW9jb2RlZEZpZWxkQ29uZmlnLFxyXG59IGZyb20gJy4uLy4uL3R5cGVzL2dlb2NvZGVkLWxvY2F0aW9uLnR5cGVzJztcclxuXHJcbi8qKiBTdGF0aSBVSSBwZXIgaGludCBlIG1lc3NhZ2dpIGFjY2Vzc2liaWxpLiAqL1xyXG50eXBlIFVpR2VvY29kZWRQYW5lbFN0YXRlID0gJ2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ3Jlc3VsdHMnIHwgJ2VtcHR5JyB8ICdlcnJvcic7XHJcblxyXG4vKipcclxuICogQ2FtcG8gaW5kaXJpenpvIGNvbiByaWNlcmNhIGdlb2NvZGlmaWNhdGEgKE5vbWluYXRpbSkgZSBzZWxlemlvbmUgYXRvbWljYSBkYSBhdXRvY29tcGxldGUuXHJcbiAqIEltcGxlbWVudGEgYENvbnRyb2xWYWx1ZUFjY2Vzc29yYDsgaWwgdmFsb3JlIMOoIHtAbGluayBVaUdlb2NvZGVkTG9jYXRpb25UeXBlfSBvIGBudWxsYC5cclxuICpcclxuICogTCdhcHBsaWNhemlvbmUgaG9zdCBkZXZlIGZvcm5pcmUgYHByb3ZpZGVIdHRwQ2xpZW50KClgIChvIGBIdHRwQ2xpZW50YCBlcXVpdmFsZW50ZSkuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLWxvY2F0aW9uLWdlb2NvZGVkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE5nRm9yT2YsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFVpTG9jYXRpb25HZW9jb2RlZENvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xvY2F0aW9uLWdlb2NvZGVkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbG9jYXRpb24tZ2VvY29kZWQuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlMb2NhdGlvbkdlb2NvZGVkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBub21pbmF0aW0gPSBpbmplY3QoVWlOb21pbmF0aW1HZW9jb2RpbmdTZXJ2aWNlKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG5cclxuICAvKiogQ29uZmlndXJhemlvbmUgcmljZXJjYSAoVVJMIGJhc2UsIGRlYm91bmNlLCBsaW1pdGkpLiAqL1xyXG4gIEBJbnB1dCgpIGNvbmZpZzogVWlMb2NhdGlvbkdlb2NvZGVkRmllbGRDb25maWcgPSB7fTtcclxuXHJcbiAgLyoqIFBsYWNlaG9sZGVyIGRlbGwnaW5wdXQuICovXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuXHJcbiAgLyoqIEV0aWNoZXR0YSBhY2Nlc3NpYmlsZSBkZWxsJ2lucHV0IChzZSBsYSBsYWJlbCB2aXNpYmlsZSDDqCBlc3Rlcm5hIGFsIGNvbXBvbmVudGUpLiAqL1xyXG4gIEBJbnB1dCgpIGlucHV0QXJpYUxhYmVsID0gJ0NlcmNhIGluZGlyaXp6byc7XHJcblxyXG4gIC8qKiBgaWRgIEhUTUwgZGVsbCdpbnB1dCAocGVyIGFzc29jaWFyZSBsYSBsYWJlbCBlc3Rlcm5hIGNvbiBgZm9yYCkuICovXHJcbiAgQElucHV0KCkgaW5wdXRJZCA9ICcnO1xyXG5cclxuICAvKiogRGlzYWJpbGl0YSBpbCBjYW1wby4gKi9cclxuICBASW5wdXQoKSBzZXQgZGlzYWJsZWQodjogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2O1xyXG4gICAgdGhpcy5zeW5jRGlzYWJsZWQoKTtcclxuICB9XHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqIElucHV0IGluIHNvbGEgbGV0dHVyYSAodGVzdG8gbm9uIG1vZGlmaWNhYmlsZSkuICovXHJcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuXHJcbiAgLyoqIFRyaWdnZXIgTWF0ZXJpYWw6IHNlcnZlIGEgbm9uIHRyYXR0YXJlIGlsIGJsdXIgdmVyc28gaWwgcGFubmVsbG8gY29tZSB1c2NpdGEgc2VuemEgc2VsZXppb25lLiAqL1xyXG4gIEBWaWV3Q2hpbGQoJ2F1dG9UcmlnZ2VyJykgcHJpdmF0ZSBhdXRvVHJpZ2dlcj86IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XHJcblxyXG4gIC8qKiBUZXN0byBkaWdpdGFiaWxlIGUgbGFiZWwgc2VsZXppb25hdGEgKHNlbXByZSBzdHJpbmdhLCBjb21wYXRpYmlsZSBjb24gTWF0QXV0b2NvbXBsZXRlKS4gKi9cclxuICByZWFkb25seSBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcblxyXG4gIC8qKiBTdWdnZXJpbWVudGkgY29ycmVudGkgcGVyIGlsIHBhbm5lbGxvIGF1dG9jb21wbGV0ZS4gKi9cclxuICBzdWdnZXN0aW9uczogVWlHZW9jb2RlZExvY2F0aW9uVHlwZVtdID0gW107XHJcblxyXG4gIC8qKiBVbHRpbWEgcXVlcnkgdXNhdGEgcGVyIGV2aWRlbnppYXJlIGkgbWF0Y2ggbmVsIHBhbm5lbGxvLiAqL1xyXG4gIGxhc3RRdWVyeUZvckhpZ2hsaWdodCA9ICcnO1xyXG5cclxuICBwYW5lbFN0YXRlOiBVaUdlb2NvZGVkUGFuZWxTdGF0ZSA9ICdpZGxlJztcclxuXHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHNlbGVjdGVkOiBVaUdlb2NvZGVkTG9jYXRpb25UeXBlIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqIEV2aXRhIGNoZSBsYSBzZWxlemlvbmUgZGEgYXV0b2NvbXBsZXRlIHZlbmdhIHRyYXR0YXRhIGNvbWUgY2FuY2VsbGF6aW9uZSBkZWwgdmFsb3JlLiAqL1xyXG4gIHByaXZhdGUgc2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgLyoqIGBwb2ludGVyZG93bmAgc3VsIHBhbm5lbGxvIG92ZXJsYXkgKGZhc2UgY2FwdHVyZSk6IGlsIGJsdXIgZGVsbCdpbnB1dCBhdnZpZW5lIHByaW1hIGRlbCBjbGljazsgc2VuemEgcXVlc3RvIHNpIGF6emVyYSBpbCB2YWxvcmUuICovXHJcbiAgcHJpdmF0ZSBwb2ludGVyRG93bk9uT3ZlcmxheSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzdWx0Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVWlHZW9jb2RlZExvY2F0aW9uVHlwZVtdPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4Q2FjaGVFbnRyaWVzID0gNDA7XHJcblxyXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2OiBVaUdlb2NvZGVkTG9jYXRpb25UeXBlIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWluQ2hhcnMgPSB0aGlzLmNvbmZpZy5taW5DaGFycyA/PyAzO1xyXG4gICAgY29uc3QgZGVib3VuY2VNcyA9IHRoaXMuY29uZmlnLmRlYm91bmNlTXMgPz8gMjAwO1xyXG5cclxuICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCB0aGlzLm9uRG9jdW1lbnRQb2ludGVyRG93biwgdHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcclxuICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIHRoaXMub25Eb2N1bWVudFBvaW50ZXJEb3duLCB0cnVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFwKCh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQgJiYgdGV4dCAhPT0gdGhpcy5zZWxlY3RlZC5sYWJlbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoZGVib3VuY2VNcyksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICBzd2l0Y2hNYXAoKHRleHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHQgPSB0ZXh0LnRyaW0oKTtcclxuICAgICAgICAgIGlmICh0Lmxlbmd0aCA8IG1pbkNoYXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5wYW5lbFN0YXRlID0gJ2lkbGUnO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RRdWVyeUZvckhpZ2hsaWdodCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnJlc3VsdENhY2hlLmdldChjYWNoZUtleSk7XHJcbiAgICAgICAgICBpZiAoY2FjaGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih7IHE6IHQsIGl0ZW1zOiBjYWNoZWQgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBhbmVsU3RhdGUgPSAnbG9hZGluZyc7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLm5vbWluYXRpbS5zZWFyY2godCwgdGhpcy5jb25maWcpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCgoaXRlbXMpID0+IHRoaXMucHVzaENhY2hlKGNhY2hlS2V5LCBpdGVtcykpLFxyXG4gICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiAoeyBxOiB0LCBpdGVtcyB9KSksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFuZWxTdGF0ZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHBheWxvYWQpID0+IHtcclxuICAgICAgICB0aGlzLmxhc3RRdWVyeUZvckhpZ2hsaWdodCA9IHBheWxvYWQucTtcclxuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gcGF5bG9hZC5pdGVtcztcclxuICAgICAgICB0aGlzLnBhbmVsU3RhdGUgPSBwYXlsb2FkLml0ZW1zLmxlbmd0aCA/ICdyZXN1bHRzJyA6ICdlbXB0eSc7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwdXNoQ2FjaGUoa2V5OiBzdHJpbmcsIGl0ZW1zOiBVaUdlb2NvZGVkTG9jYXRpb25UeXBlW10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlc3VsdENhY2hlLnNpemUgPj0gdGhpcy5tYXhDYWNoZUVudHJpZXMpIHtcclxuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLnJlc3VsdENhY2hlLmtleXMoKS5uZXh0KCkudmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgICBpZiAoZmlyc3QgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMucmVzdWx0Q2FjaGUuZGVsZXRlKGZpcnN0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN1bHRDYWNoZS5zZXQoa2V5LCBpdGVtcyk7XHJcbiAgfVxyXG5cclxuICBvbk9wdGlvblNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnBvaW50ZXJEb3duT25PdmVybGF5ID0gZmFsc2U7XHJcbiAgICBjb25zdCBvcHRzID0gZXZlbnQuc291cmNlLm9wdGlvbnM/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIGNvbnN0IGlkeCA9IG9wdHMuaW5kZXhPZihldmVudC5vcHRpb24pO1xyXG4gICAgbGV0IG9wdCA9IGlkeCA+PSAwID8gdGhpcy5zdWdnZXN0aW9uc1tpZHhdIDogdW5kZWZpbmVkO1xyXG4gICAgaWYgKCFvcHQgJiYgdHlwZW9mIGV2ZW50Lm9wdGlvbi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgb3B0ID0gdGhpcy5zdWdnZXN0aW9ucy5maW5kKChvKSA9PiBvLmxhYmVsID09PSBldmVudC5vcHRpb24udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFvcHQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IG9wdDtcclxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShvcHQubGFiZWwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMub25DaGFuZ2Uob3B0KTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RpbmcgPSBmYWxzZTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpdXN1cmEgZm9jdXMgc3VsbCdpbnB1dDogZGlmZmVyaXRhIGNvc8OsIGBvcHRpb25TZWxlY3RlZGAgcHXDsiBhZ2dpb3JuYXJlIGlsIG1vZGVsbG8gcHJpbWEgZGkgZXZlbnR1YWxlIHJlc2V0LlxyXG4gICAqIGBwb2ludGVyRG93bk9uT3ZlcmxheWAgY29wcmUgaWwgY2FzbyBibHVyIOKGkiBjbGljayBzdWxsYSBsaXN0YSAocmVsYXRlZFRhcmdldCBzcGVzc28gbnVsbCkuXHJcbiAgICovXHJcbiAgb25CbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXh0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICBpZiAobmV4dD8uY2xvc2VzdD8uKCcuY2RrLW92ZXJsYXktY29udGFpbmVyJykpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFkUG9pbnRlck9uUGFuZWwgPSB0aGlzLnBvaW50ZXJEb3duT25PdmVybGF5O1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucG9pbnRlckRvd25Pbk92ZXJsYXkgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW5nIHx8IHRoaXMuYXV0b1RyaWdnZXI/LnBhbmVsT3BlbiB8fCBoYWRQb2ludGVyT25QYW5lbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlPy50cmltKCkgPz8gJyc7XHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIC8qKiBJbXBvc3RhIGlsIGZsYWcgcHJpbWEgZGVsIGJsdXIgcXVhbmRvIGwndXRlbnRlIHByZW1lIHN1bCBwYW5uZWxsbyAoc3Rlc3NvIGdlc3RvIGRlbCBjbGljayBzdSBgbWF0LW9wdGlvbmApLiAqL1xyXG4gIHByaXZhdGUgb25Eb2N1bWVudFBvaW50ZXJEb3duID0gKGU6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmF1dG9UcmlnZ2VyPy5wYW5lbE9wZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdCA9IGUudGFyZ2V0O1xyXG4gICAgaWYgKCEodCBpbnN0YW5jZW9mIE5vZGUpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1jb250YWluZXInKT8uY29udGFpbnModCkpIHtcclxuICAgICAgdGhpcy5wb2ludGVyRG93bk9uT3ZlcmxheSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWRlbnRpdMOgIHN0YWJpbGUgcGVyIGBAZm9yYCBzdWkgc3VnZ2VyaW1lbnRpIChldml0YSBgPz9gIG5lbCB0ZW1wbGF0ZSBlIHByb2JsZW1pIGRpIGNvZGVnZW4pLlxyXG4gICAqL1xyXG4gIHRyYWNrU3VnZ2VzdGlvbihvcHQ6IFVpR2VvY29kZWRMb2NhdGlvblR5cGUpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0cmluZyhvcHQucGxhY2VJZCA/PyBvcHQubGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNlZ21lbnRhIGxhIGxhYmVsIHBlciBldmlkZW56aWF6aW9uZSBhY2Nlc3NpYmlsZSAobWF0Y2ggbGV0dGVyYWxlIGNhc2UtaW5zZW5zaXRpdmUpLiAqL1xyXG4gIGhpZ2hsaWdodFBhcnRzKGxhYmVsOiBzdHJpbmcpOiB7IHRleHQ6IHN0cmluZzsgaGlnaGxpZ2h0OiBib29sZWFuIH1bXSB7XHJcbiAgICBjb25zdCBxID0gdGhpcy5sYXN0UXVlcnlGb3JIaWdobGlnaHQudHJpbSgpO1xyXG4gICAgaWYgKCFxKSB7XHJcbiAgICAgIHJldHVybiBbeyB0ZXh0OiBsYWJlbCwgaGlnaGxpZ2h0OiBmYWxzZSB9XTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxvd2VyID0gbGFiZWwudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IHFpID0gbG93ZXIuaW5kZXhPZihxLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgaWYgKHFpIDwgMCkge1xyXG4gICAgICByZXR1cm4gW3sgdGV4dDogbGFiZWwsIGhpZ2hsaWdodDogZmFsc2UgfV07XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYXJ0czogeyB0ZXh0OiBzdHJpbmc7IGhpZ2hsaWdodDogYm9vbGVhbiB9W10gPSBbXTtcclxuICAgIGlmIChxaSA+IDApIHtcclxuICAgICAgcGFydHMucHVzaCh7IHRleHQ6IGxhYmVsLnNsaWNlKDAsIHFpKSwgaGlnaGxpZ2h0OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIHBhcnRzLnB1c2goeyB0ZXh0OiBsYWJlbC5zbGljZShxaSwgcWkgKyBxLmxlbmd0aCksIGhpZ2hsaWdodDogdHJ1ZSB9KTtcclxuICAgIGlmIChxaSArIHEubGVuZ3RoIDwgbGFiZWwubGVuZ3RoKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goeyB0ZXh0OiBsYWJlbC5zbGljZShxaSArIHEubGVuZ3RoKSwgaGlnaGxpZ2h0OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJ0cztcclxuICB9XHJcblxyXG4gIC8qKiBNZXNzYWdnaW8gcGVyIGBhcmlhLWxpdmVgIGluIGJhc2UgYWxsbyBzdGF0byBkZWwgcGFubmVsbG8uICovXHJcbiAgZ2V0U3RhdHVzTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLnBhbmVsU3RhdGUpIHtcclxuICAgICAgY2FzZSAnbG9hZGluZyc6XHJcbiAgICAgICAgcmV0dXJuICdSaWNlcmNhIGluZGlyaXp6aSBpbiBjb3Jzbyc7XHJcbiAgICAgIGNhc2UgJ3Jlc3VsdHMnOlxyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aH0gc3VnZ2VyaW1lbnRpIGRpc3BvbmliaWxpYDtcclxuICAgICAgY2FzZSAnZW1wdHknOlxyXG4gICAgICAgIHJldHVybiAnTmVzc3VuIHJpc3VsdGF0byBwZXIgbGEgcmljZXJjYSc7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzpcclxuICAgICAgICByZXR1cm4gJ0Vycm9yZSBkdXJhbnRlIGxhIHJpY2VyY2EuIFJpcHJvdmEuJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ29udHJvbFZhbHVlQWNjZXNzb3Ig4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IFVpR2VvY29kZWRMb2NhdGlvbklucHV0IHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2xhdGl0dWRlJyBpbiB2YWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5lbnN1cmVUZXJyaXRvcnkodmFsdWUpO1xyXG4gICAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUodmFsdWUubGFiZWwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHY6IFVpR2VvY29kZWRMb2NhdGlvblR5cGUgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgdGhpcy5zeW5jRGlzYWJsZWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY0Rpc2FibGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wbGV0YSBgdGVycml0b3J5YCBlIGdsaSBzbGljZSBgaXRhbGlhbmAgLyBgZm9yZWlnbmAgc2UgYXNzZW50aSAocGF5bG9hZCBsZWdhY3kgbyBhbHRyaSBwcm92aWRlcikuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbnN1cmVUZXJyaXRvcnkodjogVWlHZW9jb2RlZExvY2F0aW9uSW5wdXQpOiBVaUdlb2NvZGVkTG9jYXRpb25UeXBlIHtcclxuICAgIGlmICh2LnRlcnJpdG9yeSkge1xyXG4gICAgICByZXR1cm4geyAuLi52LCB0ZXJyaXRvcnk6IHYudGVycml0b3J5IH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYyA9IHYuY291bnRyeUNvZGU/LnRvVXBwZXJDYXNlKCk7XHJcbiAgICBjb25zdCBpc0l0YWxpYW4gPSBjYyA9PT0gJ0lUJztcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnYsXHJcbiAgICAgIHRlcnJpdG9yeTogaXNJdGFsaWFuID8gJ2l0YWxpYW4nIDogJ2ZvcmVpZ24nLFxyXG4gICAgICBpdGFsaWFuOiBpc0l0YWxpYW5cclxuICAgICAgICA/ICh2Lml0YWxpYW4gPz8ge1xyXG4gICAgICAgICAgICBjb211bmU6IHYuY2l0eSxcclxuICAgICAgICAgICAgcHJvdmluY2lhOiB2LnByb3ZpbmNlLFxyXG4gICAgICAgICAgICByZWdpb25lOiB2LnJlZ2lvbixcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgIGZvcmVpZ246ICFpc0l0YWxpYW5cclxuICAgICAgICA/ICh2LmZvcmVpZ24gPz8ge1xyXG4gICAgICAgICAgICBsb2NhbGl0eTogdi5jaXR5LFxyXG4gICAgICAgICAgICBhZG1pbkFyZWE6IHYucHJvdmluY2UgPz8gdi5yZWdpb24sXHJcbiAgICAgICAgICAgIGNvdW50cnlDb2RlOiBjYyxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidWktbG9jYXRpb24tZ2VvY29kZWRcIj5cclxuICA8c3BhbiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCI+XHJcbiAgICB7eyBnZXRTdGF0dXNNZXNzYWdlKCkgfX1cclxuICA8L3NwYW4+XHJcblxyXG4gIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidWktbG9jYXRpb24tZ2VvY29kZWRfX2ZpZWxkXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgICNhdXRvVHJpZ2dlcj1cIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXJcIlxyXG4gICAgICBtYXRJbnB1dFxyXG4gICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgIFthdHRyLmlkXT1cImlucHV0SWQgfHwgbnVsbFwiXHJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcclxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpbnB1dEFyaWFMYWJlbFwiXHJcbiAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJwYW5lbFN0YXRlID09PSAnZXJyb3InXCJcclxuICAgICAgW2F0dHIuYXJpYS1idXN5XT1cInBhbmVsU3RhdGUgPT09ICdsb2FkaW5nJ1wiXHJcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcclxuICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcclxuICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxyXG4gICAgLz5cclxuXHJcbiAgICBAaWYgKHBhbmVsU3RhdGUgPT09ICdsb2FkaW5nJykge1xyXG4gICAgICA8bWF0LXNwaW5uZXIgbWF0U3VmZml4IGNsYXNzPVwidWktbG9jYXRpb24tZ2VvY29kZWRfX3NwaW5uZXJcIiBkaWFtZXRlcj1cIjIwXCIgLz5cclxuICAgIH1cclxuXHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZVxyXG4gICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgIGNsYXNzPVwidWktbG9jYXRpb24tZ2VvY29kZWRfX3BhbmVsXCJcclxuICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIm9uT3B0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgIFthdXRvQWN0aXZlRmlyc3RPcHRpb25dPVwiZmFsc2VcIlxyXG4gICAgPlxyXG4gICAgICBAZm9yIChvcHQgb2Ygc3VnZ2VzdGlvbnM7IHRyYWNrIHRyYWNrU3VnZ2VzdGlvbihvcHQpKSB7XHJcbiAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJ1aS1sb2NhdGlvbi1nZW9jb2RlZF9fb3B0aW9uXCIgW3ZhbHVlXT1cIm9wdC5sYWJlbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aS1sb2NhdGlvbi1nZW9jb2RlZF9fb3B0aW9uLXRleHRcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFydCBvZiBoaWdobGlnaHRQYXJ0cyhvcHQubGFiZWwpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLnVpLWxvY2F0aW9uLWdlb2NvZGVkX19tYXRjaF09XCJwYXJ0LmhpZ2hsaWdodFwiPnt7IHBhcnQudGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcblxyXG4gICAgQGlmIChwYW5lbFN0YXRlICE9PSAnZXJyb3InKSB7XHJcbiAgICAgIDxtYXQtaGludCBjbGFzcz1cInVpLWxvY2F0aW9uLWdlb2NvZGVkX19oaW50XCI+XHJcbiAgICAgICAgQGlmIChjb25maWcuYmlhc0NvdW50cnkpIHtcclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidWktbG9jYXRpb24tZ2VvY29kZWRfX3Njb3BlXCI+XHJcbiAgICAgICAgICAgIEFtYml0bzogc29sbyBwYWVzZSB7eyBjb25maWcuYmlhc0NvdW50cnkudG9VcHBlckNhc2UoKSB9fSDigJQgbHVvZ2hpIGluIGFsdHJpIHBhZXNpIG5vbiBjb21wYWlvbm8gdHJhIGkgcmlzdWx0YXRpLlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYgKHBhbmVsU3RhdGUgPT09ICdpZGxlJykge1xyXG4gICAgICAgICAgRGlnaXRhIGFsbWVubyB7eyBjb25maWcubWluQ2hhcnMgPz8gMyB9fSBjYXJhdHRlcmkgcGVyIGNlcmNhcmUuXHJcbiAgICAgICAgfSBAZWxzZSBpZiAocGFuZWxTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XHJcbiAgICAgICAgICBSaWNlcmNhIGluIGNvcnNvLi4uXHJcbiAgICAgICAgfSBAZWxzZSBpZiAocGFuZWxTdGF0ZSA9PT0gJ2VtcHR5Jykge1xyXG4gICAgICAgICAgQGlmIChjb25maWcuYmlhc0NvdW50cnkpIHtcclxuICAgICAgICAgICAgTmVzc3VuIHJpc3VsdGF0byBpbiBxdWVzdG8gcGFlc2UuIFBlciBjZXJjYXJlIGZ1b3JpIGRhIHF1ZXN0byBwYWVzZSByaW11b3ZpIGlsIGZpbHRybyBwYWVzZSBkYWxsYSBjb25maWd1cmF6aW9uZSBkZWwgY2FtcG8uXHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgTmVzc3VuIGluZGlyaXp6byB0cm92YXRvLiBNb2RpZmljYSBsYSByaWNlcmNhLlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gQGVsc2UgaWYgKHBhbmVsU3RhdGUgPT09ICdyZXN1bHRzJykge1xyXG4gICAgICAgICAge3sgc3VnZ2VzdGlvbnMubGVuZ3RoIH19IHJpc3VsdGF0aS4gVXNhIGZyZWNjZSBlIEludmlvIHBlciBzZWxlemlvbmFyZS5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWhpbnQ+XHJcbiAgICB9XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgQGlmIChwYW5lbFN0YXRlID09PSAnZXJyb3InKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwidWktbG9jYXRpb24tZ2VvY29kZWRfX2FwaS1lcnJvclwiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICBJbXBvc3NpYmlsZSBjb250YXR0YXJlIGlsIHNlcnZpemlvIGRpIGdlb2NvZGluZy4gUmlwcm92YS5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==