@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,381 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { parse, format, startOfDay, startOfMonth, addDays, addMonths, addYears, addWeeks, isAfter, isBefore, isEqual, isValid as isDateValid, } from 'date-fns';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./form-condition.service";
6
+ /**
7
+ * Servizio per la creazione e gestione dei validatori Angular
8
+ * basati sulle regole dichiarative dello schema del form.
9
+ *
10
+ * Supporta validazioni standard, cross-field, date con offset,
11
+ * file e validatori condizionali.
12
+ *
13
+ * @providedIn 'root'
14
+ */
15
+ export class UiFormValidationService {
16
+ constructor(conditionService) {
17
+ this.conditionService = conditionService;
18
+ }
19
+ // ─── Creazione validatori ──────────────────────────────────────
20
+ /** Crea un array di validatori Angular dalle regole di validazione. */
21
+ createValidators(rules) {
22
+ if (!rules?.length)
23
+ return [];
24
+ return rules.map((r) => this.createValidator(r)).filter((v) => v !== null);
25
+ }
26
+ /**
27
+ * Crea validatori con supporto condizionale.
28
+ * Le regole con `conditions` vengono applicate solo se le condizioni sono soddisfatte.
29
+ */
30
+ createConditionalValidators(rules, formData) {
31
+ if (!rules?.length)
32
+ return [];
33
+ const validators = [];
34
+ for (const rule of rules) {
35
+ if (rule.conditions?.length) {
36
+ const shouldApply = this.conditionService.evaluateConditions(rule.conditions, formData);
37
+ if (!shouldApply)
38
+ continue;
39
+ }
40
+ const v = this.createValidator(rule);
41
+ if (v)
42
+ validators.push(v);
43
+ }
44
+ return validators;
45
+ }
46
+ /**
47
+ * Aggiorna i validatori di un campo in base allo stato corrente del form.
48
+ * Usato per ricalcolare validazioni condizionali quando i dati cambiano.
49
+ */
50
+ updateFieldValidators(control, rules, formData) {
51
+ if (!rules?.length) {
52
+ control.clearValidators();
53
+ }
54
+ else {
55
+ const validators = this.createConditionalValidators(rules, formData);
56
+ control.setValidators(validators);
57
+ }
58
+ control.updateValueAndValidity({ emitEvent: false });
59
+ }
60
+ // ─── Utility pubbliche ─────────────────────────────────────────
61
+ /** Verifica se un campo dovrebbe mostrare gli errori. */
62
+ shouldShowFieldErrors(control) {
63
+ return control.invalid && (control.dirty || control.touched);
64
+ }
65
+ /** Restituisce i campi correlati da cross-field validation. */
66
+ getCrossFieldRelatedFields(fieldKey, allRules) {
67
+ const related = [];
68
+ for (const [key, rules] of Object.entries(allRules)) {
69
+ if (key === fieldKey)
70
+ continue;
71
+ for (const rule of rules) {
72
+ if (rule.type === 'crossField' && rule.crossField?.targetField === fieldKey) {
73
+ related.push(key);
74
+ }
75
+ }
76
+ }
77
+ return related;
78
+ }
79
+ /** Verifica se un campo ha validazioni cross-field che lo referenziano. */
80
+ hasCrossFieldValidations(fieldKey, allRules) {
81
+ return this.getCrossFieldRelatedFields(fieldKey, allRules).length > 0;
82
+ }
83
+ /** Formatta la dimensione del file in una stringa leggibile. */
84
+ formatFileSize(bytes) {
85
+ if (bytes === 0)
86
+ return '0 B';
87
+ const k = 1024;
88
+ const sizes = ['B', 'KB', 'MB', 'GB'];
89
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
90
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
91
+ }
92
+ // ─── Factory validatori ────────────────────────────────────────
93
+ createValidator(rule) {
94
+ switch (rule.type) {
95
+ case 'required':
96
+ return Validators.required;
97
+ case 'email':
98
+ return Validators.email;
99
+ case 'min':
100
+ return Validators.min(rule.value);
101
+ case 'max':
102
+ return Validators.max(rule.value);
103
+ case 'minLength':
104
+ return Validators.minLength(rule.value);
105
+ case 'maxLength':
106
+ return Validators.maxLength(rule.value);
107
+ case 'pattern':
108
+ return Validators.pattern(rule.value);
109
+ case 'custom':
110
+ return rule.validator || null;
111
+ case 'crossField':
112
+ return rule.crossField ? this.createCrossFieldValidator(rule.crossField) : null;
113
+ case 'date-min':
114
+ return this.createDateMinValidator(rule.value, rule.offset);
115
+ case 'date-max':
116
+ return this.createDateMaxValidator(rule.value, rule.offset);
117
+ case 'fileSize':
118
+ return this.createFileSizeValidator(rule.value);
119
+ case 'fileType':
120
+ return this.createFileTypeValidator(rule.value);
121
+ case 'fileCount':
122
+ return this.createFileCountValidator(rule.value);
123
+ default:
124
+ return null;
125
+ }
126
+ }
127
+ // ─── Cross-field ───────────────────────────────────────────────
128
+ createCrossFieldValidator(config) {
129
+ return (control) => {
130
+ if (!control.parent || !config.targetField)
131
+ return null;
132
+ const targetControl = control.parent.get(config.targetField);
133
+ if (!targetControl)
134
+ return null;
135
+ const sourceValue = control.value;
136
+ const targetValue = targetControl.value;
137
+ if (sourceValue == null || targetValue == null || sourceValue === '' || targetValue === '') {
138
+ return null;
139
+ }
140
+ let isValid = false;
141
+ if (config.dataType === 'date') {
142
+ isValid = this.validateDateComparison(sourceValue, targetValue, config.operator, config.isMonthYear);
143
+ }
144
+ else {
145
+ isValid = this.validateNumberComparison(sourceValue, targetValue, config.operator);
146
+ }
147
+ return isValid
148
+ ? null
149
+ : {
150
+ crossField: {
151
+ actualValue: sourceValue,
152
+ requiredComparison: config.operator,
153
+ comparedValue: targetValue,
154
+ targetField: config.targetField,
155
+ },
156
+ };
157
+ };
158
+ }
159
+ /** Confronto date con date-fns. */
160
+ validateDateComparison(sourceValue, targetValue, operator, isMonthYear) {
161
+ const normalize = isMonthYear ? startOfMonth : startOfDay;
162
+ const sourceDate = normalize(new Date(sourceValue));
163
+ const targetDate = normalize(new Date(targetValue));
164
+ if (!isDateValid(sourceDate) || !isDateValid(targetDate))
165
+ return false;
166
+ switch (operator) {
167
+ case 'greater_than':
168
+ return isAfter(sourceDate, targetDate);
169
+ case 'greater_equal':
170
+ return isAfter(sourceDate, targetDate) || isEqual(sourceDate, targetDate);
171
+ case 'less_than':
172
+ return isBefore(sourceDate, targetDate);
173
+ case 'less_equal':
174
+ return isBefore(sourceDate, targetDate) || isEqual(sourceDate, targetDate);
175
+ case 'not_equal':
176
+ return !isEqual(sourceDate, targetDate);
177
+ default:
178
+ return false;
179
+ }
180
+ }
181
+ /** Confronto numerico. */
182
+ validateNumberComparison(sourceValue, targetValue, operator) {
183
+ const src = Number(sourceValue);
184
+ const tgt = Number(targetValue);
185
+ if (isNaN(src) || isNaN(tgt))
186
+ return false;
187
+ switch (operator) {
188
+ case 'greater_than':
189
+ return src > tgt;
190
+ case 'greater_equal':
191
+ return src >= tgt;
192
+ case 'less_than':
193
+ return src < tgt;
194
+ case 'less_equal':
195
+ return src <= tgt;
196
+ case 'not_equal':
197
+ return src !== tgt;
198
+ default:
199
+ return false;
200
+ }
201
+ }
202
+ // ─── Date min/max (con keyword e offset) ───────────────────────
203
+ createDateMinValidator(value, offset) {
204
+ return (control) => {
205
+ if (!control.value)
206
+ return null;
207
+ const refDate = this.parseReferenceDate(value, offset);
208
+ if (!refDate)
209
+ return null;
210
+ const inputDate = startOfDay(new Date(control.value));
211
+ if (!isDateValid(inputDate)) {
212
+ return { 'date-min': { message: 'Data non valida', referenceDate: this.formatRefDate(refDate) } };
213
+ }
214
+ if (isBefore(inputDate, refDate)) {
215
+ return {
216
+ 'date-min': {
217
+ message: `La data deve essere successiva o uguale a ${this.formatRefDate(refDate)}`,
218
+ referenceDate: this.formatRefDate(refDate),
219
+ inputDate: format(inputDate, 'dd/MM/yyyy'),
220
+ },
221
+ };
222
+ }
223
+ return null;
224
+ };
225
+ }
226
+ createDateMaxValidator(value, offset) {
227
+ return (control) => {
228
+ if (!control.value)
229
+ return null;
230
+ const refDate = this.parseReferenceDate(value, offset);
231
+ if (!refDate)
232
+ return null;
233
+ const inputDate = startOfDay(new Date(control.value));
234
+ if (!isDateValid(inputDate)) {
235
+ return { 'date-max': { message: 'Data non valida', referenceDate: this.formatRefDate(refDate) } };
236
+ }
237
+ if (isAfter(inputDate, refDate)) {
238
+ return {
239
+ 'date-max': {
240
+ message: `La data deve essere precedente o uguale a ${this.formatRefDate(refDate)}`,
241
+ referenceDate: this.formatRefDate(refDate),
242
+ inputDate: format(inputDate, 'dd/MM/yyyy'),
243
+ },
244
+ };
245
+ }
246
+ return null;
247
+ };
248
+ }
249
+ /**
250
+ * Parsa una data di riferimento da keyword o stringa DD/MM/YYYY
251
+ * e applica un eventuale offset temporale.
252
+ */
253
+ parseReferenceDate(value, offset) {
254
+ const today = startOfDay(new Date());
255
+ let date;
256
+ switch (value?.toLowerCase().trim()) {
257
+ case 'today':
258
+ case 'oggi':
259
+ date = today;
260
+ break;
261
+ case 'tomorrow':
262
+ case 'domani':
263
+ date = addDays(today, 1);
264
+ break;
265
+ case 'yesterday':
266
+ case 'ieri':
267
+ date = addDays(today, -1);
268
+ break;
269
+ default: {
270
+ // Prova DD/MM/YYYY
271
+ const parsed = parse(value, 'dd/MM/yyyy', new Date());
272
+ if (isDateValid(parsed)) {
273
+ date = startOfDay(parsed);
274
+ }
275
+ else {
276
+ // Prova YYYY-MM-DD (ISO)
277
+ const isoDate = new Date(value);
278
+ if (isDateValid(isoDate)) {
279
+ date = startOfDay(isoDate);
280
+ }
281
+ else {
282
+ return null;
283
+ }
284
+ }
285
+ }
286
+ }
287
+ return offset ? this.applyDateOffset(date, offset) : date;
288
+ }
289
+ /**
290
+ * Applica un offset temporale a una data.
291
+ *
292
+ * Formato: `numero + unita`
293
+ * - `y`/`a` = anni, `m` = mesi, `g`/`d` = giorni, `s`/`w` = settimane
294
+ */
295
+ applyDateOffset(date, offset) {
296
+ const match = offset.match(/^(-?\d+)([yYaAmMgGdDsSwW])$/);
297
+ if (!match)
298
+ return date;
299
+ const amount = parseInt(match[1], 10);
300
+ switch (match[2].toLowerCase()) {
301
+ case 'y':
302
+ case 'a':
303
+ return addYears(date, amount);
304
+ case 'm':
305
+ return addMonths(date, amount);
306
+ case 'g':
307
+ case 'd':
308
+ return addDays(date, amount);
309
+ case 's':
310
+ case 'w':
311
+ return addWeeks(date, amount);
312
+ default:
313
+ return date;
314
+ }
315
+ }
316
+ formatRefDate(date) {
317
+ return format(date, 'dd/MM/yyyy');
318
+ }
319
+ // ─── File validators ───────────────────────────────────────────
320
+ createFileSizeValidator(maxSize) {
321
+ return (control) => {
322
+ const files = control.value;
323
+ if (!Array.isArray(files) || files.length === 0)
324
+ return null;
325
+ const oversized = files.filter((f) => f.size > maxSize);
326
+ if (oversized.length > 0) {
327
+ return {
328
+ fileSize: {
329
+ maxSize,
330
+ maxSizeFormatted: this.formatFileSize(maxSize),
331
+ files: oversized.map((f) => f.filename),
332
+ },
333
+ };
334
+ }
335
+ return null;
336
+ };
337
+ }
338
+ createFileTypeValidator(allowedTypes) {
339
+ return (control) => {
340
+ const files = control.value;
341
+ if (!Array.isArray(files) || files.length === 0)
342
+ return null;
343
+ const invalid = files.filter((f) => {
344
+ return !allowedTypes.some((type) => {
345
+ if (type.endsWith('/*')) {
346
+ const category = type.split('/')[0];
347
+ return f.mimeType.startsWith(category + '/');
348
+ }
349
+ return f.mimeType === type;
350
+ });
351
+ });
352
+ if (invalid.length > 0) {
353
+ return {
354
+ fileType: {
355
+ allowedTypes,
356
+ files: invalid.map((f) => f.filename),
357
+ },
358
+ };
359
+ }
360
+ return null;
361
+ };
362
+ }
363
+ createFileCountValidator(maxCount) {
364
+ return (control) => {
365
+ const files = control.value;
366
+ if (!Array.isArray(files))
367
+ return null;
368
+ if (files.length > maxCount) {
369
+ return { fileCount: { maxCount, actualCount: files.length } };
370
+ }
371
+ return null;
372
+ };
373
+ }
374
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiFormValidationService, deps: [{ token: i1.UiFormConditionService }], target: i0.ɵɵFactoryTarget.Injectable }); }
375
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiFormValidationService, providedIn: 'root' }); }
376
+ }
377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiFormValidationService, decorators: [{
378
+ type: Injectable,
379
+ args: [{ providedIn: 'root' }]
380
+ }], ctorParameters: () => [{ type: i1.UiFormConditionService }] });
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0tYnVpbGRlci9zZXJ2aWNlcy9mb3JtLXZhbGlkYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBZ0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixPQUFPLEVBQ1AsU0FBUyxFQUNULFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxFQUNQLFFBQVEsRUFDUixPQUFPLEVBQ1AsT0FBTyxJQUFJLFdBQVcsR0FDdkIsTUFBTSxVQUFVLENBQUM7OztBQU1sQjs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFBb0IsZ0JBQXdDO1FBQXhDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBd0I7SUFBRyxDQUFDO0lBRWhFLGtFQUFrRTtJQUVsRSx1RUFBdUU7SUFDdkUsZ0JBQWdCLENBQUMsS0FBeUI7UUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFvQixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRDs7O09BR0c7SUFDSCwyQkFBMkIsQ0FBQyxLQUF5QixFQUFFLFFBQTZCO1FBQ2xGLElBQUksQ0FBQyxLQUFL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LENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPO29CQUNMLFFBQVEsRUFBRTt3QkFDUixZQUFZO3dCQUNaLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO3FCQUN0QztpQkFDRixDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLHdCQUF3QixDQUFDLFFBQWdCO1FBQy9DLE9BQU8sQ0FBQyxPQUF3QixFQUFFLEVBQUU7WUFDbEMsTUFBTSxLQUFLLEdBQWlCLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRXZDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDaEUsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0F2WVUsdUJBQXVCO21IQUF2Qix1QkFBdUIsY0FEVixNQUFNOzs0RkFDbkIsdUJBQXVCO2tCQURuQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICBwYXJzZSxcclxuICBmb3JtYXQsXHJcbiAgc3RhcnRPZkRheSxcclxuICBzdGFydE9mTW9udGgsXHJcbiAgYWRkRGF5cyxcclxuICBhZGRNb250aHMsXHJcbiAgYWRkWWVhcnMsXHJcbiAgYWRkV2Vla3MsXHJcbiAgaXNBZnRlcixcclxuICBpc0JlZm9yZSxcclxuICBpc0VxdWFsLFxyXG4gIGlzVmFsaWQgYXMgaXNEYXRlVmFsaWQsXHJcbn0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBVaVZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi4vdHlwZXMvdmFsaWRhdGlvbi50eXBlcyc7XHJcbmltcG9ydCB7IFVpQ3Jvc3NGaWVsZENvbmZpZywgVWlDcm9zc0ZpZWxkT3BlcmF0b3IgfSBmcm9tICcuLi90eXBlcy92YWxpZGF0aW9uLnR5cGVzJztcclxuaW1wb3J0IHsgVWlGaWxlRGF0YSB9IGZyb20gJy4uL3R5cGVzL2ZpZWxkLnR5cGVzJztcclxuaW1wb3J0IHsgVWlGb3JtQ29uZGl0aW9uU2VydmljZSB9IGZyb20gJy4vZm9ybS1jb25kaXRpb24uc2VydmljZSc7XHJcblxyXG4vKipcclxuICogU2Vydml6aW8gcGVyIGxhIGNyZWF6aW9uZSBlIGdlc3Rpb25lIGRlaSB2YWxpZGF0b3JpIEFuZ3VsYXJcclxuICogYmFzYXRpIHN1bGxlIHJlZ29sZSBkaWNoaWFyYXRpdmUgZGVsbG8gc2NoZW1hIGRlbCBmb3JtLlxyXG4gKlxyXG4gKiBTdXBwb3J0YSB2YWxpZGF6aW9uaSBzdGFuZGFyZCwgY3Jvc3MtZmllbGQsIGRhdGUgY29uIG9mZnNldCxcclxuICogZmlsZSBlIHZhbGlkYXRvcmkgY29uZGl6aW9uYWxpLlxyXG4gKlxyXG4gKiBAcHJvdmlkZWRJbiAncm9vdCdcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVaUZvcm1WYWxpZGF0aW9uU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25kaXRpb25TZXJ2aWNlOiBVaUZvcm1Db25kaXRpb25TZXJ2aWNlKSB7fVxyXG5cclxuICAvLyDilIDilIDilIAgQ3JlYXppb25lIHZhbGlkYXRvcmkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIC8qKiBDcmVhIHVuIGFycmF5IGRpIHZhbGlkYXRvcmkgQW5ndWxhciBkYWxsZSByZWdvbGUgZGkgdmFsaWRhemlvbmUuICovXHJcbiAgY3JlYXRlVmFsaWRhdG9ycyhydWxlczogVWlWYWxpZGF0aW9uUnVsZVtdKTogVmFsaWRhdG9yRm5bXSB7XHJcbiAgICBpZiAoIXJ1bGVzPy5sZW5ndGgpIHJldHVybiBbXTtcclxuICAgIHJldHVybiBydWxlcy5tYXAoKHIpID0+IHRoaXMuY3JlYXRlVmFsaWRhdG9yKHIpKS5maWx0ZXIoKHYpOiB2IGlzIFZhbGlkYXRvckZuID0+IHYgIT09IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYSB2YWxpZGF0b3JpIGNvbiBzdXBwb3J0byBjb25kaXppb25hbGUuXHJcbiAgICogTGUgcmVnb2xlIGNvbiBgY29uZGl0aW9uc2AgdmVuZ29ubyBhcHBsaWNhdGUgc29sbyBzZSBsZSBjb25kaXppb25pIHNvbm8gc29kZGlzZmF0dGUuXHJcbiAgICovXHJcbiAgY3JlYXRlQ29uZGl0aW9uYWxWYWxpZGF0b3JzKHJ1bGVzOiBVaVZhbGlkYXRpb25SdWxlW10sIGZvcm1EYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVmFsaWRhdG9yRm5bXSB7XHJcbiAgICBpZiAoIXJ1bGVzPy5sZW5ndGgpIHJldHVybiBbXTtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcclxuICAgICAgaWYgKHJ1bGUuY29uZGl0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3Qgc2hvdWxkQXBwbHkgPSB0aGlzLmNvbmRpdGlvblNlcnZpY2UuZXZhbHVhdGVDb25kaXRpb25zKHJ1bGUuY29uZGl0aW9ucywgZm9ybURhdGEpO1xyXG4gICAgICAgIGlmICghc2hvdWxkQXBwbHkpIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHYgPSB0aGlzLmNyZWF0ZVZhbGlkYXRvcihydWxlKTtcclxuICAgICAgaWYgKHYpIHZhbGlkYXRvcnMucHVzaCh2KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFnZ2lvcm5hIGkgdmFsaWRhdG9yaSBkaSB1biBjYW1wbyBpbiBiYXNlIGFsbG8gc3RhdG8gY29ycmVudGUgZGVsIGZvcm0uXHJcbiAgICogVXNhdG8gcGVyIHJpY2FsY29sYXJlIHZhbGlkYXppb25pIGNvbmRpemlvbmFsaSBxdWFuZG8gaSBkYXRpIGNhbWJpYW5vLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkVmFsaWRhdG9ycyhcclxuICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcclxuICAgIHJ1bGVzOiBVaVZhbGlkYXRpb25SdWxlW10gfCB1bmRlZmluZWQsXHJcbiAgICBmb3JtRGF0YTogUmVjb3JkPHN0cmluZywgYW55PixcclxuICApOiB2b2lkIHtcclxuICAgIGlmICghcnVsZXM/Lmxlbmd0aCkge1xyXG4gICAgICBjb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuY3JlYXRlQ29uZGl0aW9uYWxWYWxpZGF0b3JzKHJ1bGVzLCBmb3JtRGF0YSk7XHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgIH1cclxuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgVXRpbGl0eSBwdWJibGljaGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIC8qKiBWZXJpZmljYSBzZSB1biBjYW1wbyBkb3ZyZWJiZSBtb3N0cmFyZSBnbGkgZXJyb3JpLiAqL1xyXG4gIHNob3VsZFNob3dGaWVsZEVycm9ycyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb250cm9sLmludmFsaWQgJiYgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXN0aXR1aXNjZSBpIGNhbXBpIGNvcnJlbGF0aSBkYSBjcm9zcy1maWVsZCB2YWxpZGF0aW9uLiAqL1xyXG4gIGdldENyb3NzRmllbGRSZWxhdGVkRmllbGRzKGZpZWxkS2V5OiBzdHJpbmcsIGFsbFJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBVaVZhbGlkYXRpb25SdWxlW10+KTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgcmVsYXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgW2tleSwgcnVsZXNdIG9mIE9iamVjdC5lbnRyaWVzKGFsbFJ1bGVzKSkge1xyXG4gICAgICBpZiAoa2V5ID09PSBmaWVsZEtleSkgY29udGludWU7XHJcbiAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xyXG4gICAgICAgIGlmIChydWxlLnR5cGUgPT09ICdjcm9zc0ZpZWxkJyAmJiBydWxlLmNyb3NzRmllbGQ/LnRhcmdldEZpZWxkID09PSBmaWVsZEtleSkge1xyXG4gICAgICAgICAgcmVsYXRlZC5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVsYXRlZDtcclxuICB9XHJcblxyXG4gIC8qKiBWZXJpZmljYSBzZSB1biBjYW1wbyBoYSB2YWxpZGF6aW9uaSBjcm9zcy1maWVsZCBjaGUgbG8gcmVmZXJlbnppYW5vLiAqL1xyXG4gIGhhc0Nyb3NzRmllbGRWYWxpZGF0aW9ucyhmaWVsZEtleTogc3RyaW5nLCBhbGxSdWxlczogUmVjb3JkPHN0cmluZywgVWlWYWxpZGF0aW9uUnVsZVtdPik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3Jvc3NGaWVsZFJlbGF0ZWRGaWVsZHMoZmllbGRLZXksIGFsbFJ1bGVzKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqIEZvcm1hdHRhIGxhIGRpbWVuc2lvbmUgZGVsIGZpbGUgaW4gdW5hIHN0cmluZ2EgbGVnZ2liaWxlLiAqL1xyXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gJzAgQic7XHJcbiAgICBjb25zdCBrID0gMTAyNDtcclxuICAgIGNvbnN0IHNpemVzID0gWydCJywgJ0tCJywgJ01CJywgJ0dCJ107XHJcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBGYWN0b3J5IHZhbGlkYXRvcmkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVmFsaWRhdG9yKHJ1bGU6IFVpVmFsaWRhdGlvblJ1bGUpOiBWYWxpZGF0b3JGbiB8IG51bGwge1xyXG4gICAgc3dpdGNoIChydWxlLnR5cGUpIHtcclxuICAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JzLnJlcXVpcmVkO1xyXG4gICAgICBjYXNlICdlbWFpbCc6XHJcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMuZW1haWw7XHJcbiAgICAgIGNhc2UgJ21pbic6XHJcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWluKHJ1bGUudmFsdWUpO1xyXG4gICAgICBjYXNlICdtYXgnOlxyXG4gICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1heChydWxlLnZhbHVlKTtcclxuICAgICAgY2FzZSAnbWluTGVuZ3RoJzpcclxuICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5taW5MZW5ndGgocnVsZS52YWx1ZSk7XHJcbiAgICAgIGNhc2UgJ21heExlbmd0aCc6XHJcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWF4TGVuZ3RoKHJ1bGUudmFsdWUpO1xyXG4gICAgICBjYXNlICdwYXR0ZXJuJzpcclxuICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5wYXR0ZXJuKHJ1bGUudmFsdWUpO1xyXG4gICAgICBjYXNlICdjdXN0b20nOlxyXG4gICAgICAgIHJldHVybiBydWxlLnZhbGlkYXRvciB8fCBudWxsO1xyXG4gICAgICBjYXNlICdjcm9zc0ZpZWxkJzpcclxuICAgICAgICByZXR1cm4gcnVsZS5jcm9zc0ZpZWxkID8gdGhpcy5jcmVhdGVDcm9zc0ZpZWxkVmFsaWRhdG9yKHJ1bGUuY3Jvc3NGaWVsZCkgOiBudWxsO1xyXG4gICAgICBjYXNlICdkYXRlLW1pbic6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZU1pblZhbGlkYXRvcihydWxlLnZhbHVlLCBydWxlLm9mZnNldCk7XHJcbiAgICAgIGNhc2UgJ2RhdGUtbWF4JzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlTWF4VmFsaWRhdG9yKHJ1bGUudmFsdWUsIHJ1bGUub2Zmc2V0KTtcclxuICAgICAgY2FzZSAnZmlsZVNpemUnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZpbGVTaXplVmFsaWRhdG9yKHJ1bGUudmFsdWUpO1xyXG4gICAgICBjYXNlICdmaWxlVHlwZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRmlsZVR5cGVWYWxpZGF0b3IocnVsZS52YWx1ZSk7XHJcbiAgICAgIGNhc2UgJ2ZpbGVDb3VudCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRmlsZUNvdW50VmFsaWRhdG9yKHJ1bGUudmFsdWUpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIENyb3NzLWZpZWxkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNyb3NzRmllbGRWYWxpZGF0b3IoY29uZmlnOiBVaUNyb3NzRmllbGRDb25maWcpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb25maWcudGFyZ2V0RmllbGQpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgY29uc3QgdGFyZ2V0Q29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChjb25maWcudGFyZ2V0RmllbGQpO1xyXG4gICAgICBpZiAoIXRhcmdldENvbnRyb2wpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldENvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgICBpZiAoc291cmNlVmFsdWUgPT0gbnVsbCB8fCB0YXJnZXRWYWx1ZSA9PSBudWxsIHx8IHNvdXJjZVZhbHVlID09PSAnJyB8fCB0YXJnZXRWYWx1ZSA9PT0gJycpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgaWYgKGNvbmZpZy5kYXRhVHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGVEYXRlQ29tcGFyaXNvbihzb3VyY2VWYWx1ZSwgdGFyZ2V0VmFsdWUsIGNvbmZpZy5vcGVyYXRvciwgY29uZmlnLmlzTW9udGhZZWFyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZU51bWJlckNvbXBhcmlzb24oc291cmNlVmFsdWUsIHRhcmdldFZhbHVlLCBjb25maWcub3BlcmF0b3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gaXNWYWxpZFxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICBjcm9zc0ZpZWxkOiB7XHJcbiAgICAgICAgICAgICAgYWN0dWFsVmFsdWU6IHNvdXJjZVZhbHVlLFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkQ29tcGFyaXNvbjogY29uZmlnLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgIGNvbXBhcmVkVmFsdWU6IHRhcmdldFZhbHVlLFxyXG4gICAgICAgICAgICAgIHRhcmdldEZpZWxkOiBjb25maWcudGFyZ2V0RmllbGQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKiBDb25mcm9udG8gZGF0ZSBjb24gZGF0ZS1mbnMuICovXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZURhdGVDb21wYXJpc29uKFxyXG4gICAgc291cmNlVmFsdWU6IGFueSxcclxuICAgIHRhcmdldFZhbHVlOiBhbnksXHJcbiAgICBvcGVyYXRvcjogVWlDcm9zc0ZpZWxkT3BlcmF0b3IsXHJcbiAgICBpc01vbnRoWWVhcj86IGJvb2xlYW4sXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBub3JtYWxpemUgPSBpc01vbnRoWWVhciA/IHN0YXJ0T2ZNb250aCA6IHN0YXJ0T2ZEYXk7XHJcbiAgICBjb25zdCBzb3VyY2VEYXRlID0gbm9ybWFsaXplKG5ldyBEYXRlKHNvdXJjZVZhbHVlKSk7XHJcbiAgICBjb25zdCB0YXJnZXREYXRlID0gbm9ybWFsaXplKG5ldyBEYXRlKHRhcmdldFZhbHVlKSk7XHJcblxyXG4gICAgaWYgKCFpc0RhdGVWYWxpZChzb3VyY2VEYXRlKSB8fCAhaXNEYXRlVmFsaWQodGFyZ2V0RGF0ZSkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcbiAgICAgIGNhc2UgJ2dyZWF0ZXJfdGhhbic6XHJcbiAgICAgICAgcmV0dXJuIGlzQWZ0ZXIoc291cmNlRGF0ZSwgdGFyZ2V0RGF0ZSk7XHJcbiAgICAgIGNhc2UgJ2dyZWF0ZXJfZXF1YWwnOlxyXG4gICAgICAgIHJldHVybiBpc0FmdGVyKHNvdXJjZURhdGUsIHRhcmdldERhdGUpIHx8IGlzRXF1YWwoc291cmNlRGF0ZSwgdGFyZ2V0RGF0ZSk7XHJcbiAgICAgIGNhc2UgJ2xlc3NfdGhhbic6XHJcbiAgICAgICAgcmV0dXJuIGlzQmVmb3JlKHNvdXJjZURhdGUsIHRhcmdldERhdGUpO1xyXG4gICAgICBjYXNlICdsZXNzX2VxdWFsJzpcclxuICAgICAgICByZXR1cm4gaXNCZWZvcmUoc291cmNlRGF0ZSwgdGFyZ2V0RGF0ZSkgfHwgaXNFcXVhbChzb3VyY2VEYXRlLCB0YXJnZXREYXRlKTtcclxuICAgICAgY2FzZSAnbm90X2VxdWFsJzpcclxuICAgICAgICByZXR1cm4gIWlzRXF1YWwoc291cmNlRGF0ZSwgdGFyZ2V0RGF0ZSk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIENvbmZyb250byBudW1lcmljby4gKi9cclxuICBwcml2YXRlIHZhbGlkYXRlTnVtYmVyQ29tcGFyaXNvbihzb3VyY2VWYWx1ZTogYW55LCB0YXJnZXRWYWx1ZTogYW55LCBvcGVyYXRvcjogVWlDcm9zc0ZpZWxkT3BlcmF0b3IpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHNyYyA9IE51bWJlcihzb3VyY2VWYWx1ZSk7XHJcbiAgICBjb25zdCB0Z3QgPSBOdW1iZXIodGFyZ2V0VmFsdWUpO1xyXG4gICAgaWYgKGlzTmFOKHNyYykgfHwgaXNOYU4odGd0KSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSAnZ3JlYXRlcl90aGFuJzpcclxuICAgICAgICByZXR1cm4gc3JjID4gdGd0O1xyXG4gICAgICBjYXNlICdncmVhdGVyX2VxdWFsJzpcclxuICAgICAgICByZXR1cm4gc3JjID49IHRndDtcclxuICAgICAgY2FzZSAnbGVzc190aGFuJzpcclxuICAgICAgICByZXR1cm4gc3JjIDwgdGd0O1xyXG4gICAgICBjYXNlICdsZXNzX2VxdWFsJzpcclxuICAgICAgICByZXR1cm4gc3JjIDw9IHRndDtcclxuICAgICAgY2FzZSAnbm90X2VxdWFsJzpcclxuICAgICAgICByZXR1cm4gc3JjICE9PSB0Z3Q7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIERhdGUgbWluL21heCAoY29uIGtleXdvcmQgZSBvZmZzZXQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIGNyZWF0ZURhdGVNaW5WYWxpZGF0b3IodmFsdWU6IHN0cmluZywgb2Zmc2V0Pzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IHJlZkRhdGUgPSB0aGlzLnBhcnNlUmVmZXJlbmNlRGF0ZSh2YWx1ZSwgb2Zmc2V0KTtcclxuICAgICAgaWYgKCFyZWZEYXRlKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IGlucHV0RGF0ZSA9IHN0YXJ0T2ZEYXkobmV3IERhdGUoY29udHJvbC52YWx1ZSkpO1xyXG4gICAgICBpZiAoIWlzRGF0ZVZhbGlkKGlucHV0RGF0ZSkpIHtcclxuICAgICAgICByZXR1cm4geyAnZGF0ZS1taW4nOiB7IG1lc3NhZ2U6ICdEYXRhIG5vbiB2YWxpZGEnLCByZWZlcmVuY2VEYXRlOiB0aGlzLmZvcm1hdFJlZkRhdGUocmVmRGF0ZSkgfSB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNCZWZvcmUoaW5wdXREYXRlLCByZWZEYXRlKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAnZGF0ZS1taW4nOiB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBMYSBkYXRhIGRldmUgZXNzZXJlIHN1Y2Nlc3NpdmEgbyB1Z3VhbGUgYSAke3RoaXMuZm9ybWF0UmVmRGF0ZShyZWZEYXRlKX1gLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VEYXRlOiB0aGlzLmZvcm1hdFJlZkRhdGUocmVmRGF0ZSksXHJcbiAgICAgICAgICAgIGlucHV0RGF0ZTogZm9ybWF0KGlucHV0RGF0ZSwgJ2RkL01NL3l5eXknKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZURhdGVNYXhWYWxpZGF0b3IodmFsdWU6IHN0cmluZywgb2Zmc2V0Pzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IHJlZkRhdGUgPSB0aGlzLnBhcnNlUmVmZXJlbmNlRGF0ZSh2YWx1ZSwgb2Zmc2V0KTtcclxuICAgICAgaWYgKCFyZWZEYXRlKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IGlucHV0RGF0ZSA9IHN0YXJ0T2ZEYXkobmV3IERhdGUoY29udHJvbC52YWx1ZSkpO1xyXG4gICAgICBpZiAoIWlzRGF0ZVZhbGlkKGlucHV0RGF0ZSkpIHtcclxuICAgICAgICByZXR1cm4geyAnZGF0ZS1tYXgnOiB7IG1lc3NhZ2U6ICdEYXRhIG5vbiB2YWxpZGEnLCByZWZlcmVuY2VEYXRlOiB0aGlzLmZvcm1hdFJlZkRhdGUocmVmRGF0ZSkgfSB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNBZnRlcihpbnB1dERhdGUsIHJlZkRhdGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICdkYXRlLW1heCc6IHtcclxuICAgICAgICAgICAgbWVzc2FnZTogYExhIGRhdGEgZGV2ZSBlc3NlcmUgcHJlY2VkZW50ZSBvIHVndWFsZSBhICR7dGhpcy5mb3JtYXRSZWZEYXRlKHJlZkRhdGUpfWAsXHJcbiAgICAgICAgICAgIHJlZmVyZW5jZURhdGU6IHRoaXMuZm9ybWF0UmVmRGF0ZShyZWZEYXRlKSxcclxuICAgICAgICAgICAgaW5wdXREYXRlOiBmb3JtYXQoaW5wdXREYXRlLCAnZGQvTU0veXl5eScpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNhIHVuYSBkYXRhIGRpIHJpZmVyaW1lbnRvIGRhIGtleXdvcmQgbyBzdHJpbmdhIEREL01NL1lZWVlcclxuICAgKiBlIGFwcGxpY2EgdW4gZXZlbnR1YWxlIG9mZnNldCB0ZW1wb3JhbGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZVJlZmVyZW5jZURhdGUodmFsdWU6IHN0cmluZywgb2Zmc2V0Pzogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xyXG4gICAgY29uc3QgdG9kYXkgPSBzdGFydE9mRGF5KG5ldyBEYXRlKCkpO1xyXG4gICAgbGV0IGRhdGU6IERhdGU7XHJcblxyXG4gICAgc3dpdGNoICh2YWx1ZT8udG9Mb3dlckNhc2UoKS50cmltKCkpIHtcclxuICAgICAgY2FzZSAndG9kYXknOlxyXG4gICAgICBjYXNlICdvZ2dpJzpcclxuICAgICAgICBkYXRlID0gdG9kYXk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RvbW9ycm93JzpcclxuICAgICAgY2FzZSAnZG9tYW5pJzpcclxuICAgICAgICBkYXRlID0gYWRkRGF5cyh0b2RheSwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3llc3RlcmRheSc6XHJcbiAgICAgIGNhc2UgJ2llcmknOlxyXG4gICAgICAgIGRhdGUgPSBhZGREYXlzKHRvZGF5LCAtMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAvLyBQcm92YSBERC9NTS9ZWVlZXHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2UodmFsdWUsICdkZC9NTS95eXl5JywgbmV3IERhdGUoKSk7XHJcbiAgICAgICAgaWYgKGlzRGF0ZVZhbGlkKHBhcnNlZCkpIHtcclxuICAgICAgICAgIGRhdGUgPSBzdGFydE9mRGF5KHBhcnNlZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFByb3ZhIFlZWVktTU0tREQgKElTTylcclxuICAgICAgICAgIGNvbnN0IGlzb0RhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICBpZiAoaXNEYXRlVmFsaWQoaXNvRGF0ZSkpIHtcclxuICAgICAgICAgICAgZGF0ZSA9IHN0YXJ0T2ZEYXkoaXNvRGF0ZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2Zmc2V0ID8gdGhpcy5hcHBseURhdGVPZmZzZXQoZGF0ZSwgb2Zmc2V0KSA6IGRhdGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBsaWNhIHVuIG9mZnNldCB0ZW1wb3JhbGUgYSB1bmEgZGF0YS5cclxuICAgKlxyXG4gICAqIEZvcm1hdG86IGBudW1lcm8gKyB1bml0YWBcclxuICAgKiAtIGB5YC9gYWAgPSBhbm5pLCBgbWAgPSBtZXNpLCBgZ2AvYGRgID0gZ2lvcm5pLCBgc2AvYHdgID0gc2V0dGltYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhcHBseURhdGVPZmZzZXQoZGF0ZTogRGF0ZSwgb2Zmc2V0OiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIGNvbnN0IG1hdGNoID0gb2Zmc2V0Lm1hdGNoKC9eKC0/XFxkKykoW3lZYUFtTWdHZERzU3dXXSkkLyk7XHJcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gZGF0ZTtcclxuXHJcbiAgICBjb25zdCBhbW91bnQgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xyXG4gICAgc3dpdGNoIChtYXRjaFsyXS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIGNhc2UgJ3knOlxyXG4gICAgICBjYXNlICdhJzpcclxuICAgICAgICByZXR1cm4gYWRkWWVhcnMoZGF0ZSwgYW1vdW50KTtcclxuICAgICAgY2FzZSAnbSc6XHJcbiAgICAgICAgcmV0dXJuIGFkZE1vbnRocyhkYXRlLCBhbW91bnQpO1xyXG4gICAgICBjYXNlICdnJzpcclxuICAgICAgY2FzZSAnZCc6XHJcbiAgICAgICAgcmV0dXJuIGFkZERheXMoZGF0ZSwgYW1vdW50KTtcclxuICAgICAgY2FzZSAncyc6XHJcbiAgICAgIGNhc2UgJ3cnOlxyXG4gICAgICAgIHJldHVybiBhZGRXZWVrcyhkYXRlLCBhbW91bnQpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRSZWZEYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGZvcm1hdChkYXRlLCAnZGQvTU0veXl5eScpO1xyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIEZpbGUgdmFsaWRhdG9ycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWxlU2l6ZVZhbGlkYXRvcihtYXhTaXplOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlczogVWlGaWxlRGF0YVtdID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbGVzKSB8fCBmaWxlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgY29uc3Qgb3ZlcnNpemVkID0gZmlsZXMuZmlsdGVyKChmKSA9PiBmLnNpemUgPiBtYXhTaXplKTtcclxuICAgICAgaWYgKG92ZXJzaXplZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGZpbGVTaXplOiB7XHJcbiAgICAgICAgICAgIG1heFNpemUsXHJcbiAgICAgICAgICAgIG1heFNpemVGb3JtYXR0ZWQ6IHRoaXMuZm9ybWF0RmlsZVNpemUobWF4U2l6ZSksXHJcbiAgICAgICAgICAgIGZpbGVzOiBvdmVyc2l6ZWQubWFwKChmKSA9PiBmLmZpbGVuYW1lKSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZpbGVUeXBlVmFsaWRhdG9yKGFsbG93ZWRUeXBlczogc3RyaW5nW10pOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlczogVWlGaWxlRGF0YVtdID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbGVzKSB8fCBmaWxlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgY29uc3QgaW52YWxpZCA9IGZpbGVzLmZpbHRlcigoZikgPT4ge1xyXG4gICAgICAgIHJldHVybiAhYWxsb3dlZFR5cGVzLnNvbWUoKHR5cGUpID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlLmVuZHNXaXRoKCcvKicpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdHlwZS5zcGxpdCgnLycpWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gZi5taW1lVHlwZS5zdGFydHNXaXRoKGNhdGVnb3J5ICsgJy8nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmLm1pbWVUeXBlID09PSB0eXBlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChpbnZhbGlkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZmlsZVR5cGU6IHtcclxuICAgICAgICAgICAgYWxsb3dlZFR5cGVzLFxyXG4gICAgICAgICAgICBmaWxlczogaW52YWxpZC5tYXAoKGYpID0+IGYuZmlsZW5hbWUpLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRmlsZUNvdW50VmFsaWRhdG9yKG1heENvdW50OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWxlczogVWlGaWxlRGF0YVtdID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbGVzKSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICBpZiAoZmlsZXMubGVuZ3RoID4gbWF4Q291bnQpIHtcclxuICAgICAgICByZXR1cm4geyBmaWxlQ291bnQ6IHsgbWF4Q291bnQsIGFjdHVhbENvdW50OiBmaWxlcy5sZW5ndGggfSB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,141 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as locationData from '../../../sources/location-data.opt.json';
3
+ import * as nazioniData from '../../../sources/nazioni.opt.json';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Servizio per la gestione dei dati geografici italiani
7
+ * da file JSON statici ottimizzati.
8
+ *
9
+ * Elimina la necessita di chiamate backend per nazioni,
10
+ * province, comuni e CAP. I dati vengono caricati in memoria
11
+ * al primo accesso e poi serviti dalla cache.
12
+ *
13
+ * @providedIn 'root'
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const nazioni = await this.locationService.getNazioni();
18
+ * const province = await this.locationService.getProvince();
19
+ * const comuni = await this.locationService.getComuniByProvincia('015');
20
+ * const caps = await this.locationService.getCapList('015146');
21
+ * ```
22
+ */
23
+ export class UiLocationService {
24
+ constructor() {
25
+ this.nazioniCache = new Map();
26
+ this.provinceCache = new Map();
27
+ this.comuniCache = new Map();
28
+ this.nazioniMap = nazioniData;
29
+ this.locationMap = locationData;
30
+ this.initializeCaches();
31
+ }
32
+ // ─── API pubblica ──────────────────────────────────────────────
33
+ /** Elenco completo delle nazioni (Italia prima). */
34
+ async getNazioni() {
35
+ const nazioni = Array.from(this.nazioniCache.values());
36
+ return { data: this.sortNazioniItaliaFirst(nazioni) };
37
+ }
38
+ /** Elenco completo delle province, ordinate alfabeticamente. */
39
+ async getProvince() {
40
+ const province = Array.from(this.provinceCache.values()).sort((a, b) => a.nomeProvincia.localeCompare(b.nomeProvincia, 'it'));
41
+ return { content: province };
42
+ }
43
+ /** Elenco dei comuni per una specifica provincia. */
44
+ async getComuniByProvincia(provinciaId) {
45
+ const comuniMin = this.locationMap.comuniPerProvincia[provinciaId] || [];
46
+ const provincia = this.provinceCache.get(provinciaId);
47
+ if (!provincia)
48
+ return [];
49
+ return comuniMin
50
+ .map((c) => ({
51
+ codiceCatastale: c.x,
52
+ codiceComunePk: c.x,
53
+ comuneSoppresso: false,
54
+ nomeComune: c.d,
55
+ prov: provincia,
56
+ visibile: true,
57
+ }))
58
+ .sort((a, b) => a.nomeComune.localeCompare(b.nomeComune, 'it'));
59
+ }
60
+ /** Elenco dei CAP per un comune. */
61
+ async getCapList(comuneId) {
62
+ for (const comuni of Object.values(this.locationMap.comuniPerProvincia)) {
63
+ const comune = comuni.find((c) => c.x === comuneId);
64
+ if (comune?.c) {
65
+ return Array.isArray(comune.c) ? comune.c : [comune.c];
66
+ }
67
+ }
68
+ return [];
69
+ }
70
+ /** Dati completi di una location (nazione, provincia o comune). */
71
+ async getLocationFullData(type, id, provinciaId) {
72
+ switch (type) {
73
+ case 'nazione':
74
+ return this.nazioniCache.get(id) ?? null;
75
+ case 'provincia':
76
+ return this.provinceCache.get(id) ?? null;
77
+ case 'comune': {
78
+ if (!provinciaId)
79
+ return this.comuniCache.get(id) ?? null;
80
+ const comuni = await this.getComuniByProvincia(provinciaId);
81
+ return comuni.find((c) => c.codiceComunePk === id) ?? null;
82
+ }
83
+ default:
84
+ return null;
85
+ }
86
+ }
87
+ // ─── Inizializzazione cache ────────────────────────────────────
88
+ initializeCaches() {
89
+ // Nazioni
90
+ for (const n of this.nazioniMap.nazioni) {
91
+ this.nazioniCache.set(n.x, {
92
+ codStatoPk: n.x,
93
+ codiceCatastale: n.x,
94
+ descrizione: n.d,
95
+ });
96
+ }
97
+ // Province
98
+ for (const p of this.locationMap.province) {
99
+ this.provinceCache.set(p.x, {
100
+ codiceProvinciaPk: p.x,
101
+ nomeProvincia: p.d,
102
+ siglaProvincia: p.x,
103
+ visibile: true,
104
+ });
105
+ }
106
+ // Comuni (con riferimento alla provincia)
107
+ for (const [provinciaId, comuni] of Object.entries(this.locationMap.comuniPerProvincia)) {
108
+ const provincia = this.provinceCache.get(provinciaId);
109
+ if (!provincia)
110
+ continue;
111
+ for (const c of comuni) {
112
+ this.comuniCache.set(c.x, {
113
+ codiceCatastale: c.x,
114
+ codiceComunePk: c.x,
115
+ comuneSoppresso: false,
116
+ nomeComune: c.d,
117
+ prov: provincia,
118
+ visibile: true,
119
+ });
120
+ }
121
+ }
122
+ }
123
+ sortNazioniItaliaFirst(nazioni) {
124
+ return nazioni.sort((a, b) => {
125
+ const aItalia = a.descrizione?.toLowerCase().includes('italia') || a.codStatoPk === 'ITA';
126
+ const bItalia = b.descrizione?.toLowerCase().includes('italia') || b.codStatoPk === 'ITA';
127
+ if (aItalia && !bItalia)
128
+ return -1;
129
+ if (!aItalia && bItalia)
130
+ return 1;
131
+ return (a.descrizione || '').localeCompare(b.descrizione || '', 'it', { sensitivity: 'base' });
132
+ });
133
+ }
134
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiLocationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
135
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiLocationService, providedIn: 'root' }); }
136
+ }
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiLocationService, decorators: [{
138
+ type: Injectable,
139
+ args: [{ providedIn: 'root' }]
140
+ }], ctorParameters: () => [] });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXVpLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1idWlsZGVyL3NlcnZpY2VzL2xvY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEtBQUssWUFBWSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3hFLE9BQU8sS0FBSyxXQUFXLE1BQU0sbUNBQW1DLENBQUM7O0FBMERqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBTzVCO1FBSmlCLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUMvQyxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO1FBR3pELElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBaUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQW1CLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGtFQUFrRTtJQUVsRSxvREFBb0Q7SUFDcEQsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsS0FBSyxDQUFDLFdBQVc7UUFDZixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFh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dCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgbG9jYXRpb25EYXRhIGZyb20gJy4uLy4uLy4uL3NvdXJjZXMvbG9jYXRpb24tZGF0YS5vcHQuanNvbic7XHJcbmltcG9ydCAqIGFzIG5hemlvbmlEYXRhIGZyb20gJy4uLy4uLy4uL3NvdXJjZXMvbmF6aW9uaS5vcHQuanNvbic7XHJcblxyXG4vLyDilIDilIDilIAgSW50ZXJmYWNjZSBKU09OIG90dGltaXp6YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqIFZvY2UgbmF6aW9uZSBuZWwgSlNPTiBvdHRpbWl6emF0by4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBNaW5pZmllZE5hemlvbmVPcHRpb24ge1xyXG4gIC8qKiBDb2RpY2UgbmF6aW9uZSAoZXMuIGAnSVRBJ2ApLiAqL1xyXG4gIHg6IHN0cmluZztcclxuICAvKiogRGVzY3JpemlvbmUgKGVzLiBgJ0l0YWxpYSdgKS4gKi9cclxuICBkOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKiBWb2NlIHByb3ZpbmNpYS9jb211bmUgbmVsIEpTT04gb3R0aW1penphdG8uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWluaWZpZWRTZWxlY3RPcHRpb24ge1xyXG4gIC8qKiBDb2RpY2UgKHByb3ZpbmNpYSBvIGNvbXVuZSkuICovXHJcbiAgeDogc3RyaW5nO1xyXG4gIC8qKiBEZXNjcml6aW9uZS4gKi9cclxuICBkOiBzdHJpbmc7XHJcbiAgLyoqIENBUCBzaW5nb2xvIG8gbXVsdGlwbGkuICovXHJcbiAgYz86IHN0cmluZyB8IHN0cmluZ1tdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgTWluaWZpZWRMb2NhdGlvbk1hcCB7XHJcbiAgcHJvdmluY2U6IE1pbmlmaWVkU2VsZWN0T3B0aW9uW107XHJcbiAgY29tdW5pUGVyUHJvdmluY2lhOiBSZWNvcmQ8c3RyaW5nLCBNaW5pZmllZFNlbGVjdE9wdGlvbltdPjtcclxufVxyXG5cclxuaW50ZXJmYWNlIE1pbmlmaWVkTmF6aW9uaU1hcCB7XHJcbiAgbmF6aW9uaTogTWluaWZpZWROYXppb25lT3B0aW9uW107XHJcbn1cclxuXHJcbi8vIOKUgOKUgOKUgCBJbnRlcmZhY2NlIHB1YmJsaWNoZSAoZm9ybWF0byBsZWdhY3kgY29tcGF0aWJpbGUpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqIE5hemlvbmUuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlOYXppb25lIHtcclxuICBjb2RTdGF0b1BrOiBzdHJpbmc7XHJcbiAgY29kaWNlQ2F0YXN0YWxlOiBzdHJpbmc7XHJcbiAgZGVzY3JpemlvbmU6IHN0cmluZztcclxufVxyXG5cclxuLyoqIFByb3ZpbmNpYS4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaVByb3ZpbmNpYSB7XHJcbiAgY29kaWNlUHJvdmluY2lhUGs6IHN0cmluZztcclxuICBub21lUHJvdmluY2lhOiBzdHJpbmc7XHJcbiAgc2lnbGFQcm92aW5jaWE6IHN0cmluZztcclxuICB2aXNpYmlsZTogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqIENvbXVuZS4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUNvbXVuZSB7XHJcbiAgY29kaWNlQ2F0YXN0YWxlOiBzdHJpbmc7XHJcbiAgY29kaWNlQ29tdW5lUGs6IHN0cmluZztcclxuICBjb211bmVTb3BwcmVzc286IGJvb2xlYW47XHJcbiAgbm9tZUNvbXVuZTogc3RyaW5nO1xyXG4gIHByb3Y6IFVpUHJvdmluY2lhO1xyXG4gIHZpc2liaWxlOiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogU2Vydml6aW8gcGVyIGxhIGdlc3Rpb25lIGRlaSBkYXRpIGdlb2dyYWZpY2kgaXRhbGlhbmlcclxuICogZGEgZmlsZSBKU09OIHN0YXRpY2kgb3R0aW1penphdGkuXHJcbiAqXHJcbiAqIEVsaW1pbmEgbGEgbmVjZXNzaXRhIGRpIGNoaWFtYXRlIGJhY2tlbmQgcGVyIG5hemlvbmksXHJcbiAqIHByb3ZpbmNlLCBjb211bmkgZSBDQVAuIEkgZGF0aSB2ZW5nb25vIGNhcmljYXRpIGluIG1lbW9yaWFcclxuICogYWwgcHJpbW8gYWNjZXNzbyBlIHBvaSBzZXJ2aXRpIGRhbGxhIGNhY2hlLlxyXG4gKlxyXG4gKiBAcHJvdmlkZWRJbiAncm9vdCdcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBuYXppb25pID0gYXdhaXQgdGhpcy5sb2NhdGlvblNlcnZpY2UuZ2V0TmF6aW9uaSgpO1xyXG4gKiBjb25zdCBwcm92aW5jZSA9IGF3YWl0IHRoaXMubG9jYXRpb25TZXJ2aWNlLmdldFByb3ZpbmNlKCk7XHJcbiAqIGNvbnN0IGNvbXVuaSA9IGF3YWl0IHRoaXMubG9jYXRpb25TZXJ2aWNlLmdldENvbXVuaUJ5UHJvdmluY2lhKCcwMTUnKTtcclxuICogY29uc3QgY2FwcyA9IGF3YWl0IHRoaXMubG9jYXRpb25TZXJ2aWNlLmdldENhcExpc3QoJzAxNTE0NicpO1xyXG4gKiBgYGBcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVaUxvY2F0aW9uU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYXppb25pTWFwOiBNaW5pZmllZE5hemlvbmlNYXA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbk1hcDogTWluaWZpZWRMb2NhdGlvbk1hcDtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5hemlvbmlDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBVaU5hemlvbmU+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aW5jZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFVpUHJvdmluY2lhPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29tdW5pQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVWlDb211bmU+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5uYXppb25pTWFwID0gbmF6aW9uaURhdGEgYXMgTWluaWZpZWROYXppb25pTWFwO1xyXG4gICAgdGhpcy5sb2NhdGlvbk1hcCA9IGxvY2F0aW9uRGF0YSBhcyBhbnk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDYWNoZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBBUEkgcHViYmxpY2Eg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIC8qKiBFbGVuY28gY29tcGxldG8gZGVsbGUgbmF6aW9uaSAoSXRhbGlhIHByaW1hKS4gKi9cclxuICBhc3luYyBnZXROYXppb25pKCk6IFByb21pc2U8eyBkYXRhOiBVaU5hemlvbmVbXSB9PiB7XHJcbiAgICBjb25zdCBuYXppb25pID0gQXJyYXkuZnJvbSh0aGlzLm5hemlvbmlDYWNoZS52YWx1ZXMoKSk7XHJcbiAgICByZXR1cm4geyBkYXRhOiB0aGlzLnNvcnROYXppb25pSXRhbGlhRmlyc3QobmF6aW9uaSkgfTtcclxuICB9XHJcblxyXG4gIC8qKiBFbGVuY28gY29tcGxldG8gZGVsbGUgcHJvdmluY2UsIG9yZGluYXRlIGFsZmFiZXRpY2FtZW50ZS4gKi9cclxuICBhc3luYyBnZXRQcm92aW5jZSgpOiBQcm9taXNlPHsgY29udGVudDogVWlQcm92aW5jaWFbXSB9PiB7XHJcbiAgICBjb25zdCBwcm92aW5jZSA9IEFycmF5LmZyb20odGhpcy5wcm92aW5jZUNhY2hlLnZhbHVlcygpKS5zb3J0KChhLCBiKSA9PlxyXG4gICAgICBhLm5vbWVQcm92aW5jaWEubG9jYWxlQ29tcGFyZShiLm5vbWVQcm92aW5jaWEsICdpdCcpLFxyXG4gICAgKTtcclxuICAgIHJldHVybiB7IGNvbnRlbnQ6IHByb3ZpbmNlIH07XHJcbiAgfVxyXG5cclxuICAvKiogRWxlbmNvIGRlaSBjb211bmkgcGVyIHVuYSBzcGVjaWZpY2EgcHJvdmluY2lhLiAqL1xyXG4gIGFzeW5jIGdldENvbXVuaUJ5UHJvdmluY2lhKHByb3ZpbmNpYUlkOiBzdHJpbmcpOiBQcm9taXNlPFVpQ29tdW5lW10+IHtcclxuICAgIGNvbnN0IGNvbXVuaU1pbiA9IHRoaXMubG9jYXRpb25NYXAuY29tdW5pUGVyUHJvdmluY2lhW3Byb3ZpbmNpYUlkXSB8fCBbXTtcclxuICAgIGNvbnN0IHByb3ZpbmNpYSA9IHRoaXMucHJvdmluY2VDYWNoZS5nZXQocHJvdmluY2lhSWQpO1xyXG4gICAgaWYgKCFwcm92aW5jaWEpIHJldHVybiBbXTtcclxuXHJcbiAgICByZXR1cm4gY29tdW5pTWluXHJcbiAgICAgIC5tYXAoKGMpID0+ICh7XHJcbiAgICAgICAgY29kaWNlQ2F0YXN0YWxlOiBjLngsXHJcbiAgICAgICAgY29kaWNlQ29tdW5lUGs6IGMueCxcclxuICAgICAgICBjb211bmVTb3BwcmVzc286IGZhbHNlLFxyXG4gICAgICAgIG5vbWVDb211bmU6IGMuZCxcclxuICAgICAgICBwcm92OiBwcm92aW5jaWEsXHJcbiAgICAgICAgdmlzaWJpbGU6IHRydWUsXHJcbiAgICAgIH0pKVxyXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5ub21lQ29tdW5lLmxvY2FsZUNvbXBhcmUoYi5ub21lQ29tdW5lLCAnaXQnKSk7XHJcbiAgfVxyXG5cclxuICAvKiogRWxlbmNvIGRlaSBDQVAgcGVyIHVuIGNvbXVuZS4gKi9cclxuICBhc3luYyBnZXRDYXBMaXN0KGNvbXVuZUlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICBmb3IgKGNvbnN0IGNvbXVuaSBvZiBPYmplY3QudmFsdWVzKHRoaXMubG9jYXRpb25NYXAuY29tdW5pUGVyUHJvdmluY2lhKSkge1xyXG4gICAgICBjb25zdCBjb211bmUgPSBjb211bmkuZmluZCgoYykgPT4gYy54ID09PSBjb211bmVJZCk7XHJcbiAgICAgIGlmIChjb211bmU/LmMpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb211bmUuYykgPyBjb211bmUuYyA6IFtjb211bmUuY107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIC8qKiBEYXRpIGNvbXBsZXRpIGRpIHVuYSBsb2NhdGlvbiAobmF6aW9uZSwgcHJvdmluY2lhIG8gY29tdW5lKS4gKi9cclxuICBhc3luYyBnZXRMb2NhdGlvbkZ1bGxEYXRhKFxyXG4gICAgdHlwZTogJ25hemlvbmUnIHwgJ3Byb3ZpbmNpYScgfCAnY29tdW5lJyxcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBwcm92aW5jaWFJZD86IHN0cmluZyxcclxuICApOiBQcm9taXNlPFVpTmF6aW9uZSB8IFVpUHJvdmluY2lhIHwgVWlDb211bmUgfCBudWxsPiB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnbmF6aW9uZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmF6aW9uaUNhY2hlLmdldChpZCkgPz8gbnVsbDtcclxuICAgICAgY2FzZSAncHJvdmluY2lhJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm92aW5jZUNhY2hlLmdldChpZCkgPz8gbnVsbDtcclxuICAgICAgY2FzZSAnY29tdW5lJzoge1xyXG4gICAgICAgIGlmICghcHJvdmluY2lhSWQpIHJldHVybiB0aGlzLmNvbXVuaUNhY2hlLmdldChpZCkgPz8gbnVsbDtcclxuICAgICAgICBjb25zdCBjb211bmkgPSBhd2FpdCB0aGlzLmdldENvbXVuaUJ5UHJvdmluY2lhKHByb3ZpbmNpYUlkKTtcclxuICAgICAgICByZXR1cm4gY29tdW5pLmZpbmQoKGMpID0+IGMuY29kaWNlQ29tdW5lUGsgPT09IGlkKSA/PyBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgSW5pemlhbGl6emF6aW9uZSBjYWNoZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2FjaGVzKCk6IHZvaWQge1xyXG4gICAgLy8gTmF6aW9uaVxyXG4gICAgZm9yIChjb25zdCBuIG9mIHRoaXMubmF6aW9uaU1hcC5uYXppb25pKSB7XHJcbiAgICAgIHRoaXMubmF6aW9uaUNhY2hlLnNldChuLngsIHtcclxuICAgICAgICBjb2RTdGF0b1BrOiBuLngsXHJcbiAgICAgICAgY29kaWNlQ2F0YXN0YWxlOiBuLngsXHJcbiAgICAgICAgZGVzY3JpemlvbmU6IG4uZCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJvdmluY2VcclxuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLmxvY2F0aW9uTWFwLnByb3ZpbmNlKSB7XHJcbiAgICAgIHRoaXMucHJvdmluY2VDYWNoZS5zZXQocC54LCB7XHJcbiAgICAgICAgY29kaWNlUHJvdmluY2lhUGs6IHAueCxcclxuICAgICAgICBub21lUHJvdmluY2lhOiBwLmQsXHJcbiAgICAgICAgc2lnbGFQcm92aW5jaWE6IHAueCxcclxuICAgICAgICB2aXNpYmlsZTogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29tdW5pIChjb24gcmlmZXJpbWVudG8gYWxsYSBwcm92aW5jaWEpXHJcbiAgICBmb3IgKGNvbnN0IFtwcm92aW5jaWFJZCwgY29tdW5pXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmxvY2F0aW9uTWFwLmNvbXVuaVBlclByb3ZpbmNpYSkpIHtcclxuICAgICAgY29uc3QgcHJvdmluY2lhID0gdGhpcy5wcm92aW5jZUNhY2hlLmdldChwcm92aW5jaWFJZCk7XHJcbiAgICAgIGlmICghcHJvdmluY2lhKSBjb250aW51ZTtcclxuICAgICAgZm9yIChjb25zdCBjIG9mIGNvbXVuaSkge1xyXG4gICAgICAgIHRoaXMuY29tdW5pQ2FjaGUuc2V0KGMueCwge1xyXG4gICAgICAgICAgY29kaWNlQ2F0YXN0YWxlOiBjLngsXHJcbiAgICAgICAgICBjb2RpY2VDb211bmVQazogYy54LFxyXG4gICAgICAgICAgY29tdW5lU29wcHJlc3NvOiBmYWxzZSxcclxuICAgICAgICAgIG5vbWVDb211bmU6IGMuZCxcclxuICAgICAgICAgIHByb3Y6IHByb3ZpbmNpYSxcclxuICAgICAgICAgIHZpc2liaWxlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnROYXppb25pSXRhbGlhRmlyc3QobmF6aW9uaTogVWlOYXppb25lW10pOiBVaU5hemlvbmVbXSB7XHJcbiAgICByZXR1cm4gbmF6aW9uaS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFJdGFsaWEgPSBhLmRlc2NyaXppb25lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpdGFsaWEnKSB8fCBhLmNvZFN0YXRvUGsgPT09ICdJVEEnO1xyXG4gICAgICBjb25zdCBiSXRhbGlhID0gYi5kZXNjcml6aW9uZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaXRhbGlhJykgfHwgYi5jb2RTdGF0b1BrID09PSAnSVRBJztcclxuICAgICAgaWYgKGFJdGFsaWEgJiYgIWJJdGFsaWEpIHJldHVybiAtMTtcclxuICAgICAgaWYgKCFhSXRhbGlhICYmIGJJdGFsaWEpIHJldHVybiAxO1xyXG4gICAgICByZXR1cm4gKGEuZGVzY3JpemlvbmUgfHwgJycpLmxvY2FsZUNvbXBhcmUoYi5kZXNjcml6aW9uZSB8fCAnJywgJ2l0JywgeyBzZW5zaXRpdml0eTogJ2Jhc2UnIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==