@alfresco/adf-core 8.1.0-16295248176 → 8.1.0-16320806191
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/bundles/assets/adf-core/i18n/de.json +1 -1
- package/bundles/assets/adf-core/i18n/es.json +1 -1
- package/bundles/assets/adf-core/i18n/fr.json +1 -1
- package/bundles/assets/adf-core/i18n/it.json +1 -1
- package/bundles/assets/adf-core/i18n/pl.json +1 -1
- package/bundles/assets/adf-core/i18n/pt.json +1 -1
- package/esm2022/adf-core.mjs +5 -0
- package/esm2022/api/alfresco-adf-core-api.mjs +5 -0
- package/esm2022/api/index.mjs +20 -0
- package/esm2022/api/lib/adf-http-client.service.mjs +311 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.param-encoder.mjs +33 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.response-error.mjs +25 -0
- package/esm2022/api/lib/alfresco-api/alfresco-api.utils.mjs +80 -0
- package/esm2022/api/lib/interfaces.mjs +18 -0
- package/esm2022/api/lib/types.mjs +18 -0
- package/esm2022/auth/alfresco-adf-core-auth.mjs +5 -0
- package/esm2022/auth/authentication-interceptor/authentication.interceptor.mjs +56 -0
- package/esm2022/auth/authentication.mjs +19 -0
- package/esm2022/auth/index.mjs +19 -0
- package/esm2022/breadcrumbs/alfresco-adf-core-breadcrumbs.mjs +5 -0
- package/esm2022/breadcrumbs/components/breadcrumb/breadcrumb.component.mjs +82 -0
- package/esm2022/breadcrumbs/components/breadcrumb-item/breadcrumb-item.component.mjs +42 -0
- package/esm2022/breadcrumbs/directives/breadcrumb-focus.directive.mjs +44 -0
- package/esm2022/breadcrumbs/index.mjs +19 -0
- package/esm2022/feature-flags/alfresco-adf-core-feature-flags.mjs +5 -0
- package/esm2022/feature-flags/index.mjs +29 -0
- package/esm2022/feature-flags/lib/components/feature-flags-wrapper.mjs +36 -0
- package/esm2022/feature-flags/lib/components/feature-override-indicator.component.mjs +56 -0
- package/esm2022/feature-flags/lib/components/flags/flags.component.mjs +129 -0
- package/esm2022/feature-flags/lib/directives/features.directive.mjs +63 -0
- package/esm2022/feature-flags/lib/directives/not-features.directive.mjs +63 -0
- package/esm2022/feature-flags/lib/guards/is-feature-off.guard.mjs +38 -0
- package/esm2022/feature-flags/lib/guards/is-feature-on.guard.mjs +38 -0
- package/esm2022/feature-flags/lib/guards/is-flags-override-on.guard.mjs +40 -0
- package/esm2022/feature-flags/lib/interfaces/features.interface.mjs +24 -0
- package/esm2022/feature-flags/lib/mocks/features-service-mock.factory.mjs +62 -0
- package/esm2022/feature-flags/lib/providers/debug-feature-flags.provider.mjs +51 -0
- package/esm2022/feature-flags/lib/providers/dummy-feature-flags.provider.mjs +36 -0
- package/esm2022/feature-flags/lib/services/debug-features.service.mjs +94 -0
- package/esm2022/feature-flags/lib/services/dummy-features.service.mjs +40 -0
- package/esm2022/feature-flags/lib/services/flagset.parser.mjs +38 -0
- package/esm2022/feature-flags/lib/services/qa-features.helper.mjs +62 -0
- package/esm2022/feature-flags/lib/services/storage-features.service.mjs +126 -0
- package/esm2022/lib/about/about-extension-list/about-extension-list.component.mjs +51 -0
- package/esm2022/lib/about/about-license-list/about-license-list.component.mjs +51 -0
- package/esm2022/lib/about/about-module-list/module-list.component.mjs +51 -0
- package/esm2022/lib/about/about-package/package-list.component.mjs +65 -0
- package/esm2022/lib/about/about-panel.directive.mjs +37 -0
- package/esm2022/lib/about/about-repository-info/about-repository-info.component.mjs +59 -0
- package/esm2022/lib/about/about-repository-info/repository-info.interface.mjs +18 -0
- package/esm2022/lib/about/about-server-settings/about-server-settings.component.mjs +42 -0
- package/esm2022/lib/about/about-status-list/about-status-list.component.mjs +51 -0
- package/esm2022/lib/about/about.component.mjs +35 -0
- package/esm2022/lib/about/about.module.mjs +75 -0
- package/esm2022/lib/about/index.mjs +18 -0
- package/esm2022/lib/about/interfaces.mjs +18 -0
- package/esm2022/lib/about/public-api.mjs +28 -0
- package/esm2022/lib/app-config/app-config-storage-prefix.factory.mjs +51 -0
- package/esm2022/lib/app-config/app-config.loader.mjs +41 -0
- package/esm2022/lib/app-config/app-config.module.mjs +33 -0
- package/esm2022/lib/app-config/app-config.pipe.mjs +38 -0
- package/esm2022/lib/app-config/app-config.service.mjs +243 -0
- package/esm2022/lib/app-config/debug-app-config.service.mjs +44 -0
- package/esm2022/lib/app-config/index.mjs +18 -0
- package/esm2022/lib/app-config/public-api.mjs +22 -0
- package/esm2022/lib/auth/authentication-interceptor/auth-bearer.interceptor.mjs +67 -0
- package/esm2022/lib/auth/basic-auth/basic-alfresco-auth.service.mjs +356 -0
- package/esm2022/lib/auth/basic-auth/content-auth.mjs +189 -0
- package/esm2022/lib/auth/basic-auth/process-auth.mjs +193 -0
- package/esm2022/lib/auth/guard/auth-guard-bpm.service.mjs +31 -0
- package/esm2022/lib/auth/guard/auth-guard-ecm.service.mjs +31 -0
- package/esm2022/lib/auth/guard/auth-guard-sso-role.service.mjs +57 -0
- package/esm2022/lib/auth/guard/auth-guard.mjs +53 -0
- package/esm2022/lib/auth/guard/auth-guard.service.mjs +113 -0
- package/esm2022/lib/auth/index.mjs +18 -0
- package/esm2022/lib/auth/interfaces/authentication-service.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/authentication.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/identity-group.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/identity-user.service.interface.mjs +18 -0
- package/esm2022/lib/auth/interfaces/openid-configuration.interface.mjs +18 -0
- package/esm2022/lib/auth/models/application-access.model.mjs +18 -0
- package/esm2022/lib/auth/models/identity-group.model.mjs +18 -0
- package/esm2022/lib/auth/models/identity-role.model.mjs +30 -0
- package/esm2022/lib/auth/models/identity-user.model.mjs +18 -0
- package/esm2022/lib/auth/models/oauth-config.model.mjs +18 -0
- package/esm2022/lib/auth/models/redirection.model.mjs +28 -0
- package/esm2022/lib/auth/models/user-access.model.mjs +18 -0
- package/esm2022/lib/auth/oidc/auth-config.mjs +19 -0
- package/esm2022/lib/auth/oidc/auth-config.service.mjs +110 -0
- package/esm2022/lib/auth/oidc/auth-routing.module.mjs +34 -0
- package/esm2022/lib/auth/oidc/auth.module.mjs +112 -0
- package/esm2022/lib/auth/oidc/auth.service.mjs +22 -0
- package/esm2022/lib/auth/oidc/oidc-auth.guard.mjs +37 -0
- package/esm2022/lib/auth/oidc/oidc-authentication.service.mjs +202 -0
- package/esm2022/lib/auth/oidc/public-api.mjs +24 -0
- package/esm2022/lib/auth/oidc/redirect-auth.service.mjs +267 -0
- package/esm2022/lib/auth/oidc/retry-login.service.mjs +66 -0
- package/esm2022/lib/auth/oidc/token.interceptor.mjs +62 -0
- package/esm2022/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.mjs +31 -0
- package/esm2022/lib/auth/public-api.mjs +44 -0
- package/esm2022/lib/auth/services/authentication.service.mjs +190 -0
- package/esm2022/lib/auth/services/base-authentication.service.mjs +99 -0
- package/esm2022/lib/auth/services/identity-group.service.mjs +269 -0
- package/esm2022/lib/auth/services/identity-role.service.mjs +99 -0
- package/esm2022/lib/auth/services/identity-user.service.mjs +443 -0
- package/esm2022/lib/auth/services/jwt-helper.service.mjs +205 -0
- package/esm2022/lib/auth/services/oauth2.service.mjs +69 -0
- package/esm2022/lib/auth/services/time-sync.service.mjs +83 -0
- package/esm2022/lib/auth/services/user-access.service.mjs +110 -0
- package/esm2022/lib/avatar/avatar.component.mjs +51 -0
- package/esm2022/lib/blank-page/blank-page.component.mjs +31 -0
- package/esm2022/lib/blank-page/blank-page.module.mjs +33 -0
- package/esm2022/lib/blank-page/index.mjs +18 -0
- package/esm2022/lib/blank-page/public-api.mjs +19 -0
- package/esm2022/lib/button/button.component.mjs +61 -0
- package/esm2022/lib/card-view/card-view.module.mjs +80 -0
- package/esm2022/lib/card-view/components/base-card-view.mjs +51 -0
- package/esm2022/lib/card-view/components/card-view/card-view.component.mjs +66 -0
- package/esm2022/lib/card-view/components/card-view-arrayitem/card-view-arrayitem.component.mjs +55 -0
- package/esm2022/lib/card-view/components/card-view-boolitem/card-view-boolitem.component.mjs +39 -0
- package/esm2022/lib/card-view/components/card-view-dateitem/card-view-dateitem.component.mjs +182 -0
- package/esm2022/lib/card-view/components/card-view-item-dispatcher/card-view-item-dispatcher.component.mjs +108 -0
- package/esm2022/lib/card-view/components/card-view-keyvaluepairsitem/card-view-keyvaluepairsitem.component.mjs +64 -0
- package/esm2022/lib/card-view/components/card-view-mapitem/card-view-mapitem.component.mjs +46 -0
- package/esm2022/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.mjs +137 -0
- package/esm2022/lib/card-view/components/card-view-selectitem/select-filter-input/select-filter-input.component.mjs +113 -0
- package/esm2022/lib/card-view/components/card-view-textitem/card-view-textitem.component.mjs +239 -0
- package/esm2022/lib/card-view/components/card-view.components.mjs +28 -0
- package/esm2022/lib/card-view/index.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/base-card-view-update.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-arrayitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-boolitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-dateitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item-validator.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-item.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-keyvaluepairsitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-selectitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-textitem-pipe-property.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view-textitem-properties.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/card-view.interfaces.mjs +29 -0
- package/esm2022/lib/card-view/interfaces/click-notification.interface.mjs +18 -0
- package/esm2022/lib/card-view/interfaces/update-notification.interface.mjs +18 -0
- package/esm2022/lib/card-view/models/card-view-arrayitem.model.mjs +28 -0
- package/esm2022/lib/card-view/models/card-view-baseitem.model.mjs +64 -0
- package/esm2022/lib/card-view/models/card-view-boolitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-dateitem.model.mjs +58 -0
- package/esm2022/lib/card-view/models/card-view-datetimeitem.model.mjs +28 -0
- package/esm2022/lib/card-view/models/card-view-floatitem.model.mjs +33 -0
- package/esm2022/lib/card-view/models/card-view-intitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-keyvaluepairs.model.mjs +27 -0
- package/esm2022/lib/card-view/models/card-view-longitem.model.mjs +36 -0
- package/esm2022/lib/card-view/models/card-view-mapitem.model.mjs +32 -0
- package/esm2022/lib/card-view/models/card-view-selectitem.model.mjs +41 -0
- package/esm2022/lib/card-view/models/card-view-textitem.model.mjs +40 -0
- package/esm2022/lib/card-view/models/card-view.models.mjs +29 -0
- package/esm2022/lib/card-view/public-api.mjs +25 -0
- package/esm2022/lib/card-view/services/card-item-types.service.mjs +54 -0
- package/esm2022/lib/card-view/services/card-view-update.service.mjs +59 -0
- package/esm2022/lib/card-view/services/card-view.services.mjs +19 -0
- package/esm2022/lib/card-view/validators/card-view-item-float.validator.mjs +31 -0
- package/esm2022/lib/card-view/validators/card-view-item-int.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-length.validator.mjs +34 -0
- package/esm2022/lib/card-view/validators/card-view-item-long.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-match.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-minmax.validator.mjs +35 -0
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-int.validator.mjs +32 -0
- package/esm2022/lib/card-view/validators/card-view-item-only-positive-long.validator.mjs +31 -0
- package/esm2022/lib/card-view/validators/card-view.validators.mjs +26 -0
- package/esm2022/lib/card-view/validators/validators.map.mjs +26 -0
- package/esm2022/lib/clipboard/clipboard.directive.mjs +98 -0
- package/esm2022/lib/clipboard/clipboard.module.mjs +34 -0
- package/esm2022/lib/clipboard/clipboard.service.mjs +103 -0
- package/esm2022/lib/clipboard/index.mjs +18 -0
- package/esm2022/lib/clipboard/public-api.mjs +21 -0
- package/esm2022/lib/comments/comment-list/comment-list.component.mjs +52 -0
- package/esm2022/lib/comments/comment-list/comment-list.module.mjs +33 -0
- package/esm2022/lib/comments/comment-list/index.mjs +18 -0
- package/esm2022/lib/comments/comment-list/public-api.mjs +19 -0
- package/esm2022/lib/comments/comments.component.mjs +132 -0
- package/esm2022/lib/comments/comments.module.mjs +33 -0
- package/esm2022/lib/comments/index.mjs +18 -0
- package/esm2022/lib/comments/interfaces/comments-service.interface.mjs +18 -0
- package/esm2022/lib/comments/interfaces/comments.token.mjs +19 -0
- package/esm2022/lib/comments/public-api.mjs +22 -0
- package/esm2022/lib/common/index.mjs +35 -0
- package/esm2022/lib/common/interface/search-component.interface.mjs +18 -0
- package/esm2022/lib/common/mock/app-config.service.mock.mjs +47 -0
- package/esm2022/lib/common/models/default-languages.model.mjs +36 -0
- package/esm2022/lib/common/models/log-levels.model.mjs +33 -0
- package/esm2022/lib/common/models/user-info-mode.enum.mjs +25 -0
- package/esm2022/lib/common/services/cookie.service.mjs +82 -0
- package/esm2022/lib/common/services/download.service.mjs +102 -0
- package/esm2022/lib/common/services/dynamic-component-mapper.service.mjs +89 -0
- package/esm2022/lib/common/services/highlight-transform.service.mjs +61 -0
- package/esm2022/lib/common/services/language-item.interface.mjs +18 -0
- package/esm2022/lib/common/services/log.service.mjs +171 -0
- package/esm2022/lib/common/services/page-title.service.mjs +63 -0
- package/esm2022/lib/common/services/sort-by-category.service.mjs +81 -0
- package/esm2022/lib/common/services/storage.service.mjs +143 -0
- package/esm2022/lib/common/services/thumbnail.service.mjs +194 -0
- package/esm2022/lib/common/services/url.service.mjs +45 -0
- package/esm2022/lib/common/services/user-preferences.service.mjs +238 -0
- package/esm2022/lib/common/utils/date-fns-adapter.mjs +115 -0
- package/esm2022/lib/common/utils/date-fns-utils.mjs +222 -0
- package/esm2022/lib/common/utils/datetime-fns-adapter.mjs +134 -0
- package/esm2022/lib/common/utils/file-utils.mjs +65 -0
- package/esm2022/lib/common/utils/index.mjs +18 -0
- package/esm2022/lib/common/utils/moment-date-adapter.mjs +202 -0
- package/esm2022/lib/common/utils/moment-date-formats.model.mjs +32 -0
- package/esm2022/lib/common/utils/object-utils.mjs +107 -0
- package/esm2022/lib/common/utils/public-api.mjs +25 -0
- package/esm2022/lib/common/utils/string-utils.mjs +45 -0
- package/esm2022/lib/context-menu/animations.mjs +33 -0
- package/esm2022/lib/context-menu/context-menu-list.component.mjs +91 -0
- package/esm2022/lib/context-menu/context-menu-overlay.mjs +25 -0
- package/esm2022/lib/context-menu/context-menu-overlay.service.mjs +109 -0
- package/esm2022/lib/context-menu/context-menu.directive.mjs +63 -0
- package/esm2022/lib/context-menu/context-menu.module.mjs +35 -0
- package/esm2022/lib/context-menu/context-menu.tokens.mjs +19 -0
- package/esm2022/lib/context-menu/index.mjs +18 -0
- package/esm2022/lib/context-menu/interfaces.mjs +18 -0
- package/esm2022/lib/context-menu/public-api.mjs +21 -0
- package/esm2022/lib/core.module.mjs +314 -0
- package/esm2022/lib/datatable/components/amount-cell/amount-cell.component.mjs +45 -0
- package/esm2022/lib/datatable/components/boolean-cell/boolean-cell.component.mjs +65 -0
- package/esm2022/lib/datatable/components/columns-selector/columns-search-filter.pipe.mjs +55 -0
- package/esm2022/lib/datatable/components/columns-selector/columns-selector.component.mjs +113 -0
- package/esm2022/lib/datatable/components/data-cell.event.mjs +31 -0
- package/esm2022/lib/datatable/components/data-row-action.event.mjs +34 -0
- package/esm2022/lib/datatable/components/datatable/datatable.component.mjs +914 -0
- package/esm2022/lib/datatable/components/datatable-cell/datatable-cell.component.mjs +126 -0
- package/esm2022/lib/datatable/components/datatable-row/datatable-row.component.mjs +98 -0
- package/esm2022/lib/datatable/components/date-cell/date-cell.component.mjs +78 -0
- package/esm2022/lib/datatable/components/empty-list/empty-list.component.mjs +60 -0
- package/esm2022/lib/datatable/components/filesize-cell/filesize-cell.component.mjs +49 -0
- package/esm2022/lib/datatable/components/icon-cell/icon-cell.component.mjs +67 -0
- package/esm2022/lib/datatable/components/json-cell/json-cell.component.mjs +86 -0
- package/esm2022/lib/datatable/components/location-cell/location-cell.component.mjs +69 -0
- package/esm2022/lib/datatable/components/mocks/datatable.mock.mjs +153 -0
- package/esm2022/lib/datatable/components/number-cell/number-cell.component.mjs +42 -0
- package/esm2022/lib/datatable/data/data-column.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-row-event.model.mjs +26 -0
- package/esm2022/lib/datatable/data/data-row-update.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-row.model.mjs +18 -0
- package/esm2022/lib/datatable/data/data-sorting.model.mjs +24 -0
- package/esm2022/lib/datatable/data/data-table.schema.mjs +132 -0
- package/esm2022/lib/datatable/data/datatable-adapter.mjs +18 -0
- package/esm2022/lib/datatable/data/object-datacolumn.model.mjs +46 -0
- package/esm2022/lib/datatable/data/object-datarow.model.mjs +41 -0
- package/esm2022/lib/datatable/data/object-datatable-adapter.mjs +134 -0
- package/esm2022/lib/datatable/data-column/data-column-header.component.mjs +45 -0
- package/esm2022/lib/datatable/data-column/data-column-list.component.mjs +36 -0
- package/esm2022/lib/datatable/data-column/data-column.component.mjs +114 -0
- package/esm2022/lib/datatable/data-column/index.mjs +18 -0
- package/esm2022/lib/datatable/data-column/public-api.mjs +20 -0
- package/esm2022/lib/datatable/datatable.module.mjs +161 -0
- package/esm2022/lib/datatable/directives/custom-empty-content-template.directive.mjs +35 -0
- package/esm2022/lib/datatable/directives/custom-loading-template.directive.mjs +30 -0
- package/esm2022/lib/datatable/directives/custom-no-permission-template.directive.mjs +35 -0
- package/esm2022/lib/datatable/directives/drop-zone.directive.mjs +89 -0
- package/esm2022/lib/datatable/directives/header-filter-template.directive.mjs +43 -0
- package/esm2022/lib/datatable/directives/loading-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/main-data-table-action-template.directive.mjs +43 -0
- package/esm2022/lib/datatable/directives/no-content-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/no-permission-template.directive.mjs +46 -0
- package/esm2022/lib/datatable/directives/resizable/resizable.directive.mjs +173 -0
- package/esm2022/lib/datatable/directives/resizable/resize-handle.directive.mjs +72 -0
- package/esm2022/lib/datatable/directives/resizable/types.mjs +18 -0
- package/esm2022/lib/datatable/index.mjs +18 -0
- package/esm2022/lib/datatable/public-api.mjs +55 -0
- package/esm2022/lib/datatable/services/datatable.service.mjs +33 -0
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.mjs +50 -0
- package/esm2022/lib/dialogs/confirm-dialog/confirm.dialog.module.mjs +38 -0
- package/esm2022/lib/dialogs/dialog/dialog-data.interface.mjs +18 -0
- package/esm2022/lib/dialogs/dialog/dialog.component.mjs +70 -0
- package/esm2022/lib/dialogs/dialog/dialog.model.mjs +22 -0
- package/esm2022/lib/dialogs/dialog/index.mjs +20 -0
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.mjs +52 -0
- package/esm2022/lib/dialogs/edit-json/edit-json.dialog.module.mjs +34 -0
- package/esm2022/lib/dialogs/index.mjs +18 -0
- package/esm2022/lib/dialogs/public-api.mjs +25 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.component.mjs +73 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.model.mjs +18 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes-dialog.module.mjs +33 -0
- package/esm2022/lib/dialogs/unsaved-changes-dialog/unsaved-changes.guard.mjs +64 -0
- package/esm2022/lib/directives/directive.module.mjs +56 -0
- package/esm2022/lib/directives/highlight.directive.mjs +67 -0
- package/esm2022/lib/directives/index.mjs +18 -0
- package/esm2022/lib/directives/infinite-select-scroll.directive.mjs +67 -0
- package/esm2022/lib/directives/logout.directive.mjs +72 -0
- package/esm2022/lib/directives/public-api.mjs +24 -0
- package/esm2022/lib/directives/tooltip-card/tooltip-card.component.mjs +60 -0
- package/esm2022/lib/directives/tooltip-card/tooltip-card.directive.mjs +104 -0
- package/esm2022/lib/directives/upload.directive.mjs +241 -0
- package/esm2022/lib/dynamic-chip-list/chip.mjs +18 -0
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.component.mjs +204 -0
- package/esm2022/lib/dynamic-chip-list/dynamic-chip-list.module.mjs +33 -0
- package/esm2022/lib/dynamic-chip-list/index.mjs +18 -0
- package/esm2022/lib/dynamic-chip-list/public-api.mjs +20 -0
- package/esm2022/lib/events/base-ui.event.mjs +21 -0
- package/esm2022/lib/events/base.event.mjs +29 -0
- package/esm2022/lib/events/index.mjs +18 -0
- package/esm2022/lib/events/public-api.mjs +19 -0
- package/esm2022/lib/form/components/form-base.component.mjs +212 -0
- package/esm2022/lib/form/components/form-custom-button.directive.mjs +30 -0
- package/esm2022/lib/form/components/form-field/form-field.component.mjs +142 -0
- package/esm2022/lib/form/components/form-renderer.component.mjs +161 -0
- package/esm2022/lib/form/components/form-section/form-section.component.mjs +46 -0
- package/esm2022/lib/form/components/helpers/buttons-visibility.mjs +37 -0
- package/esm2022/lib/form/components/inplace-form-input/inplace-form-input.component.mjs +37 -0
- package/esm2022/lib/form/components/middlewares/decimal-middleware.service.mjs +48 -0
- package/esm2022/lib/form/components/middlewares/middleware.mjs +19 -0
- package/esm2022/lib/form/components/widgets/amount/amount.widget.mjs +77 -0
- package/esm2022/lib/form/components/widgets/base-viewer/base-viewer.widget.mjs +59 -0
- package/esm2022/lib/form/components/widgets/checkbox/checkbox.widget.mjs +52 -0
- package/esm2022/lib/form/components/widgets/core/container-column.model.mjs +28 -0
- package/esm2022/lib/form/components/widgets/core/container.model.mjs +50 -0
- package/esm2022/lib/form/components/widgets/core/content-link.model.mjs +52 -0
- package/esm2022/lib/form/components/widgets/core/displayable-cm-properties.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/error-message.model.mjs +38 -0
- package/esm2022/lib/form/components/widgets/core/external-content-link.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/external-content.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-file-source.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-metadata.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-option.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-rule.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-selected-folder.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-templates.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field-types.mjs +74 -0
- package/esm2022/lib/form/components/widgets/core/form-field-utils.mjs +23 -0
- package/esm2022/lib/form/components/widgets/core/form-field-validator.mjs +268 -0
- package/esm2022/lib/form/components/widgets/core/form-field-variable-options.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-field.model.mjs +490 -0
- package/esm2022/lib/form/components/widgets/core/form-outcome-event.model.mjs +32 -0
- package/esm2022/lib/form/components/widgets/core/form-outcome.model.mjs +38 -0
- package/esm2022/lib/form/components/widgets/core/form-values.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-variable.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/form-widget.model.mjs +33 -0
- package/esm2022/lib/form/components/widgets/core/form.model.mjs +387 -0
- package/esm2022/lib/form/components/widgets/core/group.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/index.mjs +49 -0
- package/esm2022/lib/form/components/widgets/core/predefined-theme.mjs +115 -0
- package/esm2022/lib/form/components/widgets/core/process-form-model.interface.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/process-variable.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/tab.model.mjs +34 -0
- package/esm2022/lib/form/components/widgets/core/theme.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/core/upload-widget-content-link.model.mjs +27 -0
- package/esm2022/lib/form/components/widgets/core/widget-schema.model.mjs +18 -0
- package/esm2022/lib/form/components/widgets/date/date.widget.mjs +162 -0
- package/esm2022/lib/form/components/widgets/date-time/date-time.widget.mjs +153 -0
- package/esm2022/lib/form/components/widgets/decimal/decimal.component.mjs +53 -0
- package/esm2022/lib/form/components/widgets/display-text/display-text.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/display-text/display-text.widget.mjs +46 -0
- package/esm2022/lib/form/components/widgets/display-text/index.mjs +19 -0
- package/esm2022/lib/form/components/widgets/error/error.component.mjs +92 -0
- package/esm2022/lib/form/components/widgets/header/header.schema.mjs +86 -0
- package/esm2022/lib/form/components/widgets/header/header.widget.mjs +42 -0
- package/esm2022/lib/form/components/widgets/header/index.mjs +19 -0
- package/esm2022/lib/form/components/widgets/hyperlink/hyperlink.widget.mjs +69 -0
- package/esm2022/lib/form/components/widgets/index.mjs +71 -0
- package/esm2022/lib/form/components/widgets/json/json.widget.mjs +66 -0
- package/esm2022/lib/form/components/widgets/multiline-text/multiline-text.widget.mjs +55 -0
- package/esm2022/lib/form/components/widgets/number/number.widget.mjs +71 -0
- package/esm2022/lib/form/components/widgets/reactive-widget.interface.mjs +18 -0
- package/esm2022/lib/form/components/widgets/text/text-mask.component.mjs +215 -0
- package/esm2022/lib/form/components/widgets/text/text.widget.mjs +65 -0
- package/esm2022/lib/form/components/widgets/unknown/unknown.widget.mjs +63 -0
- package/esm2022/lib/form/components/widgets/widget.component.mjs +110 -0
- package/esm2022/lib/form/events/form-error.event.mjs +24 -0
- package/esm2022/lib/form/events/form-field.event.mjs +24 -0
- package/esm2022/lib/form/events/form-rules.event.mjs +25 -0
- package/esm2022/lib/form/events/form-spinner.event.mjs +23 -0
- package/esm2022/lib/form/events/form.event.mjs +29 -0
- package/esm2022/lib/form/events/index.mjs +24 -0
- package/esm2022/lib/form/events/validate-form-field.event.mjs +24 -0
- package/esm2022/lib/form/events/validate-form.event.mjs +25 -0
- package/esm2022/lib/form/form-base.module.mjs +90 -0
- package/esm2022/lib/form/index.mjs +18 -0
- package/esm2022/lib/form/models/form-rules.model.mjs +77 -0
- package/esm2022/lib/form/models/task-process-variable.model.mjs +19 -0
- package/esm2022/lib/form/models/widget-visibility.model.mjs +104 -0
- package/esm2022/lib/form/pipes/field-style.pipe.mjs +45 -0
- package/esm2022/lib/form/pipes/index.mjs +18 -0
- package/esm2022/lib/form/public-api.mjs +35 -0
- package/esm2022/lib/form/services/form-rendering.service.mjs +53 -0
- package/esm2022/lib/form/services/form-validation-service.interface.mjs +18 -0
- package/esm2022/lib/form/services/form.service.mjs +86 -0
- package/esm2022/lib/form/services/widget-visibility.service.mjs +294 -0
- package/esm2022/lib/header/header.component.mjs +73 -0
- package/esm2022/lib/header/index.mjs +18 -0
- package/esm2022/lib/header/navbar/navbar-item.component.mjs +37 -0
- package/esm2022/lib/header/navbar/navbar.component.mjs +36 -0
- package/esm2022/lib/header/public-api.mjs +20 -0
- package/esm2022/lib/icon/icon.component.mjs +51 -0
- package/esm2022/lib/icon/icon.module.mjs +36 -0
- package/esm2022/lib/icon/index.mjs +18 -0
- package/esm2022/lib/icon/public-api.mjs +19 -0
- package/esm2022/lib/identity-user-info/identity-user-info.component.mjs +86 -0
- package/esm2022/lib/identity-user-info/identity-user-info.module.mjs +33 -0
- package/esm2022/lib/identity-user-info/index.mjs +18 -0
- package/esm2022/lib/identity-user-info/public-api.mjs +19 -0
- package/esm2022/lib/info-drawer/index.mjs +18 -0
- package/esm2022/lib/info-drawer/info-drawer-layout.component.mjs +71 -0
- package/esm2022/lib/info-drawer/info-drawer.component.mjs +113 -0
- package/esm2022/lib/info-drawer/info-drawer.module.mjs +53 -0
- package/esm2022/lib/info-drawer/public-api.mjs +20 -0
- package/esm2022/lib/interface/index.mjs +18 -0
- package/esm2022/lib/interface/injection.tokens.mjs +19 -0
- package/esm2022/lib/interface/public-api.mjs +18 -0
- package/esm2022/lib/language-menu/index.mjs +18 -0
- package/esm2022/lib/language-menu/language-menu.component.mjs +61 -0
- package/esm2022/lib/language-menu/language-menu.module.mjs +35 -0
- package/esm2022/lib/language-menu/language-picker.component.mjs +77 -0
- package/esm2022/lib/language-menu/public-api.mjs +21 -0
- package/esm2022/lib/language-menu/service/language.service.interface.mjs +18 -0
- package/esm2022/lib/language-menu/service/language.service.mjs +34 -0
- package/esm2022/lib/layout/components/header/header.component.mjs +99 -0
- package/esm2022/lib/layout/components/layout-container/layout-container.component.mjs +180 -0
- package/esm2022/lib/layout/components/sidebar-action/sidebar-action-menu.component.mjs +82 -0
- package/esm2022/lib/layout/components/sidenav-layout/sidenav-layout.component.mjs +145 -0
- package/esm2022/lib/layout/directives/sidenav-layout-content.directive.mjs +33 -0
- package/esm2022/lib/layout/directives/sidenav-layout-header.directive.mjs +33 -0
- package/esm2022/lib/layout/directives/sidenav-layout-navigation.directive.mjs +33 -0
- package/esm2022/lib/layout/index.mjs +18 -0
- package/esm2022/lib/layout/layout.module.mjs +72 -0
- package/esm2022/lib/layout/public-api.mjs +25 -0
- package/esm2022/lib/login/components/login/login.component.mjs +367 -0
- package/esm2022/lib/login/components/login-dialog/login-dialog-component-data.interface.mjs +18 -0
- package/esm2022/lib/login/components/login-dialog/login-dialog.component.mjs +57 -0
- package/esm2022/lib/login/components/login-dialog-panel/login-dialog-panel.component.mjs +48 -0
- package/esm2022/lib/login/directives/login-footer.directive.mjs +41 -0
- package/esm2022/lib/login/directives/login-header.directive.mjs +41 -0
- package/esm2022/lib/login/index.mjs +18 -0
- package/esm2022/lib/login/login.module.mjs +54 -0
- package/esm2022/lib/login/models/login-error.event.mjs +22 -0
- package/esm2022/lib/login/models/login-submit.event.mjs +32 -0
- package/esm2022/lib/login/models/login-success.event.mjs +24 -0
- package/esm2022/lib/login/public-api.mjs +27 -0
- package/esm2022/lib/material.module.mjs +254 -0
- package/esm2022/lib/mock/cookie.service.mock.mjs +43 -0
- package/esm2022/lib/mock/data-column.mock.mjs +73 -0
- package/esm2022/lib/mock/event.mock.mjs +39 -0
- package/esm2022/lib/mock/form/form-definition-readonly.mock.mjs +225 -0
- package/esm2022/lib/mock/form/form-definition-visibility.mock.mjs +347 -0
- package/esm2022/lib/mock/form/form-definition.mock.mjs +403 -0
- package/esm2022/lib/mock/form/form.component.mock.mjs +275 -0
- package/esm2022/lib/mock/form/form.service.mock.mjs +248 -0
- package/esm2022/lib/mock/form/widget-visibility.service.mock.mjs +1835 -0
- package/esm2022/lib/mock/index.mjs +18 -0
- package/esm2022/lib/mock/public-api.mjs +27 -0
- package/esm2022/lib/mock/translation.service.mock.mjs +44 -0
- package/esm2022/lib/models/comment.model.mjs +51 -0
- package/esm2022/lib/models/component.model.mjs +24 -0
- package/esm2022/lib/models/decimal-number.model.mjs +26 -0
- package/esm2022/lib/models/general-user.model.mjs +24 -0
- package/esm2022/lib/models/index.mjs +18 -0
- package/esm2022/lib/models/pagination.model.mjs +29 -0
- package/esm2022/lib/models/path.model.mjs +24 -0
- package/esm2022/lib/models/product-version.model.mjs +28 -0
- package/esm2022/lib/models/public-api.mjs +24 -0
- package/esm2022/lib/models/request-pagination.model.mjs +25 -0
- package/esm2022/lib/notifications/components/add-notification.stories.component.mjs +44 -0
- package/esm2022/lib/notifications/components/notification-history.component.mjs +138 -0
- package/esm2022/lib/notifications/helpers/notification.factory.mjs +43 -0
- package/esm2022/lib/notifications/index.mjs +18 -0
- package/esm2022/lib/notifications/models/notification.model.mjs +25 -0
- package/esm2022/lib/notifications/notification-history.module.mjs +35 -0
- package/esm2022/lib/notifications/public-api.mjs +23 -0
- package/esm2022/lib/notifications/services/notification.service.mjs +166 -0
- package/esm2022/lib/pagination/index.mjs +18 -0
- package/esm2022/lib/pagination/infinite-pagination.component.mjs +111 -0
- package/esm2022/lib/pagination/paginated-component.interface.mjs +18 -0
- package/esm2022/lib/pagination/pagination-component.interface.mjs +18 -0
- package/esm2022/lib/pagination/pagination.component.mjs +263 -0
- package/esm2022/lib/pagination/pagination.module.mjs +35 -0
- package/esm2022/lib/pagination/public-api.mjs +22 -0
- package/esm2022/lib/pipes/date-time.pipe.mjs +46 -0
- package/esm2022/lib/pipes/decimal-number.pipe.mjs +78 -0
- package/esm2022/lib/pipes/file-size.pipe.mjs +54 -0
- package/esm2022/lib/pipes/file-type.pipe.mjs +40 -0
- package/esm2022/lib/pipes/format-space.pipe.mjs +39 -0
- package/esm2022/lib/pipes/full-name.pipe.mjs +43 -0
- package/esm2022/lib/pipes/index.mjs +18 -0
- package/esm2022/lib/pipes/localized-date.pipe.mjs +70 -0
- package/esm2022/lib/pipes/multi-value.pipe.mjs +37 -0
- package/esm2022/lib/pipes/pipe.module.mjs +83 -0
- package/esm2022/lib/pipes/public-api.mjs +30 -0
- package/esm2022/lib/pipes/text-highlight.pipe.mjs +39 -0
- package/esm2022/lib/pipes/time-ago.pipe.mjs +65 -0
- package/esm2022/lib/pipes/truncate.pipe.mjs +33 -0
- package/esm2022/lib/pipes/user-initial.pipe.mjs +52 -0
- package/esm2022/lib/pipes/user-like.interface.mjs +18 -0
- package/esm2022/lib/progress/progress.component.mjs +90 -0
- package/esm2022/lib/search-text/animations.mjs +32 -0
- package/esm2022/lib/search-text/index.mjs +18 -0
- package/esm2022/lib/search-text/models/search-text-input.model.mjs +23 -0
- package/esm2022/lib/search-text/public-api.mjs +22 -0
- package/esm2022/lib/search-text/search-text-input.component.mjs +283 -0
- package/esm2022/lib/search-text/search-text-input.module.mjs +35 -0
- package/esm2022/lib/search-text/search-trigger.directive.mjs +181 -0
- package/esm2022/lib/snackbar-content/index.mjs +18 -0
- package/esm2022/lib/snackbar-content/public-api.mjs +20 -0
- package/esm2022/lib/snackbar-content/snack-bar-data.mjs +18 -0
- package/esm2022/lib/snackbar-content/snackbar-content.component.mjs +49 -0
- package/esm2022/lib/snackbar-content/snackbar-content.module.mjs +33 -0
- package/esm2022/lib/sorting-picker/index.mjs +18 -0
- package/esm2022/lib/sorting-picker/public-api.mjs +18 -0
- package/esm2022/lib/sorting-picker/sorting-picker.component.mjs +67 -0
- package/esm2022/lib/templates/empty-content/empty-content.component.mjs +43 -0
- package/esm2022/lib/templates/error-content/error-content.component.mjs +61 -0
- package/esm2022/lib/templates/index.mjs +18 -0
- package/esm2022/lib/templates/public-api.mjs +20 -0
- package/esm2022/lib/templates/template.module.mjs +38 -0
- package/esm2022/lib/testing/core.story.module.mjs +39 -0
- package/esm2022/lib/testing/core.testing.module.mjs +35 -0
- package/esm2022/lib/testing/index.mjs +22 -0
- package/esm2022/lib/testing/noop-auth.module.mjs +80 -0
- package/esm2022/lib/testing/noop-translate.module.mjs +61 -0
- package/esm2022/lib/testing/unit-testing-utils.mjs +364 -0
- package/esm2022/lib/toolbar/index.mjs +18 -0
- package/esm2022/lib/toolbar/public-api.mjs +21 -0
- package/esm2022/lib/toolbar/toolbar-divider.component.mjs +27 -0
- package/esm2022/lib/toolbar/toolbar-title.component.mjs +32 -0
- package/esm2022/lib/toolbar/toolbar.component.mjs +39 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +36 -0
- package/esm2022/lib/translation/index.mjs +18 -0
- package/esm2022/lib/translation/public-api.mjs +19 -0
- package/esm2022/lib/translation/translate-loader.service.mjs +148 -0
- package/esm2022/lib/translation/translation.service.mjs +148 -0
- package/esm2022/lib/viewer/components/download-prompt-dialog/download-prompt-dialog.component.mjs +36 -0
- package/esm2022/lib/viewer/components/img-viewer/img-viewer.component.mjs +220 -0
- package/esm2022/lib/viewer/components/media-player/media-player.component.mjs +64 -0
- package/esm2022/lib/viewer/components/pdf-viewer/pdf-viewer.component.mjs +550 -0
- package/esm2022/lib/viewer/components/pdf-viewer-password-dialog/pdf-viewer-password-dialog.mjs +60 -0
- package/esm2022/lib/viewer/components/pdf-viewer-thumb/pdf-viewer-thumb.component.mjs +48 -0
- package/esm2022/lib/viewer/components/pdf-viewer-thumbnails/pdf-viewer-thumbnails.component.mjs +198 -0
- package/esm2022/lib/viewer/components/txt-viewer/txt-viewer.component.mjs +85 -0
- package/esm2022/lib/viewer/components/unknown-format/unknown-format.component.mjs +32 -0
- package/esm2022/lib/viewer/components/viewer-more-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-open-with.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-render/viewer-render.component.mjs +216 -0
- package/esm2022/lib/viewer/components/viewer-sidebar.component.mjs +46 -0
- package/esm2022/lib/viewer/components/viewer-toolbar-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-toolbar-custom-actions.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer-toolbar.component.mjs +34 -0
- package/esm2022/lib/viewer/components/viewer.component.mjs +486 -0
- package/esm2022/lib/viewer/directives/viewer-extension.directive.mjs +67 -0
- package/esm2022/lib/viewer/index.mjs +18 -0
- package/esm2022/lib/viewer/models/download-prompt.actions.mjs +23 -0
- package/esm2022/lib/viewer/models/viewer.model.mjs +22 -0
- package/esm2022/lib/viewer/public-api.mjs +40 -0
- package/esm2022/lib/viewer/services/rendering-queue.services.mjs +179 -0
- package/esm2022/lib/viewer/services/view-util.service.mjs +149 -0
- package/esm2022/lib/viewer/viewer.module.mjs +110 -0
- package/esm2022/public-api.mjs +60 -0
- package/esm2022/shell/alfresco-adf-core-shell.mjs +5 -0
- package/esm2022/shell/index.mjs +20 -0
- package/esm2022/shell/lib/components/shell/shell.component.mjs +122 -0
- package/esm2022/shell/lib/services/shell-app.service.mjs +22 -0
- package/esm2022/shell/lib/shell.module.mjs +79 -0
- package/esm2022/shell/lib/shell.routes.mjs +25 -0
- package/feature-flags/lib/providers/debug-feature-flags.provider.d.ts +35 -4
- package/fesm2022/adf-core.mjs +1177 -1229
- package/fesm2022/adf-core.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-api.mjs +4 -4
- package/fesm2022/alfresco-adf-core-api.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-auth.mjs +3 -3
- package/fesm2022/alfresco-adf-core-auth.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs +11 -11
- package/fesm2022/alfresco-adf-core-breadcrumbs.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-feature-flags.mjs +59 -52
- package/fesm2022/alfresco-adf-core-feature-flags.mjs.map +1 -1
- package/fesm2022/alfresco-adf-core-shell.mjs +21 -96
- package/fesm2022/alfresco-adf-core-shell.mjs.map +1 -1
- package/lib/app-config/app-config.module.d.ts +0 -1
- package/lib/app-config/public-api.d.ts +0 -1
- package/lib/auth/oidc/auth.module.d.ts +4 -4
- package/lib/auth/oidc/view/authentication-confirmation/authentication-confirmation.component.d.ts +1 -1
- package/lib/card-view/components/base-card-view.d.ts +1 -1
- package/lib/card-view/components/card-view/card-view.component.scss +9 -12
- package/lib/card-view/components/card-view-selectitem/card-view-selectitem.component.scss +2 -1
- package/lib/card-view/components/card-view-textitem/card-view-textitem.component.scss +5 -2
- package/lib/core.module.d.ts +128 -124
- package/lib/datatable/data/data-table.schema.d.ts +1 -1
- package/lib/dialogs/confirm-dialog/confirm.dialog.d.ts +1 -1
- package/lib/dialogs/confirm-dialog/confirm.dialog.module.d.ts +6 -2
- package/lib/form/form-base.module.d.ts +0 -1
- package/lib/testing/core.testing.module.d.ts +0 -1
- package/lib/testing/noop-translate.module.d.ts +2 -1
- package/lib/translation/public-api.d.ts +0 -1
- package/package.json +15 -3
- package/public-api.d.ts +0 -1
- package/shell/README.md +6 -20
- package/shell/index.d.ts +0 -2
- package/shell/lib/shell.module.d.ts +7 -4
- package/shell/lib/shell.routes.d.ts +1 -13
- package/lib/app-config/provide-app-config.d.ts +0 -23
- package/lib/landing-page/index.d.ts +0 -17
- package/lib/landing-page/provider.d.ts +0 -24
- package/lib/landing-page/public-api.d.ts +0 -17
- package/lib/translation/provide-i18n.d.ts +0 -39
- package/shell/lib/providers.d.ts +0 -36
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { inject, Injectable, RendererFactory2 } from '@angular/core';
|
|
18
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
19
|
+
import { BehaviorSubject } from 'rxjs';
|
|
20
|
+
import { AppConfigService, AppConfigValues } from '../../app-config/app-config.service';
|
|
21
|
+
import { StorageService } from './storage.service';
|
|
22
|
+
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
23
|
+
import { DOCUMENT } from '@angular/common';
|
|
24
|
+
import { Directionality } from '@angular/cdk/bidi';
|
|
25
|
+
import { DEFAULT_LANGUAGE_LIST } from '../models/default-languages.model';
|
|
26
|
+
import * as i0 from "@angular/core";
|
|
27
|
+
import * as i1 from "@ngx-translate/core";
|
|
28
|
+
import * as i2 from "../../app-config/app-config.service";
|
|
29
|
+
import * as i3 from "./storage.service";
|
|
30
|
+
// eslint-disable-next-line no-shadow
|
|
31
|
+
export var UserPreferenceValues;
|
|
32
|
+
(function (UserPreferenceValues) {
|
|
33
|
+
UserPreferenceValues["PaginationSize"] = "paginationSize";
|
|
34
|
+
UserPreferenceValues["Locale"] = "locale";
|
|
35
|
+
UserPreferenceValues["SupportedPageSizes"] = "supportedPageSizes";
|
|
36
|
+
UserPreferenceValues["ExpandedSideNavStatus"] = "expandedSidenav";
|
|
37
|
+
})(UserPreferenceValues || (UserPreferenceValues = {}));
|
|
38
|
+
export class UserPreferencesService {
|
|
39
|
+
constructor(translate, appConfig, storage) {
|
|
40
|
+
this.translate = translate;
|
|
41
|
+
this.appConfig = appConfig;
|
|
42
|
+
this.storage = storage;
|
|
43
|
+
this.document = inject(DOCUMENT);
|
|
44
|
+
this.rendererFactory = inject(RendererFactory2);
|
|
45
|
+
this.directionality = inject(Directionality);
|
|
46
|
+
this.defaults = {
|
|
47
|
+
paginationSize: 25,
|
|
48
|
+
supportedPageSizes: [5, 10, 15, 20],
|
|
49
|
+
locale: 'en',
|
|
50
|
+
expandedSidenav: true
|
|
51
|
+
};
|
|
52
|
+
this.userPreferenceStatus = this.defaults;
|
|
53
|
+
this.onChangeSubject = new BehaviorSubject(this.userPreferenceStatus);
|
|
54
|
+
this.onChange = this.onChangeSubject.asObservable();
|
|
55
|
+
this.appConfig.onLoad.subscribe(() => {
|
|
56
|
+
this.initUserPreferenceStatus();
|
|
57
|
+
});
|
|
58
|
+
const renderer = this.rendererFactory.createRenderer(null, null);
|
|
59
|
+
this.select('textOrientation').subscribe((direction) => {
|
|
60
|
+
renderer.setAttribute(this.document.body, 'dir', direction);
|
|
61
|
+
this.directionality.value = direction;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
initUserPreferenceStatus() {
|
|
65
|
+
this.initUserLanguage();
|
|
66
|
+
this.set(UserPreferenceValues.PaginationSize, this.paginationSize);
|
|
67
|
+
this.set(UserPreferenceValues.SupportedPageSizes, JSON.stringify(this.supportedPageSizes));
|
|
68
|
+
}
|
|
69
|
+
initUserLanguage() {
|
|
70
|
+
if (this.locale || this.appConfig.get(UserPreferenceValues.Locale)) {
|
|
71
|
+
const locale = this.locale || this.getDefaultLocale();
|
|
72
|
+
this.set(UserPreferenceValues.Locale, locale);
|
|
73
|
+
this.set('textOrientation', this.getLanguageByKey(locale).direction || 'ltr');
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const locale = this.locale || this.getDefaultLocale();
|
|
77
|
+
this.setWithoutStore(UserPreferenceValues.Locale, locale);
|
|
78
|
+
this.setWithoutStore('textOrientation', this.getLanguageByKey(locale).direction || 'ltr');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Sets up a callback to notify when a property has changed.
|
|
83
|
+
*
|
|
84
|
+
* @param property The property to watch
|
|
85
|
+
* @returns Notification callback
|
|
86
|
+
*/
|
|
87
|
+
select(property) {
|
|
88
|
+
return this.onChange.pipe(map((userPreferenceStatus) => userPreferenceStatus[property]), distinctUntilChanged());
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets a preference property.
|
|
92
|
+
*
|
|
93
|
+
* @param property Name of the property
|
|
94
|
+
* @param defaultValue Default to return if the property is not found
|
|
95
|
+
* @returns Preference property
|
|
96
|
+
*/
|
|
97
|
+
get(property, defaultValue) {
|
|
98
|
+
const key = this.getPropertyKey(property);
|
|
99
|
+
const value = this.storage.getItem(key);
|
|
100
|
+
if (value === undefined || value === null) {
|
|
101
|
+
return defaultValue;
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Sets a preference property.
|
|
107
|
+
*
|
|
108
|
+
* @param property Name of the property
|
|
109
|
+
* @param value New value for the property
|
|
110
|
+
*/
|
|
111
|
+
set(property, value) {
|
|
112
|
+
if (!property) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.storage.setItem(this.getPropertyKey(property), value);
|
|
116
|
+
this.userPreferenceStatus[property] = value;
|
|
117
|
+
this.onChangeSubject.next(this.userPreferenceStatus);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Sets a preference property.
|
|
121
|
+
*
|
|
122
|
+
* @param property Name of the property
|
|
123
|
+
* @param value New value for the property
|
|
124
|
+
*/
|
|
125
|
+
setWithoutStore(property, value) {
|
|
126
|
+
if (!property) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
this.userPreferenceStatus[property] = value;
|
|
130
|
+
this.onChangeSubject.next(this.userPreferenceStatus);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check if an item is present in the storage
|
|
134
|
+
*
|
|
135
|
+
* @param property Name of the property
|
|
136
|
+
* @returns True if the item is present, false otherwise
|
|
137
|
+
*/
|
|
138
|
+
hasItem(property) {
|
|
139
|
+
if (!property) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
return this.storage.hasItem(this.getPropertyKey(property));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Gets the active storage prefix for preferences.
|
|
146
|
+
*
|
|
147
|
+
* @returns Storage prefix
|
|
148
|
+
*/
|
|
149
|
+
getStoragePrefix() {
|
|
150
|
+
return this.storage.getItem('USER_PROFILE') || 'GUEST';
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Sets the active storage prefix for preferences.
|
|
154
|
+
*
|
|
155
|
+
* @param value Name of the prefix
|
|
156
|
+
*/
|
|
157
|
+
setStoragePrefix(value) {
|
|
158
|
+
this.storage.setItem('USER_PROFILE', value || 'GUEST');
|
|
159
|
+
this.initUserPreferenceStatus();
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Gets the full property key with prefix.
|
|
163
|
+
*
|
|
164
|
+
* @param property The property name
|
|
165
|
+
* @returns Property key
|
|
166
|
+
*/
|
|
167
|
+
getPropertyKey(property) {
|
|
168
|
+
return `${this.getStoragePrefix()}__${property}`;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Gets an array containing the available page sizes.
|
|
172
|
+
*
|
|
173
|
+
* @returns Array of page size values
|
|
174
|
+
*/
|
|
175
|
+
get supportedPageSizes() {
|
|
176
|
+
const supportedPageSizes = this.get(UserPreferenceValues.SupportedPageSizes);
|
|
177
|
+
if (supportedPageSizes) {
|
|
178
|
+
return JSON.parse(supportedPageSizes);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
return this.appConfig.get('pagination.supportedPageSizes', this.defaults.supportedPageSizes);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
set supportedPageSizes(value) {
|
|
185
|
+
this.set(UserPreferenceValues.SupportedPageSizes, JSON.stringify(value));
|
|
186
|
+
}
|
|
187
|
+
/** Pagination size. */
|
|
188
|
+
set paginationSize(value) {
|
|
189
|
+
this.set(UserPreferenceValues.PaginationSize, value);
|
|
190
|
+
}
|
|
191
|
+
get paginationSize() {
|
|
192
|
+
const paginationSize = this.get(UserPreferenceValues.PaginationSize);
|
|
193
|
+
if (paginationSize) {
|
|
194
|
+
return Number(paginationSize);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
return Number(this.appConfig.get('pagination.size', this.defaults.paginationSize));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Current locale setting.
|
|
202
|
+
*
|
|
203
|
+
* @returns locale name
|
|
204
|
+
*/
|
|
205
|
+
get locale() {
|
|
206
|
+
return this.get(UserPreferenceValues.Locale);
|
|
207
|
+
}
|
|
208
|
+
set locale(value) {
|
|
209
|
+
this.set(UserPreferenceValues.Locale, value);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Gets the default locale.
|
|
213
|
+
*
|
|
214
|
+
* @returns Default locale language code
|
|
215
|
+
*/
|
|
216
|
+
getDefaultLocale() {
|
|
217
|
+
return this.appConfig.get(UserPreferenceValues.Locale) || this.translate.getBrowserCultureLang() || 'en';
|
|
218
|
+
}
|
|
219
|
+
getLanguageByKey(key) {
|
|
220
|
+
const defaultLanguage = { key: 'en' };
|
|
221
|
+
let language;
|
|
222
|
+
const customLanguages = this.appConfig.get(AppConfigValues.APP_CONFIG_LANGUAGES_KEY);
|
|
223
|
+
if (Array.isArray(customLanguages)) {
|
|
224
|
+
language = customLanguages.find((customLanguage) => key.includes(customLanguage.key));
|
|
225
|
+
}
|
|
226
|
+
language ??= DEFAULT_LANGUAGE_LIST.find((defaultLang) => defaultLang.key === key) ?? defaultLanguage;
|
|
227
|
+
return language;
|
|
228
|
+
}
|
|
229
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreferencesService, deps: [{ token: i1.TranslateService }, { token: i2.AppConfigService }, { token: i3.StorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
230
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreferencesService, providedIn: 'root' }); }
|
|
231
|
+
}
|
|
232
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserPreferencesService, decorators: [{
|
|
233
|
+
type: Injectable,
|
|
234
|
+
args: [{
|
|
235
|
+
providedIn: 'root'
|
|
236
|
+
}]
|
|
237
|
+
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.AppConfigService }, { type: i3.StorageService }] });
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvcmUvc3JjL2xpYi9jb21tb24vc2VydmljZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQWEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7QUFFMUUscUNBQXFDO0FBQ3JDLE1BQU0sQ0FBTixJQUFZLG9CQUtYO0FBTEQsV0FBWSxvQkFBb0I7SUFDNUIseURBQWlDLENBQUE7SUFDakMseUNBQWlCLENBQUE7SUFDakIsaUVBQXlDLENBQUE7SUFDekMsaUVBQXlDLENBQUE7QUFDN0MsQ0FBQyxFQUxXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFLL0I7QUFLRCxNQUFNLE9BQU8sc0JBQXNCO0lBZ0IvQixZQUFtQixTQUEyQixFQUFVLFNBQTJCLEVBQVUsT0FBdUI7UUFBakcsY0FBUyxHQUFULFNBQVMs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R0FBVztRQUNoQyxNQUFNLGVBQWUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQWtCLENBQUM7UUFDdEQsSUFBSSxRQUFzQixDQUFDO1FBRTNCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFzQixlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUMxRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxRQUFRLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQ0QsUUFBUSxLQUFLLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsSUFBSSxlQUFlLENBQUM7UUFDckcsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzsrR0ExTlEsc0JBQXNCO21IQUF0QixzQkFBc0IsY0FGbkIsTUFBTTs7NEZBRVQsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UsIEFwcENvbmZpZ1ZhbHVlcyB9IGZyb20gJy4uLy4uL2FwcC1jb25maWcvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExhbmd1YWdlSXRlbSB9IGZyb20gJy4vbGFuZ3VhZ2UtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxpdHksIERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IERFRkFVTFRfTEFOR1VBR0VfTElTVCB9IGZyb20gJy4uL21vZGVscy9kZWZhdWx0LWxhbmd1YWdlcy5tb2RlbCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbmV4cG9ydCBlbnVtIFVzZXJQcmVmZXJlbmNlVmFsdWVzIHtcbiAgICBQYWdpbmF0aW9uU2l6ZSA9ICdwYWdpbmF0aW9uU2l6ZScsXG4gICAgTG9jYWxlID0gJ2xvY2FsZScsXG4gICAgU3VwcG9ydGVkUGFnZVNpemVzID0gJ3N1cHBvcnRlZFBhZ2VTaXplcycsXG4gICAgRXhwYW5kZWRTaWRlTmF2U3RhdHVzID0gJ2V4cGFuZGVkU2lkZW5hdidcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgICBwcml2YXRlIHJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyKTtcbiAgICBwcml2YXRlIGRpcmVjdGlvbmFsaXR5ID0gaW5qZWN0KERpcmVjdGlvbmFsaXR5KTtcblxuICAgIGRlZmF1bHRzID0ge1xuICAgICAgICBwYWdpbmF0aW9uU2l6ZTogMjUsXG4gICAgICAgIHN1cHBvcnRlZFBhZ2VTaXplczogWzUsIDEwLCAxNSwgMjBdLFxuICAgICAgICBsb2NhbGU6ICdlbicsXG4gICAgICAgIGV4cGFuZGVkU2lkZW5hdjogdHJ1ZVxuICAgIH07XG5cbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlU3RhdHVzOiBhbnkgPSB0aGlzLmRlZmF1bHRzO1xuICAgIHByaXZhdGUgb25DaGFuZ2VTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PjtcbiAgICBvbkNoYW5nZTogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMudXNlclByZWZlcmVuY2VTdGF0dXMpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICAgICAgdGhpcy5hcHBDb25maWcub25Mb2FkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRVc2VyUHJlZmVyZW5jZVN0YXR1cygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0KCd0ZXh0T3JpZW50YXRpb24nKS5zdWJzY3JpYmUoKGRpcmVjdGlvbjogRGlyZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5kb2N1bWVudC5ib2R5LCAnZGlyJywgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgICh0aGlzLmRpcmVjdGlvbmFsaXR5IGFzIGFueSkudmFsdWUgPSBkaXJlY3Rpb247XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFVzZXJQcmVmZXJlbmNlU3RhdHVzKCkge1xuICAgICAgICB0aGlzLmluaXRVc2VyTGFuZ3VhZ2UoKTtcbiAgICAgICAgdGhpcy5zZXQoVXNlclByZWZlcmVuY2VWYWx1ZXMuUGFnaW5hdGlvblNpemUsIHRoaXMucGFnaW5hdGlvblNpemUpO1xuICAgICAgICB0aGlzLnNldChVc2VyUHJlZmVyZW5jZVZhbHVlcy5TdXBwb3J0ZWRQYWdlU2l6ZXMsIEpTT04uc3RyaW5naWZ5KHRoaXMuc3VwcG9ydGVkUGFnZVNpemVzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VXNlckxhbmd1YWdlKCkge1xuICAgICAgICBpZiAodGhpcy5sb2NhbGUgfHwgdGhpcy5hcHBDb25maWcuZ2V0PHN0cmluZz4oVXNlclByZWZlcmVuY2VWYWx1ZXMuTG9jYWxlKSkge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5nZXREZWZhdWx0TG9jYWxlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLkxvY2FsZSwgbG9jYWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0KCd0ZXh0T3JpZW50YXRpb24nLCB0aGlzLmdldExhbmd1YWdlQnlLZXkobG9jYWxlKS5kaXJlY3Rpb24gfHwgJ2x0cicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5nZXREZWZhdWx0TG9jYWxlKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0V2l0aG91dFN0b3JlKFVzZXJQcmVmZXJlbmNlVmFsdWVzLkxvY2FsZSwgbG9jYWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0V2l0aG91dFN0b3JlKCd0ZXh0T3JpZW50YXRpb24nLCB0aGlzLmdldExhbmd1YWdlQnlLZXkobG9jYWxlKS5kaXJlY3Rpb24gfHwgJ2x0cicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB1cCBhIGNhbGxiYWNrIHRvIG5vdGlmeSB3aGVuIGEgcHJvcGVydHkgaGFzIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIHdhdGNoXG4gICAgICogQHJldHVybnMgTm90aWZpY2F0aW9uIGNhbGxiYWNrXG4gICAgICovXG4gICAgc2VsZWN0PFQgPSBhbnk+KHByb3BlcnR5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25DaGFuZ2UucGlwZShcbiAgICAgICAgICAgIG1hcCgodXNlclByZWZlcmVuY2VTdGF0dXMpID0+IHVzZXJQcmVmZXJlbmNlU3RhdHVzW3Byb3BlcnR5XSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIHByZWZlcmVuY2UgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHlcbiAgICAgKiBAcGFyYW0gZGVmYXVsdFZhbHVlIERlZmF1bHQgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmRcbiAgICAgKiBAcmV0dXJucyBQcmVmZXJlbmNlIHByb3BlcnR5XG4gICAgICovXG4gICAgZ2V0KHByb3BlcnR5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0UHJvcGVydHlLZXkocHJvcGVydHkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgcHJlZmVyZW5jZSBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBOYW1lIG9mIHRoZSBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB2YWx1ZSBOZXcgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHNldChwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICghcHJvcGVydHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdldFByb3BlcnR5S2V5KHByb3BlcnR5KSwgdmFsdWUpO1xuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlU3RhdHVzW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlU3ViamVjdC5uZXh0KHRoaXMudXNlclByZWZlcmVuY2VTdGF0dXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYSBwcmVmZXJlbmNlIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE5hbWUgb2YgdGhlIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHZhbHVlIE5ldyB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0V2l0aG91dFN0b3JlKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlclByZWZlcmVuY2VTdGF0dXNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2VTdWJqZWN0Lm5leHQodGhpcy51c2VyUHJlZmVyZW5jZVN0YXR1cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYW4gaXRlbSBpcyBwcmVzZW50IGluIHRoZSBzdG9yYWdlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTmFtZSBvZiB0aGUgcHJvcGVydHlcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIGlzIHByZXNlbnQsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGhhc0l0ZW0ocHJvcGVydHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5oYXNJdGVtKHRoaXMuZ2V0UHJvcGVydHlLZXkocHJvcGVydHkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhY3RpdmUgc3RvcmFnZSBwcmVmaXggZm9yIHByZWZlcmVuY2VzLlxuICAgICAqXG4gICAgICogQHJldHVybnMgU3RvcmFnZSBwcmVmaXhcbiAgICAgKi9cbiAgICBnZXRTdG9yYWdlUHJlZml4KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnVVNFUl9QUk9GSUxFJykgfHwgJ0dVRVNUJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhY3RpdmUgc3RvcmFnZSBwcmVmaXggZm9yIHByZWZlcmVuY2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIE5hbWUgb2YgdGhlIHByZWZpeFxuICAgICAqL1xuICAgIHNldFN0b3JhZ2VQcmVmaXgodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oJ1VTRVJfUFJPRklMRScsIHZhbHVlIHx8ICdHVUVTVCcpO1xuICAgICAgICB0aGlzLmluaXRVc2VyUHJlZmVyZW5jZVN0YXR1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGZ1bGwgcHJvcGVydHkga2V5IHdpdGggcHJlZml4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHJldHVybnMgUHJvcGVydHkga2V5XG4gICAgICovXG4gICAgZ2V0UHJvcGVydHlLZXkocHJvcGVydHk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdldFN0b3JhZ2VQcmVmaXgoKX1fXyR7cHJvcGVydHl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZSBwYWdlIHNpemVzLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgcGFnZSBzaXplIHZhbHVlc1xuICAgICAqL1xuICAgIGdldCBzdXBwb3J0ZWRQYWdlU2l6ZXMoKTogbnVtYmVyW10ge1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRQYWdlU2l6ZXMgPSB0aGlzLmdldChVc2VyUHJlZmVyZW5jZVZhbHVlcy5TdXBwb3J0ZWRQYWdlU2l6ZXMpO1xuXG4gICAgICAgIGlmIChzdXBwb3J0ZWRQYWdlU2l6ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN1cHBvcnRlZFBhZ2VTaXplcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBDb25maWcuZ2V0KCdwYWdpbmF0aW9uLnN1cHBvcnRlZFBhZ2VTaXplcycsIHRoaXMuZGVmYXVsdHMuc3VwcG9ydGVkUGFnZVNpemVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldCBzdXBwb3J0ZWRQYWdlU2l6ZXModmFsdWU6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMuc2V0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLlN1cHBvcnRlZFBhZ2VTaXplcywgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogUGFnaW5hdGlvbiBzaXplLiAqL1xuICAgIHNldCBwYWdpbmF0aW9uU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLlBhZ2luYXRpb25TaXplLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHBhZ2luYXRpb25TaXplKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25TaXplID0gdGhpcy5nZXQoVXNlclByZWZlcmVuY2VWYWx1ZXMuUGFnaW5hdGlvblNpemUpO1xuXG4gICAgICAgIGlmIChwYWdpbmF0aW9uU2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcihwYWdpbmF0aW9uU2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMuYXBwQ29uZmlnLmdldCgncGFnaW5hdGlvbi5zaXplJywgdGhpcy5kZWZhdWx0cy5wYWdpbmF0aW9uU2l6ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCBsb2NhbGUgc2V0dGluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGxvY2FsZSBuYW1lXG4gICAgICovXG4gICAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoVXNlclByZWZlcmVuY2VWYWx1ZXMuTG9jYWxlKTtcbiAgICB9XG5cbiAgICBzZXQgbG9jYWxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoVXNlclByZWZlcmVuY2VWYWx1ZXMuTG9jYWxlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZGVmYXVsdCBsb2NhbGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBEZWZhdWx0IGxvY2FsZSBsYW5ndWFnZSBjb2RlXG4gICAgICovXG4gICAgZ2V0RGVmYXVsdExvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBDb25maWcuZ2V0PHN0cmluZz4oVXNlclByZWZlcmVuY2VWYWx1ZXMuTG9jYWxlKSB8fCB0aGlzLnRyYW5zbGF0ZS5nZXRCcm93c2VyQ3VsdHVyZUxhbmcoKSB8fCAnZW4nO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGFuZ3VhZ2VCeUtleShrZXk6IHN0cmluZyk6IExhbmd1YWdlSXRlbSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IHsga2V5OiAnZW4nIH0gYXMgTGFuZ3VhZ2VJdGVtO1xuICAgICAgICBsZXQgbGFuZ3VhZ2U6IExhbmd1YWdlSXRlbTtcblxuICAgICAgICBjb25zdCBjdXN0b21MYW5ndWFnZXMgPSB0aGlzLmFwcENvbmZpZy5nZXQ8QXJyYXk8TGFuZ3VhZ2VJdGVtPj4oQXBwQ29uZmlnVmFsdWVzLkFQUF9DT05GSUdfTEFOR1VBR0VTX0tFWSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1c3RvbUxhbmd1YWdlcykpIHtcbiAgICAgICAgICAgIGxhbmd1YWdlID0gY3VzdG9tTGFuZ3VhZ2VzLmZpbmQoKGN1c3RvbUxhbmd1YWdlKSA9PiBrZXkuaW5jbHVkZXMoY3VzdG9tTGFuZ3VhZ2Uua2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFuZ3VhZ2UgPz89IERFRkFVTFRfTEFOR1VBR0VfTElTVC5maW5kKChkZWZhdWx0TGFuZykgPT4gZGVmYXVsdExhbmcua2V5ID09PSBrZXkpID8/IGRlZmF1bHRMYW5ndWFnZTtcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { DateFnsAdapter } from '@angular/material-date-fns-adapter';
|
|
18
|
+
import { DateFnsUtils } from './date-fns-utils';
|
|
19
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
20
|
+
import { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
|
|
21
|
+
import { UserPreferenceValues, UserPreferencesService } from '../services/user-preferences.service';
|
|
22
|
+
import { isValid, parse } from 'date-fns';
|
|
23
|
+
import * as i0 from "@angular/core";
|
|
24
|
+
import * as i1 from "../services/user-preferences.service";
|
|
25
|
+
/**
|
|
26
|
+
* Date-fns adapter with moment-to-date-fns conversion.
|
|
27
|
+
*
|
|
28
|
+
* Automatically switches locales based on user preferences.
|
|
29
|
+
* Supports custom display format.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
*
|
|
33
|
+
* Add the following to the component `providers` section
|
|
34
|
+
*
|
|
35
|
+
* providers: [
|
|
36
|
+
* { provide: MAT_DATE_FORMATS, useValue: ADF_FORM_DATE_FORMATS },
|
|
37
|
+
* { provide: DateAdapter, useClass: AdfDateFnsAdapter }
|
|
38
|
+
* ]
|
|
39
|
+
*
|
|
40
|
+
* Setting custom format
|
|
41
|
+
*
|
|
42
|
+
* constructor(private dateAdapter: DateAdapter<Date>) {}
|
|
43
|
+
*
|
|
44
|
+
* ngOnInit() {
|
|
45
|
+
* const adapter = this.dateAdapter as AdfDateFnsAdapter;
|
|
46
|
+
adapter.displayFormat = '<custom date-fns format>';
|
|
47
|
+
* }
|
|
48
|
+
*/
|
|
49
|
+
export const DEFAULT_DATE_FORMAT = 'dd-MM-yyyy';
|
|
50
|
+
/**
|
|
51
|
+
* Material date formats for Date-fns
|
|
52
|
+
*/
|
|
53
|
+
export const ADF_DATE_FORMATS = {
|
|
54
|
+
parse: {
|
|
55
|
+
dateInput: DEFAULT_DATE_FORMAT
|
|
56
|
+
},
|
|
57
|
+
display: {
|
|
58
|
+
dateInput: DEFAULT_DATE_FORMAT,
|
|
59
|
+
monthLabel: 'LLL',
|
|
60
|
+
monthYearLabel: 'LLL uuuu',
|
|
61
|
+
dateA11yLabel: 'PP',
|
|
62
|
+
monthYearA11yLabel: 'LLLL uuuu'
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
export class AdfDateFnsAdapter extends DateFnsAdapter {
|
|
66
|
+
get displayFormat() {
|
|
67
|
+
return this._displayFormat;
|
|
68
|
+
}
|
|
69
|
+
set displayFormat(value) {
|
|
70
|
+
this._displayFormat = value ? DateFnsUtils.convertMomentToDateFnsFormat(value) : null;
|
|
71
|
+
}
|
|
72
|
+
constructor(matDateLocale, formats, preferences) {
|
|
73
|
+
super(matDateLocale);
|
|
74
|
+
this.formats = formats;
|
|
75
|
+
this._displayFormat = null;
|
|
76
|
+
preferences.select(UserPreferenceValues.Locale).subscribe((locale) => {
|
|
77
|
+
this.setLocale(DateFnsUtils.getLocaleFromString(locale));
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
parse(value, parseFormat) {
|
|
81
|
+
const dateValue = this.isValid(value) ? value : this.parseAndValidateDate(value);
|
|
82
|
+
const format = Array.isArray(parseFormat)
|
|
83
|
+
? parseFormat.map(DateFnsUtils.convertMomentToDateFnsFormat)
|
|
84
|
+
: DateFnsUtils.convertMomentToDateFnsFormat(parseFormat);
|
|
85
|
+
return super.parse(dateValue, format);
|
|
86
|
+
}
|
|
87
|
+
format(date, displayFormat) {
|
|
88
|
+
displayFormat = DateFnsUtils.convertMomentToDateFnsFormat(displayFormat);
|
|
89
|
+
if (this.displayFormat && displayFormat === this.formats?.display?.dateInput) {
|
|
90
|
+
return super.format(date, this.displayFormat || displayFormat);
|
|
91
|
+
}
|
|
92
|
+
return super.format(date, displayFormat);
|
|
93
|
+
}
|
|
94
|
+
parseAndValidateDate(value) {
|
|
95
|
+
const parsedDate = parse(value, this.displayFormat || DEFAULT_DATE_FORMAT, new Date());
|
|
96
|
+
return isValid(parsedDate) ? parsedDate : value;
|
|
97
|
+
}
|
|
98
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdfDateFnsAdapter, deps: [{ token: MAT_DATE_LOCALE, optional: true }, { token: MAT_DATE_FORMATS, optional: true }, { token: i1.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
99
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdfDateFnsAdapter, providedIn: 'root' }); }
|
|
100
|
+
}
|
|
101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdfDateFnsAdapter, decorators: [{
|
|
102
|
+
type: Injectable,
|
|
103
|
+
args: [{ providedIn: 'root' }]
|
|
104
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
105
|
+
type: Optional
|
|
106
|
+
}, {
|
|
107
|
+
type: Inject,
|
|
108
|
+
args: [MAT_DATE_LOCALE]
|
|
109
|
+
}] }, { type: undefined, decorators: [{
|
|
110
|
+
type: Optional
|
|
111
|
+
}, {
|
|
112
|
+
type: Inject,
|
|
113
|
+
args: [MAT_DATE_FORMATS]
|
|
114
|
+
}] }, { type: i1.UserPreferencesService }] });
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mbnMtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvY29tbW9uL3V0aWxzL2RhdGUtZm5zLWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBa0IsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRyxPQUFPLEVBQUUsT0FBTyxFQUFVLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQzs7O0FBRWxEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUVILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFlBQVksQ0FBQztBQUVoRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFtQjtJQUM1QyxLQUFLLEVBQUU7UUFDSCxTQUFTLEVBQUUsbUJBQW1CO0tBQ2pDO0lBQ0QsT0FBTyxFQUFFO1FBQ0wsU0FBUyxFQUFFLG1CQUFtQjtRQUM5QixVQUFVLEVBQUUsS0FBSztRQUNqQixjQUFjLEVBQUUsVUFBVTtRQUMxQixhQUFhLEVBQUUsSUFBSTtRQUNuQixrQkFBa0IsRUFBRSxXQUFXO0tBQ2xDO0NBQ0osQ0FBQztBQUdGLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxjQUFjO0lBR2pELElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFGLENBQUM7SUFFRCxZQUN5QyxhQUFxQixFQUNaLE9BQXVCLEVBQ3JFLFdBQW1DO1FBRW5DLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUh5QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQVpqRSxtQkFBYyxHQUFZLElBQUksQ0FBQztRQWlCbkMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVRLEtBQUssQ0FBQyxLQUFVLEVBQUUsV0FBOEI7UUFDckQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDckMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDO1lBQzVELENBQUMsQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRVEsTUFBTSxDQUFDLElBQVUsRUFBRSxhQUFxQjtRQUM3QyxhQUFhLEdBQUcsWUFBWSxDQUFDLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXpFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDM0UsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxLQUFVO1FBQ25DLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxtQkFBbUIsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkYsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3BELENBQUM7K0dBNUNRLGlCQUFpQixrQkFZRixlQUFlLDZCQUNmLGdCQUFnQjttSEFiL0IsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQWF6QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUNsQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRGF0ZUZuc0FkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1kYXRlLWZucy1hZGFwdGVyJztcbmltcG9ydCB7IERhdGVGbnNVdGlscyB9IGZyb20gJy4vZGF0ZS1mbnMtdXRpbHMnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RBVEVfRk9STUFUUywgTUFUX0RBVEVfTE9DQUxFLCBNYXREYXRlRm9ybWF0cyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VWYWx1ZXMsIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNWYWxpZCwgTG9jYWxlLCBwYXJzZSB9IGZyb20gJ2RhdGUtZm5zJztcblxuLyoqXG4gKiBEYXRlLWZucyBhZGFwdGVyIHdpdGggbW9tZW50LXRvLWRhdGUtZm5zIGNvbnZlcnNpb24uXG4gKlxuICogQXV0b21hdGljYWxseSBzd2l0Y2hlcyBsb2NhbGVzIGJhc2VkIG9uIHVzZXIgcHJlZmVyZW5jZXMuXG4gKiBTdXBwb3J0cyBjdXN0b20gZGlzcGxheSBmb3JtYXQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBBZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgY29tcG9uZW50IGBwcm92aWRlcnNgIHNlY3Rpb25cbiAqXG4gKiBwcm92aWRlcnM6IFtcbiAqICB7IHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBBREZfRk9STV9EQVRFX0ZPUk1BVFMgfSxcbiAqICB7IHByb3ZpZGU6IERhdGVBZGFwdGVyLCB1c2VDbGFzczogQWRmRGF0ZUZuc0FkYXB0ZXIgfVxuICogXVxuICpcbiAqIFNldHRpbmcgY3VzdG9tIGZvcm1hdFxuICpcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+KSB7fVxuICpcbiAqIG5nT25Jbml0KCkge1xuICogICBjb25zdCBhZGFwdGVyID0gdGhpcy5kYXRlQWRhcHRlciBhcyBBZGZEYXRlRm5zQWRhcHRlcjtcbiAgICAgYWRhcHRlci5kaXNwbGF5Rm9ybWF0ID0gJzxjdXN0b20gZGF0ZS1mbnMgZm9ybWF0Pic7XG4gKiB9XG4gKi9cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfREFURV9GT1JNQVQgPSAnZGQtTU0teXl5eSc7XG5cbi8qKlxuICogTWF0ZXJpYWwgZGF0ZSBmb3JtYXRzIGZvciBEYXRlLWZuc1xuICovXG5leHBvcnQgY29uc3QgQURGX0RBVEVfRk9STUFUUzogTWF0RGF0ZUZvcm1hdHMgPSB7XG4gICAgcGFyc2U6IHtcbiAgICAgICAgZGF0ZUlucHV0OiBERUZBVUxUX0RBVEVfRk9STUFUXG4gICAgfSxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAgIGRhdGVJbnB1dDogREVGQVVMVF9EQVRFX0ZPUk1BVCxcbiAgICAgICAgbW9udGhMYWJlbDogJ0xMTCcsXG4gICAgICAgIG1vbnRoWWVhckxhYmVsOiAnTExMIHV1dXUnLFxuICAgICAgICBkYXRlQTExeUxhYmVsOiAnUFAnLFxuICAgICAgICBtb250aFllYXJBMTF5TGFiZWw6ICdMTExMIHV1dXUnXG4gICAgfVxufTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBZGZEYXRlRm5zQWRhcHRlciBleHRlbmRzIERhdGVGbnNBZGFwdGVyIHtcbiAgICBwcml2YXRlIF9kaXNwbGF5Rm9ybWF0Pzogc3RyaW5nID0gbnVsbDtcblxuICAgIGdldCBkaXNwbGF5Rm9ybWF0KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheUZvcm1hdDtcbiAgICB9XG5cbiAgICBzZXQgZGlzcGxheUZvcm1hdCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9kaXNwbGF5Rm9ybWF0ID0gdmFsdWUgPyBEYXRlRm5zVXRpbHMuY29udmVydE1vbWVudFRvRGF0ZUZuc0Zvcm1hdCh2YWx1ZSkgOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9EQVRFX0xPQ0FMRSkgbWF0RGF0ZUxvY2FsZTogTG9jYWxlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9EQVRFX0ZPUk1BVFMpIHByaXZhdGUgZm9ybWF0czogTWF0RGF0ZUZvcm1hdHMsXG4gICAgICAgIHByZWZlcmVuY2VzOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKG1hdERhdGVMb2NhbGUpO1xuXG4gICAgICAgIHByZWZlcmVuY2VzLnNlbGVjdChVc2VyUHJlZmVyZW5jZVZhbHVlcy5Mb2NhbGUpLnN1YnNjcmliZSgobG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9jYWxlKERhdGVGbnNVdGlscy5nZXRMb2NhbGVGcm9tU3RyaW5nKGxvY2FsZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBwYXJzZSh2YWx1ZTogYW55LCBwYXJzZUZvcm1hdDogc3RyaW5nIHwgc3RyaW5nW10pOiBEYXRlIHtcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gdGhpcy5pc1ZhbGlkKHZhbHVlKSA/IHZhbHVlIDogdGhpcy5wYXJzZUFuZFZhbGlkYXRlRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IEFycmF5LmlzQXJyYXkocGFyc2VGb3JtYXQpXG4gICAgICAgICAgICA/IHBhcnNlRm9ybWF0Lm1hcChEYXRlRm5zVXRpbHMuY29udmVydE1vbWVudFRvRGF0ZUZuc0Zvcm1hdClcbiAgICAgICAgICAgIDogRGF0ZUZuc1V0aWxzLmNvbnZlcnRNb21lbnRUb0RhdGVGbnNGb3JtYXQocGFyc2VGb3JtYXQpO1xuICAgICAgICByZXR1cm4gc3VwZXIucGFyc2UoZGF0ZVZhbHVlLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGZvcm1hdChkYXRlOiBEYXRlLCBkaXNwbGF5Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBkaXNwbGF5Rm9ybWF0ID0gRGF0ZUZuc1V0aWxzLmNvbnZlcnRNb21lbnRUb0RhdGVGbnNGb3JtYXQoZGlzcGxheUZvcm1hdCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheUZvcm1hdCAmJiBkaXNwbGF5Rm9ybWF0ID09PSB0aGlzLmZvcm1hdHM/LmRpc3BsYXk/LmRhdGVJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmZvcm1hdChkYXRlLCB0aGlzLmRpc3BsYXlGb3JtYXQgfHwgZGlzcGxheUZvcm1hdCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIuZm9ybWF0KGRhdGUsIGRpc3BsYXlGb3JtYXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VBbmRWYWxpZGF0ZURhdGUodmFsdWU6IGFueSk6IERhdGUge1xuICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gcGFyc2UodmFsdWUsIHRoaXMuZGlzcGxheUZvcm1hdCB8fCBERUZBVUxUX0RBVEVfRk9STUFULCBuZXcgRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQocGFyc2VkRGF0ZSkgPyBwYXJzZWREYXRlIDogdmFsdWU7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { format, parse, parseISO, isValid, isBefore, isAfter } from 'date-fns';
|
|
18
|
+
import { ar, cs, da, de, enUS, es, fi, fr, it, ja, nb, nl, pl, ptBR, ru, sv, zhCN } from 'date-fns/locale';
|
|
19
|
+
const panDate = (num = 1) => {
|
|
20
|
+
let text = num.toString();
|
|
21
|
+
while (text.length < 2) {
|
|
22
|
+
text = '0' + text;
|
|
23
|
+
}
|
|
24
|
+
return text;
|
|
25
|
+
};
|
|
26
|
+
export class DateFnsUtils {
|
|
27
|
+
static getLocaleFromString(locale) {
|
|
28
|
+
let dateFnsLocale;
|
|
29
|
+
switch (locale) {
|
|
30
|
+
case 'ar':
|
|
31
|
+
dateFnsLocale = ar;
|
|
32
|
+
break;
|
|
33
|
+
case 'cs':
|
|
34
|
+
dateFnsLocale = cs;
|
|
35
|
+
break;
|
|
36
|
+
case 'da':
|
|
37
|
+
dateFnsLocale = da;
|
|
38
|
+
break;
|
|
39
|
+
case 'de':
|
|
40
|
+
dateFnsLocale = de;
|
|
41
|
+
break;
|
|
42
|
+
case 'en':
|
|
43
|
+
dateFnsLocale = enUS;
|
|
44
|
+
break;
|
|
45
|
+
case 'es':
|
|
46
|
+
dateFnsLocale = es;
|
|
47
|
+
break;
|
|
48
|
+
case 'fi':
|
|
49
|
+
dateFnsLocale = fi;
|
|
50
|
+
break;
|
|
51
|
+
case 'fr':
|
|
52
|
+
dateFnsLocale = fr;
|
|
53
|
+
break;
|
|
54
|
+
case 'it':
|
|
55
|
+
dateFnsLocale = it;
|
|
56
|
+
break;
|
|
57
|
+
case 'ja':
|
|
58
|
+
dateFnsLocale = ja;
|
|
59
|
+
break;
|
|
60
|
+
case 'nb':
|
|
61
|
+
dateFnsLocale = nb;
|
|
62
|
+
break;
|
|
63
|
+
case 'nl':
|
|
64
|
+
dateFnsLocale = nl;
|
|
65
|
+
break;
|
|
66
|
+
case 'pl':
|
|
67
|
+
dateFnsLocale = pl;
|
|
68
|
+
break;
|
|
69
|
+
case 'pt-BR':
|
|
70
|
+
dateFnsLocale = ptBR;
|
|
71
|
+
break;
|
|
72
|
+
case 'ru':
|
|
73
|
+
dateFnsLocale = ru;
|
|
74
|
+
break;
|
|
75
|
+
case 'sv':
|
|
76
|
+
dateFnsLocale = sv;
|
|
77
|
+
break;
|
|
78
|
+
case 'zh-CN':
|
|
79
|
+
dateFnsLocale = zhCN;
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
dateFnsLocale = enUS;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
return dateFnsLocale;
|
|
86
|
+
}
|
|
87
|
+
static { this.momentToDateFnsMap = {
|
|
88
|
+
D: 'd',
|
|
89
|
+
Y: 'y',
|
|
90
|
+
AZ: 'aa',
|
|
91
|
+
A: 'a',
|
|
92
|
+
ll: 'PP',
|
|
93
|
+
T: `'T'`,
|
|
94
|
+
ZZ: 'XX',
|
|
95
|
+
Z: `XXX`
|
|
96
|
+
}; }
|
|
97
|
+
/**
|
|
98
|
+
* Converts a Moment.js date format string to the equivalent date-fns format string.
|
|
99
|
+
*
|
|
100
|
+
* @param dateDisplayFormat - The Moment.js date format string to convert.
|
|
101
|
+
* @returns The equivalent date-fns format string.
|
|
102
|
+
*/
|
|
103
|
+
static convertMomentToDateFnsFormat(dateDisplayFormat) {
|
|
104
|
+
if (dateDisplayFormat && dateDisplayFormat.trim() !== '') {
|
|
105
|
+
// normalise the input to support double conversion of the same string
|
|
106
|
+
dateDisplayFormat = dateDisplayFormat.replace(`'T'`, 'T');
|
|
107
|
+
for (const [search, replace] of Object.entries(this.momentToDateFnsMap)) {
|
|
108
|
+
dateDisplayFormat = dateDisplayFormat.replace(new RegExp(search, 'g'), replace);
|
|
109
|
+
}
|
|
110
|
+
return dateDisplayFormat;
|
|
111
|
+
}
|
|
112
|
+
return '';
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Formats a date using the specified date format.
|
|
116
|
+
*
|
|
117
|
+
* @param date - The date to format, can be a number or a Date object.
|
|
118
|
+
* @param dateFormat - The date format string to use for formatting.
|
|
119
|
+
* @returns The formatted date as a string
|
|
120
|
+
*/
|
|
121
|
+
static formatDate(date, dateFormat) {
|
|
122
|
+
if (typeof date === 'string') {
|
|
123
|
+
date = parseISO(date);
|
|
124
|
+
}
|
|
125
|
+
return format(date, this.convertMomentToDateFnsFormat(dateFormat));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Parses a date string using the specified date format.
|
|
129
|
+
*
|
|
130
|
+
* @param value - The date value to parse. Can be a string or a Date (for generic calls)
|
|
131
|
+
* @param dateFormat - The date format string to use for parsing.
|
|
132
|
+
* @param options - Additional options
|
|
133
|
+
* @param options.dateOnly - Strip the time and zone
|
|
134
|
+
* @returns The parsed Date object.
|
|
135
|
+
*/
|
|
136
|
+
static parseDate(value, dateFormat, options) {
|
|
137
|
+
if (value) {
|
|
138
|
+
if (typeof value === 'string') {
|
|
139
|
+
if (options?.dateOnly && value.includes('T')) {
|
|
140
|
+
value = value.split('T')[0];
|
|
141
|
+
}
|
|
142
|
+
return parse(value, this.convertMomentToDateFnsFormat(dateFormat), new Date());
|
|
143
|
+
}
|
|
144
|
+
return value;
|
|
145
|
+
}
|
|
146
|
+
return new Date('error');
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Parses a datetime string using the ISO format
|
|
150
|
+
*
|
|
151
|
+
* @param value - The date and time string to parse
|
|
152
|
+
* @returns returns the parsed Date object
|
|
153
|
+
*/
|
|
154
|
+
static parseDateTime(value) {
|
|
155
|
+
return parseISO(value);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Checks if the date string is a valid date according to the specified format
|
|
159
|
+
*
|
|
160
|
+
* @param dateValue Date value
|
|
161
|
+
* @param dateFormat The date format
|
|
162
|
+
* @returns `true` if the date is valid, otherwise `false`
|
|
163
|
+
*/
|
|
164
|
+
static isValidDate(dateValue, dateFormat) {
|
|
165
|
+
if (dateValue) {
|
|
166
|
+
const date = this.parseDate(dateValue, dateFormat);
|
|
167
|
+
return isValid(date);
|
|
168
|
+
}
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Validates a date is before another one
|
|
173
|
+
*
|
|
174
|
+
* @param source source date to compare
|
|
175
|
+
* @param target target date to compare
|
|
176
|
+
* @returns `true` if the source date is before the target one, otherwise `false`
|
|
177
|
+
*/
|
|
178
|
+
static isBeforeDate(source, target) {
|
|
179
|
+
return isBefore(source, target);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Validates a date is after another one
|
|
183
|
+
*
|
|
184
|
+
* @param source source date to compare
|
|
185
|
+
* @param target target date to compare
|
|
186
|
+
* @returns `true` if the source date is after the target one, otherwise `false`
|
|
187
|
+
*/
|
|
188
|
+
static isAfterDate(source, target) {
|
|
189
|
+
return isAfter(source, target);
|
|
190
|
+
}
|
|
191
|
+
static utcToLocal(date) {
|
|
192
|
+
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
|
|
193
|
+
}
|
|
194
|
+
static localToUtc(date) {
|
|
195
|
+
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
|
|
196
|
+
}
|
|
197
|
+
static forceLocal(date) {
|
|
198
|
+
if (typeof date === 'string') {
|
|
199
|
+
date = parseISO(date);
|
|
200
|
+
}
|
|
201
|
+
const localDate = `${date.getUTCFullYear()}-${panDate(date.getUTCMonth() + 1)}-${panDate(date.getUTCDate())}T00:00:00.000`;
|
|
202
|
+
return new Date(localDate);
|
|
203
|
+
}
|
|
204
|
+
static forceUtc(date) {
|
|
205
|
+
if (typeof date === 'string') {
|
|
206
|
+
date = parseISO(date);
|
|
207
|
+
}
|
|
208
|
+
const utcDate = `${date.getFullYear()}-${panDate(date.getMonth() + 1)}-${panDate(date.getDate())}T00:00:00.000Z`;
|
|
209
|
+
return new Date(utcDate);
|
|
210
|
+
}
|
|
211
|
+
static stringDateContainsTimeZone(value) {
|
|
212
|
+
return /(Z|([+|-]\d\d:?\d\d))$/.test(value);
|
|
213
|
+
}
|
|
214
|
+
static getDate(value) {
|
|
215
|
+
let date = new Date(value);
|
|
216
|
+
if (typeof value === 'string' && !DateFnsUtils.stringDateContainsTimeZone(value)) {
|
|
217
|
+
date = this.utcToLocal(date);
|
|
218
|
+
}
|
|
219
|
+
return date;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mbnMtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2NvbW1vbi91dGlscy9kYXRlLWZucy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRyxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWMsQ0FBQyxFQUFVLEVBQUU7SUFDeEMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNyQixJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxPQUFPLFlBQVk7SUFDckIsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQWM7UUFDckMsSUFBSSxhQUFxQixDQUFDO1FBQzFCLFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDYixLQUFLLElBQUk7Z0JBQ0wsYUFBYSxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxhQUFhLEdBQUcsRUFBRSxDQUFDO2dCQUNu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O1FBQy9CLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pILE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxLQUFhO1FBQzNDLE9BQU8sd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQTZCO1FBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0UsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGZvcm1hdCwgcGFyc2UsIHBhcnNlSVNPLCBpc1ZhbGlkLCBpc0JlZm9yZSwgaXNBZnRlciB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IGFyLCBjcywgZGEsIGRlLCBlblVTLCBlcywgZmksIGZyLCBpdCwgamEsIG5iLCBubCwgcGwsIHB0QlIsIHJ1LCBzdiwgemhDTiB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XG5cbmNvbnN0IHBhbkRhdGUgPSAobnVtOiBudW1iZXIgPSAxKTogc3RyaW5nID0+IHtcbiAgICBsZXQgdGV4dCA9IG51bS50b1N0cmluZygpO1xuICAgIHdoaWxlICh0ZXh0Lmxlbmd0aCA8IDIpIHtcbiAgICAgICAgdGV4dCA9ICcwJyArIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xufTtcblxuZXhwb3J0IGNsYXNzIERhdGVGbnNVdGlscyB7XG4gICAgc3RhdGljIGdldExvY2FsZUZyb21TdHJpbmcobG9jYWxlOiBzdHJpbmcpOiBMb2NhbGUge1xuICAgICAgICBsZXQgZGF0ZUZuc0xvY2FsZTogTG9jYWxlO1xuICAgICAgICBzd2l0Y2ggKGxvY2FsZSkge1xuICAgICAgICAgICAgY2FzZSAnYXInOlxuICAgICAgICAgICAgICAgIGRhdGVGbnNMb2NhbGUgPSBhcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NzJzpcbiAgICAgICAgICAgICAgICBkYXRlRm5zTG9jYWxlID0gY3M7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYSc6XG4gICAgICAgICAgICAgICAgZGF0ZUZuc0xvY2FsZSA9IGRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGUnOlxuICAgICAgICAgICAgICAgIGRhdGVGbnNMb2NhbGUgPSBkZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VuJzpcbiAgICAgICAgICAgICAgICBkYXRlRm5zTG9jYWxlID0gZW5VUztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VzJzpcbiAgICAgICAgICAgICAgICBkYXRlRm5zTG9jYWxlID0gZXM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaSc6XG4gICAgICAgICAgICAgICAgZGF0ZUZuc0xvY2FsZSA9IGZpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZnInOlxuICAgICAgICAgICAgICAgIGRhdGVGbnNMb2NhbGUgPSBmcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2l0JzpcbiAgICAgICAgICAgICAgICBkYXRlRm5zTG9jYWxlID0gaXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdqYSc6XG4gICAgICAgICAgICAgICAgZGF0ZUZuc0xvY2FsZSA9IGphO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmInOlxuICAgICAgICAgICAgICAgIGRhdGVGbnNMb2NhbGUgPSBuYjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25sJzpcbiAgICAgICAgICAgICAgICBkYXRlRm5zTG9jYWxlID0gbmw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAgICAgZGF0ZUZuc0xvY2FsZSA9IHBsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncHQtQlInOlxuICAgICAgICAgICAgICAgIGRhdGVGbnNMb2NhbGUgPSBwdEJSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncnUnOlxuICAgICAgICAgICAgICAgIGRhdGVGbnNMb2NhbGUgPSBydTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N2JzpcbiAgICAgICAgICAgICAgICBkYXRlRm5zTG9jYWxlID0gc3Y7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd6aC1DTic6XG4gICAgICAgICAgICAgICAgZGF0ZUZuc0xvY2FsZSA9IHpoQ047XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGRhdGVGbnNMb2NhbGUgPSBlblVTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlRm5zTG9jYWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIG1vbWVudFRvRGF0ZUZuc01hcCA9IHtcbiAgICAgICAgRDogJ2QnLFxuICAgICAgICBZOiAneScsXG4gICAgICAgIEFaOiAnYWEnLFxuICAgICAgICBBOiAnYScsXG4gICAgICAgIGxsOiAnUFAnLFxuICAgICAgICBUOiBgJ1QnYCxcbiAgICAgICAgWlo6ICdYWCcsXG4gICAgICAgIFo6IGBYWFhgXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGEgTW9tZW50LmpzIGRhdGUgZm9ybWF0IHN0cmluZyB0byB0aGUgZXF1aXZhbGVudCBkYXRlLWZucyBmb3JtYXQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVEaXNwbGF5Rm9ybWF0IC0gVGhlIE1vbWVudC5qcyBkYXRlIGZvcm1hdCBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyBUaGUgZXF1aXZhbGVudCBkYXRlLWZucyBmb3JtYXQgc3RyaW5nLlxuICAgICAqL1xuICAgIHN0YXRpYyBjb252ZXJ0TW9tZW50VG9EYXRlRm5zRm9ybWF0KGRhdGVEaXNwbGF5Rm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0ZURpc3BsYXlGb3JtYXQgJiYgZGF0ZURpc3BsYXlGb3JtYXQudHJpbSgpICE9PSAnJykge1xuICAgICAgICAgICAgLy8gbm9ybWFsaXNlIHRoZSBpbnB1dCB0byBzdXBwb3J0IGRvdWJsZSBjb252ZXJzaW9uIG9mIHRoZSBzYW1lIHN0cmluZ1xuICAgICAgICAgICAgZGF0ZURpc3BsYXlGb3JtYXQgPSBkYXRlRGlzcGxheUZvcm1hdC5yZXBsYWNlKGAnVCdgLCAnVCcpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtzZWFyY2gsIHJlcGxhY2VdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubW9tZW50VG9EYXRlRm5zTWFwKSkge1xuICAgICAgICAgICAgICAgIGRhdGVEaXNwbGF5Rm9ybWF0ID0gZGF0ZURpc3BsYXlGb3JtYXQucmVwbGFjZShuZXcgUmVnRXhwKHNlYXJjaCwgJ2cnKSwgcmVwbGFjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0ZURpc3BsYXlGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdHMgYSBkYXRlIHVzaW5nIHRoZSBzcGVjaWZpZWQgZGF0ZSBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIGZvcm1hdCwgY2FuIGJlIGEgbnVtYmVyIG9yIGEgRGF0ZSBvYmplY3QuXG4gICAgICogQHBhcmFtIGRhdGVGb3JtYXQgLSBUaGUgZGF0ZSBmb3JtYXQgc3RyaW5nIHRvIHVzZSBmb3IgZm9ybWF0dGluZy5cbiAgICAgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgYXMgYSBzdHJpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9ybWF0RGF0ZShkYXRlOiBudW1iZXIgfCBEYXRlIHwgc3RyaW5nLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBkYXRlID0gcGFyc2VJU08oZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdChkYXRlLCB0aGlzLmNvbnZlcnRNb21lbnRUb0RhdGVGbnNGb3JtYXQoZGF0ZUZvcm1hdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIGRhdGUgc3RyaW5nIHVzaW5nIHRoZSBzcGVjaWZpZWQgZGF0ZSBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZGF0ZSB2YWx1ZSB0byBwYXJzZS4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgRGF0ZSAoZm9yIGdlbmVyaWMgY2FsbHMpXG4gICAgICogQHBhcmFtIGRhdGVGb3JtYXQgLSBUaGUgZGF0ZSBmb3JtYXQgc3RyaW5nIHRvIHVzZSBmb3IgcGFyc2luZy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFkZGl0aW9uYWwgb3B0aW9uc1xuICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGVPbmx5IC0gU3RyaXAgdGhlIHRpbWUgYW5kIHpvbmVcbiAgICAgKiBAcmV0dXJucyBUaGUgcGFyc2VkIERhdGUgb2JqZWN0LlxuICAgICAqL1xuICAgIHN0YXRpYyBwYXJzZURhdGUodmFsdWU6IHN0cmluZyB8IERhdGUsIGRhdGVGb3JtYXQ6IHN0cmluZywgb3B0aW9ucz86IHsgZGF0ZU9ubHk/OiBib29sZWFuIH0pOiBEYXRlIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zPy5kYXRlT25seSAmJiB2YWx1ZS5pbmNsdWRlcygnVCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2UodmFsdWUsIHRoaXMuY29udmVydE1vbWVudFRvRGF0ZUZuc0Zvcm1hdChkYXRlRm9ybWF0KSwgbmV3IERhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCdlcnJvcicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIGRhdGV0aW1lIHN0cmluZyB1c2luZyB0aGUgSVNPIGZvcm1hdFxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGRhdGUgYW5kIHRpbWUgc3RyaW5nIHRvIHBhcnNlXG4gICAgICogQHJldHVybnMgcmV0dXJucyB0aGUgcGFyc2VkIERhdGUgb2JqZWN0XG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlRGF0ZVRpbWUodmFsdWU6IHN0cmluZyk6IERhdGUge1xuICAgICAgICByZXR1cm4gcGFyc2VJU08odmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgZGF0ZSBzdHJpbmcgaXMgYSB2YWxpZCBkYXRlIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdFxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGVWYWx1ZSBEYXRlIHZhbHVlXG4gICAgICogQHBhcmFtIGRhdGVGb3JtYXQgVGhlIGRhdGUgZm9ybWF0XG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBkYXRlIGlzIHZhbGlkLCBvdGhlcndpc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIHN0YXRpYyBpc1ZhbGlkRGF0ZShkYXRlVmFsdWU6IHN0cmluZywgZGF0ZUZvcm1hdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChkYXRlVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLnBhcnNlRGF0ZShkYXRlVmFsdWUsIGRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQoZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyBhIGRhdGUgaXMgYmVmb3JlIGFub3RoZXIgb25lXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc291cmNlIHNvdXJjZSBkYXRlIHRvIGNvbXBhcmVcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IHRhcmdldCBkYXRlIHRvIGNvbXBhcmVcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNvdXJjZSBkYXRlIGlzIGJlZm9yZSB0aGUgdGFyZ2V0IG9uZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNCZWZvcmVEYXRlKHNvdXJjZTogRGF0ZSwgdGFyZ2V0OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc0JlZm9yZShzb3VyY2UsIHRhcmdldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIGEgZGF0ZSBpcyBhZnRlciBhbm90aGVyIG9uZVxuICAgICAqXG4gICAgICogQHBhcmFtIHNvdXJjZSBzb3VyY2UgZGF0ZSB0byBjb21wYXJlXG4gICAgICogQHBhcmFtIHRhcmdldCB0YXJnZXQgZGF0ZSB0byBjb21wYXJlXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzb3VyY2UgZGF0ZSBpcyBhZnRlciB0aGUgdGFyZ2V0IG9uZSwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNBZnRlckRhdGUoc291cmNlOiBEYXRlLCB0YXJnZXQ6IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzQWZ0ZXIoc291cmNlLCB0YXJnZXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyB1dGNUb0xvY2FsKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbG9jYWxUb1V0YyhkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCksIGRhdGUuZ2V0VVRDSG91cnMoKSwgZGF0ZS5nZXRVVENNaW51dGVzKCksIGRhdGUuZ2V0VVRDU2Vjb25kcygpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9yY2VMb2NhbChkYXRlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGRhdGUgPSBwYXJzZUlTTyhkYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb2NhbERhdGUgPSBgJHtkYXRlLmdldFVUQ0Z1bGxZZWFyKCl9LSR7cGFuRGF0ZShkYXRlLmdldFVUQ01vbnRoKCkgKyAxKX0tJHtwYW5EYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKX1UMDA6MDA6MDAuMDAwYDtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGxvY2FsRGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvcmNlVXRjKGRhdGU6IERhdGUgfCBzdHJpbmcpOiBEYXRlIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZGF0ZSA9IHBhcnNlSVNPKGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHV0Y0RhdGUgPSBgJHtkYXRlLmdldEZ1bGxZZWFyKCl9LSR7cGFuRGF0ZShkYXRlLmdldE1vbnRoKCkgKyAxKX0tJHtwYW5EYXRlKGRhdGUuZ2V0RGF0ZSgpKX1UMDA6MDA6MDAuMDAwWmA7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh1dGNEYXRlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3RyaW5nRGF0ZUNvbnRhaW5zVGltZVpvbmUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gLyhafChbK3wtXVxcZFxcZDo/XFxkXFxkKSkkLy50ZXN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0RGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSk6IERhdGUge1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhRGF0ZUZuc1V0aWxzLnN0cmluZ0RhdGVDb250YWluc1RpbWVab25lKHZhbHVlKSkge1xuICAgICAgICAgICAgZGF0ZSA9IHRoaXMudXRjVG9Mb2NhbChkYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbn1cbiJdfQ==
|