@gnggln/ng-ui-system 1.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/esm2022/gnggln-ng-ui-system.mjs +5 -0
  2. package/esm2022/lib/components/accordion/accordion.component.mjs +353 -0
  3. package/esm2022/lib/components/accordion/accordion.types.mjs +6 -0
  4. package/esm2022/lib/components/accordion/index.mjs +2 -0
  5. package/esm2022/lib/components/base-layout/base-layout.component.mjs +218 -0
  6. package/esm2022/lib/components/base-layout/base-layout.types.mjs +6 -0
  7. package/esm2022/lib/components/base-layout/index.mjs +14 -0
  8. package/esm2022/lib/components/button/button-area.component.mjs +196 -0
  9. package/esm2022/lib/components/button/button.component.mjs +164 -0
  10. package/esm2022/lib/components/button/button.types.mjs +6 -0
  11. package/esm2022/lib/components/button/index.mjs +16 -0
  12. package/esm2022/lib/components/crud-table/crud-table.component.mjs +789 -0
  13. package/esm2022/lib/components/crud-table/crud-table.types.mjs +6 -0
  14. package/esm2022/lib/components/crud-table/index.mjs +16 -0
  15. package/esm2022/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
  16. package/esm2022/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
  17. package/esm2022/lib/components/form-builder/form-builder.component.mjs +824 -0
  18. package/esm2022/lib/components/form-builder/form-wizard.component.mjs +510 -0
  19. package/esm2022/lib/components/form-builder/index.mjs +19 -0
  20. package/esm2022/lib/components/form-builder/services/form-condition.service.mjs +132 -0
  21. package/esm2022/lib/components/form-builder/services/form-validation.service.mjs +381 -0
  22. package/esm2022/lib/components/form-builder/services/location.service.mjs +140 -0
  23. package/esm2022/lib/components/form-builder/services/wizard-sync.service.mjs +84 -0
  24. package/esm2022/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +161 -0
  25. package/esm2022/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
  26. package/esm2022/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
  27. package/esm2022/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
  28. package/esm2022/lib/components/form-builder/types/condition.types.mjs +6 -0
  29. package/esm2022/lib/components/form-builder/types/field.types.mjs +6 -0
  30. package/esm2022/lib/components/form-builder/types/index.mjs +2 -0
  31. package/esm2022/lib/components/form-builder/types/schema.types.mjs +6 -0
  32. package/esm2022/lib/components/form-builder/types/territoriale.types.mjs +6 -0
  33. package/esm2022/lib/components/form-builder/types/validation.types.mjs +6 -0
  34. package/esm2022/lib/components/form-builder-editor/form-builder-editor.component.mjs +730 -0
  35. package/esm2022/lib/components/form-builder-editor/form-builder-editor.service.mjs +56 -0
  36. package/esm2022/lib/components/form-builder-editor/index.mjs +21 -0
  37. package/esm2022/lib/components/form-builder-editor/services/editor-persistence.service.mjs +190 -0
  38. package/esm2022/lib/components/form-builder-editor/services/editor-state.service.mjs +324 -0
  39. package/esm2022/lib/components/form-builder-editor/services/field-factory.service.mjs +188 -0
  40. package/esm2022/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.mjs +667 -0
  41. package/esm2022/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.mjs +317 -0
  42. package/esm2022/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.mjs +611 -0
  43. package/esm2022/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.mjs +267 -0
  44. package/esm2022/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.mjs +276 -0
  45. package/esm2022/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.mjs +323 -0
  46. package/esm2022/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +238 -0
  47. package/esm2022/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +472 -0
  48. package/esm2022/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.mjs +473 -0
  49. package/esm2022/lib/components/form-builder-editor/types/editor.types.mjs +6 -0
  50. package/esm2022/lib/components/layout-builder/index.mjs +18 -0
  51. package/esm2022/lib/components/layout-builder/layout-builder.component.mjs +1730 -0
  52. package/esm2022/lib/components/layout-builder/layout-builder.types.mjs +9 -0
  53. package/esm2022/lib/components/layout-builder/layout.service.mjs +239 -0
  54. package/esm2022/lib/components/modal/confirm-dialog.component.mjs +151 -0
  55. package/esm2022/lib/components/modal/index.mjs +4 -0
  56. package/esm2022/lib/components/modal/modal.component.mjs +139 -0
  57. package/esm2022/lib/components/modal/modal.service.mjs +194 -0
  58. package/esm2022/lib/components/modal/modal.types.mjs +6 -0
  59. package/esm2022/lib/components/page-header/breadcrumb.service.mjs +242 -0
  60. package/esm2022/lib/components/page-header/index.mjs +20 -0
  61. package/esm2022/lib/components/page-header/page-header.component.mjs +243 -0
  62. package/esm2022/lib/components/page-header/page-header.types.mjs +21 -0
  63. package/esm2022/lib/components/table/index.mjs +2 -0
  64. package/esm2022/lib/components/table/paginated-table.component.mjs +407 -0
  65. package/esm2022/lib/components/table/table.types.mjs +6 -0
  66. package/esm2022/lib/core/types/index.mjs +6 -0
  67. package/esm2022/lib/core/utils/index.mjs +53 -0
  68. package/esm2022/lib/sources/location-data.opt.json +8942 -0
  69. package/esm2022/lib/sources/nazioni.opt.json +215 -0
  70. package/esm2022/public-api.mjs +34 -0
  71. package/fesm2022/gnggln-ng-ui-system.mjs +55752 -0
  72. package/fesm2022/gnggln-ng-ui-system.mjs.map +1 -0
  73. package/index.d.ts +5 -0
  74. package/lib/components/accordion/accordion.component.d.ts +118 -0
  75. package/lib/components/accordion/accordion.types.d.ts +62 -0
  76. package/lib/components/accordion/index.d.ts +2 -0
  77. package/lib/components/base-layout/base-layout.component.d.ts +83 -0
  78. package/lib/components/base-layout/base-layout.types.d.ts +26 -0
  79. package/lib/components/base-layout/index.d.ts +13 -0
  80. package/lib/components/button/button-area.component.d.ts +88 -0
  81. package/lib/components/button/button.component.d.ts +55 -0
  82. package/lib/components/button/button.types.d.ts +70 -0
  83. package/lib/components/button/index.d.ts +15 -0
  84. package/lib/components/crud-table/crud-table.component.d.ts +143 -0
  85. package/lib/components/crud-table/crud-table.types.d.ts +207 -0
  86. package/lib/components/crud-table/index.d.ts +15 -0
  87. package/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
  88. package/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
  89. package/lib/components/form-builder/form-builder.component.d.ts +183 -0
  90. package/lib/components/form-builder/form-wizard.component.d.ts +87 -0
  91. package/lib/components/form-builder/index.d.ts +13 -0
  92. package/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
  93. package/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
  94. package/lib/components/form-builder/services/location.service.d.ts +83 -0
  95. package/lib/components/form-builder/services/wizard-sync.service.d.ts +63 -0
  96. package/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +28 -0
  97. package/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
  98. package/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
  99. package/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
  100. package/lib/components/form-builder/types/condition.types.d.ts +51 -0
  101. package/lib/components/form-builder/types/field.types.d.ts +288 -0
  102. package/lib/components/form-builder/types/index.d.ts +5 -0
  103. package/lib/components/form-builder/types/schema.types.d.ts +227 -0
  104. package/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
  105. package/lib/components/form-builder/types/validation.types.d.ts +174 -0
  106. package/lib/components/form-builder-editor/form-builder-editor.component.d.ts +117 -0
  107. package/lib/components/form-builder-editor/form-builder-editor.service.d.ts +38 -0
  108. package/lib/components/form-builder-editor/index.d.ts +15 -0
  109. package/lib/components/form-builder-editor/services/editor-persistence.service.d.ts +42 -0
  110. package/lib/components/form-builder-editor/services/editor-state.service.d.ts +66 -0
  111. package/lib/components/form-builder-editor/services/field-factory.service.d.ts +28 -0
  112. package/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.d.ts +139 -0
  113. package/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.d.ts +43 -0
  114. package/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.d.ts +83 -0
  115. package/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.d.ts +40 -0
  116. package/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.d.ts +51 -0
  117. package/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.d.ts +63 -0
  118. package/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.d.ts +68 -0
  119. package/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.d.ts +82 -0
  120. package/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.d.ts +112 -0
  121. package/lib/components/form-builder-editor/types/editor.types.d.ts +124 -0
  122. package/lib/components/layout-builder/index.d.ts +16 -0
  123. package/lib/components/layout-builder/layout-builder.component.d.ts +85 -0
  124. package/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
  125. package/lib/components/layout-builder/layout.service.d.ts +100 -0
  126. package/lib/components/modal/confirm-dialog.component.d.ts +46 -0
  127. package/lib/components/modal/index.d.ts +4 -0
  128. package/lib/components/modal/modal.component.d.ts +44 -0
  129. package/lib/components/modal/modal.service.d.ts +93 -0
  130. package/lib/components/modal/modal.types.d.ts +110 -0
  131. package/lib/components/page-header/breadcrumb.service.d.ts +96 -0
  132. package/lib/components/page-header/index.d.ts +16 -0
  133. package/lib/components/page-header/page-header.component.d.ts +59 -0
  134. package/lib/components/page-header/page-header.types.d.ts +96 -0
  135. package/lib/components/table/index.d.ts +2 -0
  136. package/lib/components/table/paginated-table.component.d.ts +85 -0
  137. package/lib/components/table/table.types.d.ts +81 -0
  138. package/lib/core/types/index.d.ts +57 -0
  139. package/lib/core/utils/index.d.ts +29 -0
  140. package/package.json +44 -0
  141. package/public-api.d.ts +22 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @module ng-ui-system/layout-builder
3
+ * Types and interfaces for the UiLayoutBuilder shell component.
4
+ *
5
+ * The layout builder uses a schema-driven approach (similar to UiFormBuilder)
6
+ * to materialize a full responsive application shell from a single descriptor.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2xheW91dC1idWlsZGVyL2xheW91dC1idWlsZGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbW9kdWxlIG5nLXVpLXN5c3RlbS9sYXlvdXQtYnVpbGRlclxyXG4gKiBUeXBlcyBhbmQgaW50ZXJmYWNlcyBmb3IgdGhlIFVpTGF5b3V0QnVpbGRlciBzaGVsbCBjb21wb25lbnQuXHJcbiAqXHJcbiAqIFRoZSBsYXlvdXQgYnVpbGRlciB1c2VzIGEgc2NoZW1hLWRyaXZlbiBhcHByb2FjaCAoc2ltaWxhciB0byBVaUZvcm1CdWlsZGVyKVxyXG4gKiB0byBtYXRlcmlhbGl6ZSBhIGZ1bGwgcmVzcG9uc2l2ZSBhcHBsaWNhdGlvbiBzaGVsbCBmcm9tIGEgc2luZ2xlIGRlc2NyaXB0b3IuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgVWlJY29uTmFtZSwgVWlWYXJpYW50IH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9pbmRleCc7XHJcblxyXG4vLyDilIDilIDilIAgTGF5b3V0IE1vZGUgJiBDb250ZW50IFR5cGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKiogTGF5b3V0IG1vZGUgY29udHJvbGxpbmcgdGhlIG92ZXJhbGwgbmF2aWdhdGlvbiBzdHJhdGVneS4gKi9cclxuZXhwb3J0IHR5cGUgVWlMYXlvdXRNb2RlID0gJ3NpZGViYXInIHwgJ3RvcGJhcic7XHJcblxyXG4vKiogQ29udGVudCBhcmVhIHNpemluZyBzdHJhdGVneS4gKi9cclxuZXhwb3J0IHR5cGUgVWlDb250ZW50VHlwZSA9ICdmbHVpZCcgfCAnYm94ZWQnIHwgJ2Z1bGxzY3JlZW4nO1xyXG5cclxuLy8g4pSA4pSA4pSAIEJyZWFkY3J1bWIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKiogU2luZ2xlIGJyZWFkY3J1bWIgZW50cnkgZGVyaXZlZCBmcm9tIHRoZSBuYXZpZ2F0aW9uIHNjaGVtYS4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUxheW91dEJyZWFkY3J1bWIge1xyXG4gIC8qKiBEaXNwbGF5IGxhYmVsLiAqL1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgLyoqIFJvdXRlIFVSTCAob21pdHRlZCBmb3IgdGhlIGN1cnJlbnQvbGFzdCBjcnVtYikuICovXHJcbiAgdXJsPzogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgKGN1cnJlbnQpIGJyZWFkY3J1bWIgaW4gdGhlIHRyYWlsLiAqL1xyXG4gIGlzTGFzdDogYm9vbGVhbjtcclxufVxyXG5cclxuLy8g4pSA4pSA4pSAIE5hdmlnYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKiogRGlzY3JpbWluYXRvciBmb3IgbmF2aWdhdGlvbiBpdGVtIGJlaGF2aW91ci4gKi9cclxuZXhwb3J0IHR5cGUgVWlOYXZJdGVtVHlwZSA9ICdyb3V0ZScgfCAnZXh0ZXJuYWwnIHwgJ2RpdmlkZXInO1xyXG5cclxuLyoqXHJcbiAqIFNpbmdsZSBuYXZpZ2F0aW9uIGl0ZW0gZGVzY3JpcHRvci5cclxuICpcclxuICogQHVzYWdlTm90ZXNcclxuICogIyMjIEludGVybmFsIHJvdXRlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogeyBpZDogJ3VzZXJzJywgbGFiZWw6ICdVdGVudGknLCBpY29uOiAndXNlcnMnLCByb3V0ZTogJy91c2VycycgfVxyXG4gKiBgYGBcclxuICpcclxuICogIyMjIEV4dGVybmFsIGxpbmtcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiB7IGlkOiAnZG9jcycsIGxhYmVsOiAnRG9jcycsIGljb246ICdleHRlcm5hbC1saW5rJywgdHlwZTogJ2V4dGVybmFsJyxcclxuICogICBocmVmOiAnaHR0cHM6Ly9kb2NzLmV4YW1wbGUuY29tJywgdGFyZ2V0OiAnX2JsYW5rJyB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiAjIyMgRXhwYW5kYWJsZSB3aXRoIGNoaWxkcmVuXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICoge1xyXG4gKiAgIGlkOiAnZm9ybS1idWlsZGVyJywgbGFiZWw6ICdGb3JtIEJ1aWxkZXInLCBpY29uOiAnZmlsZS10ZXh0JyxcclxuICogICByb3V0ZTogJy9mb3JtLWJ1aWxkZXInLFxyXG4gKiAgIGNoaWxkcmVuOiBbXHJcbiAqICAgICB7IGxhYmVsOiAnUGFub3JhbWljYScsIGl0ZW1zOiBbXHJcbiAqICAgICAgIHsgaWQ6ICdmYi1hbGwnLCBsYWJlbDogJ1R1dHRpIGkgY2FtcGknLCByb3V0ZTogJy9mb3JtLWJ1aWxkZXIvYWxsLWZpZWxkcycgfVxyXG4gKiAgICAgXX1cclxuICogICBdXHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpTmF2SXRlbSB7XHJcbiAgLyoqIFVuaXF1ZSBpdGVtIGlkZW50aWZpZXIuICovXHJcbiAgaWQ6IHN0cmluZztcclxuICAvKiogRGlzcGxheSBsYWJlbC4gKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBMdWNpZGUgaWNvbiBuYW1lLiAqL1xyXG4gIGljb24/OiBVaUljb25OYW1lO1xyXG4gIC8qKiBJdGVtIGJlaGF2aW91ciB0eXBlLiBAZGVmYXVsdCAncm91dGUnICovXHJcbiAgdHlwZT86IFVpTmF2SXRlbVR5cGU7XHJcbiAgLyoqIEFuZ3VsYXIgcm91dGVyIHBhdGggKGZvciBgdHlwZTogJ3JvdXRlJ2ApLiAqL1xyXG4gIHJvdXRlPzogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHRvIHVzZSBleGFjdCBtYXRjaGluZyBmb3IgYWN0aXZlIHN0YXRlLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gIHJvdXRlQWN0aXZlRXhhY3Q/OiBib29sZWFuO1xyXG4gIC8qKiBFeHRlcm5hbCBVUkwgKGZvciBgdHlwZTogJ2V4dGVybmFsJ2ApLiAqL1xyXG4gIGhyZWY/OiBzdHJpbmc7XHJcbiAgLyoqIExpbmsgdGFyZ2V0IGZvciBleHRlcm5hbCBsaW5rcy4gQGRlZmF1bHQgJ19ibGFuaycgKi9cclxuICB0YXJnZXQ/OiAnX2JsYW5rJyB8ICdfc2VsZic7XHJcbiAgLyoqIE5lc3RlZCBjaGlsZCBncm91cHMgZm9yIGV4cGFuZGFibGUgbmF2aWdhdGlvbi4gKi9cclxuICBjaGlsZHJlbj86IFVpTmF2R3JvdXBbXTtcclxuICAvKiogV2hldGhlciB0aGlzIGl0ZW0gaXMgaGlkZGVuLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gIGhpZGRlbj86IGJvb2xlYW47XHJcbiAgLyoqIEJhZGdlIHRleHQgb3IgY291bnQgZGlzcGxheWVkIG5leHQgdG8gdGhlIGxhYmVsLiAqL1xyXG4gIGJhZGdlPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIC8qKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhpcyBpdGVtIGluIHRoZSBtb2JpbGUgYm90dG9tIG5hdmlnYXRpb24gYmFyLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gIGJvdHRvbU5hdj86IGJvb2xlYW47XHJcbiAgLyoqIFNvcnQgb3JkZXIgaW4gdGhlIGJvdHRvbSBuYXZpZ2F0aW9uIGJhciAobG93ZXIgPSBmaXJzdCkuICovXHJcbiAgYm90dG9tTmF2T3JkZXI/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMYWJlbGxlZCBncm91cCBvZiBuYXZpZ2F0aW9uIGl0ZW1zIChuZXN0ZWQgdW5kZXIgYSBwYXJlbnQgYFVpTmF2SXRlbWApLlxyXG4gKlxyXG4gKiBAdXNhZ2VOb3Rlc1xyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGdyb3VwOiBVaU5hdkdyb3VwID0ge1xyXG4gKiAgIGxhYmVsOiAnVmFsaWRhemlvbmknLFxyXG4gKiAgIGl0ZW1zOiBbXHJcbiAqICAgICB7IGlkOiAndi1zdGQnLCBsYWJlbDogJ1N0YW5kYXJkJywgcm91dGU6ICcvZm9ybS1idWlsZGVyL3ZhbGlkYXRpb25zLXN0YW5kYXJkJyB9LFxyXG4gKiAgICAgeyBpZDogJ3YtY3Jvc3MnLCBsYWJlbDogJ0Nyb3NzLWZpZWxkJywgcm91dGU6ICcvZm9ybS1idWlsZGVyL3ZhbGlkYXRpb25zLWNyb3NzZmllbGQnIH0sXHJcbiAqICAgXVxyXG4gKiB9O1xyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlOYXZHcm91cCB7XHJcbiAgLyoqIEdyb3VwIGhlYWRpbmcgZGlzcGxheWVkIGFib3ZlIHRoZSBpdGVtcy4gKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBJdGVtcyBiZWxvbmdpbmcgdG8gdGhpcyBncm91cC4gKi9cclxuICBpdGVtczogVWlOYXZJdGVtW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUb3AtbGV2ZWwgZ3JvdXBpbmcgdXNlZCB0byBwYXJ0aXRpb24gYFVpTmF2SXRlbVtdYCBpbnRvIGxhYmVsbGVkIHNlY3Rpb25zXHJcbiAqIGluIHRoZSBzaWRlYmFyIChlLmcuIFwiT3ZlcnZpZXdcIiwgXCJDb21wb25lbnRzXCIpLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaU5hdlNlY3Rpb24ge1xyXG4gIC8qKiBVbmlxdWUgc2VjdGlvbiBpZGVudGlmaWVyLiAqL1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgLyoqIFNlY3Rpb24gaGVhZGluZyBkaXNwbGF5ZWQgaW4gdGhlIHNpZGViYXIuICovXHJcbiAgbGFiZWw6IHN0cmluZztcclxuICAvKiogSURzIG9mIGBVaU5hdkl0ZW1gcyBiZWxvbmdpbmcgdG8gdGhpcyBzZWN0aW9uIChvcmRlciBwcmVzZXJ2ZWQpLiAqL1xyXG4gIGl0ZW1JZHM6IHN0cmluZ1tdO1xyXG59XHJcblxyXG4vKipcclxuICogQXV0by1kaXNjb3ZlcnkgY29uZmlndXJhdGlvbiBmb3IgZ2VuZXJhdGluZyBuYXZpZ2F0aW9uIGl0ZW1zIGZyb20gQW5ndWxhciByb3V0ZXMuXHJcbiAqXHJcbiAqIFdoZW4gZW5hYmxlZCwgdGhlIGxheW91dCBidWlsZGVyIHNjYW5zIHRoZSByb3V0ZSB0cmVlIGFuZCBjcmVhdGVzXHJcbiAqIGBVaU5hdkl0ZW1gIGVudHJpZXMgZnJvbSByb3V0ZXMgdGhhdCBkZWNsYXJlIGBkYXRhLmlkYCBhbmQgYGRhdGEudGl0bGVgLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaU5hdkF1dG9EaXNjb3ZlcnlDb25maWcge1xyXG4gIC8qKiBXaGV0aGVyIGF1dG8tZGlzY292ZXJ5IGlzIGVuYWJsZWQuICovXHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxuICAvKiogUm91dGUgcGF0aHMgdG8gZXhjbHVkZSBmcm9tIGRpc2NvdmVyeSAoZXhhY3QgbWF0Y2gpLiAqL1xyXG4gIGV4Y2x1ZGVQYXRocz86IHN0cmluZ1tdO1xyXG4gIC8qKiBIb3cgdG8gbWVyZ2UgZGlzY292ZXJlZCBpdGVtcyB3aXRoIG1hbnVhbGx5IGRlZmluZWQgaXRlbXMuIEBkZWZhdWx0ICdhcHBlbmQnICovXHJcbiAgbWVyZ2VTdHJhdGVneT86ICdwcmVwZW5kJyB8ICdhcHBlbmQnIHwgJ3JlcGxhY2UnO1xyXG59XHJcblxyXG4vKiogTmF2aWdhdGlvbiBjb25maWd1cmF0aW9uIGJsb2NrIHdpdGhpbiBgVWlMYXlvdXRTY2hlbWFgLiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpTGF5b3V0TmF2aWdhdGlvbkNvbmZpZyB7XHJcbiAgLyoqIEZsYXQgbGlzdCBvZiBhbGwgbmF2aWdhdGlvbiBpdGVtcy4gKi9cclxuICBpdGVtczogVWlOYXZJdGVtW107XHJcbiAgLyoqIE9wdGlvbmFsIGdyb3VwaW5nIGludG8gbGFiZWxsZWQgc2lkZWJhciBzZWN0aW9ucy4gKi9cclxuICBzZWN0aW9ucz86IFVpTmF2U2VjdGlvbltdO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBkZXNrdG9wIHNpZGViYXIgY2FuIGNvbGxhcHNlIHRvIGljb24tb25seSBtb2RlLiBAZGVmYXVsdCB0cnVlICovXHJcbiAgY29sbGFwc2libGU/OiBib29sZWFuO1xyXG4gIC8qKiBNb2JpbGUgbmF2aWdhdGlvbiBiZWhhdmlvdXIuIEBkZWZhdWx0ICdib3RoJyAqL1xyXG4gIG1vYmlsZU1vZGU/OiAnZHJhd2VyJyB8ICdib3R0b20tbmF2JyB8ICdib3RoJztcclxuICAvKiogQXV0by1kaXNjb3Zlcnkgc2V0dGluZ3MgZm9yIHJvdXRlLWRyaXZlbiBuYXZpZ2F0aW9uLiAqL1xyXG4gIGF1dG9EaXNjb3Zlcnk/OiBVaU5hdkF1dG9EaXNjb3ZlcnlDb25maWc7XHJcbn1cclxuXHJcbi8vIOKUgOKUgOKUgCBIZWFkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKiogTG9nbyBjb25maWd1cmF0aW9uIGZvciB0aGUgbGF5b3V0IGhlYWRlci4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUxheW91dExvZ28ge1xyXG4gIC8qKiBTaG9ydCB0ZXh0IHJlbmRlcmVkIGluc2lkZSBhIHN0eWxlZCBiYWRnZSAoZS5nLiBcIlVJXCIpLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgc3JjYC4gKi9cclxuICB0ZXh0Pzogc3RyaW5nO1xyXG4gIC8qKiBJbWFnZSBVUkwgZm9yIHRoZSBsb2dvLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgdGV4dGAuICovXHJcbiAgc3JjPzogc3RyaW5nO1xyXG4gIC8qKiBBbHQgdGV4dCBmb3IgdGhlIGxvZ28gaW1hZ2UuICovXHJcbiAgYWx0Pzogc3RyaW5nO1xyXG59XHJcblxyXG4vKiogSGVhZGVyIC8gdG9wLWJhciBjb25maWd1cmF0aW9uLiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpTGF5b3V0SGVhZGVyQ29uZmlnIHtcclxuICAvKiogTG9nbyBkaXNwbGF5ZWQgaW4gdGhlIHNpZGViYXIgaGVhZGVyIGFuZCBtb2JpbGUgdG9wLWJhci4gKi9cclxuICBsb2dvPzogVWlMYXlvdXRMb2dvO1xyXG4gIC8qKiBBcHBsaWNhdGlvbiB0aXRsZS4gKi9cclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIC8qKiBPcHRpb25hbCBzdWJ0aXRsZSBvciB0YWdsaW5lLiAqL1xyXG4gIHN1YnRpdGxlPzogc3RyaW5nO1xyXG59XHJcblxyXG4vLyDilIDilIDilIAgRm9vdGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqIFNpbmdsZSBsaW5rIHJlbmRlcmVkIGluIHRoZSBsYXlvdXQgZm9vdGVyLiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpRm9vdGVyTGluayB7XHJcbiAgLyoqIERpc3BsYXkgbGFiZWwuICovXHJcbiAgbGFiZWw6IHN0cmluZztcclxuICAvKiogRXh0ZXJuYWwgVVJMLiAqL1xyXG4gIGhyZWY/OiBzdHJpbmc7XHJcbiAgLyoqIEFuZ3VsYXIgcm91dGVyIHBhdGggKGFsdGVybmF0aXZlIHRvIGBocmVmYCkuICovXHJcbiAgcm91dGU/OiBzdHJpbmc7XHJcbiAgLyoqIEx1Y2lkZSBpY29uIG5hbWUuICovXHJcbiAgaWNvbj86IFVpSWNvbk5hbWU7XHJcbiAgLyoqIExpbmsgdGFyZ2V0IGZvciBleHRlcm5hbCBsaW5rcy4gQGRlZmF1bHQgJ19zZWxmJyAqL1xyXG4gIHRhcmdldD86ICdfYmxhbmsnIHwgJ19zZWxmJztcclxufVxyXG5cclxuLyoqIEZvb3RlciBjb25maWd1cmF0aW9uLiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpTGF5b3V0Rm9vdGVyQ29uZmlnIHtcclxuICAvKiogTGlua3MgcmVuZGVyZWQgaW4gdGhlIGZvb3Rlci4gKi9cclxuICBsaW5rcz86IFVpRm9vdGVyTGlua1tdO1xyXG4gIC8qKiBTdGF0aWMgdGV4dCAoZS5nLiBjb3B5cmlnaHQsIHZlcnNpb24pLiAqL1xyXG4gIHRleHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vIOKUgOKUgOKUgCBGQUIgKEZsb2F0aW5nIEFjdGlvbiBCdXR0b24gLyBTcGVlZCBEaWFsKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbi8qKlxyXG4gKiBTaW5nbGUgYWN0aW9uIHdpdGhpbiB0aGUgc3BlZWQtZGlhbCBGQUIuXHJcbiAqXHJcbiAqIEB1c2FnZU5vdGVzXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgYWN0aW9uOiBVaUZhYkFjdGlvbiA9IHtcclxuICogICBpZDogJ25ldy11c2VyJyxcclxuICogICBsYWJlbDogJ051b3ZvIHV0ZW50ZScsXHJcbiAqICAgaWNvbjogJ3VzZXInLFxyXG4gKiAgIHZhcmlhbnQ6ICdwcmltYXJ5JyxcclxuICogICBhY3Rpb246ICgpID0+IHJvdXRlci5uYXZpZ2F0ZShbJy91c2Vycy9uZXcnXSksXHJcbiAqIH07XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUZhYkFjdGlvbiB7XHJcbiAgLyoqIFVuaXF1ZSBhY3Rpb24gaWRlbnRpZmllci4gKi9cclxuICBpZDogc3RyaW5nO1xyXG4gIC8qKiBUb29sdGlwIC8gbGFiZWwgdGV4dC4gKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBMdWNpZGUgaWNvbiBuYW1lLiAqL1xyXG4gIGljb246IFVpSWNvbk5hbWU7XHJcbiAgLyoqIENhbGxiYWNrIGludm9rZWQgb24gY2xpY2suICovXHJcbiAgYWN0aW9uPzogKCkgPT4gdm9pZDtcclxuICAvKiogVmlzdWFsIHZhcmlhbnQgZm9yIHRoZSBidXR0b24uIEBkZWZhdWx0ICdwcmltYXJ5JyAqL1xyXG4gIHZhcmlhbnQ/OiBVaVZhcmlhbnQ7XHJcbiAgLyoqIEFjY2Vzc2libGUgbGFiZWwgKGZhbGxzIGJhY2sgdG8gYGxhYmVsYCBpZiBvbWl0dGVkKS4gKi9cclxuICBhcmlhTGFiZWw/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKiBTcGVlZC1kaWFsIEZBQiBjb25maWd1cmF0aW9uLiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpTGF5b3V0RmFiQ29uZmlnIHtcclxuICAvKiogUHJpbWFyeSBGQUIgYWN0aW9uIChhbHdheXMgdmlzaWJsZSkuICovXHJcbiAgbWFpbkFjdGlvbjogVWlGYWJBY3Rpb247XHJcbiAgLyoqIFNlY29uZGFyeSBhY3Rpb25zIHJldmVhbGVkIG9uIGV4cGFuZC4gKi9cclxuICBzZWNvbmRhcnlBY3Rpb25zPzogVWlGYWJBY3Rpb25bXTtcclxuICAvKiogU2NyZWVuIGNvcm5lciBwb3NpdGlvbi4gQGRlZmF1bHQgJ2JvdHRvbS1yaWdodCcgKi9cclxuICBwb3NpdGlvbj86ICdib3R0b20tcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JztcclxufVxyXG5cclxuLy8g4pSA4pSA4pSAIFBhZ2UgSGVhZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqIERlZmF1bHQgcGFnZS1oZWFkZXIgc2V0dGluZ3MgYXBwbGllZCB0byBldmVyeSByb3V0ZSB1bmxlc3Mgb3ZlcnJpZGRlbi4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUxheW91dFBhZ2VIZWFkZXJDb25maWcge1xyXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIHBhZ2UgaGVhZGVyIChicmVhZGNydW1icyArIHRpdGxlKS4gQGRlZmF1bHQgdHJ1ZSAqL1xyXG4gIHNob3c/OiBib29sZWFuO1xyXG4gIC8qKiBIb21lIGJyZWFkY3J1bWIgcm91dGUgcGF0aC4gQGRlZmF1bHQgJy8nICovXHJcbiAgaG9tZVJvdXRlPzogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIEhvbWUgbGluayBpbiBicmVhZGNydW1icy4gQGRlZmF1bHQgdHJ1ZSAqL1xyXG4gIHNob3dIb21lPzogYm9vbGVhbjtcclxuICAvKiogV2hldGhlciB0byBzeW5jIGBkb2N1bWVudC50aXRsZWAgd2l0aCB0aGUgY3VycmVudCBwYWdlLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gIHVwZGF0ZURvY3VtZW50VGl0bGU/OiBib29sZWFuO1xyXG4gIC8qKiBTdWZmaXggYXBwZW5kZWQgdG8gYGRvY3VtZW50LnRpdGxlYC4gKi9cclxuICB0aXRsZVN1ZmZpeD86IHN0cmluZztcclxufVxyXG5cclxuLy8g4pSA4pSA4pSAIExvYWRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbi8qKiBPdmVybGF5IGxvYWRlciBjb25maWd1cmF0aW9uLiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpTGF5b3V0TG9hZGVyQ29uZmlnIHtcclxuICAvKiogU2hvdyB0aGUgbG9hZGVyIHdoZW4gdGhlIGxheW91dCBtb3VudHMgKGhpZGVzIG9uIGZpcnN0IE5hdmlnYXRpb25FbmQpLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gIHNob3dPbkluaXQ/OiBib29sZWFuO1xyXG4gIC8qKiBNaW5pbXVtIGRpc3BsYXkgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIChwcmV2ZW50cyBmbGlja2VyKS4gQGRlZmF1bHQgMCAqL1xyXG4gIG1pbkR1cmF0aW9uPzogbnVtYmVyO1xyXG59XHJcblxyXG4vLyDilIDilIDilIAgVG9wYmFyIChtdWx0aS1iYXIgaGVhZGVyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbi8qKiBEaXNjcmltaW5hdG9yIGZvciB0b3BiYXIgYmFyIHR5cGUuICovXHJcbmV4cG9ydCB0eXBlIFVpQmFyVHlwZSA9ICdub3RpZmljYXRpb24nIHwgJ2JyYW5kJyB8ICduYXZpZ2F0aW9uJyB8ICdsaW5rcyc7XHJcblxyXG4vKipcclxuICogTm90aWZpY2F0aW9uIGJhciBkaXNwbGF5ZWQgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZS5cclxuICpcclxuICogQHVzYWdlTm90ZXNcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiB7IHRleHQ6ICdNYW51dGVuemlvbmUgcHJldmlzdGEgYWxsZSAyMjowMCcsIHZhcmlhbnQ6ICd3YXJuJywgZGlzbWlzc2libGU6IHRydWUgfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlOb3RpZmljYXRpb25CYXJDb25maWcge1xyXG4gIC8qKiBOb3RpZmljYXRpb24gbWVzc2FnZSB0ZXh0LiAqL1xyXG4gIHRleHQ6IHN0cmluZztcclxuICAvKiogVmlzdWFsIHZhcmlhbnQuIEBkZWZhdWx0ICdwcmltYXJ5JyAqL1xyXG4gIHZhcmlhbnQ/OiBVaVZhcmlhbnQ7XHJcbiAgLyoqIFdoZXRoZXIgdGhlIHVzZXIgY2FuIGRpc21pc3MgdGhpcyBiYXIuIEBkZWZhdWx0IHRydWUgKi9cclxuICBkaXNtaXNzaWJsZT86IGJvb2xlYW47XHJcbiAgLyoqIEx1Y2lkZSBpY29uIHNob3duIGJlZm9yZSB0aGUgdGV4dC4gKi9cclxuICBpY29uPzogVWlJY29uTmFtZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEJyYW5kIGJhciB3aXRoIGxvZ28sIHRpdGxlLCBhbmQgb3B0aW9uYWwgdXNlciBkcm9wZG93bi5cclxuICpcclxuICogQHVzYWdlTm90ZXNcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiB7XHJcbiAqICAgbG9nbzogeyBzcmM6ICcvYXNzZXRzL2xvZ28uc3ZnJywgYWx0OiAnTXkgQXBwJyB9LFxyXG4gKiAgIHRpdGxlOiAnTXkgQXBwJyxcclxuICogICB1c2VyRHJvcGRvd246IHtcclxuICogICAgIGxhYmVsOiAnTWFyaW8gUm9zc2knLFxyXG4gKiAgICAgYXZhdGFyOiB7IHNyYzogJy9hdmF0YXIuanBnJyB9LFxyXG4gKiAgICAgaXRlbXM6IFtcclxuICogICAgICAgeyBpZDogJ3Byb2ZpbGUnLCBsYWJlbDogJ1Byb2ZpbG8nLCBpY29uOiAndXNlcicsIHJvdXRlOiAnL3Byb2ZpbGUnIH0sXHJcbiAqICAgICAgIHsgaWQ6ICdsb2dvdXQnLCBsYWJlbDogJ0xvZ291dCcsIGljb246ICdsb2ctb3V0JywgYWN0aW9uOiAoKSA9PiBhdXRoLmxvZ291dCgpIH0sXHJcbiAqICAgICBdLFxyXG4gKiAgIH0sXHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpQnJhbmRCYXJDb25maWcge1xyXG4gIC8qKiBMb2dvIGRpc3BsYXllZCBvbiB0aGUgbGVmdC4gKi9cclxuICBsb2dvPzogVWlMYXlvdXRMb2dvO1xyXG4gIC8qKiBBcHBsaWNhdGlvbiB0aXRsZS4gKi9cclxuICB0aXRsZT86IHN0cmluZztcclxuICAvKiogVXNlciBkcm9wZG93biBhbGlnbmVkIHRvIHRoZSByaWdodC4gKi9cclxuICB1c2VyRHJvcGRvd24/OiBVaVVzZXJEcm9wZG93bkNvbmZpZztcclxufVxyXG5cclxuLyoqIFVzZXIgZHJvcGRvd24gbWVudSBjb25maWd1cmF0aW9uIGZvciB0aGUgYnJhbmQgYmFyLiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpVXNlckRyb3Bkb3duQ29uZmlnIHtcclxuICAvKiogRGlzcGxheSBsYWJlbCAoZS5nLiB1c2VyJ3MgbmFtZSkuICovXHJcbiAgbGFiZWw6IHN0cmluZztcclxuICAvKiogTHVjaWRlIGljb24gbmFtZSAoZmFsbGJhY2sgd2hlbiBubyBhdmF0YXIpLiAqL1xyXG4gIGljb24/OiBVaUljb25OYW1lO1xyXG4gIC8qKiBVc2VyIGF2YXRhciBpbWFnZS4gKi9cclxuICBhdmF0YXI/OiB7IHNyYzogc3RyaW5nOyBhbHQ/OiBzdHJpbmcgfTtcclxuICAvKiogRHJvcGRvd24gbWVudSBpdGVtcy4gKi9cclxuICBpdGVtczogVWlEcm9wZG93bkl0ZW1bXTtcclxufVxyXG5cclxuLyoqIFNpbmdsZSBpdGVtIGluIGEgZHJvcGRvd24gbWVudS4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaURyb3Bkb3duSXRlbSB7XHJcbiAgLyoqIFVuaXF1ZSBpdGVtIGlkZW50aWZpZXIuICovXHJcbiAgaWQ6IHN0cmluZztcclxuICAvKiogRGlzcGxheSBsYWJlbC4gKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBMdWNpZGUgaWNvbiBuYW1lLiAqL1xyXG4gIGljb24/OiBVaUljb25OYW1lO1xyXG4gIC8qKiBBbmd1bGFyIHJvdXRlciBwYXRoLiAqL1xyXG4gIHJvdXRlPzogc3RyaW5nO1xyXG4gIC8qKiBDYWxsYmFjayBpbnZva2VkIG9uIGNsaWNrLiAqL1xyXG4gIGFjdGlvbj86ICgpID0+IHZvaWQ7XHJcbiAgLyoqIFJlbmRlciBhIGRpdmlkZXIgYWJvdmUgdGhpcyBpdGVtLiAqL1xyXG4gIGRpdmlkZXI/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKiogTmF2aWdhdGlvbiBiYXIgKHVzZWQgaW4gdG9wYmFyIG1vZGUgdG8gcmVuZGVyIGhvcml6b250YWwgbmF2IGxpbmtzKS4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaU5hdmlnYXRpb25CYXJDb25maWcge1xyXG4gIC8qKiBPdmVycmlkZSBpdGVtcyBmb3IgdGhpcyBiYXIgKGRlZmF1bHRzIHRvIGBzY2hlbWEubmF2aWdhdGlvbi5pdGVtc2ApLiAqL1xyXG4gIGl0ZW1zPzogVWlOYXZJdGVtW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMaW5rcyBiYXIgd2l0aCBpY29uIGxpbmtzIChlLmcuIHNvY2lhbCBtZWRpYSwgZXh0ZXJuYWwgcmVzb3VyY2VzKS5cclxuICpcclxuICogQHVzYWdlTm90ZXNcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiB7XHJcbiAqICAgYWxpZ246ICdlbmQnLFxyXG4gKiAgIGl0ZW1zOiBbXHJcbiAqICAgICB7IGljb246ICdnaXRodWInLCBocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tLy4uLicsIGFyaWFMYWJlbDogJ0dpdEh1YicgfSxcclxuICogICAgIHsgbGFiZWw6ICdEb2NzJywgaWNvbjogJ2Jvb2stb3BlbicsIGhyZWY6ICdodHRwczovL2RvY3MuZXhhbXBsZS5jb20nIH0sXHJcbiAqICAgXSxcclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlMaW5rc0JhckNvbmZpZyB7XHJcbiAgLyoqIEhvcml6b250YWwgYWxpZ25tZW50IG9mIGl0ZW1zLiBAZGVmYXVsdCAnZW5kJyAqL1xyXG4gIGFsaWduPzogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcgfCAnc3BhY2UtYmV0d2Vlbic7XHJcbiAgLyoqIExpbmsgaXRlbXMuICovXHJcbiAgaXRlbXM6IFVpQmFyTGlua0l0ZW1bXTtcclxufVxyXG5cclxuLyoqIFNpbmdsZSBsaW5rIGl0ZW0gaW4gYSBsaW5rcyBiYXIuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlCYXJMaW5rSXRlbSB7XHJcbiAgLyoqIERpc3BsYXkgbGFiZWwgKG9wdGlvbmFsLCBpY29uLW9ubHkgaWYgb21pdHRlZCkuICovXHJcbiAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgLyoqIEx1Y2lkZSBpY29uIG5hbWUuICovXHJcbiAgaWNvbj86IFVpSWNvbk5hbWU7XHJcbiAgLyoqIEV4dGVybmFsIFVSTC4gKi9cclxuICBocmVmPzogc3RyaW5nO1xyXG4gIC8qKiBBbmd1bGFyIHJvdXRlciBwYXRoLiAqL1xyXG4gIHJvdXRlPzogc3RyaW5nO1xyXG4gIC8qKiBMaW5rIHRhcmdldC4gQGRlZmF1bHQgJ19zZWxmJyAqL1xyXG4gIHRhcmdldD86ICdfYmxhbmsnIHwgJ19zZWxmJztcclxuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBmb3IgaWNvbi1vbmx5IGl0ZW1zLiAqL1xyXG4gIGFyaWFMYWJlbD86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIFNpbmdsZSBiYXIgZGVzY3JpcHRvciBpbiB0aGUgdG9wYmFyIGJhciBzdGFjay5cclxuICpcclxuICogQHVzYWdlTm90ZXNcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBiYXJzOiBVaUJhckNvbmZpZ1tdID0gW1xyXG4gKiAgIHsgaWQ6ICdwcm9tbycsIHR5cGU6ICdub3RpZmljYXRpb24nLCBub3RpZmljYXRpb246IHsgdGV4dDogJ1Byb21vIGF0dGl2YSEnLCBkaXNtaXNzaWJsZTogdHJ1ZSB9IH0sXHJcbiAqICAgeyBpZDogJ21haW4nLCB0eXBlOiAnYnJhbmQnLCBicmFuZDogeyBsb2dvOiB7IHRleHQ6ICdVSScgfSwgdGl0bGU6ICdNeSBBcHAnIH0gfSxcclxuICogICB7IGlkOiAnbmF2JywgdHlwZTogJ25hdmlnYXRpb24nIH0sXHJcbiAqICAgeyBpZDogJ3NvY2lhbCcsIHR5cGU6ICdsaW5rcycsIGxpbmtzOiB7IGFsaWduOiAnZW5kJywgaXRlbXM6IFsuLi5dIH0gfSxcclxuICogXTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpQmFyQ29uZmlnIHtcclxuICAvKiogVW5pcXVlIGJhciBpZGVudGlmaWVyLiAqL1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgLyoqIEJhciB0eXBlIGRpc2NyaW1pbmF0b3IuICovXHJcbiAgdHlwZTogVWlCYXJUeXBlO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBiYXIgaXMgaW5pdGlhbGx5IHZpc2libGUuIEBkZWZhdWx0IHRydWUgKi9cclxuICB2aXNpYmxlPzogYm9vbGVhbjtcclxuICAvKiogQ29uZmlndXJhdGlvbiB3aGVuIGB0eXBlID09PSAnbm90aWZpY2F0aW9uJ2AuICovXHJcbiAgbm90aWZpY2F0aW9uPzogVWlOb3RpZmljYXRpb25CYXJDb25maWc7XHJcbiAgLyoqIENvbmZpZ3VyYXRpb24gd2hlbiBgdHlwZSA9PT0gJ2JyYW5kJ2AuICovXHJcbiAgYnJhbmQ/OiBVaUJyYW5kQmFyQ29uZmlnO1xyXG4gIC8qKiBDb25maWd1cmF0aW9uIHdoZW4gYHR5cGUgPT09ICduYXZpZ2F0aW9uJ2AuICovXHJcbiAgbmF2aWdhdGlvbj86IFVpTmF2aWdhdGlvbkJhckNvbmZpZztcclxuICAvKiogQ29uZmlndXJhdGlvbiB3aGVuIGB0eXBlID09PSAnbGlua3MnYC4gKi9cclxuICBsaW5rcz86IFVpTGlua3NCYXJDb25maWc7XHJcbn1cclxuXHJcbi8qKiBUb3BiYXIgY29uZmlndXJhdGlvbiAoYmFyIHN0YWNrKS4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaVRvcGJhckNvbmZpZyB7XHJcbiAgLyoqIE9yZGVyZWQgbGlzdCBvZiBiYXJzIHJlbmRlcmVkIHRvcC10by1ib3R0b20uICovXHJcbiAgYmFyczogVWlCYXJDb25maWdbXTtcclxufVxyXG5cclxuLy8g4pSA4pSA4pSAIFJvb3QgU2NoZW1hIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqXHJcbiAqIFJvb3QgZGVzY3JpcHRvciBmb3IgdGhlIGB1aS1sYXlvdXQtYnVpbGRlcmAgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAdXNhZ2VOb3Rlc1xyXG4gKiAjIyMgTWluaW1hbCBzaWRlYmFyIGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBzY2hlbWE6IFVpTGF5b3V0U2NoZW1hID0ge1xyXG4gKiAgIGhlYWRlcjogeyB0aXRsZTogJ015IEFwcCcgfSxcclxuICogICBuYXZpZ2F0aW9uOiB7XHJcbiAqICAgICBpdGVtczogW1xyXG4gKiAgICAgICB7IGlkOiAnaG9tZScsIGxhYmVsOiAnSG9tZScsIGljb246ICdob21lJywgcm91dGU6ICcvJywgcm91dGVBY3RpdmVFeGFjdDogdHJ1ZSB9LFxyXG4gKiAgICAgICB7IGlkOiAndXNlcnMnLCBsYWJlbDogJ1V0ZW50aScsIGljb246ICd1c2VycycsIHJvdXRlOiAnL3VzZXJzJyB9LFxyXG4gKiAgICAgXSxcclxuICogICB9LFxyXG4gKiB9O1xyXG4gKiBgYGBcclxuICpcclxuICogIyMjIFRvcGJhciBtb2RlIGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBzY2hlbWE6IFVpTGF5b3V0U2NoZW1hID0ge1xyXG4gKiAgIG1vZGU6ICd0b3BiYXInLFxyXG4gKiAgIGhlYWRlcjogeyBsb2dvOiB7IHRleHQ6ICdVSScgfSwgdGl0bGU6ICdNeSBBcHAnIH0sXHJcbiAqICAgbmF2aWdhdGlvbjogeyBpdGVtczogWy4uLl0gfSxcclxuICogICB0b3BiYXI6IHtcclxuICogICAgIGJhcnM6IFtcclxuICogICAgICAgeyBpZDogJ2FsZXJ0JywgdHlwZTogJ25vdGlmaWNhdGlvbicsIG5vdGlmaWNhdGlvbjogeyB0ZXh0OiAnQmV0YSEnLCBkaXNtaXNzaWJsZTogdHJ1ZSB9IH0sXHJcbiAqICAgICAgIHsgaWQ6ICdtYWluJywgdHlwZTogJ2JyYW5kJywgYnJhbmQ6IHsgbG9nbzogeyB0ZXh0OiAnVUknIH0sIHRpdGxlOiAnTXkgQXBwJyB9IH0sXHJcbiAqICAgICAgIHsgaWQ6ICduYXYnLCB0eXBlOiAnbmF2aWdhdGlvbicgfSxcclxuICogICAgIF0sXHJcbiAqICAgfSxcclxuICogfTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpTGF5b3V0U2NoZW1hIHtcclxuICAvKiogTGF5b3V0IG1vZGUuIEBkZWZhdWx0ICdzaWRlYmFyJyAqL1xyXG4gIG1vZGU/OiBVaUxheW91dE1vZGU7XHJcbiAgLyoqIEhlYWRlciAvIHRvcC1iYXIgYnJhbmRpbmcgKHVzZWQgaW4gc2lkZWJhciBtb2RlIGFuZCBhcyBmYWxsYmFjaykuICovXHJcbiAgaGVhZGVyOiBVaUxheW91dEhlYWRlckNvbmZpZztcclxuICAvKiogTmF2aWdhdGlvbiBzdHJ1Y3R1cmUgYW5kIGJlaGF2aW91ci4gKi9cclxuICBuYXZpZ2F0aW9uOiBVaUxheW91dE5hdmlnYXRpb25Db25maWc7XHJcbiAgLyoqIEZvb3RlciBjb250ZW50IChvcHRpb25hbCkuICovXHJcbiAgZm9vdGVyPzogVWlMYXlvdXRGb290ZXJDb25maWc7XHJcbiAgLyoqIEZsb2F0aW5nIGFjdGlvbiBidXR0b24gLyBzcGVlZCBkaWFsIChvcHRpb25hbCkuICovXHJcbiAgZmFiPzogVWlMYXlvdXRGYWJDb25maWc7XHJcbiAgLyoqIFBhZ2UgaGVhZGVyIGRlZmF1bHRzIGFwcGxpZWQgdG8gZXZlcnkgcGFnZSAob3B0aW9uYWwpLiAqL1xyXG4gIHBhZ2VIZWFkZXI/OiBVaUxheW91dFBhZ2VIZWFkZXJDb25maWc7XHJcbiAgLyoqIE92ZXJsYXkgbG9hZGVyIGNvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS4gKi9cclxuICBsb2FkZXI/OiBVaUxheW91dExvYWRlckNvbmZpZztcclxuICAvKiogQ29udGVudCBhcmVhIHNpemluZyBzdHJhdGVneS4gQGRlZmF1bHQgJ2ZsdWlkJyAqL1xyXG4gIGNvbnRlbnRUeXBlPzogVWlDb250ZW50VHlwZTtcclxuICAvKiogVG9wYmFyIGNvbmZpZ3VyYXRpb24gKG9ubHkgdXNlZCB3aGVuIGBtb2RlID09PSAndG9wYmFyJ2ApLiAqL1xyXG4gIHRvcGJhcj86IFVpVG9wYmFyQ29uZmlnO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Central service for programmatic control of the `ui-layout-builder` shell.
3
+ *
4
+ * Provides reactive state management for:
5
+ * - Overlay loader (with body scroll locking)
6
+ * - Sidebar open / collapsed state
7
+ * - Context-sensitive FAB actions
8
+ * - Navigation badge and visibility overrides
9
+ * - Layout mode switching (sidebar / topbar)
10
+ * - Content type (fluid / boxed / fullscreen)
11
+ * - Topbar bar visibility (notification bars show/hide)
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * export class MyPageComponent {
16
+ * private layout = inject(UiLayoutService);
17
+ *
18
+ * async loadData() {
19
+ * this.layout.showLoader();
20
+ * try {
21
+ * await this.api.fetchAll();
22
+ * } finally {
23
+ * this.layout.hideLoader();
24
+ * }
25
+ * }
26
+ * }
27
+ * ```
28
+ */
29
+ import { Injectable, inject, PLATFORM_ID } from '@angular/core';
30
+ import { isPlatformBrowser } from '@angular/common';
31
+ import { BehaviorSubject } from 'rxjs';
32
+ import * as i0 from "@angular/core";
33
+ export class UiLayoutService {
34
+ constructor() {
35
+ this.platformId = inject(PLATFORM_ID);
36
+ // ── Loader ───────────────────────────────────────────────────────
37
+ this._loading$ = new BehaviorSubject(false);
38
+ /** Whether the overlay loader is currently visible. */
39
+ this.loading$ = this._loading$.asObservable();
40
+ // ── Layout Mode ─────────────────────────────────────────────────
41
+ this._layoutMode$ = new BehaviorSubject('sidebar');
42
+ /** Current layout mode (sidebar or topbar). */
43
+ this.layoutMode$ = this._layoutMode$.asObservable();
44
+ // ── Content Type ────────────────────────────────────────────────
45
+ this._contentType$ = new BehaviorSubject('fluid');
46
+ /** Current content type (fluid, boxed, fullscreen). */
47
+ this.contentType$ = this._contentType$.asObservable();
48
+ // ── Sidebar ──────────────────────────────────────────────────────
49
+ this._sidebarOpen$ = new BehaviorSubject(false);
50
+ /** Whether the mobile sidebar drawer is open. */
51
+ this.sidebarOpen$ = this._sidebarOpen$.asObservable();
52
+ this._sidebarCollapsed$ = new BehaviorSubject(false);
53
+ /** Whether the desktop sidebar is in collapsed (icon-only) mode. */
54
+ this.sidebarCollapsed$ = this._sidebarCollapsed$.asObservable();
55
+ // ── FAB (context-sensitive) ──────────────────────────────────────
56
+ this._defaultFabConfig = null;
57
+ this._fabConfig$ = new BehaviorSubject(null);
58
+ /** Current FAB configuration (schema default merged with page overrides). */
59
+ this.fabConfig$ = this._fabConfig$.asObservable();
60
+ // ── Navigation helpers ───────────────────────────────────────────
61
+ this._navBadges$ = new BehaviorSubject(new Map());
62
+ /** Observable map of nav-item badges keyed by item ID. */
63
+ this.navBadges$ = this._navBadges$.asObservable();
64
+ this._navVisibility$ = new BehaviorSubject(new Map());
65
+ /** Observable map of nav-item visibility overrides keyed by item ID. */
66
+ this.navVisibility$ = this._navVisibility$.asObservable();
67
+ // ── Bar visibility (topbar notification bars) ───────────────────
68
+ this._barVisibility$ = new BehaviorSubject(new Map());
69
+ /** Observable map of topbar bar visibility keyed by bar ID. */
70
+ this.barVisibility$ = this._barVisibility$.asObservable();
71
+ }
72
+ /** Show the full-screen overlay loader and block body scroll. */
73
+ showLoader() {
74
+ this._loading$.next(true);
75
+ this.setBodyOverflow(true);
76
+ }
77
+ /** Hide the overlay loader and restore body scroll. */
78
+ hideLoader() {
79
+ this._loading$.next(false);
80
+ this.setBodyOverflow(false);
81
+ }
82
+ /** Toggle the overlay loader. */
83
+ toggleLoader() {
84
+ if (this._loading$.value) {
85
+ this.hideLoader();
86
+ }
87
+ else {
88
+ this.showLoader();
89
+ }
90
+ }
91
+ /** Synchronous snapshot of the loading state. */
92
+ isLoading() {
93
+ return this._loading$.value;
94
+ }
95
+ /**
96
+ * Switch layout mode with loader masking the transition.
97
+ * Shows the loader, applies the mode change, then hides the loader
98
+ * after a short delay to prevent visible layout shift.
99
+ */
100
+ setLayoutMode(mode, transitionMs = 300) {
101
+ if (this._layoutMode$.value === mode)
102
+ return;
103
+ this.showLoader();
104
+ this._layoutMode$.next(mode);
105
+ setTimeout(() => this.hideLoader(), transitionMs);
106
+ }
107
+ /** Synchronous snapshot of the current layout mode. */
108
+ getLayoutMode() {
109
+ return this._layoutMode$.value;
110
+ }
111
+ /**
112
+ * @internal Called by the layout-builder component to set the initial mode
113
+ * from the schema without triggering the loader transition.
114
+ */
115
+ _setInitialLayoutMode(mode) {
116
+ this._layoutMode$.next(mode);
117
+ }
118
+ /** Set the content type per-route or globally. */
119
+ setContentType(type) {
120
+ this._contentType$.next(type);
121
+ }
122
+ /** Synchronous snapshot of the current content type. */
123
+ getContentType() {
124
+ return this._contentType$.value;
125
+ }
126
+ /** @internal */
127
+ _setInitialContentType(type) {
128
+ this._contentType$.next(type);
129
+ }
130
+ /** Toggle the desktop sidebar between expanded and collapsed. */
131
+ toggleSidebar() {
132
+ this._sidebarCollapsed$.next(!this._sidebarCollapsed$.value);
133
+ }
134
+ /** Set the desktop sidebar collapsed state explicitly. */
135
+ collapseSidebar(collapsed = true) {
136
+ this._sidebarCollapsed$.next(collapsed);
137
+ }
138
+ /** Open the mobile sidebar drawer. */
139
+ openMobileSidebar() {
140
+ this._sidebarOpen$.next(true);
141
+ }
142
+ /** Close the mobile sidebar drawer. */
143
+ closeMobileSidebar() {
144
+ this._sidebarOpen$.next(false);
145
+ }
146
+ /** Synchronous snapshot: is the mobile sidebar open? */
147
+ isSidebarOpen() {
148
+ return this._sidebarOpen$.value;
149
+ }
150
+ /** Synchronous snapshot: is the desktop sidebar collapsed? */
151
+ isSidebarCollapsed() {
152
+ return this._sidebarCollapsed$.value;
153
+ }
154
+ /**
155
+ * Called internally by the layout-builder component to register the
156
+ * schema-level default FAB config.
157
+ * @internal
158
+ */
159
+ _setDefaultFabConfig(config) {
160
+ this._defaultFabConfig = config;
161
+ this._fabConfig$.next(config);
162
+ }
163
+ /** Override the FAB main action for the current page context. */
164
+ setMainFabAction(action) {
165
+ const current = this._fabConfig$.value;
166
+ this._fabConfig$.next({
167
+ mainAction: action,
168
+ secondaryActions: current?.secondaryActions ?? [],
169
+ position: current?.position ?? 'bottom-right',
170
+ });
171
+ }
172
+ /** Override all FAB actions for the current page context. */
173
+ setFabActions(main, secondary) {
174
+ const current = this._fabConfig$.value;
175
+ this._fabConfig$.next({
176
+ mainAction: main,
177
+ secondaryActions: secondary ?? [],
178
+ position: current?.position ?? 'bottom-right',
179
+ });
180
+ }
181
+ /** Reset FAB to the schema-level default configuration. */
182
+ clearFabActions() {
183
+ this._fabConfig$.next(this._defaultFabConfig);
184
+ }
185
+ /** Set or clear a badge on a navigation item. Pass `null` to remove. */
186
+ setNavBadge(itemId, badge) {
187
+ const map = new Map(this._navBadges$.value);
188
+ if (badge === null) {
189
+ map.delete(itemId);
190
+ }
191
+ else {
192
+ map.set(itemId, badge);
193
+ }
194
+ this._navBadges$.next(map);
195
+ }
196
+ /** Override visibility of a navigation item. */
197
+ setNavItemVisibility(itemId, visible) {
198
+ const map = new Map(this._navVisibility$.value);
199
+ map.set(itemId, visible);
200
+ this._navVisibility$.next(map);
201
+ }
202
+ /** Show a topbar bar by ID. */
203
+ showBar(barId) {
204
+ const map = new Map(this._barVisibility$.value);
205
+ map.set(barId, true);
206
+ this._barVisibility$.next(map);
207
+ }
208
+ /** Hide a topbar bar by ID. */
209
+ hideBar(barId) {
210
+ const map = new Map(this._barVisibility$.value);
211
+ map.set(barId, false);
212
+ this._barVisibility$.next(map);
213
+ }
214
+ /** Toggle visibility of a topbar bar by ID. */
215
+ toggleBar(barId) {
216
+ const map = new Map(this._barVisibility$.value);
217
+ const current = map.get(barId);
218
+ map.set(barId, current === undefined ? false : !current);
219
+ this._barVisibility$.next(map);
220
+ }
221
+ /** Synchronous check of bar visibility (schema `visible` fallback). */
222
+ isBarVisible(barId, schemaVisible = true) {
223
+ const override = this._barVisibility$.value.get(barId);
224
+ return override !== undefined ? override : schemaVisible;
225
+ }
226
+ // ── Private helpers ──────────────────────────────────────────────
227
+ setBodyOverflow(locked) {
228
+ if (isPlatformBrowser(this.platformId)) {
229
+ document.body.style.overflow = locked ? 'hidden' : '';
230
+ }
231
+ }
232
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiLayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
233
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiLayoutService, providedIn: 'root' }); }
234
+ }
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiLayoutService, decorators: [{
236
+ type: Injectable,
237
+ args: [{ providedIn: 'root' }]
238
+ }] });
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2xheW91dC1idWlsZGVyL2xheW91dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFTbkQsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFFbUIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsRCxvRUFBb0U7UUFFbkQsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLHVEQUF1RDtRQUM5QyxhQUFRLEdBQXdCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUE0QnZFLG1FQUFtRTtRQUVsRCxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFlLFNBQVMsQ0FBQyxDQUFDO1FBQzdFLCtDQUErQztRQUN0QyxnQkFBVyxHQUE2QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBMkJsRixtRUFBbUU7UUFFbEQsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsT0FBTyxDQUFDLENBQUM7UUFDN0UsdURBQXVEO1FBQzlDLGlCQUFZLEdBQThCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFpQnJGLG9FQUFvRTtRQUVuRCxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLGlEQUFpRDtRQUN4QyxpQkFB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QUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsWUFBWSxDQUFDLEtBQWEsRUFBRSxhQUFhLEdBQUcsSUFBSTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsT0FBTyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUMzRCxDQUFDO0lBRUQsb0VBQW9FO0lBRTVELGVBQWUsQ0FBQyxNQUFlO1FBQ3JDLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdkMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7K0dBN09VLGVBQWU7bUhBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDZW50cmFsIHNlcnZpY2UgZm9yIHByb2dyYW1tYXRpYyBjb250cm9sIG9mIHRoZSBgdWktbGF5b3V0LWJ1aWxkZXJgIHNoZWxsLlxyXG4gKlxyXG4gKiBQcm92aWRlcyByZWFjdGl2ZSBzdGF0ZSBtYW5hZ2VtZW50IGZvcjpcclxuICogLSBPdmVybGF5IGxvYWRlciAod2l0aCBib2R5IHNjcm9sbCBsb2NraW5nKVxyXG4gKiAtIFNpZGViYXIgb3BlbiAvIGNvbGxhcHNlZCBzdGF0ZVxyXG4gKiAtIENvbnRleHQtc2Vuc2l0aXZlIEZBQiBhY3Rpb25zXHJcbiAqIC0gTmF2aWdhdGlvbiBiYWRnZSBhbmQgdmlzaWJpbGl0eSBvdmVycmlkZXNcclxuICogLSBMYXlvdXQgbW9kZSBzd2l0Y2hpbmcgKHNpZGViYXIgLyB0b3BiYXIpXHJcbiAqIC0gQ29udGVudCB0eXBlIChmbHVpZCAvIGJveGVkIC8gZnVsbHNjcmVlbilcclxuICogLSBUb3BiYXIgYmFyIHZpc2liaWxpdHkgKG5vdGlmaWNhdGlvbiBiYXJzIHNob3cvaGlkZSlcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBleHBvcnQgY2xhc3MgTXlQYWdlQ29tcG9uZW50IHtcclxuICogICBwcml2YXRlIGxheW91dCA9IGluamVjdChVaUxheW91dFNlcnZpY2UpO1xyXG4gKlxyXG4gKiAgIGFzeW5jIGxvYWREYXRhKCkge1xyXG4gKiAgICAgdGhpcy5sYXlvdXQuc2hvd0xvYWRlcigpO1xyXG4gKiAgICAgdHJ5IHtcclxuICogICAgICAgYXdhaXQgdGhpcy5hcGkuZmV0Y2hBbGwoKTtcclxuICogICAgIH0gZmluYWxseSB7XHJcbiAqICAgICAgIHRoaXMubGF5b3V0LmhpZGVMb2FkZXIoKTtcclxuICogICAgIH1cclxuICogICB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgVWlGYWJBY3Rpb24sXHJcbiAgVWlMYXlvdXRGYWJDb25maWcsXHJcbiAgVWlMYXlvdXRNb2RlLFxyXG4gIFVpQ29udGVudFR5cGUsXHJcbn0gZnJvbSAnLi9sYXlvdXQtYnVpbGRlci50eXBlcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVWlMYXlvdXRTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xyXG5cclxuICAvLyDilIDilIAgTG9hZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBvdmVybGF5IGxvYWRlciBpcyBjdXJyZW50bHkgdmlzaWJsZS4gKi9cclxuICByZWFkb25seSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2xvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKiogU2hvdyB0aGUgZnVsbC1zY3JlZW4gb3ZlcmxheSBsb2FkZXIgYW5kIGJsb2NrIGJvZHkgc2Nyb2xsLiAqL1xyXG4gIHNob3dMb2FkZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3codHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKiogSGlkZSB0aGUgb3ZlcmxheSBsb2FkZXIgYW5kIHJlc3RvcmUgYm9keSBzY3JvbGwuICovXHJcbiAgaGlkZUxvYWRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgb3ZlcmxheSBsb2FkZXIuICovXHJcbiAgdG9nZ2xlTG9hZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2xvYWRpbmckLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaGlkZUxvYWRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogU3luY2hyb25vdXMgc25hcHNob3Qgb2YgdGhlIGxvYWRpbmcgc3RhdGUuICovXHJcbiAgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSAIExheW91dCBNb2RlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9sYXlvdXRNb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VWlMYXlvdXRNb2RlPignc2lkZWJhcicpO1xyXG4gIC8qKiBDdXJyZW50IGxheW91dCBtb2RlIChzaWRlYmFyIG9yIHRvcGJhcikuICovXHJcbiAgcmVhZG9ubHkgbGF5b3V0TW9kZSQ6IE9ic2VydmFibGU8VWlMYXlvdXRNb2RlPiA9IHRoaXMuX2xheW91dE1vZGUkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBTd2l0Y2ggbGF5b3V0IG1vZGUgd2l0aCBsb2FkZXIgbWFza2luZyB0aGUgdHJhbnNpdGlvbi5cclxuICAgKiBTaG93cyB0aGUgbG9hZGVyLCBhcHBsaWVzIHRoZSBtb2RlIGNoYW5nZSwgdGhlbiBoaWRlcyB0aGUgbG9hZGVyXHJcbiAgICogYWZ0ZXIgYSBzaG9ydCBkZWxheSB0byBwcmV2ZW50IHZpc2libGUgbGF5b3V0IHNoaWZ0LlxyXG4gICAqL1xyXG4gIHNldExheW91dE1vZGUobW9kZTogVWlMYXlvdXRNb2RlLCB0cmFuc2l0aW9uTXMgPSAzMDApOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRNb2RlJC52YWx1ZSA9PT0gbW9kZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zaG93TG9hZGVyKCk7XHJcbiAgICB0aGlzLl9sYXlvdXRNb2RlJC5uZXh0KG1vZGUpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmhpZGVMb2FkZXIoKSwgdHJhbnNpdGlvbk1zKTtcclxuICB9XHJcblxyXG4gIC8qKiBTeW5jaHJvbm91cyBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBsYXlvdXQgbW9kZS4gKi9cclxuICBnZXRMYXlvdXRNb2RlKCk6IFVpTGF5b3V0TW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGF5b3V0TW9kZSQudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaW50ZXJuYWwgQ2FsbGVkIGJ5IHRoZSBsYXlvdXQtYnVpbGRlciBjb21wb25lbnQgdG8gc2V0IHRoZSBpbml0aWFsIG1vZGVcclxuICAgKiBmcm9tIHRoZSBzY2hlbWEgd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBsb2FkZXIgdHJhbnNpdGlvbi5cclxuICAgKi9cclxuICBfc2V0SW5pdGlhbExheW91dE1vZGUobW9kZTogVWlMYXlvdXRNb2RlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sYXlvdXRNb2RlJC5uZXh0KG1vZGUpO1xyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSAIENvbnRlbnQgVHlwZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY29udGVudFR5cGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVaUNvbnRlbnRUeXBlPignZmx1aWQnKTtcclxuICAvKiogQ3VycmVudCBjb250ZW50IHR5cGUgKGZsdWlkLCBib3hlZCwgZnVsbHNjcmVlbikuICovXHJcbiAgcmVhZG9ubHkgY29udGVudFR5cGUkOiBPYnNlcnZhYmxlPFVpQ29udGVudFR5cGU+ID0gdGhpcy5fY29udGVudFR5cGUkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKiogU2V0IHRoZSBjb250ZW50IHR5cGUgcGVyLXJvdXRlIG9yIGdsb2JhbGx5LiAqL1xyXG4gIHNldENvbnRlbnRUeXBlKHR5cGU6IFVpQ29udGVudFR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRlbnRUeXBlJC5uZXh0KHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN5bmNocm9ub3VzIHNuYXBzaG90IG9mIHRoZSBjdXJyZW50IGNvbnRlbnQgdHlwZS4gKi9cclxuICBnZXRDb250ZW50VHlwZSgpOiBVaUNvbnRlbnRUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250ZW50VHlwZSQudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgX3NldEluaXRpYWxDb250ZW50VHlwZSh0eXBlOiBVaUNvbnRlbnRUeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb250ZW50VHlwZSQubmV4dCh0eXBlKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgCBTaWRlYmFyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9zaWRlYmFyT3BlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAvKiogV2hldGhlciB0aGUgbW9iaWxlIHNpZGViYXIgZHJhd2VyIGlzIG9wZW4uICovXHJcbiAgcmVhZG9ubHkgc2lkZWJhck9wZW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5fc2lkZWJhck9wZW4kLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9zaWRlYmFyQ29sbGFwc2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBkZXNrdG9wIHNpZGViYXIgaXMgaW4gY29sbGFwc2VkIChpY29uLW9ubHkpIG1vZGUuICovXHJcbiAgcmVhZG9ubHkgc2lkZWJhckNvbGxhcHNlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl9zaWRlYmFyQ29sbGFwc2VkJC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgZGVza3RvcCBzaWRlYmFyIGJldHdlZW4gZXhwYW5kZWQgYW5kIGNvbGxhcHNlZC4gKi9cclxuICB0b2dnbGVTaWRlYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2lkZWJhckNvbGxhcHNlZCQubmV4dCghdGhpcy5fc2lkZWJhckNvbGxhcHNlZCQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNldCB0aGUgZGVza3RvcCBzaWRlYmFyIGNvbGxhcHNlZCBzdGF0ZSBleHBsaWNpdGx5LiAqL1xyXG4gIGNvbGxhcHNlU2lkZWJhcihjb2xsYXBzZWQgPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaWRlYmFyQ29sbGFwc2VkJC5uZXh0KGNvbGxhcHNlZCk7XHJcbiAgfVxyXG5cclxuICAvKiogT3BlbiB0aGUgbW9iaWxlIHNpZGViYXIgZHJhd2VyLiAqL1xyXG4gIG9wZW5Nb2JpbGVTaWRlYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2lkZWJhck9wZW4kLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2xvc2UgdGhlIG1vYmlsZSBzaWRlYmFyIGRyYXdlci4gKi9cclxuICBjbG9zZU1vYmlsZVNpZGViYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaWRlYmFyT3BlbiQubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvKiogU3luY2hyb25vdXMgc25hcHNob3Q6IGlzIHRoZSBtb2JpbGUgc2lkZWJhciBvcGVuPyAqL1xyXG4gIGlzU2lkZWJhck9wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2lkZWJhck9wZW4kLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN5bmNocm9ub3VzIHNuYXBzaG90OiBpcyB0aGUgZGVza3RvcCBzaWRlYmFyIGNvbGxhcHNlZD8gKi9cclxuICBpc1NpZGViYXJDb2xsYXBzZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2lkZWJhckNvbGxhcHNlZCQudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIAgRkFCIChjb250ZXh0LXNlbnNpdGl2ZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIHByaXZhdGUgX2RlZmF1bHRGYWJDb25maWc6IFVpTGF5b3V0RmFiQ29uZmlnIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZmFiQ29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VWlMYXlvdXRGYWJDb25maWcgfCBudWxsPihudWxsKTtcclxuICAvKiogQ3VycmVudCBGQUIgY29uZmlndXJhdGlvbiAoc2NoZW1hIGRlZmF1bHQgbWVyZ2VkIHdpdGggcGFnZSBvdmVycmlkZXMpLiAqL1xyXG4gIHJlYWRvbmx5IGZhYkNvbmZpZyQ6IE9ic2VydmFibGU8VWlMYXlvdXRGYWJDb25maWcgfCBudWxsPiA9IHRoaXMuX2ZhYkNvbmZpZyQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBsYXlvdXQtYnVpbGRlciBjb21wb25lbnQgdG8gcmVnaXN0ZXIgdGhlXHJcbiAgICogc2NoZW1hLWxldmVsIGRlZmF1bHQgRkFCIGNvbmZpZy5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBfc2V0RGVmYXVsdEZhYkNvbmZpZyhjb25maWc6IFVpTGF5b3V0RmFiQ29uZmlnIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVmYXVsdEZhYkNvbmZpZyA9IGNvbmZpZztcclxuICAgIHRoaXMuX2ZhYkNvbmZpZyQubmV4dChjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIE92ZXJyaWRlIHRoZSBGQUIgbWFpbiBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHBhZ2UgY29udGV4dC4gKi9cclxuICBzZXRNYWluRmFiQWN0aW9uKGFjdGlvbjogVWlGYWJBY3Rpb24pOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl9mYWJDb25maWckLnZhbHVlO1xyXG4gICAgdGhpcy5fZmFiQ29uZmlnJC5uZXh0KHtcclxuICAgICAgbWFpbkFjdGlvbjogYWN0aW9uLFxyXG4gICAgICBzZWNvbmRhcnlBY3Rpb25zOiBjdXJyZW50Py5zZWNvbmRhcnlBY3Rpb25zID8/IFtdLFxyXG4gICAgICBwb3NpdGlvbjogY3VycmVudD8ucG9zaXRpb24gPz8gJ2JvdHRvbS1yaWdodCcsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBPdmVycmlkZSBhbGwgRkFCIGFjdGlvbnMgZm9yIHRoZSBjdXJyZW50IHBhZ2UgY29udGV4dC4gKi9cclxuICBzZXRGYWJBY3Rpb25zKG1haW46IFVpRmFiQWN0aW9uLCBzZWNvbmRhcnk/OiBVaUZhYkFjdGlvbltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fZmFiQ29uZmlnJC52YWx1ZTtcclxuICAgIHRoaXMuX2ZhYkNvbmZpZyQubmV4dCh7XHJcbiAgICAgIG1haW5BY3Rpb246IG1haW4sXHJcbiAgICAgIHNlY29uZGFyeUFjdGlvbnM6IHNlY29uZGFyeSA/PyBbXSxcclxuICAgICAgcG9zaXRpb246IGN1cnJlbnQ/LnBvc2l0aW9uID8/ICdib3R0b20tcmlnaHQnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVzZXQgRkFCIHRvIHRoZSBzY2hlbWEtbGV2ZWwgZGVmYXVsdCBjb25maWd1cmF0aW9uLiAqL1xyXG4gIGNsZWFyRmFiQWN0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZhYkNvbmZpZyQubmV4dCh0aGlzLl9kZWZhdWx0RmFiQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgCBOYXZpZ2F0aW9uIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdkJhZGdlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IG51bGw+PihuZXcgTWFwKCkpO1xyXG4gIC8qKiBPYnNlcnZhYmxlIG1hcCBvZiBuYXYtaXRlbSBiYWRnZXMga2V5ZWQgYnkgaXRlbSBJRC4gKi9cclxuICByZWFkb25seSBuYXZCYWRnZXMkOiBPYnNlcnZhYmxlPE1hcDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IG51bGw+PiA9IHRoaXMuX25hdkJhZGdlcyQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdlZpc2liaWxpdHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXA8c3RyaW5nLCBib29sZWFuPj4obmV3IE1hcCgpKTtcclxuICAvKiogT2JzZXJ2YWJsZSBtYXAgb2YgbmF2LWl0ZW0gdmlzaWJpbGl0eSBvdmVycmlkZXMga2V5ZWQgYnkgaXRlbSBJRC4gKi9cclxuICByZWFkb25seSBuYXZWaXNpYmlsaXR5JDogT2JzZXJ2YWJsZTxNYXA8c3RyaW5nLCBib29sZWFuPj4gPSB0aGlzLl9uYXZWaXNpYmlsaXR5JC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqIFNldCBvciBjbGVhciBhIGJhZGdlIG9uIGEgbmF2aWdhdGlvbiBpdGVtLiBQYXNzIGBudWxsYCB0byByZW1vdmUuICovXHJcbiAgc2V0TmF2QmFkZ2UoaXRlbUlkOiBzdHJpbmcsIGJhZGdlOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKHRoaXMuX25hdkJhZGdlcyQudmFsdWUpO1xyXG4gICAgaWYgKGJhZGdlID09PSBudWxsKSB7XHJcbiAgICAgIG1hcC5kZWxldGUoaXRlbUlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG1hcC5zZXQoaXRlbUlkLCBiYWRnZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9uYXZCYWRnZXMkLm5leHQobWFwKTtcclxuICB9XHJcblxyXG4gIC8qKiBPdmVycmlkZSB2aXNpYmlsaXR5IG9mIGEgbmF2aWdhdGlvbiBpdGVtLiAqL1xyXG4gIHNldE5hdkl0ZW1WaXNpYmlsaXR5KGl0ZW1JZDogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKHRoaXMuX25hdlZpc2liaWxpdHkkLnZhbHVlKTtcclxuICAgIG1hcC5zZXQoaXRlbUlkLCB2aXNpYmxlKTtcclxuICAgIHRoaXMuX25hdlZpc2liaWxpdHkkLm5leHQobWFwKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgCBCYXIgdmlzaWJpbGl0eSAodG9wYmFyIG5vdGlmaWNhdGlvbiBiYXJzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfYmFyVmlzaWJpbGl0eSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmcsIGJvb2xlYW4+PihuZXcgTWFwKCkpO1xyXG4gIC8qKiBPYnNlcnZhYmxlIG1hcCBvZiB0b3BiYXIgYmFyIHZpc2liaWxpdHkga2V5ZWQgYnkgYmFyIElELiAqL1xyXG4gIHJlYWRvbmx5IGJhclZpc2liaWxpdHkkOiBPYnNlcnZhYmxlPE1hcDxzdHJpbmcsIGJvb2xlYW4+PiA9IHRoaXMuX2JhclZpc2liaWxpdHkkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKiogU2hvdyBhIHRvcGJhciBiYXIgYnkgSUQuICovXHJcbiAgc2hvd0JhcihiYXJJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKHRoaXMuX2JhclZpc2liaWxpdHkkLnZhbHVlKTtcclxuICAgIG1hcC5zZXQoYmFySWQsIHRydWUpO1xyXG4gICAgdGhpcy5fYmFyVmlzaWJpbGl0eSQubmV4dChtYXApO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhpZGUgYSB0b3BiYXIgYmFyIGJ5IElELiAqL1xyXG4gIGhpZGVCYXIoYmFySWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCh0aGlzLl9iYXJWaXNpYmlsaXR5JC52YWx1ZSk7XHJcbiAgICBtYXAuc2V0KGJhcklkLCBmYWxzZSk7XHJcbiAgICB0aGlzLl9iYXJWaXNpYmlsaXR5JC5uZXh0KG1hcCk7XHJcbiAgfVxyXG5cclxuICAvKiogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSB0b3BiYXIgYmFyIGJ5IElELiAqL1xyXG4gIHRvZ2dsZUJhcihiYXJJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKHRoaXMuX2JhclZpc2liaWxpdHkkLnZhbHVlKTtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBtYXAuZ2V0KGJhcklkKTtcclxuICAgIG1hcC5zZXQoYmFySWQsIGN1cnJlbnQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogIWN1cnJlbnQpO1xyXG4gICAgdGhpcy5fYmFyVmlzaWJpbGl0eSQubmV4dChtYXApO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN5bmNocm9ub3VzIGNoZWNrIG9mIGJhciB2aXNpYmlsaXR5IChzY2hlbWEgYHZpc2libGVgIGZhbGxiYWNrKS4gKi9cclxuICBpc0JhclZpc2libGUoYmFySWQ6IHN0cmluZywgc2NoZW1hVmlzaWJsZSA9IHRydWUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5fYmFyVmlzaWJpbGl0eSQudmFsdWUuZ2V0KGJhcklkKTtcclxuICAgIHJldHVybiBvdmVycmlkZSAhPT0gdW5kZWZpbmVkID8gb3ZlcnJpZGUgOiBzY2hlbWFWaXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSAIFByaXZhdGUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBzZXRCb2R5T3ZlcmZsb3cobG9ja2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gbG9ja2VkID8gJ2hpZGRlbicgOiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,151 @@
1
+ import { Component, ChangeDetectionStrategy, ViewEncapsulation, inject } from '@angular/core';
2
+ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
3
+ import { LucideAngularModule } from 'lucide-angular';
4
+ import { UiButtonComponent } from '../button/button.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "lucide-angular";
7
+ /** @internal Mappatura variante -> icona Lucide di default. */
8
+ const VARIANT_ICON_MAP = {
9
+ confirm: 'check-circle',
10
+ delete: 'trash-2',
11
+ warn: 'alert-triangle',
12
+ info: 'info',
13
+ };
14
+ /** @internal Mappatura variante -> colore pulsante di conferma. */
15
+ const VARIANT_BUTTON_MAP = {
16
+ confirm: 'primary',
17
+ delete: 'warn',
18
+ warn: 'warn',
19
+ info: 'primary',
20
+ };
21
+ /**
22
+ * Dialogo di conferma leggero per azioni condizionali.
23
+ *
24
+ * Non va utilizzato direttamente nel template: viene aperto
25
+ * programmaticamente tramite `UiModalService.confirm()` e i suoi
26
+ * metodi scorciatoia (`confirmDelete`, `confirmDiscard`, `confirmSave`).
27
+ *
28
+ * Supporta quattro varianti semantiche — confirm, delete, warn, info —
29
+ * ciascuna con icona e colore preconfigurati.
30
+ *
31
+ * @selector ui-confirm-dialog
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * // Apertura tramite servizio
36
+ * this.modalService.confirm({
37
+ * title: 'Conferma eliminazione',
38
+ * message: 'Questa azione non puo essere annullata.',
39
+ * variant: 'delete',
40
+ * }).subscribe(confirmed => {
41
+ * if (confirmed) this.deleteItem();
42
+ * });
43
+ * ```
44
+ */
45
+ export class UiConfirmDialogComponent {
46
+ constructor() {
47
+ /** @internal Dati iniettati dal servizio modale. */
48
+ this.data = inject(MAT_DIALOG_DATA);
49
+ /** @internal Riferimento al dialogo per la chiusura. */
50
+ this.dialogRef = inject(MatDialogRef);
51
+ }
52
+ /** Variante semantica corrente. */
53
+ get variant() {
54
+ return this.data.variant || 'confirm';
55
+ }
56
+ /** Nome icona Lucide da visualizzare. */
57
+ get iconName() {
58
+ return this.data.icon || VARIANT_ICON_MAP[this.variant];
59
+ }
60
+ /** Variante del pulsante di conferma. */
61
+ get confirmButtonVariant() {
62
+ return VARIANT_BUTTON_MAP[this.variant];
63
+ }
64
+ /** Classi CSS per il contenitore icona. */
65
+ get iconClasses() {
66
+ return `ui-confirm-dialog__icon ui-confirm-dialog__icon--${this.variant}`;
67
+ }
68
+ /** Conferma e chiude il dialogo con `true`. */
69
+ confirm() {
70
+ this.dialogRef.close(true);
71
+ }
72
+ /** Annulla e chiude il dialogo con `false`. */
73
+ cancel() {
74
+ this.dialogRef.close(false);
75
+ }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiConfirmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
77
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: UiConfirmDialogComponent, isStandalone: true, selector: "ui-confirm-dialog", host: { attributes: { "role": "alertdialog", "aria-modal": "true" }, properties: { "attr.aria-labelledby": "\"ui-confirm-title\"", "attr.aria-describedby": "\"ui-confirm-message\"" }, classAttribute: "ui-confirm-dialog-host" }, ngImport: i0, template: `
78
+ <div class="ui-confirm-dialog">
79
+ <!-- Icona -->
80
+ <div [class]="iconClasses">
81
+ <lucide-icon [name]="iconName" [size]="32" aria-hidden="true" />
82
+ </div>
83
+
84
+ <!-- Contenuto -->
85
+ <div class="ui-confirm-dialog__content">
86
+ @if (data.title) {
87
+ <h3 class="ui-confirm-dialog__title" id="ui-confirm-title">{{ data.title }}</h3>
88
+ }
89
+ <p class="ui-confirm-dialog__message" id="ui-confirm-message">{{ data.message }}</p>
90
+ </div>
91
+
92
+ <!-- Azioni -->
93
+ <div class="ui-confirm-dialog__actions">
94
+ <ui-button
95
+ [label]="data.cancelText || 'Annulla'"
96
+ variant="ghost"
97
+ size="md"
98
+ (click)="cancel()"
99
+ />
100
+ <ui-button
101
+ [label]="data.confirmText || 'Conferma'"
102
+ [variant]="confirmButtonVariant"
103
+ size="md"
104
+ (click)="confirm()"
105
+ />
106
+ </div>
107
+ </div>
108
+ `, isInline: true, styles: [".ui-confirm-dialog-host{display:block}.ui-confirm-dialog{display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--ui-spacing-8) var(--ui-spacing-6);background:var(--ui-color-surface);border-radius:var(--ui-radius-lg);box-shadow:var(--ui-shadow-lg)}.ui-confirm-dialog__icon{display:flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:var(--ui-radius-full);margin-bottom:var(--ui-spacing-4)}.ui-confirm-dialog__icon--confirm{background:var(--ui-color-primary-light);color:var(--ui-color-primary)}.ui-confirm-dialog__icon--delete{background:var(--ui-color-warn-light);color:var(--ui-color-warn)}.ui-confirm-dialog__icon--warn{background:var(--ui-color-warning-light);color:var(--ui-color-warning)}.ui-confirm-dialog__icon--info{background:var(--ui-color-info-light);color:var(--ui-color-info)}.ui-confirm-dialog__content{margin-bottom:var(--ui-spacing-6)}.ui-confirm-dialog__title{margin:0 0 var(--ui-spacing-2);font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);line-height:var(--ui-line-height-tight)}.ui-confirm-dialog__message{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-secondary);line-height:var(--ui-line-height-normal);max-width:340px}.ui-confirm-dialog__actions{display:flex;gap:var(--ui-spacing-2);width:100%;justify-content:center}.ui-confirm-panel .mat-mdc-dialog-container{--mdc-dialog-container-color: transparent;--mdc-dialog-container-shape: var(--ui-radius-lg)}.ui-confirm-panel .mat-mdc-dialog-container .mdc-dialog__surface{background:transparent!important;box-shadow:none!important;border-radius:var(--ui-radius-lg)!important;overflow:visible}@media (max-width: 480px){.ui-confirm-dialog{padding:var(--ui-spacing-6) var(--ui-spacing-4)}.ui-confirm-dialog__actions{flex-direction:column-reverse;gap:var(--ui-spacing-2)}.ui-confirm-dialog__actions .ui-button-host{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { 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 }); }
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiConfirmDialogComponent, decorators: [{
111
+ type: Component,
112
+ args: [{ selector: 'ui-confirm-dialog', standalone: true, imports: [LucideAngularModule, UiButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
113
+ class: 'ui-confirm-dialog-host',
114
+ role: 'alertdialog',
115
+ 'aria-modal': 'true',
116
+ '[attr.aria-labelledby]': '"ui-confirm-title"',
117
+ '[attr.aria-describedby]': '"ui-confirm-message"',
118
+ }, template: `
119
+ <div class="ui-confirm-dialog">
120
+ <!-- Icona -->
121
+ <div [class]="iconClasses">
122
+ <lucide-icon [name]="iconName" [size]="32" aria-hidden="true" />
123
+ </div>
124
+
125
+ <!-- Contenuto -->
126
+ <div class="ui-confirm-dialog__content">
127
+ @if (data.title) {
128
+ <h3 class="ui-confirm-dialog__title" id="ui-confirm-title">{{ data.title }}</h3>
129
+ }
130
+ <p class="ui-confirm-dialog__message" id="ui-confirm-message">{{ data.message }}</p>
131
+ </div>
132
+
133
+ <!-- Azioni -->
134
+ <div class="ui-confirm-dialog__actions">
135
+ <ui-button
136
+ [label]="data.cancelText || 'Annulla'"
137
+ variant="ghost"
138
+ size="md"
139
+ (click)="cancel()"
140
+ />
141
+ <ui-button
142
+ [label]="data.confirmText || 'Conferma'"
143
+ [variant]="confirmButtonVariant"
144
+ size="md"
145
+ (click)="confirm()"
146
+ />
147
+ </div>
148
+ </div>
149
+ `, styles: [".ui-confirm-dialog-host{display:block}.ui-confirm-dialog{display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--ui-spacing-8) var(--ui-spacing-6);background:var(--ui-color-surface);border-radius:var(--ui-radius-lg);box-shadow:var(--ui-shadow-lg)}.ui-confirm-dialog__icon{display:flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:var(--ui-radius-full);margin-bottom:var(--ui-spacing-4)}.ui-confirm-dialog__icon--confirm{background:var(--ui-color-primary-light);color:var(--ui-color-primary)}.ui-confirm-dialog__icon--delete{background:var(--ui-color-warn-light);color:var(--ui-color-warn)}.ui-confirm-dialog__icon--warn{background:var(--ui-color-warning-light);color:var(--ui-color-warning)}.ui-confirm-dialog__icon--info{background:var(--ui-color-info-light);color:var(--ui-color-info)}.ui-confirm-dialog__content{margin-bottom:var(--ui-spacing-6)}.ui-confirm-dialog__title{margin:0 0 var(--ui-spacing-2);font-size:var(--ui-font-size-lg);font-weight:var(--ui-font-weight-semibold);color:var(--ui-color-text);line-height:var(--ui-line-height-tight)}.ui-confirm-dialog__message{margin:0;font-size:var(--ui-font-size-sm);color:var(--ui-color-text-secondary);line-height:var(--ui-line-height-normal);max-width:340px}.ui-confirm-dialog__actions{display:flex;gap:var(--ui-spacing-2);width:100%;justify-content:center}.ui-confirm-panel .mat-mdc-dialog-container{--mdc-dialog-container-color: transparent;--mdc-dialog-container-shape: var(--ui-radius-lg)}.ui-confirm-panel .mat-mdc-dialog-container .mdc-dialog__surface{background:transparent!important;box-shadow:none!important;border-radius:var(--ui-radius-lg)!important;overflow:visible}@media (max-width: 480px){.ui-confirm-dialog{padding:var(--ui-spacing-6) var(--ui-spacing-4)}.ui-confirm-dialog__actions{flex-direction:column-reverse;gap:var(--ui-spacing-2)}.ui-confirm-dialog__actions .ui-button-host{width:100%}}\n"] }]
150
+ }] });
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9tb2RhbC9jb25maXJtLWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBRy9ELCtEQUErRDtBQUMvRCxNQUFNLGdCQUFnQixHQUF5QztJQUM3RCxPQUFPLEVBQUUsY0FBYztJQUN2QixNQUFNLEVBQUUsU0FBUztJQUNqQixJQUFJLEVBQUUsZ0JBQWdCO0lBQ3RCLElBQUksRUFBRSxNQUFNO0NBQ2IsQ0FBQztBQUVGLG1FQUFtRTtBQUNuRSxNQUFNLGtCQUFrQixHQUF3QztJQUM5RCxPQUFPLEVBQUUsU0FBUztJQUNsQixNQUFNLEVBQUUsTUFBTTtJQUNkLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLFNBQVM7Q0FDaEIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQWdESCxNQUFNLE9BQU8sd0JBQXdCO0lBL0NyQztRQWdERSxvREFBb0Q7UUFDM0MsU0FBSSxHQUF3QixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFN0Qsd0RBQXdEO1FBQ3ZDLGNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7S0ErQm5EO0lBN0JDLG1DQUFtQztJQUNuQyxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxJQUFJLFdBQVc7UUFDYixPQUFPLG9EQUFvRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELCtDQUErQztJQUMvQyxPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELCtDQUErQztJQUMvQyxNQUFNO1FBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0FuQ1Usd0JBQXdCO21HQUF4Qix3QkFBd0IsaVRBbEN6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCxtOURBekNTLG1CQUFtQixnUEFBRSxpQkFBaUI7OzRGQTRDckMsd0JBQXdCO2tCQS9DcEMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsbUJBQ2hDLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osS0FBSyxFQUFFLHdCQUF3Qjt3QkFDL0IsSUFBSSxFQUFFLGFBQWE7d0JBQ25CLFlBQVksRUFBRSxNQUFNO3dCQUNwQix3QkFBd0IsRUFBRSxvQkFBb0I7d0JBQzlDLHlCQUF5QixFQUFFLHNCQUFzQjtxQkFDbEQsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBMdWNpZGVBbmd1bGFyTW9kdWxlIH0gZnJvbSAnbHVjaWRlLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBVaUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVWlDb25maXJtRGlhbG9nRGF0YSwgVWlDb25maXJtVmFyaWFudCwgVWlJY29uTmFtZSwgVWlWYXJpYW50IH0gZnJvbSAnLi9tb2RhbC50eXBlcyc7XHJcblxyXG4vKiogQGludGVybmFsIE1hcHBhdHVyYSB2YXJpYW50ZSAtPiBpY29uYSBMdWNpZGUgZGkgZGVmYXVsdC4gKi9cclxuY29uc3QgVkFSSUFOVF9JQ09OX01BUDogUmVjb3JkPFVpQ29uZmlybVZhcmlhbnQsIFVpSWNvbk5hbWU+ID0ge1xyXG4gIGNvbmZpcm06ICdjaGVjay1jaXJjbGUnLFxyXG4gIGRlbGV0ZTogJ3RyYXNoLTInLFxyXG4gIHdhcm46ICdhbGVydC10cmlhbmdsZScsXHJcbiAgaW5mbzogJ2luZm8nLFxyXG59O1xyXG5cclxuLyoqIEBpbnRlcm5hbCBNYXBwYXR1cmEgdmFyaWFudGUgLT4gY29sb3JlIHB1bHNhbnRlIGRpIGNvbmZlcm1hLiAqL1xyXG5jb25zdCBWQVJJQU5UX0JVVFRPTl9NQVA6IFJlY29yZDxVaUNvbmZpcm1WYXJpYW50LCBVaVZhcmlhbnQ+ID0ge1xyXG4gIGNvbmZpcm06ICdwcmltYXJ5JyxcclxuICBkZWxldGU6ICd3YXJuJyxcclxuICB3YXJuOiAnd2FybicsXHJcbiAgaW5mbzogJ3ByaW1hcnknLFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERpYWxvZ28gZGkgY29uZmVybWEgbGVnZ2VybyBwZXIgYXppb25pIGNvbmRpemlvbmFsaS5cclxuICpcclxuICogTm9uIHZhIHV0aWxpenphdG8gZGlyZXR0YW1lbnRlIG5lbCB0ZW1wbGF0ZTogdmllbmUgYXBlcnRvXHJcbiAqIHByb2dyYW1tYXRpY2FtZW50ZSB0cmFtaXRlIGBVaU1vZGFsU2VydmljZS5jb25maXJtKClgIGUgaSBzdW9pXHJcbiAqIG1ldG9kaSBzY29yY2lhdG9pYSAoYGNvbmZpcm1EZWxldGVgLCBgY29uZmlybURpc2NhcmRgLCBgY29uZmlybVNhdmVgKS5cclxuICpcclxuICogU3VwcG9ydGEgcXVhdHRybyB2YXJpYW50aSBzZW1hbnRpY2hlIOKAlCBjb25maXJtLCBkZWxldGUsIHdhcm4sIGluZm8g4oCUXHJcbiAqIGNpYXNjdW5hIGNvbiBpY29uYSBlIGNvbG9yZSBwcmVjb25maWd1cmF0aS5cclxuICpcclxuICogQHNlbGVjdG9yIHVpLWNvbmZpcm0tZGlhbG9nXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogLy8gQXBlcnR1cmEgdHJhbWl0ZSBzZXJ2aXppb1xyXG4gKiB0aGlzLm1vZGFsU2VydmljZS5jb25maXJtKHtcclxuICogICB0aXRsZTogJ0NvbmZlcm1hIGVsaW1pbmF6aW9uZScsXHJcbiAqICAgbWVzc2FnZTogJ1F1ZXN0YSBhemlvbmUgbm9uIHB1byBlc3NlcmUgYW5udWxsYXRhLicsXHJcbiAqICAgdmFyaWFudDogJ2RlbGV0ZScsXHJcbiAqIH0pLnN1YnNjcmliZShjb25maXJtZWQgPT4ge1xyXG4gKiAgIGlmIChjb25maXJtZWQpIHRoaXMuZGVsZXRlSXRlbSgpO1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLWNvbmZpcm0tZGlhbG9nJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtMdWNpZGVBbmd1bGFyTW9kdWxlLCBVaUJ1dHRvbkNvbXBvbmVudF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBob3N0OiB7XHJcbiAgICBjbGFzczogJ3VpLWNvbmZpcm0tZGlhbG9nLWhvc3QnLFxyXG4gICAgcm9sZTogJ2FsZXJ0ZGlhbG9nJyxcclxuICAgICdhcmlhLW1vZGFsJzogJ3RydWUnLFxyXG4gICAgJ1thdHRyLmFyaWEtbGFiZWxsZWRieV0nOiAnXCJ1aS1jb25maXJtLXRpdGxlXCInLFxyXG4gICAgJ1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ1widWktY29uZmlybS1tZXNzYWdlXCInLFxyXG4gIH0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJ1aS1jb25maXJtLWRpYWxvZ1wiPlxyXG4gICAgICA8IS0tIEljb25hIC0tPlxyXG4gICAgICA8ZGl2IFtjbGFzc109XCJpY29uQ2xhc3Nlc1wiPlxyXG4gICAgICAgIDxsdWNpZGUtaWNvbiBbbmFtZV09XCJpY29uTmFtZVwiIFtzaXplXT1cIjMyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIENvbnRlbnV0byAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInVpLWNvbmZpcm0tZGlhbG9nX19jb250ZW50XCI+XHJcbiAgICAgICAgQGlmIChkYXRhLnRpdGxlKSB7XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJ1aS1jb25maXJtLWRpYWxvZ19fdGl0bGVcIiBpZD1cInVpLWNvbmZpcm0tdGl0bGVcIj57eyBkYXRhLnRpdGxlIH19PC9oMz5cclxuICAgICAgICB9XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ1aS1jb25maXJtLWRpYWxvZ19fbWVzc2FnZVwiIGlkPVwidWktY29uZmlybS1tZXNzYWdlXCI+e3sgZGF0YS5tZXNzYWdlIH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQXppb25pIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidWktY29uZmlybS1kaWFsb2dfX2FjdGlvbnNcIj5cclxuICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICBbbGFiZWxdPVwiZGF0YS5jYW5jZWxUZXh0IHx8ICdBbm51bGxhJ1wiXHJcbiAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxyXG4gICAgICAgICAgc2l6ZT1cIm1kXCJcclxuICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICBbbGFiZWxdPVwiZGF0YS5jb25maXJtVGV4dCB8fCAnQ29uZmVybWEnXCJcclxuICAgICAgICAgIFt2YXJpYW50XT1cImNvbmZpcm1CdXR0b25WYXJpYW50XCJcclxuICAgICAgICAgIHNpemU9XCJtZFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY29uZmlybSgpXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVVcmw6ICcuL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpQ29uZmlybURpYWxvZ0NvbXBvbmVudCB7XHJcbiAgLyoqIEBpbnRlcm5hbCBEYXRpIGluaWV0dGF0aSBkYWwgc2Vydml6aW8gbW9kYWxlLiAqL1xyXG4gIHJlYWRvbmx5IGRhdGE6IFVpQ29uZmlybURpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKTtcclxuXHJcbiAgLyoqIEBpbnRlcm5hbCBSaWZlcmltZW50byBhbCBkaWFsb2dvIHBlciBsYSBjaGl1c3VyYS4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZiA9IGluamVjdChNYXREaWFsb2dSZWYpO1xyXG5cclxuICAvKiogVmFyaWFudGUgc2VtYW50aWNhIGNvcnJlbnRlLiAqL1xyXG4gIGdldCB2YXJpYW50KCk6IFVpQ29uZmlybVZhcmlhbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YS52YXJpYW50IHx8ICdjb25maXJtJztcclxuICB9XHJcblxyXG4gIC8qKiBOb21lIGljb25hIEx1Y2lkZSBkYSB2aXN1YWxpenphcmUuICovXHJcbiAgZ2V0IGljb25OYW1lKCk6IFVpSWNvbk5hbWUge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YS5pY29uIHx8IFZBUklBTlRfSUNPTl9NQVBbdGhpcy52YXJpYW50XTtcclxuICB9XHJcblxyXG4gIC8qKiBWYXJpYW50ZSBkZWwgcHVsc2FudGUgZGkgY29uZmVybWEuICovXHJcbiAgZ2V0IGNvbmZpcm1CdXR0b25WYXJpYW50KCk6IFVpVmFyaWFudCB7XHJcbiAgICByZXR1cm4gVkFSSUFOVF9CVVRUT05fTUFQW3RoaXMudmFyaWFudF07XHJcbiAgfVxyXG5cclxuICAvKiogQ2xhc3NpIENTUyBwZXIgaWwgY29udGVuaXRvcmUgaWNvbmEuICovXHJcbiAgZ2V0IGljb25DbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYHVpLWNvbmZpcm0tZGlhbG9nX19pY29uIHVpLWNvbmZpcm0tZGlhbG9nX19pY29uLS0ke3RoaXMudmFyaWFudH1gO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbmZlcm1hIGUgY2hpdWRlIGlsIGRpYWxvZ28gY29uIGB0cnVlYC4gKi9cclxuICBjb25maXJtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKiogQW5udWxsYSBlIGNoaXVkZSBpbCBkaWFsb2dvIGNvbiBgZmFsc2VgLiAqL1xyXG4gIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,4 @@
1
+ export { UiModalComponent } from './modal.component';
2
+ export { UiConfirmDialogComponent } from './confirm-dialog.component';
3
+ export { UiModalService } from './modal.service';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL21vZGFsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFVpTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCB7IFVpQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcclxuZXhwb3J0IHsgVWlNb2RhbFNlcnZpY2UgfSBmcm9tICcuL21vZGFsLnNlcnZpY2UnO1xyXG5leHBvcnQge1xyXG4gIFVpTW9kYWxDb25maWcsXHJcbiAgVWlNb2RhbE9wZW5Db25maWcsXHJcbiAgVWlNb2RhbFNpemUsXHJcbiAgVWlDb25maXJtRGlhbG9nRGF0YSxcclxuICBVaUNvbmZpcm1WYXJpYW50LFxyXG59IGZyb20gJy4vbW9kYWwudHlwZXMnO1xyXG4iXX0=