@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.
- package/accordion/entry-accordion.d.ts +4 -0
- package/accordion/index.d.ts +5 -0
- package/accordion/lib/components/accordion/accordion.component.d.ts +125 -0
- package/accordion/lib/components/accordion/accordion.types.d.ts +64 -0
- package/accordion/lib/components/accordion/index.d.ts +2 -0
- package/accordion/lib/core/types/index.d.ts +133 -0
- package/base-layout/entry-base-layout.d.ts +4 -0
- package/base-layout/index.d.ts +5 -0
- package/base-layout/lib/components/base-layout/base-layout.component.d.ts +108 -0
- package/base-layout/lib/components/base-layout/base-layout.types.d.ts +40 -0
- package/base-layout/lib/components/base-layout/index.d.ts +13 -0
- package/base-layout/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
- package/base-layout/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
- package/base-layout/lib/components/blackbox/blackbox.service.d.ts +144 -0
- package/base-layout/lib/components/blackbox/blackbox.types.d.ts +238 -0
- package/base-layout/lib/components/button/button-area.component.d.ts +93 -0
- package/base-layout/lib/components/button/button.component.d.ts +61 -0
- package/base-layout/lib/components/button/button.types.d.ts +75 -0
- package/base-layout/lib/components/page-header/breadcrumb.service.d.ts +96 -0
- package/base-layout/lib/components/page-header/page-header.component.d.ts +59 -0
- package/base-layout/lib/components/page-header/page-header.types.d.ts +96 -0
- package/base-layout/lib/core/types/index.d.ts +133 -0
- package/blackbox/entry-blackbox.d.ts +4 -0
- package/blackbox/index.d.ts +5 -0
- package/blackbox/lib/components/blackbox/blackbox-debugger.component.d.ts +80 -0
- package/blackbox/lib/components/blackbox/blackbox-debugger.service.d.ts +34 -0
- package/blackbox/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
- package/blackbox/lib/components/blackbox/blackbox-json-viewer.component.d.ts +18 -0
- package/blackbox/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
- package/blackbox/lib/components/blackbox/blackbox.interceptor.d.ts +38 -0
- package/blackbox/lib/components/blackbox/blackbox.service.d.ts +144 -0
- package/blackbox/lib/components/blackbox/blackbox.types.d.ts +238 -0
- package/blackbox/lib/components/blackbox/index.d.ts +23 -0
- package/blackbox/lib/components/blackbox/ui-track.directive.d.ts +20 -0
- package/blackbox/lib/components/button/button-area.component.d.ts +93 -0
- package/blackbox/lib/components/button/button.component.d.ts +61 -0
- package/blackbox/lib/components/button/button.types.d.ts +75 -0
- package/blackbox/lib/components/button/index.d.ts +15 -0
- package/blackbox/lib/components/modal/confirm-dialog.component.d.ts +46 -0
- package/blackbox/lib/components/modal/index.d.ts +4 -0
- package/blackbox/lib/components/modal/modal.component.d.ts +44 -0
- package/blackbox/lib/components/modal/modal.service.d.ts +93 -0
- package/blackbox/lib/components/modal/modal.types.d.ts +110 -0
- package/blackbox/lib/core/types/index.d.ts +133 -0
- package/button/entry-button.d.ts +4 -0
- package/button/index.d.ts +5 -0
- package/button/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
- package/button/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
- package/button/lib/components/blackbox/blackbox.service.d.ts +144 -0
- package/button/lib/components/blackbox/blackbox.types.d.ts +238 -0
- package/button/lib/components/button/button-area.component.d.ts +93 -0
- package/button/lib/components/button/button.component.d.ts +61 -0
- package/button/lib/components/button/button.types.d.ts +75 -0
- package/button/lib/components/button/index.d.ts +15 -0
- package/button/lib/core/types/index.d.ts +133 -0
- package/core/entry-core.d.ts +5 -0
- package/core/index.d.ts +5 -0
- package/core/lib/core/types/index.d.ts +133 -0
- package/core/lib/core/utils/index.d.ts +60 -0
- package/crud-table/entry-crud-table.d.ts +4 -0
- package/crud-table/index.d.ts +5 -0
- package/crud-table/lib/components/accordion/accordion.component.d.ts +125 -0
- package/crud-table/lib/components/accordion/accordion.types.d.ts +64 -0
- package/crud-table/lib/components/accordion/index.d.ts +2 -0
- package/crud-table/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
- package/crud-table/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
- package/crud-table/lib/components/blackbox/blackbox.service.d.ts +144 -0
- package/crud-table/lib/components/blackbox/blackbox.types.d.ts +238 -0
- package/crud-table/lib/components/button/button-area.component.d.ts +93 -0
- package/crud-table/lib/components/button/button.component.d.ts +61 -0
- package/crud-table/lib/components/button/button.types.d.ts +75 -0
- package/crud-table/lib/components/button/index.d.ts +15 -0
- package/crud-table/lib/components/crud-table/crud-table.component.d.ts +143 -0
- package/crud-table/lib/components/crud-table/crud-table.types.d.ts +207 -0
- package/crud-table/lib/components/crud-table/index.d.ts +15 -0
- package/crud-table/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
- package/crud-table/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
- package/crud-table/lib/components/form-builder/form-builder.component.d.ts +279 -0
- package/crud-table/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
- package/crud-table/lib/components/form-builder/services/form-error-state.matcher.d.ts +9 -0
- package/crud-table/lib/components/form-builder/services/form-field-error.service.d.ts +38 -0
- package/crud-table/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
- package/crud-table/lib/components/form-builder/services/location.service.d.ts +83 -0
- package/crud-table/lib/components/form-builder/services/nominatim-geocoding.service.d.ts +37 -0
- package/crud-table/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +31 -0
- package/crud-table/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
- package/crud-table/lib/components/form-builder/sub-components/form-fields/form-number-field.component.d.ts +42 -0
- package/crud-table/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.d.ts +45 -0
- package/crud-table/lib/components/form-builder/sub-components/form-fields/form-select-field.component.d.ts +44 -0
- package/crud-table/lib/components/form-builder/sub-components/form-fields/form-text-field.component.d.ts +62 -0
- package/crud-table/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.d.ts +39 -0
- package/crud-table/lib/components/form-builder/sub-components/form-fields/index.d.ts +5 -0
- package/crud-table/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.d.ts +84 -0
- package/crud-table/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
- package/crud-table/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
- package/crud-table/lib/components/form-builder/types/condition.types.d.ts +51 -0
- package/crud-table/lib/components/form-builder/types/field.types.d.ts +330 -0
- package/crud-table/lib/components/form-builder/types/geocoded-location.types.d.ts +116 -0
- package/crud-table/lib/components/form-builder/types/schema.types.d.ts +304 -0
- package/crud-table/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
- package/crud-table/lib/components/form-builder/types/validation.types.d.ts +179 -0
- package/crud-table/lib/components/modal/confirm-dialog.component.d.ts +46 -0
- package/crud-table/lib/components/modal/modal.service.d.ts +93 -0
- package/crud-table/lib/components/modal/modal.types.d.ts +110 -0
- package/crud-table/lib/core/logging/logger.config.d.ts +18 -0
- package/crud-table/lib/core/logging/logger.service.d.ts +75 -0
- package/crud-table/lib/core/logging/logger.types.d.ts +70 -0
- package/crud-table/lib/core/types/index.d.ts +133 -0
- package/esm2022/accordion/entry-accordion.mjs +5 -0
- package/esm2022/accordion/gnggln-ng-ui-system-accordion.mjs +5 -0
- package/esm2022/accordion/lib/components/accordion/accordion.component.mjs +398 -0
- package/esm2022/accordion/lib/components/accordion/accordion.types.mjs +6 -0
- package/esm2022/accordion/lib/components/accordion/index.mjs +2 -0
- package/esm2022/accordion/lib/core/types/index.mjs +6 -0
- package/esm2022/base-layout/entry-base-layout.mjs +5 -0
- package/esm2022/base-layout/gnggln-ng-ui-system-base-layout.mjs +5 -0
- package/esm2022/base-layout/lib/components/base-layout/base-layout.component.mjs +272 -0
- package/esm2022/base-layout/lib/components/base-layout/base-layout.types.mjs +6 -0
- package/esm2022/base-layout/lib/components/base-layout/index.mjs +14 -0
- package/esm2022/base-layout/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
- package/esm2022/base-layout/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
- package/esm2022/base-layout/lib/components/blackbox/blackbox.service.mjs +323 -0
- package/esm2022/base-layout/lib/components/blackbox/blackbox.types.mjs +25 -0
- package/esm2022/base-layout/lib/components/button/button-area.component.mjs +210 -0
- package/esm2022/base-layout/lib/components/button/button.component.mjs +180 -0
- package/esm2022/base-layout/lib/components/button/button.types.mjs +6 -0
- package/esm2022/base-layout/lib/components/page-header/breadcrumb.service.mjs +243 -0
- package/esm2022/base-layout/lib/components/page-header/page-header.component.mjs +243 -0
- package/esm2022/base-layout/lib/components/page-header/page-header.types.mjs +21 -0
- package/esm2022/base-layout/lib/core/types/index.mjs +6 -0
- package/esm2022/blackbox/entry-blackbox.mjs +5 -0
- package/esm2022/blackbox/gnggln-ng-ui-system-blackbox.mjs +5 -0
- package/esm2022/blackbox/lib/components/blackbox/blackbox-debugger.component.mjs +904 -0
- package/esm2022/blackbox/lib/components/blackbox/blackbox-debugger.service.mjs +51 -0
- package/esm2022/blackbox/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
- package/esm2022/blackbox/lib/components/blackbox/blackbox-json-viewer.component.mjs +66 -0
- package/esm2022/blackbox/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
- package/esm2022/blackbox/lib/components/blackbox/blackbox.interceptor.mjs +135 -0
- package/esm2022/blackbox/lib/components/blackbox/blackbox.service.mjs +323 -0
- package/esm2022/blackbox/lib/components/blackbox/blackbox.types.mjs +25 -0
- package/esm2022/blackbox/lib/components/blackbox/index.mjs +27 -0
- package/esm2022/blackbox/lib/components/blackbox/ui-track.directive.mjs +69 -0
- package/esm2022/blackbox/lib/components/button/button-area.component.mjs +210 -0
- package/esm2022/blackbox/lib/components/button/button.component.mjs +180 -0
- package/esm2022/blackbox/lib/components/button/button.types.mjs +6 -0
- package/esm2022/blackbox/lib/components/button/index.mjs +16 -0
- package/esm2022/blackbox/lib/components/modal/confirm-dialog.component.mjs +151 -0
- package/esm2022/blackbox/lib/components/modal/index.mjs +4 -0
- package/esm2022/blackbox/lib/components/modal/modal.component.mjs +139 -0
- package/esm2022/blackbox/lib/components/modal/modal.service.mjs +197 -0
- package/esm2022/blackbox/lib/components/modal/modal.types.mjs +6 -0
- package/esm2022/blackbox/lib/core/types/index.mjs +6 -0
- package/esm2022/button/entry-button.mjs +5 -0
- package/esm2022/button/gnggln-ng-ui-system-button.mjs +5 -0
- package/esm2022/button/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
- package/esm2022/button/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
- package/esm2022/button/lib/components/blackbox/blackbox.service.mjs +323 -0
- package/esm2022/button/lib/components/blackbox/blackbox.types.mjs +25 -0
- package/esm2022/button/lib/components/button/button-area.component.mjs +210 -0
- package/esm2022/button/lib/components/button/button.component.mjs +180 -0
- package/esm2022/button/lib/components/button/button.types.mjs +6 -0
- package/esm2022/button/lib/components/button/index.mjs +16 -0
- package/esm2022/button/lib/core/types/index.mjs +6 -0
- package/esm2022/core/entry-core.mjs +6 -0
- package/esm2022/core/gnggln-ng-ui-system-core.mjs +5 -0
- package/esm2022/core/lib/core/types/index.mjs +6 -0
- package/esm2022/core/lib/core/utils/index.mjs +102 -0
- package/esm2022/crud-table/entry-crud-table.mjs +5 -0
- package/esm2022/crud-table/gnggln-ng-ui-system-crud-table.mjs +5 -0
- package/esm2022/crud-table/lib/components/accordion/accordion.component.mjs +398 -0
- package/esm2022/crud-table/lib/components/accordion/accordion.types.mjs +6 -0
- package/esm2022/crud-table/lib/components/accordion/index.mjs +2 -0
- package/esm2022/crud-table/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
- package/esm2022/crud-table/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
- package/esm2022/crud-table/lib/components/blackbox/blackbox.service.mjs +323 -0
- package/esm2022/crud-table/lib/components/blackbox/blackbox.types.mjs +25 -0
- package/esm2022/crud-table/lib/components/button/button-area.component.mjs +210 -0
- package/esm2022/crud-table/lib/components/button/button.component.mjs +180 -0
- package/esm2022/crud-table/lib/components/button/button.types.mjs +6 -0
- package/esm2022/crud-table/lib/components/button/index.mjs +16 -0
- package/esm2022/crud-table/lib/components/crud-table/crud-table.component.mjs +789 -0
- package/esm2022/crud-table/lib/components/crud-table/crud-table.types.mjs +6 -0
- package/esm2022/crud-table/lib/components/crud-table/index.mjs +16 -0
- package/esm2022/crud-table/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
- package/esm2022/crud-table/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
- package/esm2022/crud-table/lib/components/form-builder/form-builder.component.mjs +1351 -0
- package/esm2022/crud-table/lib/components/form-builder/services/form-condition.service.mjs +132 -0
- package/esm2022/crud-table/lib/components/form-builder/services/form-error-state.matcher.mjs +10 -0
- package/esm2022/crud-table/lib/components/form-builder/services/form-field-error.service.mjs +103 -0
- package/esm2022/crud-table/lib/components/form-builder/services/form-validation.service.mjs +381 -0
- package/esm2022/crud-table/lib/components/form-builder/services/location.service.mjs +141 -0
- package/esm2022/crud-table/lib/components/form-builder/services/nominatim-geocoding.service.mjs +120 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +190 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +113 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +105 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +126 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-text-field.component.mjs +147 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.mjs +99 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/index.mjs +6 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.mjs +322 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
- package/esm2022/crud-table/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
- package/esm2022/crud-table/lib/components/form-builder/types/condition.types.mjs +6 -0
- package/esm2022/crud-table/lib/components/form-builder/types/field.types.mjs +6 -0
- package/esm2022/crud-table/lib/components/form-builder/types/geocoded-location.types.mjs +6 -0
- package/esm2022/crud-table/lib/components/form-builder/types/schema.types.mjs +6 -0
- package/esm2022/crud-table/lib/components/form-builder/types/territoriale.types.mjs +6 -0
- package/esm2022/crud-table/lib/components/form-builder/types/validation.types.mjs +10 -0
- package/esm2022/crud-table/lib/components/modal/confirm-dialog.component.mjs +151 -0
- package/esm2022/crud-table/lib/components/modal/modal.service.mjs +197 -0
- package/esm2022/crud-table/lib/components/modal/modal.types.mjs +6 -0
- package/esm2022/crud-table/lib/core/logging/logger.config.mjs +18 -0
- package/esm2022/crud-table/lib/core/logging/logger.service.mjs +295 -0
- package/esm2022/crud-table/lib/core/logging/logger.types.mjs +7 -0
- package/esm2022/crud-table/lib/core/types/index.mjs +6 -0
- package/esm2022/crud-table/lib/sources/location-data.opt.json +8942 -0
- package/esm2022/crud-table/lib/sources/nazioni.opt.json +215 -0
- package/esm2022/form-builder/entry-form-builder.mjs +5 -0
- package/esm2022/form-builder/gnggln-ng-ui-system-form-builder.mjs +5 -0
- package/esm2022/form-builder/lib/components/accordion/accordion.component.mjs +398 -0
- package/esm2022/form-builder/lib/components/accordion/accordion.types.mjs +6 -0
- package/esm2022/form-builder/lib/components/accordion/index.mjs +2 -0
- package/esm2022/form-builder/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
- package/esm2022/form-builder/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
- package/esm2022/form-builder/lib/components/blackbox/blackbox.service.mjs +323 -0
- package/esm2022/form-builder/lib/components/blackbox/blackbox.types.mjs +25 -0
- package/esm2022/form-builder/lib/components/button/button-area.component.mjs +210 -0
- package/esm2022/form-builder/lib/components/button/button.component.mjs +180 -0
- package/esm2022/form-builder/lib/components/button/button.types.mjs +6 -0
- package/esm2022/form-builder/lib/components/button/index.mjs +16 -0
- package/esm2022/form-builder/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
- package/esm2022/form-builder/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
- package/esm2022/form-builder/lib/components/form-builder/form-builder.component.mjs +1351 -0
- package/esm2022/form-builder/lib/components/form-builder/form-wizard.component.mjs +1064 -0
- package/esm2022/form-builder/lib/components/form-builder/index.mjs +24 -0
- package/esm2022/form-builder/lib/components/form-builder/services/form-condition.service.mjs +132 -0
- package/esm2022/form-builder/lib/components/form-builder/services/form-error-state.matcher.mjs +10 -0
- package/esm2022/form-builder/lib/components/form-builder/services/form-field-error.service.mjs +103 -0
- package/esm2022/form-builder/lib/components/form-builder/services/form-validation.service.mjs +381 -0
- package/esm2022/form-builder/lib/components/form-builder/services/location.service.mjs +141 -0
- package/esm2022/form-builder/lib/components/form-builder/services/nominatim-geocoding.service.mjs +120 -0
- package/esm2022/form-builder/lib/components/form-builder/services/wizard-sync.service.mjs +84 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +190 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +113 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +105 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +126 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-text-field.component.mjs +147 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.mjs +99 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/index.mjs +6 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.mjs +322 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
- package/esm2022/form-builder/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
- package/esm2022/form-builder/lib/components/form-builder/types/condition.types.mjs +6 -0
- package/esm2022/form-builder/lib/components/form-builder/types/field.types.mjs +6 -0
- package/esm2022/form-builder/lib/components/form-builder/types/geocoded-location.types.mjs +6 -0
- package/esm2022/form-builder/lib/components/form-builder/types/index.mjs +3 -0
- package/esm2022/form-builder/lib/components/form-builder/types/schema.types.mjs +6 -0
- package/esm2022/form-builder/lib/components/form-builder/types/territoriale.types.mjs +6 -0
- package/esm2022/form-builder/lib/components/form-builder/types/validation.types.mjs +10 -0
- package/esm2022/form-builder/lib/core/logging/logger.config.mjs +18 -0
- package/esm2022/form-builder/lib/core/logging/logger.service.mjs +295 -0
- package/esm2022/form-builder/lib/core/logging/logger.types.mjs +7 -0
- package/esm2022/form-builder/lib/core/types/index.mjs +6 -0
- package/esm2022/form-builder/lib/sources/location-data.opt.json +8942 -0
- package/esm2022/form-builder/lib/sources/nazioni.opt.json +215 -0
- package/esm2022/form-builder-editor/entry-form-builder-editor.mjs +5 -0
- package/esm2022/form-builder-editor/gnggln-ng-ui-system-form-builder-editor.mjs +5 -0
- package/esm2022/form-builder-editor/lib/components/accordion/accordion.component.mjs +398 -0
- package/esm2022/form-builder-editor/lib/components/accordion/accordion.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/accordion/index.mjs +2 -0
- package/esm2022/form-builder-editor/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
- package/esm2022/form-builder-editor/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
- package/esm2022/form-builder-editor/lib/components/blackbox/blackbox.service.mjs +323 -0
- package/esm2022/form-builder-editor/lib/components/blackbox/blackbox.types.mjs +25 -0
- package/esm2022/form-builder-editor/lib/components/button/button-area.component.mjs +210 -0
- package/esm2022/form-builder-editor/lib/components/button/button.component.mjs +180 -0
- package/esm2022/form-builder-editor/lib/components/button/button.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/button/index.mjs +16 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/adapters/it-date-adapter.mjs +82 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/directives/currency-input.directive.mjs +184 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/form-builder.component.mjs +1351 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/services/form-condition.service.mjs +132 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/services/form-error-state.matcher.mjs +10 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/services/form-field-error.service.mjs +103 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/services/form-validation.service.mjs +381 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/services/location.service.mjs +141 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/services/nominatim-geocoding.service.mjs +120 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +190 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/file-input/file-input.component.mjs +310 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +113 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +105 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +126 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-text-field.component.mjs +147 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.mjs +99 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/index.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.mjs +322 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.mjs +648 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +432 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/types/condition.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/types/field.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/types/geocoded-location.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/types/index.mjs +3 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/types/schema.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/types/territoriale.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/form-builder/types/validation.types.mjs +10 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/form-builder-editor.component.mjs +730 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/form-builder-editor.service.mjs +56 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/index.mjs +23 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/presets/editor-presets.mjs +395 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/services/editor-persistence.service.mjs +190 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/services/editor-state.service.mjs +324 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/services/field-factory.service.mjs +188 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.mjs +667 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.mjs +317 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.mjs +611 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.mjs +267 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.mjs +276 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.mjs +323 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +238 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +473 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.mjs +473 -0
- package/esm2022/form-builder-editor/lib/components/form-builder-editor/types/editor.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/components/modal/confirm-dialog.component.mjs +151 -0
- package/esm2022/form-builder-editor/lib/components/modal/index.mjs +4 -0
- package/esm2022/form-builder-editor/lib/components/modal/modal.component.mjs +139 -0
- package/esm2022/form-builder-editor/lib/components/modal/modal.service.mjs +197 -0
- package/esm2022/form-builder-editor/lib/components/modal/modal.types.mjs +6 -0
- package/esm2022/form-builder-editor/lib/core/logging/logger.config.mjs +18 -0
- package/esm2022/form-builder-editor/lib/core/logging/logger.service.mjs +295 -0
- package/esm2022/form-builder-editor/lib/core/logging/logger.types.mjs +7 -0
- package/esm2022/form-builder-editor/lib/core/types/index.mjs +6 -0
- package/esm2022/form-builder-editor/lib/sources/location-data.opt.json +8942 -0
- package/esm2022/form-builder-editor/lib/sources/nazioni.opt.json +215 -0
- package/esm2022/http/entry-http.mjs +5 -0
- package/esm2022/http/gnggln-ng-ui-system-http.mjs +5 -0
- package/esm2022/http/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
- package/esm2022/http/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
- package/esm2022/http/lib/components/blackbox/blackbox.service.mjs +323 -0
- package/esm2022/http/lib/components/blackbox/blackbox.types.mjs +25 -0
- package/esm2022/http/lib/components/http/http-message.handler.mjs +143 -0
- package/esm2022/http/lib/components/http/http.service.mjs +228 -0
- package/esm2022/http/lib/components/http/http.tokens.mjs +29 -0
- package/esm2022/http/lib/components/http/http.types.mjs +6 -0
- package/esm2022/http/lib/components/http/index.mjs +19 -0
- package/esm2022/http/lib/components/layout-builder/layout-builder.types.mjs +9 -0
- package/esm2022/http/lib/components/layout-builder/layout.service.mjs +239 -0
- package/esm2022/http/lib/components/toast/toast-container.component.mjs +80 -0
- package/esm2022/http/lib/components/toast/toast.component.mjs +151 -0
- package/esm2022/http/lib/components/toast/toast.service.mjs +156 -0
- package/esm2022/http/lib/components/toast/toast.types.mjs +12 -0
- package/esm2022/http/lib/core/types/index.mjs +6 -0
- package/esm2022/http/lib/core/utils/index.mjs +102 -0
- package/esm2022/layout-builder/entry-layout-builder.mjs +5 -0
- package/esm2022/layout-builder/gnggln-ng-ui-system-layout-builder.mjs +5 -0
- package/esm2022/layout-builder/lib/components/layout-builder/index.mjs +18 -0
- package/esm2022/layout-builder/lib/components/layout-builder/layout-builder.component.mjs +1804 -0
- package/esm2022/layout-builder/lib/components/layout-builder/layout-builder.types.mjs +9 -0
- package/esm2022/layout-builder/lib/components/layout-builder/layout.service.mjs +239 -0
- package/esm2022/layout-builder/lib/core/types/index.mjs +6 -0
- package/esm2022/lib/components/accordion/accordion.component.mjs +106 -61
- package/esm2022/lib/components/accordion/accordion.types.mjs +1 -1
- package/esm2022/lib/components/base-layout/base-layout.component.mjs +88 -34
- package/esm2022/lib/components/base-layout/base-layout.types.mjs +1 -1
- package/esm2022/lib/components/base-layout/index.mjs +1 -1
- package/esm2022/lib/components/blackbox/blackbox-debugger.component.mjs +904 -0
- package/esm2022/lib/components/blackbox/blackbox-debugger.service.mjs +51 -0
- package/esm2022/lib/components/blackbox/blackbox-fingerprint.service.mjs +116 -0
- package/esm2022/lib/components/blackbox/blackbox-json-viewer.component.mjs +66 -0
- package/esm2022/lib/components/blackbox/blackbox-storage.service.mjs +286 -0
- package/esm2022/lib/components/blackbox/blackbox.interceptor.mjs +135 -0
- package/esm2022/lib/components/blackbox/blackbox.service.mjs +323 -0
- package/esm2022/lib/components/blackbox/blackbox.types.mjs +25 -0
- package/esm2022/lib/components/blackbox/index.mjs +27 -0
- package/esm2022/lib/components/blackbox/ui-track.directive.mjs +69 -0
- package/esm2022/lib/components/button/button-area.component.mjs +16 -2
- package/esm2022/lib/components/button/button.component.mjs +23 -7
- package/esm2022/lib/components/button/button.types.mjs +1 -1
- package/esm2022/lib/components/crud-table/crud-table.component.mjs +14 -14
- package/esm2022/lib/components/form-builder/form-builder.component.mjs +710 -183
- package/esm2022/lib/components/form-builder/form-wizard.component.mjs +789 -235
- package/esm2022/lib/components/form-builder/index.mjs +7 -2
- package/esm2022/lib/components/form-builder/services/form-error-state.matcher.mjs +10 -0
- package/esm2022/lib/components/form-builder/services/form-field-error.service.mjs +103 -0
- package/esm2022/lib/components/form-builder/services/location.service.mjs +4 -3
- package/esm2022/lib/components/form-builder/services/nominatim-geocoding.service.mjs +120 -0
- package/esm2022/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.mjs +142 -113
- package/esm2022/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +113 -0
- package/esm2022/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +105 -0
- package/esm2022/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +126 -0
- package/esm2022/lib/components/form-builder/sub-components/form-fields/form-text-field.component.mjs +147 -0
- package/esm2022/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.mjs +99 -0
- package/esm2022/lib/components/form-builder/sub-components/form-fields/index.mjs +6 -0
- package/esm2022/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.mjs +322 -0
- package/esm2022/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.mjs +3 -3
- package/esm2022/lib/components/form-builder/types/field.types.mjs +1 -1
- package/esm2022/lib/components/form-builder/types/geocoded-location.types.mjs +6 -0
- package/esm2022/lib/components/form-builder/types/index.mjs +3 -2
- package/esm2022/lib/components/form-builder/types/schema.types.mjs +1 -1
- package/esm2022/lib/components/form-builder/types/validation.types.mjs +6 -2
- package/esm2022/lib/components/form-builder-editor/form-builder-editor.component.mjs +3 -3
- package/esm2022/lib/components/form-builder-editor/index.mjs +3 -1
- package/esm2022/lib/components/form-builder-editor/presets/editor-presets.mjs +395 -0
- package/esm2022/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.mjs +2 -2
- package/esm2022/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.mjs +2 -1
- package/esm2022/lib/components/http/http-message.handler.mjs +143 -0
- package/esm2022/lib/components/http/http.service.mjs +228 -0
- package/esm2022/lib/components/http/http.tokens.mjs +29 -0
- package/esm2022/lib/components/http/http.types.mjs +6 -0
- package/esm2022/lib/components/http/index.mjs +19 -0
- package/esm2022/lib/components/layout-builder/layout-builder.component.mjs +27 -15
- package/esm2022/lib/components/modal/confirm-dialog.component.mjs +3 -3
- package/esm2022/lib/components/modal/modal.service.mjs +5 -2
- package/esm2022/lib/components/page-header/breadcrumb.service.mjs +5 -4
- package/esm2022/lib/components/table/paginated-table.component.mjs +17 -3
- package/esm2022/lib/components/table/table.types.mjs +1 -1
- package/esm2022/lib/components/toast/index.mjs +18 -0
- package/esm2022/lib/components/toast/toast-container.component.mjs +80 -0
- package/esm2022/lib/components/toast/toast.component.mjs +151 -0
- package/esm2022/lib/components/toast/toast.service.mjs +156 -0
- package/esm2022/lib/components/toast/toast.types.mjs +12 -0
- package/esm2022/lib/core/logging/index.mjs +10 -0
- package/esm2022/lib/core/logging/logger.config.mjs +18 -0
- package/esm2022/lib/core/logging/logger.service.mjs +295 -0
- package/esm2022/lib/core/logging/logger.types.mjs +7 -0
- package/esm2022/lib/core/types/index.mjs +1 -1
- package/esm2022/lib/core/utils/index.mjs +50 -1
- package/esm2022/lib/version/ng-ui-system-version.mjs +12 -0
- package/esm2022/modal/entry-modal.mjs +5 -0
- package/esm2022/modal/gnggln-ng-ui-system-modal.mjs +5 -0
- package/esm2022/modal/lib/components/button/button.component.mjs +180 -0
- package/esm2022/modal/lib/components/button/button.types.mjs +6 -0
- package/esm2022/modal/lib/components/modal/confirm-dialog.component.mjs +151 -0
- package/esm2022/modal/lib/components/modal/index.mjs +4 -0
- package/esm2022/modal/lib/components/modal/modal.component.mjs +139 -0
- package/esm2022/modal/lib/components/modal/modal.service.mjs +197 -0
- package/esm2022/modal/lib/components/modal/modal.types.mjs +6 -0
- package/esm2022/modal/lib/core/types/index.mjs +6 -0
- package/esm2022/page-header/entry-page-header.mjs +5 -0
- package/esm2022/page-header/gnggln-ng-ui-system-page-header.mjs +5 -0
- package/esm2022/page-header/lib/components/page-header/breadcrumb.service.mjs +243 -0
- package/esm2022/page-header/lib/components/page-header/index.mjs +20 -0
- package/esm2022/page-header/lib/components/page-header/page-header.component.mjs +243 -0
- package/esm2022/page-header/lib/components/page-header/page-header.types.mjs +21 -0
- package/esm2022/public-api.mjs +17 -8
- package/esm2022/table/entry-table.mjs +5 -0
- package/esm2022/table/gnggln-ng-ui-system-table.mjs +5 -0
- package/esm2022/table/lib/components/table/index.mjs +2 -0
- package/esm2022/table/lib/components/table/paginated-table.component.mjs +421 -0
- package/esm2022/table/lib/components/table/table.types.mjs +6 -0
- package/esm2022/table/lib/core/utils/index.mjs +102 -0
- package/esm2022/toast/entry-toast.mjs +5 -0
- package/esm2022/toast/gnggln-ng-ui-system-toast.mjs +5 -0
- package/esm2022/toast/lib/components/toast/index.mjs +18 -0
- package/esm2022/toast/lib/components/toast/toast-container.component.mjs +80 -0
- package/esm2022/toast/lib/components/toast/toast.component.mjs +151 -0
- package/esm2022/toast/lib/components/toast/toast.service.mjs +156 -0
- package/esm2022/toast/lib/components/toast/toast.types.mjs +12 -0
- package/esm2022/toast/lib/core/types/index.mjs +6 -0
- package/esm2022/toast/lib/core/utils/index.mjs +102 -0
- package/fesm2022/gnggln-ng-ui-system-accordion.mjs +409 -0
- package/fesm2022/gnggln-ng-ui-system-accordion.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-base-layout.mjs +1905 -0
- package/fesm2022/gnggln-ng-ui-system-base-layout.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-blackbox.mjs +2829 -0
- package/fesm2022/gnggln-ng-ui-system-blackbox.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-button.mjs +1148 -0
- package/fesm2022/gnggln-ng-ui-system-button.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-core.mjs +117 -0
- package/fesm2022/gnggln-ng-ui-system-core.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-crud-table.mjs +49600 -0
- package/fesm2022/gnggln-ng-ui-system-crud-table.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-form-builder-editor.mjs +54332 -0
- package/fesm2022/gnggln-ng-ui-system-form-builder-editor.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-form-builder.mjs +49609 -0
- package/fesm2022/gnggln-ng-ui-system-form-builder.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-http.mjs +1878 -0
- package/fesm2022/gnggln-ng-ui-system-http.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-layout-builder.mjs +2064 -0
- package/fesm2022/gnggln-ng-ui-system-layout-builder.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-modal.mjs +664 -0
- package/fesm2022/gnggln-ng-ui-system-modal.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-page-header.mjs +526 -0
- package/fesm2022/gnggln-ng-ui-system-page-header.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-table.mjs +533 -0
- package/fesm2022/gnggln-ng-ui-system-table.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system-toast.mjs +516 -0
- package/fesm2022/gnggln-ng-ui-system-toast.mjs.map +1 -0
- package/fesm2022/gnggln-ng-ui-system.mjs +10068 -4234
- package/fesm2022/gnggln-ng-ui-system.mjs.map +1 -1
- package/form-builder/entry-form-builder.d.ts +4 -0
- package/form-builder/index.d.ts +5 -0
- package/form-builder/lib/components/accordion/accordion.component.d.ts +125 -0
- package/form-builder/lib/components/accordion/accordion.types.d.ts +64 -0
- package/form-builder/lib/components/accordion/index.d.ts +2 -0
- package/form-builder/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
- package/form-builder/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
- package/form-builder/lib/components/blackbox/blackbox.service.d.ts +144 -0
- package/form-builder/lib/components/blackbox/blackbox.types.d.ts +238 -0
- package/form-builder/lib/components/button/button-area.component.d.ts +93 -0
- package/form-builder/lib/components/button/button.component.d.ts +61 -0
- package/form-builder/lib/components/button/button.types.d.ts +75 -0
- package/form-builder/lib/components/button/index.d.ts +15 -0
- package/form-builder/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
- package/form-builder/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
- package/form-builder/lib/components/form-builder/form-builder.component.d.ts +279 -0
- package/form-builder/lib/components/form-builder/form-wizard.component.d.ts +172 -0
- package/form-builder/lib/components/form-builder/index.d.ts +19 -0
- package/form-builder/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
- package/form-builder/lib/components/form-builder/services/form-error-state.matcher.d.ts +9 -0
- package/form-builder/lib/components/form-builder/services/form-field-error.service.d.ts +38 -0
- package/form-builder/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
- package/form-builder/lib/components/form-builder/services/location.service.d.ts +83 -0
- package/form-builder/lib/components/form-builder/services/nominatim-geocoding.service.d.ts +37 -0
- package/form-builder/lib/components/form-builder/services/wizard-sync.service.d.ts +63 -0
- package/form-builder/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +31 -0
- package/form-builder/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
- package/form-builder/lib/components/form-builder/sub-components/form-fields/form-number-field.component.d.ts +42 -0
- package/form-builder/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.d.ts +45 -0
- package/form-builder/lib/components/form-builder/sub-components/form-fields/form-select-field.component.d.ts +44 -0
- package/form-builder/lib/components/form-builder/sub-components/form-fields/form-text-field.component.d.ts +62 -0
- package/form-builder/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.d.ts +39 -0
- package/form-builder/lib/components/form-builder/sub-components/form-fields/index.d.ts +5 -0
- package/form-builder/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.d.ts +84 -0
- package/form-builder/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
- package/form-builder/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
- package/form-builder/lib/components/form-builder/types/condition.types.d.ts +51 -0
- package/form-builder/lib/components/form-builder/types/field.types.d.ts +330 -0
- package/form-builder/lib/components/form-builder/types/geocoded-location.types.d.ts +116 -0
- package/form-builder/lib/components/form-builder/types/index.d.ts +6 -0
- package/form-builder/lib/components/form-builder/types/schema.types.d.ts +304 -0
- package/form-builder/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
- package/form-builder/lib/components/form-builder/types/validation.types.d.ts +179 -0
- package/form-builder/lib/core/logging/logger.config.d.ts +18 -0
- package/form-builder/lib/core/logging/logger.service.d.ts +75 -0
- package/form-builder/lib/core/logging/logger.types.d.ts +70 -0
- package/form-builder/lib/core/types/index.d.ts +133 -0
- package/form-builder-editor/entry-form-builder-editor.d.ts +4 -0
- package/form-builder-editor/index.d.ts +5 -0
- package/form-builder-editor/lib/components/accordion/accordion.component.d.ts +125 -0
- package/form-builder-editor/lib/components/accordion/accordion.types.d.ts +64 -0
- package/form-builder-editor/lib/components/accordion/index.d.ts +2 -0
- package/form-builder-editor/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
- package/form-builder-editor/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
- package/form-builder-editor/lib/components/blackbox/blackbox.service.d.ts +144 -0
- package/form-builder-editor/lib/components/blackbox/blackbox.types.d.ts +238 -0
- package/form-builder-editor/lib/components/button/button-area.component.d.ts +93 -0
- package/form-builder-editor/lib/components/button/button.component.d.ts +61 -0
- package/form-builder-editor/lib/components/button/button.types.d.ts +75 -0
- package/form-builder-editor/lib/components/button/index.d.ts +15 -0
- package/form-builder-editor/lib/components/form-builder/adapters/it-date-adapter.d.ts +32 -0
- package/form-builder-editor/lib/components/form-builder/directives/currency-input.directive.d.ts +48 -0
- package/form-builder-editor/lib/components/form-builder/form-builder.component.d.ts +279 -0
- package/form-builder-editor/lib/components/form-builder/services/form-condition.service.d.ts +46 -0
- package/form-builder-editor/lib/components/form-builder/services/form-error-state.matcher.d.ts +9 -0
- package/form-builder-editor/lib/components/form-builder/services/form-field-error.service.d.ts +38 -0
- package/form-builder-editor/lib/components/form-builder/services/form-validation.service.d.ts +63 -0
- package/form-builder-editor/lib/components/form-builder/services/location.service.d.ts +83 -0
- package/form-builder-editor/lib/components/form-builder/services/nominatim-geocoding.service.d.ts +37 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +31 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/file-input/file-input.component.d.ts +41 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-number-field.component.d.ts +42 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.d.ts +45 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-select-field.component.d.ts +44 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-text-field.component.d.ts +62 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.d.ts +39 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/form-fields/index.d.ts +5 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.d.ts +84 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/specifica-territoriale/specifica-territoriale.component.d.ts +145 -0
- package/form-builder-editor/lib/components/form-builder/sub-components/table-territoriale/table-territoriale.component.d.ts +108 -0
- package/form-builder-editor/lib/components/form-builder/types/condition.types.d.ts +51 -0
- package/form-builder-editor/lib/components/form-builder/types/field.types.d.ts +330 -0
- package/form-builder-editor/lib/components/form-builder/types/geocoded-location.types.d.ts +116 -0
- package/form-builder-editor/lib/components/form-builder/types/index.d.ts +6 -0
- package/form-builder-editor/lib/components/form-builder/types/schema.types.d.ts +304 -0
- package/form-builder-editor/lib/components/form-builder/types/territoriale.types.d.ts +170 -0
- package/form-builder-editor/lib/components/form-builder/types/validation.types.d.ts +179 -0
- package/form-builder-editor/lib/components/form-builder-editor/form-builder-editor.component.d.ts +117 -0
- package/form-builder-editor/lib/components/form-builder-editor/form-builder-editor.service.d.ts +38 -0
- package/form-builder-editor/lib/components/form-builder-editor/index.d.ts +17 -0
- package/form-builder-editor/lib/components/form-builder-editor/presets/editor-presets.d.ts +25 -0
- package/form-builder-editor/lib/components/form-builder-editor/services/editor-persistence.service.d.ts +42 -0
- package/form-builder-editor/lib/components/form-builder-editor/services/editor-state.service.d.ts +66 -0
- package/form-builder-editor/lib/components/form-builder-editor/services/field-factory.service.d.ts +28 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/condition-editor/condition-editor.component.d.ts +139 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/editor-toolbar/editor-toolbar.component.d.ts +43 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/field-config-panel/field-config-panel.component.d.ts +83 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/field-palette/field-palette.component.d.ts +40 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/form-values-panel/form-values-panel.component.d.ts +51 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/options-editor/options-editor.component.d.ts +63 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/preview-container/preview-container.component.d.ts +68 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/section-editor/section-editor.component.d.ts +82 -0
- package/form-builder-editor/lib/components/form-builder-editor/sub-components/validation-editor/validation-editor.component.d.ts +112 -0
- package/form-builder-editor/lib/components/form-builder-editor/types/editor.types.d.ts +124 -0
- package/form-builder-editor/lib/components/modal/confirm-dialog.component.d.ts +46 -0
- package/form-builder-editor/lib/components/modal/index.d.ts +4 -0
- package/form-builder-editor/lib/components/modal/modal.component.d.ts +44 -0
- package/form-builder-editor/lib/components/modal/modal.service.d.ts +93 -0
- package/form-builder-editor/lib/components/modal/modal.types.d.ts +110 -0
- package/form-builder-editor/lib/core/logging/logger.config.d.ts +18 -0
- package/form-builder-editor/lib/core/logging/logger.service.d.ts +75 -0
- package/form-builder-editor/lib/core/logging/logger.types.d.ts +70 -0
- package/form-builder-editor/lib/core/types/index.d.ts +133 -0
- package/http/entry-http.d.ts +4 -0
- package/http/index.d.ts +5 -0
- package/http/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
- package/http/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
- package/http/lib/components/blackbox/blackbox.service.d.ts +144 -0
- package/http/lib/components/blackbox/blackbox.types.d.ts +238 -0
- package/http/lib/components/http/http-message.handler.d.ts +59 -0
- package/http/lib/components/http/http.service.d.ts +98 -0
- package/http/lib/components/http/http.tokens.d.ts +29 -0
- package/http/lib/components/http/http.types.d.ts +50 -0
- package/http/lib/components/http/index.d.ts +17 -0
- package/http/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
- package/http/lib/components/layout-builder/layout.service.d.ts +100 -0
- package/http/lib/components/toast/toast-container.component.d.ts +27 -0
- package/http/lib/components/toast/toast.component.d.ts +37 -0
- package/http/lib/components/toast/toast.service.d.ts +39 -0
- package/http/lib/components/toast/toast.types.d.ts +52 -0
- package/http/lib/core/types/index.d.ts +133 -0
- package/http/lib/core/utils/index.d.ts +60 -0
- package/layout-builder/entry-layout-builder.d.ts +4 -0
- package/layout-builder/index.d.ts +5 -0
- package/layout-builder/lib/components/layout-builder/index.d.ts +16 -0
- package/layout-builder/lib/components/layout-builder/layout-builder.component.d.ts +85 -0
- package/layout-builder/lib/components/layout-builder/layout-builder.types.d.ts +436 -0
- package/layout-builder/lib/components/layout-builder/layout.service.d.ts +100 -0
- package/layout-builder/lib/core/types/index.d.ts +133 -0
- package/lib/components/accordion/accordion.component.d.ts +10 -3
- package/lib/components/accordion/accordion.types.d.ts +2 -0
- package/lib/components/base-layout/base-layout.component.d.ts +36 -11
- package/lib/components/base-layout/base-layout.types.d.ts +14 -0
- package/lib/components/base-layout/index.d.ts +1 -1
- package/lib/components/blackbox/blackbox-debugger.component.d.ts +80 -0
- package/lib/components/blackbox/blackbox-debugger.service.d.ts +34 -0
- package/lib/components/blackbox/blackbox-fingerprint.service.d.ts +36 -0
- package/lib/components/blackbox/blackbox-json-viewer.component.d.ts +18 -0
- package/lib/components/blackbox/blackbox-storage.service.d.ts +55 -0
- package/lib/components/blackbox/blackbox.interceptor.d.ts +38 -0
- package/lib/components/blackbox/blackbox.service.d.ts +144 -0
- package/lib/components/blackbox/blackbox.types.d.ts +238 -0
- package/lib/components/blackbox/index.d.ts +23 -0
- package/lib/components/blackbox/ui-track.directive.d.ts +20 -0
- package/lib/components/button/button-area.component.d.ts +6 -1
- package/lib/components/button/button.component.d.ts +8 -2
- package/lib/components/button/button.types.d.ts +5 -0
- package/lib/components/form-builder/form-builder.component.d.ts +125 -29
- package/lib/components/form-builder/form-wizard.component.d.ts +89 -4
- package/lib/components/form-builder/index.d.ts +7 -1
- package/lib/components/form-builder/services/form-error-state.matcher.d.ts +9 -0
- package/lib/components/form-builder/services/form-field-error.service.d.ts +38 -0
- package/lib/components/form-builder/services/nominatim-geocoding.service.d.ts +37 -0
- package/lib/components/form-builder/sub-components/error-summary/form-error-summary.component.d.ts +9 -6
- package/lib/components/form-builder/sub-components/form-fields/form-number-field.component.d.ts +42 -0
- package/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.d.ts +45 -0
- package/lib/components/form-builder/sub-components/form-fields/form-select-field.component.d.ts +44 -0
- package/lib/components/form-builder/sub-components/form-fields/form-text-field.component.d.ts +62 -0
- package/lib/components/form-builder/sub-components/form-fields/form-textarea-field.component.d.ts +39 -0
- package/lib/components/form-builder/sub-components/form-fields/index.d.ts +5 -0
- package/lib/components/form-builder/sub-components/location-geocoded/location-geocoded.component.d.ts +84 -0
- package/lib/components/form-builder/types/field.types.d.ts +48 -6
- package/lib/components/form-builder/types/geocoded-location.types.d.ts +116 -0
- package/lib/components/form-builder/types/index.d.ts +4 -3
- package/lib/components/form-builder/types/schema.types.d.ts +83 -6
- package/lib/components/form-builder/types/validation.types.d.ts +5 -0
- package/lib/components/form-builder-editor/index.d.ts +2 -0
- package/lib/components/form-builder-editor/presets/editor-presets.d.ts +25 -0
- package/lib/components/http/http-message.handler.d.ts +59 -0
- package/lib/components/http/http.service.d.ts +98 -0
- package/lib/components/http/http.tokens.d.ts +29 -0
- package/lib/components/http/http.types.d.ts +50 -0
- package/lib/components/http/index.d.ts +17 -0
- package/lib/components/page-header/breadcrumb.service.d.ts +2 -2
- package/lib/components/table/table.types.d.ts +5 -0
- package/lib/components/toast/index.d.ts +17 -0
- package/lib/components/toast/toast-container.component.d.ts +27 -0
- package/lib/components/toast/toast.component.d.ts +37 -0
- package/lib/components/toast/toast.service.d.ts +39 -0
- package/lib/components/toast/toast.types.d.ts +52 -0
- package/lib/core/logging/index.d.ts +8 -0
- package/lib/core/logging/logger.config.d.ts +18 -0
- package/lib/core/logging/logger.service.d.ts +75 -0
- package/lib/core/logging/logger.types.d.ts +70 -0
- package/lib/core/types/index.d.ts +76 -0
- package/lib/core/utils/index.d.ts +31 -0
- package/lib/version/ng-ui-system-version.d.ts +9 -0
- package/modal/entry-modal.d.ts +4 -0
- package/modal/index.d.ts +5 -0
- package/modal/lib/components/button/button.component.d.ts +61 -0
- package/modal/lib/components/button/button.types.d.ts +75 -0
- package/modal/lib/components/modal/confirm-dialog.component.d.ts +46 -0
- package/modal/lib/components/modal/index.d.ts +4 -0
- package/modal/lib/components/modal/modal.component.d.ts +44 -0
- package/modal/lib/components/modal/modal.service.d.ts +93 -0
- package/modal/lib/components/modal/modal.types.d.ts +110 -0
- package/modal/lib/core/types/index.d.ts +133 -0
- package/package.json +93 -8
- package/page-header/entry-page-header.d.ts +4 -0
- package/page-header/index.d.ts +5 -0
- package/page-header/lib/components/page-header/breadcrumb.service.d.ts +96 -0
- package/page-header/lib/components/page-header/index.d.ts +16 -0
- package/page-header/lib/components/page-header/page-header.component.d.ts +59 -0
- package/page-header/lib/components/page-header/page-header.types.d.ts +96 -0
- package/public-api.d.ts +11 -6
- package/table/entry-table.d.ts +4 -0
- package/table/index.d.ts +5 -0
- package/table/lib/components/table/index.d.ts +2 -0
- package/table/lib/components/table/paginated-table.component.d.ts +85 -0
- package/table/lib/components/table/table.types.d.ts +86 -0
- package/table/lib/core/utils/index.d.ts +60 -0
- package/toast/entry-toast.d.ts +4 -0
- package/toast/index.d.ts +5 -0
- package/toast/lib/components/toast/index.d.ts +17 -0
- package/toast/lib/components/toast/toast-container.component.d.ts +27 -0
- package/toast/lib/components/toast/toast.component.d.ts +37 -0
- package/toast/lib/components/toast/toast.service.d.ts +39 -0
- package/toast/lib/components/toast/toast.types.d.ts +52 -0
- package/toast/lib/core/types/index.d.ts +133 -0
- package/toast/lib/core/utils/index.d.ts +60 -0
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ng-ui-system/blackbox
|
|
3
|
+
* Core BlackBox observability service — the main entry point for session
|
|
4
|
+
* recording, event buffering, and export.
|
|
5
|
+
*
|
|
6
|
+
* Architecture:
|
|
7
|
+
* - Root singleton (`providedIn: 'root'`)
|
|
8
|
+
* - On first inject: generates fingerprint, creates session, subscribes to Router events
|
|
9
|
+
* - Centralised in-memory buffer with periodic/threshold-based flush to IndexedDB
|
|
10
|
+
* - `window:beforeunload` triggers a final best-effort async flush
|
|
11
|
+
*/
|
|
12
|
+
import { Injectable, inject, PLATFORM_ID, NgZone, } from '@angular/core';
|
|
13
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
14
|
+
import { Router, NavigationEnd } from '@angular/router';
|
|
15
|
+
import { Subject } from 'rxjs';
|
|
16
|
+
import { filter, takeUntil } from 'rxjs/operators';
|
|
17
|
+
import { UI_BLACKBOX_DEFAULTS, } from './blackbox.types';
|
|
18
|
+
import { UiBlackboxFingerprintService } from './blackbox-fingerprint.service';
|
|
19
|
+
import { UiBlackboxStorageService } from './blackbox-storage.service';
|
|
20
|
+
import * as i0 from "@angular/core";
|
|
21
|
+
/**
|
|
22
|
+
* Central BlackBox observability service.
|
|
23
|
+
*
|
|
24
|
+
* Records navigation, UI interactions, form events, and HTTP calls
|
|
25
|
+
* into compressed sessions stored in IndexedDB.
|
|
26
|
+
*
|
|
27
|
+
* @usageNotes
|
|
28
|
+
* The service activates automatically when injected. Provide it at root level
|
|
29
|
+
* and it will start recording immediately.
|
|
30
|
+
*
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // app.config.ts — just importing the service is enough
|
|
33
|
+
* import { UiBlackboxService } from '@gnggln/ng-ui-system';
|
|
34
|
+
*
|
|
35
|
+
* export const appConfig: ApplicationConfig = {
|
|
36
|
+
* providers: [
|
|
37
|
+
* // The service is providedIn: 'root', so it's auto-provided.
|
|
38
|
+
* // To force eager initialisation:
|
|
39
|
+
* { provide: APP_INITIALIZER, useFactory: () => () => inject(UiBlackboxService), multi: true },
|
|
40
|
+
* ],
|
|
41
|
+
* };
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class UiBlackboxService {
|
|
45
|
+
constructor() {
|
|
46
|
+
this.platformId = inject(PLATFORM_ID);
|
|
47
|
+
this.router = inject(Router);
|
|
48
|
+
this.zone = inject(NgZone);
|
|
49
|
+
this.fingerprint = inject(UiBlackboxFingerprintService);
|
|
50
|
+
this.storage = inject(UiBlackboxStorageService);
|
|
51
|
+
this.destroy$ = new Subject();
|
|
52
|
+
this.config = { ...UI_BLACKBOX_DEFAULTS };
|
|
53
|
+
this.currentStep = null;
|
|
54
|
+
this.initialised = false;
|
|
55
|
+
// ─── Centralised event buffer ──────────────────────────────────────
|
|
56
|
+
this.buffer = [];
|
|
57
|
+
this.flushTimerId = null;
|
|
58
|
+
this.beforeUnloadHandler = null;
|
|
59
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
60
|
+
this.init();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// ─── Initialisation ────────────────────────────────────────────────
|
|
64
|
+
async init() {
|
|
65
|
+
// Generate session ID
|
|
66
|
+
const sessionId = this.generateUuid();
|
|
67
|
+
const fp = await this.fingerprint.getFingerprint();
|
|
68
|
+
this.session = {
|
|
69
|
+
sessionId,
|
|
70
|
+
fingerprint: fp,
|
|
71
|
+
startedAt: Date.now(),
|
|
72
|
+
userAgent: navigator.userAgent,
|
|
73
|
+
steps: [],
|
|
74
|
+
formEvents: [],
|
|
75
|
+
calls: [],
|
|
76
|
+
};
|
|
77
|
+
// Create initial step from current URL
|
|
78
|
+
this.currentStep = {
|
|
79
|
+
timestamp: Date.now(),
|
|
80
|
+
route: this.router.url,
|
|
81
|
+
actions: [],
|
|
82
|
+
};
|
|
83
|
+
this.session.steps.push(this.currentStep);
|
|
84
|
+
// Subscribe to router navigation
|
|
85
|
+
this.router.events
|
|
86
|
+
.pipe(filter((e) => e instanceof NavigationEnd), takeUntil(this.destroy$))
|
|
87
|
+
.subscribe((event) => {
|
|
88
|
+
const previousRoute = this.currentStep?.route;
|
|
89
|
+
this.currentStep = {
|
|
90
|
+
timestamp: Date.now(),
|
|
91
|
+
route: event.urlAfterRedirects,
|
|
92
|
+
previousRoute,
|
|
93
|
+
actions: [],
|
|
94
|
+
};
|
|
95
|
+
this.pushBufferEvent({ kind: 'step', payload: this.currentStep });
|
|
96
|
+
});
|
|
97
|
+
// Setup periodic flush (outside Angular zone to avoid triggering CD)
|
|
98
|
+
this.zone.runOutsideAngular(() => {
|
|
99
|
+
this.flushTimerId = setInterval(() => this.flush(), this.config.flushIntervalMs);
|
|
100
|
+
// Best-effort flush on tab close (IndexedDB is async, no sync fallback)
|
|
101
|
+
this.beforeUnloadHandler = () => {
|
|
102
|
+
this.session.endedAt = Date.now();
|
|
103
|
+
void this.flush();
|
|
104
|
+
};
|
|
105
|
+
window.addEventListener('beforeunload', this.beforeUnloadHandler);
|
|
106
|
+
});
|
|
107
|
+
this.initialised = true;
|
|
108
|
+
}
|
|
109
|
+
// ─── Public API: Configuration ─────────────────────────────────────
|
|
110
|
+
/**
|
|
111
|
+
* Update the BlackBox configuration.
|
|
112
|
+
* Can be called at any time; changes take effect immediately.
|
|
113
|
+
*/
|
|
114
|
+
configure(config) {
|
|
115
|
+
this.config = {
|
|
116
|
+
...this.config,
|
|
117
|
+
...config,
|
|
118
|
+
formTracking: {
|
|
119
|
+
...this.config.formTracking,
|
|
120
|
+
...(config.formTracking ?? {}),
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
this.storage.setMaxStorageMb(this.config.maxStorageMb);
|
|
124
|
+
// Restart flush timer with new interval
|
|
125
|
+
if (this.flushTimerId !== null) {
|
|
126
|
+
clearInterval(this.flushTimerId);
|
|
127
|
+
this.zone.runOutsideAngular(() => {
|
|
128
|
+
this.flushTimerId = setInterval(() => this.flush(), this.config.flushIntervalMs);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** Returns the current configuration (readonly snapshot). */
|
|
133
|
+
getConfig() {
|
|
134
|
+
return { ...this.config };
|
|
135
|
+
}
|
|
136
|
+
// ─── Public API: Tracking ──────────────────────────────────────────
|
|
137
|
+
/**
|
|
138
|
+
* Manually track a UI action (click).
|
|
139
|
+
*
|
|
140
|
+
* Called automatically by `UiButtonAreaComponent` and the `[uiTrack]` directive.
|
|
141
|
+
* Can also be called programmatically for custom interactions.
|
|
142
|
+
*
|
|
143
|
+
* @param trackId - Identifier for the action (e.g. button id, link name).
|
|
144
|
+
* @param meta - Optional metadata: `tag`, `text`, `id` of the element.
|
|
145
|
+
*/
|
|
146
|
+
trackAction(trackId, meta) {
|
|
147
|
+
if (!this.initialised)
|
|
148
|
+
return;
|
|
149
|
+
const action = {
|
|
150
|
+
timestamp: Date.now(),
|
|
151
|
+
type: 'click',
|
|
152
|
+
target: {
|
|
153
|
+
tag: meta?.tag ?? 'unknown',
|
|
154
|
+
id: meta?.id,
|
|
155
|
+
trackId,
|
|
156
|
+
text: meta?.text?.substring(0, 50),
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
// Add to current step immediately (for in-memory session access)
|
|
160
|
+
this.currentStep?.actions.push(action);
|
|
161
|
+
// Also push to buffer for persistence
|
|
162
|
+
this.pushBufferEvent({
|
|
163
|
+
kind: 'action',
|
|
164
|
+
payload: { ...action, route: this.currentStep?.route ?? this.router.url },
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Track a form interaction event.
|
|
169
|
+
*
|
|
170
|
+
* Called automatically by `UiFormBuilderComponent` when the BlackBox
|
|
171
|
+
* service is available.
|
|
172
|
+
*/
|
|
173
|
+
trackFormEvent(event) {
|
|
174
|
+
if (!this.initialised)
|
|
175
|
+
return;
|
|
176
|
+
this.session.formEvents.push(event);
|
|
177
|
+
this.pushBufferEvent({ kind: 'formEvent', payload: event });
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Track an intercepted HTTP call.
|
|
181
|
+
* Called by `UiBlackboxInterceptor`.
|
|
182
|
+
* @internal
|
|
183
|
+
*/
|
|
184
|
+
trackHttpCall(call) {
|
|
185
|
+
if (!this.initialised)
|
|
186
|
+
return;
|
|
187
|
+
this.session.calls.push(call);
|
|
188
|
+
this.pushBufferEvent({ kind: 'httpCall', payload: call });
|
|
189
|
+
}
|
|
190
|
+
// ─── Public API: Session access ────────────────────────────────────
|
|
191
|
+
/**
|
|
192
|
+
* Returns the current in-memory session (live, not yet flushed).
|
|
193
|
+
* Useful for debugging or real-time inspection.
|
|
194
|
+
*/
|
|
195
|
+
getCurrentSession() {
|
|
196
|
+
return this.session;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Retrieve all sessions stored in IndexedDB (decompressed).
|
|
200
|
+
*/
|
|
201
|
+
async getSessionHistory() {
|
|
202
|
+
return this.storage.getAllSessions();
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Retrieve sessions for the current device fingerprint.
|
|
206
|
+
*/
|
|
207
|
+
async getSessionsForDevice() {
|
|
208
|
+
const fp = await this.fingerprint.getFingerprint();
|
|
209
|
+
return this.storage.getSessionsByFingerprint(fp);
|
|
210
|
+
}
|
|
211
|
+
// ─── Public API: Export ────────────────────────────────────────────
|
|
212
|
+
/**
|
|
213
|
+
* Export all sessions as a downloadable JSONL Blob.
|
|
214
|
+
*
|
|
215
|
+
* @returns A Blob containing JSONL data (one session per line).
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* ```typescript
|
|
219
|
+
* const blob = await blackbox.exportSessions();
|
|
220
|
+
* const url = URL.createObjectURL(blob);
|
|
221
|
+
* const a = document.createElement('a');
|
|
222
|
+
* a.href = url;
|
|
223
|
+
* a.download = 'blackbox-sessions.jsonl';
|
|
224
|
+
* a.click();
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
async exportSessions() {
|
|
228
|
+
// Flush current session first
|
|
229
|
+
await this.flush();
|
|
230
|
+
return this.storage.exportDump();
|
|
231
|
+
}
|
|
232
|
+
// ─── Public API: Lifecycle ─────────────────────────────────────────
|
|
233
|
+
/**
|
|
234
|
+
* Explicitly end the current session.
|
|
235
|
+
* Flushes all buffered events and marks the session as ended.
|
|
236
|
+
*/
|
|
237
|
+
async endSession() {
|
|
238
|
+
if (!this.initialised)
|
|
239
|
+
return;
|
|
240
|
+
this.session.endedAt = Date.now();
|
|
241
|
+
await this.flush();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Clear all stored sessions from IndexedDB.
|
|
245
|
+
*/
|
|
246
|
+
async clearHistory() {
|
|
247
|
+
return this.storage.clearAll();
|
|
248
|
+
}
|
|
249
|
+
// ─── Buffer management ─────────────────────────────────────────────
|
|
250
|
+
/**
|
|
251
|
+
* Push an event into the centralised buffer.
|
|
252
|
+
* Triggers an immediate flush if the buffer exceeds the threshold.
|
|
253
|
+
* @internal
|
|
254
|
+
*/
|
|
255
|
+
pushBufferEvent(event) {
|
|
256
|
+
this.buffer.push(event);
|
|
257
|
+
if (this.buffer.length >= this.config.flushThreshold) {
|
|
258
|
+
this.flush();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Flush buffered events to IndexedDB asynchronously.
|
|
263
|
+
* @internal
|
|
264
|
+
*/
|
|
265
|
+
async flush() {
|
|
266
|
+
if (!this.initialised || this.buffer.length === 0)
|
|
267
|
+
return;
|
|
268
|
+
// Drain buffer
|
|
269
|
+
const events = this.buffer.splice(0);
|
|
270
|
+
// Apply step events to the session
|
|
271
|
+
for (const event of events) {
|
|
272
|
+
if (event.kind === 'step') {
|
|
273
|
+
// Steps are already pushed in real-time; ensure they're in the session
|
|
274
|
+
if (!this.session.steps.includes(event.payload)) {
|
|
275
|
+
this.session.steps.push(event.payload);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Actions, formEvents, httpCalls are already pushed in real-time
|
|
279
|
+
// to the in-memory session by trackAction/trackFormEvent/trackHttpCall
|
|
280
|
+
}
|
|
281
|
+
// Save the full session snapshot
|
|
282
|
+
try {
|
|
283
|
+
await this.storage.saveSession(this.session);
|
|
284
|
+
}
|
|
285
|
+
catch (e) {
|
|
286
|
+
// storage error — re-enqueue events for next flush
|
|
287
|
+
console.warn('[UiBlackbox] Storage flush failed:', e);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// ─── Utilities ─────────────────────────────────────────────────────
|
|
291
|
+
/** Generate a UUID v4. */
|
|
292
|
+
generateUuid() {
|
|
293
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
294
|
+
return crypto.randomUUID();
|
|
295
|
+
}
|
|
296
|
+
// Fallback for older browsers
|
|
297
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
298
|
+
const r = (Math.random() * 16) | 0;
|
|
299
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
300
|
+
return v.toString(16);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
// ─── Cleanup ───────────────────────────────────────────────────────
|
|
304
|
+
ngOnDestroy() {
|
|
305
|
+
this.destroy$.next();
|
|
306
|
+
this.destroy$.complete();
|
|
307
|
+
if (this.flushTimerId !== null) {
|
|
308
|
+
clearInterval(this.flushTimerId);
|
|
309
|
+
}
|
|
310
|
+
if (this.beforeUnloadHandler) {
|
|
311
|
+
window.removeEventListener('beforeunload', this.beforeUnloadHandler);
|
|
312
|
+
}
|
|
313
|
+
// Final flush
|
|
314
|
+
void this.flush();
|
|
315
|
+
}
|
|
316
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
317
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxService, providedIn: 'root' }); }
|
|
318
|
+
}
|
|
319
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiBlackboxService, decorators: [{
|
|
320
|
+
type: Injectable,
|
|
321
|
+
args: [{ providedIn: 'root' }]
|
|
322
|
+
}], ctorParameters: () => [] });
|
|
323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxhY2tib3guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLXVpLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvYmxhY2tib3gvYmxhY2tib3guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUVYLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBU0wsb0JBQW9CLEdBQ3JCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRXRFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUI7UUFuQmlCLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixTQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRTNDLGFBQVEsR0FBRyxJQUFJLE9B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IjpbIi8qKlxyXG4gKiBAbW9kdWxlIG5nLXVpLXN5c3RlbS9ibGFja2JveFxyXG4gKiBDb3JlIEJsYWNrQm94IG9ic2VydmFiaWxpdHkgc2VydmljZSDigJQgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHNlc3Npb25cclxuICogcmVjb3JkaW5nLCBldmVudCBidWZmZXJpbmcsIGFuZCBleHBvcnQuXHJcbiAqXHJcbiAqIEFyY2hpdGVjdHVyZTpcclxuICogLSBSb290IHNpbmdsZXRvbiAoYHByb3ZpZGVkSW46ICdyb290J2ApXHJcbiAqIC0gT24gZmlyc3QgaW5qZWN0OiBnZW5lcmF0ZXMgZmluZ2VycHJpbnQsIGNyZWF0ZXMgc2Vzc2lvbiwgc3Vic2NyaWJlcyB0byBSb3V0ZXIgZXZlbnRzXHJcbiAqIC0gQ2VudHJhbGlzZWQgaW4tbWVtb3J5IGJ1ZmZlciB3aXRoIHBlcmlvZGljL3RocmVzaG9sZC1iYXNlZCBmbHVzaCB0byBJbmRleGVkREJcclxuICogLSBgd2luZG93OmJlZm9yZXVubG9hZGAgdHJpZ2dlcnMgYSBmaW5hbCBiZXN0LWVmZm9ydCBhc3luYyBmbHVzaFxyXG4gKi9cclxuXHJcbmltcG9ydCB7XHJcbiAgSW5qZWN0YWJsZSxcclxuICBpbmplY3QsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE5nWm9uZSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBVaUJsYWNrYm94Q29uZmlnLFxyXG4gIFVpQmxhY2tib3hGb3JtVHJhY2tpbmdDb25maWcsXHJcbiAgVWlCbGFja2JveFNlc3Npb24sXHJcbiAgVWlCbGFja2JveFN0ZXAsXHJcbiAgVWlCbGFja2JveEFjdGlvbixcclxuICBVaUJsYWNrYm94Rm9ybUV2ZW50LFxyXG4gIFVpQmxhY2tib3hIdHRwQ2FsbCxcclxuICBVaUJsYWNrYm94QnVmZmVyRXZlbnQsXHJcbiAgVUlfQkxBQ0tCT1hfREVGQVVMVFMsXHJcbn0gZnJvbSAnLi9ibGFja2JveC50eXBlcyc7XHJcbmltcG9ydCB7IFVpQmxhY2tib3hGaW5nZXJwcmludFNlcnZpY2UgfSBmcm9tICcuL2JsYWNrYm94LWZpbmdlcnByaW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUJsYWNrYm94U3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2JsYWNrYm94LXN0b3JhZ2Uuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQ2VudHJhbCBCbGFja0JveCBvYnNlcnZhYmlsaXR5IHNlcnZpY2UuXHJcbiAqXHJcbiAqIFJlY29yZHMgbmF2aWdhdGlvbiwgVUkgaW50ZXJhY3Rpb25zLCBmb3JtIGV2ZW50cywgYW5kIEhUVFAgY2FsbHNcclxuICogaW50byBjb21wcmVzc2VkIHNlc3Npb25zIHN0b3JlZCBpbiBJbmRleGVkREIuXHJcbiAqXHJcbiAqIEB1c2FnZU5vdGVzXHJcbiAqIFRoZSBzZXJ2aWNlIGFjdGl2YXRlcyBhdXRvbWF0aWNhbGx5IHdoZW4gaW5qZWN0ZWQuIFByb3ZpZGUgaXQgYXQgcm9vdCBsZXZlbFxyXG4gKiBhbmQgaXQgd2lsbCBzdGFydCByZWNvcmRpbmcgaW1tZWRpYXRlbHkuXHJcbiAqXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogLy8gYXBwLmNvbmZpZy50cyDigJQganVzdCBpbXBvcnRpbmcgdGhlIHNlcnZpY2UgaXMgZW5vdWdoXHJcbiAqIGltcG9ydCB7IFVpQmxhY2tib3hTZXJ2aWNlIH0gZnJvbSAnQGduZ2dsbi9uZy11aS1zeXN0ZW0nO1xyXG4gKlxyXG4gKiBleHBvcnQgY29uc3QgYXBwQ29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcclxuICogICBwcm92aWRlcnM6IFtcclxuICogICAgIC8vIFRoZSBzZXJ2aWNlIGlzIHByb3ZpZGVkSW46ICdyb290Jywgc28gaXQncyBhdXRvLXByb3ZpZGVkLlxyXG4gKiAgICAgLy8gVG8gZm9yY2UgZWFnZXIgaW5pdGlhbGlzYXRpb246XHJcbiAqICAgICB7IHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUiwgdXNlRmFjdG9yeTogKCkgPT4gKCkgPT4gaW5qZWN0KFVpQmxhY2tib3hTZXJ2aWNlKSwgbXVsdGk6IHRydWUgfSxcclxuICogICBdLFxyXG4gKiB9O1xyXG4gKiBgYGBcclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVaUJsYWNrYm94U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZmluZ2VycHJpbnQgPSBpbmplY3QoVWlCbGFja2JveEZpbmdlcnByaW50U2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlID0gaW5qZWN0KFVpQmxhY2tib3hTdG9yYWdlU2VydmljZSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgY29uZmlnOiBVaUJsYWNrYm94Q29uZmlnID0geyAuLi5VSV9CTEFDS0JPWF9ERUZBVUxUUyB9O1xyXG5cclxuICAvLyDilIDilIDilIAgU2Vzc2lvbiBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuICBwcml2YXRlIHNlc3Npb24hOiBVaUJsYWNrYm94U2Vzc2lvbjtcclxuICBwcml2YXRlIGN1cnJlbnRTdGVwOiBVaUJsYWNrYm94U3RlcCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgaW5pdGlhbGlzZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8g4pSA4pSA4pSAIENlbnRyYWxpc2VkIGV2ZW50IGJ1ZmZlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuICBwcml2YXRlIGJ1ZmZlcjogVWlCbGFja2JveEJ1ZmZlckV2ZW50W10gPSBbXTtcclxuICBwcml2YXRlIGZsdXNoVGltZXJJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBiZWZvcmVVbmxvYWRIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBJbml0aWFsaXNhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gR2VuZXJhdGUgc2Vzc2lvbiBJRFxyXG4gICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5nZW5lcmF0ZVV1aWQoKTtcclxuICAgIGNvbnN0IGZwID0gYXdhaXQgdGhpcy5maW5nZXJwcmludC5nZXRGaW5nZXJwcmludCgpO1xyXG5cclxuICAgIHRoaXMuc2Vzc2lvbiA9IHtcclxuICAgICAgc2Vzc2lvbklkLFxyXG4gICAgICBmaW5nZXJwcmludDogZnAsXHJcbiAgICAgIHN0YXJ0ZWRBdDogRGF0ZS5ub3coKSxcclxuICAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICBzdGVwczogW10sXHJcbiAgICAgIGZvcm1FdmVudHM6IFtdLFxyXG4gICAgICBjYWxsczogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIENyZWF0ZSBpbml0aWFsIHN0ZXAgZnJvbSBjdXJyZW50IFVSTFxyXG4gICAgdGhpcy5jdXJyZW50U3RlcCA9IHtcclxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgICByb3V0ZTogdGhpcy5yb3V0ZXIudXJsLFxyXG4gICAgICBhY3Rpb25zOiBbXSxcclxuICAgIH07XHJcbiAgICB0aGlzLnNlc3Npb24uc3RlcHMucHVzaCh0aGlzLmN1cnJlbnRTdGVwKTtcclxuXHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gcm91dGVyIG5hdmlnYXRpb25cclxuICAgIHRoaXMucm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoKGUpOiBlIGlzIE5hdmlnYXRpb25FbmQgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzUm91dGUgPSB0aGlzLmN1cnJlbnRTdGVwPy5yb3V0ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0ge1xyXG4gICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgcm91dGU6IGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzLFxyXG4gICAgICAgICAgcHJldmlvdXNSb3V0ZSxcclxuICAgICAgICAgIGFjdGlvbnM6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5wdXNoQnVmZmVyRXZlbnQoeyBraW5kOiAnc3RlcCcsIHBheWxvYWQ6IHRoaXMuY3VycmVudFN0ZXAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFNldHVwIHBlcmlvZGljIGZsdXNoIChvdXRzaWRlIEFuZ3VsYXIgem9uZSB0byBhdm9pZCB0cmlnZ2VyaW5nIENEKVxyXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5mbHVzaFRpbWVySWQgPSBzZXRJbnRlcnZhbChcclxuICAgICAgICAoKSA9PiB0aGlzLmZsdXNoKCksXHJcbiAgICAgICAgdGhpcy5jb25maWcuZmx1c2hJbnRlcnZhbE1zLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gQmVzdC1lZmZvcnQgZmx1c2ggb24gdGFiIGNsb3NlIChJbmRleGVkREIgaXMgYXN5bmMsIG5vIHN5bmMgZmFsbGJhY2spXHJcbiAgICAgIHRoaXMuYmVmb3JlVW5sb2FkSGFuZGxlciA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNlc3Npb24uZW5kZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgdm9pZCB0aGlzLmZsdXNoKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLmJlZm9yZVVubG9hZEhhbmRsZXIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgUHVibGljIEFQSTogQ29uZmlndXJhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBCbGFja0JveCBjb25maWd1cmF0aW9uLlxyXG4gICAqIENhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWU7IGNoYW5nZXMgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkuXHJcbiAgICovXHJcbiAgY29uZmlndXJlKGNvbmZpZzogUGFydGlhbDxPbWl0PFVpQmxhY2tib3hDb25maWcsICdmb3JtVHJhY2tpbmcnPj4gJiB7IGZvcm1UcmFja2luZz86IFBhcnRpYWw8VWlCbGFja2JveEZvcm1UcmFja2luZ0NvbmZpZz4gfSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgIC4uLnRoaXMuY29uZmlnLFxyXG4gICAgICAuLi5jb25maWcsXHJcbiAgICAgIGZvcm1UcmFja2luZzoge1xyXG4gICAgICAgIC4uLnRoaXMuY29uZmlnLmZvcm1UcmFja2luZyxcclxuICAgICAgICAuLi4oY29uZmlnLmZvcm1UcmFja2luZyA/PyB7fSksXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zdG9yYWdlLnNldE1heFN0b3JhZ2VNYih0aGlzLmNvbmZpZy5tYXhTdG9yYWdlTWIpO1xyXG5cclxuICAgIC8vIFJlc3RhcnQgZmx1c2ggdGltZXIgd2l0aCBuZXcgaW50ZXJ2YWxcclxuICAgIGlmICh0aGlzLmZsdXNoVGltZXJJZCAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZmx1c2hUaW1lcklkKTtcclxuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgICB0aGlzLmZsdXNoVGltZXJJZCA9IHNldEludGVydmFsKFxyXG4gICAgICAgICAgKCkgPT4gdGhpcy5mbHVzaCgpLFxyXG4gICAgICAgICAgdGhpcy5jb25maWcuZmx1c2hJbnRlcnZhbE1zLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiAocmVhZG9ubHkgc25hcHNob3QpLiAqL1xyXG4gIGdldENvbmZpZygpOiBSZWFkb25seTxVaUJsYWNrYm94Q29uZmlnPiB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLmNvbmZpZyB9O1xyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIFB1YmxpYyBBUEk6IFRyYWNraW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICAvKipcclxuICAgKiBNYW51YWxseSB0cmFjayBhIFVJIGFjdGlvbiAoY2xpY2spLlxyXG4gICAqXHJcbiAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYFVpQnV0dG9uQXJlYUNvbXBvbmVudGAgYW5kIHRoZSBgW3VpVHJhY2tdYCBkaXJlY3RpdmUuXHJcbiAgICogQ2FuIGFsc28gYmUgY2FsbGVkIHByb2dyYW1tYXRpY2FsbHkgZm9yIGN1c3RvbSBpbnRlcmFjdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gdHJhY2tJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBhY3Rpb24gKGUuZy4gYnV0dG9uIGlkLCBsaW5rIG5hbWUpLlxyXG4gICAqIEBwYXJhbSBtZXRhIC0gT3B0aW9uYWwgbWV0YWRhdGE6IGB0YWdgLCBgdGV4dGAsIGBpZGAgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICovXHJcbiAgdHJhY2tBY3Rpb24oXHJcbiAgICB0cmFja0lkOiBzdHJpbmcsXHJcbiAgICBtZXRhPzogeyB0YWc/OiBzdHJpbmc7IHRleHQ/OiBzdHJpbmc7IGlkPzogc3RyaW5nIH0sXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGlzZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhY3Rpb246IFVpQmxhY2tib3hBY3Rpb24gPSB7XHJcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcclxuICAgICAgdHlwZTogJ2NsaWNrJyxcclxuICAgICAgdGFyZ2V0OiB7XHJcbiAgICAgICAgdGFnOiBtZXRhPy50YWcgPz8gJ3Vua25vd24nLFxyXG4gICAgICAgIGlkOiBtZXRhPy5pZCxcclxuICAgICAgICB0cmFja0lkLFxyXG4gICAgICAgIHRleHQ6IG1ldGE/LnRleHQ/LnN1YnN0cmluZygwLCA1MCksXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCB0byBjdXJyZW50IHN0ZXAgaW1tZWRpYXRlbHkgKGZvciBpbi1tZW1vcnkgc2Vzc2lvbiBhY2Nlc3MpXHJcbiAgICB0aGlzLmN1cnJlbnRTdGVwPy5hY3Rpb25zLnB1c2goYWN0aW9uKTtcclxuXHJcbiAgICAvLyBBbHNvIHB1c2ggdG8gYnVmZmVyIGZvciBwZXJzaXN0ZW5jZVxyXG4gICAgdGhpcy5wdXNoQnVmZmVyRXZlbnQoe1xyXG4gICAgICBraW5kOiAnYWN0aW9uJyxcclxuICAgICAgcGF5bG9hZDogeyAuLi5hY3Rpb24sIHJvdXRlOiB0aGlzLmN1cnJlbnRTdGVwPy5yb3V0ZSA/PyB0aGlzLnJvdXRlci51cmwgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2sgYSBmb3JtIGludGVyYWN0aW9uIGV2ZW50LlxyXG4gICAqXHJcbiAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgYFVpRm9ybUJ1aWxkZXJDb21wb25lbnRgIHdoZW4gdGhlIEJsYWNrQm94XHJcbiAgICogc2VydmljZSBpcyBhdmFpbGFibGUuXHJcbiAgICovXHJcbiAgdHJhY2tGb3JtRXZlbnQoZXZlbnQ6IFVpQmxhY2tib3hGb3JtRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsaXNlZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2Vzc2lvbi5mb3JtRXZlbnRzLnB1c2goZXZlbnQpO1xyXG4gICAgdGhpcy5wdXNoQnVmZmVyRXZlbnQoeyBraW5kOiAnZm9ybUV2ZW50JywgcGF5bG9hZDogZXZlbnQgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFjayBhbiBpbnRlcmNlcHRlZCBIVFRQIGNhbGwuXHJcbiAgICogQ2FsbGVkIGJ5IGBVaUJsYWNrYm94SW50ZXJjZXB0b3JgLlxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHRyYWNrSHR0cENhbGwoY2FsbDogVWlCbGFja2JveEh0dHBDYWxsKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGlzZWQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnNlc3Npb24uY2FsbHMucHVzaChjYWxsKTtcclxuICAgIHRoaXMucHVzaEJ1ZmZlckV2ZW50KHsga2luZDogJ2h0dHBDYWxsJywgcGF5bG9hZDogY2FsbCB9KTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBQdWJsaWMgQVBJOiBTZXNzaW9uIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBpbi1tZW1vcnkgc2Vzc2lvbiAobGl2ZSwgbm90IHlldCBmbHVzaGVkKS5cclxuICAgKiBVc2VmdWwgZm9yIGRlYnVnZ2luZyBvciByZWFsLXRpbWUgaW5zcGVjdGlvbi5cclxuICAgKi9cclxuICBnZXRDdXJyZW50U2Vzc2lvbigpOiBVaUJsYWNrYm94U2Vzc2lvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYWxsIHNlc3Npb25zIHN0b3JlZCBpbiBJbmRleGVkREIgKGRlY29tcHJlc3NlZCkuXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0U2Vzc2lvbkhpc3RvcnkoKTogUHJvbWlzZTxVaUJsYWNrYm94U2Vzc2lvbltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldEFsbFNlc3Npb25zKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBzZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnQgZGV2aWNlIGZpbmdlcnByaW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFNlc3Npb25zRm9yRGV2aWNlKCk6IFByb21pc2U8VWlCbGFja2JveFNlc3Npb25bXT4ge1xyXG4gICAgY29uc3QgZnAgPSBhd2FpdCB0aGlzLmZpbmdlcnByaW50LmdldEZpbmdlcnByaW50KCk7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldFNlc3Npb25zQnlGaW5nZXJwcmludChmcCk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgUHVibGljIEFQSTogRXhwb3J0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgYWxsIHNlc3Npb25zIGFzIGEgZG93bmxvYWRhYmxlIEpTT05MIEJsb2IuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBBIEJsb2IgY29udGFpbmluZyBKU09OTCBkYXRhIChvbmUgc2Vzc2lvbiBwZXIgbGluZSkuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGBgYHR5cGVzY3JpcHRcclxuICAgKiBjb25zdCBibG9iID0gYXdhaXQgYmxhY2tib3guZXhwb3J0U2Vzc2lvbnMoKTtcclxuICAgKiBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAqIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICogYS5ocmVmID0gdXJsO1xyXG4gICAqIGEuZG93bmxvYWQgPSAnYmxhY2tib3gtc2Vzc2lvbnMuanNvbmwnO1xyXG4gICAqIGEuY2xpY2soKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuICBhc3luYyBleHBvcnRTZXNzaW9ucygpOiBQcm9taXNlPEJsb2I+IHtcclxuICAgIC8vIEZsdXNoIGN1cnJlbnQgc2Vzc2lvbiBmaXJzdFxyXG4gICAgYXdhaXQgdGhpcy5mbHVzaCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5leHBvcnREdW1wKCk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgUHVibGljIEFQSTogTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICAvKipcclxuICAgKiBFeHBsaWNpdGx5IGVuZCB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAqIEZsdXNoZXMgYWxsIGJ1ZmZlcmVkIGV2ZW50cyBhbmQgbWFya3MgdGhlIHNlc3Npb24gYXMgZW5kZWQuXHJcbiAgICovXHJcbiAgYXN5bmMgZW5kU2Vzc2lvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsaXNlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZXNzaW9uLmVuZGVkQXQgPSBEYXRlLm5vdygpO1xyXG4gICAgYXdhaXQgdGhpcy5mbHVzaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHN0b3JlZCBzZXNzaW9ucyBmcm9tIEluZGV4ZWREQi5cclxuICAgKi9cclxuICBhc3luYyBjbGVhckhpc3RvcnkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmNsZWFyQWxsKCk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQnVmZmVyIG1hbmFnZW1lbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIC8qKlxyXG4gICAqIFB1c2ggYW4gZXZlbnQgaW50byB0aGUgY2VudHJhbGlzZWQgYnVmZmVyLlxyXG4gICAqIFRyaWdnZXJzIGFuIGltbWVkaWF0ZSBmbHVzaCBpZiB0aGUgYnVmZmVyIGV4Y2VlZHMgdGhlIHRocmVzaG9sZC5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcml2YXRlIHB1c2hCdWZmZXJFdmVudChldmVudDogVWlCbGFja2JveEJ1ZmZlckV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1ZmZlci5wdXNoKGV2ZW50KTtcclxuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPj0gdGhpcy5jb25maWcuZmx1c2hUaHJlc2hvbGQpIHtcclxuICAgICAgdGhpcy5mbHVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmx1c2ggYnVmZmVyZWQgZXZlbnRzIHRvIEluZGV4ZWREQiBhc3luY2hyb25vdXNseS5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmluaXRpYWxpc2VkIHx8IHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIERyYWluIGJ1ZmZlclxyXG4gICAgY29uc3QgZXZlbnRzID0gdGhpcy5idWZmZXIuc3BsaWNlKDApO1xyXG5cclxuICAgIC8vIEFwcGx5IHN0ZXAgZXZlbnRzIHRvIHRoZSBzZXNzaW9uXHJcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xyXG4gICAgICBpZiAoZXZlbnQua2luZCA9PT0gJ3N0ZXAnKSB7XHJcbiAgICAgICAgLy8gU3RlcHMgYXJlIGFscmVhZHkgcHVzaGVkIGluIHJlYWwtdGltZTsgZW5zdXJlIHRoZXkncmUgaW4gdGhlIHNlc3Npb25cclxuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbi5zdGVwcy5pbmNsdWRlcyhldmVudC5wYXlsb2FkKSkge1xyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uLnN0ZXBzLnB1c2goZXZlbnQucGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIEFjdGlvbnMsIGZvcm1FdmVudHMsIGh0dHBDYWxscyBhcmUgYWxyZWFkeSBwdXNoZWQgaW4gcmVhbC10aW1lXHJcbiAgICAgIC8vIHRvIHRoZSBpbi1tZW1vcnkgc2Vzc2lvbiBieSB0cmFja0FjdGlvbi90cmFja0Zvcm1FdmVudC90cmFja0h0dHBDYWxsXHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2F2ZSB0aGUgZnVsbCBzZXNzaW9uIHNuYXBzaG90XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2F2ZVNlc3Npb24odGhpcy5zZXNzaW9uKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gc3RvcmFnZSBlcnJvciDigJQgcmUtZW5xdWV1ZSBldmVudHMgZm9yIG5leHQgZmx1c2hcclxuICAgICAgY29uc29sZS53YXJuKCdbVWlCbGFja2JveF0gU3RvcmFnZSBmbHVzaCBmYWlsZWQ6JywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgVXRpbGl0aWVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICAvKiogR2VuZXJhdGUgYSBVVUlEIHY0LiAqL1xyXG4gIHByaXZhdGUgZ2VuZXJhdGVVdWlkKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQpIHtcclxuICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XHJcbiAgICB9XHJcbiAgICAvLyBGYWxsYmFjayBmb3Igb2xkZXIgYnJvd3NlcnNcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XHJcbiAgICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7XHJcbiAgICAgIGNvbnN0IHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4O1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBDbGVhbnVwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmZsdXNoVGltZXJJZCAhPT0gbnVsbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZmx1c2hUaW1lcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5iZWZvcmVVbmxvYWRIYW5kbGVyKSB7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLmJlZm9yZVVubG9hZEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbmFsIGZsdXNoXHJcbiAgICB2b2lkIHRoaXMuZmx1c2goKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ng-ui-system/blackbox
|
|
3
|
+
* Types and interfaces for the BlackBox observability service.
|
|
4
|
+
*
|
|
5
|
+
* The BlackBox service acts as a "black box recorder" for user sessions,
|
|
6
|
+
* capturing navigation, UI interactions, form events and HTTP calls
|
|
7
|
+
* in a compressed, opaque format stored in IndexedDB.
|
|
8
|
+
*/
|
|
9
|
+
// ─── Defaults ────────────────────────────────────────────────────────
|
|
10
|
+
/** Default configuration values. */
|
|
11
|
+
export const UI_BLACKBOX_DEFAULTS = {
|
|
12
|
+
maxStorageMb: 50,
|
|
13
|
+
flushIntervalMs: 5000,
|
|
14
|
+
flushThreshold: 20,
|
|
15
|
+
bufferDebounceMs: 500,
|
|
16
|
+
formTracking: {
|
|
17
|
+
trackValues: false,
|
|
18
|
+
trackFocus: true,
|
|
19
|
+
trackBlur: true,
|
|
20
|
+
trackValueChanges: true,
|
|
21
|
+
trackValidation: true,
|
|
22
|
+
debounceMs: 500,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxhY2tib3gudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2JsYWNrYm94L2JsYWNrYm94LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFtU0gsd0VBQXdFO0FBRXhFLG9DQUFvQztBQUNwQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBcUI7SUFDcEQsWUFBWSxFQUFFLEVBQUU7SUFDaEIsZUFBZSxFQUFFLElBQUk7SUFDckIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsZ0JBQWdCLEVBQUUsR0FBRztJQUNyQixZQUFZLEVBQUU7UUFDWixXQUFXLEVBQUUsS0FBSztRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixTQUFTLEVBQUUsSUFBSTtRQUNmLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsZUFBZSxFQUFFLElBQUk7UUFDckIsVUFBVSxFQUFFLEdBQUc7S0FDaEI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBtb2R1bGUgbmctdWktc3lzdGVtL2JsYWNrYm94XHJcbiAqIFR5cGVzIGFuZCBpbnRlcmZhY2VzIGZvciB0aGUgQmxhY2tCb3ggb2JzZXJ2YWJpbGl0eSBzZXJ2aWNlLlxyXG4gKlxyXG4gKiBUaGUgQmxhY2tCb3ggc2VydmljZSBhY3RzIGFzIGEgXCJibGFjayBib3ggcmVjb3JkZXJcIiBmb3IgdXNlciBzZXNzaW9ucyxcclxuICogY2FwdHVyaW5nIG5hdmlnYXRpb24sIFVJIGludGVyYWN0aW9ucywgZm9ybSBldmVudHMgYW5kIEhUVFAgY2FsbHNcclxuICogaW4gYSBjb21wcmVzc2VkLCBvcGFxdWUgZm9ybWF0IHN0b3JlZCBpbiBJbmRleGVkREIuXHJcbiAqL1xyXG5cclxuLy8g4pSA4pSA4pSAIENvbmZpZ3VyYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKipcclxuICogRm9ybSB0cmFja2luZyBncmFudWxhcml0eSBmbGFncy5cclxuICpcclxuICogQ29udHJvbHMgd2hpY2ggZm9ybSBldmVudHMgYXJlIGNhcHR1cmVkIGJ5IHRoZSBCbGFja0JveCBzZXJ2aWNlLlxyXG4gKiBBbGwgZmxhZ3MgZGVmYXVsdCB0byBgdHJ1ZWAgZXhjZXB0IGB0cmFja1ZhbHVlc2Agd2hpY2ggZGVmYXVsdHMgdG8gYGZhbHNlYFxyXG4gKiBmb3IgcHJpdmFjeSByZWFzb25zLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUJsYWNrYm94Rm9ybVRyYWNraW5nQ29uZmlnIHtcclxuICAvKipcclxuICAgKiBXaGVuIGB0cnVlYCwgdGhlIGFjdHVhbCBmaWVsZCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBmb3JtIGV2ZW50cy5cclxuICAgKiBXaGVuIGBmYWxzZWAsIG9ubHkgdGhlIGZhY3QgdGhhdCBhIGNoYW5nZSBvY2N1cnJlZCBpcyByZWNvcmRlZC5cclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIHRyYWNrVmFsdWVzOiBib29sZWFuO1xyXG5cclxuICAvKiogVHJhY2sgZm9jdXMgZXZlbnRzIG9uIGZvcm0gZmllbGRzLiBAZGVmYXVsdCB0cnVlICovXHJcbiAgdHJhY2tGb2N1czogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFRyYWNrIGJsdXIgZXZlbnRzIG9uIGZvcm0gZmllbGRzLiBAZGVmYXVsdCB0cnVlICovXHJcbiAgdHJhY2tCbHVyOiBib29sZWFuO1xyXG5cclxuICAvKiogVHJhY2sgdmFsdWUgY2hhbmdlIGV2ZW50cyBvbiBmb3JtIGZpZWxkcy4gQGRlZmF1bHQgdHJ1ZSAqL1xyXG4gIHRyYWNrVmFsdWVDaGFuZ2VzOiBib29sZWFuO1xyXG5cclxuICAvKiogVHJhY2sgdmFsaWRhdGlvbiBlcnJvciBldmVudHMgb24gZm9ybSBmaWVsZHMuIEBkZWZhdWx0IHRydWUgKi9cclxuICB0cmFja1ZhbGlkYXRpb246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIERlYm91bmNlIGludGVydmFsIChtcykgZm9yIGB2YWx1ZUNoYW5nZXNgIHN1YnNjcmlwdGlvbnMuXHJcbiAgICogSGlnaGVyIHZhbHVlcyByZWR1Y2Ugbm9pc2UgYnV0IGluY3JlYXNlIGxhdGVuY3kuXHJcbiAgICogQGRlZmF1bHQgNTAwXHJcbiAgICovXHJcbiAgZGVib3VuY2VNczogbnVtYmVyO1xyXG59XHJcblxyXG4vKipcclxuICogUm9vdCBjb25maWd1cmF0aW9uIGZvciB0aGUgQmxhY2tCb3ggc2VydmljZS5cclxuICpcclxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIOKAlCBzZW5zaWJsZSBkZWZhdWx0cyBhcmUgYXBwbGllZCB3aGVuIG9taXR0ZWQuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogYmxhY2tib3hTZXJ2aWNlLmNvbmZpZ3VyZSh7XHJcbiAqICAgbWF4U3RvcmFnZU1iOiAzMCxcclxuICogICBmb3JtVHJhY2tpbmc6IHsgdHJhY2tWYWx1ZXM6IHRydWUsIGRlYm91bmNlTXM6IDEwMDAgfSxcclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUJsYWNrYm94Q29uZmlnIHtcclxuICAvKipcclxuICAgKiBNYXhpbXVtIEluZGV4ZWREQiBzdG9yYWdlIHF1b3RhIGluIG1lZ2FieXRlcy5cclxuICAgKiBPbGRlc3Qgc2Vzc2lvbnMgYXJlIHBydW5lZCB3aGVuIHRoZSBxdW90YSBpcyBleGNlZWRlZC5cclxuICAgKiBAZGVmYXVsdCA1MFxyXG4gICAqL1xyXG4gIG1heFN0b3JhZ2VNYjogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcnZhbCAobXMpIGF0IHdoaWNoIHRoZSBpbi1tZW1vcnkgYnVmZmVyIGlzIGZsdXNoZWQgdG8gSW5kZXhlZERCLlxyXG4gICAqIEBkZWZhdWx0IDUwMDBcclxuICAgKi9cclxuICBmbHVzaEludGVydmFsTXM6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogTnVtYmVyIG9mIGJ1ZmZlcmVkIGV2ZW50cyB0aGF0IHRyaWdnZXIgYW4gaW1tZWRpYXRlIGZsdXNoLlxyXG4gICAqIEBkZWZhdWx0IDIwXHJcbiAgICovXHJcbiAgZmx1c2hUaHJlc2hvbGQ6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2VudHJhbGlzZWQgZGVib3VuY2UgKG1zKSBhcHBsaWVkIHRvIHRoZSBldmVudCBidWZmZXIuXHJcbiAgICogQGRlZmF1bHQgNTAwXHJcbiAgICovXHJcbiAgYnVmZmVyRGVib3VuY2VNczogbnVtYmVyO1xyXG5cclxuICAvKiogUGVyLWZpZWxkIGZvcm0gdHJhY2tpbmcgY29uZmlndXJhdGlvbi4gKi9cclxuICBmb3JtVHJhY2tpbmc6IFVpQmxhY2tib3hGb3JtVHJhY2tpbmdDb25maWc7XHJcbn1cclxuXHJcbi8vIOKUgOKUgOKUgCBGaW5nZXJwcmludCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbi8qKlxyXG4gKiBTdGFibGUgZGV2aWNlL2Jyb3dzZXIgZmluZ2VycHJpbnQgZ2VuZXJhdGVkIGJ5IEZpbmdlcnByaW50SlMgKG9wZW4tc291cmNlKS5cclxuICogUGVyc2lzdHMgYWNyb3NzIHNlc3Npb25zIGFuZCBpbmNvZ25pdG8gbW9kZS5cclxuICovXHJcbmV4cG9ydCB0eXBlIFVpQmxhY2tib3hGaW5nZXJwcmludCA9IHN0cmluZztcclxuXHJcbi8vIOKUgOKUgOKUgCBTZXNzaW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIHJlY29yZGluZyBzZXNzaW9uLCBjb3JyZXNwb25kaW5nIHRvIG9uZSBicm93c2VyIHRhYiBsaWZlY3ljbGUuXHJcbiAqXHJcbiAqIFNlc3Npb25zIGFyZSBhc3NvY2lhdGVkIHRvIGEgc3RhYmxlIGBmaW5nZXJwcmludGAgc28gdGhhdCBtdWx0aXBsZVxyXG4gKiBzZXNzaW9ucyBmcm9tIHRoZSBzYW1lIGRldmljZSBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlci5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlCbGFja2JveFNlc3Npb24ge1xyXG4gIC8qKiBVbmlxdWUgc2Vzc2lvbiBpZGVudGlmaWVyIChVVUlEIHY0KS4gKi9cclxuICBzZXNzaW9uSWQ6IHN0cmluZztcclxuXHJcbiAgLyoqIFN0YWJsZSBkZXZpY2UvYnJvd3NlciBmaW5nZXJwcmludC4gKi9cclxuICBmaW5nZXJwcmludDogVWlCbGFja2JveEZpbmdlcnByaW50O1xyXG5cclxuICAvKiogVGltZXN0YW1wIChtcyBzaW5jZSBlcG9jaCkgd2hlbiB0aGUgc2Vzc2lvbiBzdGFydGVkLiAqL1xyXG4gIHN0YXJ0ZWRBdDogbnVtYmVyO1xyXG5cclxuICAvKiogVGltZXN0YW1wIChtcyBzaW5jZSBlcG9jaCkgd2hlbiB0aGUgc2Vzc2lvbiBlbmRlZCAodGFiIGNsb3NlZCkuICovXHJcbiAgZW5kZWRBdD86IG51bWJlcjtcclxuXHJcbiAgLyoqIFJhdyBgbmF2aWdhdG9yLnVzZXJBZ2VudGAgc3RyaW5nIGNhcHR1cmVkIGF0IHNlc3Npb24gc3RhcnQuICovXHJcbiAgdXNlckFnZW50OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9yZGVyZWQgbGlzdCBvZiBuYXZpZ2F0aW9uIHN0ZXBzIChyb3V0ZSBjaGFuZ2VzKS5cclxuICAgKiBFYWNoIHN0ZXAgY29udGFpbnMgdGhlIGFjdGlvbnMgcGVyZm9ybWVkIG9uIHRoYXQgcGFnZS5cclxuICAgKi9cclxuICBzdGVwczogVWlCbGFja2JveFN0ZXBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGFyYWxsZWwgc3RyZWFtIG9mIGZvcm0gaW50ZXJhY3Rpb24gZXZlbnRzLlxyXG4gICAqIE9yZGVyZWQgYnkgdGltZXN0YW1wLCBjb3JyZWxhdGVkIHRvIHJvdXRlcyB2aWEgYHJvdXRlYCBmaWVsZC5cclxuICAgKi9cclxuICBmb3JtRXZlbnRzOiBVaUJsYWNrYm94Rm9ybUV2ZW50W107XHJcblxyXG4gIC8qKlxyXG4gICAqIEludGVyY2VwdGVkIEhUVFAgY2FsbHMsIG9yZGVyZWQgYnkgdGltZXN0YW1wLlxyXG4gICAqIE9ubHkgcmVxdWVzdHMgZXhwbGljaXRseSBtYXJrZWQgd2l0aCB0aGUgYFgtVWktQmxhY2tib3hgIGhlYWRlci5cclxuICAgKi9cclxuICBjYWxsczogVWlCbGFja2JveEh0dHBDYWxsW107XHJcbn1cclxuXHJcbi8vIOKUgOKUgOKUgCBTdGVwIChSb3V0ZSBDaGFuZ2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIG5hdmlnYXRpb24gc3RlcCBjcmVhdGVkIG9uIGV2ZXJ5IGBOYXZpZ2F0aW9uRW5kYCBldmVudC5cclxuICogQ29udGFpbnMgYWxsIFVJIGFjdGlvbnMgcGVyZm9ybWVkIGR1cmluZyB0aGlzIHJvdXRlLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUJsYWNrYm94U3RlcCB7XHJcbiAgLyoqIFRpbWVzdGFtcCAobXMpIG9mIHRoZSBuYXZpZ2F0aW9uIGV2ZW50LiAqL1xyXG4gIHRpbWVzdGFtcDogbnVtYmVyO1xyXG5cclxuICAvKiogVGhlIHJvdXRlIFVSTCBuYXZpZ2F0ZWQgdG8uICovXHJcbiAgcm91dGU6IHN0cmluZztcclxuXHJcbiAgLyoqIFRoZSBwcmV2aW91cyByb3V0ZSBVUkwgKHVuZGVmaW5lZCBmb3IgdGhlIGZpcnN0IHN0ZXApLiAqL1xyXG4gIHByZXZpb3VzUm91dGU/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9yZGVyZWQgbGlzdCBvZiBVSSBhY3Rpb25zIChjbGlja3MpIHBlcmZvcm1lZCBvbiB0aGlzIHBhZ2UuXHJcbiAgICovXHJcbiAgYWN0aW9uczogVWlCbGFja2JveEFjdGlvbltdO1xyXG59XHJcblxyXG4vLyDilIDilIDilIAgQWN0aW9uIChVSSBDbGljaykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKipcclxuICogQSBzaW5nbGUgdHJhY2tlZCBVSSBhY3Rpb24sIHR5cGljYWxseSBhIGNsaWNrLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUJsYWNrYm94QWN0aW9uIHtcclxuICAvKiogVGltZXN0YW1wIChtcykgb2YgdGhlIGFjdGlvbi4gKi9cclxuICB0aW1lc3RhbXA6IG51bWJlcjtcclxuXHJcbiAgLyoqIFR5cGUgZGlzY3JpbWluYXRvci4gQ3VycmVudGx5IG9ubHkgYGNsaWNrYCBpcyBzdXBwb3J0ZWQuICovXHJcbiAgdHlwZTogJ2NsaWNrJztcclxuXHJcbiAgLyoqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjbGlja2VkIGVsZW1lbnQuICovXHJcbiAgdGFyZ2V0OiBVaUJsYWNrYm94QWN0aW9uVGFyZ2V0O1xyXG59XHJcblxyXG4vKipcclxuICogTWluaW1hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZWxlbWVudCB0aGF0IHdhcyBpbnRlcmFjdGVkIHdpdGguXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVpQmxhY2tib3hBY3Rpb25UYXJnZXQge1xyXG4gIC8qKiBIVE1MIHRhZyBuYW1lIChsb3dlcmNhc2UpLiAqL1xyXG4gIHRhZzogc3RyaW5nO1xyXG5cclxuICAvKiogRWxlbWVudCBgaWRgIGF0dHJpYnV0ZSwgaWYgcHJlc2VudC4gKi9cclxuICBpZD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIHRyYWNraW5nIGlkZW50aWZpZXIsIHNldCB2aWEgYGRhdGEtdHJhY2staWRgIGF0dHJpYnV0ZVxyXG4gICAqIG9yIHRoZSBgW3VpVHJhY2tdYCBkaXJlY3RpdmUgdmFsdWUuXHJcbiAgICovXHJcbiAgdHJhY2tJZD86IHN0cmluZztcclxuXHJcbiAgLyoqIEZpcnN0IDUwIGNoYXJhY3RlcnMgb2YgYGlubmVyVGV4dGAgKHRyaW1tZWQpLiAqL1xyXG4gIHRleHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vIOKUgOKUgOKUgCBGb3JtIEV2ZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqIERpc2NyaW1pbmF0b3IgZm9yIGZvcm0gZXZlbnQgdHlwZXMuICovXHJcbmV4cG9ydCB0eXBlIFVpQmxhY2tib3hGb3JtRXZlbnRUeXBlID1cclxuICB8ICdmb2N1cydcclxuICB8ICdibHVyJ1xyXG4gIHwgJ3ZhbHVlQ2hhbmdlJ1xyXG4gIHwgJ3ZhbGlkYXRpb25FcnJvcic7XHJcblxyXG4vKipcclxuICogQSBzaW5nbGUgZm9ybSBpbnRlcmFjdGlvbiBldmVudCBmcm9tIHRoZSBwYXJhbGxlbCBmb3JtIHN0cmVhbS5cclxuICpcclxuICogRWFjaCBldmVudCBpcyB0aW1lc3RhbXBlZCBhbmQgdGFnZ2VkIHdpdGggdGhlIGN1cnJlbnQgcm91dGUsIGFsbG93aW5nXHJcbiAqIGNvcnJlbGF0aW9uIHdpdGggbmF2aWdhdGlvbiBzdGVwcyBvbiBhIHNoYXJlZCB0aW1lbGluZS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlCbGFja2JveEZvcm1FdmVudCB7XHJcbiAgLyoqIFRpbWVzdGFtcCAobXMpIG9mIHRoZSBldmVudC4gKi9cclxuICB0aW1lc3RhbXA6IG51bWJlcjtcclxuXHJcbiAgLyoqIFJvdXRlIFVSTCB3aGVyZSB0aGUgZXZlbnQgb2NjdXJyZWQuICovXHJcbiAgcm91dGU6IHN0cmluZztcclxuXHJcbiAgLyoqIFNjaGVtYSBgaWRgIG9mIHRoZSBgVWlGb3JtQnVpbGRlckNvbXBvbmVudGAgdGhhdCBvd25zIHRoZSBmaWVsZC4gKi9cclxuICBmb3JtSWQ6IHN0cmluZztcclxuXHJcbiAgLyoqIGBrZXlgIG9mIHRoZSBmaWVsZCBkZXNjcmlwdG9yIGZyb20gdGhlIGZvcm0gc2NoZW1hLiAqL1xyXG4gIGZpZWxkS2V5OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBUeXBlIG9mIGZvcm0gaW50ZXJhY3Rpb24uICovXHJcbiAgZXZlbnRUeXBlOiBVaUJsYWNrYm94Rm9ybUV2ZW50VHlwZTtcclxuXHJcbiAgLyoqIE9wdGlvbmFsIG1ldGFkYXRhIGRlcGVuZGluZyBvbiBldmVudCB0eXBlIGFuZCBjb25maWcuICovXHJcbiAgbWV0YWRhdGE/OiBVaUJsYWNrYm94Rm9ybUV2ZW50TWV0YWRhdGE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPcHRpb25hbCBtZXRhZGF0YSBhdHRhY2hlZCB0byBhIGBVaUJsYWNrYm94Rm9ybUV2ZW50YC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVWlCbGFja2JveEZvcm1FdmVudE1ldGFkYXRhIHtcclxuICAvKiogRmllbGQgdmFsdWUgKG9ubHkgY2FwdHVyZWQgd2hlbiBgY29uZmlnLmZvcm1UcmFja2luZy50cmFja1ZhbHVlc2AgaXMgYHRydWVgKS4gKi9cclxuICB2YWx1ZT86IGFueTtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIGZpZWxkIGlzIGN1cnJlbnRseSB2YWxpZC4gKi9cclxuICB2YWxpZD86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBMaXN0IG9mIGFjdGl2ZSB2YWxpZGF0aW9uIGVycm9yIGtleXMuICovXHJcbiAgZXJyb3JzPzogc3RyaW5nW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bGwgZm9ybSB2YWx1ZXMgc25hcHNob3QgYXQgdGhlIG1vbWVudCBvZiB0aGUgZXZlbnQuXHJcbiAgICogT25seSBjYXB0dXJlZCB3aGVuIGBjb25maWcuZm9ybVRyYWNraW5nLnRyYWNrVmFsdWVzYCBpcyBgdHJ1ZWAuXHJcbiAgICovXHJcbiAgZm9ybVZhbHVlcz86IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbn1cclxuXHJcbi8vIOKUgOKUgOKUgCBIVFRQIENhbGwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKipcclxuICogQSBzaW5nbGUgaW50ZXJjZXB0ZWQgSFRUUCBjYWxsLlxyXG4gKlxyXG4gKiBPbmx5IHJlcXVlc3RzIGJlYXJpbmcgdGhlIGBYLVVpLUJsYWNrYm94YCBoZWFkZXIgYXJlIGNhcHR1cmVkLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBVaUJsYWNrYm94SHR0cENhbGwge1xyXG4gIC8qKiBUaW1lc3RhbXAgKG1zKSB3aGVuIHRoZSByZXF1ZXN0IHdhcyBpbml0aWF0ZWQuICovXHJcbiAgdGltZXN0YW1wOiBudW1iZXI7XHJcblxyXG4gIC8qKiBIVFRQIG1ldGhvZCAoR0VULCBQT1NULCBQVVQsIERFTEVURSwg4oCmKS4gKi9cclxuICBtZXRob2Q6IHN0cmluZztcclxuXHJcbiAgLyoqIFJlcXVlc3QgVVJMLiAqL1xyXG4gIHVybDogc3RyaW5nO1xyXG5cclxuICAvKiogSFRUUCBzdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UgKHVuZGVmaW5lZCBpZiB0aGUgcmVxdWVzdCBmYWlsZWQpLiAqL1xyXG4gIHN0YXR1cz86IG51bWJlcjtcclxuXHJcbiAgLyoqIFJvdW5kLXRyaXAgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLiAqL1xyXG4gIGR1cmF0aW9uTXM/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBSZXF1ZXN0IGJvZHkgcGF5bG9hZCAoc2VyaWFsaXNhYmxlKS4gKi9cclxuICByZXF1ZXN0UGF5bG9hZD86IGFueTtcclxuXHJcbiAgLyoqIFJlc3BvbnNlIGhlYWRlcnMgZmlsdGVyZWQgYnkgdGhlIGBYLVVpLUJsYWNrYm94LUhlYWRlcnNgIHJlZ2V4LiAqL1xyXG4gIHJlc3BvbnNlSGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcblxyXG4gIC8qKiBUaGUgcmVnZXggcGF0dGVybiB1c2VkIHRvIGZpbHRlciByZXNwb25zZSBoZWFkZXJzLiAqL1xyXG4gIGhlYWRlckZpbHRlcj86IHN0cmluZztcclxufVxyXG5cclxuLy8g4pSA4pSA4pSAIEludGVybmFsIEJ1ZmZlciBFdmVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbi8qKlxyXG4gKiBVbmlvbiB0eXBlIGZvciBhbGwgZXZlbnRzIGZsb3dpbmcgdGhyb3VnaCB0aGUgY2VudHJhbGlzZWQgYnVmZmVyLlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCB0eXBlIFVpQmxhY2tib3hCdWZmZXJFdmVudCA9XHJcbiAgfCB7IGtpbmQ6ICdhY3Rpb24nOyBwYXlsb2FkOiBVaUJsYWNrYm94QWN0aW9uICYgeyByb3V0ZTogc3RyaW5nIH0gfVxyXG4gIHwgeyBraW5kOiAnZm9ybUV2ZW50JzsgcGF5bG9hZDogVWlCbGFja2JveEZvcm1FdmVudCB9XHJcbiAgfCB7IGtpbmQ6ICdodHRwQ2FsbCc7IHBheWxvYWQ6IFVpQmxhY2tib3hIdHRwQ2FsbCB9XHJcbiAgfCB7IGtpbmQ6ICdzdGVwJzsgcGF5bG9hZDogVWlCbGFja2JveFN0ZXAgfTtcclxuXHJcbi8vIOKUgOKUgOKUgCBEZWZhdWx0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbi8qKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gdmFsdWVzLiAqL1xyXG5leHBvcnQgY29uc3QgVUlfQkxBQ0tCT1hfREVGQVVMVFM6IFVpQmxhY2tib3hDb25maWcgPSB7XHJcbiAgbWF4U3RvcmFnZU1iOiA1MCxcclxuICBmbHVzaEludGVydmFsTXM6IDUwMDAsXHJcbiAgZmx1c2hUaHJlc2hvbGQ6IDIwLFxyXG4gIGJ1ZmZlckRlYm91bmNlTXM6IDUwMCxcclxuICBmb3JtVHJhY2tpbmc6IHtcclxuICAgIHRyYWNrVmFsdWVzOiBmYWxzZSxcclxuICAgIHRyYWNrRm9jdXM6IHRydWUsXHJcbiAgICB0cmFja0JsdXI6IHRydWUsXHJcbiAgICB0cmFja1ZhbHVlQ2hhbmdlczogdHJ1ZSxcclxuICAgIHRyYWNrVmFsaWRhdGlvbjogdHJ1ZSxcclxuICAgIGRlYm91bmNlTXM6IDUwMCxcclxuICB9LFxyXG59O1xyXG4iXX0=
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module ng-ui-system/http
|
|
3
|
+
* Message handler — coordinates toast notifications and loader state
|
|
4
|
+
* for the HTTP service pipeline.
|
|
5
|
+
*
|
|
6
|
+
* Extracted as a standalone injectable so it can be tested independently
|
|
7
|
+
* and potentially reused outside HTTP flows.
|
|
8
|
+
*/
|
|
9
|
+
import { Injectable, inject } from '@angular/core';
|
|
10
|
+
import { UiToastService } from '../toast/toast.service';
|
|
11
|
+
import { UiLayoutService } from '../layout-builder/layout.service';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
/**
|
|
14
|
+
* Orchestrates toast notifications and loader state for HTTP requests.
|
|
15
|
+
*
|
|
16
|
+
* Features:
|
|
17
|
+
* - Debounce anti-spam (groups identical messages within 300ms)
|
|
18
|
+
* - Inline message resolution with placeholder replacements
|
|
19
|
+
* - `successMessageResolver` / `errorExtractor` for dynamic messages
|
|
20
|
+
* - Loader integration via `UiLayoutService` (optional)
|
|
21
|
+
*/
|
|
22
|
+
export class UiHttpMessageHandler {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.toast = inject(UiToastService);
|
|
25
|
+
this.layout = inject(UiLayoutService, { optional: true });
|
|
26
|
+
/** Debounce time in milliseconds. */
|
|
27
|
+
this.DEBOUNCE_TIME = 300;
|
|
28
|
+
/** Active debounce timeouts keyed by message content. */
|
|
29
|
+
this.messageTimeouts = new Map();
|
|
30
|
+
}
|
|
31
|
+
// ── Loader ─────────────────────────────────────────────────────────
|
|
32
|
+
/** Show the global loader (via UiLayoutService if available). */
|
|
33
|
+
startLoading() {
|
|
34
|
+
this.layout?.showLoader();
|
|
35
|
+
}
|
|
36
|
+
/** Hide the global loader. */
|
|
37
|
+
stopLoading() {
|
|
38
|
+
this.layout?.hideLoader();
|
|
39
|
+
}
|
|
40
|
+
// ── Success ────────────────────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* Show a success toast for the given endpoint.
|
|
43
|
+
*
|
|
44
|
+
* Resolution priority:
|
|
45
|
+
* 1. `successMessageResolver()` if provided and returns non-null
|
|
46
|
+
* 2. `messages.success` with placeholder replacements
|
|
47
|
+
* 3. No toast if no message is configured
|
|
48
|
+
*/
|
|
49
|
+
showSuccess(endpoint) {
|
|
50
|
+
if (!endpoint.showSuccess)
|
|
51
|
+
return;
|
|
52
|
+
let message = null;
|
|
53
|
+
// Priority 1: custom resolver
|
|
54
|
+
if (endpoint.successMessageResolver) {
|
|
55
|
+
message = endpoint.successMessageResolver();
|
|
56
|
+
}
|
|
57
|
+
// Priority 2: inline message with replacements
|
|
58
|
+
if (!message && endpoint.messages?.success) {
|
|
59
|
+
message = this.applyReplacements(endpoint.messages.success, endpoint.replacements);
|
|
60
|
+
}
|
|
61
|
+
if (message) {
|
|
62
|
+
this.debounceToast(message, 'success');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// ── Error ──────────────────────────────────────────────────────────
|
|
66
|
+
/**
|
|
67
|
+
* Show an error toast for the given endpoint.
|
|
68
|
+
*
|
|
69
|
+
* Resolution priority:
|
|
70
|
+
* 1. `errorExtractor(error)` if provided and returns non-null
|
|
71
|
+
* 2. `messages.error` with placeholder replacements
|
|
72
|
+
* 3. `fallbackMessage` if everything else is empty
|
|
73
|
+
*/
|
|
74
|
+
showError(endpoint, error, fallbackMessage) {
|
|
75
|
+
if (!endpoint.showError)
|
|
76
|
+
return;
|
|
77
|
+
let message = null;
|
|
78
|
+
// Priority 1: error extractor
|
|
79
|
+
if (endpoint.errorExtractor && error) {
|
|
80
|
+
message = endpoint.errorExtractor(error);
|
|
81
|
+
}
|
|
82
|
+
// Priority 2: inline message
|
|
83
|
+
if (!message && endpoint.messages?.error) {
|
|
84
|
+
message = this.applyReplacements(endpoint.messages.error, endpoint.replacements);
|
|
85
|
+
}
|
|
86
|
+
if (message) {
|
|
87
|
+
this.debounceToast(message, 'error');
|
|
88
|
+
}
|
|
89
|
+
else if (fallbackMessage) {
|
|
90
|
+
this.debounceToast(fallbackMessage, 'error');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// ── Custom messages ────────────────────────────────────────────────
|
|
94
|
+
/** Show a custom success toast (not tied to an endpoint). */
|
|
95
|
+
showCustomSuccess(message) {
|
|
96
|
+
this.debounceToast(message, 'success');
|
|
97
|
+
}
|
|
98
|
+
/** Show a custom error toast (not tied to an endpoint). */
|
|
99
|
+
showCustomError(message) {
|
|
100
|
+
this.debounceToast(message, 'error');
|
|
101
|
+
}
|
|
102
|
+
// ── Cleanup ────────────────────────────────────────────────────────
|
|
103
|
+
/** Cancel all pending debounce timeouts. */
|
|
104
|
+
clearAllTimeouts() {
|
|
105
|
+
this.messageTimeouts.forEach(t => clearTimeout(t));
|
|
106
|
+
this.messageTimeouts.clear();
|
|
107
|
+
}
|
|
108
|
+
// ── Internals ──────────────────────────────────────────────────────
|
|
109
|
+
/**
|
|
110
|
+
* Debounce mechanism for toast messages.
|
|
111
|
+
* If the same message is requested within DEBOUNCE_TIME ms,
|
|
112
|
+
* only the last one is shown.
|
|
113
|
+
*/
|
|
114
|
+
debounceToast(message, type) {
|
|
115
|
+
const existing = this.messageTimeouts.get(message);
|
|
116
|
+
if (existing)
|
|
117
|
+
clearTimeout(existing);
|
|
118
|
+
const timeout = setTimeout(() => {
|
|
119
|
+
this.toast[type](message);
|
|
120
|
+
this.messageTimeouts.delete(message);
|
|
121
|
+
}, this.DEBOUNCE_TIME);
|
|
122
|
+
this.messageTimeouts.set(message, timeout);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Replace `${key}` placeholders in a message string.
|
|
126
|
+
*/
|
|
127
|
+
applyReplacements(message, replacements) {
|
|
128
|
+
if (!replacements)
|
|
129
|
+
return message;
|
|
130
|
+
let result = message;
|
|
131
|
+
Object.entries(replacements).forEach(([key, value]) => {
|
|
132
|
+
result = result.replace(new RegExp(`\\$\\{${key}\\}`, 'g'), String(value));
|
|
133
|
+
});
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiHttpMessageHandler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
137
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiHttpMessageHandler, providedIn: 'root' }); }
|
|
138
|
+
}
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UiHttpMessageHandler, decorators: [{
|
|
140
|
+
type: Injectable,
|
|
141
|
+
args: [{ providedIn: 'root' }]
|
|
142
|
+
}] });
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tZXNzYWdlLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy11aS1zeXN0ZW0vc3JjL2xpYi9jb21wb25lbnRzL2h0dHAvaHR0cC1tZXNzYWdlLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBRW5FOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQURqQztRQUVxQixVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9CLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFdEUscUNBQXFDO1FBQ3BCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO1FBRXJDLHlEQUF5RDtRQUN4QyxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO0tBaUl2RjtJQS9IRyxzRUFBc0U7SUFFdEUsaUVBQWlFO0lBQ2pFLFlBQVk7UUFDUixJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsV0FBVztRQUNQLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELHNFQUFzRTtJQUV0RTs7Ozs7OztPQU9HO0lBQ0gsV0FBVyxDQUFDLFFBQW9CO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztZQUFFLE9BQU87UUFFbEMsSUFBSSxPQUFPLEdBQWtCLElBQUksQ0FBQztRQUVsQyw4QkFBOEI7UUFD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RDs7T0FFRztJQUNLLGlCQUFpQixDQUNyQixPQUFlLEVBQ2YsWUFBOEM7UUFFOUMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUNsQyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ2xELE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOytHQXhJUSxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQURQLE1BQU07OzRGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBtb2R1bGUgbmctdWktc3lzdGVtL2h0dHBcclxuICogTWVzc2FnZSBoYW5kbGVyIOKAlCBjb29yZGluYXRlcyB0b2FzdCBub3RpZmljYXRpb25zIGFuZCBsb2FkZXIgc3RhdGVcclxuICogZm9yIHRoZSBIVFRQIHNlcnZpY2UgcGlwZWxpbmUuXHJcbiAqXHJcbiAqIEV4dHJhY3RlZCBhcyBhIHN0YW5kYWxvbmUgaW5qZWN0YWJsZSBzbyBpdCBjYW4gYmUgdGVzdGVkIGluZGVwZW5kZW50bHlcclxuICogYW5kIHBvdGVudGlhbGx5IHJldXNlZCBvdXRzaWRlIEhUVFAgZmxvd3MuXHJcbiAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgVWlFbmRwb2ludCB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvaW5kZXgnO1xyXG5pbXBvcnQgeyBVaVRvYXN0U2VydmljZSB9IGZyb20gJy4uL3RvYXN0L3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUxheW91dFNlcnZpY2UgfSBmcm9tICcuLi9sYXlvdXQtYnVpbGRlci9sYXlvdXQuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogT3JjaGVzdHJhdGVzIHRvYXN0IG5vdGlmaWNhdGlvbnMgYW5kIGxvYWRlciBzdGF0ZSBmb3IgSFRUUCByZXF1ZXN0cy5cclxuICpcclxuICogRmVhdHVyZXM6XHJcbiAqIC0gRGVib3VuY2UgYW50aS1zcGFtIChncm91cHMgaWRlbnRpY2FsIG1lc3NhZ2VzIHdpdGhpbiAzMDBtcylcclxuICogLSBJbmxpbmUgbWVzc2FnZSByZXNvbHV0aW9uIHdpdGggcGxhY2Vob2xkZXIgcmVwbGFjZW1lbnRzXHJcbiAqIC0gYHN1Y2Nlc3NNZXNzYWdlUmVzb2x2ZXJgIC8gYGVycm9yRXh0cmFjdG9yYCBmb3IgZHluYW1pYyBtZXNzYWdlc1xyXG4gKiAtIExvYWRlciBpbnRlZ3JhdGlvbiB2aWEgYFVpTGF5b3V0U2VydmljZWAgKG9wdGlvbmFsKVxyXG4gKi9cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFVpSHR0cE1lc3NhZ2VIYW5kbGVyIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdG9hc3QgPSBpbmplY3QoVWlUb2FzdFNlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYXlvdXQgPSBpbmplY3QoVWlMYXlvdXRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICAgIC8qKiBEZWJvdW5jZSB0aW1lIGluIG1pbGxpc2Vjb25kcy4gKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDMwMDtcclxuXHJcbiAgICAvKiogQWN0aXZlIGRlYm91bmNlIHRpbWVvdXRzIGtleWVkIGJ5IG1lc3NhZ2UgY29udGVudC4gKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVRpbWVvdXRzID0gbmV3IE1hcDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PigpO1xyXG5cclxuICAgIC8vIOKUgOKUgCBMb2FkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gICAgLyoqIFNob3cgdGhlIGdsb2JhbCBsb2FkZXIgKHZpYSBVaUxheW91dFNlcnZpY2UgaWYgYXZhaWxhYmxlKS4gKi9cclxuICAgIHN0YXJ0TG9hZGluZygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxheW91dD8uc2hvd0xvYWRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBIaWRlIHRoZSBnbG9iYWwgbG9hZGVyLiAqL1xyXG4gICAgc3RvcExvYWRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXQ/LmhpZGVMb2FkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDilIDilIAgU3VjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBzdWNjZXNzIHRvYXN0IGZvciB0aGUgZ2l2ZW4gZW5kcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogUmVzb2x1dGlvbiBwcmlvcml0eTpcclxuICAgICAqIDEuIGBzdWNjZXNzTWVzc2FnZVJlc29sdmVyKClgIGlmIHByb3ZpZGVkIGFuZCByZXR1cm5zIG5vbi1udWxsXHJcbiAgICAgKiAyLiBgbWVzc2FnZXMuc3VjY2Vzc2Agd2l0aCBwbGFjZWhvbGRlciByZXBsYWNlbWVudHNcclxuICAgICAqIDMuIE5vIHRvYXN0IGlmIG5vIG1lc3NhZ2UgaXMgY29uZmlndXJlZFxyXG4gICAgICovXHJcbiAgICBzaG93U3VjY2VzcyhlbmRwb2ludDogVWlFbmRwb2ludCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZW5kcG9pbnQuc2hvd1N1Y2Nlc3MpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBQcmlvcml0eSAxOiBjdXN0b20gcmVzb2x2ZXJcclxuICAgICAgICBpZiAoZW5kcG9pbnQuc3VjY2Vzc01lc3NhZ2VSZXNvbHZlcikge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gZW5kcG9pbnQuc3VjY2Vzc01lc3NhZ2VSZXNvbHZlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJpb3JpdHkgMjogaW5saW5lIG1lc3NhZ2Ugd2l0aCByZXBsYWNlbWVudHNcclxuICAgICAgICBpZiAoIW1lc3NhZ2UgJiYgZW5kcG9pbnQubWVzc2FnZXM/LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbWVzc2FnZSA9IHRoaXMuYXBwbHlSZXBsYWNlbWVudHMoZW5kcG9pbnQubWVzc2FnZXMuc3VjY2VzcywgZW5kcG9pbnQucmVwbGFjZW1lbnRzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVib3VuY2VUb2FzdChtZXNzYWdlLCAnc3VjY2VzcycpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDilIDilIAgRXJyb3Ig4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGFuIGVycm9yIHRvYXN0IGZvciB0aGUgZ2l2ZW4gZW5kcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogUmVzb2x1dGlvbiBwcmlvcml0eTpcclxuICAgICAqIDEuIGBlcnJvckV4dHJhY3RvcihlcnJvcilgIGlmIHByb3ZpZGVkIGFuZCByZXR1cm5zIG5vbi1udWxsXHJcbiAgICAgKiAyLiBgbWVzc2FnZXMuZXJyb3JgIHdpdGggcGxhY2Vob2xkZXIgcmVwbGFjZW1lbnRzXHJcbiAgICAgKiAzLiBgZmFsbGJhY2tNZXNzYWdlYCBpZiBldmVyeXRoaW5nIGVsc2UgaXMgZW1wdHlcclxuICAgICAqL1xyXG4gICAgc2hvd0Vycm9yKGVuZHBvaW50OiBVaUVuZHBvaW50LCBlcnJvcj86IGFueSwgZmFsbGJhY2tNZXNzYWdlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlbmRwb2ludC5zaG93RXJyb3IpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IG1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBQcmlvcml0eSAxOiBlcnJvciBleHRyYWN0b3JcclxuICAgICAgICBpZiAoZW5kcG9pbnQuZXJyb3JFeHRyYWN0b3IgJiYgZXJyb3IpIHtcclxuICAgICAgICAgICAgbWVzc2FnZSA9IGVuZHBvaW50LmVycm9yRXh0cmFjdG9yKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFByaW9yaXR5IDI6IGlubGluZSBtZXNzYWdlXHJcbiAgICAgICAgaWYgKCFtZXNzYWdlICYmIGVuZHBvaW50Lm1lc3NhZ2VzPy5lcnJvcikge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gdGhpcy5hcHBseVJlcGxhY2VtZW50cyhlbmRwb2ludC5tZXNzYWdlcy5lcnJvciwgZW5kcG9pbnQucmVwbGFjZW1lbnRzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVib3VuY2VUb2FzdChtZXNzYWdlLCAnZXJyb3InKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZhbGxiYWNrTWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlYm91bmNlVG9hc3QoZmFsbGJhY2tNZXNzYWdlLCAnZXJyb3InKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g4pSA4pSAIEN1c3RvbSBtZXNzYWdlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgICAvKiogU2hvdyBhIGN1c3RvbSBzdWNjZXNzIHRvYXN0IChub3QgdGllZCB0byBhbiBlbmRwb2ludCkuICovXHJcbiAgICBzaG93Q3VzdG9tU3VjY2VzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRlYm91bmNlVG9hc3QobWVzc2FnZSwgJ3N1Y2Nlc3MnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvdyBhIGN1c3RvbSBlcnJvciB0b2FzdCAobm90IHRpZWQgdG8gYW4gZW5kcG9pbnQpLiAqL1xyXG4gICAgc2hvd0N1c3RvbUVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVib3VuY2VUb2FzdChtZXNzYWdlLCAnZXJyb3InKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDilIDilIAgQ2xlYW51cCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgICAvKiogQ2FuY2VsIGFsbCBwZW5kaW5nIGRlYm91bmNlIHRpbWVvdXRzLiAqL1xyXG4gICAgY2xlYXJBbGxUaW1lb3V0cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VUaW1lb3V0cy5mb3JFYWNoKHQgPT4gY2xlYXJUaW1lb3V0KHQpKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VUaW1lb3V0cy5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWJvdW5jZSBtZWNoYW5pc20gZm9yIHRvYXN0IG1lc3NhZ2VzLlxyXG4gICAgICogSWYgdGhlIHNhbWUgbWVzc2FnZSBpcyByZXF1ZXN0ZWQgd2l0aGluIERFQk9VTkNFX1RJTUUgbXMsXHJcbiAgICAgKiBvbmx5IHRoZSBsYXN0IG9uZSBpcyBzaG93bi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkZWJvdW5jZVRvYXN0KG1lc3NhZ2U6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5tZXNzYWdlVGltZW91dHMuZ2V0KG1lc3NhZ2UpO1xyXG4gICAgICAgIGlmIChleGlzdGluZykgY2xlYXJUaW1lb3V0KGV4aXN0aW5nKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0W3R5cGVdKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VUaW1lb3V0cy5kZWxldGUobWVzc2FnZSk7XHJcbiAgICAgICAgfSwgdGhpcy5ERUJPVU5DRV9USU1FKTtcclxuXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlVGltZW91dHMuc2V0KG1lc3NhZ2UsIHRpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVwbGFjZSBgJHtrZXl9YCBwbGFjZWhvbGRlcnMgaW4gYSBtZXNzYWdlIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBhcHBseVJlcGxhY2VtZW50cyhcclxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICAgICAgcmVwbGFjZW1lbnRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPixcclxuICAgICk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFyZXBsYWNlbWVudHMpIHJldHVybiBtZXNzYWdlO1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBtZXNzYWdlO1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlcGxhY2VtZW50cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwkXFxcXHske2tleX1cXFxcfWAsICdnJyksIFN0cmluZyh2YWx1ZSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuIl19
|