@bravobit/bb-foundation 0.15.4 → 0.16.1
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/auth/lib/auth.interceptor.d.ts +1 -1
- package/auth/lib/auth.service.d.ts +1 -1
- package/auth/package.json +5 -5
- package/collections/package.json +5 -5
- package/controls/bravobit-bb-foundation-controls.d.ts +5 -0
- package/controls/lib/checkbox/checkbox.component.d.ts +27 -0
- package/controls/lib/checkbox/checkbox.module.d.ts +9 -0
- package/controls/lib/controls.module.d.ts +7 -0
- package/controls/package.json +10 -0
- package/controls/public_api.d.ts +3 -0
- package/dashboard/package.json +5 -5
- package/dialog/package.json +5 -5
- package/elements/package.json +5 -5
- package/{esm2015/auth/bravobit-bb-foundation-auth.js → esm2020/auth/bravobit-bb-foundation-auth.mjs} +0 -0
- package/esm2020/auth/lib/auth.interceptor.mjs +94 -0
- package/{esm2015/auth/lib/auth.module.js → esm2020/auth/lib/auth.module.mjs} +5 -5
- package/esm2020/auth/lib/auth.service.mjs +276 -0
- package/esm2020/auth/lib/auth.session.mjs +131 -0
- package/{esm2015/auth/lib/directives/authenticated.directive.js → esm2020/auth/lib/directives/authenticated.directive.mjs} +5 -6
- package/esm2020/auth/lib/directives/permission.directive.mjs +80 -0
- package/esm2020/auth/lib/directives/role.directive.mjs +37 -0
- package/esm2020/auth/lib/guards/anonymous.guard.mjs +34 -0
- package/esm2020/auth/lib/guards/authenticated.guard.mjs +35 -0
- package/{esm2015/auth/lib/helpers/jwt.helper.js → esm2020/auth/lib/helpers/jwt.helper.mjs} +3 -3
- package/{esm2015/auth/lib/helpers/mapper.helper.js → esm2020/auth/lib/helpers/mapper.helper.mjs} +4 -4
- package/{esm2015/auth/lib/interfaces/config.interface.js → esm2020/auth/lib/interfaces/config.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/mapper.interface.js → esm2020/auth/lib/interfaces/mapper.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/provider.interface.js → esm2020/auth/lib/interfaces/provider.interface.mjs} +0 -0
- package/{esm2015/auth/lib/interfaces/token.interface.js → esm2020/auth/lib/interfaces/token.interface.mjs} +0 -0
- package/esm2020/auth/lib/permissions.service.mjs +56 -0
- package/esm2020/auth/lib/providers/email.provider.mjs +25 -0
- package/esm2020/auth/lib/providers/verify.provider.mjs +19 -0
- package/{esm2015/auth/lib/tokens/use-authorization.token.js → esm2020/auth/lib/tokens/use-authorization.token.mjs} +0 -0
- package/{esm2015/auth/public_api.js → esm2020/auth/public_api.mjs} +0 -0
- package/{esm2015/bravobit-bb-foundation.js → esm2020/bravobit-bb-foundation.mjs} +0 -0
- package/{esm2015/collections/bravobit-bb-foundation-collections.js → esm2020/collections/bravobit-bb-foundation-collections.mjs} +0 -0
- package/esm2020/collections/lib/collection.mjs +98 -0
- package/{esm2015/collections/lib/collections.module.js → esm2020/collections/lib/collections.module.mjs} +5 -5
- package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +123 -0
- package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +31 -0
- package/{esm2015/collections/lib/components/collections.directive.js → esm2020/collections/lib/components/collections.directive.mjs} +13 -13
- package/{esm2015/collections/lib/interfaces/collection.interface.js → esm2020/collections/lib/interfaces/collection.interface.mjs} +0 -0
- package/esm2020/collections/lib/providers/api-collection.provider.mjs +68 -0
- package/esm2020/collections/lib/providers/collection.provider.mjs +13 -0
- package/{esm2015/collections/lib/providers/local-collection.provider.js → esm2020/collections/lib/providers/local-collection.provider.mjs} +0 -0
- package/{esm2015/collections/public_api.js → esm2020/collections/public_api.mjs} +0 -0
- package/esm2020/controls/bravobit-bb-foundation-controls.mjs +5 -0
- package/esm2020/controls/lib/checkbox/checkbox.component.mjs +86 -0
- package/esm2020/controls/lib/checkbox/checkbox.module.mjs +19 -0
- package/esm2020/controls/lib/controls.module.mjs +16 -0
- package/esm2020/controls/public_api.mjs +4 -0
- package/{esm2015/dashboard/bravobit-bb-foundation-dashboard.js → esm2020/dashboard/bravobit-bb-foundation-dashboard.mjs} +0 -0
- package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +56 -0
- package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +30 -0
- package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +31 -0
- package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +29 -0
- package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +75 -0
- package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +99 -0
- package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +62 -0
- package/{esm2015/dashboard/lib/dashboard.module.js → esm2020/dashboard/lib/dashboard.module.mjs} +5 -5
- package/{esm2015/dashboard/public_api.js → esm2020/dashboard/public_api.mjs} +0 -0
- package/{esm2015/dialog/bravobit-bb-foundation-dialog.js → esm2020/dialog/bravobit-bb-foundation-dialog.mjs} +0 -0
- package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +12 -0
- package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +37 -0
- package/{esm2015/dialog/lib/dialog-container/dialog-container.component.js → esm2020/dialog/lib/dialog-container/dialog-container.component.mjs} +6 -15
- package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +25 -0
- package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +11 -0
- package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +46 -0
- package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +134 -0
- package/{esm2015/dialog/lib/dialog.injector.js → esm2020/dialog/lib/dialog.injector.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.insertion.js → esm2020/dialog/lib/dialog.insertion.mjs} +4 -4
- package/{esm2015/dialog/lib/dialog.interfaces.js → esm2020/dialog/lib/dialog.interfaces.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.module.js → esm2020/dialog/lib/dialog.module.mjs} +5 -9
- package/{esm2015/dialog/lib/dialog.ref.js → esm2020/dialog/lib/dialog.ref.mjs} +0 -0
- package/{esm2015/dialog/lib/dialog.service.js → esm2020/dialog/lib/dialog.service.mjs} +5 -5
- package/{esm2015/dialog/public_api.js → esm2020/dialog/public_api.mjs} +0 -0
- package/{esm2015/elements/bravobit-bb-foundation-elements.js → esm2020/elements/bravobit-bb-foundation-elements.mjs} +0 -0
- package/esm2020/elements/lib/avatar/avatar.component.mjs +142 -0
- package/esm2020/elements/lib/button/button.component.mjs +61 -0
- package/esm2020/elements/lib/checkbox/checkbox.component.mjs +73 -0
- package/esm2020/elements/lib/date-picker/date-picker.component.mjs +304 -0
- package/{esm2015/elements/lib/directives/addon.directive.js → esm2020/elements/lib/directives/addon.directive.mjs} +7 -7
- package/esm2020/elements/lib/directives/autosize.directive.mjs +72 -0
- package/{esm2015/elements/lib/directives/focus-trap.directive.js → esm2020/elements/lib/directives/focus-trap.directive.mjs} +4 -4
- package/{esm2015/elements/lib/directives/focus.directive.js → esm2020/elements/lib/directives/focus.directive.mjs} +4 -4
- package/esm2020/elements/lib/directives/form-submit.directive.mjs +50 -0
- package/esm2020/elements/lib/directives/input.directive.mjs +136 -0
- package/{esm2015/elements/lib/directives/template.directive.js → esm2020/elements/lib/directives/template.directive.mjs} +4 -4
- package/esm2020/elements/lib/dropdown/dropdown.component.mjs +100 -0
- package/{esm2015/elements/lib/elements.interfaces.js → esm2020/elements/lib/elements.interfaces.mjs} +0 -0
- package/{esm2015/elements/lib/elements.module.js → esm2020/elements/lib/elements.module.mjs} +5 -5
- package/esm2020/elements/lib/file-picker/file-picker.component.mjs +236 -0
- package/esm2020/elements/lib/form-control/form-control.component.mjs +49 -0
- package/esm2020/elements/lib/form-error/form-error.component.mjs +108 -0
- package/esm2020/elements/lib/form-group/form-group.component.mjs +18 -0
- package/esm2020/elements/lib/icon/icon.component.mjs +102 -0
- package/esm2020/elements/lib/image-picker/image-picker.component.mjs +106 -0
- package/esm2020/elements/lib/pipes/file-image.pipe.mjs +42 -0
- package/{esm2015/elements/lib/pipes/file-size.pipe.js → esm2020/elements/lib/pipes/file-size.pipe.mjs} +4 -4
- package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +94 -0
- package/esm2020/elements/lib/spinner/spinner.component.mjs +25 -0
- package/esm2020/elements/lib/tag/tag.component.mjs +18 -0
- package/{esm2015/elements/public_api.js → esm2020/elements/public_api.mjs} +0 -0
- package/{esm2015/http/bravobit-bb-foundation-http.js → esm2020/http/bravobit-bb-foundation-http.mjs} +0 -0
- package/esm2020/http/lib/classes/http.config.mjs +29 -0
- package/esm2020/http/lib/classes/http.error.mjs +20 -0
- package/{esm2015/http/lib/http.interfaces.js → esm2020/http/lib/http.interfaces.mjs} +0 -0
- package/{esm2015/http/lib/http.module.js → esm2020/http/lib/http.module.mjs} +5 -5
- package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +50 -0
- package/esm2020/http/lib/interceptors/error.interceptor.mjs +32 -0
- package/{esm2015/http/public_api.js → esm2020/http/public_api.mjs} +0 -0
- package/{esm2015/lib/core/coercions/boolean-coercion.js → esm2020/lib/core/coercions/boolean-coercion.mjs} +0 -0
- package/{esm2015/lib/core/miscellaneous/regex.js → esm2020/lib/core/miscellaneous/regex.mjs} +0 -0
- package/esm2020/lib/core/miscellaneous/validator.mjs +85 -0
- package/{esm2015/lib/core/mixins/can-disable.js → esm2020/lib/core/mixins/can-disable.mjs} +0 -0
- package/{esm2015/lib/core/mixins/can-hide-errors.js → esm2020/lib/core/mixins/can-hide-errors.mjs} +0 -0
- package/{esm2015/lib/core/mixins/can-load.js → esm2020/lib/core/mixins/can-load.mjs} +0 -0
- package/{esm2015/lib/core/mixins/constructor.js → esm2020/lib/core/mixins/constructor.mjs} +0 -0
- package/{esm2015/lib/core/mixins/has-error.js → esm2020/lib/core/mixins/has-error.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-focused.js → esm2020/lib/core/mixins/is-focused.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-grouped.js → esm2020/lib/core/mixins/is-grouped.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-readonly.js → esm2020/lib/core/mixins/is-readonly.mjs} +0 -0
- package/{esm2015/lib/core/mixins/is-required.js → esm2020/lib/core/mixins/is-required.mjs} +0 -0
- package/esm2020/lib/core/services/clipboard.service.mjs +70 -0
- package/esm2020/lib/core/services/exif.service.mjs +163 -0
- package/esm2020/lib/core/services/file-loader.service.mjs +87 -0
- package/esm2020/lib/core/services/image-converter.service.mjs +123 -0
- package/{esm2015/lib/core/services/languages.service.js → esm2020/lib/core/services/languages.service.mjs} +4 -4
- package/{esm2015/lib/core/services/network.service.js → esm2020/lib/core/services/network.service.mjs} +5 -6
- package/esm2020/lib/core/services/patch.service.mjs +63 -0
- package/{esm2015/lib/core/services/platform.service.js → esm2020/lib/core/services/platform.service.mjs} +5 -5
- package/{esm2015/lib/core/tokens/accept-language.token.js → esm2020/lib/core/tokens/accept-language.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/base-url.token.js → esm2020/lib/core/tokens/base-url.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/cookie.token.js → esm2020/lib/core/tokens/cookie.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/location.token.js → esm2020/lib/core/tokens/location.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/navigator.token.js → esm2020/lib/core/tokens/navigator.token.mjs} +0 -0
- package/{esm2015/lib/core/tokens/window.token.js → esm2020/lib/core/tokens/window.token.mjs} +0 -0
- package/{esm2015/localize/bravobit-bb-foundation-localize.js → esm2020/localize/bravobit-bb-foundation-localize.mjs} +0 -0
- package/{esm2015/localize/lib/functions/date.function.js → esm2020/localize/lib/functions/date.function.mjs} +0 -0
- package/{esm2015/localize/lib/functions/lowercase.function.js → esm2020/localize/lib/functions/lowercase.function.mjs} +0 -0
- package/{esm2015/localize/lib/functions/uppercase.function.js → esm2020/localize/lib/functions/uppercase.function.mjs} +0 -0
- package/{esm2015/localize/lib/handlers/missing.handler.js → esm2020/localize/lib/handlers/missing.handler.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/config.interfaces.js → esm2020/localize/lib/interfaces/config.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/dictionary.interfaces.js → esm2020/localize/lib/interfaces/dictionary.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/functions.interfaces.js → esm2020/localize/lib/interfaces/functions.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/handlers.interfaces.js → esm2020/localize/lib/interfaces/handlers.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/interfaces/options.interfaces.js → esm2020/localize/lib/interfaces/options.interfaces.mjs} +0 -0
- package/{esm2015/localize/lib/localizations/dutch.localization.js → esm2020/localize/lib/localizations/dutch.localization.mjs} +0 -0
- package/{esm2015/localize/lib/localizations/english.localization.js → esm2020/localize/lib/localizations/english.localization.mjs} +0 -0
- package/esm2020/localize/lib/localize.dictionary.mjs +135 -0
- package/{esm2015/localize/lib/localize.module.js → esm2020/localize/lib/localize.module.mjs} +5 -5
- package/{esm2015/localize/lib/localize.pipe.js → esm2020/localize/lib/localize.pipe.mjs} +5 -5
- package/esm2020/localize/lib/localize.service.mjs +277 -0
- package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +88 -0
- package/{esm2015/localize/lib/views/localize-template-or-string.directive.js → esm2020/localize/lib/views/localize-template-or-string.directive.mjs} +4 -4
- package/{esm2015/localize/lib/views/localize-template.directive.js → esm2020/localize/lib/views/localize-template.directive.mjs} +4 -4
- package/{esm2015/localize/public_api.js → esm2020/localize/public_api.mjs} +0 -0
- package/{esm2015/notifications/bravobit-bb-foundation-notifications.js → esm2020/notifications/bravobit-bb-foundation-notifications.mjs} +0 -0
- package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +100 -0
- package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +47 -0
- package/{esm2015/notifications/lib/notifications.animations.js → esm2020/notifications/lib/notifications.animations.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.injector.js → esm2020/notifications/lib/notifications.injector.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.interfaces.js → esm2020/notifications/lib/notifications.interfaces.mjs} +0 -0
- package/{esm2015/notifications/lib/notifications.module.js → esm2020/notifications/lib/notifications.module.mjs} +6 -7
- package/{esm2015/notifications/lib/notifications.service.js → esm2020/notifications/lib/notifications.service.mjs} +5 -5
- package/{esm2015/notifications/public_api.js → esm2020/notifications/public_api.mjs} +0 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/{esm2015/recaptcha/bravobit-bb-foundation-recaptcha.js → esm2020/recaptcha/bravobit-bb-foundation-recaptcha.mjs} +0 -0
- package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +185 -0
- package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +90 -0
- package/{esm2015/recaptcha/lib/recaptcha.interface.js → esm2020/recaptcha/lib/recaptcha.interface.mjs} +0 -0
- package/{esm2015/recaptcha/lib/recaptcha.module.js → esm2020/recaptcha/lib/recaptcha.module.mjs} +5 -5
- package/{esm2015/recaptcha/public_api.js → esm2020/recaptcha/public_api.mjs} +0 -0
- package/{esm2015/rxjs/bravobit-bb-foundation-rxjs.js → esm2020/rxjs/bravobit-bb-foundation-rxjs.mjs} +0 -0
- package/esm2020/rxjs/lib/operators/combine-latest-map.operator.mjs +10 -0
- package/{esm2015/rxjs/lib/operators/filter-nil.operator.js → esm2020/rxjs/lib/operators/filter-nil.operator.mjs} +0 -0
- package/{esm2015/rxjs/public_api.js → esm2020/rxjs/public_api.mjs} +0 -0
- package/{esm2015/storage/bravobit-bb-foundation-storage.js → esm2020/storage/bravobit-bb-foundation-storage.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/attributes.interface.js → esm2020/storage/lib/interfaces/attributes.interface.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/memory.interface.js → esm2020/storage/lib/interfaces/memory.interface.mjs} +0 -0
- package/{esm2015/storage/lib/interfaces/strategy.interface.js → esm2020/storage/lib/interfaces/strategy.interface.mjs} +0 -0
- package/esm2020/storage/lib/storage.service.mjs +109 -0
- package/esm2020/storage/lib/strategies/cookie-storage.strategy.mjs +142 -0
- package/{esm2015/storage/lib/strategies/memory-storage.strategy.js → esm2020/storage/lib/strategies/memory-storage.strategy.mjs} +2 -2
- package/esm2020/storage/lib/strategies/polyfill-storage.strategy.mjs +102 -0
- package/{esm2015/storage/public_api.js → esm2020/storage/public_api.mjs} +0 -0
- package/{esm2015/table/bravobit-bb-foundation-table.js → esm2020/table/bravobit-bb-foundation-table.mjs} +0 -0
- package/esm2020/table/lib/components/table/table.component.mjs +191 -0
- package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +11 -0
- package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +131 -0
- package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +136 -0
- package/esm2020/table/lib/data/datasource.data.mjs +32 -0
- package/esm2020/table/lib/data/generic.data.mjs +72 -0
- package/{esm2015/table/lib/interfaces/datasource.interface.js → esm2020/table/lib/interfaces/datasource.interface.mjs} +0 -0
- package/{esm2015/table/lib/interfaces/table.interfaces.js → esm2020/table/lib/interfaces/table.interfaces.mjs} +0 -0
- package/{esm2015/table/lib/table.module.js → esm2020/table/lib/table.module.mjs} +5 -5
- package/{esm2015/table/public_api.js → esm2020/table/public_api.mjs} +0 -0
- package/fesm2015/{bravobit-bb-foundation-auth.js → bravobit-bb-foundation-auth.mjs} +79 -68
- package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-collections.js → bravobit-bb-foundation-collections.mjs} +33 -47
- package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-controls.mjs +123 -0
- package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs +416 -0
- package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-dialog.js → bravobit-bb-foundation-dialog.mjs} +45 -106
- package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-elements.js → bravobit-bb-foundation-elements.mjs} +193 -302
- package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-http.js → bravobit-bb-foundation-http.mjs} +18 -16
- package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-localize.js → bravobit-bb-foundation-localize.mjs} +63 -69
- package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-notifications.mjs +377 -0
- package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-recaptcha.js → bravobit-bb-foundation-recaptcha.mjs} +40 -47
- package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-rxjs.js → bravobit-bb-foundation-rxjs.mjs} +1 -1
- package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation-storage.js → bravobit-bb-foundation-storage.mjs} +12 -10
- package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -0
- package/fesm2015/bravobit-bb-foundation-table.mjs +603 -0
- package/fesm2015/bravobit-bb-foundation-table.mjs.map +1 -0
- package/fesm2015/{bravobit-bb-foundation.js → bravobit-bb-foundation.mjs} +74 -64
- package/fesm2015/bravobit-bb-foundation.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-auth.mjs +928 -0
- package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-collections.mjs +434 -0
- package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-controls.mjs +121 -0
- package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs +404 -0
- package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-dialog.mjs +584 -0
- package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-elements.mjs +1993 -0
- package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-http.mjs +168 -0
- package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-localize.mjs +832 -0
- package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-notifications.mjs +375 -0
- package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +300 -0
- package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-rxjs.mjs +21 -0
- package/fesm2020/bravobit-bb-foundation-rxjs.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-storage.mjs +413 -0
- package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation-table.mjs +592 -0
- package/fesm2020/bravobit-bb-foundation-table.mjs.map +1 -0
- package/fesm2020/bravobit-bb-foundation.mjs +895 -0
- package/fesm2020/bravobit-bb-foundation.mjs.map +1 -0
- package/http/package.json +5 -5
- package/localize/package.json +5 -5
- package/notifications/package.json +5 -5
- package/package.json +125 -8
- package/recaptcha/package.json +5 -5
- package/rxjs/package.json +5 -5
- package/storage/package.json +5 -5
- package/table/lib/components/table/table.component.d.ts +3 -0
- package/table/package.json +5 -5
- package/bundles/bravobit-bb-foundation-auth.umd.js +0 -1483
- package/bundles/bravobit-bb-foundation-auth.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-collections.umd.js +0 -868
- package/bundles/bravobit-bb-foundation-collections.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-dashboard.umd.js +0 -876
- package/bundles/bravobit-bb-foundation-dashboard.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-dialog.umd.js +0 -716
- package/bundles/bravobit-bb-foundation-dialog.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-elements.umd.js +0 -2768
- package/bundles/bravobit-bb-foundation-elements.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-http.umd.js +0 -535
- package/bundles/bravobit-bb-foundation-http.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-localize.umd.js +0 -1292
- package/bundles/bravobit-bb-foundation-localize.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-notifications.umd.js +0 -794
- package/bundles/bravobit-bb-foundation-notifications.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-recaptcha.umd.js +0 -683
- package/bundles/bravobit-bb-foundation-recaptcha.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-rxjs.umd.js +0 -29
- package/bundles/bravobit-bb-foundation-rxjs.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-storage.umd.js +0 -799
- package/bundles/bravobit-bb-foundation-storage.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation-table.umd.js +0 -1070
- package/bundles/bravobit-bb-foundation-table.umd.js.map +0 -1
- package/bundles/bravobit-bb-foundation.umd.js +0 -1440
- package/bundles/bravobit-bb-foundation.umd.js.map +0 -1
- package/esm2015/auth/lib/auth.interceptor.js +0 -95
- package/esm2015/auth/lib/auth.service.js +0 -299
- package/esm2015/auth/lib/auth.session.js +0 -136
- package/esm2015/auth/lib/directives/permission.directive.js +0 -81
- package/esm2015/auth/lib/directives/role.directive.js +0 -38
- package/esm2015/auth/lib/guards/anonymous.guard.js +0 -35
- package/esm2015/auth/lib/guards/authenticated.guard.js +0 -36
- package/esm2015/auth/lib/permissions.service.js +0 -58
- package/esm2015/auth/lib/providers/email.provider.js +0 -26
- package/esm2015/auth/lib/providers/verify.provider.js +0 -20
- package/esm2015/collections/lib/collection.js +0 -104
- package/esm2015/collections/lib/components/collections-pager/collections-pager.component.js +0 -136
- package/esm2015/collections/lib/components/collections-viewer/collections-viewer.component.js +0 -39
- package/esm2015/collections/lib/providers/api-collection.provider.js +0 -69
- package/esm2015/collections/lib/providers/collection.provider.js +0 -14
- package/esm2015/dashboard/lib/dashboard/dashboard.component.js +0 -64
- package/esm2015/dashboard/lib/dashboard-header/dashboard-header.component.js +0 -41
- package/esm2015/dashboard/lib/dashboard-menu/dashboard-menu.component.js +0 -39
- package/esm2015/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.js +0 -38
- package/esm2015/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.js +0 -83
- package/esm2015/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.js +0 -110
- package/esm2015/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.js +0 -71
- package/esm2015/dialog/lib/dialog-actions/dialog-actions.component.js +0 -20
- package/esm2015/dialog/lib/dialog-confirm/dialog-confirm.component.js +0 -45
- package/esm2015/dialog/lib/dialog-header/dialog-header.component.js +0 -33
- package/esm2015/dialog/lib/dialog-link/dialog-link.component.js +0 -19
- package/esm2015/dialog/lib/dialog-modal/dialog-modal.component.js +0 -54
- package/esm2015/dialog/lib/dialog-overlay/dialog-overlay.component.js +0 -143
- package/esm2015/elements/lib/avatar/avatar.component.js +0 -151
- package/esm2015/elements/lib/button/button.component.js +0 -79
- package/esm2015/elements/lib/checkbox/checkbox.component.js +0 -83
- package/esm2015/elements/lib/date-picker/date-picker.component.js +0 -322
- package/esm2015/elements/lib/directives/autosize.directive.js +0 -74
- package/esm2015/elements/lib/directives/form-submit.directive.js +0 -53
- package/esm2015/elements/lib/directives/input.directive.js +0 -139
- package/esm2015/elements/lib/dropdown/dropdown.component.js +0 -111
- package/esm2015/elements/lib/file-picker/file-picker.component.js +0 -247
- package/esm2015/elements/lib/form-control/form-control.component.js +0 -58
- package/esm2015/elements/lib/form-error/form-error.component.js +0 -116
- package/esm2015/elements/lib/form-group/form-group.component.js +0 -27
- package/esm2015/elements/lib/icon/icon.component.js +0 -110
- package/esm2015/elements/lib/image-picker/image-picker.component.js +0 -119
- package/esm2015/elements/lib/pipes/file-image.pipe.js +0 -45
- package/esm2015/elements/lib/pipes/relative-time.pipe.js +0 -96
- package/esm2015/elements/lib/spinner/spinner.component.js +0 -34
- package/esm2015/elements/lib/tag/tag.component.js +0 -26
- package/esm2015/http/lib/classes/http.config.js +0 -31
- package/esm2015/http/lib/classes/http.error.js +0 -21
- package/esm2015/http/lib/interceptors/base-url.interceptor.js +0 -52
- package/esm2015/http/lib/interceptors/error.interceptor.js +0 -33
- package/esm2015/lib/core/miscellaneous/validator.js +0 -86
- package/esm2015/lib/core/services/clipboard.service.js +0 -72
- package/esm2015/lib/core/services/exif.service.js +0 -168
- package/esm2015/lib/core/services/file-loader.service.js +0 -90
- package/esm2015/lib/core/services/image-converter.service.js +0 -130
- package/esm2015/lib/core/services/patch.service.js +0 -65
- package/esm2015/localize/lib/localize.dictionary.js +0 -137
- package/esm2015/localize/lib/localize.service.js +0 -282
- package/esm2015/localize/lib/views/localize-string/localize-string.component.js +0 -99
- package/esm2015/notifications/lib/notifications-item/notifications-item.component.js +0 -108
- package/esm2015/notifications/lib/notifications-list/notifications-list.component.js +0 -56
- package/esm2015/recaptcha/lib/recaptcha/recaptcha.component.js +0 -199
- package/esm2015/recaptcha/lib/recaptcha-loader.service.js +0 -93
- package/esm2015/rxjs/lib/operators/combine-latest-map.operator.js +0 -7
- package/esm2015/storage/lib/storage.service.js +0 -111
- package/esm2015/storage/lib/strategies/cookie-storage.strategy.js +0 -143
- package/esm2015/storage/lib/strategies/polyfill-storage.strategy.js +0 -102
- package/esm2015/table/lib/components/table/table.component.js +0 -196
- package/esm2015/table/lib/components/table-cell/table-cell.component.js +0 -19
- package/esm2015/table/lib/components/table-header-cell/table-header-cell.component.js +0 -141
- package/esm2015/table/lib/components/table-pager/table-pager.component.js +0 -146
- package/esm2015/table/lib/data/datasource.data.js +0 -32
- package/esm2015/table/lib/data/generic.data.js +0 -73
- package/fesm2015/bravobit-bb-foundation-auth.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-collections.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-dashboard.js +0 -468
- package/fesm2015/bravobit-bb-foundation-dashboard.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-dialog.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-elements.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-http.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-localize.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-notifications.js +0 -393
- package/fesm2015/bravobit-bb-foundation-notifications.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-recaptcha.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-rxjs.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-storage.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation-table.js +0 -626
- package/fesm2015/bravobit-bb-foundation-table.js.map +0 -1
- package/fesm2015/bravobit-bb-foundation.js.map +0 -1
|
@@ -23,10 +23,10 @@ export class HttpModule {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
HttpModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
27
|
-
HttpModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
|
|
28
|
-
HttpModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
26
|
+
HttpModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: HttpModule, deps: [{ token: HttpModule, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
27
|
+
HttpModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: HttpModule, imports: [HttpClientModule] });
|
|
28
|
+
HttpModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: HttpModule, imports: [[HttpClientModule]] });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: HttpModule, decorators: [{
|
|
30
30
|
type: NgModule,
|
|
31
31
|
args: [{
|
|
32
32
|
imports: [HttpClientModule]
|
|
@@ -40,4 +40,4 @@ export const HTTP_CONFIGURATION_DATA = new InjectionToken('HTTP_CONFIGURATION_DA
|
|
|
40
40
|
export function createHttpConfig(data) {
|
|
41
41
|
return new HttpConfig(data);
|
|
42
42
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2h0dHAvc3JjL2xpYi9odHRwLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUF1QixRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7O0FBS2pELE1BQU0sT0FBTyxVQUFVO0lBRW5CLFlBQTRDLE9BQW9CO1FBQXBCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDNUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1NBQ3ZGO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBc0I7UUFDakMsT0FBTztZQUNILFFBQVEsRUFBRSxVQUFVO1lBQ3BCLFNBQVMsRUFBRTtnQkFDUCxFQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDO2dCQUNwRCxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUM7Z0JBQ3BGLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO2dCQUN2RSxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQzthQUN4RTtTQUNKLENBQUM7SUFDTixDQUFDOzt1R0FsQlEsVUFBVSxrQkFFbUMsVUFBVTt3R0FGdkQsVUFBVSxZQUZULGdCQUFnQjt3R0FFakIsVUFBVSxZQUZWLENBQUMsZ0JBQWdCLENBQUM7MkZBRWxCLFVBQVU7a0JBSHRCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzlCOzBEQUd5RCxVQUFVOzBCQUFuRCxRQUFROzswQkFBSSxRQUFROztBQW9CckMsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxjQUFjLENBQWlCLHlCQUF5QixDQUFDLENBQUM7QUFFckcsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQW9CO0lBQ2pELE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0aW9uVG9rZW4sIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCwgU2tpcFNlbGZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIVFRQX0lOVEVSQ0VQVE9SUywgSHR0cENsaWVudE1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtCYXNlVXJsSW50ZXJjZXB0b3J9IGZyb20gJy4vaW50ZXJjZXB0b3JzL2Jhc2UtdXJsLmludGVyY2VwdG9yJztcbmltcG9ydCB7RXJyb3JJbnRlcmNlcHRvcn0gZnJvbSAnLi9pbnRlcmNlcHRvcnMvZXJyb3IuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHtIdHRwQ29uZmlnRGF0YX0gZnJvbSAnLi9odHRwLmludGVyZmFjZXMnO1xuaW1wb3J0IHtIdHRwQ29uZmlnfSBmcm9tICcuL2NsYXNzZXMvaHR0cC5jb25maWcnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBIdHRwTW9kdWxlIHtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgX3BhcmVudD86IEh0dHBNb2R1bGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIdHRwTW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkOyBJbXBvcnQgaXQgaW4gdGhlIGNvcmUgbW9kdWxlIG9ubHkuJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IEh0dHBDb25maWdEYXRhKTogTW9kdWxlV2l0aFByb3ZpZGVyczxIdHRwTW9kdWxlPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogSHR0cE1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBIVFRQX0NPTkZJR1VSQVRJT05fREFUQSwgdXNlVmFsdWU6IGNvbmZpZ30sXG4gICAgICAgICAgICAgICAge3Byb3ZpZGU6IEh0dHBDb25maWcsIHVzZUZhY3Rvcnk6IGNyZWF0ZUh0dHBDb25maWcsIGRlcHM6IFtIVFRQX0NPTkZJR1VSQVRJT05fREFUQV19LFxuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IEJhc2VVcmxJbnRlcmNlcHRvciwgbXVsdGk6IHRydWV9LFxuICAgICAgICAgICAgICAgIHtwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IEVycm9ySW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlfVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cblxufVxuXG5leHBvcnQgY29uc3QgSFRUUF9DT05GSUdVUkFUSU9OX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48SHR0cENvbmZpZ0RhdGE+KCdIVFRQX0NPTkZJR1VSQVRJT05fREFUQScpO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSHR0cENvbmZpZyhkYXRhOiBIdHRwQ29uZmlnRGF0YSkge1xuICAgIHJldHVybiBuZXcgSHR0cENvbmZpZyhkYXRhKTtcbn0iXX0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Injectable, isDevMode } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../classes/http.config";
|
|
4
|
+
export class BaseUrlInterceptor {
|
|
5
|
+
constructor(_config) {
|
|
6
|
+
this._config = _config;
|
|
7
|
+
// Aliases.
|
|
8
|
+
this._aliases = this._config?.aliases;
|
|
9
|
+
this._prefix = this._config?.prefix;
|
|
10
|
+
this._extractRegex = new RegExp(`\\${this._prefix}[a-zA-Z]+`);
|
|
11
|
+
}
|
|
12
|
+
intercept(request, next) {
|
|
13
|
+
const url = this.getUrlBasedOnAlias(request.url);
|
|
14
|
+
const modified = request.clone({ url });
|
|
15
|
+
return next.handle(modified);
|
|
16
|
+
}
|
|
17
|
+
getUrlBasedOnAlias(url) {
|
|
18
|
+
const matches = this._extractRegex.exec(url);
|
|
19
|
+
if (!matches) {
|
|
20
|
+
return url;
|
|
21
|
+
}
|
|
22
|
+
return matches.reduce((previous, current) => {
|
|
23
|
+
const alias = this.getAlias(current);
|
|
24
|
+
if (!alias) {
|
|
25
|
+
return previous;
|
|
26
|
+
}
|
|
27
|
+
return previous.replace(current, alias);
|
|
28
|
+
}, url);
|
|
29
|
+
}
|
|
30
|
+
getAlias(value) {
|
|
31
|
+
const alias = value.replace(this._prefix, '');
|
|
32
|
+
const fetched = this._aliases?.[alias] ?? null;
|
|
33
|
+
if (fetched) {
|
|
34
|
+
return fetched;
|
|
35
|
+
}
|
|
36
|
+
if (isDevMode()) {
|
|
37
|
+
const available = Object.keys(this._aliases)
|
|
38
|
+
.map(item => `\$${item}`)
|
|
39
|
+
.join(', ');
|
|
40
|
+
console?.warn?.(`[HttpModule]: Used an invalid HTTP-alias named "${value}", skipped parsing; Available aliases is one of (${available}).`);
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
BaseUrlInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BaseUrlInterceptor, deps: [{ token: i1.HttpConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
46
|
+
BaseUrlInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BaseUrlInterceptor });
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BaseUrlInterceptor, decorators: [{
|
|
48
|
+
type: Injectable
|
|
49
|
+
}], ctorParameters: function () { return [{ type: i1.HttpConfig }]; } });
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS11cmwuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2h0dHAvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYmFzZS11cmwuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7OztBQUlwRCxNQUFNLE9BQU8sa0JBQWtCO0lBTzNCLFlBQW9CLE9BQW1CO1FBQW5CLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFMdkMsV0FBVztRQUNNLGFBQVEsR0FBc0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDcEQsWUFBTyxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQVcsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxXQUFXLENBQUMsQ0FBQztJQUdsRixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQTZCLEVBQUUsSUFBaUI7UUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUV0QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQVc7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNSLE9BQU8sUUFBUSxDQUFDO2FBQ25CO1lBRUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQWE7UUFDMUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDL0MsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUVELElBQUksU0FBUyxFQUFFLEVBQUU7WUFDYixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7aUJBQ3ZDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7aUJBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsbURBQW1ELEtBQUssb0RBQW9ELFNBQVMsSUFBSSxDQUFDLENBQUM7U0FDOUk7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzsrR0FoRFEsa0JBQWtCO21IQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SHR0cENvbmZpZ0FsaWFzZXN9IGZyb20gJy4uL2h0dHAuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0luamVjdGFibGUsIGlzRGV2TW9kZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDb25maWd9IGZyb20gJy4uL2NsYXNzZXMvaHR0cC5jb25maWcnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmFzZVVybEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICAgIC8vIEFsaWFzZXMuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWxpYXNlczogSHR0cENvbmZpZ0FsaWFzZXMgPSB0aGlzLl9jb25maWc/LmFsaWFzZXM7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHJlZml4OiBzdHJpbmcgPSB0aGlzLl9jb25maWc/LnByZWZpeDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9leHRyYWN0UmVnZXg6IFJlZ0V4cCA9IG5ldyBSZWdFeHAoYFxcXFwke3RoaXMuX3ByZWZpeH1bYS16QS1aXStgKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbmZpZzogSHR0cENvbmZpZykge1xuICAgIH1cblxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmxCYXNlZE9uQWxpYXMocmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBtb2RpZmllZCA9IHJlcXVlc3QuY2xvbmUoe3VybH0pO1xuXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShtb2RpZmllZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcmxCYXNlZE9uQWxpYXModXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMuX2V4dHJhY3RSZWdleC5leGVjKHVybCk7XG4gICAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaGVzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFsaWFzID0gdGhpcy5nZXRBbGlhcyhjdXJyZW50KTtcbiAgICAgICAgICAgIGlmICghYWxpYXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91cy5yZXBsYWNlKGN1cnJlbnQsIGFsaWFzKTtcbiAgICAgICAgfSwgdXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsaWFzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYWxpYXMgPSB2YWx1ZS5yZXBsYWNlKHRoaXMuX3ByZWZpeCwgJycpO1xuICAgICAgICBjb25zdCBmZXRjaGVkID0gdGhpcy5fYWxpYXNlcz8uW2FsaWFzXSA/PyBudWxsO1xuICAgICAgICBpZiAoZmV0Y2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZldGNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZSA9IE9iamVjdC5rZXlzKHRoaXMuX2FsaWFzZXMpXG4gICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IGBcXCQke2l0ZW19YClcbiAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgIGNvbnNvbGU/Lndhcm4/LihgW0h0dHBNb2R1bGVdOiBVc2VkIGFuIGludmFsaWQgSFRUUC1hbGlhcyBuYW1lZCBcIiR7dmFsdWV9XCIsIHNraXBwZWQgcGFyc2luZzsgQXZhaWxhYmxlIGFsaWFzZXMgaXMgb25lIG9mICgke2F2YWlsYWJsZX0pLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { HttpErrorResponse } from '@angular/common/http';
|
|
2
|
+
import { HttpError } from '../classes/http.error';
|
|
3
|
+
import { catchError } from 'rxjs/operators';
|
|
4
|
+
import { Injectable } from '@angular/core';
|
|
5
|
+
import { throwError } from 'rxjs';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../classes/http.config";
|
|
8
|
+
export class ErrorInterceptor {
|
|
9
|
+
constructor(_config) {
|
|
10
|
+
this._config = _config;
|
|
11
|
+
// State.
|
|
12
|
+
this._disabled = this._config?.disableErrorParsing ?? false;
|
|
13
|
+
}
|
|
14
|
+
intercept(request, next) {
|
|
15
|
+
return next.handle(request).pipe(catchError(error => {
|
|
16
|
+
// If we have a matching http error response
|
|
17
|
+
// re-map it with our custom class (if not disabled).
|
|
18
|
+
if (!this._disabled && error instanceof HttpErrorResponse) {
|
|
19
|
+
const parsed = new HttpError(error);
|
|
20
|
+
return throwError(parsed);
|
|
21
|
+
}
|
|
22
|
+
// We did not match anything, just re-trow the error.
|
|
23
|
+
return throwError(error);
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
ErrorInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: ErrorInterceptor, deps: [{ token: i1.HttpConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
28
|
+
ErrorInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: ErrorInterceptor });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: ErrorInterceptor, decorators: [{
|
|
30
|
+
type: Injectable
|
|
31
|
+
}], ctorParameters: function () { return [{ type: i1.HttpConfig }]; } });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2h0dHAvc3JjL2xpYi9pbnRlcmNlcHRvcnMvZXJyb3IuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUE0QyxNQUFNLHNCQUFzQixDQUFDO0FBRWxHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFHaEMsTUFBTSxPQUFPLGdCQUFnQjtJQUt6QixZQUFvQixPQUFtQjtRQUFuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBSHZDLFNBQVM7UUFDUSxjQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsSUFBSSxLQUFLLENBQUM7SUFHeEUsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUE2QixFQUFFLElBQWlCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzVCLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNmLDRDQUE0QztZQUM1QyxxREFBcUQ7WUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO2dCQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDN0I7WUFFRCxxREFBcUQ7WUFDckQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7OzZHQXRCUSxnQkFBZ0I7aUhBQWhCLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SHR0cENvbmZpZ30gZnJvbSAnLi4vY2xhc3Nlcy9odHRwLmNvbmZpZyc7XG5pbXBvcnQge0h0dHBFcnJvcn0gZnJvbSAnLi4vY2xhc3Nlcy9odHRwLmVycm9yJztcbmltcG9ydCB7Y2F0Y2hFcnJvcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFcnJvckludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICAgIC8vIFN0YXRlLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rpc2FibGVkID0gdGhpcy5fY29uZmlnPy5kaXNhYmxlRXJyb3JQYXJzaW5nID8/IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29uZmlnOiBIdHRwQ29uZmlnKSB7XG4gICAgfVxuXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBtYXRjaGluZyBodHRwIGVycm9yIHJlc3BvbnNlXG4gICAgICAgICAgICAgICAgLy8gcmUtbWFwIGl0IHdpdGggb3VyIGN1c3RvbSBjbGFzcyAoaWYgbm90IGRpc2FibGVkKS5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IEh0dHBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gV2UgZGlkIG5vdCBtYXRjaCBhbnl0aGluZywganVzdCByZS10cm93IHRoZSBlcnJvci5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxufVxuIl19
|
|
File without changes
|
|
File without changes
|
package/{esm2015/lib/core/miscellaneous/regex.js → esm2020/lib/core/miscellaneous/regex.mjs}
RENAMED
|
File without changes
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { formatDate } from '@angular/common';
|
|
2
|
+
import { BbRegex } from './regex';
|
|
3
|
+
export class BbValidator {
|
|
4
|
+
static email(control) {
|
|
5
|
+
if (isEmptyInputValue(control.value)) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
return BbRegex.email.test(control.value) ? null : { email: true };
|
|
9
|
+
}
|
|
10
|
+
static fullNumber(control) {
|
|
11
|
+
if (isEmptyInputValue(control.value)) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return BbRegex.fullNumber.test(control.value) ? null : { fullNumber: true };
|
|
15
|
+
}
|
|
16
|
+
static maxFileSize(bytes) {
|
|
17
|
+
const validator = (control) => {
|
|
18
|
+
const value = control.value;
|
|
19
|
+
// Validate if the value is a file.
|
|
20
|
+
if (!(value instanceof File)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
if (value.size <= bytes) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
let maxSize = '0 Bytes';
|
|
27
|
+
if (bytes !== 0) {
|
|
28
|
+
const k = 1024;
|
|
29
|
+
const dm = 2;
|
|
30
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
31
|
+
const index = Math.floor(Math.log(bytes) / Math.log(k));
|
|
32
|
+
maxSize = parseFloat((bytes / Math.pow(k, index)).toFixed(dm)) + ' ' + sizes[index];
|
|
33
|
+
}
|
|
34
|
+
return { maxFileSize: { maxSize } };
|
|
35
|
+
};
|
|
36
|
+
return validator;
|
|
37
|
+
}
|
|
38
|
+
static confirm(fieldName, error = 'confirm') {
|
|
39
|
+
const validator = (control) => {
|
|
40
|
+
if (isEmptyInputValue(control.value)) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const field = control?.parent?.get(fieldName);
|
|
44
|
+
return control?.value === field?.value
|
|
45
|
+
? null
|
|
46
|
+
: { [error]: true };
|
|
47
|
+
};
|
|
48
|
+
return validator;
|
|
49
|
+
}
|
|
50
|
+
static maxDate(date, error = 'maxDate') {
|
|
51
|
+
const formattedDate = date.toString() !== 'Invalid Date'
|
|
52
|
+
? formatDate(date, 'yyyy-MM-dd', 'en-US')
|
|
53
|
+
: null;
|
|
54
|
+
const validator = (control) => {
|
|
55
|
+
if (isEmptyInputValue(control.value)) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const controlDate = new Date(control.value);
|
|
59
|
+
return controlDate.getTime() > date.getTime()
|
|
60
|
+
? { [error]: { date: formattedDate } }
|
|
61
|
+
: null;
|
|
62
|
+
};
|
|
63
|
+
return validator;
|
|
64
|
+
}
|
|
65
|
+
static minDate(date, error = 'minDate') {
|
|
66
|
+
const formattedDate = date.toString() !== 'Invalid Date'
|
|
67
|
+
? formatDate(date, 'yyyy-MM-dd', 'en-US')
|
|
68
|
+
: null;
|
|
69
|
+
const validator = (control) => {
|
|
70
|
+
if (isEmptyInputValue(control.value)) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const controlDate = new Date(control.value);
|
|
74
|
+
return controlDate.getTime() < date.getTime()
|
|
75
|
+
? { [error]: { date: formattedDate } }
|
|
76
|
+
: null;
|
|
77
|
+
};
|
|
78
|
+
return validator;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function isEmptyInputValue(value) {
|
|
82
|
+
// We don't check for string here so it also works with arrays.
|
|
83
|
+
return value == null || value.length === 0;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9zcmMvbGliL2NvcmUvbWlzY2VsbGFuZW91cy92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFaEMsTUFBTSxPQUFPLFdBQVc7SUFFcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUF3QjtRQUNqQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBd0I7UUFDdEMsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWE7UUFDNUIsTUFBTSxTQUFTLEdBQWdCLENBQUMsT0FBd0IsRUFBRSxFQUFFO1lBQ3hELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFFNUIsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxD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QUNwRCxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFWCxNQUFNLFNBQVMsR0FBZ0IsQ0FBQyxPQUF3QixFQUFFLEVBQUU7WUFDeEQsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFNUMsT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDekMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUMsRUFBQztnQkFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNmLENBQUMsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FFSjtBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBVTtJQUNqQywrREFBK0Q7SUFDL0QsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Zm9ybWF0RGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QmJSZWdleH0gZnJvbSAnLi9yZWdleCc7XG5cbmV4cG9ydCBjbGFzcyBCYlZhbGlkYXRvciB7XG5cbiAgICBzdGF0aWMgZW1haWwoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmIChpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQmJSZWdleC5lbWFpbC50ZXN0KGNvbnRyb2wudmFsdWUpID8gbnVsbCA6IHtlbWFpbDogdHJ1ZX07XG4gICAgfVxuXG4gICAgc3RhdGljIGZ1bGxOdW1iZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmIChpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQmJSZWdleC5mdWxsTnVtYmVyLnRlc3QoY29udHJvbC52YWx1ZSkgPyBudWxsIDoge2Z1bGxOdW1iZXI6IHRydWV9O1xuICAgIH1cblxuICAgIHN0YXRpYyBtYXhGaWxlU2l6ZShieXRlczogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcjogVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICAgICAgICAgIC8vIFZhbGlkYXRlIGlmIHRoZSB2YWx1ZSBpcyBhIGZpbGUuXG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZS5zaXplIDw9IGJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtYXhTaXplID0gJzAgQnl0ZXMnO1xuICAgICAgICAgICAgaWYgKGJ5dGVzICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgayA9IDEwMjQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZG0gPSAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XG4gICAgICAgICAgICAgICAgbWF4U2l6ZSA9IHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaW5kZXgpKS50b0ZpeGVkKGRtKSkgKyAnICcgKyBzaXplc1tpbmRleF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7bWF4RmlsZVNpemU6IHttYXhTaXplfX07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3I7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvbmZpcm0oZmllbGROYW1lOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcgPSAnY29uZmlybScpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5SW5wdXRWYWx1ZShjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGNvbnRyb2w/LnBhcmVudD8uZ2V0KGZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250cm9sPy52YWx1ZSA9PT0gZmllbGQ/LnZhbHVlXG4gICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgOiB7W2Vycm9yXTogdHJ1ZX07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3I7XG4gICAgfVxuXG4gICAgc3RhdGljIG1heERhdGUoZGF0ZTogRGF0ZSwgZXJyb3I6IHN0cmluZyA9ICdtYXhEYXRlJykge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZGF0ZS50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJ1xuICAgICAgICAgICAgPyBmb3JtYXREYXRlKGRhdGUsICd5eXl5LU1NLWRkJywgJ2VuLVVTJylcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHlJbnB1dFZhbHVlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xEYXRlID0gbmV3IERhdGUoY29udHJvbC52YWx1ZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250cm9sRGF0ZS5nZXRUaW1lKCkgPiBkYXRlLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgID8ge1tlcnJvcl06IHtkYXRlOiBmb3JtYXR0ZWREYXRlfX1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3I7XG4gICAgfVxuXG4gICAgc3RhdGljIG1pbkRhdGUoZGF0ZTogRGF0ZSwgZXJyb3I6IHN0cmluZyA9ICdtaW5EYXRlJykge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZGF0ZS50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJ1xuICAgICAgICAgICAgPyBmb3JtYXREYXRlKGRhdGUsICd5eXl5LU1NLWRkJywgJ2VuLVVTJylcbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHlJbnB1dFZhbHVlKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xEYXRlID0gbmV3IERhdGUoY29udHJvbC52YWx1ZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb250cm9sRGF0ZS5nZXRUaW1lKCkgPCBkYXRlLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgID8ge1tlcnJvcl06IHtkYXRlOiBmb3JtYXR0ZWREYXRlfX1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB2YWxpZGF0b3I7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlJbnB1dFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAvLyBXZSBkb24ndCBjaGVjayBmb3Igc3RyaW5nIGhlcmUgc28gaXQgYWxzbyB3b3JrcyB3aXRoIGFycmF5cy5cbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPT09IDA7XG59XG4iXX0=
|
|
File without changes
|
package/{esm2015/lib/core/mixins/can-hide-errors.js → esm2020/lib/core/mixins/can-hide-errors.mjs}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class Clipboard {
|
|
5
|
+
constructor(_document) {
|
|
6
|
+
this._document = _document;
|
|
7
|
+
}
|
|
8
|
+
copy(text) {
|
|
9
|
+
const pendingCopy = this.beginCopy(text);
|
|
10
|
+
const successful = pendingCopy.copy();
|
|
11
|
+
pendingCopy.destroy();
|
|
12
|
+
return successful;
|
|
13
|
+
}
|
|
14
|
+
beginCopy(text) {
|
|
15
|
+
return new ClipboardCopy(text, this._document);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
Clipboard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Clipboard, deps: [{ token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
19
|
+
Clipboard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Clipboard, providedIn: 'root' });
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Clipboard, decorators: [{
|
|
21
|
+
type: Injectable,
|
|
22
|
+
args: [{
|
|
23
|
+
providedIn: 'root'
|
|
24
|
+
}]
|
|
25
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
26
|
+
type: Optional
|
|
27
|
+
}, {
|
|
28
|
+
type: Inject,
|
|
29
|
+
args: [DOCUMENT]
|
|
30
|
+
}] }]; } });
|
|
31
|
+
export class ClipboardCopy {
|
|
32
|
+
constructor(_text, _document) {
|
|
33
|
+
this._text = _text;
|
|
34
|
+
this._document = _document;
|
|
35
|
+
this.initialize();
|
|
36
|
+
}
|
|
37
|
+
copy() {
|
|
38
|
+
const textarea = this._textarea;
|
|
39
|
+
let successful = false;
|
|
40
|
+
try {
|
|
41
|
+
const currentFocus = this._document.activeElement;
|
|
42
|
+
textarea?.select?.();
|
|
43
|
+
textarea?.setSelectionRange?.(0, textarea?.value?.length);
|
|
44
|
+
successful = this._document?.execCommand?.('copy');
|
|
45
|
+
currentFocus?.focus?.();
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Do nothing.
|
|
49
|
+
}
|
|
50
|
+
return successful;
|
|
51
|
+
}
|
|
52
|
+
destroy() {
|
|
53
|
+
this._textarea?.parentNode?.removeChild?.(this._textarea);
|
|
54
|
+
this._textarea = undefined;
|
|
55
|
+
}
|
|
56
|
+
initialize() {
|
|
57
|
+
const textarea = this._textarea = this._document.createElement('textarea');
|
|
58
|
+
const styles = textarea.style;
|
|
59
|
+
// Hide the element for display and accessibility. Set a fixed position so the page layout
|
|
60
|
+
// isn't affected. We use `fixed` with `top: 0`, because focus is moved into the textarea
|
|
61
|
+
// for a split second and if it's off-screen, some browsers will attempt to scroll it into view.
|
|
62
|
+
styles.position = 'fixed';
|
|
63
|
+
styles.top = styles.opacity = '0';
|
|
64
|
+
styles.left = '-999em';
|
|
65
|
+
textarea.setAttribute('aria-hidden', 'true');
|
|
66
|
+
textarea.value = this._text;
|
|
67
|
+
this._document.body.appendChild(textarea);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL3NyYy9saWIvY29yZS9zZXJ2aWNlcy9jbGlwYm9hcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDOztBQUt6QyxNQUFNLE9BQU8sU0FBUztJQUVsQixZQUFrRCxTQUFjO1FBQWQsY0FBUyxHQUFULFNBQVMsQ0FBSztJQUNoRSxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVk7UUFDYixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFdEIsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFZO1FBQ2xCLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRCxDQUFDOztzR0FmUSxTQUFTLGtCQUVjLFFBQVE7MEdBRi9CLFNBQVMsY0FGTixNQUFNOzJGQUVULFNBQVM7a0JBSHJCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFHZ0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxRQUFROztBQWtCNUMsTUFBTSxPQUFPLGFBQWE7SUFJdEIsWUFBb0IsS0FBYSxFQUNKLFNBQW1CO1FBRDVCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDSixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQzVDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSTtRQUNBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXZCLElBQUk7WUFDQSxNQUFNLFlBQVksR0FBWSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQXdDLENBQUM7WUFFdEYsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDckIsUUFBUSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUQsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbkQsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7U0FDM0I7UUFBQyxNQUFNO1lBQ0osY0FBYztTQUNqQjtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFTyxVQUFVO1FBQ2QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBRTlCLDBGQUEwRjtRQUMxRix5RkFBeUY7UUFDekYsZ0dBQWdHO1FBQ2hHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDdkIsUUFBUSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDbGlwYm9hcmQge1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSkge1xuICAgIH1cblxuICAgIGNvcHkodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBlbmRpbmdDb3B5ID0gdGhpcy5iZWdpbkNvcHkodGV4dCk7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSBwZW5kaW5nQ29weS5jb3B5KCk7XG4gICAgICAgIHBlbmRpbmdDb3B5LmRlc3Ryb3koKTtcblxuICAgICAgICByZXR1cm4gc3VjY2Vzc2Z1bDtcbiAgICB9XG5cbiAgICBiZWdpbkNvcHkodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2xpcGJvYXJkQ29weSh0ZXh0LCB0aGlzLl9kb2N1bWVudCk7XG4gICAgfVxuXG59XG5cblxuZXhwb3J0IGNsYXNzIENsaXBib2FyZENvcHkge1xuXG4gICAgcHJpdmF0ZSBfdGV4dGFyZWE/OiBIVE1MVGV4dEFyZWFFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfdGV4dDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50OiBEb2N1bWVudCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB9XG5cbiAgICBjb3B5KCkge1xuICAgICAgICBjb25zdCB0ZXh0YXJlYSA9IHRoaXMuX3RleHRhcmVhO1xuICAgICAgICBsZXQgc3VjY2Vzc2Z1bCA9IGZhbHNlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSA8dW5rbm93bj50aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxPclNWR0VsZW1lbnQgfCBudWxsO1xuXG4gICAgICAgICAgICB0ZXh0YXJlYT8uc2VsZWN0Py4oKTtcbiAgICAgICAgICAgIHRleHRhcmVhPy5zZXRTZWxlY3Rpb25SYW5nZT8uKDAsIHRleHRhcmVhPy52YWx1ZT8ubGVuZ3RoKTtcbiAgICAgICAgICAgIHN1Y2Nlc3NmdWwgPSB0aGlzLl9kb2N1bWVudD8uZXhlY0NvbW1hbmQ/LignY29weScpO1xuXG4gICAgICAgICAgICBjdXJyZW50Rm9jdXM/LmZvY3VzPy4oKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nLlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3NmdWw7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fdGV4dGFyZWE/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkPy4odGhpcy5fdGV4dGFyZWEpO1xuICAgICAgICB0aGlzLl90ZXh0YXJlYSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHRleHRhcmVhID0gdGhpcy5fdGV4dGFyZWEgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICBjb25zdCBzdHlsZXMgPSB0ZXh0YXJlYS5zdHlsZTtcblxuICAgICAgICAvLyBIaWRlIHRoZSBlbGVtZW50IGZvciBkaXNwbGF5IGFuZCBhY2Nlc3NpYmlsaXR5LiBTZXQgYSBmaXhlZCBwb3NpdGlvbiBzbyB0aGUgcGFnZSBsYXlvdXRcbiAgICAgICAgLy8gaXNuJ3QgYWZmZWN0ZWQuIFdlIHVzZSBgZml4ZWRgIHdpdGggYHRvcDogMGAsIGJlY2F1c2UgZm9jdXMgaXMgbW92ZWQgaW50byB0aGUgdGV4dGFyZWFcbiAgICAgICAgLy8gZm9yIGEgc3BsaXQgc2Vjb25kIGFuZCBpZiBpdCdzIG9mZi1zY3JlZW4sIHNvbWUgYnJvd3NlcnMgd2lsbCBhdHRlbXB0IHRvIHNjcm9sbCBpdCBpbnRvIHZpZXcuXG4gICAgICAgIHN0eWxlcy5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgIHN0eWxlcy50b3AgPSBzdHlsZXMub3BhY2l0eSA9ICcwJztcbiAgICAgICAgc3R5bGVzLmxlZnQgPSAnLTk5OWVtJztcbiAgICAgICAgdGV4dGFyZWEuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgIHRleHRhcmVhLnZhbHVlID0gdGhpcy5fdGV4dDtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7XG4gICAgfVxuXG59Il19
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./platform.service";
|
|
4
|
+
import * as i2 from "./file-loader.service";
|
|
5
|
+
export class Exif {
|
|
6
|
+
constructor(_platform, _fileLoader) {
|
|
7
|
+
this._platform = _platform;
|
|
8
|
+
this._fileLoader = _fileLoader;
|
|
9
|
+
this.transformImage = (image, type, orientation, quality = 100) => {
|
|
10
|
+
// Create the canvas and context.
|
|
11
|
+
const canvas = document.createElement('canvas');
|
|
12
|
+
const context = canvas.getContext('2d');
|
|
13
|
+
// Validate the context exists.
|
|
14
|
+
if (!context) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
// Set the canvas size based on the image.
|
|
18
|
+
const { width, height } = image;
|
|
19
|
+
canvas.width = width;
|
|
20
|
+
canvas.height = height;
|
|
21
|
+
// Validate the orientation is correct
|
|
22
|
+
// else flip the canvas sizes.
|
|
23
|
+
if (4 < orientation && orientation < 9) {
|
|
24
|
+
canvas.width = height;
|
|
25
|
+
canvas.height = width;
|
|
26
|
+
}
|
|
27
|
+
// Transform the context based on the orientation.
|
|
28
|
+
switch (orientation) {
|
|
29
|
+
case 2:
|
|
30
|
+
context.transform(-1, 0, 0, 1, width, 0);
|
|
31
|
+
break;
|
|
32
|
+
case 3:
|
|
33
|
+
context.transform(-1, 0, 0, -1, width, height);
|
|
34
|
+
break;
|
|
35
|
+
case 4:
|
|
36
|
+
context.transform(1, 0, 0, -1, 0, height);
|
|
37
|
+
break;
|
|
38
|
+
case 5:
|
|
39
|
+
context.transform(0, 1, 1, 0, 0, 0);
|
|
40
|
+
break;
|
|
41
|
+
case 6:
|
|
42
|
+
context.transform(0, 1, -1, 0, height, 0);
|
|
43
|
+
break;
|
|
44
|
+
case 7:
|
|
45
|
+
context.transform(0, -1, -1, 0, height, width);
|
|
46
|
+
break;
|
|
47
|
+
case 8:
|
|
48
|
+
context.transform(0, -1, 1, 0, 0, width);
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
// Draw the image on the context and return the data URL.
|
|
54
|
+
context.drawImage(image, 0, 0, width, height);
|
|
55
|
+
return canvas.toDataURL(type, quality / 100);
|
|
56
|
+
};
|
|
57
|
+
this.getSupportedCanvasType = (fileType) => {
|
|
58
|
+
switch (fileType) {
|
|
59
|
+
case 'image/jpeg':
|
|
60
|
+
case 'image/jpg':
|
|
61
|
+
return 'image/jpeg';
|
|
62
|
+
case 'image/x-windows-bmp':
|
|
63
|
+
case 'image/bmp':
|
|
64
|
+
return 'image/bmp';
|
|
65
|
+
default:
|
|
66
|
+
return 'image/png';
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
this.getOrientation = (buffer) => {
|
|
70
|
+
// Create a new data view.
|
|
71
|
+
const view = new DataView(buffer);
|
|
72
|
+
if (view.getUint16(0, false) !== 0xFFD8) {
|
|
73
|
+
return -2;
|
|
74
|
+
}
|
|
75
|
+
const length = view.byteLength;
|
|
76
|
+
let offset = 2;
|
|
77
|
+
while (offset < length) {
|
|
78
|
+
if (view.getUint16(offset + 2, false) <= 8) {
|
|
79
|
+
return -1;
|
|
80
|
+
}
|
|
81
|
+
const marker = view.getUint16(offset, false);
|
|
82
|
+
offset += 2;
|
|
83
|
+
if (marker === 0xFFE1) {
|
|
84
|
+
if (view.getUint32(offset += 2, false) !== 0x45786966) {
|
|
85
|
+
return -1;
|
|
86
|
+
}
|
|
87
|
+
const little = view.getUint16(offset += 6, false) === 0x4949;
|
|
88
|
+
offset += view.getUint32(offset + 4, little);
|
|
89
|
+
const tags = view.getUint16(offset, little);
|
|
90
|
+
offset += 2;
|
|
91
|
+
for (let index = 0; index < tags; index++) {
|
|
92
|
+
if (view.getUint16(offset + index * 12, little) === 0x0112) {
|
|
93
|
+
return view.getUint16(offset + index * 12 + 8, little);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if ((marker & 0xFF00) !== 0xFF00) {
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
offset += view.getUint16(offset, false);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return -1;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
async strip(file, quality = 100) {
|
|
108
|
+
// Validate we are on a browser.
|
|
109
|
+
if (!this._platform.isBrowser) {
|
|
110
|
+
return file;
|
|
111
|
+
}
|
|
112
|
+
// Validate the file exists and is
|
|
113
|
+
// an instance of a File object.
|
|
114
|
+
if (!file || !(file instanceof File)) {
|
|
115
|
+
return file;
|
|
116
|
+
}
|
|
117
|
+
// Only jpeg images need correction.
|
|
118
|
+
if (!['image/jpeg'].includes(file.type)) {
|
|
119
|
+
return file;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
// Read the file as an array buffer and data url.
|
|
123
|
+
const arrayBuffer = await this._fileLoader.asArrayBuffer(file);
|
|
124
|
+
const dataUrl = await this._fileLoader.asDataUrl(file);
|
|
125
|
+
// Create an image element.
|
|
126
|
+
const imageElement = await this.createImageElement(dataUrl);
|
|
127
|
+
// Get the orientation by using the buffer.
|
|
128
|
+
const orientation = this.getOrientation(arrayBuffer);
|
|
129
|
+
// Transform the image to remove the orientation.
|
|
130
|
+
const canvasType = this.getSupportedCanvasType(file.type);
|
|
131
|
+
const imageUrl = this.transformImage(imageElement, canvasType, orientation, quality);
|
|
132
|
+
// Validate the image url exists.
|
|
133
|
+
if (!imageUrl) {
|
|
134
|
+
return file;
|
|
135
|
+
}
|
|
136
|
+
// Transform the image url to a file.
|
|
137
|
+
return this._fileLoader.fromDataUrl(imageUrl, file.name);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// When something goes wrong we
|
|
141
|
+
// just return the default file.
|
|
142
|
+
return file;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async createImageElement(dataUrl) {
|
|
146
|
+
return new Promise((resolve, reject) => {
|
|
147
|
+
const image = new Image();
|
|
148
|
+
image.src = dataUrl;
|
|
149
|
+
image.onerror = () => reject('Error image create');
|
|
150
|
+
image.onabort = () => reject('Abort image create');
|
|
151
|
+
image.onload = () => resolve(image);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
Exif.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Exif, deps: [{ token: i1.Platform }, { token: i2.FileLoader }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
156
|
+
Exif.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Exif, providedIn: 'root' });
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Exif, decorators: [{
|
|
158
|
+
type: Injectable,
|
|
159
|
+
args: [{
|
|
160
|
+
providedIn: 'root'
|
|
161
|
+
}]
|
|
162
|
+
}], ctorParameters: function () { return [{ type: i1.Platform }, { type: i2.FileLoader }]; } });
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9zcmMvbGliL2NvcmUvc2VydmljZXMvZXhpZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7QUFLekMsTUFBTSxPQUFPLElBQUk7SUFFYixZQUFvQixTQUFtQixFQUNuQixXQUF1QjtRQUR2QixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBMkRuQyxtQkFBYyxHQUFHLENBQUMsS0FBdUIsRUFBRSxJQUFZLEVBQUUsV0FBbUIsRUFBRSxVQUFrQixHQUFHLEVBQUUsRUFBRTtZQUMzRyxpQ0FBaUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXhDLCtCQUErQjtZQUMvQixJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCwwQ0FBMEM7WUFDMUMsTUFBTSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxLQUFLLENBQUM7WUFDOUIsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDckIsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFFdkIsc0NBQXNDO1lBQ3RDLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsR0FBRyxXQUFXLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtnQkFDcEMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2FBQ3pCO1lBRUQsa0RBQWtEO1lBQ2xELFFBQVEsV0FB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QyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1RDtRQUFDLE1BQU07WUFDSiwrQkFBK0I7WUFDL0IsZ0NBQWdDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQWU7UUFDNUMsT0FBTyxJQUFJLE9BQU8sQ0FBbUIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztZQUNwQixLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25ELEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDbkQsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztpR0E1RFEsSUFBSTtxR0FBSixJQUFJLGNBRkQsTUFBTTsyRkFFVCxJQUFJO2tCQUhoQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmlsZUxvYWRlcn0gZnJvbSAnLi9maWxlLWxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJy4vcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEV4aWYge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2ZpbGVMb2FkZXI6IEZpbGVMb2FkZXIpIHtcbiAgICB9XG5cbiAgICBhc3luYyBzdHJpcChmaWxlOiBGaWxlLCBxdWFsaXR5OiBudW1iZXIgPSAxMDApIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgd2UgYXJlIG9uIGEgYnJvd3Nlci5cbiAgICAgICAgaWYgKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGZpbGUgZXhpc3RzIGFuZCBpc1xuICAgICAgICAvLyBhbiBpbnN0YW5jZSBvZiBhIEZpbGUgb2JqZWN0LlxuICAgICAgICBpZiAoIWZpbGUgfHwgIShmaWxlIGluc3RhbmNlb2YgRmlsZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBqcGVnIGltYWdlcyBuZWVkIGNvcnJlY3Rpb24uXG4gICAgICAgIGlmICghWydpbWFnZS9qcGVnJ10uaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gUmVhZCB0aGUgZmlsZSBhcyBhbiBhcnJheSBidWZmZXIgYW5kIGRhdGEgdXJsLlxuICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCB0aGlzLl9maWxlTG9hZGVyLmFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgdGhpcy5fZmlsZUxvYWRlci5hc0RhdGFVcmwoZmlsZSk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBlbGVtZW50LlxuICAgICAgICAgICAgY29uc3QgaW1hZ2VFbGVtZW50ID0gYXdhaXQgdGhpcy5jcmVhdGVJbWFnZUVsZW1lbnQoZGF0YVVybCk7XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgb3JpZW50YXRpb24gYnkgdXNpbmcgdGhlIGJ1ZmZlci5cbiAgICAgICAgICAgIGNvbnN0IG9yaWVudGF0aW9uID0gdGhpcy5nZXRPcmllbnRhdGlvbihhcnJheUJ1ZmZlcik7XG5cbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaW1hZ2UgdG8gcmVtb3ZlIHRoZSBvcmllbnRhdGlvbi5cbiAgICAgICAgICAgIGNvbnN0IGNhbnZhc1R5cGUgPSB0aGlzLmdldFN1cHBvcnRlZENhbnZhc1R5cGUoZmlsZS50eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlVXJsID0gdGhpcy50cmFuc2Zvcm1JbWFnZShpbWFnZUVsZW1lbnQsIGNhbnZhc1R5cGUsIG9yaWVudGF0aW9uLCBxdWFsaXR5KTtcblxuICAgICAgICAgICAgLy8gVmFsaWRhdGUgdGhlIGltYWdlIHVybCBleGlzdHMuXG4gICAgICAgICAgICBpZiAoIWltYWdlVXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaW1hZ2UgdXJsIHRvIGEgZmlsZS5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlTG9hZGVyLmZyb21EYXRhVXJsKGltYWdlVXJsLCBmaWxlLm5hbWUpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFdoZW4gc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2VcbiAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkZWZhdWx0IGZpbGUuXG4gICAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlSW1hZ2VFbGVtZW50KGRhdGFVcmw6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGltYWdlLnNyYyA9IGRhdGFVcmw7XG4gICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCdFcnJvciBpbWFnZSBjcmVhdGUnKTtcbiAgICAgICAgICAgIGltYWdlLm9uYWJvcnQgPSAoKSA9PiByZWplY3QoJ0Fib3J0IGltYWdlIGNyZWF0ZScpO1xuICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gKCkgPT4gcmVzb2x2ZShpbWFnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtSW1hZ2UgPSAoaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQsIHR5cGU6IHN0cmluZywgb3JpZW50YXRpb246IG51bWJlciwgcXVhbGl0eTogbnVtYmVyID0gMTAwKSA9PiB7XG4gICAgICAgIC8vIENyZWF0ZSB0aGUgY2FudmFzIGFuZCBjb250ZXh0LlxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHRoZSBjb250ZXh0IGV4aXN0cy5cbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgY2FudmFzIHNpemUgYmFzZWQgb24gdGhlIGltYWdlLlxuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBpbWFnZTtcbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgdGhlIG9yaWVudGF0aW9uIGlzIGNvcnJlY3RcbiAgICAgICAgLy8gZWxzZSBmbGlwIHRoZSBjYW52YXMgc2l6ZXMuXG4gICAgICAgIGlmICg0IDwgb3JpZW50YXRpb24gJiYgb3JpZW50YXRpb24gPCA5KSB7XG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSBoZWlnaHQ7XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gd2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIGNvbnRleHQgYmFzZWQgb24gdGhlIG9yaWVudGF0aW9uLlxuICAgICAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgY29udGV4dC50cmFuc2Zvcm0oLTEsIDAsIDAsIDEsIHdpZHRoLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICBjb250ZXh0LnRyYW5zZm9ybSgtMSwgMCwgMCwgLTEsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNvbnRleHQudHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIGNvbnRleHQudHJhbnNmb3JtKDAsIDEsIDEsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgIGNvbnRleHQudHJhbnNmb3JtKDAsIDEsIC0xLCAwLCBoZWlnaHQsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIGNvbnRleHQudHJhbnNmb3JtKDAsIC0xLCAtMSwgMCwgaGVpZ2h0LCB3aWR0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgY29udGV4dC50cmFuc2Zvcm0oMCwgLTEsIDEsIDAsIDAsIHdpZHRoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEcmF3IHRoZSBpbWFnZSBvbiB0aGUgY29udGV4dCBhbmQgcmV0dXJuIHRoZSBkYXRhIFVSTC5cbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5IC8gMTAwKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXRTdXBwb3J0ZWRDYW52YXNUeXBlID0gKGZpbGVUeXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgc3dpdGNoIChmaWxlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgICAgICAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnaW1hZ2UvanBlZyc7XG4gICAgICAgICAgICBjYXNlICdpbWFnZS94LXdpbmRvd3MtYm1wJzpcbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlL2JtcCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdpbWFnZS9ibXAnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ltYWdlL3BuZyc7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXRPcmllbnRhdGlvbiA9IChidWZmZXI6IEFycmF5QnVmZmVyKSA9PiB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkYXRhIHZpZXcuXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTtcblxuICAgICAgICBpZiAodmlldy5nZXRVaW50MTYoMCwgZmFsc2UpICE9PSAweEZGRDgpIHtcbiAgICAgICAgICAgIHJldHVybiAtMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHZpZXcuYnl0ZUxlbmd0aDtcbiAgICAgICAgbGV0IG9mZnNldCA9IDI7XG5cbiAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDE2KG9mZnNldCArIDIsIGZhbHNlKSA8PSA4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYXJrZXIgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgICBpZiAobWFya2VyID09PSAweEZGRTEpIHtcbiAgICAgICAgICAgICAgICBpZiAodmlldy5nZXRVaW50MzIob2Zmc2V0ICs9IDIsIGZhbHNlKSAhPT0gMHg0NTc4Njk2Nikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbGl0dGxlID0gdmlldy5nZXRVaW50MTYob2Zmc2V0ICs9IDYsIGZhbHNlKSA9PT0gMHg0OTQ5O1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSB2aWV3LmdldFVpbnQzMihvZmZzZXQgKyA0LCBsaXR0bGUpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFncyA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgbGl0dGxlKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0YWdzOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQxNihvZmZzZXQgKyBpbmRleCAqIDEyLCBsaXR0bGUpID09PSAweDAxMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2aWV3LmdldFVpbnQxNihvZmZzZXQgKyBpbmRleCAqIDEyICsgOCwgbGl0dGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1hcmtlciAmIDB4RkYwMCkgIT09IDB4RkYwMCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gdmlldy5nZXRVaW50MTYob2Zmc2V0LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfTtcblxufVxuIl19
|