@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,1148 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy, ViewEncapsulation, Input, inject, PLATFORM_ID, Injectable, NgZone } from '@angular/core';
3
+ import * as i1 from '@angular/material/tooltip';
4
+ import { MatTooltipModule } from '@angular/material/tooltip';
5
+ import * as i2 from 'lucide-angular';
6
+ import { LucideAngularModule } from 'lucide-angular';
7
+ import { Router, NavigationEnd } from '@angular/router';
8
+ import { isPlatformBrowser } from '@angular/common';
9
+ import { Subject } from 'rxjs';
10
+ import { filter, takeUntil } from 'rxjs/operators';
11
+
12
+ /** @internal Size-to-icon-pixel mapping for consistent icon sizing. */
13
+ const ICON_SIZE_MAP = {
14
+ xs: 14,
15
+ sm: 16,
16
+ md: 18,
17
+ lg: 20,
18
+ xl: 22,
19
+ };
20
+ /**
21
+ * Standalone button component with design-token-driven theming,
22
+ * variant/size system, Lucide icon support, loading states, and WCAG 2.1 AA accessibility.
23
+ *
24
+ * Uses native `<button>` click events — listen with `(click)` on the host element.
25
+ *
26
+ * @selector ui-button
27
+ *
28
+ * @example
29
+ * ```html
30
+ * <!-- Basic -->
31
+ * <ui-button label="Save" variant="primary" icon="save" (click)="save()" />
32
+ *
33
+ * <!-- Loading -->
34
+ * <ui-button label="Submitting..." variant="primary" [loading]="true" />
35
+ *
36
+ * <!-- Icon-only: tooltip o ariaLabel forniscono il nome accessibile -->
37
+ * <ui-button icon="trash-2" variant="warn" tooltip="Elimina" (click)="delete()" />
38
+ * ```
39
+ */
40
+ class UiButtonComponent {
41
+ constructor() {
42
+ /** Button label text. */
43
+ this.label = '';
44
+ /** Tooltip text shown on hover (uses Angular Material tooltip). */
45
+ this.tooltip = '';
46
+ /** Visual style variant. */
47
+ this.variant = 'primary';
48
+ /** Size variant. */
49
+ this.size = 'md';
50
+ /** Icon position relative to the label. */
51
+ this.iconPosition = 'trailing';
52
+ /** Whether the button is in a loading state. Disables interaction and shows spinner. */
53
+ this.loading = false;
54
+ /** Whether the button is disabled. */
55
+ this.disabled = false;
56
+ /** Expand button to full container width. */
57
+ this.fullWidth = false;
58
+ /** HTML button type attribute. */
59
+ this.type = 'button';
60
+ }
61
+ /**
62
+ * Nome accessibile risolto per il pulsante nativo.
63
+ * Usa `ariaLabel` se impostato; per pulsanti solo icona senza testo visibile
64
+ * ricade sul `tooltip` (il tooltip Material non sostituisce il nome accessibile).
65
+ */
66
+ get effectiveAriaLabel() {
67
+ const explicit = this.ariaLabel?.trim();
68
+ if (explicit)
69
+ return explicit;
70
+ if (this.label?.trim())
71
+ return undefined;
72
+ const tip = this.tooltip?.trim();
73
+ if (this.icon && tip)
74
+ return tip;
75
+ return undefined;
76
+ }
77
+ /** Computed icon pixel size based on button size. */
78
+ get iconSize() {
79
+ return ICON_SIZE_MAP[this.size] ?? 18;
80
+ }
81
+ /** Assembled CSS class string for the native button element. */
82
+ get buttonClasses() {
83
+ return [
84
+ 'ui-button',
85
+ `ui-button--${this.variant}`,
86
+ `ui-button--${this.size}`,
87
+ this.loading ? 'ui-button--loading' : '',
88
+ this.fullWidth ? 'ui-button--full-width' : '',
89
+ !this.label && this.icon ? 'ui-button--icon-only' : '',
90
+ this.customClass ?? '',
91
+ ]
92
+ .filter(Boolean)
93
+ .join(' ');
94
+ }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UiButtonComponent, isStandalone: true, selector: "ui-button", inputs: { label: "label", tooltip: "tooltip", variant: "variant", size: "size", icon: "icon", iconPosition: "iconPosition", loading: "loading", disabled: "disabled", fullWidth: "fullWidth", type: "type", ariaLabel: "ariaLabel", customClass: "customClass" }, host: { properties: { "class.ui-button-host--full-width": "fullWidth" }, classAttribute: "ui-button-host" }, ngImport: i0, template: `
97
+ <button
98
+ [type]="type"
99
+ [class]="buttonClasses"
100
+ [disabled]="disabled || loading"
101
+ [attr.aria-label]="effectiveAriaLabel || null"
102
+ [attr.aria-busy]="loading || null"
103
+ [matTooltip]="tooltip"
104
+ >
105
+ <span class="ui-button__content" [class.ui-button__content--hidden]="loading">
106
+ @if (icon && iconPosition === 'leading') {
107
+ <lucide-icon [name]="icon!" [size]="iconSize" aria-hidden="true" />
108
+ }
109
+ @if (label) {
110
+ <span class="ui-button__label">{{ label }}</span>
111
+ }
112
+ <ng-content />
113
+ @if (icon && iconPosition === 'trailing') {
114
+ <lucide-icon [name]="icon!" [size]="iconSize" aria-hidden="true" />
115
+ }
116
+ </span>
117
+ @if (loading) {
118
+ <span class="ui-button__spinner-overlay">
119
+ <span class="ui-button__spinner" aria-hidden="true"></span>
120
+ <span class="ui-button__sr-only">Loading</span>
121
+ </span>
122
+ }
123
+ </button>
124
+ `, isInline: true, styles: [".ui-button-host{display:inline-flex}.ui-button-host--full-width{display:flex;width:100%}.ui-button{appearance:none;border:none;cursor:pointer;font-family:var(--ui-font-family);font-weight:var(--ui-font-weight-medium);letter-spacing:.01em;position:relative;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ui-radius-md);white-space:nowrap;text-decoration:none;overflow:hidden;transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast),border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast),opacity var(--ui-transition-fast)}.ui-button:focus{outline:none}.ui-button:focus-visible{outline:var(--ui-focus-ring-width) solid var(--ui-focus-ring-color);outline-offset:var(--ui-focus-ring-offset)}.ui-button:disabled{opacity:.5;cursor:not-allowed}.ui-button--full-width{width:100%}.ui-button--xs{height:28px;padding:0 var(--ui-spacing-2);font-size:var(--ui-font-size-xs);border-radius:var(--ui-radius-sm);gap:var(--ui-spacing-1)}.ui-button--sm{height:32px;padding:0 var(--ui-spacing-3);font-size:var(--ui-font-size-xs);gap:6px}.ui-button--md{height:36px;padding:0 var(--ui-spacing-4);font-size:var(--ui-font-size-sm);gap:var(--ui-spacing-2)}.ui-button--lg{height:40px;padding:0 var(--ui-spacing-5);font-size:var(--ui-font-size-sm);gap:var(--ui-spacing-2)}.ui-button--xl{height:48px;padding:0 var(--ui-spacing-6);font-size:var(--ui-font-size-md);gap:var(--ui-spacing-3)}.ui-button--icon-only.ui-button--xs{width:28px;padding:0}.ui-button--icon-only.ui-button--sm{width:32px;padding:0}.ui-button--icon-only.ui-button--md{width:36px;padding:0}.ui-button--icon-only.ui-button--lg{width:40px;padding:0}.ui-button--icon-only.ui-button--xl{width:48px;padding:0}.ui-button--primary{background:var(--ui-color-primary);color:var(--ui-color-primary-contrast)}.ui-button--primary:hover:not(:disabled){background:var(--ui-color-primary-hover)}.ui-button--primary:active:not(:disabled){background:var(--ui-color-primary-active)}.ui-button--accent{background:var(--ui-color-accent);color:var(--ui-color-accent-contrast)}.ui-button--accent:hover:not(:disabled){background:var(--ui-color-accent-hover)}.ui-button--accent:active:not(:disabled){background:var(--ui-color-accent-active)}.ui-button--warn{background:var(--ui-color-warn);color:var(--ui-color-warn-contrast)}.ui-button--warn:hover:not(:disabled){background:var(--ui-color-warn-hover)}.ui-button--warn:active:not(:disabled){background:var(--ui-color-warn-active)}.ui-button--neutral{background:var(--ui-color-neutral-200);color:var(--ui-color-text)}.ui-button--neutral:hover:not(:disabled){background:var(--ui-color-neutral-300)}.ui-button--neutral:active:not(:disabled){background:var(--ui-color-neutral-400);color:var(--ui-color-text-inverse)}.ui-button--ghost{background:transparent;color:var(--ui-color-text-secondary)}.ui-button--ghost:hover:not(:disabled){background:var(--ui-color-surface-hover);color:var(--ui-color-text)}.ui-button--ghost:active:not(:disabled){background:var(--ui-color-neutral-200)}.ui-button--outline{background:transparent;color:var(--ui-color-primary);border:1.5px solid var(--ui-color-border-strong)}.ui-button--outline:hover:not(:disabled){background:var(--ui-color-primary-light);border-color:var(--ui-color-primary)}.ui-button--outline:active:not(:disabled){background:var(--ui-color-primary-light);border-color:var(--ui-color-primary-hover)}.ui-button--loading{cursor:wait;pointer-events:none}.ui-button__content{display:inline-flex;align-items:center;gap:inherit;transition:visibility var(--ui-transition-fast)}.ui-button__content--hidden{visibility:hidden}.ui-button__label{line-height:1;background-color:transparent!important}.ui-button__spinner-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.ui-button__spinner{width:1.1em;height:1.1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:ui-button-spin .6s linear infinite}@keyframes ui-button-spin{to{transform:rotate(360deg)}}.ui-button__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i2.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
125
+ }
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiButtonComponent, decorators: [{
127
+ type: Component,
128
+ args: [{ selector: 'ui-button', standalone: true, imports: [MatTooltipModule, LucideAngularModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
129
+ class: 'ui-button-host',
130
+ '[class.ui-button-host--full-width]': 'fullWidth',
131
+ }, template: `
132
+ <button
133
+ [type]="type"
134
+ [class]="buttonClasses"
135
+ [disabled]="disabled || loading"
136
+ [attr.aria-label]="effectiveAriaLabel || null"
137
+ [attr.aria-busy]="loading || null"
138
+ [matTooltip]="tooltip"
139
+ >
140
+ <span class="ui-button__content" [class.ui-button__content--hidden]="loading">
141
+ @if (icon && iconPosition === 'leading') {
142
+ <lucide-icon [name]="icon!" [size]="iconSize" aria-hidden="true" />
143
+ }
144
+ @if (label) {
145
+ <span class="ui-button__label">{{ label }}</span>
146
+ }
147
+ <ng-content />
148
+ @if (icon && iconPosition === 'trailing') {
149
+ <lucide-icon [name]="icon!" [size]="iconSize" aria-hidden="true" />
150
+ }
151
+ </span>
152
+ @if (loading) {
153
+ <span class="ui-button__spinner-overlay">
154
+ <span class="ui-button__spinner" aria-hidden="true"></span>
155
+ <span class="ui-button__sr-only">Loading</span>
156
+ </span>
157
+ }
158
+ </button>
159
+ `, styles: [".ui-button-host{display:inline-flex}.ui-button-host--full-width{display:flex;width:100%}.ui-button{appearance:none;border:none;cursor:pointer;font-family:var(--ui-font-family);font-weight:var(--ui-font-weight-medium);letter-spacing:.01em;position:relative;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--ui-radius-md);white-space:nowrap;text-decoration:none;overflow:hidden;transition:background-color var(--ui-transition-fast),color var(--ui-transition-fast),border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast),opacity var(--ui-transition-fast)}.ui-button:focus{outline:none}.ui-button:focus-visible{outline:var(--ui-focus-ring-width) solid var(--ui-focus-ring-color);outline-offset:var(--ui-focus-ring-offset)}.ui-button:disabled{opacity:.5;cursor:not-allowed}.ui-button--full-width{width:100%}.ui-button--xs{height:28px;padding:0 var(--ui-spacing-2);font-size:var(--ui-font-size-xs);border-radius:var(--ui-radius-sm);gap:var(--ui-spacing-1)}.ui-button--sm{height:32px;padding:0 var(--ui-spacing-3);font-size:var(--ui-font-size-xs);gap:6px}.ui-button--md{height:36px;padding:0 var(--ui-spacing-4);font-size:var(--ui-font-size-sm);gap:var(--ui-spacing-2)}.ui-button--lg{height:40px;padding:0 var(--ui-spacing-5);font-size:var(--ui-font-size-sm);gap:var(--ui-spacing-2)}.ui-button--xl{height:48px;padding:0 var(--ui-spacing-6);font-size:var(--ui-font-size-md);gap:var(--ui-spacing-3)}.ui-button--icon-only.ui-button--xs{width:28px;padding:0}.ui-button--icon-only.ui-button--sm{width:32px;padding:0}.ui-button--icon-only.ui-button--md{width:36px;padding:0}.ui-button--icon-only.ui-button--lg{width:40px;padding:0}.ui-button--icon-only.ui-button--xl{width:48px;padding:0}.ui-button--primary{background:var(--ui-color-primary);color:var(--ui-color-primary-contrast)}.ui-button--primary:hover:not(:disabled){background:var(--ui-color-primary-hover)}.ui-button--primary:active:not(:disabled){background:var(--ui-color-primary-active)}.ui-button--accent{background:var(--ui-color-accent);color:var(--ui-color-accent-contrast)}.ui-button--accent:hover:not(:disabled){background:var(--ui-color-accent-hover)}.ui-button--accent:active:not(:disabled){background:var(--ui-color-accent-active)}.ui-button--warn{background:var(--ui-color-warn);color:var(--ui-color-warn-contrast)}.ui-button--warn:hover:not(:disabled){background:var(--ui-color-warn-hover)}.ui-button--warn:active:not(:disabled){background:var(--ui-color-warn-active)}.ui-button--neutral{background:var(--ui-color-neutral-200);color:var(--ui-color-text)}.ui-button--neutral:hover:not(:disabled){background:var(--ui-color-neutral-300)}.ui-button--neutral:active:not(:disabled){background:var(--ui-color-neutral-400);color:var(--ui-color-text-inverse)}.ui-button--ghost{background:transparent;color:var(--ui-color-text-secondary)}.ui-button--ghost:hover:not(:disabled){background:var(--ui-color-surface-hover);color:var(--ui-color-text)}.ui-button--ghost:active:not(:disabled){background:var(--ui-color-neutral-200)}.ui-button--outline{background:transparent;color:var(--ui-color-primary);border:1.5px solid var(--ui-color-border-strong)}.ui-button--outline:hover:not(:disabled){background:var(--ui-color-primary-light);border-color:var(--ui-color-primary)}.ui-button--outline:active:not(:disabled){background:var(--ui-color-primary-light);border-color:var(--ui-color-primary-hover)}.ui-button--loading{cursor:wait;pointer-events:none}.ui-button__content{display:inline-flex;align-items:center;gap:inherit;transition:visibility var(--ui-transition-fast)}.ui-button__content--hidden{visibility:hidden}.ui-button__label{line-height:1;background-color:transparent!important}.ui-button__spinner-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.ui-button__spinner{width:1.1em;height:1.1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:ui-button-spin .6s linear infinite}@keyframes ui-button-spin{to{transform:rotate(360deg)}}.ui-button__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
160
+ }], propDecorators: { label: [{
161
+ type: Input
162
+ }], tooltip: [{
163
+ type: Input
164
+ }], variant: [{
165
+ type: Input
166
+ }], size: [{
167
+ type: Input
168
+ }], icon: [{
169
+ type: Input
170
+ }], iconPosition: [{
171
+ type: Input
172
+ }], loading: [{
173
+ type: Input
174
+ }], disabled: [{
175
+ type: Input
176
+ }], fullWidth: [{
177
+ type: Input
178
+ }], type: [{
179
+ type: Input
180
+ }], ariaLabel: [{
181
+ type: Input
182
+ }], customClass: [{
183
+ type: Input
184
+ }] } });
185
+
186
+ /**
187
+ * @module ng-ui-system/blackbox
188
+ * Types and interfaces for the BlackBox observability service.
189
+ *
190
+ * The BlackBox service acts as a "black box recorder" for user sessions,
191
+ * capturing navigation, UI interactions, form events and HTTP calls
192
+ * in a compressed, opaque format stored in IndexedDB.
193
+ */
194
+ // ─── Defaults ────────────────────────────────────────────────────────
195
+ /** Default configuration values. */
196
+ const UI_BLACKBOX_DEFAULTS = {
197
+ maxStorageMb: 50,
198
+ flushIntervalMs: 5000,
199
+ flushThreshold: 20,
200
+ bufferDebounceMs: 500,
201
+ formTracking: {
202
+ trackValues: false,
203
+ trackFocus: true,
204
+ trackBlur: true,
205
+ trackValueChanges: true,
206
+ trackValidation: true,
207
+ debounceMs: 500,
208
+ },
209
+ };
210
+
211
+ /**
212
+ * @module ng-ui-system/blackbox
213
+ * Fingerprint service — generates a stable device/browser hash
214
+ * using the open-source FingerprintJS library (MIT, no API key required).
215
+ *
216
+ * The fingerprint is computed once and cached in `localStorage` under
217
+ * the key `__ui_bb_fp` to avoid redundant recalculations.
218
+ */
219
+ /** localStorage key for the cached fingerprint. */
220
+ const FP_CACHE_KEY = '__ui_bb_fp';
221
+ /**
222
+ * Generates and caches a stable browser/device fingerprint.
223
+ *
224
+ * Uses `@fingerprintjs/fingerprintjs` (open-source, MIT) which analyses
225
+ * canvas rendering, WebGL, audio context, screen properties, timezone,
226
+ * user-agent, and other browser signals to produce a stable hash.
227
+ *
228
+ * @usageNotes
229
+ * ```typescript
230
+ * const fp = inject(UiBlackboxFingerprintService);
231
+ * const hash = await fp.getFingerprint();
232
+ * // => "a1b2c3d4e5f6..." (stable across sessions)
233
+ * ```
234
+ */
235
+ class UiBlackboxFingerprintService {
236
+ constructor() {
237
+ this.platformId = inject(PLATFORM_ID);
238
+ this.cached = null;
239
+ }
240
+ /**
241
+ * Returns the stable fingerprint for this device/browser.
242
+ *
243
+ * On first call, loads FingerprintJS dynamically, computes the hash,
244
+ * and caches it in both memory and `localStorage`.
245
+ * Subsequent calls return the cached value immediately.
246
+ */
247
+ async getFingerprint() {
248
+ // Return cached value if available
249
+ if (this.cached) {
250
+ return this.cached;
251
+ }
252
+ // SSR guard
253
+ if (!isPlatformBrowser(this.platformId)) {
254
+ return 'ssr-placeholder';
255
+ }
256
+ // Try localStorage cache first
257
+ try {
258
+ const stored = localStorage.getItem(FP_CACHE_KEY);
259
+ if (stored) {
260
+ this.cached = stored;
261
+ return stored;
262
+ }
263
+ }
264
+ catch {
265
+ // localStorage may be unavailable (privacy mode, quota exceeded)
266
+ }
267
+ // Compute fingerprint via FingerprintJS
268
+ try {
269
+ const FingerprintJS = await import('@fingerprintjs/fingerprintjs');
270
+ const agent = await FingerprintJS.load();
271
+ const result = await agent.get();
272
+ this.cached = result.visitorId;
273
+ // Persist to localStorage
274
+ try {
275
+ localStorage.setItem(FP_CACHE_KEY, this.cached);
276
+ }
277
+ catch {
278
+ // Silently ignore storage errors
279
+ }
280
+ return this.cached;
281
+ }
282
+ catch {
283
+ // Fallback: generate a pseudo-fingerprint from available signals
284
+ const fallback = this.generateFallbackFingerprint();
285
+ this.cached = fallback;
286
+ try {
287
+ localStorage.setItem(FP_CACHE_KEY, fallback);
288
+ }
289
+ catch {
290
+ // Silently ignore
291
+ }
292
+ return fallback;
293
+ }
294
+ }
295
+ /**
296
+ * Fallback fingerprint when FingerprintJS is unavailable.
297
+ * Combines basic browser signals into a hash.
298
+ * @internal
299
+ */
300
+ generateFallbackFingerprint() {
301
+ const signals = [
302
+ navigator.userAgent,
303
+ navigator.language,
304
+ screen.width + 'x' + screen.height,
305
+ screen.colorDepth?.toString() ?? '',
306
+ Intl.DateTimeFormat().resolvedOptions().timeZone,
307
+ navigator.hardwareConcurrency?.toString() ?? '',
308
+ ].join('|');
309
+ // Simple string hash (djb2)
310
+ let hash = 5381;
311
+ for (let i = 0; i < signals.length; i++) {
312
+ hash = ((hash << 5) + hash + signals.charCodeAt(i)) >>> 0;
313
+ }
314
+ return hash.toString(36).padStart(12, '0');
315
+ }
316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxFingerprintService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
317
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxFingerprintService, providedIn: 'root' }); }
318
+ }
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxFingerprintService, decorators: [{
320
+ type: Injectable,
321
+ args: [{ providedIn: 'root' }]
322
+ }] });
323
+
324
+ /**
325
+ * @module ng-ui-system/blackbox
326
+ * IndexedDB storage adapter for BlackBox sessions.
327
+ *
328
+ * Handles persistence, compression (via native CompressionStream gzip),
329
+ * quota enforcement, and JSONL export.
330
+ *
331
+ * Design notes:
332
+ * - DB name: `ui-blackbox`, object store: `sessions`
333
+ * - Each session is gzip-compressed before storage for both size
334
+ * reduction and inherent obfuscation
335
+ * - Quota enforced by total stored size; oldest sessions are pruned first
336
+ */
337
+ const DB_NAME = 'ui-blackbox';
338
+ const DB_VERSION = 1;
339
+ const STORE_NAME = 'sessions';
340
+ /**
341
+ * Low-level IndexedDB adapter for reading/writing compressed BlackBox sessions.
342
+ *
343
+ * @usageNotes
344
+ * This service is used internally by `UiBlackboxService`.
345
+ * Consumers should interact with the higher-level `UiBlackboxService` API.
346
+ */
347
+ class UiBlackboxStorageService {
348
+ constructor() {
349
+ this.platformId = inject(PLATFORM_ID);
350
+ this.db = null;
351
+ this.maxStorageMb = UI_BLACKBOX_DEFAULTS.maxStorageMb;
352
+ }
353
+ // ─── Configuration ─────────────────────────────────────────────────
354
+ /** Update the storage quota from the parent service config. */
355
+ setMaxStorageMb(mb) {
356
+ this.maxStorageMb = mb;
357
+ }
358
+ // ─── Database lifecycle ────────────────────────────────────────────
359
+ /** Open (or create) the IndexedDB database. */
360
+ async openDb() {
361
+ if (this.db)
362
+ return this.db;
363
+ if (!isPlatformBrowser(this.platformId)) {
364
+ throw new Error('IndexedDB is not available in SSR');
365
+ }
366
+ return new Promise((resolve, reject) => {
367
+ const request = indexedDB.open(DB_NAME, DB_VERSION);
368
+ request.onupgradeneeded = () => {
369
+ const db = request.result;
370
+ if (!db.objectStoreNames.contains(STORE_NAME)) {
371
+ const store = db.createObjectStore(STORE_NAME, { keyPath: 'sessionId' });
372
+ store.createIndex('fingerprint', 'fingerprint', { unique: false });
373
+ store.createIndex('startedAt', 'startedAt', { unique: false });
374
+ }
375
+ };
376
+ request.onsuccess = () => {
377
+ this.db = request.result;
378
+ resolve(this.db);
379
+ };
380
+ request.onerror = () => reject(request.error);
381
+ });
382
+ }
383
+ // ─── Compression helpers ───────────────────────────────────────────
384
+ /** Compress a string to a gzip Uint8Array using native CompressionStream. */
385
+ async compress(data) {
386
+ const encoder = new TextEncoder();
387
+ const stream = new Blob([encoder.encode(data)])
388
+ .stream()
389
+ .pipeThrough(new CompressionStream('gzip'));
390
+ const reader = stream.getReader();
391
+ const chunks = [];
392
+ let done = false;
393
+ while (!done) {
394
+ const result = await reader.read();
395
+ done = result.done;
396
+ if (result.value) {
397
+ chunks.push(result.value);
398
+ }
399
+ }
400
+ // Merge chunks into a single ArrayBuffer-backed Uint8Array
401
+ const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);
402
+ const buffer = new ArrayBuffer(totalLength);
403
+ const merged = new Uint8Array(buffer);
404
+ let offset = 0;
405
+ for (const chunk of chunks) {
406
+ merged.set(chunk, offset);
407
+ offset += chunk.length;
408
+ }
409
+ return merged;
410
+ }
411
+ /** Decompress a gzip Uint8Array back to a string. */
412
+ async decompress(data) {
413
+ const stream = new Blob([data])
414
+ .stream()
415
+ .pipeThrough(new DecompressionStream('gzip'));
416
+ const reader = stream.getReader();
417
+ const decoder = new TextDecoder();
418
+ let result = '';
419
+ let done = false;
420
+ while (!done) {
421
+ const chunk = await reader.read();
422
+ done = chunk.done;
423
+ if (chunk.value) {
424
+ result += decoder.decode(chunk.value, { stream: !done });
425
+ }
426
+ }
427
+ return result;
428
+ }
429
+ // ─── CRUD ──────────────────────────────────────────────────────────
430
+ /**
431
+ * Persist a session to IndexedDB (gzip-compressed).
432
+ * Enforces quota after saving.
433
+ */
434
+ async saveSession(session) {
435
+ const db = await this.openDb();
436
+ const json = JSON.stringify(session);
437
+ const compressed = await this.compress(json);
438
+ return new Promise((resolve, reject) => {
439
+ const tx = db.transaction(STORE_NAME, 'readwrite');
440
+ const store = tx.objectStore(STORE_NAME);
441
+ // Store as { sessionId, fingerprint, startedAt, data: Uint8Array }
442
+ store.put({
443
+ sessionId: session.sessionId,
444
+ fingerprint: session.fingerprint,
445
+ startedAt: session.startedAt,
446
+ sizeBytes: compressed.byteLength,
447
+ data: compressed,
448
+ });
449
+ tx.oncomplete = () => {
450
+ this.enforceQuota().then(resolve).catch(resolve);
451
+ };
452
+ tx.onerror = () => reject(tx.error);
453
+ });
454
+ }
455
+ /**
456
+ * Read and decompress a single session by ID.
457
+ */
458
+ async getSession(sessionId) {
459
+ const db = await this.openDb();
460
+ return new Promise((resolve, reject) => {
461
+ const tx = db.transaction(STORE_NAME, 'readonly');
462
+ const store = tx.objectStore(STORE_NAME);
463
+ const req = store.get(sessionId);
464
+ req.onsuccess = async () => {
465
+ if (!req.result) {
466
+ resolve(null);
467
+ return;
468
+ }
469
+ try {
470
+ const json = await this.decompress(req.result.data);
471
+ resolve(JSON.parse(json));
472
+ }
473
+ catch (e) {
474
+ reject(e);
475
+ }
476
+ };
477
+ req.onerror = () => reject(req.error);
478
+ });
479
+ }
480
+ /**
481
+ * Get all stored sessions (decompressed).
482
+ */
483
+ async getAllSessions() {
484
+ const db = await this.openDb();
485
+ return new Promise((resolve, reject) => {
486
+ const tx = db.transaction(STORE_NAME, 'readonly');
487
+ const store = tx.objectStore(STORE_NAME);
488
+ const req = store.getAll();
489
+ req.onsuccess = async () => {
490
+ try {
491
+ const sessions = [];
492
+ for (const record of req.result) {
493
+ const json = await this.decompress(record.data);
494
+ sessions.push(JSON.parse(json));
495
+ }
496
+ resolve(sessions);
497
+ }
498
+ catch (e) {
499
+ reject(e);
500
+ }
501
+ };
502
+ req.onerror = () => reject(req.error);
503
+ });
504
+ }
505
+ /**
506
+ * Get all sessions for a given fingerprint.
507
+ */
508
+ async getSessionsByFingerprint(fingerprint) {
509
+ const db = await this.openDb();
510
+ return new Promise((resolve, reject) => {
511
+ const tx = db.transaction(STORE_NAME, 'readonly');
512
+ const store = tx.objectStore(STORE_NAME);
513
+ const index = store.index('fingerprint');
514
+ const req = index.getAll(fingerprint);
515
+ req.onsuccess = async () => {
516
+ try {
517
+ const sessions = [];
518
+ for (const record of req.result) {
519
+ const json = await this.decompress(record.data);
520
+ sessions.push(JSON.parse(json));
521
+ }
522
+ resolve(sessions);
523
+ }
524
+ catch (e) {
525
+ reject(e);
526
+ }
527
+ };
528
+ req.onerror = () => reject(req.error);
529
+ });
530
+ }
531
+ /**
532
+ * Generate a downloadable JSONL Blob of all sessions.
533
+ * Each line is one JSON-serialised session (decompressed).
534
+ */
535
+ async exportDump() {
536
+ const sessions = await this.getAllSessions();
537
+ const lines = sessions.map((s) => JSON.stringify(s)).join('\n');
538
+ return new Blob([lines], { type: 'application/x-ndjson' });
539
+ }
540
+ /**
541
+ * Delete all stored sessions.
542
+ */
543
+ async clearAll() {
544
+ const db = await this.openDb();
545
+ return new Promise((resolve, reject) => {
546
+ const tx = db.transaction(STORE_NAME, 'readwrite');
547
+ const store = tx.objectStore(STORE_NAME);
548
+ store.clear();
549
+ tx.oncomplete = () => resolve();
550
+ tx.onerror = () => reject(tx.error);
551
+ });
552
+ }
553
+ // ─── Quota enforcement ─────────────────────────────────────────────
554
+ /**
555
+ * Prune oldest sessions until total stored size is under `maxStorageMb`.
556
+ * @internal
557
+ */
558
+ async enforceQuota() {
559
+ const db = await this.openDb();
560
+ const maxBytes = this.maxStorageMb * 1024 * 1024;
561
+ return new Promise((resolve, reject) => {
562
+ const tx = db.transaction(STORE_NAME, 'readwrite');
563
+ const store = tx.objectStore(STORE_NAME);
564
+ const index = store.index('startedAt');
565
+ // Collect all records sorted by startedAt (ascending = oldest first)
566
+ const cursorReq = index.openCursor();
567
+ const records = [];
568
+ let totalSize = 0;
569
+ cursorReq.onsuccess = () => {
570
+ const cursor = cursorReq.result;
571
+ if (cursor) {
572
+ const size = cursor.value.sizeBytes || 0;
573
+ totalSize += size;
574
+ records.push({ key: cursor.primaryKey, size });
575
+ cursor.continue();
576
+ }
577
+ else {
578
+ // Cursor exhausted — prune if over quota
579
+ if (totalSize <= maxBytes) {
580
+ resolve();
581
+ return;
582
+ }
583
+ let freed = 0;
584
+ const target = totalSize - maxBytes;
585
+ for (const record of records) {
586
+ if (freed >= target)
587
+ break;
588
+ store.delete(record.key);
589
+ freed += record.size;
590
+ }
591
+ resolve();
592
+ }
593
+ };
594
+ cursorReq.onerror = () => reject(cursorReq.error);
595
+ tx.onerror = () => reject(tx.error);
596
+ });
597
+ }
598
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
599
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxStorageService, providedIn: 'root' }); }
600
+ }
601
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxStorageService, decorators: [{
602
+ type: Injectable,
603
+ args: [{ providedIn: 'root' }]
604
+ }] });
605
+
606
+ /**
607
+ * @module ng-ui-system/blackbox
608
+ * Core BlackBox observability service — the main entry point for session
609
+ * recording, event buffering, and export.
610
+ *
611
+ * Architecture:
612
+ * - Root singleton (`providedIn: 'root'`)
613
+ * - On first inject: generates fingerprint, creates session, subscribes to Router events
614
+ * - Centralised in-memory buffer with periodic/threshold-based flush to IndexedDB
615
+ * - `window:beforeunload` triggers a final best-effort async flush
616
+ */
617
+ /**
618
+ * Central BlackBox observability service.
619
+ *
620
+ * Records navigation, UI interactions, form events, and HTTP calls
621
+ * into compressed sessions stored in IndexedDB.
622
+ *
623
+ * @usageNotes
624
+ * The service activates automatically when injected. Provide it at root level
625
+ * and it will start recording immediately.
626
+ *
627
+ * ```typescript
628
+ * // app.config.ts — just importing the service is enough
629
+ * import { UiBlackboxService } from '@gnggln/ng-ui-system';
630
+ *
631
+ * export const appConfig: ApplicationConfig = {
632
+ * providers: [
633
+ * // The service is providedIn: 'root', so it's auto-provided.
634
+ * // To force eager initialisation:
635
+ * { provide: APP_INITIALIZER, useFactory: () => () => inject(UiBlackboxService), multi: true },
636
+ * ],
637
+ * };
638
+ * ```
639
+ */
640
+ class UiBlackboxService {
641
+ constructor() {
642
+ this.platformId = inject(PLATFORM_ID);
643
+ this.router = inject(Router);
644
+ this.zone = inject(NgZone);
645
+ this.fingerprint = inject(UiBlackboxFingerprintService);
646
+ this.storage = inject(UiBlackboxStorageService);
647
+ this.destroy$ = new Subject();
648
+ this.config = { ...UI_BLACKBOX_DEFAULTS };
649
+ this.currentStep = null;
650
+ this.initialised = false;
651
+ // ─── Centralised event buffer ──────────────────────────────────────
652
+ this.buffer = [];
653
+ this.flushTimerId = null;
654
+ this.beforeUnloadHandler = null;
655
+ if (isPlatformBrowser(this.platformId)) {
656
+ this.init();
657
+ }
658
+ }
659
+ // ─── Initialisation ────────────────────────────────────────────────
660
+ async init() {
661
+ // Generate session ID
662
+ const sessionId = this.generateUuid();
663
+ const fp = await this.fingerprint.getFingerprint();
664
+ this.session = {
665
+ sessionId,
666
+ fingerprint: fp,
667
+ startedAt: Date.now(),
668
+ userAgent: navigator.userAgent,
669
+ steps: [],
670
+ formEvents: [],
671
+ calls: [],
672
+ };
673
+ // Create initial step from current URL
674
+ this.currentStep = {
675
+ timestamp: Date.now(),
676
+ route: this.router.url,
677
+ actions: [],
678
+ };
679
+ this.session.steps.push(this.currentStep);
680
+ // Subscribe to router navigation
681
+ this.router.events
682
+ .pipe(filter((e) => e instanceof NavigationEnd), takeUntil(this.destroy$))
683
+ .subscribe((event) => {
684
+ const previousRoute = this.currentStep?.route;
685
+ this.currentStep = {
686
+ timestamp: Date.now(),
687
+ route: event.urlAfterRedirects,
688
+ previousRoute,
689
+ actions: [],
690
+ };
691
+ this.pushBufferEvent({ kind: 'step', payload: this.currentStep });
692
+ });
693
+ // Setup periodic flush (outside Angular zone to avoid triggering CD)
694
+ this.zone.runOutsideAngular(() => {
695
+ this.flushTimerId = setInterval(() => this.flush(), this.config.flushIntervalMs);
696
+ // Best-effort flush on tab close (IndexedDB is async, no sync fallback)
697
+ this.beforeUnloadHandler = () => {
698
+ this.session.endedAt = Date.now();
699
+ void this.flush();
700
+ };
701
+ window.addEventListener('beforeunload', this.beforeUnloadHandler);
702
+ });
703
+ this.initialised = true;
704
+ }
705
+ // ─── Public API: Configuration ─────────────────────────────────────
706
+ /**
707
+ * Update the BlackBox configuration.
708
+ * Can be called at any time; changes take effect immediately.
709
+ */
710
+ configure(config) {
711
+ this.config = {
712
+ ...this.config,
713
+ ...config,
714
+ formTracking: {
715
+ ...this.config.formTracking,
716
+ ...(config.formTracking ?? {}),
717
+ },
718
+ };
719
+ this.storage.setMaxStorageMb(this.config.maxStorageMb);
720
+ // Restart flush timer with new interval
721
+ if (this.flushTimerId !== null) {
722
+ clearInterval(this.flushTimerId);
723
+ this.zone.runOutsideAngular(() => {
724
+ this.flushTimerId = setInterval(() => this.flush(), this.config.flushIntervalMs);
725
+ });
726
+ }
727
+ }
728
+ /** Returns the current configuration (readonly snapshot). */
729
+ getConfig() {
730
+ return { ...this.config };
731
+ }
732
+ // ─── Public API: Tracking ──────────────────────────────────────────
733
+ /**
734
+ * Manually track a UI action (click).
735
+ *
736
+ * Called automatically by `UiButtonAreaComponent` and the `[uiTrack]` directive.
737
+ * Can also be called programmatically for custom interactions.
738
+ *
739
+ * @param trackId - Identifier for the action (e.g. button id, link name).
740
+ * @param meta - Optional metadata: `tag`, `text`, `id` of the element.
741
+ */
742
+ trackAction(trackId, meta) {
743
+ if (!this.initialised)
744
+ return;
745
+ const action = {
746
+ timestamp: Date.now(),
747
+ type: 'click',
748
+ target: {
749
+ tag: meta?.tag ?? 'unknown',
750
+ id: meta?.id,
751
+ trackId,
752
+ text: meta?.text?.substring(0, 50),
753
+ },
754
+ };
755
+ // Add to current step immediately (for in-memory session access)
756
+ this.currentStep?.actions.push(action);
757
+ // Also push to buffer for persistence
758
+ this.pushBufferEvent({
759
+ kind: 'action',
760
+ payload: { ...action, route: this.currentStep?.route ?? this.router.url },
761
+ });
762
+ }
763
+ /**
764
+ * Track a form interaction event.
765
+ *
766
+ * Called automatically by `UiFormBuilderComponent` when the BlackBox
767
+ * service is available.
768
+ */
769
+ trackFormEvent(event) {
770
+ if (!this.initialised)
771
+ return;
772
+ this.session.formEvents.push(event);
773
+ this.pushBufferEvent({ kind: 'formEvent', payload: event });
774
+ }
775
+ /**
776
+ * Track an intercepted HTTP call.
777
+ * Called by `UiBlackboxInterceptor`.
778
+ * @internal
779
+ */
780
+ trackHttpCall(call) {
781
+ if (!this.initialised)
782
+ return;
783
+ this.session.calls.push(call);
784
+ this.pushBufferEvent({ kind: 'httpCall', payload: call });
785
+ }
786
+ // ─── Public API: Session access ────────────────────────────────────
787
+ /**
788
+ * Returns the current in-memory session (live, not yet flushed).
789
+ * Useful for debugging or real-time inspection.
790
+ */
791
+ getCurrentSession() {
792
+ return this.session;
793
+ }
794
+ /**
795
+ * Retrieve all sessions stored in IndexedDB (decompressed).
796
+ */
797
+ async getSessionHistory() {
798
+ return this.storage.getAllSessions();
799
+ }
800
+ /**
801
+ * Retrieve sessions for the current device fingerprint.
802
+ */
803
+ async getSessionsForDevice() {
804
+ const fp = await this.fingerprint.getFingerprint();
805
+ return this.storage.getSessionsByFingerprint(fp);
806
+ }
807
+ // ─── Public API: Export ────────────────────────────────────────────
808
+ /**
809
+ * Export all sessions as a downloadable JSONL Blob.
810
+ *
811
+ * @returns A Blob containing JSONL data (one session per line).
812
+ *
813
+ * @example
814
+ * ```typescript
815
+ * const blob = await blackbox.exportSessions();
816
+ * const url = URL.createObjectURL(blob);
817
+ * const a = document.createElement('a');
818
+ * a.href = url;
819
+ * a.download = 'blackbox-sessions.jsonl';
820
+ * a.click();
821
+ * ```
822
+ */
823
+ async exportSessions() {
824
+ // Flush current session first
825
+ await this.flush();
826
+ return this.storage.exportDump();
827
+ }
828
+ // ─── Public API: Lifecycle ─────────────────────────────────────────
829
+ /**
830
+ * Explicitly end the current session.
831
+ * Flushes all buffered events and marks the session as ended.
832
+ */
833
+ async endSession() {
834
+ if (!this.initialised)
835
+ return;
836
+ this.session.endedAt = Date.now();
837
+ await this.flush();
838
+ }
839
+ /**
840
+ * Clear all stored sessions from IndexedDB.
841
+ */
842
+ async clearHistory() {
843
+ return this.storage.clearAll();
844
+ }
845
+ // ─── Buffer management ─────────────────────────────────────────────
846
+ /**
847
+ * Push an event into the centralised buffer.
848
+ * Triggers an immediate flush if the buffer exceeds the threshold.
849
+ * @internal
850
+ */
851
+ pushBufferEvent(event) {
852
+ this.buffer.push(event);
853
+ if (this.buffer.length >= this.config.flushThreshold) {
854
+ this.flush();
855
+ }
856
+ }
857
+ /**
858
+ * Flush buffered events to IndexedDB asynchronously.
859
+ * @internal
860
+ */
861
+ async flush() {
862
+ if (!this.initialised || this.buffer.length === 0)
863
+ return;
864
+ // Drain buffer
865
+ const events = this.buffer.splice(0);
866
+ // Apply step events to the session
867
+ for (const event of events) {
868
+ if (event.kind === 'step') {
869
+ // Steps are already pushed in real-time; ensure they're in the session
870
+ if (!this.session.steps.includes(event.payload)) {
871
+ this.session.steps.push(event.payload);
872
+ }
873
+ }
874
+ // Actions, formEvents, httpCalls are already pushed in real-time
875
+ // to the in-memory session by trackAction/trackFormEvent/trackHttpCall
876
+ }
877
+ // Save the full session snapshot
878
+ try {
879
+ await this.storage.saveSession(this.session);
880
+ }
881
+ catch (e) {
882
+ // storage error — re-enqueue events for next flush
883
+ console.warn('[UiBlackbox] Storage flush failed:', e);
884
+ }
885
+ }
886
+ // ─── Utilities ─────────────────────────────────────────────────────
887
+ /** Generate a UUID v4. */
888
+ generateUuid() {
889
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
890
+ return crypto.randomUUID();
891
+ }
892
+ // Fallback for older browsers
893
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
894
+ const r = (Math.random() * 16) | 0;
895
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
896
+ return v.toString(16);
897
+ });
898
+ }
899
+ // ─── Cleanup ───────────────────────────────────────────────────────
900
+ ngOnDestroy() {
901
+ this.destroy$.next();
902
+ this.destroy$.complete();
903
+ if (this.flushTimerId !== null) {
904
+ clearInterval(this.flushTimerId);
905
+ }
906
+ if (this.beforeUnloadHandler) {
907
+ window.removeEventListener('beforeunload', this.beforeUnloadHandler);
908
+ }
909
+ // Final flush
910
+ void this.flush();
911
+ }
912
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
913
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxService, providedIn: 'root' }); }
914
+ }
915
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxService, decorators: [{
916
+ type: Injectable,
917
+ args: [{ providedIn: 'root' }]
918
+ }], ctorParameters: () => [] });
919
+
920
+ /**
921
+ * Standalone button-group component driven by a `UiButtonDescriptor[]` configuration.
922
+ *
923
+ * Renders a group of `UiButton` instances from declarative descriptors.
924
+ * Supports per-button loading/disabled states, dynamic visibility,
925
+ * alignment control, and optional navigation via Angular Router.
926
+ *
927
+ * When the `UiBlackboxService` is provided, button clicks are
928
+ * automatically tracked in the active session.
929
+ *
930
+ * @selector ui-button-area
931
+ *
932
+ * @example
933
+ * ```html
934
+ * <ui-button-area
935
+ * [buttons]="actions"
936
+ * align="end"
937
+ * gap="sm"
938
+ * [loadingIds]="currentlyLoading"
939
+ * />
940
+ * ```
941
+ *
942
+ * @example
943
+ * ```typescript
944
+ * // Dynamic configuration
945
+ * actions: UiButtonDescriptor[] = [
946
+ * { id: 'export', label: 'Export Excel', icon: 'file-spreadsheet', variant: 'primary',
947
+ * action: () => this.exportExcel() },
948
+ * { id: 'delete', label: 'Delete', icon: 'trash-2', variant: 'warn',
949
+ * action: () => this.deleteSelected(), hidden: !this.hasSelection },
950
+ * ];
951
+ *
952
+ * // Set loading state from outside:
953
+ * currentlyLoading: string | string[] | null = 'export';
954
+ * ```
955
+ */
956
+ class UiButtonAreaComponent {
957
+ constructor() {
958
+ /**
959
+ * Array of button descriptors to render.
960
+ * Buttons with `hidden: true` are filtered out.
961
+ */
962
+ this.buttons = [];
963
+ /** Horizontal alignment of the button group. */
964
+ this.align = 'end';
965
+ /** Accessible group label for screen readers. */
966
+ this.ariaLabel = 'Actions';
967
+ /** Gap between buttons (maps to design token spacing). */
968
+ this.gap = 'sm';
969
+ /** Stack buttons vertically on mobile viewports (<600px). */
970
+ this.stackOnMobile = true;
971
+ /**
972
+ * When `true`, all buttons are disabled while any button is in a loading state.
973
+ * Useful to prevent double-actions during async operations.
974
+ */
975
+ this.disableWhileLoading = false;
976
+ /** @internal */
977
+ this._loadingIds = new Set();
978
+ /** @internal Optional router for href navigation. */
979
+ this.router = inject(Router, { optional: true });
980
+ /** @internal Optional BlackBox service — auto-tracks button clicks when available. */
981
+ this.blackbox = inject(UiBlackboxService, { optional: true });
982
+ }
983
+ /**
984
+ * Set one or more buttons to a loading state by their `id`.
985
+ * Accepts a single string, an array of strings, or `null` to clear.
986
+ *
987
+ * @example
988
+ * ```html
989
+ * <!-- Single -->
990
+ * <ui-button-area [loadingIds]="'save'" />
991
+ *
992
+ * <!-- Multiple -->
993
+ * <ui-button-area [loadingIds]="['save', 'export']" />
994
+ * ```
995
+ */
996
+ set loadingIds(value) {
997
+ if (value === null || value === undefined) {
998
+ this._loadingIds = new Set();
999
+ }
1000
+ else if (Array.isArray(value)) {
1001
+ this._loadingIds = new Set(value);
1002
+ }
1003
+ else {
1004
+ this._loadingIds = new Set([value]);
1005
+ }
1006
+ }
1007
+ /** Buttons filtered to visible (non-hidden) entries. */
1008
+ get visibleButtons() {
1009
+ return this.buttons.filter((b) => !b.hidden);
1010
+ }
1011
+ /** Assembled CSS class string for the button area container. */
1012
+ get areaClasses() {
1013
+ return [
1014
+ 'ui-button-area',
1015
+ `ui-button-area--align-${this.align}`,
1016
+ `ui-button-area--gap-${this.gap}`,
1017
+ this.stackOnMobile ? 'ui-button-area--stack-mobile' : '',
1018
+ ]
1019
+ .filter(Boolean)
1020
+ .join(' ');
1021
+ }
1022
+ /** @internal Track function for @for loop. */
1023
+ trackButton(index, button) {
1024
+ return button.id ?? `idx-${index}`;
1025
+ }
1026
+ /** Whether a specific button is in a loading state. */
1027
+ isButtonLoading(button) {
1028
+ return !!button.loading || (!!button.id && this._loadingIds.has(button.id));
1029
+ }
1030
+ /** Whether a specific button is disabled (includes loading logic). */
1031
+ isButtonDisabled(button) {
1032
+ if (button.disabled)
1033
+ return true;
1034
+ if (this.isButtonLoading(button))
1035
+ return true;
1036
+ if (this.disableWhileLoading && this._loadingIds.size > 0)
1037
+ return true;
1038
+ return false;
1039
+ }
1040
+ /** @internal Handles button click: tracks action, calls callback and/or navigates. */
1041
+ handleButtonClick(button, event) {
1042
+ // BlackBox auto-tracking (no-op if service is not provided)
1043
+ this.blackbox?.trackAction(button.id ?? button.label, {
1044
+ tag: 'ui-button',
1045
+ id: button.id,
1046
+ text: button.label,
1047
+ });
1048
+ if (button.action) {
1049
+ button.action(event);
1050
+ }
1051
+ if (button.href && this.router) {
1052
+ this.router.navigateByUrl(button.href);
1053
+ }
1054
+ }
1055
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiButtonAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1056
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UiButtonAreaComponent, isStandalone: true, selector: "ui-button-area", inputs: { buttons: "buttons", align: "align", ariaLabel: "ariaLabel", gap: "gap", stackOnMobile: "stackOnMobile", disableWhileLoading: "disableWhileLoading", loadingIds: "loadingIds" }, host: { classAttribute: "ui-button-area-host" }, ngImport: i0, template: `
1057
+ <div
1058
+ [class]="areaClasses"
1059
+ role="group"
1060
+ [attr.aria-label]="ariaLabel"
1061
+ >
1062
+ @for (button of visibleButtons; track trackButton($index, button)) {
1063
+ <ui-button
1064
+ [attr.data-button-id]="button.id || null"
1065
+ [label]="button.label"
1066
+ [tooltip]="button.tooltip ?? ''"
1067
+ [ariaLabel]="button.ariaLabel"
1068
+ [icon]="button.icon"
1069
+ [iconPosition]="button.iconPosition ?? 'trailing'"
1070
+ [variant]="button.variant ?? 'primary'"
1071
+ [size]="button.size ?? 'md'"
1072
+ [loading]="isButtonLoading(button)"
1073
+ [disabled]="isButtonDisabled(button)"
1074
+ [customClass]="button.customClass"
1075
+ (click)="handleButtonClick(button, $event)"
1076
+ />
1077
+ }
1078
+ </div>
1079
+ `, isInline: true, styles: [".ui-button-area-host{display:block}@media (max-width: 767.98px){.ui-button-area-host{width:100%}}.ui-button-area{display:flex;flex-wrap:wrap;align-items:center}.ui-button-area--gap-xs{gap:var(--ui-spacing-1)}.ui-button-area--gap-sm{gap:var(--ui-spacing-2)}.ui-button-area--gap-md{gap:var(--ui-spacing-3)}.ui-button-area--gap-lg{gap:var(--ui-spacing-4)}.ui-button-area--gap-xl{gap:var(--ui-spacing-5)}.ui-button-area--align-start{justify-content:flex-start}.ui-button-area--align-center{justify-content:center}.ui-button-area--align-end{justify-content:flex-end}.ui-button-area--align-between{justify-content:space-between}@media (max-width: 767.98px){.ui-button-area--stack-mobile{flex-direction:column;width:100%}.ui-button-area--stack-mobile .ui-button-host{display:flex;width:100%}.ui-button-area--stack-mobile .ui-button{width:100%}}\n"], dependencies: [{ kind: "component", type: UiButtonComponent, selector: "ui-button", inputs: ["label", "tooltip", "variant", "size", "icon", "iconPosition", "loading", "disabled", "fullWidth", "type", "ariaLabel", "customClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1080
+ }
1081
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiButtonAreaComponent, decorators: [{
1082
+ type: Component,
1083
+ args: [{ selector: 'ui-button-area', standalone: true, imports: [UiButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
1084
+ class: 'ui-button-area-host',
1085
+ }, template: `
1086
+ <div
1087
+ [class]="areaClasses"
1088
+ role="group"
1089
+ [attr.aria-label]="ariaLabel"
1090
+ >
1091
+ @for (button of visibleButtons; track trackButton($index, button)) {
1092
+ <ui-button
1093
+ [attr.data-button-id]="button.id || null"
1094
+ [label]="button.label"
1095
+ [tooltip]="button.tooltip ?? ''"
1096
+ [ariaLabel]="button.ariaLabel"
1097
+ [icon]="button.icon"
1098
+ [iconPosition]="button.iconPosition ?? 'trailing'"
1099
+ [variant]="button.variant ?? 'primary'"
1100
+ [size]="button.size ?? 'md'"
1101
+ [loading]="isButtonLoading(button)"
1102
+ [disabled]="isButtonDisabled(button)"
1103
+ [customClass]="button.customClass"
1104
+ (click)="handleButtonClick(button, $event)"
1105
+ />
1106
+ }
1107
+ </div>
1108
+ `, styles: [".ui-button-area-host{display:block}@media (max-width: 767.98px){.ui-button-area-host{width:100%}}.ui-button-area{display:flex;flex-wrap:wrap;align-items:center}.ui-button-area--gap-xs{gap:var(--ui-spacing-1)}.ui-button-area--gap-sm{gap:var(--ui-spacing-2)}.ui-button-area--gap-md{gap:var(--ui-spacing-3)}.ui-button-area--gap-lg{gap:var(--ui-spacing-4)}.ui-button-area--gap-xl{gap:var(--ui-spacing-5)}.ui-button-area--align-start{justify-content:flex-start}.ui-button-area--align-center{justify-content:center}.ui-button-area--align-end{justify-content:flex-end}.ui-button-area--align-between{justify-content:space-between}@media (max-width: 767.98px){.ui-button-area--stack-mobile{flex-direction:column;width:100%}.ui-button-area--stack-mobile .ui-button-host{display:flex;width:100%}.ui-button-area--stack-mobile .ui-button{width:100%}}\n"] }]
1109
+ }], propDecorators: { buttons: [{
1110
+ type: Input
1111
+ }], align: [{
1112
+ type: Input
1113
+ }], ariaLabel: [{
1114
+ type: Input
1115
+ }], gap: [{
1116
+ type: Input
1117
+ }], stackOnMobile: [{
1118
+ type: Input
1119
+ }], disableWhileLoading: [{
1120
+ type: Input
1121
+ }], loadingIds: [{
1122
+ type: Input
1123
+ }] } });
1124
+
1125
+ /**
1126
+ * ng-ui-system — Button entry point.
1127
+ *
1128
+ * @example
1129
+ * ```typescript
1130
+ * import {
1131
+ * UiButtonComponent,
1132
+ * UiButtonAreaComponent,
1133
+ * UiButtonDescriptor,
1134
+ * } from 'ng-ui-system';
1135
+ * ```
1136
+ */
1137
+ // Components
1138
+
1139
+ /**
1140
+ * Bootstrap del secondary entry `@gnggln/ng-ui-system/button`. Button e Button Area.
1141
+ */
1142
+
1143
+ /**
1144
+ * Generated bundle index. Do not edit.
1145
+ */
1146
+
1147
+ export { UiButtonAreaComponent, UiButtonComponent };
1148
+ //# sourceMappingURL=gnggln-ng-ui-system-button.mjs.map