@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 @@
1
+ {"version":3,"file":"gnggln-ng-ui-system-blackbox.mjs","sources":["../../../packages/ng-ui-system/src/lib/components/blackbox/blackbox.types.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/blackbox-fingerprint.service.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/blackbox-storage.service.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/blackbox.service.ts","../../../packages/ng-ui-system/src/lib/components/modal/modal.component.ts","../../../packages/ng-ui-system/src/lib/components/button/button.component.ts","../../../packages/ng-ui-system/src/lib/components/modal/confirm-dialog.component.ts","../../../packages/ng-ui-system/src/lib/components/modal/modal.service.ts","../../../packages/ng-ui-system/src/lib/components/button/button-area.component.ts","../../../packages/ng-ui-system/src/lib/components/button/index.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/blackbox-json-viewer.component.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/blackbox-debugger.component.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/blackbox-debugger.service.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/blackbox.interceptor.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/ui-track.directive.ts","../../../packages/ng-ui-system/src/lib/components/blackbox/index.ts","../../../packages/ng-ui-system/src/entry-blackbox.ts","../../../packages/ng-ui-system/src/gnggln-ng-ui-system-blackbox.ts"],"sourcesContent":["/**\r\n * @module ng-ui-system/blackbox\r\n * Types and interfaces for the BlackBox observability service.\r\n *\r\n * The BlackBox service acts as a \"black box recorder\" for user sessions,\r\n * capturing navigation, UI interactions, form events and HTTP calls\r\n * in a compressed, opaque format stored in IndexedDB.\r\n */\r\n\r\n// ─── Configuration ───────────────────────────────────────────────────\r\n\r\n/**\r\n * Form tracking granularity flags.\r\n *\r\n * Controls which form events are captured by the BlackBox service.\r\n * All flags default to `true` except `trackValues` which defaults to `false`\r\n * for privacy reasons.\r\n */\r\nexport interface UiBlackboxFormTrackingConfig {\r\n /**\r\n * When `true`, the actual field values are stored in form events.\r\n * When `false`, only the fact that a change occurred is recorded.\r\n * @default false\r\n */\r\n trackValues: boolean;\r\n\r\n /** Track focus events on form fields. @default true */\r\n trackFocus: boolean;\r\n\r\n /** Track blur events on form fields. @default true */\r\n trackBlur: boolean;\r\n\r\n /** Track value change events on form fields. @default true */\r\n trackValueChanges: boolean;\r\n\r\n /** Track validation error events on form fields. @default true */\r\n trackValidation: boolean;\r\n\r\n /**\r\n * Debounce interval (ms) for `valueChanges` subscriptions.\r\n * Higher values reduce noise but increase latency.\r\n * @default 500\r\n */\r\n debounceMs: number;\r\n}\r\n\r\n/**\r\n * Root configuration for the BlackBox service.\r\n *\r\n * All properties are optional — sensible defaults are applied when omitted.\r\n *\r\n * @example\r\n * ```typescript\r\n * blackboxService.configure({\r\n * maxStorageMb: 30,\r\n * formTracking: { trackValues: true, debounceMs: 1000 },\r\n * });\r\n * ```\r\n */\r\nexport interface UiBlackboxConfig {\r\n /**\r\n * Maximum IndexedDB storage quota in megabytes.\r\n * Oldest sessions are pruned when the quota is exceeded.\r\n * @default 50\r\n */\r\n maxStorageMb: number;\r\n\r\n /**\r\n * Interval (ms) at which the in-memory buffer is flushed to IndexedDB.\r\n * @default 5000\r\n */\r\n flushIntervalMs: number;\r\n\r\n /**\r\n * Number of buffered events that trigger an immediate flush.\r\n * @default 20\r\n */\r\n flushThreshold: number;\r\n\r\n /**\r\n * Centralised debounce (ms) applied to the event buffer.\r\n * @default 500\r\n */\r\n bufferDebounceMs: number;\r\n\r\n /** Per-field form tracking configuration. */\r\n formTracking: UiBlackboxFormTrackingConfig;\r\n}\r\n\r\n// ─── Fingerprint ─────────────────────────────────────────────────────\r\n\r\n/**\r\n * Stable device/browser fingerprint generated by FingerprintJS (open-source).\r\n * Persists across sessions and incognito mode.\r\n */\r\nexport type UiBlackboxFingerprint = string;\r\n\r\n// ─── Session ─────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A single recording session, corresponding to one browser tab lifecycle.\r\n *\r\n * Sessions are associated to a stable `fingerprint` so that multiple\r\n * sessions from the same device can be grouped together.\r\n */\r\nexport interface UiBlackboxSession {\r\n /** Unique session identifier (UUID v4). */\r\n sessionId: string;\r\n\r\n /** Stable device/browser fingerprint. */\r\n fingerprint: UiBlackboxFingerprint;\r\n\r\n /** Timestamp (ms since epoch) when the session started. */\r\n startedAt: number;\r\n\r\n /** Timestamp (ms since epoch) when the session ended (tab closed). */\r\n endedAt?: number;\r\n\r\n /** Raw `navigator.userAgent` string captured at session start. */\r\n userAgent: string;\r\n\r\n /**\r\n * Ordered list of navigation steps (route changes).\r\n * Each step contains the actions performed on that page.\r\n */\r\n steps: UiBlackboxStep[];\r\n\r\n /**\r\n * Parallel stream of form interaction events.\r\n * Ordered by timestamp, correlated to routes via `route` field.\r\n */\r\n formEvents: UiBlackboxFormEvent[];\r\n\r\n /**\r\n * Intercepted HTTP calls, ordered by timestamp.\r\n * Only requests explicitly marked with the `X-Ui-Blackbox` header.\r\n */\r\n calls: UiBlackboxHttpCall[];\r\n}\r\n\r\n// ─── Step (Route Change) ─────────────────────────────────────────────\r\n\r\n/**\r\n * A single navigation step created on every `NavigationEnd` event.\r\n * Contains all UI actions performed during this route.\r\n */\r\nexport interface UiBlackboxStep {\r\n /** Timestamp (ms) of the navigation event. */\r\n timestamp: number;\r\n\r\n /** The route URL navigated to. */\r\n route: string;\r\n\r\n /** The previous route URL (undefined for the first step). */\r\n previousRoute?: string;\r\n\r\n /**\r\n * Ordered list of UI actions (clicks) performed on this page.\r\n */\r\n actions: UiBlackboxAction[];\r\n}\r\n\r\n// ─── Action (UI Click) ──────────────────────────────────────────────\r\n\r\n/**\r\n * A single tracked UI action, typically a click.\r\n */\r\nexport interface UiBlackboxAction {\r\n /** Timestamp (ms) of the action. */\r\n timestamp: number;\r\n\r\n /** Type discriminator. Currently only `click` is supported. */\r\n type: 'click';\r\n\r\n /** Information about the clicked element. */\r\n target: UiBlackboxActionTarget;\r\n}\r\n\r\n/**\r\n * Minimal information about the element that was interacted with.\r\n */\r\nexport interface UiBlackboxActionTarget {\r\n /** HTML tag name (lowercase). */\r\n tag: string;\r\n\r\n /** Element `id` attribute, if present. */\r\n id?: string;\r\n\r\n /**\r\n * Custom tracking identifier, set via `data-track-id` attribute\r\n * or the `[uiTrack]` directive value.\r\n */\r\n trackId?: string;\r\n\r\n /** First 50 characters of `innerText` (trimmed). */\r\n text?: string;\r\n}\r\n\r\n// ─── Form Event ──────────────────────────────────────────────────────\r\n\r\n/** Discriminator for form event types. */\r\nexport type UiBlackboxFormEventType =\r\n | 'focus'\r\n | 'blur'\r\n | 'valueChange'\r\n | 'validationError';\r\n\r\n/**\r\n * A single form interaction event from the parallel form stream.\r\n *\r\n * Each event is timestamped and tagged with the current route, allowing\r\n * correlation with navigation steps on a shared timeline.\r\n */\r\nexport interface UiBlackboxFormEvent {\r\n /** Timestamp (ms) of the event. */\r\n timestamp: number;\r\n\r\n /** Route URL where the event occurred. */\r\n route: string;\r\n\r\n /** Schema `id` of the `UiFormBuilderComponent` that owns the field. */\r\n formId: string;\r\n\r\n /** `key` of the field descriptor from the form schema. */\r\n fieldKey: string;\r\n\r\n /** Type of form interaction. */\r\n eventType: UiBlackboxFormEventType;\r\n\r\n /** Optional metadata depending on event type and config. */\r\n metadata?: UiBlackboxFormEventMetadata;\r\n}\r\n\r\n/**\r\n * Optional metadata attached to a `UiBlackboxFormEvent`.\r\n */\r\nexport interface UiBlackboxFormEventMetadata {\r\n /** Field value (only captured when `config.formTracking.trackValues` is `true`). */\r\n value?: any;\r\n\r\n /** Whether the field is currently valid. */\r\n valid?: boolean;\r\n\r\n /** List of active validation error keys. */\r\n errors?: string[];\r\n\r\n /**\r\n * Full form values snapshot at the moment of the event.\r\n * Only captured when `config.formTracking.trackValues` is `true`.\r\n */\r\n formValues?: Record<string, any>;\r\n}\r\n\r\n// ─── HTTP Call ────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A single intercepted HTTP call.\r\n *\r\n * Only requests bearing the `X-Ui-Blackbox` header are captured.\r\n */\r\nexport interface UiBlackboxHttpCall {\r\n /** Timestamp (ms) when the request was initiated. */\r\n timestamp: number;\r\n\r\n /** HTTP method (GET, POST, PUT, DELETE, …). */\r\n method: string;\r\n\r\n /** Request URL. */\r\n url: string;\r\n\r\n /** HTTP status code of the response (undefined if the request failed). */\r\n status?: number;\r\n\r\n /** Round-trip duration in milliseconds. */\r\n durationMs?: number;\r\n\r\n /** Request body payload (serialisable). */\r\n requestPayload?: any;\r\n\r\n /** Response headers filtered by the `X-Ui-Blackbox-Headers` regex. */\r\n responseHeaders?: Record<string, string>;\r\n\r\n /** The regex pattern used to filter response headers. */\r\n headerFilter?: string;\r\n}\r\n\r\n// ─── Internal Buffer Event ───────────────────────────────────────────\r\n\r\n/**\r\n * Union type for all events flowing through the centralised buffer.\r\n * @internal\r\n */\r\nexport type UiBlackboxBufferEvent =\r\n | { kind: 'action'; payload: UiBlackboxAction & { route: string } }\r\n | { kind: 'formEvent'; payload: UiBlackboxFormEvent }\r\n | { kind: 'httpCall'; payload: UiBlackboxHttpCall }\r\n | { kind: 'step'; payload: UiBlackboxStep };\r\n\r\n// ─── Defaults ────────────────────────────────────────────────────────\r\n\r\n/** Default configuration values. */\r\nexport const UI_BLACKBOX_DEFAULTS: UiBlackboxConfig = {\r\n maxStorageMb: 50,\r\n flushIntervalMs: 5000,\r\n flushThreshold: 20,\r\n bufferDebounceMs: 500,\r\n formTracking: {\r\n trackValues: false,\r\n trackFocus: true,\r\n trackBlur: true,\r\n trackValueChanges: true,\r\n trackValidation: true,\r\n debounceMs: 500,\r\n },\r\n};\r\n","/**\r\n * @module ng-ui-system/blackbox\r\n * Fingerprint service — generates a stable device/browser hash\r\n * using the open-source FingerprintJS library (MIT, no API key required).\r\n *\r\n * The fingerprint is computed once and cached in `localStorage` under\r\n * the key `__ui_bb_fp` to avoid redundant recalculations.\r\n */\r\n\r\nimport { Injectable, inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport type { UiBlackboxFingerprint } from './blackbox.types';\r\n\r\n/** localStorage key for the cached fingerprint. */\r\nconst FP_CACHE_KEY = '__ui_bb_fp';\r\n\r\n/**\r\n * Generates and caches a stable browser/device fingerprint.\r\n *\r\n * Uses `@fingerprintjs/fingerprintjs` (open-source, MIT) which analyses\r\n * canvas rendering, WebGL, audio context, screen properties, timezone,\r\n * user-agent, and other browser signals to produce a stable hash.\r\n *\r\n * @usageNotes\r\n * ```typescript\r\n * const fp = inject(UiBlackboxFingerprintService);\r\n * const hash = await fp.getFingerprint();\r\n * // => \"a1b2c3d4e5f6...\" (stable across sessions)\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class UiBlackboxFingerprintService {\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private cached: UiBlackboxFingerprint | null = null;\r\n\r\n /**\r\n * Returns the stable fingerprint for this device/browser.\r\n *\r\n * On first call, loads FingerprintJS dynamically, computes the hash,\r\n * and caches it in both memory and `localStorage`.\r\n * Subsequent calls return the cached value immediately.\r\n */\r\n async getFingerprint(): Promise<UiBlackboxFingerprint> {\r\n // Return cached value if available\r\n if (this.cached) {\r\n return this.cached;\r\n }\r\n\r\n // SSR guard\r\n if (!isPlatformBrowser(this.platformId)) {\r\n return 'ssr-placeholder';\r\n }\r\n\r\n // Try localStorage cache first\r\n try {\r\n const stored = localStorage.getItem(FP_CACHE_KEY);\r\n if (stored) {\r\n this.cached = stored;\r\n return stored;\r\n }\r\n } catch {\r\n // localStorage may be unavailable (privacy mode, quota exceeded)\r\n }\r\n\r\n // Compute fingerprint via FingerprintJS\r\n try {\r\n const FingerprintJS = await import('@fingerprintjs/fingerprintjs');\r\n const agent = await FingerprintJS.load();\r\n const result = await agent.get();\r\n this.cached = result.visitorId;\r\n\r\n // Persist to localStorage\r\n try {\r\n localStorage.setItem(FP_CACHE_KEY, this.cached);\r\n } catch {\r\n // Silently ignore storage errors\r\n }\r\n\r\n return this.cached;\r\n } catch {\r\n // Fallback: generate a pseudo-fingerprint from available signals\r\n const fallback = this.generateFallbackFingerprint();\r\n this.cached = fallback;\r\n\r\n try {\r\n localStorage.setItem(FP_CACHE_KEY, fallback);\r\n } catch {\r\n // Silently ignore\r\n }\r\n\r\n return fallback;\r\n }\r\n }\r\n\r\n /**\r\n * Fallback fingerprint when FingerprintJS is unavailable.\r\n * Combines basic browser signals into a hash.\r\n * @internal\r\n */\r\n private generateFallbackFingerprint(): string {\r\n const signals = [\r\n navigator.userAgent,\r\n navigator.language,\r\n screen.width + 'x' + screen.height,\r\n screen.colorDepth?.toString() ?? '',\r\n Intl.DateTimeFormat().resolvedOptions().timeZone,\r\n navigator.hardwareConcurrency?.toString() ?? '',\r\n ].join('|');\r\n\r\n // Simple string hash (djb2)\r\n let hash = 5381;\r\n for (let i = 0; i < signals.length; i++) {\r\n hash = ((hash << 5) + hash + signals.charCodeAt(i)) >>> 0;\r\n }\r\n return hash.toString(36).padStart(12, '0');\r\n }\r\n}\r\n","/**\r\n * @module ng-ui-system/blackbox\r\n * IndexedDB storage adapter for BlackBox sessions.\r\n *\r\n * Handles persistence, compression (via native CompressionStream gzip),\r\n * quota enforcement, and JSONL export.\r\n *\r\n * Design notes:\r\n * - DB name: `ui-blackbox`, object store: `sessions`\r\n * - Each session is gzip-compressed before storage for both size\r\n * reduction and inherent obfuscation\r\n * - Quota enforced by total stored size; oldest sessions are pruned first\r\n */\r\n\r\nimport { Injectable, inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport type { UiBlackboxSession, UiBlackboxConfig } from './blackbox.types';\r\nimport { UI_BLACKBOX_DEFAULTS } from './blackbox.types';\r\n\r\nconst DB_NAME = 'ui-blackbox';\r\nconst DB_VERSION = 1;\r\nconst STORE_NAME = 'sessions';\r\n\r\n/**\r\n * Low-level IndexedDB adapter for reading/writing compressed BlackBox sessions.\r\n *\r\n * @usageNotes\r\n * This service is used internally by `UiBlackboxService`.\r\n * Consumers should interact with the higher-level `UiBlackboxService` API.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class UiBlackboxStorageService {\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private db: IDBDatabase | null = null;\r\n private maxStorageMb = UI_BLACKBOX_DEFAULTS.maxStorageMb;\r\n\r\n // ─── Configuration ─────────────────────────────────────────────────\r\n\r\n /** Update the storage quota from the parent service config. */\r\n setMaxStorageMb(mb: number): void {\r\n this.maxStorageMb = mb;\r\n }\r\n\r\n // ─── Database lifecycle ────────────────────────────────────────────\r\n\r\n /** Open (or create) the IndexedDB database. */\r\n private async openDb(): Promise<IDBDatabase> {\r\n if (this.db) return this.db;\r\n if (!isPlatformBrowser(this.platformId)) {\r\n throw new Error('IndexedDB is not available in SSR');\r\n }\r\n\r\n return new Promise<IDBDatabase>((resolve, reject) => {\r\n const request = indexedDB.open(DB_NAME, DB_VERSION);\r\n\r\n request.onupgradeneeded = () => {\r\n const db = request.result;\r\n if (!db.objectStoreNames.contains(STORE_NAME)) {\r\n const store = db.createObjectStore(STORE_NAME, { keyPath: 'sessionId' });\r\n store.createIndex('fingerprint', 'fingerprint', { unique: false });\r\n store.createIndex('startedAt', 'startedAt', { unique: false });\r\n }\r\n };\r\n\r\n request.onsuccess = () => {\r\n this.db = request.result;\r\n resolve(this.db);\r\n };\r\n\r\n request.onerror = () => reject(request.error);\r\n });\r\n }\r\n\r\n // ─── Compression helpers ───────────────────────────────────────────\r\n\r\n /** Compress a string to a gzip Uint8Array using native CompressionStream. */\r\n private async compress(data: string): Promise<Uint8Array> {\r\n const encoder = new TextEncoder();\r\n const stream = new Blob([encoder.encode(data) as BlobPart])\r\n .stream()\r\n .pipeThrough(new CompressionStream('gzip'));\r\n\r\n const reader = stream.getReader();\r\n const chunks: Uint8Array[] = [];\r\n let done = false;\r\n\r\n while (!done) {\r\n const result = await reader.read();\r\n done = result.done;\r\n if (result.value) {\r\n chunks.push(result.value);\r\n }\r\n }\r\n\r\n // Merge chunks into a single ArrayBuffer-backed Uint8Array\r\n const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);\r\n const buffer = new ArrayBuffer(totalLength);\r\n const merged = new Uint8Array(buffer);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n merged.set(chunk, offset);\r\n offset += chunk.length;\r\n }\r\n return merged;\r\n }\r\n\r\n /** Decompress a gzip Uint8Array back to a string. */\r\n private async decompress(data: Uint8Array): Promise<string> {\r\n const stream = new Blob([data as BlobPart])\r\n .stream()\r\n .pipeThrough(new DecompressionStream('gzip'));\r\n\r\n const reader = stream.getReader();\r\n const decoder = new TextDecoder();\r\n let result = '';\r\n let done = false;\r\n\r\n while (!done) {\r\n const chunk = await reader.read();\r\n done = chunk.done;\r\n if (chunk.value) {\r\n result += decoder.decode(chunk.value, { stream: !done });\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n // ─── CRUD ──────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Persist a session to IndexedDB (gzip-compressed).\r\n * Enforces quota after saving.\r\n */\r\n async saveSession(session: UiBlackboxSession): Promise<void> {\r\n const db = await this.openDb();\r\n const json = JSON.stringify(session);\r\n const compressed = await this.compress(json);\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const store = tx.objectStore(STORE_NAME);\r\n\r\n // Store as { sessionId, fingerprint, startedAt, data: Uint8Array }\r\n store.put({\r\n sessionId: session.sessionId,\r\n fingerprint: session.fingerprint,\r\n startedAt: session.startedAt,\r\n sizeBytes: compressed.byteLength,\r\n data: compressed,\r\n });\r\n\r\n tx.oncomplete = () => {\r\n this.enforceQuota().then(resolve).catch(resolve);\r\n };\r\n tx.onerror = () => reject(tx.error);\r\n });\r\n }\r\n\r\n /**\r\n * Read and decompress a single session by ID.\r\n */\r\n async getSession(sessionId: string): Promise<UiBlackboxSession | null> {\r\n const db = await this.openDb();\r\n\r\n return new Promise((resolve, reject) => {\r\n const tx = db.transaction(STORE_NAME, 'readonly');\r\n const store = tx.objectStore(STORE_NAME);\r\n const req = store.get(sessionId);\r\n\r\n req.onsuccess = async () => {\r\n if (!req.result) {\r\n resolve(null);\r\n return;\r\n }\r\n try {\r\n const json = await this.decompress(req.result.data);\r\n resolve(JSON.parse(json));\r\n } catch (e) {\r\n reject(e);\r\n }\r\n };\r\n req.onerror = () => reject(req.error);\r\n });\r\n }\r\n\r\n /**\r\n * Get all stored sessions (decompressed).\r\n */\r\n async getAllSessions(): Promise<UiBlackboxSession[]> {\r\n const db = await this.openDb();\r\n\r\n return new Promise((resolve, reject) => {\r\n const tx = db.transaction(STORE_NAME, 'readonly');\r\n const store = tx.objectStore(STORE_NAME);\r\n const req = store.getAll();\r\n\r\n req.onsuccess = async () => {\r\n try {\r\n const sessions: UiBlackboxSession[] = [];\r\n for (const record of req.result) {\r\n const json = await this.decompress(record.data);\r\n sessions.push(JSON.parse(json));\r\n }\r\n resolve(sessions);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n };\r\n req.onerror = () => reject(req.error);\r\n });\r\n }\r\n\r\n /**\r\n * Get all sessions for a given fingerprint.\r\n */\r\n async getSessionsByFingerprint(fingerprint: string): Promise<UiBlackboxSession[]> {\r\n const db = await this.openDb();\r\n\r\n return new Promise((resolve, reject) => {\r\n const tx = db.transaction(STORE_NAME, 'readonly');\r\n const store = tx.objectStore(STORE_NAME);\r\n const index = store.index('fingerprint');\r\n const req = index.getAll(fingerprint);\r\n\r\n req.onsuccess = async () => {\r\n try {\r\n const sessions: UiBlackboxSession[] = [];\r\n for (const record of req.result) {\r\n const json = await this.decompress(record.data);\r\n sessions.push(JSON.parse(json));\r\n }\r\n resolve(sessions);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n };\r\n req.onerror = () => reject(req.error);\r\n });\r\n }\r\n\r\n /**\r\n * Generate a downloadable JSONL Blob of all sessions.\r\n * Each line is one JSON-serialised session (decompressed).\r\n */\r\n async exportDump(): Promise<Blob> {\r\n const sessions = await this.getAllSessions();\r\n const lines = sessions.map((s) => JSON.stringify(s)).join('\\n');\r\n return new Blob([lines], { type: 'application/x-ndjson' });\r\n }\r\n\r\n /**\r\n * Delete all stored sessions.\r\n */\r\n async clearAll(): Promise<void> {\r\n const db = await this.openDb();\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const store = tx.objectStore(STORE_NAME);\r\n store.clear();\r\n tx.oncomplete = () => resolve();\r\n tx.onerror = () => reject(tx.error);\r\n });\r\n }\r\n\r\n // ─── Quota enforcement ─────────────────────────────────────────────\r\n\r\n /**\r\n * Prune oldest sessions until total stored size is under `maxStorageMb`.\r\n * @internal\r\n */\r\n async enforceQuota(): Promise<void> {\r\n const db = await this.openDb();\r\n const maxBytes = this.maxStorageMb * 1024 * 1024;\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const store = tx.objectStore(STORE_NAME);\r\n const index = store.index('startedAt');\r\n\r\n // Collect all records sorted by startedAt (ascending = oldest first)\r\n const cursorReq = index.openCursor();\r\n const records: { key: IDBValidKey; size: number }[] = [];\r\n let totalSize = 0;\r\n\r\n cursorReq.onsuccess = () => {\r\n const cursor = cursorReq.result;\r\n if (cursor) {\r\n const size: number = cursor.value.sizeBytes || 0;\r\n totalSize += size;\r\n records.push({ key: cursor.primaryKey, size });\r\n cursor.continue();\r\n } else {\r\n // Cursor exhausted — prune if over quota\r\n if (totalSize <= maxBytes) {\r\n resolve();\r\n return;\r\n }\r\n\r\n let freed = 0;\r\n const target = totalSize - maxBytes;\r\n for (const record of records) {\r\n if (freed >= target) break;\r\n store.delete(record.key);\r\n freed += record.size;\r\n }\r\n resolve();\r\n }\r\n };\r\n\r\n cursorReq.onerror = () => reject(cursorReq.error);\r\n tx.onerror = () => reject(tx.error);\r\n });\r\n }\r\n}\r\n","/**\r\n * @module ng-ui-system/blackbox\r\n * Core BlackBox observability service — the main entry point for session\r\n * recording, event buffering, and export.\r\n *\r\n * Architecture:\r\n * - Root singleton (`providedIn: 'root'`)\r\n * - On first inject: generates fingerprint, creates session, subscribes to Router events\r\n * - Centralised in-memory buffer with periodic/threshold-based flush to IndexedDB\r\n * - `window:beforeunload` triggers a final best-effort async flush\r\n */\r\n\r\nimport {\r\n Injectable,\r\n inject,\r\n PLATFORM_ID,\r\n OnDestroy,\r\n NgZone,\r\n} from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { Subject } from 'rxjs';\r\nimport { filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport {\r\n UiBlackboxConfig,\r\n UiBlackboxFormTrackingConfig,\r\n UiBlackboxSession,\r\n UiBlackboxStep,\r\n UiBlackboxAction,\r\n UiBlackboxFormEvent,\r\n UiBlackboxHttpCall,\r\n UiBlackboxBufferEvent,\r\n UI_BLACKBOX_DEFAULTS,\r\n} from './blackbox.types';\r\nimport { UiBlackboxFingerprintService } from './blackbox-fingerprint.service';\r\nimport { UiBlackboxStorageService } from './blackbox-storage.service';\r\n\r\n/**\r\n * Central BlackBox observability service.\r\n *\r\n * Records navigation, UI interactions, form events, and HTTP calls\r\n * into compressed sessions stored in IndexedDB.\r\n *\r\n * @usageNotes\r\n * The service activates automatically when injected. Provide it at root level\r\n * and it will start recording immediately.\r\n *\r\n * ```typescript\r\n * // app.config.ts — just importing the service is enough\r\n * import { UiBlackboxService } from '@gnggln/ng-ui-system';\r\n *\r\n * export const appConfig: ApplicationConfig = {\r\n * providers: [\r\n * // The service is providedIn: 'root', so it's auto-provided.\r\n * // To force eager initialisation:\r\n * { provide: APP_INITIALIZER, useFactory: () => () => inject(UiBlackboxService), multi: true },\r\n * ],\r\n * };\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class UiBlackboxService implements OnDestroy {\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly router = inject(Router);\r\n private readonly zone = inject(NgZone);\r\n private readonly fingerprint = inject(UiBlackboxFingerprintService);\r\n private readonly storage = inject(UiBlackboxStorageService);\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n private config: UiBlackboxConfig = { ...UI_BLACKBOX_DEFAULTS };\r\n\r\n // ─── Session state ─────────────────────────────────────────────────\r\n private session!: UiBlackboxSession;\r\n private currentStep: UiBlackboxStep | null = null;\r\n private initialised = false;\r\n\r\n // ─── Centralised event buffer ──────────────────────────────────────\r\n private buffer: UiBlackboxBufferEvent[] = [];\r\n private flushTimerId: ReturnType<typeof setInterval> | null = null;\r\n private beforeUnloadHandler: (() => void) | null = null;\r\n\r\n constructor() {\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.init();\r\n }\r\n }\r\n\r\n // ─── Initialisation ────────────────────────────────────────────────\r\n\r\n private async init(): Promise<void> {\r\n // Generate session ID\r\n const sessionId = this.generateUuid();\r\n const fp = await this.fingerprint.getFingerprint();\r\n\r\n this.session = {\r\n sessionId,\r\n fingerprint: fp,\r\n startedAt: Date.now(),\r\n userAgent: navigator.userAgent,\r\n steps: [],\r\n formEvents: [],\r\n calls: [],\r\n };\r\n\r\n // Create initial step from current URL\r\n this.currentStep = {\r\n timestamp: Date.now(),\r\n route: this.router.url,\r\n actions: [],\r\n };\r\n this.session.steps.push(this.currentStep);\r\n\r\n // Subscribe to router navigation\r\n this.router.events\r\n .pipe(\r\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\r\n takeUntil(this.destroy$),\r\n )\r\n .subscribe((event) => {\r\n const previousRoute = this.currentStep?.route;\r\n this.currentStep = {\r\n timestamp: Date.now(),\r\n route: event.urlAfterRedirects,\r\n previousRoute,\r\n actions: [],\r\n };\r\n this.pushBufferEvent({ kind: 'step', payload: this.currentStep });\r\n });\r\n\r\n // Setup periodic flush (outside Angular zone to avoid triggering CD)\r\n this.zone.runOutsideAngular(() => {\r\n this.flushTimerId = setInterval(\r\n () => this.flush(),\r\n this.config.flushIntervalMs,\r\n );\r\n\r\n // Best-effort flush on tab close (IndexedDB is async, no sync fallback)\r\n this.beforeUnloadHandler = () => {\r\n this.session.endedAt = Date.now();\r\n void this.flush();\r\n };\r\n window.addEventListener('beforeunload', this.beforeUnloadHandler);\r\n });\r\n\r\n this.initialised = true;\r\n }\r\n\r\n // ─── Public API: Configuration ─────────────────────────────────────\r\n\r\n /**\r\n * Update the BlackBox configuration.\r\n * Can be called at any time; changes take effect immediately.\r\n */\r\n configure(config: Partial<Omit<UiBlackboxConfig, 'formTracking'>> & { formTracking?: Partial<UiBlackboxFormTrackingConfig> }): void {\r\n this.config = {\r\n ...this.config,\r\n ...config,\r\n formTracking: {\r\n ...this.config.formTracking,\r\n ...(config.formTracking ?? {}),\r\n },\r\n };\r\n this.storage.setMaxStorageMb(this.config.maxStorageMb);\r\n\r\n // Restart flush timer with new interval\r\n if (this.flushTimerId !== null) {\r\n clearInterval(this.flushTimerId);\r\n this.zone.runOutsideAngular(() => {\r\n this.flushTimerId = setInterval(\r\n () => this.flush(),\r\n this.config.flushIntervalMs,\r\n );\r\n });\r\n }\r\n }\r\n\r\n /** Returns the current configuration (readonly snapshot). */\r\n getConfig(): Readonly<UiBlackboxConfig> {\r\n return { ...this.config };\r\n }\r\n\r\n // ─── Public API: Tracking ──────────────────────────────────────────\r\n\r\n /**\r\n * Manually track a UI action (click).\r\n *\r\n * Called automatically by `UiButtonAreaComponent` and the `[uiTrack]` directive.\r\n * Can also be called programmatically for custom interactions.\r\n *\r\n * @param trackId - Identifier for the action (e.g. button id, link name).\r\n * @param meta - Optional metadata: `tag`, `text`, `id` of the element.\r\n */\r\n trackAction(\r\n trackId: string,\r\n meta?: { tag?: string; text?: string; id?: string },\r\n ): void {\r\n if (!this.initialised) return;\r\n\r\n const action: UiBlackboxAction = {\r\n timestamp: Date.now(),\r\n type: 'click',\r\n target: {\r\n tag: meta?.tag ?? 'unknown',\r\n id: meta?.id,\r\n trackId,\r\n text: meta?.text?.substring(0, 50),\r\n },\r\n };\r\n\r\n // Add to current step immediately (for in-memory session access)\r\n this.currentStep?.actions.push(action);\r\n\r\n // Also push to buffer for persistence\r\n this.pushBufferEvent({\r\n kind: 'action',\r\n payload: { ...action, route: this.currentStep?.route ?? this.router.url },\r\n });\r\n }\r\n\r\n /**\r\n * Track a form interaction event.\r\n *\r\n * Called automatically by `UiFormBuilderComponent` when the BlackBox\r\n * service is available.\r\n */\r\n trackFormEvent(event: UiBlackboxFormEvent): void {\r\n if (!this.initialised) return;\r\n\r\n this.session.formEvents.push(event);\r\n this.pushBufferEvent({ kind: 'formEvent', payload: event });\r\n }\r\n\r\n /**\r\n * Track an intercepted HTTP call.\r\n * Called by `UiBlackboxInterceptor`.\r\n * @internal\r\n */\r\n trackHttpCall(call: UiBlackboxHttpCall): void {\r\n if (!this.initialised) return;\r\n\r\n this.session.calls.push(call);\r\n this.pushBufferEvent({ kind: 'httpCall', payload: call });\r\n }\r\n\r\n // ─── Public API: Session access ────────────────────────────────────\r\n\r\n /**\r\n * Returns the current in-memory session (live, not yet flushed).\r\n * Useful for debugging or real-time inspection.\r\n */\r\n getCurrentSession(): UiBlackboxSession {\r\n return this.session;\r\n }\r\n\r\n /**\r\n * Retrieve all sessions stored in IndexedDB (decompressed).\r\n */\r\n async getSessionHistory(): Promise<UiBlackboxSession[]> {\r\n return this.storage.getAllSessions();\r\n }\r\n\r\n /**\r\n * Retrieve sessions for the current device fingerprint.\r\n */\r\n async getSessionsForDevice(): Promise<UiBlackboxSession[]> {\r\n const fp = await this.fingerprint.getFingerprint();\r\n return this.storage.getSessionsByFingerprint(fp);\r\n }\r\n\r\n // ─── Public API: Export ────────────────────────────────────────────\r\n\r\n /**\r\n * Export all sessions as a downloadable JSONL Blob.\r\n *\r\n * @returns A Blob containing JSONL data (one session per line).\r\n *\r\n * @example\r\n * ```typescript\r\n * const blob = await blackbox.exportSessions();\r\n * const url = URL.createObjectURL(blob);\r\n * const a = document.createElement('a');\r\n * a.href = url;\r\n * a.download = 'blackbox-sessions.jsonl';\r\n * a.click();\r\n * ```\r\n */\r\n async exportSessions(): Promise<Blob> {\r\n // Flush current session first\r\n await this.flush();\r\n return this.storage.exportDump();\r\n }\r\n\r\n // ─── Public API: Lifecycle ─────────────────────────────────────────\r\n\r\n /**\r\n * Explicitly end the current session.\r\n * Flushes all buffered events and marks the session as ended.\r\n */\r\n async endSession(): Promise<void> {\r\n if (!this.initialised) return;\r\n this.session.endedAt = Date.now();\r\n await this.flush();\r\n }\r\n\r\n /**\r\n * Clear all stored sessions from IndexedDB.\r\n */\r\n async clearHistory(): Promise<void> {\r\n return this.storage.clearAll();\r\n }\r\n\r\n // ─── Buffer management ─────────────────────────────────────────────\r\n\r\n /**\r\n * Push an event into the centralised buffer.\r\n * Triggers an immediate flush if the buffer exceeds the threshold.\r\n * @internal\r\n */\r\n private pushBufferEvent(event: UiBlackboxBufferEvent): void {\r\n this.buffer.push(event);\r\n if (this.buffer.length >= this.config.flushThreshold) {\r\n this.flush();\r\n }\r\n }\r\n\r\n /**\r\n * Flush buffered events to IndexedDB asynchronously.\r\n * @internal\r\n */\r\n private async flush(): Promise<void> {\r\n if (!this.initialised || this.buffer.length === 0) return;\r\n\r\n // Drain buffer\r\n const events = this.buffer.splice(0);\r\n\r\n // Apply step events to the session\r\n for (const event of events) {\r\n if (event.kind === 'step') {\r\n // Steps are already pushed in real-time; ensure they're in the session\r\n if (!this.session.steps.includes(event.payload)) {\r\n this.session.steps.push(event.payload);\r\n }\r\n }\r\n // Actions, formEvents, httpCalls are already pushed in real-time\r\n // to the in-memory session by trackAction/trackFormEvent/trackHttpCall\r\n }\r\n\r\n // Save the full session snapshot\r\n try {\r\n await this.storage.saveSession(this.session);\r\n } catch (e) {\r\n // storage error — re-enqueue events for next flush\r\n console.warn('[UiBlackbox] Storage flush failed:', e);\r\n }\r\n }\r\n\r\n // ─── Utilities ─────────────────────────────────────────────────────\r\n\r\n /** Generate a UUID v4. */\r\n private generateUuid(): string {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return crypto.randomUUID();\r\n }\r\n // Fallback for older browsers\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n // ─── Cleanup ───────────────────────────────────────────────────────\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n\r\n if (this.flushTimerId !== null) {\r\n clearInterval(this.flushTimerId);\r\n }\r\n\r\n if (this.beforeUnloadHandler) {\r\n window.removeEventListener('beforeunload', this.beforeUnloadHandler);\r\n }\r\n\r\n // Final flush\r\n void this.flush();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { LucideAngularModule } from 'lucide-angular';\r\nimport { UiModalConfig } from './modal.types';\r\n\r\n/**\r\n * Componente modale standalone con struttura header/body/footer.\r\n *\r\n * Da utilizzare come wrapper all'interno di componenti aperti\r\n * tramite `UiModalService.open()`. Fornisce la struttura visuale\r\n * e gestisce la chiusura programmatica.\r\n *\r\n * **Content projection:**\r\n * - Contenuto di default: va nel body\r\n * - `[uiModalHeader]`: sostituisce il titolo nell'header\r\n * - `[uiModalFooter]`: azioni nel footer\r\n *\r\n * @selector ui-modal\r\n *\r\n * @example\r\n * ```html\r\n * <ui-modal [config]=\"{ title: 'Dettagli', size: 'md' }\">\r\n * <p>Contenuto del body della modale.</p>\r\n * <div uiModalFooter>\r\n * <ui-button label=\"Chiudi\" variant=\"ghost\" (click)=\"close()\" />\r\n * <ui-button label=\"Salva\" variant=\"primary\" (click)=\"save()\" />\r\n * </div>\r\n * </ui-modal>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'ui-modal',\r\n standalone: true,\r\n imports: [LucideAngularModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'ui-modal-host',\r\n role: 'dialog',\r\n 'aria-modal': 'true',\r\n '[attr.aria-label]': 'config.title || null',\r\n },\r\n template: `\r\n <!-- Header -->\r\n @if (config.title || config.showCloseButton !== false) {\r\n <div class=\"ui-modal__header\">\r\n <div class=\"ui-modal__header-content\">\r\n <ng-content select=\"[uiModalHeader]\">\r\n @if (config.title) {\r\n <h2 class=\"ui-modal__title\">{{ config.title }}</h2>\r\n }\r\n </ng-content>\r\n </div>\r\n @if (config.showCloseButton !== false) {\r\n <button\r\n class=\"ui-modal__close\"\r\n (click)=\"close()\"\r\n aria-label=\"Chiudi modale\"\r\n type=\"button\"\r\n >\r\n <lucide-icon name=\"x\" [size]=\"18\" aria-hidden=\"true\" />\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Body -->\r\n <div class=\"ui-modal__body\">\r\n <ng-content />\r\n </div>\r\n\r\n <!-- Footer -->\r\n @if (!config.hideFooter) {\r\n <div class=\"ui-modal__footer\">\r\n <ng-content select=\"[uiModalFooter]\" />\r\n </div>\r\n }\r\n `,\r\n styleUrl: './modal.component.scss',\r\n})\r\nexport class UiModalComponent {\r\n /** Configurazione strutturale della modale. */\r\n @Input() config: UiModalConfig = {};\r\n\r\n /**\r\n * Emesso quando la modale viene chiusa.\r\n * Utile se il componente e usato direttamente nel template\r\n * senza UiModalService.\r\n */\r\n @Output() closed = new EventEmitter<unknown>();\r\n\r\n /** @internal Riferimento al dialogo Material per la chiusura. */\r\n private dialogRef = inject(MatDialogRef, { optional: true });\r\n\r\n /** Chiude la modale con un risultato opzionale. */\r\n close(result?: unknown): void {\r\n if (this.dialogRef) {\r\n this.dialogRef.close(result);\r\n } else {\r\n this.closed.emit(result);\r\n }\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { LucideAngularModule } from 'lucide-angular';\r\nimport { UiVariant, UiSize, UiIconName } from '../../core/types';\r\nimport { UiIconPosition } from './button.types';\r\n\r\n/** @internal Size-to-icon-pixel mapping for consistent icon sizing. */\r\nconst ICON_SIZE_MAP: Record<UiSize, number> = {\r\n xs: 14,\r\n sm: 16,\r\n md: 18,\r\n lg: 20,\r\n xl: 22,\r\n};\r\n\r\n/**\r\n * Standalone button component with design-token-driven theming,\r\n * variant/size system, Lucide icon support, loading states, and WCAG 2.1 AA accessibility.\r\n *\r\n * Uses native `<button>` click events — listen with `(click)` on the host element.\r\n *\r\n * @selector ui-button\r\n *\r\n * @example\r\n * ```html\r\n * <!-- Basic -->\r\n * <ui-button label=\"Save\" variant=\"primary\" icon=\"save\" (click)=\"save()\" />\r\n *\r\n * <!-- Loading -->\r\n * <ui-button label=\"Submitting...\" variant=\"primary\" [loading]=\"true\" />\r\n *\r\n * <!-- Icon-only: tooltip o ariaLabel forniscono il nome accessibile -->\r\n * <ui-button icon=\"trash-2\" variant=\"warn\" tooltip=\"Elimina\" (click)=\"delete()\" />\r\n * ```\r\n */\r\n@Component({\r\n selector: 'ui-button',\r\n standalone: true,\r\n imports: [MatTooltipModule, LucideAngularModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'ui-button-host',\r\n '[class.ui-button-host--full-width]': 'fullWidth',\r\n },\r\n template: `\r\n <button\r\n [type]=\"type\"\r\n [class]=\"buttonClasses\"\r\n [disabled]=\"disabled || loading\"\r\n [attr.aria-label]=\"effectiveAriaLabel || null\"\r\n [attr.aria-busy]=\"loading || null\"\r\n [matTooltip]=\"tooltip\"\r\n >\r\n <span class=\"ui-button__content\" [class.ui-button__content--hidden]=\"loading\">\r\n @if (icon && iconPosition === 'leading') {\r\n <lucide-icon [name]=\"icon!\" [size]=\"iconSize\" aria-hidden=\"true\" />\r\n }\r\n @if (label) {\r\n <span class=\"ui-button__label\">{{ label }}</span>\r\n }\r\n <ng-content />\r\n @if (icon && iconPosition === 'trailing') {\r\n <lucide-icon [name]=\"icon!\" [size]=\"iconSize\" aria-hidden=\"true\" />\r\n }\r\n </span>\r\n @if (loading) {\r\n <span class=\"ui-button__spinner-overlay\">\r\n <span class=\"ui-button__spinner\" aria-hidden=\"true\"></span>\r\n <span class=\"ui-button__sr-only\">Loading</span>\r\n </span>\r\n }\r\n </button>\r\n `,\r\n styleUrl: './button.component.scss',\r\n})\r\nexport class UiButtonComponent {\r\n /** Button label text. */\r\n @Input() label = '';\r\n\r\n /** Tooltip text shown on hover (uses Angular Material tooltip). */\r\n @Input() tooltip = '';\r\n\r\n /** Visual style variant. */\r\n @Input() variant: UiVariant = 'primary';\r\n\r\n /** Size variant. */\r\n @Input() size: UiSize = 'md';\r\n\r\n /** Lucide icon name. @see https://lucide.dev/icons */\r\n @Input() icon?: UiIconName;\r\n\r\n /** Icon position relative to the label. */\r\n @Input() iconPosition: UiIconPosition = 'trailing';\r\n\r\n /** Whether the button is in a loading state. Disables interaction and shows spinner. */\r\n @Input() loading = false;\r\n\r\n /** Whether the button is disabled. */\r\n @Input() disabled = false;\r\n\r\n /** Expand button to full container width. */\r\n @Input() fullWidth = false;\r\n\r\n /** HTML button type attribute. */\r\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n\r\n /** Accessible label override (required for icon-only buttons). */\r\n @Input() ariaLabel?: string;\r\n\r\n /** Additional CSS class for edge cases. */\r\n @Input() customClass?: string;\r\n\r\n /**\r\n * Nome accessibile risolto per il pulsante nativo.\r\n * Usa `ariaLabel` se impostato; per pulsanti solo icona senza testo visibile\r\n * ricade sul `tooltip` (il tooltip Material non sostituisce il nome accessibile).\r\n */\r\n get effectiveAriaLabel(): string | undefined {\r\n const explicit = this.ariaLabel?.trim();\r\n if (explicit) return explicit;\r\n\r\n if (this.label?.trim()) return undefined;\r\n\r\n const tip = this.tooltip?.trim();\r\n if (this.icon && tip) return tip;\r\n\r\n return undefined;\r\n }\r\n\r\n /** Computed icon pixel size based on button size. */\r\n get iconSize(): number {\r\n return ICON_SIZE_MAP[this.size] ?? 18;\r\n }\r\n\r\n /** Assembled CSS class string for the native button element. */\r\n get buttonClasses(): string {\r\n return [\r\n 'ui-button',\r\n `ui-button--${this.variant}`,\r\n `ui-button--${this.size}`,\r\n this.loading ? 'ui-button--loading' : '',\r\n this.fullWidth ? 'ui-button--full-width' : '',\r\n !this.label && this.icon ? 'ui-button--icon-only' : '',\r\n this.customClass ?? '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n }\r\n}\r\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { LucideAngularModule } from 'lucide-angular';\r\nimport { UiButtonComponent } from '../button/button.component';\r\nimport { UiConfirmDialogData, UiConfirmVariant, UiIconName, UiVariant } from './modal.types';\r\n\r\n/** @internal Mappatura variante -> icona Lucide di default. */\r\nconst VARIANT_ICON_MAP: Record<UiConfirmVariant, UiIconName> = {\r\n confirm: 'check-circle',\r\n delete: 'trash-2',\r\n warn: 'alert-triangle',\r\n info: 'info',\r\n};\r\n\r\n/** @internal Mappatura variante -> colore pulsante di conferma. */\r\nconst VARIANT_BUTTON_MAP: Record<UiConfirmVariant, UiVariant> = {\r\n confirm: 'primary',\r\n delete: 'warn',\r\n warn: 'warn',\r\n info: 'primary',\r\n};\r\n\r\n/**\r\n * Dialogo di conferma leggero per azioni condizionali.\r\n *\r\n * Non va utilizzato direttamente nel template: viene aperto\r\n * programmaticamente tramite `UiModalService.confirm()` e i suoi\r\n * metodi scorciatoia (`confirmDelete`, `confirmDiscard`, `confirmSave`).\r\n *\r\n * Supporta quattro varianti semantiche — confirm, delete, warn, info —\r\n * ciascuna con icona e colore preconfigurati.\r\n *\r\n * @selector ui-confirm-dialog\r\n *\r\n * @example\r\n * ```typescript\r\n * // Apertura tramite servizio\r\n * this.modalService.confirm({\r\n * title: 'Conferma eliminazione',\r\n * message: 'Questa azione non puo essere annullata.',\r\n * variant: 'delete',\r\n * }).subscribe(confirmed => {\r\n * if (confirmed) this.deleteItem();\r\n * });\r\n * ```\r\n */\r\n@Component({\r\n selector: 'ui-confirm-dialog',\r\n standalone: true,\r\n imports: [LucideAngularModule, UiButtonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'ui-confirm-dialog-host',\r\n role: 'alertdialog',\r\n 'aria-modal': 'true',\r\n '[attr.aria-labelledby]': '\"ui-confirm-title\"',\r\n '[attr.aria-describedby]': '\"ui-confirm-message\"',\r\n },\r\n template: `\r\n <div class=\"ui-confirm-dialog\">\r\n <!-- Icona -->\r\n <div [class]=\"iconClasses\">\r\n <lucide-icon [name]=\"iconName\" [size]=\"32\" aria-hidden=\"true\" />\r\n </div>\r\n\r\n <!-- Contenuto -->\r\n <div class=\"ui-confirm-dialog__content\">\r\n @if (data.title) {\r\n <h3 class=\"ui-confirm-dialog__title\" id=\"ui-confirm-title\">{{ data.title }}</h3>\r\n }\r\n <p class=\"ui-confirm-dialog__message\" id=\"ui-confirm-message\">{{ data.message }}</p>\r\n </div>\r\n\r\n <!-- Azioni -->\r\n <div class=\"ui-confirm-dialog__actions\">\r\n <ui-button\r\n [label]=\"data.cancelText || 'Annulla'\"\r\n variant=\"ghost\"\r\n size=\"md\"\r\n (click)=\"cancel()\"\r\n />\r\n <ui-button\r\n [label]=\"data.confirmText || 'Conferma'\"\r\n [variant]=\"confirmButtonVariant\"\r\n size=\"md\"\r\n (click)=\"confirm()\"\r\n />\r\n </div>\r\n </div>\r\n `,\r\n styleUrl: './confirm-dialog.component.scss',\r\n})\r\nexport class UiConfirmDialogComponent {\r\n /** @internal Dati iniettati dal servizio modale. */\r\n readonly data: UiConfirmDialogData = inject(MAT_DIALOG_DATA);\r\n\r\n /** @internal Riferimento al dialogo per la chiusura. */\r\n private readonly dialogRef = inject(MatDialogRef);\r\n\r\n /** Variante semantica corrente. */\r\n get variant(): UiConfirmVariant {\r\n return this.data.variant || 'confirm';\r\n }\r\n\r\n /** Nome icona Lucide da visualizzare. */\r\n get iconName(): UiIconName {\r\n return this.data.icon || VARIANT_ICON_MAP[this.variant];\r\n }\r\n\r\n /** Variante del pulsante di conferma. */\r\n get confirmButtonVariant(): UiVariant {\r\n return VARIANT_BUTTON_MAP[this.variant];\r\n }\r\n\r\n /** Classi CSS per il contenitore icona. */\r\n get iconClasses(): string {\r\n return `ui-confirm-dialog__icon ui-confirm-dialog__icon--${this.variant}`;\r\n }\r\n\r\n /** Conferma e chiude il dialogo con `true`. */\r\n confirm(): void {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n /** Annulla e chiude il dialogo con `false`. */\r\n cancel(): void {\r\n this.dialogRef.close(false);\r\n }\r\n}\r\n","import { Injectable, inject, Type } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { Observable, map } from 'rxjs';\r\nimport { UiConfirmDialogComponent } from './confirm-dialog.component';\r\nimport { UiConfirmDialogData, UiModalOpenConfig, UiModalSize } from './modal.types';\r\n\r\n/** @internal Mappatura dimensione -> larghezza CSS per il pannello overlay. */\r\nconst SIZE_WIDTH_MAP: Record<UiModalSize, string> = {\r\n sm: '400px',\r\n md: '560px',\r\n lg: '720px',\r\n xl: '900px',\r\n fullscreen: '95vw',\r\n};\r\n\r\n/**\r\n * Servizio per aprire modali e dialoghi di conferma.\r\n *\r\n * Gestisce lo stacking intelligente: una modale regolare puo\r\n * ospitare al massimo un dialogo di conferma sopra di se.\r\n * Non e possibile stackare due modali regolari.\r\n *\r\n * @usageNotes\r\n *\r\n * ### Aprire una modale personalizzata\r\n * ```typescript\r\n * const ref = this.modalService.open(MyDialogComponent, {\r\n * size: 'lg',\r\n * data: { userId: 123 },\r\n * });\r\n *\r\n * ref.afterClosed().subscribe(result => {\r\n * console.log('Risultato:', result);\r\n * });\r\n * ```\r\n *\r\n * ### Conferma rapida\r\n * ```typescript\r\n * this.modalService.confirm('Confermi questa azione?')\r\n * .subscribe(ok => { if (ok) this.procedi(); });\r\n * ```\r\n *\r\n * ### Preset di conferma\r\n * ```typescript\r\n * this.modalService.confirmDelete('Progetto Alpha')\r\n * .subscribe(ok => { if (ok) this.elimina(); });\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class UiModalService {\r\n /** @internal Istanza MatDialog per la gestione overlay. */\r\n private readonly dialog = inject(MatDialog);\r\n\r\n /** @internal Stack delle modali regolari aperte. */\r\n private _modalStack: MatDialogRef<unknown>[] = [];\r\n\r\n /** @internal Traccia se un dialogo di conferma e attualmente aperto. */\r\n private _confirmOpen = false;\r\n\r\n /**\r\n * Apre una modale con un componente personalizzato.\r\n *\r\n * Il componente aperto puo iniettare `MAT_DIALOG_DATA` per accedere\r\n * ai dati e `MatDialogRef` per chiudere la modale.\r\n *\r\n * @param component - Componente standalone da renderizzare nella modale\r\n * @param config - Configurazione (dimensione, dati, comportamento)\r\n * @returns Riferimento alla modale aperta\r\n */\r\n open<T, D = unknown, R = unknown>(component: Type<T>, config?: UiModalOpenConfig<D>): MatDialogRef<T, R> {\r\n // Regola di stacking: non stackare due modali regolari\r\n if (this._modalStack.length > 0) {\r\n console.warn(\r\n '[UiModalService] Una modale e gia aperta. ' +\r\n 'Usa confirm() per aprire un dialogo di conferma sopra la modale corrente.',\r\n );\r\n }\r\n\r\n const size = config?.size || 'md';\r\n\r\n const dialogConfig: MatDialogConfig<D> = {\r\n width: SIZE_WIDTH_MAP[size],\r\n maxWidth: size === 'fullscreen' ? '95vw' : '90vw',\r\n maxHeight: size === 'fullscreen' ? '95vh' : '90vh',\r\n height: size === 'fullscreen' ? '95vh' : undefined,\r\n disableClose: config?.disableClose ?? false,\r\n autoFocus: true,\r\n restoreFocus: true,\r\n data: config?.data as D,\r\n panelClass: ['ui-modal-panel', `ui-modal-panel--${size}`, ...(config?.panelClass ? [config.panelClass] : [])],\r\n hasBackdrop: true,\r\n backdropClass: ['cdk-overlay-dark-backdrop', 'ui-modal-backdrop'],\r\n };\r\n\r\n const ref = this.dialog.open(component, dialogConfig) as MatDialogRef<T, R>;\r\n\r\n this._modalStack.push(ref as MatDialogRef<unknown>);\r\n ref.afterClosed().subscribe(() => {\r\n this._modalStack = this._modalStack.filter((r) => r !== (ref as MatDialogRef<unknown>));\r\n });\r\n\r\n return ref;\r\n }\r\n\r\n /**\r\n * Apre un dialogo di conferma.\r\n *\r\n * Accetta una stringa semplice (messaggio) o un oggetto di\r\n * configurazione completo. Puo essere aperto sopra una modale\r\n * esistente (stacking consentito).\r\n *\r\n * @param messageOrConfig - Messaggio o configurazione completa\r\n * @returns Observable che emette `true` se confermato, `false` se annullato\r\n */\r\n confirm(messageOrConfig: string | UiConfirmDialogData): Observable<boolean> {\r\n const data: UiConfirmDialogData =\r\n typeof messageOrConfig === 'string' ? { message: messageOrConfig } : messageOrConfig;\r\n\r\n // Un solo dialogo di conferma alla volta\r\n if (this._confirmOpen) {\r\n console.warn('[UiModalService] Un dialogo di conferma e gia aperto.');\r\n return new Observable((subscriber) => {\r\n subscriber.next(false);\r\n subscriber.complete();\r\n });\r\n }\r\n\r\n this._confirmOpen = true;\r\n\r\n const dialogConfig: MatDialogConfig<UiConfirmDialogData> = {\r\n width: '420px',\r\n maxWidth: '90vw',\r\n disableClose: false,\r\n autoFocus: false,\r\n restoreFocus: true,\r\n data,\r\n panelClass: ['ui-confirm-panel'],\r\n hasBackdrop: true,\r\n backdropClass:\r\n this._modalStack.length > 0\r\n ? ['cdk-overlay-dark-backdrop', 'ui-confirm-backdrop--stacked']\r\n : ['cdk-overlay-dark-backdrop', 'ui-modal-backdrop'],\r\n };\r\n\r\n const ref = this.dialog.open(UiConfirmDialogComponent, dialogConfig);\r\n\r\n return ref.afterClosed().pipe(\r\n map((result) => {\r\n this._confirmOpen = false;\r\n return !!result;\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Scorciatoia: conferma eliminazione.\r\n * Variante `delete` con icona cestino e pulsante warn.\r\n *\r\n * @param itemName - Nome opzionale dell'elemento da eliminare\r\n */\r\n confirmDelete(itemName?: string): Observable<boolean> {\r\n return this.confirm({\r\n title: 'Conferma eliminazione',\r\n message: itemName\r\n ? `Sei sicuro di voler eliminare \"${itemName}\"? Questa azione non puo essere annullata.`\r\n : 'Sei sicuro di voler eliminare questo elemento? Questa azione non puo essere annullata.',\r\n confirmText: 'Elimina',\r\n cancelText: 'Annulla',\r\n variant: 'delete',\r\n });\r\n }\r\n\r\n /**\r\n * Scorciatoia: conferma abbandono modifiche.\r\n * Variante `warn` con icona avviso.\r\n */\r\n confirmDiscard(): Observable<boolean> {\r\n return this.confirm({\r\n title: 'Modifiche non salvate',\r\n message: 'Ci sono modifiche non salvate. Sei sicuro di voler uscire senza salvare?',\r\n confirmText: 'Esci senza salvare',\r\n cancelText: 'Rimani',\r\n variant: 'warn',\r\n });\r\n }\r\n\r\n /**\r\n * Scorciatoia: conferma salvataggio.\r\n * Variante `confirm` con icona check.\r\n */\r\n confirmSave(): Observable<boolean> {\r\n return this.confirm({\r\n title: 'Conferma salvataggio',\r\n message: 'Sei sicuro di voler salvare le modifiche?',\r\n confirmText: 'Salva',\r\n cancelText: 'Annulla',\r\n variant: 'confirm',\r\n });\r\n }\r\n\r\n /** Chiude tutte le modali e dialoghi aperti. */\r\n closeAll(): void {\r\n this.dialog.closeAll();\r\n this._modalStack = [];\r\n this._confirmOpen = false;\r\n }\r\n\r\n /** Indica se ci sono modali o dialoghi attualmente aperti. */\r\n get hasOpenDialogs(): boolean {\r\n return this.dialog.openDialogs.length > 0;\r\n }\r\n\r\n /** Numero di modali regolari attualmente aperte. */\r\n get openModalCount(): number {\r\n return this._modalStack.length;\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { UiSize } from '../../core/types';\r\nimport { UiButtonComponent } from './button.component';\r\nimport { UiButtonDescriptor, UiButtonAreaAlign } from './button.types';\r\nimport { UiBlackboxService } from '../blackbox/blackbox.service';\r\n\r\n/**\r\n * Standalone button-group component driven by a `UiButtonDescriptor[]` configuration.\r\n *\r\n * Renders a group of `UiButton` instances from declarative descriptors.\r\n * Supports per-button loading/disabled states, dynamic visibility,\r\n * alignment control, and optional navigation via Angular Router.\r\n *\r\n * When the `UiBlackboxService` is provided, button clicks are\r\n * automatically tracked in the active session.\r\n *\r\n * @selector ui-button-area\r\n *\r\n * @example\r\n * ```html\r\n * <ui-button-area\r\n * [buttons]=\"actions\"\r\n * align=\"end\"\r\n * gap=\"sm\"\r\n * [loadingIds]=\"currentlyLoading\"\r\n * />\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * // Dynamic configuration\r\n * actions: UiButtonDescriptor[] = [\r\n * { id: 'export', label: 'Export Excel', icon: 'file-spreadsheet', variant: 'primary',\r\n * action: () => this.exportExcel() },\r\n * { id: 'delete', label: 'Delete', icon: 'trash-2', variant: 'warn',\r\n * action: () => this.deleteSelected(), hidden: !this.hasSelection },\r\n * ];\r\n *\r\n * // Set loading state from outside:\r\n * currentlyLoading: string | string[] | null = 'export';\r\n * ```\r\n */\r\n@Component({\r\n selector: 'ui-button-area',\r\n standalone: true,\r\n imports: [UiButtonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'ui-button-area-host',\r\n },\r\n template: `\r\n <div\r\n [class]=\"areaClasses\"\r\n role=\"group\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n >\r\n @for (button of visibleButtons; track trackButton($index, button)) {\r\n <ui-button\r\n [attr.data-button-id]=\"button.id || null\"\r\n [label]=\"button.label\"\r\n [tooltip]=\"button.tooltip ?? ''\"\r\n [ariaLabel]=\"button.ariaLabel\"\r\n [icon]=\"button.icon\"\r\n [iconPosition]=\"button.iconPosition ?? 'trailing'\"\r\n [variant]=\"button.variant ?? 'primary'\"\r\n [size]=\"button.size ?? 'md'\"\r\n [loading]=\"isButtonLoading(button)\"\r\n [disabled]=\"isButtonDisabled(button)\"\r\n [customClass]=\"button.customClass\"\r\n (click)=\"handleButtonClick(button, $event)\"\r\n />\r\n }\r\n </div>\r\n `,\r\n styleUrl: './button-area.component.scss',\r\n})\r\nexport class UiButtonAreaComponent {\r\n /**\r\n * Array of button descriptors to render.\r\n * Buttons with `hidden: true` are filtered out.\r\n */\r\n @Input() buttons: UiButtonDescriptor[] = [];\r\n\r\n /** Horizontal alignment of the button group. */\r\n @Input() align: UiButtonAreaAlign = 'end';\r\n\r\n /** Accessible group label for screen readers. */\r\n @Input() ariaLabel = 'Actions';\r\n\r\n /** Gap between buttons (maps to design token spacing). */\r\n @Input() gap: UiSize = 'sm';\r\n\r\n /** Stack buttons vertically on mobile viewports (<600px). */\r\n @Input() stackOnMobile = true;\r\n\r\n /**\r\n * When `true`, all buttons are disabled while any button is in a loading state.\r\n * Useful to prevent double-actions during async operations.\r\n */\r\n @Input() disableWhileLoading = false;\r\n\r\n /**\r\n * Set one or more buttons to a loading state by their `id`.\r\n * Accepts a single string, an array of strings, or `null` to clear.\r\n *\r\n * @example\r\n * ```html\r\n * <!-- Single -->\r\n * <ui-button-area [loadingIds]=\"'save'\" />\r\n *\r\n * <!-- Multiple -->\r\n * <ui-button-area [loadingIds]=\"['save', 'export']\" />\r\n * ```\r\n */\r\n @Input()\r\n set loadingIds(value: string | string[] | null | undefined) {\r\n if (value === null || value === undefined) {\r\n this._loadingIds = new Set();\r\n } else if (Array.isArray(value)) {\r\n this._loadingIds = new Set(value);\r\n } else {\r\n this._loadingIds = new Set([value]);\r\n }\r\n }\r\n\r\n /** @internal */\r\n private _loadingIds = new Set<string>();\r\n\r\n /** @internal Optional router for href navigation. */\r\n private router = inject(Router, { optional: true });\r\n\r\n /** @internal Optional BlackBox service — auto-tracks button clicks when available. */\r\n private blackbox = inject(UiBlackboxService, { optional: true });\r\n\r\n /** Buttons filtered to visible (non-hidden) entries. */\r\n get visibleButtons(): UiButtonDescriptor[] {\r\n return this.buttons.filter((b) => !b.hidden);\r\n }\r\n\r\n /** Assembled CSS class string for the button area container. */\r\n get areaClasses(): string {\r\n return [\r\n 'ui-button-area',\r\n `ui-button-area--align-${this.align}`,\r\n `ui-button-area--gap-${this.gap}`,\r\n this.stackOnMobile ? 'ui-button-area--stack-mobile' : '',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n }\r\n\r\n /** @internal Track function for @for loop. */\r\n trackButton(index: number, button: UiButtonDescriptor): string {\r\n return button.id ?? `idx-${index}`;\r\n }\r\n\r\n /** Whether a specific button is in a loading state. */\r\n isButtonLoading(button: UiButtonDescriptor): boolean {\r\n return !!button.loading || (!!button.id && this._loadingIds.has(button.id));\r\n }\r\n\r\n /** Whether a specific button is disabled (includes loading logic). */\r\n isButtonDisabled(button: UiButtonDescriptor): boolean {\r\n if (button.disabled) return true;\r\n if (this.isButtonLoading(button)) return true;\r\n if (this.disableWhileLoading && this._loadingIds.size > 0) return true;\r\n return false;\r\n }\r\n\r\n /** @internal Handles button click: tracks action, calls callback and/or navigates. */\r\n handleButtonClick(button: UiButtonDescriptor, event: MouseEvent): void {\r\n // BlackBox auto-tracking (no-op if service is not provided)\r\n this.blackbox?.trackAction(button.id ?? button.label, {\r\n tag: 'ui-button',\r\n id: button.id,\r\n text: button.label,\r\n });\r\n\r\n if (button.action) {\r\n button.action(event);\r\n }\r\n if (button.href && this.router) {\r\n this.router.navigateByUrl(button.href);\r\n }\r\n }\r\n}\r\n\r\n","/**\r\n * ng-ui-system — Button entry point.\r\n *\r\n * @example\r\n * ```typescript\r\n * import {\r\n * UiButtonComponent,\r\n * UiButtonAreaComponent,\r\n * UiButtonDescriptor,\r\n * } from 'ng-ui-system';\r\n * ```\r\n */\r\n\r\n// Components\r\nexport { UiButtonComponent } from './button.component';\r\nexport { UiButtonAreaComponent } from './button-area.component';\r\n\r\n// Types\r\nexport {\r\n UiButtonDescriptor,\r\n UiButtonAreaAlign,\r\n UiIconPosition,\r\n} from './button.types';\r\n","/**\r\n * @module ng-ui-system/blackbox\r\n * Componente modale per la visualizzazione di dati JSON nel debugger.\r\n *\r\n * Aperto da `UiBlackboxDebuggerComponent` tramite `UiModalService.open()`.\r\n * Mostra il JSON formattato in un code block con syntax highlighting.\r\n */\r\n\r\nimport {\r\n Component,\r\n ChangeDetectionStrategy,\r\n inject,\r\n Optional,\r\n Inject,\r\n} from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { LucideAngularModule } from 'lucide-angular';\r\n\r\nimport { UiModalComponent } from '../modal/index';\r\n\r\n@Component({\r\n selector: 'ui-blackbox-json-viewer',\r\n standalone: true,\r\n imports: [UiModalComponent, LucideAngularModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <ui-modal [config]=\"{ title: data.title || 'JSON', showCloseButton: true, hideFooter: true }\">\r\n <div class=\"json-viewer\">\r\n <div class=\"json-viewer__toolbar\">\r\n <button class=\"json-viewer__copy\" (click)=\"copyToClipboard()\">\r\n <lucide-angular name=\"clipboard\" [size]=\"12\"></lucide-angular>\r\n {{ copied ? 'Copiato!' : 'Copia' }}\r\n </button>\r\n </div>\r\n <pre class=\"json-viewer__code\"><code>{{ formattedJson }}</code></pre>\r\n </div>\r\n </ui-modal>\r\n `,\r\n styles: [`\r\n .json-viewer {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n min-height: 120px;\r\n }\r\n\r\n .json-viewer__toolbar {\r\n display: flex;\r\n justify-content: flex-end;\r\n }\r\n\r\n .json-viewer__copy {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n padding: 4px 10px;\r\n border-radius: var(--ui-radius-sm, 4px);\r\n font-size: 11px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n background: var(--ui-color-bg-subtle, #f5f5f5);\r\n color: var(--ui-color-text-secondary, #666);\r\n border: 1px solid var(--ui-color-border, #e5e5e5);\r\n transition: all 0.12s;\r\n\r\n &:hover {\r\n background: var(--ui-color-surface-hover, #eee);\r\n color: var(--ui-color-primary, #3b82f6);\r\n border-color: var(--ui-color-primary, #3b82f6);\r\n }\r\n }\r\n\r\n .json-viewer__code {\r\n margin: 0;\r\n padding: 16px;\r\n background: var(--ui-color-bg-subtle, #1e1e2e);\r\n border: 1px solid var(--ui-color-border, #e5e5e5);\r\n border-radius: var(--ui-radius-md, 8px);\r\n overflow: auto;\r\n max-height: 70vh;\r\n font-family: var(--ui-font-family-mono, 'Fira Code', monospace);\r\n font-size: 12px;\r\n line-height: 1.6;\r\n color: var(--ui-color-text, #1a1a1a);\r\n white-space: pre-wrap;\r\n word-break: break-word;\r\n tab-size: 2;\r\n }\r\n `],\r\n})\r\nexport class UiBlackboxJsonViewerComponent {\r\n copied = false;\r\n\r\n formattedJson: string;\r\n\r\n constructor(\r\n @Optional() public dialogRef: MatDialogRef<UiBlackboxJsonViewerComponent>,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public data: { title: string; json: any },\r\n ) {\r\n this.formattedJson = JSON.stringify(data?.json ?? {}, null, 2);\r\n }\r\n\r\n copyToClipboard(): void {\r\n navigator.clipboard.writeText(this.formattedJson).then(() => {\r\n this.copied = true;\r\n setTimeout(() => { this.copied = false; }, 2000);\r\n });\r\n }\r\n}\r\n","/**\r\n * @module ng-ui-system/blackbox\r\n * Componente debugger BlackBox — aperto in modale fullscreen.\r\n *\r\n * Layout:\r\n * - Header con titolo e chiusura\r\n * - Tab group: Dashboard | Timeline | Form Events | HTTP Calls\r\n *\r\n * Funzionalita:\r\n * - Timeline unificata (navigazioni + click + form events + HTTP calls)\r\n * - Form events con valori del form visibili\r\n * - JSON detail modal al click su dati strutturati\r\n */\r\n\r\nimport {\r\n Component,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n OnInit,\r\n OnDestroy,\r\n inject,\r\n Optional,\r\n Inject,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { LucideAngularModule } from 'lucide-angular';\r\nimport { Subject, interval } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\nimport { UiButtonComponent } from '../button/index';\r\nimport { UiModalService } from '../modal/index';\r\nimport { UiBlackboxService } from './blackbox.service';\r\nimport { UiBlackboxSession, UiBlackboxFormEvent, UiBlackboxHttpCall } from './blackbox.types';\r\nimport { UiBlackboxJsonViewerComponent } from './blackbox-json-viewer.component';\r\n\r\n/** Discriminated union for the unified timeline. */\r\ninterface TimelineEntry {\r\n timestamp: number;\r\n kind: 'navigation' | 'click' | 'formEvent' | 'httpCall';\r\n route?: string;\r\n // Navigation\r\n previousRoute?: string;\r\n actionsCount?: number;\r\n // Click\r\n tag?: string;\r\n trackId?: string;\r\n text?: string;\r\n // Form event\r\n formId?: string;\r\n fieldKey?: string;\r\n eventType?: string;\r\n metadata?: any;\r\n // HTTP\r\n method?: string;\r\n url?: string;\r\n status?: number;\r\n durationMs?: number;\r\n requestPayload?: any;\r\n responseHeaders?: Record<string, string>;\r\n}\r\n\r\n@Component({\r\n selector: 'ui-blackbox-debugger',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatTabsModule,\r\n LucideAngularModule,\r\n UiButtonComponent,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div class=\"dbg-root\" [class.dialog-mode]=\"isDialogMode\">\r\n\r\n <!-- Header -->\r\n @if (isDialogMode) {\r\n <div class=\"dbg-header\">\r\n <div class=\"dbg-header__left\">\r\n <lucide-angular name=\"activity\" [size]=\"20\" class=\"dbg-header__icon\"></lucide-angular>\r\n <h2>BlackBox Debugger</h2>\r\n </div>\r\n <ui-button icon=\"x\" variant=\"ghost\" size=\"md\" ariaLabel=\"Chiudi\" tooltip=\"Chiudi\" (click)=\"closeDialog()\" />\r\n </div>\r\n }\r\n\r\n <!-- Tabs -->\r\n <mat-tab-group\r\n [selectedIndex]=\"selectedTab\"\r\n (selectedIndexChange)=\"selectedTab = $event\"\r\n class=\"dbg-tabs\"\r\n >\r\n <!-- TAB: Dashboard -->\r\n <mat-tab>\r\n <ng-template mat-tab-label>\r\n <lucide-angular name=\"monitor\" [size]=\"14\" style=\"margin-right:6px\"></lucide-angular>\r\n Dashboard\r\n </ng-template>\r\n\r\n <div class=\"dbg-tab-content dbg-dashboard\">\r\n <!-- Stats -->\r\n <div class=\"dbg-stats\">\r\n <div class=\"dbg-stat\" *ngFor=\"let s of statsCards\">\r\n <lucide-angular [name]=\"s.icon\" [size]=\"18\" class=\"dbg-stat__icon\"></lucide-angular>\r\n <span class=\"dbg-stat__value\">{{ s.value }}</span>\r\n <span class=\"dbg-stat__label\">{{ s.label }}</span>\r\n </div>\r\n </div>\r\n <div class=\"dbg-dashboard-grid\">\r\n <!-- Session info -->\r\n <div class=\"dbg-panel\" *ngIf=\"session\">\r\n <div class=\"dbg-panel__header\">\r\n <lucide-angular name=\"info\" [size]=\"14\"></lucide-angular>\r\n Sessione corrente\r\n </div>\r\n <div class=\"dbg-kv\">\r\n <span class=\"dbg-kv__k\">Session ID</span>\r\n <code class=\"dbg-kv__v dbg-mono\">{{ session.sessionId }}</code>\r\n <span class=\"dbg-kv__k\">Fingerprint</span>\r\n <code class=\"dbg-kv__v dbg-mono\">{{ session.fingerprint }}</code>\r\n <span class=\"dbg-kv__k\">Inizio</span>\r\n <span class=\"dbg-kv__v\">{{ session.startedAt | date:'dd/MM/yyyy HH:mm:ss' }}</span>\r\n <span class=\"dbg-kv__k\">Durata</span>\r\n <span class=\"dbg-kv__v\">{{ sessionDuration }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- HTTP Simulator -->\r\n <div class=\"dbg-panel\">\r\n <div class=\"dbg-panel__header\">\r\n <lucide-angular name=\"zap\" [size]=\"14\"></lucide-angular>\r\n HTTP Simulator\r\n </div>\r\n <p class=\"dbg-panel__desc\">Genera chiamate fittizie per testare l'interceptor BlackBox.</p>\r\n <div class=\"dbg-sim-btns\">\r\n <button class=\"dbg-sim-btn dbg-sim-btn--get\" (click)=\"simulateGet()\">\r\n <lucide-angular name=\"play\" [size]=\"12\"></lucide-angular> GET /todos/1\r\n </button>\r\n <button class=\"dbg-sim-btn dbg-sim-btn--post\" (click)=\"simulatePost()\">\r\n <lucide-angular name=\"play\" [size]=\"12\"></lucide-angular> POST /posts\r\n </button>\r\n <button class=\"dbg-sim-btn dbg-sim-btn--fail\" (click)=\"simulateFail()\">\r\n <lucide-angular name=\"play\" [size]=\"12\"></lucide-angular> GET /404\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"dbg-panel\">\r\n <div class=\"dbg-panel__header\">\r\n <lucide-angular name=\"settings\" [size]=\"14\"></lucide-angular>\r\n Azioni\r\n </div>\r\n <div class=\"dbg-sim-btns\">\r\n <button class=\"dbg-action-btn\" (click)=\"refresh()\">\r\n <lucide-angular name=\"refresh-cw\" [size]=\"12\"></lucide-angular> Aggiorna\r\n </button>\r\n <button class=\"dbg-action-btn\" (click)=\"exportSessions()\">\r\n <lucide-angular name=\"download\" [size]=\"12\"></lucide-angular> Esporta JSONL\r\n </button>\r\n <button class=\"dbg-action-btn\" (click)=\"importJsonl()\">\r\n <lucide-angular name=\"upload\" [size]=\"12\"></lucide-angular> Importa JSONL\r\n </button>\r\n <button class=\"dbg-action-btn dbg-action-btn--danger\" (click)=\"clearHistory()\">\r\n <lucide-angular name=\"trash-2\" [size]=\"12\"></lucide-angular> Svuota\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Past sessions -->\r\n <div class=\"dbg-panel\" *ngIf=\"pastSessions.length > 0\">\r\n <div class=\"dbg-panel__header\">\r\n <lucide-angular name=\"clock\" [size]=\"14\"></lucide-angular>\r\n Sessioni archiviate ({{ pastSessions.length }})\r\n </div>\r\n <div class=\"dbg-session-list\">\r\n <div class=\"dbg-session-row\" *ngFor=\"let s of pastSessions\" (click)=\"viewSession(s)\">\r\n <code class=\"dbg-mono\">{{ s.sessionId | slice:0:12 }}...</code>\r\n <span>{{ s.startedAt | date:'dd/MM HH:mm' }}</span>\r\n <span>{{ s.steps.length }} steps</span>\r\n <lucide-angular name=\"chevron-right\" [size]=\"14\" class=\"dbg-session-row__arrow\"></lucide-angular>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- TAB: Timeline (unified) -->\r\n <mat-tab>\r\n <ng-template mat-tab-label>\r\n <lucide-angular name=\"git-branch\" [size]=\"14\" style=\"margin-right:6px\"></lucide-angular>\r\n Timeline\r\n </ng-template>\r\n\r\n <div class=\"dbg-tab-content\">\r\n <div class=\"dbg-timeline\" *ngIf=\"timelineEntries.length; else noData\">\r\n <div class=\"dbg-tl-entry\"\r\n *ngFor=\"let entry of timelineEntries; let last = last\"\r\n >\r\n <div class=\"dbg-tl-entry__row\">\r\n <!-- Dot -->\r\n <div class=\"dbg-tl-dot\" [ngClass]=\"'dbg-tl-dot--' + entry.kind\"></div>\r\n\r\n <!-- Time -->\r\n <span class=\"dbg-tl-entry__time dbg-mono\">{{ entry.timestamp | date:'HH:mm:ss.SSS' }}</span>\r\n\r\n <!-- Kind badge -->\r\n <span class=\"dbg-badge\" [ngClass]=\"'dbg-badge--tl-' + entry.kind\">{{ entry.kind }}</span>\r\n\r\n <!-- Content based on kind -->\r\n <ng-container [ngSwitch]=\"entry.kind\">\r\n\r\n <!-- Navigation -->\r\n <ng-container *ngSwitchCase=\"'navigation'\">\r\n <code class=\"dbg-tl-entry__route\">{{ entry.route }}</code>\r\n <span class=\"dbg-tl-entry__detail\">{{ entry.actionsCount }} azioni</span>\r\n </ng-container>\r\n\r\n <!-- Click -->\r\n <ng-container *ngSwitchCase=\"'click'\">\r\n <code class=\"dbg-tl-entry__target\">&lt;{{ entry.tag }}&gt;</code>\r\n <span class=\"dbg-badge dbg-badge--id\" *ngIf=\"entry.trackId\">#{{ entry.trackId }}</span>\r\n <span class=\"dbg-tl-entry__text\" *ngIf=\"entry.text\">{{ entry.text }}</span>\r\n </ng-container>\r\n\r\n <!-- Form event -->\r\n <ng-container *ngSwitchCase=\"'formEvent'\">\r\n <span class=\"dbg-badge\" [ngClass]=\"'dbg-badge--' + entry.eventType\">{{ entry.eventType }}</span>\r\n <code class=\"dbg-tl-entry__field\">{{ entry.formId }}.{{ entry.fieldKey }}</code>\r\n <button class=\"dbg-json-btn\" *ngIf=\"entry.metadata\" (click)=\"openJsonModal('Form Event — ' + entry.fieldKey, entry.metadata)\">\r\n <lucide-angular name=\"code\" [size]=\"12\"></lucide-angular>\r\n </button>\r\n </ng-container>\r\n\r\n <!-- HTTP call -->\r\n <ng-container *ngSwitchCase=\"'httpCall'\">\r\n <span class=\"dbg-badge\" [ngClass]=\"'dbg-badge--' + (entry.method ?? '').toLowerCase()\">{{ entry.method }}</span>\r\n <code class=\"dbg-tl-entry__url\">{{ entry.url }}</code>\r\n <span class=\"dbg-status\" [class.dbg-status--ok]=\"entry.status && entry.status < 400\"\r\n [class.dbg-status--err]=\"!entry.status || entry.status! >= 400\">\r\n {{ entry.status ?? '—' }}\r\n </span>\r\n <span class=\"dbg-tl-entry__detail\" *ngIf=\"entry.durationMs\">{{ entry.durationMs }}ms</span>\r\n <button class=\"dbg-json-btn\" *ngIf=\"entry.requestPayload\" (click)=\"openJsonModal('HTTP Payload', entry.requestPayload)\">\r\n <lucide-angular name=\"code\" [size]=\"12\"></lucide-angular>\r\n </button>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"dbg-tl-line\" *ngIf=\"!last\"></div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #noData>\r\n <div class=\"dbg-empty\">\r\n <lucide-angular name=\"git-branch\" [size]=\"48\" style=\"opacity:0.3\"></lucide-angular>\r\n <p>Nessun evento registrato</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- TAB: Form Events -->\r\n <mat-tab>\r\n <ng-template mat-tab-label>\r\n <lucide-angular name=\"file-text\" [size]=\"14\" style=\"margin-right:6px\"></lucide-angular>\r\n Form Events\r\n </ng-template>\r\n\r\n <div class=\"dbg-tab-content\">\r\n <div class=\"dbg-table-wrap\" *ngIf=\"viewingSession?.formEvents?.length; else noFormData\">\r\n <table class=\"dbg-table\">\r\n <thead>\r\n <tr>\r\n <th>Ora</th>\r\n <th>Rotta</th>\r\n <th>Form</th>\r\n <th>Campo</th>\r\n <th>Evento</th>\r\n <th>Valore campo</th>\r\n <th>Form completo</th>\r\n <th>Dettagli</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let ev of viewingSession!.formEvents\">\r\n <td class=\"dbg-mono\">{{ ev.timestamp | date:'HH:mm:ss.SSS' }}</td>\r\n <td class=\"dbg-mono dbg-truncate\">{{ ev.route }}</td>\r\n <td>{{ ev.formId }}</td>\r\n <td><code>{{ ev.fieldKey }}</code></td>\r\n <td>\r\n <span class=\"dbg-badge\" [ngClass]=\"'dbg-badge--' + ev.eventType\">{{ ev.eventType }}</span>\r\n </td>\r\n <td>\r\n <button class=\"dbg-json-btn\" *ngIf=\"ev.metadata?.value !== undefined\"\r\n (click)=\"openJsonModal('Valore: ' + ev.fieldKey, ev.metadata!.value)\">\r\n <lucide-angular name=\"code\" [size]=\"12\"></lucide-angular> valore\r\n </button>\r\n <span class=\"dbg-na\" *ngIf=\"ev.metadata?.value === undefined\">—</span>\r\n </td>\r\n <td>\r\n <button class=\"dbg-json-btn\" *ngIf=\"ev.metadata?.formValues\"\r\n (click)=\"openJsonModal('Form Values — ' + ev.formId, ev.metadata!.formValues)\">\r\n <lucide-angular name=\"code\" [size]=\"12\"></lucide-angular> form\r\n </button>\r\n <span class=\"dbg-na\" *ngIf=\"!ev.metadata?.formValues\">—</span>\r\n </td>\r\n <td>\r\n <button class=\"dbg-json-btn\" *ngIf=\"ev.metadata\"\r\n (click)=\"openJsonModal('Dettagli evento', ev.metadata)\">\r\n <lucide-angular name=\"code\" [size]=\"12\"></lucide-angular>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <ng-template #noFormData>\r\n <div class=\"dbg-empty\">\r\n <lucide-angular name=\"file-text\" [size]=\"48\" style=\"opacity:0.3\"></lucide-angular>\r\n <p>Nessun form event registrato</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </mat-tab>\r\n\r\n <!-- TAB: HTTP Calls -->\r\n <mat-tab>\r\n <ng-template mat-tab-label>\r\n <lucide-angular name=\"external-link\" [size]=\"14\" style=\"margin-right:6px\"></lucide-angular>\r\n HTTP Calls\r\n </ng-template>\r\n\r\n <div class=\"dbg-tab-content\">\r\n <div class=\"dbg-table-wrap\" *ngIf=\"viewingSession?.calls?.length; else noHttpData\">\r\n <table class=\"dbg-table\">\r\n <thead>\r\n <tr>\r\n <th>Ora</th>\r\n <th>Metodo</th>\r\n <th>URL</th>\r\n <th>Status</th>\r\n <th>Durata</th>\r\n <th>Payload</th>\r\n <th>Headers</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let call of viewingSession!.calls\">\r\n <td class=\"dbg-mono\">{{ call.timestamp | date:'HH:mm:ss.SSS' }}</td>\r\n <td>\r\n <span class=\"dbg-badge\" [ngClass]=\"'dbg-badge--' + call.method.toLowerCase()\">{{ call.method }}</span>\r\n </td>\r\n <td class=\"dbg-mono dbg-truncate\">{{ call.url }}</td>\r\n <td>\r\n <span class=\"dbg-status\" [class.dbg-status--ok]=\"call.status && call.status < 400\"\r\n [class.dbg-status--err]=\"!call.status || call.status >= 400\">\r\n {{ call.status ?? '—' }}\r\n </span>\r\n </td>\r\n <td class=\"dbg-mono\">{{ call.durationMs }}ms</td>\r\n <td>\r\n <button class=\"dbg-json-btn\" *ngIf=\"call.requestPayload\"\r\n (click)=\"openJsonModal('Payload — ' + call.method + ' ' + call.url, call.requestPayload)\">\r\n <lucide-angular name=\"code\" [size]=\"12\"></lucide-angular>\r\n </button>\r\n <span class=\"dbg-na\" *ngIf=\"!call.requestPayload\">—</span>\r\n </td>\r\n <td>\r\n <button class=\"dbg-json-btn\" *ngIf=\"call.responseHeaders\"\r\n (click)=\"openJsonModal('Response Headers', call.responseHeaders)\">\r\n <lucide-angular name=\"code\" [size]=\"12\"></lucide-angular>\r\n </button>\r\n <span class=\"dbg-na\" *ngIf=\"!call.responseHeaders\">—</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <ng-template #noHttpData>\r\n <div class=\"dbg-empty\">\r\n <lucide-angular name=\"external-link\" [size]=\"48\" style=\"opacity:0.3\"></lucide-angular>\r\n <p>Nessuna chiamata HTTP intercettata</p>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n </div>\r\n `,\r\n styles: [`\r\n @use '../../core/tokens/mixins' as ui;\r\n\r\n /* ── Root ───────────────────────────────── */\r\n .dbg-root {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100vh;\r\n background: var(--ui-color-bg-subtle);\r\n &.dialog-mode { height: 100%; }\r\n }\r\n\r\n /* ── Header ─────────────────────────────── */\r\n .dbg-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: var(--ui-spacing-3) var(--ui-spacing-4);\r\n background: var(--ui-color-surface);\r\n border-bottom: 1px solid var(--ui-color-border);\r\n box-shadow: var(--ui-shadow-sm);\r\n\r\n h2 {\r\n margin: 0;\r\n font-size: var(--ui-font-size-lg);\r\n font-weight: 500;\r\n color: var(--ui-color-text);\r\n }\r\n }\r\n .dbg-header__left {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--ui-spacing-2);\r\n }\r\n .dbg-header__icon { color: var(--ui-color-primary); }\r\n\r\n /* ── Tabs ────────────────────────────────── */\r\n .dbg-tabs {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n\r\n ::ng-deep .mat-mdc-tab-header {\r\n background: var(--ui-color-surface);\r\n border-bottom: 1px solid var(--ui-color-border);\r\n }\r\n ::ng-deep .mat-mdc-tab .mdc-tab__text-label {\r\n color: var(--ui-color-text-secondary);\r\n font-weight: 500;\r\n font-size: var(--ui-font-size-sm);\r\n }\r\n ::ng-deep .mat-mdc-tab.mdc-tab--active .mdc-tab__text-label {\r\n color: var(--ui-color-primary);\r\n font-weight: 600;\r\n }\r\n ::ng-deep .mat-mdc-tab-header .mdc-tab-indicator__content--underline {\r\n border-color: var(--ui-color-primary);\r\n border-width: 3px;\r\n }\r\n ::ng-deep .mat-mdc-tab-body-wrapper { flex: 1; overflow: hidden; }\r\n ::ng-deep .mat-mdc-tab-body { height: 100%; }\r\n ::ng-deep .mat-mdc-tab-body-content { height: 100%; overflow: auto; }\r\n }\r\n\r\n .dbg-tab-content {\r\n padding: var(--ui-spacing-4);\r\n max-width: 1200px;\r\n margin: 0 auto;\r\n width: 100%;\r\n }\r\n\r\n /* ── Dashboard ───────────────────────────── */\r\n .dbg-dashboard { display: flex; flex-direction: column; gap: var(--ui-spacing-4); }\r\n .dbg-dashboard-grid {\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n gap: var(--ui-spacing-4);\r\n }\r\n\r\n .dbg-stats {\r\n display: grid;\r\n grid-template-columns: repeat(4, 1fr);\r\n gap: var(--ui-spacing-3);\r\n }\r\n .dbg-stat {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n gap: 4px;\r\n padding: var(--ui-spacing-4);\r\n background: var(--ui-color-surface);\r\n border: 1px solid var(--ui-color-border);\r\n border-radius: var(--ui-radius-lg);\r\n transition: box-shadow 0.15s;\r\n &:hover { box-shadow: var(--ui-shadow-md); }\r\n }\r\n .dbg-stat__icon { color: var(--ui-color-primary); opacity: 0.7; }\r\n .dbg-stat__value {\r\n font-size: var(--ui-font-size-2xl);\r\n font-weight: var(--ui-font-weight-bold);\r\n color: var(--ui-color-primary);\r\n font-family: var(--ui-font-family-mono);\r\n }\r\n .dbg-stat__label {\r\n font-size: 11px;\r\n color: var(--ui-color-text-muted);\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n }\r\n\r\n /* ── Panels ──────────────────────────────── */\r\n .dbg-panel {\r\n background: var(--ui-color-surface);\r\n border: 1px solid var(--ui-color-border);\r\n border-radius: var(--ui-radius-lg);\r\n padding: var(--ui-spacing-4);\r\n }\r\n .dbg-panel__header {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--ui-spacing-2);\r\n font-size: var(--ui-font-size-sm);\r\n font-weight: var(--ui-font-weight-semibold);\r\n color: var(--ui-color-text);\r\n margin-bottom: var(--ui-spacing-3);\r\n }\r\n .dbg-panel__desc {\r\n font-size: var(--ui-font-size-xs);\r\n color: var(--ui-color-text-secondary);\r\n margin: 0 0 var(--ui-spacing-3);\r\n }\r\n\r\n /* ── Key/Value grid ──────────────────────── */\r\n .dbg-kv {\r\n display: grid;\r\n grid-template-columns: 100px 1fr;\r\n gap: var(--ui-spacing-2) var(--ui-spacing-4);\r\n font-size: var(--ui-font-size-sm);\r\n }\r\n .dbg-kv__k {\r\n font-weight: 600;\r\n color: var(--ui-color-text-secondary);\r\n font-size: 11px;\r\n text-transform: uppercase;\r\n letter-spacing: 0.03em;\r\n }\r\n .dbg-kv__v { color: var(--ui-color-text); }\r\n .dbg-mono { font-family: var(--ui-font-family-mono); font-size: var(--ui-font-size-xs); }\r\n\r\n /* ── Simulator buttons ───────────────────── */\r\n .dbg-sim-btns { display: flex; gap: var(--ui-spacing-2); flex-wrap: wrap; }\r\n .dbg-sim-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 6px 14px;\r\n border-radius: var(--ui-radius-md);\r\n font-size: var(--ui-font-size-xs);\r\n font-weight: 600;\r\n cursor: pointer;\r\n border: 1px solid transparent;\r\n transition: all 0.15s;\r\n }\r\n .dbg-sim-btn--get { background: #dcfce7; color: #166534; border-color: #86efac; &:hover { background: #bbf7d0; } }\r\n .dbg-sim-btn--post { background: #dbeafe; color: #1e40af; border-color: #93c5fd; &:hover { background: #bfdbfe; } }\r\n .dbg-sim-btn--fail { background: #fee2e2; color: #991b1b; border-color: #fca5a5; &:hover { background: #fecaca; } }\r\n\r\n .dbg-action-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 6px;\r\n padding: 6px 14px;\r\n border-radius: var(--ui-radius-md);\r\n font-size: var(--ui-font-size-xs);\r\n font-weight: 600;\r\n cursor: pointer;\r\n background: var(--ui-color-surface);\r\n color: var(--ui-color-text);\r\n border: 1px solid var(--ui-color-border);\r\n transition: all 0.15s;\r\n &:hover { background: var(--ui-color-surface-hover); }\r\n }\r\n .dbg-action-btn--danger {\r\n color: #dc2626;\r\n border-color: #fca5a5;\r\n }\r\n .dbg-action-btn--danger:hover {\r\n background: #fee2e2;\r\n }\r\n\r\n /* ── Session list ────────────────────────── */\r\n .dbg-session-list { display: flex; flex-direction: column; gap: var(--ui-spacing-1); }\r\n .dbg-session-row {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--ui-spacing-3);\r\n padding: var(--ui-spacing-2) var(--ui-spacing-3);\r\n border: 1px solid var(--ui-color-border);\r\n border-radius: var(--ui-radius-md);\r\n font-size: var(--ui-font-size-xs);\r\n cursor: pointer;\r\n transition: all 0.12s;\r\n &:hover { border-color: var(--ui-color-primary); background: color-mix(in srgb, var(--ui-color-primary) 4%, transparent); }\r\n }\r\n .dbg-session-row__arrow { margin-left: auto; color: var(--ui-color-text-muted); }\r\n\r\n /* ── Unified Timeline ───────────────────── */\r\n .dbg-timeline { position: relative; padding-left: 24px; }\r\n .dbg-tl-entry { position: relative; margin-bottom: 2px; }\r\n .dbg-tl-entry__row {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--ui-spacing-2);\r\n padding: 4px var(--ui-spacing-3);\r\n border-radius: var(--ui-radius-md);\r\n font-size: 12px;\r\n transition: background 0.12s;\r\n &:hover { background: var(--ui-color-surface-hover); }\r\n }\r\n .dbg-tl-dot {\r\n width: 8px; height: 8px;\r\n border-radius: 50%;\r\n flex-shrink: 0;\r\n position: absolute;\r\n left: -16px; top: 10px;\r\n }\r\n .dbg-tl-dot--navigation { background: var(--ui-color-primary); width: 10px; height: 10px; left: -17px; top: 9px; }\r\n .dbg-tl-dot--click { background: var(--ui-color-border-strong); }\r\n .dbg-tl-dot--formEvent { background: #f59e0b; }\r\n .dbg-tl-dot--httpCall { background: #3b82f6; }\r\n .dbg-tl-line {\r\n position: absolute;\r\n left: -12px; top: 24px; bottom: -2px;\r\n width: 2px;\r\n background: var(--ui-color-border);\r\n }\r\n .dbg-tl-entry__time { color: var(--ui-color-text-muted); min-width: 85px; font-size: 11px; }\r\n .dbg-tl-entry__route { font-family: var(--ui-font-family-mono); font-weight: 600; color: var(--ui-color-text); font-size: 12px; }\r\n .dbg-tl-entry__target { font-family: var(--ui-font-family-mono); color: var(--ui-color-text-secondary); font-size: 11px; }\r\n .dbg-tl-entry__field { font-family: var(--ui-font-family-mono); color: var(--ui-color-text-secondary); font-size: 11px; }\r\n .dbg-tl-entry__url { font-family: var(--ui-font-family-mono); color: var(--ui-color-text-secondary); font-size: 11px; max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\r\n .dbg-tl-entry__detail { font-size: 11px; color: var(--ui-color-text-muted); }\r\n .dbg-tl-entry__text { color: var(--ui-color-text-muted); max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11px; }\r\n\r\n /* ── JSON button ─────────────────────────── */\r\n .dbg-json-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 4px;\r\n padding: 2px 8px;\r\n border-radius: var(--ui-radius-sm);\r\n font-size: 10px;\r\n font-weight: 600;\r\n cursor: pointer;\r\n background: var(--ui-color-bg-subtle);\r\n color: var(--ui-color-text-secondary);\r\n border: 1px solid var(--ui-color-border);\r\n transition: all 0.12s;\r\n &:hover { background: var(--ui-color-surface-hover); color: var(--ui-color-primary); border-color: var(--ui-color-primary); }\r\n }\r\n .dbg-na { color: var(--ui-color-text-muted); font-size: 11px; }\r\n\r\n /* ── Table ───────────────────────────────── */\r\n .dbg-table-wrap {\r\n overflow-x: auto;\r\n border: 1px solid var(--ui-color-border);\r\n border-radius: var(--ui-radius-lg);\r\n }\r\n .dbg-table {\r\n width: 100%;\r\n border-collapse: collapse;\r\n font-size: var(--ui-font-size-xs);\r\n\r\n th, td {\r\n padding: 8px 12px;\r\n text-align: left;\r\n border-bottom: 1px solid var(--ui-color-border);\r\n }\r\n th {\r\n background: var(--ui-color-bg-subtle);\r\n font-weight: 600;\r\n color: var(--ui-color-text-secondary);\r\n text-transform: uppercase;\r\n letter-spacing: 0.05em;\r\n font-size: 10px;\r\n }\r\n tbody tr:hover { background: var(--ui-color-surface-hover); }\r\n tbody tr:last-child td { border-bottom: none; }\r\n }\r\n .dbg-truncate { max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\r\n\r\n /* ── Badges ──────────────────────────────── */\r\n .dbg-badge {\r\n display: inline-block;\r\n padding: 1px 8px;\r\n border-radius: var(--ui-radius-full);\r\n font-size: 10px;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n .dbg-badge--tl-navigation { background: color-mix(in srgb, var(--ui-color-primary) 12%, transparent); color: var(--ui-color-primary); }\r\n .dbg-badge--tl-click { background: #f1f5f9; color: #475569; }\r\n .dbg-badge--tl-formEvent { background: #fef3c7; color: #92400e; }\r\n .dbg-badge--tl-httpCall { background: #dbeafe; color: #1e40af; }\r\n .dbg-badge--action { background: color-mix(in srgb, var(--ui-color-primary) 10%, transparent); color: var(--ui-color-primary); text-transform: uppercase; }\r\n .dbg-badge--id { background: color-mix(in srgb, var(--ui-color-primary) 8%, transparent); color: var(--ui-color-primary); }\r\n .dbg-badge--focus { background: #dbeafe; color: #1e40af; }\r\n .dbg-badge--blur { background: #f1f5f9; color: #475569; }\r\n .dbg-badge--valueChange { background: #fef3c7; color: #92400e; }\r\n .dbg-badge--validationError { background: #fee2e2; color: #991b1b; }\r\n .dbg-badge--get { background: #dcfce7; color: #166534; }\r\n .dbg-badge--post { background: #dbeafe; color: #1e40af; }\r\n .dbg-badge--put { background: #fef3c7; color: #92400e; }\r\n .dbg-badge--delete { background: #fee2e2; color: #991b1b; }\r\n\r\n .dbg-status { font-family: var(--ui-font-family-mono); font-weight: 600; }\r\n .dbg-status--ok { color: #16a34a; }\r\n .dbg-status--err { color: #dc2626; }\r\n\r\n /* ── Empty ───────────────────────────────── */\r\n .dbg-empty {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n padding: var(--ui-spacing-12);\r\n color: var(--ui-color-text-muted);\r\n text-align: center;\r\n p { margin: var(--ui-spacing-3) 0 0; font-size: var(--ui-font-size-sm); }\r\n }\r\n\r\n /* ── Responsive ──────────────────────────── */\r\n @media (max-width: 640px) {\r\n .dbg-stats { grid-template-columns: repeat(2, 1fr); }\r\n .dbg-dashboard-grid { grid-template-columns: 1fr; }\r\n .dbg-sim-btns { flex-direction: column; }\r\n }\r\n `],\r\n})\r\nexport class UiBlackboxDebuggerComponent implements OnInit, OnDestroy {\r\n private readonly blackbox = inject(UiBlackboxService);\r\n private readonly http = inject(HttpClient);\r\n private readonly modalService = inject(UiModalService);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n /** Whether opened inside a dialog. */\r\n isDialogMode = false;\r\n selectedTab = 0;\r\n\r\n session: UiBlackboxSession | null = null;\r\n viewingSession: UiBlackboxSession | null = null;\r\n pastSessions: UiBlackboxSession[] = [];\r\n\r\n statsCards: { icon: string; value: number; label: string }[] = [];\r\n\r\n /** Unified timeline entries sorted by timestamp. */\r\n timelineEntries: TimelineEntry[] = [];\r\n\r\n constructor(\r\n @Optional() public dialogRef: MatDialogRef<UiBlackboxDebuggerComponent>,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public dialogData: any,\r\n ) {\r\n this.isDialogMode = !!this.dialogRef;\r\n }\r\n\r\n get sessionDuration(): string {\r\n if (!this.session) return '—';\r\n const ms = Date.now() - this.session.startedAt;\r\n const s = Math.floor(ms / 1000);\r\n const m = Math.floor(s / 60);\r\n const h = Math.floor(m / 60);\r\n if (h > 0) return `${h}h ${m % 60}m`;\r\n if (m > 0) return `${m}m ${s % 60}s`;\r\n return `${s}s`;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.refresh();\r\n\r\n // Auto-refresh every 2s\r\n interval(2000)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.refresh();\r\n this.cdr.markForCheck();\r\n });\r\n\r\n // Load imported sessions if provided\r\n if (this.dialogData?.importedSessions?.length) {\r\n this.pastSessions = this.dialogData.importedSessions;\r\n this.viewingSession = this.pastSessions[0];\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n refresh(): void {\r\n this.session = this.blackbox.getCurrentSession();\r\n this.viewingSession = this.viewingSession ?? this.session;\r\n this.updateStats();\r\n this.buildTimeline();\r\n\r\n this.blackbox.getSessionHistory().then(sessions => {\r\n this.pastSessions = sessions.filter(s => s.sessionId !== this.session?.sessionId);\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n private updateStats(): void {\r\n const s = this.viewingSession;\r\n this.statsCards = [\r\n { icon: 'git-branch', value: s?.steps?.length ?? 0, label: 'Navigazioni' },\r\n { icon: 'mouse-pointer-click', value: s?.steps?.reduce((sum, st) => sum + st.actions.length, 0) ?? 0, label: 'Click' },\r\n { icon: 'file-text', value: s?.formEvents?.length ?? 0, label: 'Form Events' },\r\n { icon: 'external-link', value: s?.calls?.length ?? 0, label: 'HTTP Calls' },\r\n ];\r\n }\r\n\r\n /** Builds a unified timeline from all event sources. */\r\n private buildTimeline(): void {\r\n const entries: TimelineEntry[] = [];\r\n const s = this.viewingSession;\r\n if (!s) { this.timelineEntries = []; return; }\r\n\r\n // Navigation steps + their child actions\r\n for (const step of s.steps) {\r\n entries.push({\r\n timestamp: step.timestamp,\r\n kind: 'navigation',\r\n route: step.route,\r\n previousRoute: step.previousRoute,\r\n actionsCount: step.actions.length,\r\n });\r\n for (const action of step.actions) {\r\n entries.push({\r\n timestamp: action.timestamp,\r\n kind: 'click',\r\n tag: action.target.tag,\r\n trackId: action.target.trackId,\r\n text: action.target.text,\r\n });\r\n }\r\n }\r\n\r\n // Form events\r\n for (const fe of s.formEvents) {\r\n entries.push({\r\n timestamp: fe.timestamp,\r\n kind: 'formEvent',\r\n route: fe.route,\r\n formId: fe.formId,\r\n fieldKey: fe.fieldKey,\r\n eventType: fe.eventType,\r\n metadata: fe.metadata,\r\n });\r\n }\r\n\r\n // HTTP calls\r\n for (const call of s.calls) {\r\n entries.push({\r\n timestamp: call.timestamp,\r\n kind: 'httpCall',\r\n method: call.method,\r\n url: call.url,\r\n status: call.status,\r\n durationMs: call.durationMs,\r\n requestPayload: call.requestPayload,\r\n responseHeaders: call.responseHeaders,\r\n });\r\n }\r\n\r\n entries.sort((a, b) => a.timestamp - b.timestamp);\r\n this.timelineEntries = entries;\r\n }\r\n\r\n viewSession(s: UiBlackboxSession): void {\r\n this.viewingSession = s;\r\n this.updateStats();\r\n this.buildTimeline();\r\n this.selectedTab = 1; // switch to timeline\r\n this.cdr.markForCheck();\r\n }\r\n\r\n closeDialog(): void {\r\n this.dialogRef?.close();\r\n }\r\n\r\n // ─── JSON Modal ──────────────────────────────────────────────\r\n\r\n openJsonModal(title: string, data: any): void {\r\n this.modalService.open(UiBlackboxJsonViewerComponent, {\r\n size: 'md',\r\n data: { title, json: data },\r\n });\r\n }\r\n\r\n // ─── HTTP Simulator ────────────────────────────────────────────\r\n\r\n simulateGet(): void {\r\n this.http.get('https://jsonplaceholder.typicode.com/todos/1', {\r\n headers: new HttpHeaders({\r\n 'X-Ui-Blackbox': 'true',\r\n 'X-Ui-Blackbox-Headers': 'content-type',\r\n }),\r\n }).subscribe({ next: () => this.refresh(), error: () => this.refresh() });\r\n }\r\n\r\n simulatePost(): void {\r\n this.http.post('https://jsonplaceholder.typicode.com/posts', {\r\n title: 'BlackBox Test',\r\n body: 'Payload fittizio dalla demo',\r\n userId: 42,\r\n }, {\r\n headers: new HttpHeaders({ 'X-Ui-Blackbox': 'true' }),\r\n }).subscribe({ next: () => this.refresh(), error: () => this.refresh() });\r\n }\r\n\r\n simulateFail(): void {\r\n this.http.get('https://jsonplaceholder.typicode.com/todos/99999999', {\r\n headers: new HttpHeaders({ 'X-Ui-Blackbox': 'true' }),\r\n }).subscribe({ next: () => this.refresh(), error: () => this.refresh() });\r\n }\r\n\r\n // ─── Export / Import / Clear ───────────────────────────────────\r\n\r\n async exportSessions(): Promise<void> {\r\n const blob = await this.blackbox.exportSessions();\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = `blackbox-${new Date().toISOString().slice(0, 10)}.jsonl`;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n }\r\n\r\n importJsonl(): void {\r\n const input = document.createElement('input');\r\n input.type = 'file';\r\n input.accept = '.jsonl,.json';\r\n\r\n input.onchange = async (e: any) => {\r\n const file = e.target.files[0];\r\n if (!file) return;\r\n\r\n try {\r\n const text = await file.text();\r\n const lines = text.trim().split('\\n').filter((l: string) => l.trim());\r\n const sessions: UiBlackboxSession[] = lines.map((l: string) => JSON.parse(l));\r\n this.pastSessions = [...sessions, ...this.pastSessions];\r\n if (sessions.length > 0) {\r\n this.viewingSession = sessions[0];\r\n this.updateStats();\r\n this.buildTimeline();\r\n this.selectedTab = 1;\r\n }\r\n this.cdr.markForCheck();\r\n } catch {\r\n console.error('[BlackBox Debugger] Errore parsing JSONL');\r\n }\r\n };\r\n\r\n input.click();\r\n }\r\n\r\n async clearHistory(): Promise<void> {\r\n await this.blackbox.clearHistory();\r\n this.pastSessions = [];\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","/**\r\n * @module ng-ui-system/blackbox\r\n * Servizio per aprire il debugger BlackBox in una modale fullscreen.\r\n */\r\n\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UiModalService } from '../modal/index';\r\nimport { UiBlackboxDebuggerComponent } from './blackbox-debugger.component';\r\n\r\n/**\r\n * Servizio per aprire il debugger BlackBox in una modale fullscreen\r\n * tramite il UiModalService.\r\n *\r\n * @usageNotes\r\n *\r\n * ### Apertura base\r\n * ```typescript\r\n * const ref = this.debuggerService.open();\r\n * ```\r\n *\r\n * ### Apertura con sessioni importate (JSONL)\r\n * ```typescript\r\n * this.debuggerService.open({ importedSessions: mySessions });\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class UiBlackboxDebuggerService {\r\n /** @internal Servizio modale per l'apertura. */\r\n private readonly modalService = inject(UiModalService);\r\n\r\n /**\r\n * Apre il debugger in una modale fullscreen.\r\n *\r\n * @param config - Configurazione opzionale\r\n * @returns Riferimento alla dialog per gestire chiusura\r\n */\r\n open(config?: { importedSessions?: any[] }): MatDialogRef<UiBlackboxDebuggerComponent, void> {\r\n return this.modalService.open<UiBlackboxDebuggerComponent, any, void>(\r\n UiBlackboxDebuggerComponent,\r\n {\r\n size: 'fullscreen',\r\n disableClose: false,\r\n data: config ?? {},\r\n panelClass: 'ui-blackbox-debugger-dialog',\r\n },\r\n );\r\n }\r\n}\r\n","/**\r\n * @module ng-ui-system/blackbox\r\n * HTTP interceptor for BlackBox — captures requests marked with\r\n * the `X-Ui-Blackbox` header.\r\n *\r\n * @usageNotes\r\n * ### Setup (functional interceptor, Angular 17+)\r\n * ```typescript\r\n * // app.config.ts\r\n * import { provideHttpClient, withInterceptors } from '@angular/common/http';\r\n * import { uiBlackboxInterceptor } from '@gnggln/ng-ui-system';\r\n *\r\n * export const appConfig: ApplicationConfig = {\r\n * providers: [\r\n * provideHttpClient(withInterceptors([uiBlackboxInterceptor])),\r\n * ],\r\n * };\r\n * ```\r\n *\r\n * ### Marking a request\r\n * ```typescript\r\n * this.http.get('/api/data', {\r\n * headers: new HttpHeaders({\r\n * 'X-Ui-Blackbox': 'true',\r\n * // Optional: filter response headers to capture\r\n * 'X-Ui-Blackbox-Headers': 'x-request-id|x-correlation-.*',\r\n * }),\r\n * });\r\n * ```\r\n */\r\n\r\nimport { HttpInterceptorFn, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { tap, catchError } from 'rxjs/operators';\r\nimport { throwError } from 'rxjs';\r\n\r\nimport { UiBlackboxService } from './blackbox.service';\r\nimport type { UiBlackboxHttpCall } from './blackbox.types';\r\n\r\n/** Header name used to mark a request for BlackBox tracking. */\r\nconst MARKER_HEADER = 'X-Ui-Blackbox';\r\n\r\n/** Header name specifying a regex to filter response headers to capture. */\r\nconst HEADER_FILTER = 'X-Ui-Blackbox-Headers';\r\n\r\n/**\r\n * Angular functional HTTP interceptor for BlackBox.\r\n *\r\n * Only processes requests that include the `X-Ui-Blackbox` header.\r\n * Strips the custom headers before forwarding the request to the server.\r\n */\r\nexport const uiBlackboxInterceptor: HttpInterceptorFn = (req, next) => {\r\n // Only intercept marked requests\r\n if (!req.headers.has(MARKER_HEADER)) {\r\n return next(req);\r\n }\r\n\r\n const blackbox = inject(UiBlackboxService);\r\n const headerFilter = req.headers.get(HEADER_FILTER) ?? undefined;\r\n const startTime = Date.now();\r\n\r\n // Strip custom headers before forwarding\r\n const cleanReq = req.clone({\r\n headers: req.headers.delete(MARKER_HEADER).delete(HEADER_FILTER),\r\n });\r\n\r\n // Capture request payload\r\n const requestPayload = extractPayload(cleanReq);\r\n\r\n return next(cleanReq).pipe(\r\n tap((event) => {\r\n if (event instanceof HttpResponse) {\r\n const call: UiBlackboxHttpCall = {\r\n timestamp: startTime,\r\n method: cleanReq.method,\r\n url: cleanReq.urlWithParams,\r\n status: event.status,\r\n durationMs: Date.now() - startTime,\r\n requestPayload,\r\n responseHeaders: filterHeaders(event.headers, headerFilter),\r\n headerFilter,\r\n };\r\n blackbox.trackHttpCall(call);\r\n }\r\n }),\r\n catchError((error) => {\r\n const call: UiBlackboxHttpCall = {\r\n timestamp: startTime,\r\n method: cleanReq.method,\r\n url: cleanReq.urlWithParams,\r\n status: error.status ?? 0,\r\n durationMs: Date.now() - startTime,\r\n requestPayload,\r\n headerFilter,\r\n };\r\n blackbox.trackHttpCall(call);\r\n return throwError(() => error);\r\n }),\r\n );\r\n};\r\n\r\n// ─── Helpers ─────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Extract the request body in a serialisable form.\r\n * @internal\r\n */\r\nfunction extractPayload(req: HttpRequest<unknown>): any {\r\n if (req.body === null || req.body === undefined) return undefined;\r\n // Already serialisable (object / string / number)\r\n if (typeof req.body !== 'object') return req.body;\r\n try {\r\n // Deep-clone to avoid mutation issues\r\n return JSON.parse(JSON.stringify(req.body));\r\n } catch {\r\n return '[unserializable]';\r\n }\r\n}\r\n\r\n/**\r\n * Filter response headers using a regex pattern.\r\n * Returns undefined if no pattern is provided or no headers match.\r\n * @internal\r\n */\r\nfunction filterHeaders(\r\n headers: { keys(): string[]; get(name: string): string | null },\r\n pattern?: string,\r\n): Record<string, string> | undefined {\r\n if (!pattern) return undefined;\r\n\r\n try {\r\n const regex = new RegExp(pattern, 'i');\r\n const result: Record<string, string> = {};\r\n let found = false;\r\n\r\n for (const key of headers.keys()) {\r\n if (regex.test(key)) {\r\n const value = headers.get(key);\r\n if (value !== null) {\r\n result[key] = value;\r\n found = true;\r\n }\r\n }\r\n }\r\n\r\n return found ? result : undefined;\r\n } catch {\r\n // Invalid regex — skip header filtering\r\n return undefined;\r\n }\r\n}\r\n","/**\r\n * @module ng-ui-system/blackbox\r\n * Attribute directive for explicit UI action tracking.\r\n *\r\n * Apply `[uiTrack]` to any element to record clicks in the BlackBox session.\r\n * Works with the `UiBlackboxService` — if the service is not provided,\r\n * the directive is a no-op.\r\n *\r\n * @usageNotes\r\n * ```html\r\n * <!-- Link in a paragraph -->\r\n * <a [uiTrack]=\"'learn-more'\" href=\"/docs\">Scopri di più</a>\r\n *\r\n * <!-- Card with custom tracking ID -->\r\n * <div uiTrack=\"promo-card\" (click)=\"openPromo()\">\r\n * <h3>Offerta speciale</h3>\r\n * </div>\r\n *\r\n * <!-- Button outside of ui-button-area -->\r\n * <button [uiTrack]=\"'legacy-save'\" (click)=\"save()\">Salva</button>\r\n * ```\r\n */\r\n\r\nimport {\r\n Directive,\r\n Input,\r\n HostListener,\r\n ElementRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { UiBlackboxService } from './blackbox.service';\r\n\r\n/**\r\n * Standalone directive that tracks click actions on the host element.\r\n *\r\n * The tracking identifier is provided via the `uiTrack` input binding.\r\n * Clicking the host element records an action in the active BlackBox session\r\n * with the element's tag, id, and truncated innerText.\r\n */\r\n@Directive({\r\n selector: '[uiTrack]',\r\n standalone: true,\r\n})\r\nexport class UiTrackDirective {\r\n /**\r\n * Tracking identifier for this element.\r\n * Used as the `trackId` in the recorded action.\r\n */\r\n @Input('uiTrack') trackId: string = '';\r\n\r\n private readonly blackbox = inject(UiBlackboxService, { optional: true });\r\n private readonly el = inject(ElementRef<HTMLElement>);\r\n\r\n @HostListener('click')\r\n onClick(): void {\r\n if (!this.blackbox || !this.trackId) return;\r\n\r\n const nativeEl = this.el.nativeElement;\r\n this.blackbox.trackAction(this.trackId, {\r\n tag: nativeEl.tagName?.toLowerCase() ?? 'unknown',\r\n id: nativeEl.id || undefined,\r\n text: nativeEl.innerText?.substring(0, 50)?.trim() || undefined,\r\n });\r\n }\r\n}\r\n","/**\r\n * ng-ui-system — BlackBox Observability entry point.\r\n *\r\n * @example\r\n * ```typescript\r\n * import {\r\n * UiBlackboxService,\r\n * UiBlackboxConfig,\r\n * UiTrackDirective,\r\n * uiBlackboxInterceptor,\r\n * } from '@gnggln/ng-ui-system';\r\n * ```\r\n */\r\n\r\n// Services\r\nexport { UiBlackboxService } from './blackbox.service';\r\nexport { UiBlackboxFingerprintService } from './blackbox-fingerprint.service';\r\nexport { UiBlackboxStorageService } from './blackbox-storage.service';\r\nexport { UiBlackboxDebuggerService } from './blackbox-debugger.service';\r\n\r\n// Components\r\nexport { UiBlackboxDebuggerComponent } from './blackbox-debugger.component';\r\nexport { UiBlackboxJsonViewerComponent } from './blackbox-json-viewer.component';\r\n\r\n// Interceptor\r\nexport { uiBlackboxInterceptor } from './blackbox.interceptor';\r\n\r\n// Directives\r\nexport { UiTrackDirective } from './ui-track.directive';\r\n\r\n// Types\r\nexport type {\r\n UiBlackboxConfig,\r\n UiBlackboxFormTrackingConfig,\r\n UiBlackboxFingerprint,\r\n UiBlackboxSession,\r\n UiBlackboxStep,\r\n UiBlackboxAction,\r\n UiBlackboxActionTarget,\r\n UiBlackboxFormEvent,\r\n UiBlackboxFormEventType,\r\n UiBlackboxFormEventMetadata,\r\n UiBlackboxHttpCall,\r\n} from './blackbox.types';\r\n\r\nexport { UI_BLACKBOX_DEFAULTS } from './blackbox.types';\r\n","/**\n * Bootstrap del secondary entry `@gnggln/ng-ui-system/blackbox`. BlackBox observability.\n */\nexport * from './lib/components/blackbox/index';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './entry-blackbox';\n"],"names":["i2"],"mappings":"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"}