@updevs/components 1.0.0-alpha.3 → 1.0.0-alpha.31
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/README.md +5 -4
- package/assets/styles/_bootstrap-components.scss +18 -1
- package/assets/styles/_seven-columns.scss +73 -0
- package/assets/styles/_updevs.scss +4 -0
- package/assets/styles/_variables.scss +1 -1
- package/assets/styles/utils/_colors.scss +1 -1
- package/badge/badge-config.model.d.ts +14 -0
- package/badge/badge.component.d.ts +24 -0
- package/badge/badge.config.d.ts +12 -0
- package/badge/public-api.d.ts +3 -0
- package/badge/upd-badge.module.d.ts +8 -0
- package/button/button.component.d.ts +61 -0
- package/button/upd-button.module.d.ts +10 -0
- package/calendar/calendar.component.d.ts +127 -0
- package/calendar/components/calendar-body/calendar-body.component.d.ts +263 -0
- package/calendar/components/calendar-header/calendar-header.component.d.ts +57 -0
- package/calendar/components/calendar-month-view/calendar-month-view.component.d.ts +151 -0
- package/calendar/components/calendar-multi-year-view/calendar-multi-year-view.component.d.ts +10 -0
- package/calendar/components/calendar-year-view/calendar-year-view.component.d.ts +9 -0
- package/calendar/models/calendar-cell.model.d.ts +16 -0
- package/calendar/models/calendar-user-event.model.d.ts +4 -0
- package/calendar/models/date-range.model.d.ts +26 -0
- package/calendar/models/public-api.d.ts +2 -0
- package/calendar/public-api.d.ts +5 -0
- package/calendar/services/calendar-range-strategy.service.d.ts +35 -0
- package/calendar/services/calendar-signals.service.d.ts +24 -0
- package/calendar/services/calendar.service.d.ts +15 -0
- package/calendar/services/public-api.d.ts +1 -0
- package/calendar/tools/events-options.d.ts +12 -0
- package/calendar/tools/keyboard-tools.d.ts +9 -0
- package/calendar/tools/passive-listeners.d.ts +16 -0
- package/calendar/types/calendar-cell-class-function.type.d.ts +3 -0
- package/calendar/types/calendar-cell-css-classes.type.d.ts +3 -0
- package/calendar/types/calendar-view.type.d.ts +1 -0
- package/calendar/types/modifier-key.type.d.ts +1 -0
- package/calendar/types/public-api.d.ts +1 -0
- package/calendar/upd-calendar.module.d.ts +18 -0
- package/card/card.component.d.ts +54 -0
- package/card/directives/card-actions.directive.d.ts +7 -0
- package/card/directives/card-footer.directive.d.ts +7 -0
- package/card/directives/card-header.directive.d.ts +7 -0
- package/card/directives/card-image.directive.d.ts +7 -0
- package/card/upd-card.module.d.ts +14 -0
- package/drag-and-drop/drag-and-drop.component.d.ts +26 -0
- package/drag-and-drop/models/drag-and-drop-column.config.d.ts +8 -0
- package/drag-and-drop/models/drag-and-drop-column.model.d.ts +10 -0
- package/drag-and-drop/models/drag-and-drop-item.d.ts +7 -0
- package/drag-and-drop/models/drag-and-drop-item.model.d.ts +13 -0
- package/drag-and-drop/models/drag-and-drop.config.d.ts +6 -0
- package/drag-and-drop/models/public-api.d.ts +4 -0
- package/drag-and-drop/public-api.d.ts +3 -0
- package/drag-and-drop/upd-drag-and-drop.module.d.ts +9 -0
- package/dropdown/dropdown.component.d.ts +76 -0
- package/dropdown/models/dropdown-action-clicked.model.d.ts +6 -0
- package/dropdown/{src/models/dropdown-item.ts → models/dropdown-item.d.ts} +7 -4
- package/dropdown/{src/models/dropdown-item.type.ts → models/dropdown-item.type.d.ts} +1 -1
- package/dropdown/models/public-api.d.ts +4 -0
- package/dropdown/models/toolbar.type.d.ts +1 -0
- package/dropdown/upd-dropdown.module.d.ts +12 -0
- package/esm2022/badge/badge-config.model.mjs +14 -0
- package/esm2022/badge/badge.component.mjs +50 -0
- package/esm2022/badge/badge.config.mjs +2 -0
- package/esm2022/badge/index.mjs +2 -0
- package/esm2022/badge/public-api.mjs +4 -0
- package/esm2022/badge/upd-badge.module.mjs +24 -0
- package/esm2022/badge/updevs-components-badge.mjs +5 -0
- package/esm2022/button/button.component.mjs +157 -0
- package/esm2022/button/index.mjs +2 -0
- package/esm2022/button/public-api.mjs +3 -0
- package/esm2022/button/upd-button.module.mjs +32 -0
- package/esm2022/button/updevs-components-button.mjs +5 -0
- package/esm2022/calendar/assets/i18n/en.json +16 -0
- package/esm2022/calendar/assets/i18n/pt.json +16 -0
- package/esm2022/calendar/calendar.component.mjs +247 -0
- package/esm2022/calendar/components/calendar-body/calendar-body.component.mjs +515 -0
- package/esm2022/calendar/components/calendar-header/calendar-header.component.mjs +144 -0
- package/esm2022/calendar/components/calendar-month-view/calendar-month-view.component.mjs +423 -0
- package/esm2022/calendar/components/calendar-multi-year-view/calendar-multi-year-view.component.mjs +18 -0
- package/esm2022/calendar/components/calendar-year-view/calendar-year-view.component.mjs +17 -0
- package/esm2022/calendar/index.mjs +2 -0
- package/esm2022/calendar/models/calendar-cell.model.mjs +18 -0
- package/esm2022/calendar/models/calendar-user-event.model.mjs +2 -0
- package/esm2022/calendar/models/date-range.model.mjs +18 -0
- package/esm2022/calendar/models/public-api.mjs +3 -0
- package/esm2022/calendar/public-api.mjs +6 -0
- package/esm2022/calendar/services/calendar-range-strategy.service.mjs +99 -0
- package/esm2022/calendar/services/calendar-signals.service.mjs +47 -0
- package/esm2022/calendar/services/calendar.service.mjs +40 -0
- package/esm2022/calendar/services/public-api.mjs +2 -0
- package/esm2022/calendar/tools/events-options.mjs +14 -0
- package/esm2022/calendar/tools/keyboard-tools.mjs +14 -0
- package/esm2022/calendar/tools/passive-listeners.mjs +29 -0
- package/esm2022/calendar/types/calendar-cell-class-function.type.mjs +2 -0
- package/esm2022/calendar/types/calendar-cell-css-classes.type.mjs +2 -0
- package/esm2022/calendar/types/calendar-view.type.mjs +2 -0
- package/esm2022/calendar/types/modifier-key.type.mjs +2 -0
- package/esm2022/calendar/types/public-api.mjs +2 -0
- package/esm2022/calendar/upd-calendar.module.mjs +70 -0
- package/esm2022/calendar/updevs-components-calendar.mjs +5 -0
- package/esm2022/card/card.component.mjs +136 -0
- package/esm2022/card/directives/card-actions.directive.mjs +16 -0
- package/esm2022/card/directives/card-footer.directive.mjs +16 -0
- package/esm2022/card/directives/card-header.directive.mjs +16 -0
- package/esm2022/card/directives/card-image.directive.mjs +16 -0
- package/esm2022/card/directives/public-api.mjs +5 -0
- package/esm2022/card/index.mjs +2 -0
- package/esm2022/card/public-api.mjs +4 -0
- package/esm2022/card/types/card-state.type.mjs +2 -0
- package/esm2022/card/types/card-style.type.mjs +2 -0
- package/esm2022/card/types/hover-effect.type.mjs +2 -0
- package/esm2022/card/types/ribbon-style.type.mjs +2 -0
- package/esm2022/card/types/status-position.type.mjs +2 -0
- package/esm2022/card/upd-card.module.mjs +50 -0
- package/esm2022/card/updevs-components-card.mjs +5 -0
- package/esm2022/drag-and-drop/drag-and-drop.component.mjs +134 -0
- package/esm2022/drag-and-drop/index.mjs +2 -0
- package/esm2022/drag-and-drop/models/drag-and-drop-column.config.mjs +2 -0
- package/esm2022/drag-and-drop/models/drag-and-drop-column.model.mjs +9 -0
- package/esm2022/drag-and-drop/models/drag-and-drop-item.mjs +2 -0
- package/esm2022/drag-and-drop/models/drag-and-drop-item.model.mjs +14 -0
- package/esm2022/drag-and-drop/models/drag-and-drop.config.mjs +2 -0
- package/esm2022/drag-and-drop/models/public-api.mjs +5 -0
- package/esm2022/drag-and-drop/public-api.mjs +4 -0
- package/esm2022/drag-and-drop/upd-drag-and-drop.module.mjs +28 -0
- package/esm2022/drag-and-drop/updevs-components-drag-and-drop.mjs +5 -0
- package/esm2022/dropdown/dropdown.component.mjs +182 -0
- package/esm2022/dropdown/index.mjs +2 -0
- package/esm2022/dropdown/models/dropdown-action-clicked.model.mjs +2 -0
- package/esm2022/dropdown/models/dropdown-item.mjs +2 -0
- package/esm2022/dropdown/models/dropdown-item.type.mjs +2 -0
- package/esm2022/dropdown/models/public-api.mjs +5 -0
- package/esm2022/dropdown/models/toolbar.type.mjs +2 -0
- package/esm2022/dropdown/public-api.mjs +4 -0
- package/esm2022/dropdown/upd-dropdown.module.mjs +40 -0
- package/esm2022/dropdown/updevs-components-dropdown.mjs +5 -0
- package/esm2022/form/assets/i18n/en.json +17 -0
- package/esm2022/form/assets/i18n/pt.json +17 -0
- package/esm2022/form/components/dynamic-field/dynamic-field.component.mjs +127 -0
- package/esm2022/form/form.component.mjs +122 -0
- package/esm2022/form/index.mjs +2 -0
- package/esm2022/form/models/checkbox-field.model.mjs +2 -0
- package/esm2022/form/models/checkbox-group-field.model.mjs +2 -0
- package/esm2022/form/models/dynamic-field.model.mjs +2 -0
- package/esm2022/form/models/enums/dynamic-field.type.mjs +14 -0
- package/esm2022/form/models/enums/public-api.mjs +2 -0
- package/esm2022/form/models/file-upload-field.model.mjs +2 -0
- package/esm2022/form/models/form-config.mjs +2 -0
- package/esm2022/form/models/form-row.model.mjs +2 -0
- package/esm2022/form/models/input-field.model.mjs +2 -0
- package/esm2022/form/models/public-api.mjs +15 -0
- package/esm2022/form/models/radio-field.model.mjs +2 -0
- package/esm2022/form/models/radio-group-field.model.mjs +2 -0
- package/esm2022/form/models/select-field.model.mjs +2 -0
- package/esm2022/form/models/single-select-field.model.mjs +2 -0
- package/esm2022/form/models/textarea-field.model.mjs +2 -0
- package/esm2022/form/models/validator-config.mjs +2 -0
- package/esm2022/form/public-api.mjs +4 -0
- package/esm2022/form/tools/errors-helper.mjs +54 -0
- package/esm2022/form/upd-form.module.mjs +84 -0
- package/esm2022/form/updevs-components-form.mjs +5 -0
- package/esm2022/form-controls/abstractions/base-control.mjs +46 -0
- package/esm2022/form-controls/abstractions/index.mjs +2 -0
- package/esm2022/form-controls/abstractions/public-api.mjs +2 -0
- package/esm2022/form-controls/abstractions/updevs-components-form-controls-abstractions.mjs +5 -0
- package/esm2022/form-controls/checkbox/checkbox.component.mjs +51 -0
- package/esm2022/form-controls/checkbox/index.mjs +2 -0
- package/esm2022/form-controls/checkbox/public-api.mjs +3 -0
- package/esm2022/form-controls/checkbox/upd-checkbox.module.mjs +32 -0
- package/esm2022/form-controls/checkbox/updevs-components-form-controls-checkbox.mjs +5 -0
- package/esm2022/form-controls/date-picker/date-picker.component.mjs +147 -0
- package/esm2022/form-controls/date-picker/index.mjs +2 -0
- package/esm2022/form-controls/date-picker/public-api.mjs +3 -0
- package/esm2022/form-controls/date-picker/upd-date-picker.module.mjs +40 -0
- package/esm2022/form-controls/date-picker/updevs-components-form-controls-date-picker.mjs +5 -0
- package/esm2022/form-controls/file-upload/assets/i18n/en.json +15 -0
- package/esm2022/form-controls/file-upload/assets/i18n/pt.json +15 -0
- package/esm2022/form-controls/file-upload/file-upload-changed.event.mjs +2 -0
- package/esm2022/form-controls/file-upload/file-upload.component.mjs +169 -0
- package/esm2022/form-controls/file-upload/index.mjs +2 -0
- package/esm2022/form-controls/file-upload/public-api.mjs +4 -0
- package/esm2022/form-controls/file-upload/upd-file-upload.module.mjs +48 -0
- package/esm2022/form-controls/file-upload/updevs-components-form-controls-file-upload.mjs +5 -0
- package/esm2022/form-controls/input/directives/input-append.directive.mjs +16 -0
- package/esm2022/form-controls/input/directives/input-prepend.directive.mjs +16 -0
- package/esm2022/form-controls/input/directives/public-api.mjs +3 -0
- package/esm2022/form-controls/input/index.mjs +2 -0
- package/esm2022/form-controls/input/input.component.mjs +185 -0
- package/esm2022/form-controls/input/public-api.mjs +5 -0
- package/esm2022/form-controls/input/types/input.type.mjs +2 -0
- package/esm2022/form-controls/input/types/loader-position.type.mjs +2 -0
- package/esm2022/form-controls/input/types/public-api.mjs +3 -0
- package/esm2022/form-controls/input/upd-input.module.mjs +46 -0
- package/esm2022/form-controls/input/updevs-components-form-controls-input.mjs +5 -0
- package/esm2022/form-controls/radio/index.mjs +2 -0
- package/esm2022/form-controls/radio/public-api.mjs +3 -0
- package/esm2022/form-controls/radio/radio.component.mjs +51 -0
- package/esm2022/form-controls/radio/upd-radio.module.mjs +32 -0
- package/esm2022/form-controls/radio/updevs-components-form-controls-radio.mjs +5 -0
- package/esm2022/form-controls/select/components/multiple/select-multiple.component.mjs +76 -0
- package/esm2022/form-controls/select/components/single/select.component.mjs +72 -0
- package/esm2022/form-controls/select/index.mjs +2 -0
- package/esm2022/form-controls/select/models/abstractions/base-select.component.mjs +215 -0
- package/esm2022/form-controls/select/models/defaults.mjs +8 -0
- package/esm2022/form-controls/select/models/public-api.mjs +3 -0
- package/esm2022/form-controls/select/models/select-item.mjs +2 -0
- package/esm2022/form-controls/select/public-api.mjs +5 -0
- package/esm2022/form-controls/select/upd-select.module.mjs +57 -0
- package/esm2022/form-controls/select/updevs-components-form-controls-select.mjs +5 -0
- package/esm2022/form-controls/textarea/index.mjs +2 -0
- package/esm2022/form-controls/textarea/public-api.mjs +3 -0
- package/esm2022/form-controls/textarea/textarea.component.mjs +44 -0
- package/esm2022/form-controls/textarea/upd-textarea.module.mjs +24 -0
- package/esm2022/form-controls/textarea/updevs-components-form-controls-textarea.mjs +5 -0
- package/esm2022/form-controls/time-picker/index.mjs +2 -0
- package/esm2022/form-controls/time-picker/public-api.mjs +4 -0
- package/esm2022/form-controls/time-picker/time-picker.component.mjs +130 -0
- package/esm2022/form-controls/time-picker/time-selector/time-selector.component.mjs +124 -0
- package/esm2022/form-controls/time-picker/upd-time-picker.module.mjs +61 -0
- package/esm2022/form-controls/time-picker/updevs-components-form-controls-time-picker.mjs +5 -0
- package/esm2022/index.mjs +2 -0
- package/esm2022/layout/abstractions/base-page.component.mjs +23 -0
- package/esm2022/layout/abstractions/base.layout.mjs +31 -0
- package/esm2022/layout/abstractions/public-api.mjs +2 -0
- package/esm2022/layout/assets/i18n/en.json +27 -0
- package/esm2022/layout/assets/i18n/pt.json +27 -0
- package/esm2022/layout/index.mjs +2 -0
- package/esm2022/layout/layouts/blank-layout/blank-layout.component.mjs +22 -0
- package/esm2022/layout/layouts/blank-layout/blank-layout.module.mjs +50 -0
- package/esm2022/layout/layouts/public-api.mjs +5 -0
- package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.mjs +17 -0
- package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.mjs +83 -0
- package/esm2022/layout/models/login-page-config.model.mjs +20 -0
- package/esm2022/layout/models/login-page.config.mjs +2 -0
- package/esm2022/layout/models/public-api.mjs +3 -0
- package/esm2022/layout/models/security-layout-config.model.mjs +10 -0
- package/esm2022/layout/models/security-layout.config.mjs +2 -0
- package/esm2022/layout/models/upd-layout-config.model.mjs +24 -0
- package/esm2022/layout/models/upd-layout.config.mjs +2 -0
- package/esm2022/layout/pages/auth-flow/auth-flow-routing.module.mjs +28 -0
- package/esm2022/layout/pages/auth-flow/auth-flow.module.mjs +73 -0
- package/esm2022/layout/pages/auth-flow/logged-out/logged-out.component.mjs +11 -0
- package/esm2022/layout/pages/auth-flow/login/login.component.mjs +110 -0
- package/esm2022/layout/pages/auth-flow/oauth-callback/oauth-callback.component.mjs +11 -0
- package/esm2022/layout/pages/auth-flow/public-api.mjs +6 -0
- package/esm2022/layout/pages/public-api.mjs +2 -0
- package/esm2022/layout/partials/footer/footer-copyright.directive.mjs +13 -0
- package/esm2022/layout/partials/footer/footer.component.mjs +55 -0
- package/esm2022/layout/partials/footer/footer.module.mjs +28 -0
- package/esm2022/layout/partials/footer/public-api.mjs +4 -0
- package/esm2022/layout/partials/header/header-style.type.mjs +2 -0
- package/esm2022/layout/partials/header/header.component.mjs +129 -0
- package/esm2022/layout/partials/header/header.module.mjs +40 -0
- package/esm2022/layout/partials/header/public-api.mjs +4 -0
- package/esm2022/layout/partials/page-header/page-header.component.mjs +15 -0
- package/esm2022/layout/partials/page-header/public-api.mjs +2 -0
- package/esm2022/layout/partials/public-api.mjs +5 -0
- package/esm2022/layout/partials/sidebar/public-api.mjs +2 -0
- package/esm2022/layout/partials/sidebar/sidebar.component.mjs +114 -0
- package/esm2022/layout/public-api.mjs +8 -0
- package/esm2022/layout/services/public-api.mjs +2 -0
- package/esm2022/layout/services/upd-layout-config.service.mjs +21 -0
- package/esm2022/layout/tools/layout.constants.mjs +15 -0
- package/esm2022/layout/upd-layout.module.mjs +47 -0
- package/esm2022/layout/updevs-components-layout.mjs +5 -0
- package/esm2022/lib/index.mjs +2 -0
- package/esm2022/lib/models/public-api.mjs +2 -0
- package/esm2022/lib/models/row-column-size.mjs +2 -0
- package/esm2022/lib/public-api.mjs +5 -0
- package/esm2022/lib/tools/column-size.helper.mjs +12 -0
- package/esm2022/lib/tools/public-api.mjs +2 -0
- package/esm2022/lib/types/component-size.type.mjs +2 -0
- package/esm2022/lib/types/horizontal-vertical.type.mjs +2 -0
- package/esm2022/lib/types/public-api.mjs +4 -0
- package/esm2022/lib/types/validation-status.type.mjs +2 -0
- package/esm2022/lib/upd-components.module.mjs +14 -0
- package/esm2022/link/index.mjs +2 -0
- package/esm2022/link/link.component.mjs +51 -0
- package/esm2022/link/public-api.mjs +4 -0
- package/esm2022/link/target.type.mjs +2 -0
- package/esm2022/link/upd-link.module.mjs +24 -0
- package/esm2022/link/updevs-components-link.mjs +5 -0
- package/esm2022/list/assets/i18n/en.json +9 -0
- package/esm2022/list/assets/i18n/pt.json +9 -0
- package/esm2022/list/index.mjs +2 -0
- package/esm2022/list/list.component.mjs +113 -0
- package/esm2022/list/models/badge-position.type.mjs +2 -0
- package/esm2022/list/models/list-item.mjs +2 -0
- package/esm2022/list/models/list-item.model.mjs +15 -0
- package/esm2022/list/models/public-api.mjs +3 -0
- package/esm2022/list/public-api.mjs +4 -0
- package/esm2022/list/upd-list.module.mjs +44 -0
- package/esm2022/list/updevs-components-list.mjs +5 -0
- package/esm2022/modal/assets/i18n/en.json +17 -0
- package/esm2022/modal/assets/i18n/pt.json +17 -0
- package/esm2022/modal/components/modal-container/modal-container.component.mjs +216 -0
- package/esm2022/modal/index.mjs +2 -0
- package/esm2022/modal/models/base.modal.mjs +14 -0
- package/esm2022/modal/models/modal-config.model.mjs +20 -0
- package/esm2022/modal/models/modal-ref.mjs +2 -0
- package/esm2022/modal/models/modal.config.mjs +2 -0
- package/esm2022/modal/models/public-api.mjs +4 -0
- package/esm2022/modal/public-api.mjs +4 -0
- package/esm2022/modal/services/modal-alert.service.mjs +99 -0
- package/esm2022/modal/services/modal.service.mjs +30 -0
- package/esm2022/modal/services/public-api.mjs +3 -0
- package/esm2022/modal/types/modal-footer-style.type.mjs +2 -0
- package/esm2022/modal/types/modal-size.type.mjs +2 -0
- package/esm2022/modal/upd-modal.module.mjs +90 -0
- package/esm2022/modal/updevs-components-modal.mjs +5 -0
- package/esm2022/paginator/assets/i18n/en.json +15 -0
- package/esm2022/paginator/assets/i18n/pt.json +15 -0
- package/esm2022/paginator/index.mjs +2 -0
- package/esm2022/paginator/paginator.component.mjs +66 -0
- package/esm2022/paginator/public-api.mjs +3 -0
- package/esm2022/paginator/upd-paginator.module.mjs +47 -0
- package/esm2022/paginator/updevs-components-paginator.mjs +5 -0
- package/esm2022/popover/index.mjs +2 -0
- package/esm2022/popover/popover.component.mjs +65 -0
- package/esm2022/popover/popover.directive.mjs +129 -0
- package/esm2022/popover/public-api.mjs +4 -0
- package/esm2022/popover/upd-popover.module.mjs +29 -0
- package/esm2022/popover/updevs-components-popover.mjs +5 -0
- package/esm2022/public-api.mjs +2 -0
- package/esm2022/table/abstractions/base-column.model.mjs +52 -0
- package/esm2022/table/abstractions/base.column.mjs +98 -0
- package/esm2022/table/abstractions/filters-operands.service.mjs +3 -0
- package/esm2022/table/abstractions/public-api.mjs +3 -0
- package/esm2022/table/assets/i18n/en.json +74 -0
- package/esm2022/table/assets/i18n/pt.json +74 -0
- package/esm2022/table/components/columns/boolean-column/boolean-column.component.mjs +26 -0
- package/esm2022/table/components/columns/date-time-column/date-time-column.component.mjs +13 -0
- package/esm2022/table/components/columns/number-column/number-column.component.mjs +13 -0
- package/esm2022/table/components/columns/text-column/text-column.component.mjs +31 -0
- package/esm2022/table/components/columns-manager/columns-manager.component.mjs +36 -0
- package/esm2022/table/components/filter-row/filter-row.component.mjs +114 -0
- package/esm2022/table/components/save-search/save-search.component.mjs +72 -0
- package/esm2022/table/components/search-section/search-section.component.mjs +93 -0
- package/esm2022/table/directives/public-api.mjs +2 -0
- package/esm2022/table/directives/table-column.directive.mjs +51 -0
- package/esm2022/table/index.mjs +2 -0
- package/esm2022/table/models/columns/boolean-column.model.mjs +22 -0
- package/esm2022/table/models/columns/date-time-column.model.mjs +16 -0
- package/esm2022/table/models/columns/guid-column.model.mjs +13 -0
- package/esm2022/table/models/columns/image-column.model.mjs +11 -0
- package/esm2022/table/models/columns/number-column.model.mjs +17 -0
- package/esm2022/table/models/columns/public-api.mjs +7 -0
- package/esm2022/table/models/columns/text-column.model.mjs +11 -0
- package/esm2022/table/models/enums/column-type.enum.mjs +15 -0
- package/esm2022/table/models/enums/public-api.mjs +2 -0
- package/esm2022/table/models/filter-item.model.mjs +2 -0
- package/esm2022/table/models/filter-operand.config.mjs +2 -0
- package/esm2022/table/models/operands-lists/boolean-filter-operands-list.model.mjs +25 -0
- package/esm2022/table/models/operands-lists/date-filter-operands-list.model.mjs +25 -0
- package/esm2022/table/models/operands-lists/date-or-number-operands-list.config.mjs +31 -0
- package/esm2022/table/models/operands-lists/filter-operands-list.config.mjs +31 -0
- package/esm2022/table/models/operands-lists/guid-filter-operands-list.model.mjs +16 -0
- package/esm2022/table/models/operands-lists/number-filter-operands-list.model.mjs +25 -0
- package/esm2022/table/models/operands-lists/string-filter-operands-list.model.mjs +45 -0
- package/esm2022/table/models/public-api.mjs +5 -0
- package/esm2022/table/models/saved-view.model.mjs +2 -0
- package/esm2022/table/models/table-config.model.mjs +22 -0
- package/esm2022/table/models/table.config.mjs +2 -0
- package/esm2022/table/models/upd-table-config.model.mjs +9 -0
- package/esm2022/table/models/upd-table.config.mjs +2 -0
- package/esm2022/table/public-api.mjs +6 -0
- package/esm2022/table/services/default-filters-operands.service.mjs +60 -0
- package/esm2022/table/services/storages/saved-views.storage.mjs +56 -0
- package/esm2022/table/services/stores/filters-operands.store.mjs +19 -0
- package/esm2022/table/services/upd-table-config.service.mjs +18 -0
- package/esm2022/table/table.component.mjs +386 -0
- package/esm2022/table/tools/filters.tools.mjs +48 -0
- package/esm2022/table/tools/table.constants.mjs +15 -0
- package/esm2022/table/upd-table.module.mjs +150 -0
- package/esm2022/table/updevs-components-table.mjs +5 -0
- package/esm2022/updevs-components.mjs +5 -0
- package/fesm2022/updevs-components-badge.mjs +91 -0
- package/fesm2022/updevs-components-badge.mjs.map +1 -0
- package/fesm2022/updevs-components-button.mjs +193 -0
- package/fesm2022/updevs-components-button.mjs.map +1 -0
- package/fesm2022/updevs-components-calendar.mjs +1712 -0
- package/fesm2022/updevs-components-calendar.mjs.map +1 -0
- package/fesm2022/updevs-components-card.mjs +238 -0
- package/fesm2022/updevs-components-card.mjs.map +1 -0
- package/fesm2022/updevs-components-drag-and-drop.mjs +185 -0
- package/fesm2022/updevs-components-drag-and-drop.mjs.map +1 -0
- package/fesm2022/updevs-components-dropdown.mjs +226 -0
- package/fesm2022/updevs-components-dropdown.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-abstractions.mjs +53 -0
- package/fesm2022/updevs-components-form-controls-abstractions.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-checkbox.mjs +87 -0
- package/fesm2022/updevs-components-form-controls-checkbox.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-date-picker.mjs +190 -0
- package/fesm2022/updevs-components-form-controls-date-picker.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-file-upload.mjs +264 -0
- package/fesm2022/updevs-components-form-controls-file-upload.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-input.mjs +259 -0
- package/fesm2022/updevs-components-form-controls-input.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-radio.mjs +87 -0
- package/fesm2022/updevs-components-form-controls-radio.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-select.mjs +417 -0
- package/fesm2022/updevs-components-form-controls-select.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-textarea.mjs +72 -0
- package/fesm2022/updevs-components-form-controls-textarea.mjs.map +1 -0
- package/fesm2022/updevs-components-form-controls-time-picker.mjs +345 -0
- package/fesm2022/updevs-components-form-controls-time-picker.mjs.map +1 -0
- package/fesm2022/updevs-components-form.mjs +436 -0
- package/fesm2022/updevs-components-form.mjs.map +1 -0
- package/fesm2022/updevs-components-layout.mjs +940 -0
- package/fesm2022/updevs-components-layout.mjs.map +1 -0
- package/fesm2022/updevs-components-link.mjs +79 -0
- package/fesm2022/updevs-components-link.mjs.map +1 -0
- package/fesm2022/updevs-components-list.mjs +206 -0
- package/fesm2022/updevs-components-list.mjs.map +1 -0
- package/fesm2022/updevs-components-modal.mjs +504 -0
- package/fesm2022/updevs-components-modal.mjs.map +1 -0
- package/fesm2022/updevs-components-paginator.mjs +160 -0
- package/fesm2022/updevs-components-paginator.mjs.map +1 -0
- package/fesm2022/updevs-components-popover.mjs +223 -0
- package/fesm2022/updevs-components-popover.mjs.map +1 -0
- package/fesm2022/updevs-components-table.mjs +1714 -0
- package/fesm2022/updevs-components-table.mjs.map +1 -0
- package/fesm2022/updevs-components.mjs +33 -0
- package/fesm2022/updevs-components.mjs.map +1 -0
- package/form/components/dynamic-field/dynamic-field.component.d.ts +55 -0
- package/form/form.component.d.ts +60 -0
- package/form/models/checkbox-field.model.d.ts +4 -0
- package/form/models/checkbox-group-field.model.d.ts +6 -0
- package/form/models/dynamic-field.model.d.ts +28 -0
- package/form/models/enums/dynamic-field.type.d.ts +12 -0
- package/form/models/enums/public-api.d.ts +1 -0
- package/form/models/file-upload-field.model.d.ts +16 -0
- package/form/models/form-config.d.ts +2 -0
- package/form/models/form-row.model.d.ts +10 -0
- package/form/models/input-field.model.d.ts +9 -0
- package/form/models/public-api.d.ts +14 -0
- package/form/models/radio-field.model.d.ts +4 -0
- package/form/models/radio-group-field.model.d.ts +6 -0
- package/form/models/select-field.model.d.ts +28 -0
- package/form/models/single-select-field.model.d.ts +4 -0
- package/form/models/textarea-field.model.d.ts +10 -0
- package/form/models/validator-config.d.ts +5 -0
- package/form/public-api.d.ts +3 -0
- package/form/tools/errors-helper.d.ts +11 -0
- package/form/upd-form.module.d.ts +22 -0
- package/form-controls/abstractions/base-control.d.ts +29 -0
- package/form-controls/abstractions/index.d.ts +2 -0
- package/form-controls/abstractions/public-api.d.ts +2 -0
- package/form-controls/checkbox/checkbox.component.d.ts +19 -0
- package/form-controls/checkbox/{src/public-api.ts → public-api.d.ts} +0 -1
- package/form-controls/checkbox/upd-checkbox.module.d.ts +10 -0
- package/form-controls/date-picker/date-picker.component.d.ts +87 -0
- package/form-controls/date-picker/public-api.d.ts +2 -0
- package/form-controls/date-picker/upd-date-picker.module.d.ts +12 -0
- package/form-controls/file-upload/file-upload-changed.event.d.ts +4 -0
- package/form-controls/file-upload/file-upload.component.d.ts +46 -0
- package/form-controls/file-upload/public-api.d.ts +3 -0
- package/form-controls/file-upload/upd-file-upload.module.d.ts +14 -0
- package/form-controls/input/directives/input-append.directive.d.ts +7 -0
- package/form-controls/input/directives/input-prepend.directive.d.ts +7 -0
- package/form-controls/input/input.component.d.ts +64 -0
- package/form-controls/input/upd-input.module.d.ts +13 -0
- package/form-controls/radio/radio.component.d.ts +17 -0
- package/form-controls/radio/upd-radio.module.d.ts +10 -0
- package/form-controls/select/components/multiple/select-multiple.component.d.ts +25 -0
- package/form-controls/select/components/single/select.component.d.ts +26 -0
- package/form-controls/select/models/abstractions/base-select.component.d.ts +77 -0
- package/form-controls/select/models/defaults.d.ts +8 -0
- package/form-controls/select/{src/models/public-api.ts → models/public-api.d.ts} +1 -0
- package/form-controls/select/{src/models/select-item.ts → models/select-item.d.ts} +0 -1
- package/form-controls/select/upd-select.module.d.ts +16 -0
- package/form-controls/textarea/textarea.component.d.ts +19 -0
- package/form-controls/textarea/upd-textarea.module.d.ts +8 -0
- package/form-controls/time-picker/time-picker.component.d.ts +78 -0
- package/form-controls/time-picker/time-selector/time-selector.component.d.ts +69 -0
- package/form-controls/time-picker/upd-time-picker.module.d.ts +17 -0
- package/index.d.ts +2 -0
- package/layout/abstractions/base-page.component.d.ts +12 -0
- package/layout/abstractions/base.layout.d.ts +15 -0
- package/layout/index.d.ts +1 -0
- package/layout/layouts/blank-layout/blank-layout.component.d.ts +9 -0
- package/layout/layouts/blank-layout/blank-layout.module.d.ts +15 -0
- package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.d.ts +6 -0
- package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.d.ts +22 -0
- package/layout/models/login-page-config.model.d.ts +46 -0
- package/layout/models/login-page.config.d.ts +44 -0
- package/layout/{src/models/public-api.ts → models/public-api.d.ts} +1 -0
- package/layout/models/security-layout-config.model.d.ts +12 -0
- package/layout/models/security-layout.config.d.ts +10 -0
- package/layout/models/upd-layout-config.model.d.ts +48 -0
- package/layout/{src/models/upd-layout.config.ts → models/upd-layout.config.d.ts} +9 -0
- package/layout/pages/auth-flow/auth-flow-routing.module.d.ts +12 -0
- package/layout/pages/auth-flow/auth-flow.module.d.ts +20 -0
- package/layout/pages/auth-flow/logged-out/logged-out.component.d.ts +5 -0
- package/layout/pages/auth-flow/login/login.component.d.ts +26 -0
- package/layout/pages/auth-flow/oauth-callback/oauth-callback.component.d.ts +5 -0
- package/layout/partials/footer/footer-copyright.directive.d.ts +5 -0
- package/layout/partials/footer/footer.component.d.ts +34 -0
- package/layout/partials/footer/footer.module.d.ts +9 -0
- package/layout/{src/partials/footer/public-api.ts → partials/footer/public-api.d.ts} +1 -0
- package/layout/partials/header/header.component.d.ts +48 -0
- package/layout/partials/header/header.module.d.ts +12 -0
- package/layout/{src/partials/header/public-api.ts → partials/header/public-api.d.ts} +1 -0
- package/layout/partials/page-header/page-header.component.d.ts +7 -0
- package/layout/partials/sidebar/sidebar.component.d.ts +24 -0
- package/layout/services/upd-layout-config.service.d.ts +15 -0
- package/layout/{src/tools/layout.constants.ts → tools/layout.constants.d.ts} +3 -6
- package/layout/upd-layout.module.d.ts +19 -0
- package/lib/index.d.ts +2 -0
- package/lib/models/public-api.d.ts +2 -0
- package/lib/models/row-column-size.d.ts +6 -0
- package/lib/public-api.d.ts +5 -0
- package/lib/tools/column-size.helper.d.ts +6 -0
- package/lib/tools/public-api.d.ts +2 -0
- package/{src/lib/types/component-size.type.ts → lib/types/component-size.type.d.ts} +1 -0
- package/lib/types/horizontal-vertical.type.d.ts +2 -0
- package/lib/types/public-api.d.ts +4 -0
- package/lib/types/validation-status.type.d.ts +2 -0
- package/lib/upd-components.module.d.ts +7 -0
- package/link/index.d.ts +1 -0
- package/link/link.component.d.ts +22 -0
- package/link/upd-link.module.d.ts +8 -0
- package/list/index.d.ts +1 -0
- package/list/list.component.d.ts +46 -0
- package/list/{src/models/list-item.ts → models/list-item.d.ts} +3 -4
- package/list/models/list-item.model.d.ts +25 -0
- package/list/upd-list.module.d.ts +13 -0
- package/modal/components/modal-container/modal-container.component.d.ts +74 -0
- package/modal/index.d.ts +1 -0
- package/modal/models/base.modal.d.ts +8 -0
- package/modal/models/modal-config.model.d.ts +32 -0
- package/modal/models/modal-ref.d.ts +6 -0
- package/modal/models/modal.config.d.ts +30 -0
- package/modal/models/public-api.d.ts +3 -0
- package/modal/public-api.d.ts +3 -0
- package/modal/services/modal-alert.service.d.ts +22 -0
- package/modal/services/modal.service.d.ts +12 -0
- package/modal/services/public-api.d.ts +2 -0
- package/modal/types/modal-footer-style.type.d.ts +1 -0
- package/modal/types/modal-size.type.d.ts +1 -0
- package/modal/upd-modal.module.d.ts +18 -0
- package/package.json +169 -21
- package/paginator/index.d.ts +1 -0
- package/paginator/paginator.component.d.ts +42 -0
- package/paginator/public-api.d.ts +2 -0
- package/paginator/upd-paginator.module.d.ts +14 -0
- package/popover/index.d.ts +1 -0
- package/popover/popover.component.d.ts +22 -0
- package/popover/popover.directive.d.ts +33 -0
- package/popover/upd-popover.module.d.ts +9 -0
- package/public-api.d.ts +2 -0
- package/table/abstractions/base-column.model.d.ts +31 -0
- package/table/abstractions/base.column.d.ts +22 -0
- package/table/abstractions/filters-operands.service.d.ts +8 -0
- package/table/abstractions/public-api.d.ts +2 -0
- package/table/components/columns/boolean-column/boolean-column.component.d.ts +9 -0
- package/table/components/columns/date-time-column/date-time-column.component.d.ts +7 -0
- package/table/components/columns/number-column/number-column.component.d.ts +7 -0
- package/table/components/columns/text-column/text-column.component.d.ts +9 -0
- package/table/components/columns-manager/columns-manager.component.d.ts +15 -0
- package/table/components/filter-row/filter-row.component.d.ts +40 -0
- package/table/components/save-search/save-search.component.d.ts +17 -0
- package/table/components/search-section/search-section.component.d.ts +36 -0
- package/table/directives/public-api.d.ts +1 -0
- package/table/directives/table-column.directive.d.ts +14 -0
- package/table/index.d.ts +1 -0
- package/table/models/columns/boolean-column.model.d.ts +15 -0
- package/table/models/columns/date-time-column.model.d.ts +8 -0
- package/table/models/columns/guid-column.model.d.ts +4 -0
- package/table/models/columns/image-column.model.d.ts +6 -0
- package/table/models/columns/number-column.model.d.ts +8 -0
- package/table/models/columns/public-api.d.ts +6 -0
- package/table/models/columns/text-column.model.d.ts +6 -0
- package/table/models/enums/column-type.enum.d.ts +13 -0
- package/table/models/enums/public-api.d.ts +1 -0
- package/table/models/filter-item.model.d.ts +6 -0
- package/table/models/filter-operand.config.d.ts +9 -0
- package/table/models/operands-lists/boolean-filter-operands-list.model.d.ts +6 -0
- package/table/models/operands-lists/date-filter-operands-list.model.d.ts +6 -0
- package/table/models/operands-lists/date-or-number-operands-list.config.d.ts +5 -0
- package/table/models/operands-lists/filter-operands-list.config.d.ts +5 -0
- package/table/models/operands-lists/guid-filter-operands-list.model.d.ts +6 -0
- package/table/models/operands-lists/number-filter-operands-list.model.d.ts +6 -0
- package/table/models/operands-lists/string-filter-operands-list.model.d.ts +6 -0
- package/table/models/public-api.d.ts +4 -0
- package/table/models/saved-view.model.d.ts +11 -0
- package/table/models/table-config.model.d.ts +26 -0
- package/table/models/table.config.d.ts +24 -0
- package/table/models/upd-table-config.model.d.ts +6 -0
- package/table/models/upd-table.config.d.ts +6 -0
- package/table/public-api.d.ts +5 -0
- package/table/services/default-filters-operands.service.d.ts +17 -0
- package/table/services/storages/saved-views.storage.d.ts +19 -0
- package/table/services/stores/filters-operands.store.d.ts +11 -0
- package/table/services/upd-table-config.service.d.ts +12 -0
- package/table/table.component.d.ts +79 -0
- package/table/tools/filters.tools.d.ts +9 -0
- package/table/tools/table.constants.d.ts +15 -0
- package/table/upd-table.module.d.ts +40 -0
- package/CHANGELOG.md +0 -8
- package/button/ng-package.json +0 -7
- package/button/src/button.component.html +0 -8
- package/button/src/button.component.scss +0 -5
- package/button/src/button.component.spec.ts +0 -23
- package/button/src/button.component.ts +0 -154
- package/button/src/upd-button.module.ts +0 -17
- package/card/ng-package.json +0 -7
- package/card/src/card.component.html +0 -105
- package/card/src/card.component.scss +0 -47
- package/card/src/card.component.spec.ts +0 -23
- package/card/src/card.component.ts +0 -112
- package/card/src/directives/card-actions.directive.spec.ts +0 -8
- package/card/src/directives/card-actions.directive.ts +0 -11
- package/card/src/directives/card-footer.directive.spec.ts +0 -8
- package/card/src/directives/card-footer.directive.ts +0 -11
- package/card/src/directives/card-header.directive.spec.ts +0 -8
- package/card/src/directives/card-header.directive.ts +0 -11
- package/card/src/directives/card-image.directive.spec.ts +0 -8
- package/card/src/directives/card-image.directive.ts +0 -11
- package/card/src/types/public-api.ts +0 -5
- package/card/src/upd-card.module.ts +0 -32
- package/dropdown/ng-package.json +0 -7
- package/dropdown/src/dropdown.component.html +0 -32
- package/dropdown/src/dropdown.component.scss +0 -19
- package/dropdown/src/dropdown.component.spec.ts +0 -23
- package/dropdown/src/dropdown.component.ts +0 -182
- package/dropdown/src/models/public-api.ts +0 -2
- package/dropdown/src/upd-dropdown.module.ts +0 -25
- package/form/ng-package.json +0 -7
- package/form/src/form.module.ts +0 -10
- package/form/src/public-api.ts +0 -1
- package/form-controls/checkbox/ng-package.json +0 -7
- package/form-controls/checkbox/src/checkbox.component.html +0 -7
- package/form-controls/checkbox/src/checkbox.component.scss +0 -0
- package/form-controls/checkbox/src/checkbox.component.spec.ts +0 -23
- package/form-controls/checkbox/src/checkbox.component.ts +0 -48
- package/form-controls/checkbox/src/upd-checkbox.module.ts +0 -19
- package/form-controls/input/ng-package.json +0 -7
- package/form-controls/input/src/directives/input-append.directive.spec.ts +0 -8
- package/form-controls/input/src/directives/input-append.directive.ts +0 -11
- package/form-controls/input/src/directives/input-prepend.directive.spec.ts +0 -8
- package/form-controls/input/src/directives/input-prepend.directive.ts +0 -11
- package/form-controls/input/src/input.component.html +0 -82
- package/form-controls/input/src/input.component.scss +0 -13
- package/form-controls/input/src/input.component.spec.ts +0 -23
- package/form-controls/input/src/input.component.ts +0 -124
- package/form-controls/input/src/upd-input.module.ts +0 -29
- package/form-controls/radio/ng-package.json +0 -7
- package/form-controls/radio/src/radio.component.html +0 -7
- package/form-controls/radio/src/radio.component.scss +0 -0
- package/form-controls/radio/src/radio.component.spec.ts +0 -23
- package/form-controls/radio/src/radio.component.ts +0 -47
- package/form-controls/radio/src/upd-radio.module.ts +0 -17
- package/form-controls/select/ng-package.json +0 -7
- package/form-controls/select/src/components/multiple/select-multiple.component.html +0 -41
- package/form-controls/select/src/components/multiple/select-multiple.component.scss +0 -6
- package/form-controls/select/src/components/multiple/select-multiple.component.spec.ts +0 -21
- package/form-controls/select/src/components/multiple/select-multiple.component.ts +0 -69
- package/form-controls/select/src/components/shared.scss +0 -40
- package/form-controls/select/src/components/single/select.component.html +0 -53
- package/form-controls/select/src/components/single/select.component.scss +0 -3
- package/form-controls/select/src/components/single/select.component.spec.ts +0 -23
- package/form-controls/select/src/components/single/select.component.ts +0 -58
- package/form-controls/select/src/models/abstractions/base-select.component.ts +0 -259
- package/form-controls/select/src/upd-select.module.ts +0 -32
- package/form-controls/textarea/ng-package.json +0 -7
- package/form-controls/textarea/src/textarea.component.html +0 -8
- package/form-controls/textarea/src/textarea.component.scss +0 -0
- package/form-controls/textarea/src/textarea.component.spec.ts +0 -23
- package/form-controls/textarea/src/textarea.component.ts +0 -47
- package/form-controls/textarea/src/upd-textarea.module.ts +0 -17
- package/form-controls/time-picker/ng-package.json +0 -7
- package/form-controls/time-picker/src/time-picker.component.html +0 -17
- package/form-controls/time-picker/src/time-picker.component.scss +0 -10
- package/form-controls/time-picker/src/time-picker.component.spec.ts +0 -21
- package/form-controls/time-picker/src/time-picker.component.ts +0 -110
- package/form-controls/time-picker/src/time-selector/time-selector.component.html +0 -44
- package/form-controls/time-picker/src/time-selector/time-selector.component.scss +0 -47
- package/form-controls/time-picker/src/time-selector/time-selector.component.spec.ts +0 -21
- package/form-controls/time-picker/src/time-selector/time-selector.component.ts +0 -107
- package/form-controls/time-picker/src/upd-time-picker.module.ts +0 -39
- package/layout/ng-package.json +0 -7
- package/layout/src/abstractions/base-page.component.ts +0 -21
- package/layout/src/assets/i18n/en.json +0 -5
- package/layout/src/assets/i18n/pt.json +0 -5
- package/layout/src/layouts/blank-layout/blank-layout.component.html +0 -1
- package/layout/src/layouts/blank-layout/blank-layout.component.scss +0 -0
- package/layout/src/layouts/blank-layout/blank-layout.component.spec.ts +0 -23
- package/layout/src/layouts/blank-layout/blank-layout.component.ts +0 -10
- package/layout/src/layouts/blank-layout/blank-layout.module.ts +0 -17
- package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.html +0 -14
- package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.scss +0 -0
- package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.spec.ts +0 -23
- package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.ts +0 -31
- package/layout/src/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.ts +0 -52
- package/layout/src/models/upd-layout-config.model.ts +0 -71
- package/layout/src/pages/auth-flow/auth-flow-routing.module.ts +0 -21
- package/layout/src/pages/auth-flow/auth-flow.module.ts +0 -29
- package/layout/src/pages/auth-flow/logged-out/logged-out.component.html +0 -1
- package/layout/src/pages/auth-flow/logged-out/logged-out.component.scss +0 -0
- package/layout/src/pages/auth-flow/logged-out/logged-out.component.spec.ts +0 -23
- package/layout/src/pages/auth-flow/logged-out/logged-out.component.ts +0 -10
- package/layout/src/pages/auth-flow/login/login.component.html +0 -96
- package/layout/src/pages/auth-flow/login/login.component.scss +0 -0
- package/layout/src/pages/auth-flow/login/login.component.spec.ts +0 -23
- package/layout/src/pages/auth-flow/login/login.component.ts +0 -26
- package/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.html +0 -1
- package/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.scss +0 -0
- package/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.spec.ts +0 -23
- package/layout/src/pages/auth-flow/oauth-callback/oauth-callback.component.ts +0 -10
- package/layout/src/partials/footer/footer-copyright.directive.spec.ts +0 -8
- package/layout/src/partials/footer/footer-copyright.directive.ts +0 -9
- package/layout/src/partials/footer/footer.component.html +0 -30
- package/layout/src/partials/footer/footer.component.scss +0 -0
- package/layout/src/partials/footer/footer.component.spec.ts +0 -23
- package/layout/src/partials/footer/footer.component.ts +0 -73
- package/layout/src/partials/header/header.component.html +0 -163
- package/layout/src/partials/header/header.component.scss +0 -0
- package/layout/src/partials/header/header.component.spec.ts +0 -23
- package/layout/src/partials/header/header.component.ts +0 -86
- package/layout/src/partials/page-header/page-header.component.html +0 -19
- package/layout/src/partials/page-header/page-header.component.scss +0 -0
- package/layout/src/partials/page-header/page-header.component.spec.ts +0 -23
- package/layout/src/partials/page-header/page-header.component.ts +0 -11
- package/layout/src/partials/sidebar/sidebar.component.html +0 -62
- package/layout/src/partials/sidebar/sidebar.component.scss +0 -0
- package/layout/src/partials/sidebar/sidebar.component.spec.ts +0 -23
- package/layout/src/partials/sidebar/sidebar.component.ts +0 -161
- package/layout/src/services/upd-layout-config.service.spec.ts +0 -16
- package/layout/src/services/upd-layout-config.service.ts +0 -20
- package/layout/src/upd-layout.module.ts +0 -34
- package/link/ng-package.json +0 -7
- package/link/src/link.component.html +0 -3
- package/link/src/link.component.scss +0 -3
- package/link/src/link.component.spec.ts +0 -23
- package/link/src/link.component.ts +0 -48
- package/link/src/upd-link.module.ts +0 -17
- package/list/ng-package.json +0 -7
- package/list/src/assets/i18n/en.json +0 -5
- package/list/src/assets/i18n/pt.json +0 -5
- package/list/src/list.component.html +0 -58
- package/list/src/list.component.scss +0 -21
- package/list/src/list.component.spec.ts +0 -23
- package/list/src/list.component.ts +0 -147
- package/list/src/models/list-item.model.ts +0 -35
- package/list/src/upd-list.module.ts +0 -30
- package/ng-package.json +0 -10
- package/popover/ng-package.json +0 -7
- package/popover/src/popover.component.html +0 -20
- package/popover/src/popover.component.scss +0 -8
- package/popover/src/popover.component.spec.ts +0 -23
- package/popover/src/popover.component.ts +0 -53
- package/popover/src/popover.directive.spec.ts +0 -8
- package/popover/src/popover.directive.ts +0 -128
- package/popover/src/upd-popover.module.ts +0 -20
- package/src/lib/public-api.ts +0 -2
- package/src/lib/types/public-api.ts +0 -2
- package/src/lib/types/validation-status.type.ts +0 -1
- package/src/lib/upd-components.module.ts +0 -6
- package/src/public-api.ts +0 -1
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
- /package/{button/src/index.ts → badge/index.d.ts} +0 -0
- /package/{card/src/index.ts → button/index.d.ts} +0 -0
- /package/button/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/{dropdown/src/index.ts → calendar/index.d.ts} +0 -0
- /package/card/{src/directives/public-api.ts → directives/public-api.d.ts} +0 -0
- /package/{form-controls/checkbox/src/index.ts → card/index.d.ts} +0 -0
- /package/card/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/card/{src/types/card-state.type.ts → types/card-state.type.d.ts} +0 -0
- /package/card/{src/types/card-style.type.ts → types/card-style.type.d.ts} +0 -0
- /package/card/{src/types/hover-effect.type.ts → types/hover-effect.type.d.ts} +0 -0
- /package/card/{src/types/ribbon-style.type.ts → types/ribbon-style.type.d.ts} +0 -0
- /package/card/{src/types/status-position.type.ts → types/status-position.type.d.ts} +0 -0
- /package/{form-controls/input/src/index.ts → drag-and-drop/index.d.ts} +0 -0
- /package/{form-controls/radio/src/index.ts → dropdown/index.d.ts} +0 -0
- /package/dropdown/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/{form-controls/time-picker/src → esm2022/form-controls/time-picker}/assets/i18n/en.json +0 -0
- /package/{form-controls/time-picker/src → esm2022/form-controls/time-picker}/assets/i18n/pt.json +0 -0
- /package/{src/lib/index.ts → form/index.d.ts} +0 -0
- /package/form-controls/{select/src/index.ts → checkbox/index.d.ts} +0 -0
- /package/form-controls/{textarea/src/index.ts → date-picker/index.d.ts} +0 -0
- /package/form-controls/{time-picker/src/index.ts → file-upload/index.d.ts} +0 -0
- /package/form-controls/input/{src/directives/public-api.ts → directives/public-api.d.ts} +0 -0
- /package/{form/src/index.ts → form-controls/input/index.d.ts} +0 -0
- /package/form-controls/input/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/form-controls/input/{src/types/input.type.ts → types/input.type.d.ts} +0 -0
- /package/form-controls/input/{src/types/loader-position.type.ts → types/loader-position.type.d.ts} +0 -0
- /package/form-controls/input/{src/types/public-api.ts → types/public-api.d.ts} +0 -0
- /package/{layout/src/index.ts → form-controls/radio/index.d.ts} +0 -0
- /package/form-controls/radio/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/{link/src/index.ts → form-controls/select/index.d.ts} +0 -0
- /package/form-controls/select/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/{list/src/index.ts → form-controls/textarea/index.d.ts} +0 -0
- /package/form-controls/textarea/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/{popover/src/index.ts → form-controls/time-picker/index.d.ts} +0 -0
- /package/form-controls/time-picker/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/layout/{src/abstractions/public-api.ts → abstractions/public-api.d.ts} +0 -0
- /package/layout/{src/layouts/public-api.ts → layouts/public-api.d.ts} +0 -0
- /package/layout/{src/pages/auth-flow/public-api.ts → pages/auth-flow/public-api.d.ts} +0 -0
- /package/layout/{src/pages/public-api.ts → pages/public-api.d.ts} +0 -0
- /package/layout/{src/partials/header/header-style.type.ts → partials/header/header-style.type.d.ts} +0 -0
- /package/layout/{src/partials/page-header/public-api.ts → partials/page-header/public-api.d.ts} +0 -0
- /package/layout/{src/partials/public-api.ts → partials/public-api.d.ts} +0 -0
- /package/layout/{src/partials/sidebar/public-api.ts → partials/sidebar/public-api.d.ts} +0 -0
- /package/layout/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/layout/{src/services/public-api.ts → services/public-api.d.ts} +0 -0
- /package/link/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/link/{src/target.type.ts → target.type.d.ts} +0 -0
- /package/list/{src/models/badge-position.type.ts → models/badge-position.type.d.ts} +0 -0
- /package/list/{src/models/public-api.ts → models/public-api.d.ts} +0 -0
- /package/list/{src/public-api.ts → public-api.d.ts} +0 -0
- /package/popover/{src/public-api.ts → public-api.d.ts} +0 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, effect, inject } from '@angular/core';
|
|
2
|
+
import { DateService } from '@updevs/sdk/core';
|
|
3
|
+
import { BaseComponent } from '@updevs/sdk/layout';
|
|
4
|
+
import { TranslocoService } from '@jsverse/transloco';
|
|
5
|
+
import { startWith } from 'rxjs';
|
|
6
|
+
import { CalendarBodyComponent } from '../calendar-body/calendar-body.component';
|
|
7
|
+
import { DateRangeModel } from '../../models/date-range.model';
|
|
8
|
+
import { CalendarCellModel } from '../../models/calendar-cell.model';
|
|
9
|
+
import { KeyboardTools } from '../../tools/keyboard-tools';
|
|
10
|
+
import { CalendarRangeStrategyService } from '../../services/calendar-range-strategy.service';
|
|
11
|
+
import { CalendarSignalsService } from '../../services/calendar-signals.service';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "../calendar-header/calendar-header.component";
|
|
14
|
+
import * as i2 from "../calendar-body/calendar-body.component";
|
|
15
|
+
const daysPerWeek = 7;
|
|
16
|
+
let uniqueIdCounter = 0;
|
|
17
|
+
export class CalendarMonthViewComponent extends BaseComponent {
|
|
18
|
+
/**
|
|
19
|
+
* The date to display in this month view (everything other than the month and year is ignored).
|
|
20
|
+
*/
|
|
21
|
+
get activeDate() {
|
|
22
|
+
return this.calendarSignalsService.activeDate();
|
|
23
|
+
}
|
|
24
|
+
set activeDate(value) {
|
|
25
|
+
this.updateActiveDate(value);
|
|
26
|
+
}
|
|
27
|
+
/** The currently selected date. */
|
|
28
|
+
get selected() {
|
|
29
|
+
return this.calendarSignalsService.selectedDate();
|
|
30
|
+
}
|
|
31
|
+
set selected(value) {
|
|
32
|
+
let currValue;
|
|
33
|
+
if (value instanceof DateRangeModel) {
|
|
34
|
+
currValue = value;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
currValue = this.dateService.getValidOrUndefined(this.dateService.deserialize(value));
|
|
38
|
+
}
|
|
39
|
+
this.calendarSignalsService.selectedDate = currValue;
|
|
40
|
+
this.setRanges(currValue);
|
|
41
|
+
}
|
|
42
|
+
/** The minimum selectable date. */
|
|
43
|
+
get minDate() {
|
|
44
|
+
return this._minDate;
|
|
45
|
+
}
|
|
46
|
+
set minDate(value) {
|
|
47
|
+
this._minDate = this.dateService.getValidOrUndefined(this.dateService.deserialize(value));
|
|
48
|
+
}
|
|
49
|
+
/** The maximum selectable date. */
|
|
50
|
+
get maxDate() {
|
|
51
|
+
return this._maxDate;
|
|
52
|
+
}
|
|
53
|
+
set maxDate(value) {
|
|
54
|
+
this._maxDate = this.dateService.getValidOrUndefined(this.dateService.deserialize(value));
|
|
55
|
+
}
|
|
56
|
+
constructor() {
|
|
57
|
+
super();
|
|
58
|
+
/**
|
|
59
|
+
* First day of week.
|
|
60
|
+
* Zero-based starting from Sunday.
|
|
61
|
+
* Default: 0 - Sunday.
|
|
62
|
+
*/
|
|
63
|
+
this.firstDayOfWeek = 0;
|
|
64
|
+
/** Whether the user is currently selecting a range of dates. */
|
|
65
|
+
this.isRange = false;
|
|
66
|
+
/** Emits when a new date is selected. */
|
|
67
|
+
this.selectedChange = new EventEmitter();
|
|
68
|
+
/** Emits when any date is selected. */
|
|
69
|
+
this.userSelection = new EventEmitter();
|
|
70
|
+
/** Emits when the user initiates a date range drag via mouse or touch. */
|
|
71
|
+
this.dragStarted = new EventEmitter();
|
|
72
|
+
/**
|
|
73
|
+
* Emits when the user completes or cancels a date range drag.
|
|
74
|
+
* Emits null when the drag was canceled or the newly selected date range if completed.
|
|
75
|
+
*/
|
|
76
|
+
this.dragEnded = new EventEmitter();
|
|
77
|
+
/** Emits when any date is activated. */
|
|
78
|
+
this.activeDateChange = new EventEmitter();
|
|
79
|
+
/** Grid of calendar cells representing the dates of the month. */
|
|
80
|
+
this.weeks = [];
|
|
81
|
+
/** The number of blank cells in the first row before the 1st of the month. */
|
|
82
|
+
this.firstWeekOffset = 0;
|
|
83
|
+
/** The names of the weekdays. */
|
|
84
|
+
this.weekdays = [];
|
|
85
|
+
/** Flag used to filter out space/enter keyup events that originated outside of the view. */
|
|
86
|
+
this._selectionKeyPressed = false;
|
|
87
|
+
this.translocoService = inject(TranslocoService);
|
|
88
|
+
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
89
|
+
this.dateService = inject(DateService);
|
|
90
|
+
this.calendarSignalsService = inject(CalendarSignalsService);
|
|
91
|
+
this.calendarRangeStrategy = inject(CalendarRangeStrategyService);
|
|
92
|
+
effect(() => this.updateActiveDate(this.calendarSignalsService.activeDate(), true));
|
|
93
|
+
}
|
|
94
|
+
ngAfterContentInit() {
|
|
95
|
+
const langSub = this.translocoService.langChanges$
|
|
96
|
+
.pipe(startWith(undefined))
|
|
97
|
+
.subscribe(() => this.init());
|
|
98
|
+
this.addSubscriptions(langSub);
|
|
99
|
+
}
|
|
100
|
+
ngOnChanges(changes) {
|
|
101
|
+
const comparisonChange = changes['comparisonStart'] || changes['comparisonEnd'];
|
|
102
|
+
if (comparisonChange && !comparisonChange.firstChange) {
|
|
103
|
+
this.setRanges(this.selected);
|
|
104
|
+
}
|
|
105
|
+
if (changes['activeDrag'] && !this.activeDrag) {
|
|
106
|
+
this.clearPreview();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Handles when a new date is selected. */
|
|
110
|
+
dateSelected(event) {
|
|
111
|
+
const date = event.value;
|
|
112
|
+
const selectedDate = this.getDateFromDayOfMonth(date);
|
|
113
|
+
const currSelection = this.calendarSignalsService.selectedDate();
|
|
114
|
+
let rangeStartDate;
|
|
115
|
+
let rangeEndDate;
|
|
116
|
+
if (currSelection instanceof DateRangeModel) {
|
|
117
|
+
rangeStartDate = this.getDateInCurrentMonth(currSelection.start);
|
|
118
|
+
rangeEndDate = this.getDateInCurrentMonth(currSelection.end);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
rangeStartDate = rangeEndDate = this.getDateInCurrentMonth(currSelection);
|
|
122
|
+
}
|
|
123
|
+
if (rangeStartDate !== date || rangeEndDate !== date) {
|
|
124
|
+
this.calendarSignalsService.selectedDate = selectedDate;
|
|
125
|
+
}
|
|
126
|
+
this.userSelection.emit({ value: selectedDate, event: event.event });
|
|
127
|
+
this.clearPreview();
|
|
128
|
+
this.changeDetectorRef.markForCheck();
|
|
129
|
+
}
|
|
130
|
+
/** Handles keydown events on the calendar body when calendar is in month view. */
|
|
131
|
+
handleCalendarBodyKeydown(event) {
|
|
132
|
+
// TODO(mmalerba): We currently allow keyboard navigation to disabled dates, but just prevent
|
|
133
|
+
// disabled ones from being selected. This may not be ideal, we should look into whether
|
|
134
|
+
// navigation should skip over disabled dates, and if so, how to implement that efficiently.
|
|
135
|
+
const oldActiveDate = this.activeDate;
|
|
136
|
+
let tempActiveDate;
|
|
137
|
+
switch (event.key) {
|
|
138
|
+
case 'LEFT_ARROW':
|
|
139
|
+
tempActiveDate = this.dateService.addDays(this.activeDate, -1);
|
|
140
|
+
break;
|
|
141
|
+
case 'RIGHT_ARROW':
|
|
142
|
+
tempActiveDate = this.dateService.addDays(this.activeDate, 1);
|
|
143
|
+
break;
|
|
144
|
+
case 'UP_ARROW':
|
|
145
|
+
tempActiveDate = this.dateService.addDays(this.activeDate, -7);
|
|
146
|
+
break;
|
|
147
|
+
case 'DOWN_ARROW':
|
|
148
|
+
tempActiveDate = this.dateService.addDays(this.activeDate, 7);
|
|
149
|
+
break;
|
|
150
|
+
case 'HOME':
|
|
151
|
+
tempActiveDate = this.dateService.addDays(this.activeDate, 1 - this.activeDate.getDate());
|
|
152
|
+
break;
|
|
153
|
+
case 'END':
|
|
154
|
+
tempActiveDate = this.dateService.addDays(this.activeDate, this.dateService.getNumDaysInMonth(this.activeDate) -
|
|
155
|
+
this.activeDate.getDate());
|
|
156
|
+
break;
|
|
157
|
+
case 'PAGE_UP':
|
|
158
|
+
tempActiveDate = event.altKey
|
|
159
|
+
? this.dateService.addYears(this.activeDate, -1)
|
|
160
|
+
: this.dateService.addMonths(this.activeDate, -1);
|
|
161
|
+
break;
|
|
162
|
+
case 'PAGE_DOWN':
|
|
163
|
+
tempActiveDate = event.altKey
|
|
164
|
+
? this.dateService.addYears(this.activeDate, 1)
|
|
165
|
+
: this.dateService.addMonths(this.activeDate, 1);
|
|
166
|
+
break;
|
|
167
|
+
case 'ENTER':
|
|
168
|
+
case 'SPACE':
|
|
169
|
+
this._selectionKeyPressed = true;
|
|
170
|
+
if (this.canSelect(this.activeDate)) {
|
|
171
|
+
// Prevent unexpected default actions such as form submission.
|
|
172
|
+
// Note that we only prevent the default action here while the selection happens in
|
|
173
|
+
// `keyup` below. We can't do the selection here, because it can cause the calendar to
|
|
174
|
+
// reopen if focus is restored immediately. We also can't call `preventDefault` on `keyup`
|
|
175
|
+
// because it's too late (see #23305).
|
|
176
|
+
event.preventDefault();
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
case 'ESCAPE':
|
|
180
|
+
// Abort the current range selection if the user presses escape mid-selection.
|
|
181
|
+
if (this.previewEnd !== undefined && !KeyboardTools.hasModifierKey(event)) {
|
|
182
|
+
this.clearPreview();
|
|
183
|
+
// If a drag is in progress, cancel the drag without changing the
|
|
184
|
+
// current selection.
|
|
185
|
+
if (this.activeDrag) {
|
|
186
|
+
this.dragEnded.emit({ value: undefined, event });
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
this.selectedChange.emit(undefined);
|
|
190
|
+
this.userSelection.emit({ value: undefined, event });
|
|
191
|
+
}
|
|
192
|
+
event.preventDefault();
|
|
193
|
+
event.stopPropagation(); // Prevents the overlay from closing.
|
|
194
|
+
}
|
|
195
|
+
return;
|
|
196
|
+
default:
|
|
197
|
+
// Don't prevent default or focus active cell on keys that we don't explicitly handle.
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (this.dateService.compare(oldActiveDate, this.activeDate)) {
|
|
201
|
+
this.calendarSignalsService.activeDate = tempActiveDate;
|
|
202
|
+
this.focusActiveCellAfterViewChecked();
|
|
203
|
+
}
|
|
204
|
+
// Prevent unexpected default actions such as form submission.
|
|
205
|
+
event.preventDefault();
|
|
206
|
+
}
|
|
207
|
+
/** Handles keyup events on the calendar body when calendar is in month view. */
|
|
208
|
+
handleCalendarBodyKeyup(event) {
|
|
209
|
+
if (event.key === 'SPACE' || event.key === 'ENTER') {
|
|
210
|
+
if (this._selectionKeyPressed && this.canSelect(this.activeDate)) {
|
|
211
|
+
this.dateSelected({ value: this.activeDate.getDate(), event });
|
|
212
|
+
}
|
|
213
|
+
this._selectionKeyPressed = false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/** Initializes this month view. */
|
|
217
|
+
init() {
|
|
218
|
+
this.setRanges(this.selected);
|
|
219
|
+
this.todayDate = this.getCellCompareValue(new Date());
|
|
220
|
+
this.monthLabel = this.dateService.getMonthNames('short')[this.activeDate.getMonth()].toLocaleUpperCase();
|
|
221
|
+
const firstOfMonth = this.dateService.create(this.activeDate.getFullYear(), this.activeDate.getMonth(), 1);
|
|
222
|
+
this.firstWeekOffset = (daysPerWeek + firstOfMonth.getDay() - this.firstDayOfWeek) % daysPerWeek;
|
|
223
|
+
this.initWeekdays();
|
|
224
|
+
this.createWeekCells();
|
|
225
|
+
this.changeDetectorRef.markForCheck();
|
|
226
|
+
}
|
|
227
|
+
/** Focuses the active cell after the microtask queue is empty. */
|
|
228
|
+
focusActiveCell(movePreview) {
|
|
229
|
+
this._matCalendarBody.focusActiveCell(movePreview);
|
|
230
|
+
}
|
|
231
|
+
/** Focuses the active cell after change detection has run and the microtask queue is empty. */
|
|
232
|
+
focusActiveCellAfterViewChecked() {
|
|
233
|
+
this._matCalendarBody.scheduleFocusActiveCellAfterViewChecked();
|
|
234
|
+
}
|
|
235
|
+
/** Called when the user has activated a new cell and the preview needs to be updated. */
|
|
236
|
+
previewChanged({ value: cell }) {
|
|
237
|
+
if (!this.selected) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
if (this.isRange && !(this.selected instanceof DateRangeModel)) {
|
|
241
|
+
this.selected = new DateRangeModel(this.selected);
|
|
242
|
+
}
|
|
243
|
+
// We can assume that this will be a range, because preview
|
|
244
|
+
// events aren't fired for single date selections.
|
|
245
|
+
const value = cell ? cell.rawValue : undefined;
|
|
246
|
+
const previewRange = this.calendarRangeStrategy.createPreview(value, this.selected);
|
|
247
|
+
this.previewStart = this.getCellCompareValue(previewRange.start);
|
|
248
|
+
this.previewEnd = this.getCellCompareValue(previewRange.end);
|
|
249
|
+
if (!!this.activeDrag && !!value) {
|
|
250
|
+
const dragRange = this.calendarRangeStrategy.createDrag?.(this.activeDrag.value, this.selected, value);
|
|
251
|
+
if (!!dragRange) {
|
|
252
|
+
this.previewStart = this.getCellCompareValue(dragRange.start);
|
|
253
|
+
this.previewEnd = this.getCellCompareValue(dragRange.end);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// Note that here we need to use `detectChanges`, rather than `markForCheck`, because
|
|
257
|
+
// the way `_focusActiveCell` is set up at the moment makes it fire at the wrong time
|
|
258
|
+
// when navigating one month back using the keyboard which will cause this handler
|
|
259
|
+
// to throw a "changed after checked" error when updating the preview state.
|
|
260
|
+
this.changeDetectorRef.detectChanges();
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Called when the user has ended a drag. If the drag/drop was successful,
|
|
264
|
+
* computes and emits the new range selection.
|
|
265
|
+
*/
|
|
266
|
+
_dragEnded(event) {
|
|
267
|
+
if (!this.activeDrag) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (event.value) {
|
|
271
|
+
// Propagate drag effect
|
|
272
|
+
const dragDropResult = this.calendarRangeStrategy?.createDrag?.(this.activeDrag.value, this.selected, event.value);
|
|
273
|
+
this.dragEnded.emit({ value: dragDropResult ?? undefined, event: event.event });
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
this.dragEnded.emit({ value: undefined, event: event.event });
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
updateActiveDate(value, isFromEffect = false) {
|
|
280
|
+
this.oldActiveDate = this.oldActiveDate || value;
|
|
281
|
+
const validDate = this.dateService.getValidOrUndefined(this.dateService.deserialize(value)) || new Date();
|
|
282
|
+
if (!isFromEffect) {
|
|
283
|
+
this.calendarSignalsService.activeDate = this.dateService.clamp(validDate, this.minDate, this.maxDate);
|
|
284
|
+
}
|
|
285
|
+
if (!this.isSameMonthAndYearAsActiveDate(this.oldActiveDate, this.calendarSignalsService.activeDate())) {
|
|
286
|
+
this.init();
|
|
287
|
+
}
|
|
288
|
+
this.oldActiveDate = value;
|
|
289
|
+
this.activeDateChange.emit(this.calendarSignalsService.activeDate());
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Takes a day of the month and returns a new date in the same month and year as the currently
|
|
293
|
+
* active date. The returned date will have the same day of the month as the argument date.
|
|
294
|
+
*/
|
|
295
|
+
getDateFromDayOfMonth(dayOfMonth) {
|
|
296
|
+
return this.dateService.create(this.activeDate.getFullYear(), this.activeDate.getMonth(), dayOfMonth);
|
|
297
|
+
}
|
|
298
|
+
/** Initializes the weekdays. */
|
|
299
|
+
initWeekdays() {
|
|
300
|
+
const firstDayOfWeek = this.firstDayOfWeek;
|
|
301
|
+
const narrowWeekdays = this.dateService.getDayOfWeekNames('narrow');
|
|
302
|
+
const longWeekdays = this.dateService.getDayOfWeekNames('long');
|
|
303
|
+
// Rotate the labels for days of the week based on the configured first day of the week.
|
|
304
|
+
const weekdays = longWeekdays.map((long, i) => ({ long, narrow: narrowWeekdays[i], id: uniqueIdCounter++ }));
|
|
305
|
+
this.weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));
|
|
306
|
+
}
|
|
307
|
+
/** Creates MatCalendarCells for the dates in this month. */
|
|
308
|
+
createWeekCells() {
|
|
309
|
+
const daysInMonth = this.dateService.getNumDaysInMonth(this.activeDate);
|
|
310
|
+
const dateNames = this.dateService.getDateNames();
|
|
311
|
+
this.weeks = [[]];
|
|
312
|
+
for (let i = 0, cell = this.firstWeekOffset; i < daysInMonth; i++, cell++) {
|
|
313
|
+
if (cell === daysPerWeek) {
|
|
314
|
+
this.weeks.push([]);
|
|
315
|
+
cell = 0;
|
|
316
|
+
}
|
|
317
|
+
const date = this.dateService.create(this.activeDate.getFullYear(), this.activeDate.getMonth(), i + 1);
|
|
318
|
+
const isEnabled = this.shouldEnableDate(date);
|
|
319
|
+
const ariaLabel = this.dateService.format(date, { year: 'numeric', month: 'long', day: 'numeric' });
|
|
320
|
+
const cellClasses = this.dateClass ? this.dateClass(date, 'month') : undefined;
|
|
321
|
+
this.weeks[this.weeks.length - 1].push(new CalendarCellModel(i + 1, dateNames[i], ariaLabel, isEnabled, cellClasses, this.getCellCompareValue(date), date));
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/** Date filter for the month */
|
|
325
|
+
shouldEnableDate(date) {
|
|
326
|
+
return !!date &&
|
|
327
|
+
(!this.minDate || this.dateService.compare(date, this.minDate) >= 0) &&
|
|
328
|
+
(!this.maxDate || this.dateService.compare(date, this.maxDate) <= 0) &&
|
|
329
|
+
(!this.dateFilter || this.dateFilter(date));
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Gets the date in this month that the given Date falls on.
|
|
333
|
+
* Returns null if the given Date is in another month.
|
|
334
|
+
*/
|
|
335
|
+
getDateInCurrentMonth(date) {
|
|
336
|
+
return !!date && this.isSameMonthAndYearAsActiveDate(date, this.calendarSignalsService.activeDate())
|
|
337
|
+
? date.getDate()
|
|
338
|
+
: undefined;
|
|
339
|
+
}
|
|
340
|
+
/** Checks whether the 2 dates are non-null and fall within the same month of the same year. */
|
|
341
|
+
isSameMonthAndYearAsActiveDate(d1, d2) {
|
|
342
|
+
return (!!d1 && !!d2 && d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear());
|
|
343
|
+
}
|
|
344
|
+
/** Gets the value that will be used to one cell to another. */
|
|
345
|
+
getCellCompareValue(date) {
|
|
346
|
+
if (!!date) {
|
|
347
|
+
// We use the time since the Unix epoch to compare dates in this view, rather than the
|
|
348
|
+
// cell values, because we need to support ranges that span across multiple months/years.
|
|
349
|
+
const year = date.getFullYear();
|
|
350
|
+
const month = date.getMonth();
|
|
351
|
+
const day = date.getDate();
|
|
352
|
+
return new Date(year, month, day).getTime();
|
|
353
|
+
}
|
|
354
|
+
return undefined;
|
|
355
|
+
}
|
|
356
|
+
/** Sets the current range based on a model value. */
|
|
357
|
+
setRanges(selectedValue) {
|
|
358
|
+
if (selectedValue instanceof DateRangeModel) {
|
|
359
|
+
this.rangeStart = this.getCellCompareValue(selectedValue.start);
|
|
360
|
+
this.rangeEnd = this.getCellCompareValue(selectedValue.end);
|
|
361
|
+
this.isRange = true;
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
this.rangeStart = this.rangeEnd = this.getCellCompareValue(selectedValue);
|
|
365
|
+
}
|
|
366
|
+
this.comparisonRangeStart = this.getCellCompareValue(this.comparisonStart);
|
|
367
|
+
this.comparisonRangeEnd = this.getCellCompareValue(this.comparisonEnd);
|
|
368
|
+
}
|
|
369
|
+
/** Gets whether a date can be selected in the month view. */
|
|
370
|
+
canSelect(date) {
|
|
371
|
+
return !this.dateFilter || this.dateFilter(date);
|
|
372
|
+
}
|
|
373
|
+
/** Clears out preview state. */
|
|
374
|
+
clearPreview() {
|
|
375
|
+
this.previewStart = this.previewEnd = undefined;
|
|
376
|
+
}
|
|
377
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CalendarMonthViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
378
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: CalendarMonthViewComponent, selector: "upd-calendar-month-view", inputs: { activeDate: "activeDate", selected: "selected", minDate: "minDate", maxDate: "maxDate", dateFilter: "dateFilter", dateClass: "dateClass", comparisonStart: "comparisonStart", comparisonEnd: "comparisonEnd", startDateAccessibleName: "startDateAccessibleName", endDateAccessibleName: "endDateAccessibleName", firstDayOfWeek: "firstDayOfWeek", activeDrag: "activeDrag", isRange: "isRange" }, outputs: { selectedChange: "selectedChange", userSelection: "userSelection", dragStarted: "dragStarted", dragEnded: "dragEnded", activeDateChange: "activeDateChange" }, viewQueries: [{ propertyName: "_matCalendarBody", first: true, predicate: CalendarBodyComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<upd-calendar-header></upd-calendar-header>\n<div class=\"container mt-2\">\n <div class=\"row seven-cols\">\n @for (day of weekdays; track day.id) {\n <div class=\"col-1 p-1 d-flex justify-content-center align-items-center\">\n <span class=\"visually-hidden\">{{ day.long }}</span>\n <span aria-hidden=\"true\">{{ day.narrow }}</span>\n </div>\n }\n </div>\n</div>\n<upd-calendar-body [label]=\"monthLabel\" [rows]=\"weeks\" [todayValue]=\"todayDate!\" [startValue]=\"rangeStart!\"\n [endValue]=\"rangeEnd!\" [comparisonStart]=\"comparisonRangeStart\" [comparisonEnd]=\"comparisonRangeEnd\"\n [previewStart]=\"previewStart\" [previewEnd]=\"previewEnd\" [isRange]=\"isRange\" [labelMinRequiredCells]=\"3\"\n [activeCell]=\"activeDate.getDate() - 1\" [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\" (selectedValueChange)=\"dateSelected($event)\"\n (previewChange)=\"previewChanged($event)\" (dragStarted)=\"dragStarted.emit($event)\" (dragEnded)=\"_dragEnded($event)\"\n (keyup)=\"handleCalendarBodyKeyup($event)\" (keydown)=\"handleCalendarBodyKeydown($event)\">\n</upd-calendar-body>\n", styles: ["@media (min-width: 768px){.seven-cols .col-1{width:100%}.seven-cols .col-6{width:85.7142857143%}}@media (min-width: 992px){.seven-cols .col-1{width:14.2857142857%}.seven-cols .col-2{width:28.5714285714%}.seven-cols .col-3{width:42.8571428571%}.seven-cols .col-4{width:57.1428571429%}.seven-cols .col-5{width:71.4285714286%}.seven-cols .col-6{width:85.7142857143%}.seven-cols .col-7{width:100%}}@media (min-width: 1200px){.seven-cols .col-1{width:14.2857142857%}.seven-cols .col-2{width:28.5714285714%}.seven-cols .col-3{width:42.8571428571%}.seven-cols .col-4{width:57.1428571429%}.seven-cols .col-5{width:71.4285714286%}.seven-cols .col-6{width:85.7142857143%}.seven-cols .col-7{width:100%}}\n"], dependencies: [{ kind: "component", type: i1.CalendarHeaderComponent, selector: "upd-calendar-header" }, { kind: "component", type: i2.CalendarBodyComponent, selector: "upd-calendar-body", inputs: ["label", "rows", "todayValue", "startValue", "endValue", "labelMinRequiredCells", "numCols", "activeCell", "isRange", "cellAspectRatio", "comparisonStart", "comparisonEnd", "previewStart", "previewEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedValueChange", "previewChange", "dragStarted", "dragEnded"] }] }); }
|
|
379
|
+
}
|
|
380
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CalendarMonthViewComponent, decorators: [{
|
|
381
|
+
type: Component,
|
|
382
|
+
args: [{ selector: 'upd-calendar-month-view', template: "<upd-calendar-header></upd-calendar-header>\n<div class=\"container mt-2\">\n <div class=\"row seven-cols\">\n @for (day of weekdays; track day.id) {\n <div class=\"col-1 p-1 d-flex justify-content-center align-items-center\">\n <span class=\"visually-hidden\">{{ day.long }}</span>\n <span aria-hidden=\"true\">{{ day.narrow }}</span>\n </div>\n }\n </div>\n</div>\n<upd-calendar-body [label]=\"monthLabel\" [rows]=\"weeks\" [todayValue]=\"todayDate!\" [startValue]=\"rangeStart!\"\n [endValue]=\"rangeEnd!\" [comparisonStart]=\"comparisonRangeStart\" [comparisonEnd]=\"comparisonRangeEnd\"\n [previewStart]=\"previewStart\" [previewEnd]=\"previewEnd\" [isRange]=\"isRange\" [labelMinRequiredCells]=\"3\"\n [activeCell]=\"activeDate.getDate() - 1\" [startDateAccessibleName]=\"startDateAccessibleName\"\n [endDateAccessibleName]=\"endDateAccessibleName\" (selectedValueChange)=\"dateSelected($event)\"\n (previewChange)=\"previewChanged($event)\" (dragStarted)=\"dragStarted.emit($event)\" (dragEnded)=\"_dragEnded($event)\"\n (keyup)=\"handleCalendarBodyKeyup($event)\" (keydown)=\"handleCalendarBodyKeydown($event)\">\n</upd-calendar-body>\n", styles: ["@media (min-width: 768px){.seven-cols .col-1{width:100%}.seven-cols .col-6{width:85.7142857143%}}@media (min-width: 992px){.seven-cols .col-1{width:14.2857142857%}.seven-cols .col-2{width:28.5714285714%}.seven-cols .col-3{width:42.8571428571%}.seven-cols .col-4{width:57.1428571429%}.seven-cols .col-5{width:71.4285714286%}.seven-cols .col-6{width:85.7142857143%}.seven-cols .col-7{width:100%}}@media (min-width: 1200px){.seven-cols .col-1{width:14.2857142857%}.seven-cols .col-2{width:28.5714285714%}.seven-cols .col-3{width:42.8571428571%}.seven-cols .col-4{width:57.1428571429%}.seven-cols .col-5{width:71.4285714286%}.seven-cols .col-6{width:85.7142857143%}.seven-cols .col-7{width:100%}}\n"] }]
|
|
383
|
+
}], ctorParameters: () => [], propDecorators: { _matCalendarBody: [{
|
|
384
|
+
type: ViewChild,
|
|
385
|
+
args: [CalendarBodyComponent]
|
|
386
|
+
}], activeDate: [{
|
|
387
|
+
type: Input
|
|
388
|
+
}], selected: [{
|
|
389
|
+
type: Input
|
|
390
|
+
}], minDate: [{
|
|
391
|
+
type: Input
|
|
392
|
+
}], maxDate: [{
|
|
393
|
+
type: Input
|
|
394
|
+
}], dateFilter: [{
|
|
395
|
+
type: Input
|
|
396
|
+
}], dateClass: [{
|
|
397
|
+
type: Input
|
|
398
|
+
}], comparisonStart: [{
|
|
399
|
+
type: Input
|
|
400
|
+
}], comparisonEnd: [{
|
|
401
|
+
type: Input
|
|
402
|
+
}], startDateAccessibleName: [{
|
|
403
|
+
type: Input
|
|
404
|
+
}], endDateAccessibleName: [{
|
|
405
|
+
type: Input
|
|
406
|
+
}], firstDayOfWeek: [{
|
|
407
|
+
type: Input
|
|
408
|
+
}], activeDrag: [{
|
|
409
|
+
type: Input
|
|
410
|
+
}], isRange: [{
|
|
411
|
+
type: Input
|
|
412
|
+
}], selectedChange: [{
|
|
413
|
+
type: Output
|
|
414
|
+
}], userSelection: [{
|
|
415
|
+
type: Output
|
|
416
|
+
}], dragStarted: [{
|
|
417
|
+
type: Output
|
|
418
|
+
}], dragEnded: [{
|
|
419
|
+
type: Output
|
|
420
|
+
}], activeDateChange: [{
|
|
421
|
+
type: Output
|
|
422
|
+
}] } });
|
|
423
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY2FsZW5kYXIvc3JjL2NvbXBvbmVudHMvY2FsZW5kYXItbW9udGgtdmlldy9jYWxlbmRhci1tb250aC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvY29tcG9uZW50cy9jYWxlbmRhci1tb250aC12aWV3L2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFFakYs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M0IsTUFBTTtnQkFHWSxnQkFBZ0I7c0JBQWxDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcHRpb25hbFR5cGUgfSBmcm9tICdAdXBkZXZzL3Nkay90eXBlcyc7XG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL2NvcmUnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcbmltcG9ydCB7IHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDYWxlbmRhclVzZXJFdmVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhbGVuZGFyLXVzZXItZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgQ2FsZW5kYXJCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi4vY2FsZW5kYXItYm9keS9jYWxlbmRhci1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRlLXJhbmdlLm1vZGVsJztcbmltcG9ydCB7IENhbGVuZGFyQ2VsbE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhbGVuZGFyLWNlbGwubW9kZWwnO1xuaW1wb3J0IHsgQ2FsZW5kYXJDZWxsQ2xhc3NGdW5jdGlvblR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9jYWxlbmRhci1jZWxsLWNsYXNzLWZ1bmN0aW9uLnR5cGUnO1xuaW1wb3J0IHsgS2V5Ym9hcmRUb29scyB9IGZyb20gJy4uLy4uL3Rvb2xzL2tleWJvYXJkLXRvb2xzJztcbmltcG9ydCB7IENhbGVuZGFyUmFuZ2VTdHJhdGVneVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYWxlbmRhci1yYW5nZS1zdHJhdGVneS5zZXJ2aWNlJztcbmltcG9ydCB7IENhbGVuZGFyU2lnbmFsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYWxlbmRhci1zaWduYWxzLnNlcnZpY2UnO1xuXG5jb25zdCBkYXlzUGVyV2VlayA9IDc7XG5cbmxldCB1bmlxdWVJZENvdW50ZXIgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1jYWxlbmRhci1tb250aC12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItbW9udGgtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2NhbGVuZGFyLW1vbnRoLXZpZXcuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyTW9udGhWaWV3Q29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGJvZHkgb2YgY2FsZW5kYXIgdGFibGVcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKENhbGVuZGFyQm9keUNvbXBvbmVudCkgX21hdENhbGVuZGFyQm9keSE6IENhbGVuZGFyQm9keUNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRlIHRvIGRpc3BsYXkgaW4gdGhpcyBtb250aCB2aWV3IChldmVyeXRoaW5nIG90aGVyIHRoYW4gdGhlIG1vbnRoIGFuZCB5ZWFyIGlzIGlnbm9yZWQpLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGFjdGl2ZURhdGUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyU2lnbmFsc1NlcnZpY2UuYWN0aXZlRGF0ZSgpO1xuICAgIH1cbiAgICBzZXQgYWN0aXZlRGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZURhdGUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgc2VsZWN0ZWQoKTogRGF0ZVJhbmdlTW9kZWwgfCBPcHRpb25hbFR5cGU8RGF0ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxlbmRhclNpZ25hbHNTZXJ2aWNlLnNlbGVjdGVkRGF0ZSgpO1xuICAgIH1cbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IERhdGVSYW5nZU1vZGVsIHwgT3B0aW9uYWxUeXBlPERhdGU+KSB7XG4gICAgICAgIGxldCBjdXJyVmFsdWU6IERhdGVSYW5nZU1vZGVsIHwgT3B0aW9uYWxUeXBlPERhdGU+O1xuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGVSYW5nZU1vZGVsKSB7XG4gICAgICAgICAgICBjdXJyVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHRoaXMuZGF0ZVNlcnZpY2UuZ2V0VmFsaWRPclVuZGVmaW5lZCh0aGlzLmRhdGVTZXJ2aWNlLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGVuZGFyU2lnbmFsc1NlcnZpY2Uuc2VsZWN0ZWREYXRlID0gY3VyclZhbHVlO1xuXG4gICAgICAgIHRoaXMuc2V0UmFuZ2VzKGN1cnJWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBtaW5EYXRlKCk6IE9wdGlvbmFsVHlwZTxEYXRlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICAgIH1cbiAgICBzZXQgbWluRGF0ZSh2YWx1ZTogT3B0aW9uYWxUeXBlPERhdGU+KSB7XG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLmdldFZhbGlkT3JVbmRlZmluZWQodGhpcy5kYXRlU2VydmljZS5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgbWF4RGF0ZSgpOiBPcHRpb25hbFR5cGU8RGF0ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICB9XG4gICAgc2V0IG1heERhdGUodmFsdWU6IE9wdGlvbmFsVHlwZTxEYXRlPikge1xuICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGhpcy5kYXRlU2VydmljZS5nZXRWYWxpZE9yVW5kZWZpbmVkKHRoaXMuZGF0ZVNlcnZpY2UuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgd2hpY2ggZGF0ZXMgYXJlIHNlbGVjdGFibGUuICovXG4gICAgQElucHV0KCkgZGF0ZUZpbHRlcj86IChkYXRlOiBEYXRlKSA9PiBib29sZWFuO1xuXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWRkIGN1c3RvbSBDU1MgY2xhc3NlcyB0byBkYXRlcy4gKi9cbiAgICBASW5wdXQoKSBkYXRlQ2xhc3M/OiBDYWxlbmRhckNlbGxDbGFzc0Z1bmN0aW9uVHlwZTtcblxuICAgIC8qKiBTdGFydCBvZiB0aGUgY29tcGFyaXNvbiByYW5nZS4gKi9cbiAgICBASW5wdXQoKSBjb21wYXJpc29uU3RhcnQ/OiBEYXRlO1xuXG4gICAgLyoqIEVuZCBvZiB0aGUgY29tcGFyaXNvbiByYW5nZS4gKi9cbiAgICBASW5wdXQoKSBjb21wYXJpc29uRW5kPzogRGF0ZTtcblxuICAgIC8qKiBBUklBIEFjY2Vzc2libGUgbmFtZSBvZiB0aGUgYDxpbnB1dCBtYXRTdGFydERhdGUvPmAgKi9cbiAgICBASW5wdXQoKSBzdGFydERhdGVBY2Nlc3NpYmxlTmFtZT86IHN0cmluZztcblxuICAgIC8qKiBBUklBIEFjY2Vzc2libGUgbmFtZSBvZiB0aGUgYDxpbnB1dCBtYXRFbmREYXRlLz5gICovXG4gICAgQElucHV0KCkgZW5kRGF0ZUFjY2Vzc2libGVOYW1lPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRmlyc3QgZGF5IG9mIHdlZWsuXG4gICAgICogWmVyby1iYXNlZCBzdGFydGluZyBmcm9tIFN1bmRheS5cbiAgICAgKiBEZWZhdWx0OiAwIC0gU3VuZGF5LlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpcnN0RGF5T2ZXZWVrID0gMDtcblxuICAgIC8qKiBPcmlnaW4gb2YgYWN0aXZlIGRyYWcsIG9yIG51bGwgd2hlbiBkcmFnZ2luZyBpcyBub3QgYWN0aXZlLiAqL1xuICAgIEBJbnB1dCgpIGFjdGl2ZURyYWc/OiBDYWxlbmRhclVzZXJFdmVudE1vZGVsPERhdGU+O1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHVzZXIgaXMgY3VycmVudGx5IHNlbGVjdGluZyBhIHJhbmdlIG9mIGRhdGVzLiAqL1xuICAgIEBJbnB1dCgpIGlzUmFuZ2UgPSBmYWxzZTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGEgbmV3IGRhdGUgaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxPcHRpb25hbFR5cGU8RGF0ZT4+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBzZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgdXNlclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJVc2VyRXZlbnRNb2RlbDxPcHRpb25hbFR5cGU8RGF0ZT4+PigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIHVzZXIgaW5pdGlhdGVzIGEgZGF0ZSByYW5nZSBkcmFnIHZpYSBtb3VzZSBvciB0b3VjaC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgZHJhZ1N0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENhbGVuZGFyVXNlckV2ZW50TW9kZWw8RGF0ZT4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyBvciBjYW5jZWxzIGEgZGF0ZSByYW5nZSBkcmFnLlxuICAgICAqIEVtaXRzIG51bGwgd2hlbiB0aGUgZHJhZyB3YXMgY2FuY2VsZWQgb3IgdGhlIG5ld2x5IHNlbGVjdGVkIGRhdGUgcmFuZ2UgaWYgY29tcGxldGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBkcmFnRW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENhbGVuZGFyVXNlckV2ZW50TW9kZWw8T3B0aW9uYWxUeXBlPERhdGVSYW5nZU1vZGVsPj4+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBhY3RpdmF0ZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2ZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgICAvKiogVGhlIGxhYmVsIGZvciB0aGlzIG1vbnRoIChlLmcuIFwiSmFudWFyeSAyMDE3XCIpLiAqL1xuICAgIG1vbnRoTGFiZWwhOiBzdHJpbmc7XG5cbiAgICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBtb250aC4gKi9cbiAgICB3ZWVrczogQ2FsZW5kYXJDZWxsTW9kZWxbXVtdID0gW107XG5cbiAgICAvKiogVGhlIG51bWJlciBvZiBibGFuayBjZWxscyBpbiB0aGUgZmlyc3Qgcm93IGJlZm9yZSB0aGUgMXN0IG9mIHRoZSBtb250aC4gKi9cbiAgICBmaXJzdFdlZWtPZmZzZXQgPSAwO1xuXG4gICAgLyoqIFN0YXJ0IHZhbHVlIG9mIHRoZSBjdXJyZW50bHktc2hvd24gZGF0ZSByYW5nZS4gKi9cbiAgICByYW5nZVN0YXJ0PzogbnVtYmVyO1xuXG4gICAgLyoqIEVuZCB2YWx1ZSBvZiB0aGUgY3VycmVudGx5LXNob3duIGRhdGUgcmFuZ2UuICovXG4gICAgcmFuZ2VFbmQ/OiBudW1iZXI7XG5cbiAgICAvKiogU3RhcnQgdmFsdWUgb2YgdGhlIGN1cnJlbnRseS1zaG93biBjb21wYXJpc29uIGRhdGUgcmFuZ2UuICovXG4gICAgY29tcGFyaXNvblJhbmdlU3RhcnQ/OiBudW1iZXI7XG5cbiAgICAvKiogRW5kIHZhbHVlIG9mIHRoZSBjdXJyZW50bHktc2hvd24gY29tcGFyaXNvbiBkYXRlIHJhbmdlLiAqL1xuICAgIGNvbXBhcmlzb25SYW5nZUVuZD86IG51bWJlcjtcblxuICAgIC8qKiBTdGFydCBvZiB0aGUgcHJldmlldyByYW5nZS4gKi9cbiAgICBwcmV2aWV3U3RhcnQ/OiBudW1iZXI7XG5cbiAgICAvKiogRW5kIG9mIHRoZSBwcmV2aWV3IHJhbmdlLiAqL1xuICAgIHByZXZpZXdFbmQ/OiBudW1iZXI7XG5cbiAgICAvKiogVGhlIGRhdGUgb2YgdGhlIG1vbnRoIHRoYXQgdG9kYXkgZmFsbHMgb24uIE51bGwgaWYgdG9kYXkgaXMgaW4gYW5vdGhlciBtb250aC4gKi9cbiAgICB0b2RheURhdGU/OiBudW1iZXI7XG5cbiAgICAvKiogVGhlIG5hbWVzIG9mIHRoZSB3ZWVrZGF5cy4gKi9cbiAgICB3ZWVrZGF5czogeyBsb25nOiBzdHJpbmc7IG5hcnJvdzogc3RyaW5nOyBpZDogbnVtYmVyIH1bXSA9IFtdO1xuXG4gICAgLyoqIEZsYWcgdXNlZCB0byBmaWx0ZXIgb3V0IHNwYWNlL2VudGVyIGtleXVwIGV2ZW50cyB0aGF0IG9yaWdpbmF0ZWQgb3V0c2lkZSBvZiB0aGUgdmlldy4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3Rpb25LZXlQcmVzc2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbWluRGF0ZT86IERhdGU7XG4gICAgcHJpdmF0ZSBfbWF4RGF0ZT86IERhdGU7XG4gICAgcHJpdmF0ZSBvbGRBY3RpdmVEYXRlPzogRGF0ZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsb2NvU2VydmljZSA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVTZXJ2aWNlID0gaW5qZWN0KERhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhbGVuZGFyU2lnbmFsc1NlcnZpY2UgPSBpbmplY3QoQ2FsZW5kYXJTaWduYWxzU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWxlbmRhclJhbmdlU3RyYXRlZ3kgPSBpbmplY3QoQ2FsZW5kYXJSYW5nZVN0cmF0ZWd5U2VydmljZSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHRoaXMudXBkYXRlQWN0aXZlRGF0ZSh0aGlzLmNhbGVuZGFyU2lnbmFsc1NlcnZpY2UuYWN0aXZlRGF0ZSgpLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYW5nU3ViID0gdGhpcy50cmFuc2xvY29TZXJ2aWNlLmxhbmdDaGFuZ2VzJFxuICAgICAgICAgICAgLnBpcGUoc3RhcnRXaXRoKHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuaW5pdCgpKTtcbiAgICAgICAgdGhpcy5hZGRTdWJzY3JpcHRpb25zKGxhbmdTdWIpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tcGFyaXNvbkNoYW5nZSA9IGNoYW5nZXNbJ2NvbXBhcmlzb25TdGFydCddIHx8IGNoYW5nZXNbJ2NvbXBhcmlzb25FbmQnXTtcblxuICAgICAgICBpZiAoY29tcGFyaXNvbkNoYW5nZSAmJiAhY29tcGFyaXNvbkNoYW5nZS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZXModGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlc1snYWN0aXZlRHJhZyddICYmICF0aGlzLmFjdGl2ZURyYWcpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJQcmV2aWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyB3aGVuIGEgbmV3IGRhdGUgaXMgc2VsZWN0ZWQuICovXG4gICAgZGF0ZVNlbGVjdGVkKGV2ZW50OiBDYWxlbmRhclVzZXJFdmVudE1vZGVsPG51bWJlcj4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLmdldERhdGVGcm9tRGF5T2ZNb250aChkYXRlKTtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuY2FsZW5kYXJTaWduYWxzU2VydmljZS5zZWxlY3RlZERhdGUoKTtcbiAgICAgICAgbGV0IHJhbmdlU3RhcnREYXRlOiBPcHRpb25hbFR5cGU8bnVtYmVyPjtcbiAgICAgICAgbGV0IHJhbmdlRW5kRGF0ZTogT3B0aW9uYWxUeXBlPG51bWJlcj47XG5cbiAgICAgICAgaWYgKGN1cnJTZWxlY3Rpb24gaW5zdGFuY2VvZiBEYXRlUmFuZ2VNb2RlbCkge1xuICAgICAgICAgICAgcmFuZ2VTdGFydERhdGUgPSB0aGlzLmdldERhdGVJbkN1cnJlbnRNb250aChjdXJyU2VsZWN0aW9uLnN0YXJ0KTtcbiAgICAgICAgICAgIHJhbmdlRW5kRGF0ZSA9IHRoaXMuZ2V0RGF0ZUluQ3VycmVudE1vbnRoKGN1cnJTZWxlY3Rpb24uZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnREYXRlID0gcmFuZ2VFbmREYXRlID0gdGhpcy5nZXREYXRlSW5DdXJyZW50TW9udGgoY3VyclNlbGVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmFuZ2VTdGFydERhdGUgIT09IGRhdGUgfHwgcmFuZ2VFbmREYXRlICE9PSBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2lnbmFsc1NlcnZpY2Uuc2VsZWN0ZWREYXRlID0gc2VsZWN0ZWREYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51c2VyU2VsZWN0aW9uLmVtaXQoeyB2YWx1ZTogc2VsZWN0ZWREYXRlLCBldmVudDogZXZlbnQuZXZlbnQgfSk7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2aWV3KCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXMga2V5ZG93biBldmVudHMgb24gdGhlIGNhbGVuZGFyIGJvZHkgd2hlbiBjYWxlbmRhciBpcyBpbiBtb250aCB2aWV3LiAqL1xuICAgIGhhbmRsZUNhbGVuZGFyQm9keUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETyhtbWFsZXJiYSk6IFdlIGN1cnJlbnRseSBhbGxvdyBrZXlib2FyZCBuYXZpZ2F0aW9uIHRvIGRpc2FibGVkIGRhdGVzLCBidXQganVzdCBwcmV2ZW50XG4gICAgICAgIC8vIGRpc2FibGVkIG9uZXMgZnJvbSBiZWluZyBzZWxlY3RlZC4gVGhpcyBtYXkgbm90IGJlIGlkZWFsLCB3ZSBzaG91bGQgbG9vayBpbnRvIHdoZXRoZXJcbiAgICAgICAgLy8gbmF2aWdhdGlvbiBzaG91bGQgc2tpcCBvdmVyIGRpc2FibGVkIGRhdGVzLCBhbmQgaWYgc28sIGhvdyB0byBpbXBsZW1lbnQgdGhhdCBlZmZpY2llbnRseS5cblxuICAgICAgICBjb25zdCBvbGRBY3RpdmVEYXRlID0gdGhpcy5hY3RpdmVEYXRlO1xuICAgICAgICBsZXQgdGVtcEFjdGl2ZURhdGU6IE9wdGlvbmFsVHlwZTxEYXRlPjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnTEVGVF9BUlJPVyc6XG4gICAgICAgICAgICAgICAgdGVtcEFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLmFkZERheXModGhpcy5hY3RpdmVEYXRlLCAtMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdSSUdIVF9BUlJPVyc6XG4gICAgICAgICAgICAgICAgdGVtcEFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLmFkZERheXModGhpcy5hY3RpdmVEYXRlLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1VQX0FSUk9XJzpcbiAgICAgICAgICAgICAgICB0ZW1wQWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UuYWRkRGF5cyh0aGlzLmFjdGl2ZURhdGUsIC03KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0RPV05fQVJST1cnOlxuICAgICAgICAgICAgICAgIHRlbXBBY3RpdmVEYXRlID0gdGhpcy5kYXRlU2VydmljZS5hZGREYXlzKHRoaXMuYWN0aXZlRGF0ZSwgNyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdIT01FJzpcbiAgICAgICAgICAgICAgICB0ZW1wQWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UuYWRkRGF5cyh0aGlzLmFjdGl2ZURhdGUsIDEgLSB0aGlzLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VORCc6XG4gICAgICAgICAgICAgICAgdGVtcEFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLmFkZERheXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlU2VydmljZS5nZXROdW1EYXlzSW5Nb250aCh0aGlzLmFjdGl2ZURhdGUpIC1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQQUdFX1VQJzpcbiAgICAgICAgICAgICAgICB0ZW1wQWN0aXZlRGF0ZSA9IGV2ZW50LmFsdEtleVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGF0ZVNlcnZpY2UuYWRkWWVhcnModGhpcy5hY3RpdmVEYXRlLCAtMSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRhdGVTZXJ2aWNlLmFkZE1vbnRocyh0aGlzLmFjdGl2ZURhdGUsIC0xKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BBR0VfRE9XTic6XG4gICAgICAgICAgICAgICAgdGVtcEFjdGl2ZURhdGUgPSBldmVudC5hbHRLZXlcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRhdGVTZXJ2aWNlLmFkZFllYXJzKHRoaXMuYWN0aXZlRGF0ZSwgMSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRhdGVTZXJ2aWNlLmFkZE1vbnRocyh0aGlzLmFjdGl2ZURhdGUsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRU5URVInOlxuICAgICAgICAgICAgY2FzZSAnU1BBQ0UnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbktleVByZXNzZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuU2VsZWN0KHRoaXMuYWN0aXZlRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJldmVudCB1bmV4cGVjdGVkIGRlZmF1bHQgYWN0aW9ucyBzdWNoIGFzIGZvcm0gc3VibWlzc2lvbi5cbiAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgcHJldmVudCB0aGUgZGVmYXVsdCBhY3Rpb24gaGVyZSB3aGlsZSB0aGUgc2VsZWN0aW9uIGhhcHBlbnMgaW5cbiAgICAgICAgICAgICAgICAgICAgLy8gYGtleXVwYCBiZWxvdy4gV2UgY2FuJ3QgZG8gdGhlIHNlbGVjdGlvbiBoZXJlLCBiZWNhdXNlIGl0IGNhbiBjYXVzZSB0aGUgY2FsZW5kYXIgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gcmVvcGVuIGlmIGZvY3VzIGlzIHJlc3RvcmVkIGltbWVkaWF0ZWx5LiBXZSBhbHNvIGNhbid0IGNhbGwgYHByZXZlbnREZWZhdWx0YCBvbiBga2V5dXBgXG4gICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQncyB0b28gbGF0ZSAoc2VlICMyMzMwNSkuXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgJ0VTQ0FQRSc6XG4gICAgICAgICAgICAgICAgLy8gQWJvcnQgdGhlIGN1cnJlbnQgcmFuZ2Ugc2VsZWN0aW9uIGlmIHRoZSB1c2VyIHByZXNzZXMgZXNjYXBlIG1pZC1zZWxlY3Rpb24uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0VuZCAhPT0gdW5kZWZpbmVkICYmICFLZXlib2FyZFRvb2xzLmhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyUHJldmlldygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGRyYWcgaXMgaW4gcHJvZ3Jlc3MsIGNhbmNlbCB0aGUgZHJhZyB3aXRob3V0IGNoYW5naW5nIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJhZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnRW5kZWQuZW1pdCh7IHZhbHVlOiB1bmRlZmluZWQsIGV2ZW50IH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZWxlY3Rpb24uZW1pdCh7IHZhbHVlOiB1bmRlZmluZWQsIGV2ZW50IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBQcmV2ZW50cyB0aGUgb3ZlcmxheSBmcm9tIGNsb3NpbmcuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJldmVudCBkZWZhdWx0IG9yIGZvY3VzIGFjdGl2ZSBjZWxsIG9uIGtleXMgdGhhdCB3ZSBkb24ndCBleHBsaWNpdGx5IGhhbmRsZS5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRlU2VydmljZS5jb21wYXJlKG9sZEFjdGl2ZURhdGUsIHRoaXMuYWN0aXZlRGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTaWduYWxzU2VydmljZS5hY3RpdmVEYXRlID0gdGVtcEFjdGl2ZURhdGU7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQWN0aXZlQ2VsbEFmdGVyVmlld0NoZWNrZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXZlbnQgdW5leHBlY3RlZCBkZWZhdWx0IGFjdGlvbnMgc3VjaCBhcyBmb3JtIHN1Ym1pc3Npb24uXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXMga2V5dXAgZXZlbnRzIG9uIHRoZSBjYWxlbmRhciBib2R5IHdoZW4gY2FsZW5kYXIgaXMgaW4gbW9udGggdmlldy4gKi9cbiAgICBoYW5kbGVDYWxlbmRhckJvZHlLZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnU1BBQ0UnIHx8IGV2ZW50LmtleSA9PT0gJ0VOVEVSJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGlvbktleVByZXNzZWQgJiYgdGhpcy5jYW5TZWxlY3QodGhpcy5hY3RpdmVEYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVNlbGVjdGVkKHsgdmFsdWU6IHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCksIGV2ZW50IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25LZXlQcmVzc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSW5pdGlhbGl6ZXMgdGhpcyBtb250aCB2aWV3LiAqL1xuICAgIGluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0UmFuZ2VzKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLnRvZGF5RGF0ZSA9IHRoaXMuZ2V0Q2VsbENvbXBhcmVWYWx1ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgdGhpcy5tb250aExhYmVsID0gdGhpcy5kYXRlU2VydmljZS5nZXRNb250aE5hbWVzKCdzaG9ydCcpW3RoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpXS50b0xvY2FsZVVwcGVyQ2FzZSgpO1xuICAgICAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLmRhdGVTZXJ2aWNlLmNyZWF0ZShcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmlyc3RXZWVrT2Zmc2V0ID0gKGRheXNQZXJXZWVrICsgZmlyc3RPZk1vbnRoLmdldERheSgpIC0gdGhpcy5maXJzdERheU9mV2VlaykgJSBkYXlzUGVyV2VlaztcblxuICAgICAgICB0aGlzLmluaXRXZWVrZGF5cygpO1xuICAgICAgICB0aGlzLmNyZWF0ZVdlZWtDZWxscygpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBGb2N1c2VzIHRoZSBhY3RpdmUgY2VsbCBhZnRlciB0aGUgbWljcm90YXNrIHF1ZXVlIGlzIGVtcHR5LiAqL1xuICAgIGZvY3VzQWN0aXZlQ2VsbChtb3ZlUHJldmlldz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWF0Q2FsZW5kYXJCb2R5LmZvY3VzQWN0aXZlQ2VsbChtb3ZlUHJldmlldyk7XG4gICAgfVxuXG4gICAgLyoqIEZvY3VzZXMgdGhlIGFjdGl2ZSBjZWxsIGFmdGVyIGNoYW5nZSBkZXRlY3Rpb24gaGFzIHJ1biBhbmQgdGhlIG1pY3JvdGFzayBxdWV1ZSBpcyBlbXB0eS4gKi9cbiAgICBmb2N1c0FjdGl2ZUNlbGxBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXRDYWxlbmRhckJvZHkuc2NoZWR1bGVGb2N1c0FjdGl2ZUNlbGxBZnRlclZpZXdDaGVja2VkKCk7XG4gICAgfVxuXG4gICAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGhhcyBhY3RpdmF0ZWQgYSBuZXcgY2VsbCBhbmQgdGhlIHByZXZpZXcgbmVlZHMgdG8gYmUgdXBkYXRlZC4gKi9cbiAgICBwcmV2aWV3Q2hhbmdlZCh7IHZhbHVlOiBjZWxsIH06IENhbGVuZGFyVXNlckV2ZW50TW9kZWw8T3B0aW9uYWxUeXBlPENhbGVuZGFyQ2VsbE1vZGVsPj4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JhbmdlICYmICEodGhpcy5zZWxlY3RlZCBpbnN0YW5jZW9mIERhdGVSYW5nZU1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG5ldyBEYXRlUmFuZ2VNb2RlbCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHdpbGwgYmUgYSByYW5nZSwgYmVjYXVzZSBwcmV2aWV3XG4gICAgICAgIC8vIGV2ZW50cyBhcmVuJ3QgZmlyZWQgZm9yIHNpbmdsZSBkYXRlIHNlbGVjdGlvbnMuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2VsbCA/IGNlbGwucmF3VmFsdWUhIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwcmV2aWV3UmFuZ2UgPSB0aGlzLmNhbGVuZGFyUmFuZ2VTdHJhdGVneS5jcmVhdGVQcmV2aWV3KHZhbHVlLCB0aGlzLnNlbGVjdGVkIGFzIERhdGVSYW5nZU1vZGVsKTtcbiAgICAgICAgdGhpcy5wcmV2aWV3U3RhcnQgPSB0aGlzLmdldENlbGxDb21wYXJlVmFsdWUocHJldmlld1JhbmdlLnN0YXJ0KTtcbiAgICAgICAgdGhpcy5wcmV2aWV3RW5kID0gdGhpcy5nZXRDZWxsQ29tcGFyZVZhbHVlKHByZXZpZXdSYW5nZS5lbmQpO1xuXG4gICAgICAgIGlmICghIXRoaXMuYWN0aXZlRHJhZyAmJiAhIXZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBkcmFnUmFuZ2UgPSB0aGlzLmNhbGVuZGFyUmFuZ2VTdHJhdGVneS5jcmVhdGVEcmFnPy4odGhpcy5hY3RpdmVEcmFnLnZhbHVlLCB0aGlzLnNlbGVjdGVkIGFzIERhdGVSYW5nZU1vZGVsLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICghIWRyYWdSYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld1N0YXJ0ID0gdGhpcy5nZXRDZWxsQ29tcGFyZVZhbHVlKGRyYWdSYW5nZS5zdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3RW5kID0gdGhpcy5nZXRDZWxsQ29tcGFyZVZhbHVlKGRyYWdSYW5nZS5lbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm90ZSB0aGF0IGhlcmUgd2UgbmVlZCB0byB1c2UgYGRldGVjdENoYW5nZXNgLCByYXRoZXIgdGhhbiBgbWFya0ZvckNoZWNrYCwgYmVjYXVzZVxuICAgICAgICAvLyB0aGUgd2F5IGBfZm9jdXNBY3RpdmVDZWxsYCBpcyBzZXQgdXAgYXQgdGhlIG1vbWVudCBtYWtlcyBpdCBmaXJlIGF0IHRoZSB3cm9uZyB0aW1lXG4gICAgICAgIC8vIHdoZW4gbmF2aWdhdGluZyBvbmUgbW9udGggYmFjayB1c2luZyB0aGUga2V5Ym9hcmQgd2hpY2ggd2lsbCBjYXVzZSB0aGlzIGhhbmRsZXJcbiAgICAgICAgLy8gdG8gdGhyb3cgYSBcImNoYW5nZWQgYWZ0ZXIgY2hlY2tlZFwiIGVycm9yIHdoZW4gdXBkYXRpbmcgdGhlIHByZXZpZXcgc3RhdGUuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGhhcyBlbmRlZCBhIGRyYWcuIElmIHRoZSBkcmFnL2Ryb3Agd2FzIHN1Y2Nlc3NmdWwsXG4gICAgICogY29tcHV0ZXMgYW5kIGVtaXRzIHRoZSBuZXcgcmFuZ2Ugc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZHJhZ0VuZGVkKGV2ZW50OiBDYWxlbmRhclVzZXJFdmVudE1vZGVsPE9wdGlvbmFsVHlwZTxEYXRlPj4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURyYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC52YWx1ZSkge1xuICAgICAgICAgICAgLy8gUHJvcGFnYXRlIGRyYWcgZWZmZWN0XG4gICAgICAgICAgICBjb25zdCBkcmFnRHJvcFJlc3VsdCA9IHRoaXMuY2FsZW5kYXJSYW5nZVN0cmF0ZWd5Py5jcmVhdGVEcmFnPy4oXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEcmFnLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgYXMgRGF0ZVJhbmdlTW9kZWwsXG4gICAgICAgICAgICAgICAgZXZlbnQudmFsdWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZHJhZ0VuZGVkLmVtaXQoeyB2YWx1ZTogZHJhZ0Ryb3BSZXN1bHQgPz8gdW5kZWZpbmVkLCBldmVudDogZXZlbnQuZXZlbnQgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdFbmRlZC5lbWl0KHsgdmFsdWU6IHVuZGVmaW5lZCwgZXZlbnQ6IGV2ZW50LmV2ZW50IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVBY3RpdmVEYXRlKHZhbHVlOiBEYXRlLCBpc0Zyb21FZmZlY3QgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9sZEFjdGl2ZURhdGUgPSB0aGlzLm9sZEFjdGl2ZURhdGUgfHwgdmFsdWU7XG4gICAgICAgIGNvbnN0IHZhbGlkRGF0ZSA9IHRoaXMuZGF0ZVNlcnZpY2UuZ2V0VmFsaWRPclVuZGVmaW5lZCh0aGlzLmRhdGVTZXJ2aWNlLmRlc2VyaWFsaXplKHZhbHVlKSkgfHwgbmV3IERhdGUoKTtcblxuICAgICAgICBpZiAoIWlzRnJvbUVmZmVjdCkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNpZ25hbHNTZXJ2aWNlLmFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLmNsYW1wKHZhbGlkRGF0ZSwgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2FtZU1vbnRoQW5kWWVhckFzQWN0aXZlRGF0ZSh0aGlzLm9sZEFjdGl2ZURhdGUsIHRoaXMuY2FsZW5kYXJTaWduYWxzU2VydmljZS5hY3RpdmVEYXRlKCkpKSB7XG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2xkQWN0aXZlRGF0ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuY2FsZW5kYXJTaWduYWxzU2VydmljZS5hY3RpdmVEYXRlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2VzIGEgZGF5IG9mIHRoZSBtb250aCBhbmQgcmV0dXJucyBhIG5ldyBkYXRlIGluIHRoZSBzYW1lIG1vbnRoIGFuZCB5ZWFyIGFzIHRoZSBjdXJyZW50bHlcbiAgICAgKiAgYWN0aXZlIGRhdGUuIFRoZSByZXR1cm5lZCBkYXRlIHdpbGwgaGF2ZSB0aGUgc2FtZSBkYXkgb2YgdGhlIG1vbnRoIGFzIHRoZSBhcmd1bWVudCBkYXRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0ZUZyb21EYXlPZk1vbnRoKGRheU9mTW9udGg6IG51bWJlcik6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlU2VydmljZS5jcmVhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpLCBkYXlPZk1vbnRoKTtcbiAgICB9XG5cbiAgICAvKiogSW5pdGlhbGl6ZXMgdGhlIHdlZWtkYXlzLiAqL1xuICAgIHByaXZhdGUgaW5pdFdlZWtkYXlzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaXJzdERheU9mV2VlayA9IHRoaXMuZmlyc3REYXlPZldlZWs7XG4gICAgICAgIGNvbnN0IG5hcnJvd1dlZWtkYXlzID0gdGhpcy5kYXRlU2VydmljZS5nZXREYXlPZldlZWtOYW1lcygnbmFycm93Jyk7XG4gICAgICAgIGNvbnN0IGxvbmdXZWVrZGF5cyA9IHRoaXMuZGF0ZVNlcnZpY2UuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcbiAgICAgICAgLy8gUm90YXRlIHRoZSBsYWJlbHMgZm9yIGRheXMgb2YgdGhlIHdlZWsgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBjb25zdCB3ZWVrZGF5cyA9IGxvbmdXZWVrZGF5cy5tYXAoKGxvbmcsIGkpID0+ICh7IGxvbmcsIG5hcnJvdzogbmFycm93V2Vla2RheXNbaV0sIGlkOiB1bmlxdWVJZENvdW50ZXIrKyB9KSk7XG4gICAgICAgIHRoaXMud2Vla2RheXMgPSB3ZWVrZGF5cy5zbGljZShmaXJzdERheU9mV2VlaykuY29uY2F0KHdlZWtkYXlzLnNsaWNlKDAsIGZpcnN0RGF5T2ZXZWVrKSk7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZXMgTWF0Q2FsZW5kYXJDZWxscyBmb3IgdGhlIGRhdGVzIGluIHRoaXMgbW9udGguICovXG4gICAgcHJpdmF0ZSBjcmVhdGVXZWVrQ2VsbHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGhpcy5kYXRlU2VydmljZS5nZXROdW1EYXlzSW5Nb250aCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICBjb25zdCBkYXRlTmFtZXMgPSB0aGlzLmRhdGVTZXJ2aWNlLmdldERhdGVOYW1lcygpO1xuICAgICAgICB0aGlzLndlZWtzID0gW1tdXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgY2VsbCA9IHRoaXMuZmlyc3RXZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICAgICAgICBpZiAoY2VsbCA9PT0gZGF5c1BlcldlZWspIHtcbiAgICAgICAgICAgICAgICB0aGlzLndlZWtzLnB1c2goW10pO1xuICAgICAgICAgICAgICAgIGNlbGwgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlU2VydmljZS5jcmVhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpLCBpICsgMSk7XG4gICAgICAgICAgICBjb25zdCBpc0VuYWJsZWQgPSB0aGlzLnNob3VsZEVuYWJsZURhdGUoZGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLmRhdGVTZXJ2aWNlLmZvcm1hdChkYXRlLCB7IHllYXI6ICdudW1lcmljJywgbW9udGg6ICdsb25nJywgZGF5OiAnbnVtZXJpYycgfSk7XG4gICAgICAgICAgICBjb25zdCBjZWxsQ2xhc3NlcyA9IHRoaXMuZGF0ZUNsYXNzID8gdGhpcy5kYXRlQ2xhc3MoZGF0ZSwgJ21vbnRoJykgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIHRoaXMud2Vla3NbdGhpcy53ZWVrcy5sZW5ndGggLSAxXS5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBDYWxlbmRhckNlbGxNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgaSArIDEsXG4gICAgICAgICAgICAgICAgICAgIGRhdGVOYW1lc1tpXSxcbiAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBpc0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgIGNlbGxDbGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENlbGxDb21wYXJlVmFsdWUoZGF0ZSkhLFxuICAgICAgICAgICAgICAgICAgICBkYXRlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEYXRlIGZpbHRlciBmb3IgdGhlIG1vbnRoICovXG4gICAgcHJpdmF0ZSBzaG91bGRFbmFibGVEYXRlKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhZGF0ZSAmJlxuICAgICAgICAgICAgKCF0aGlzLm1pbkRhdGUgfHwgdGhpcy5kYXRlU2VydmljZS5jb21wYXJlKGRhdGUsIHRoaXMubWluRGF0ZSkgPj0gMCkgJiZcbiAgICAgICAgICAgICghdGhpcy5tYXhEYXRlIHx8IHRoaXMuZGF0ZVNlcnZpY2UuY29tcGFyZShkYXRlLCB0aGlzLm1heERhdGUpIDw9IDApICYmXG4gICAgICAgICAgICAoIXRoaXMuZGF0ZUZpbHRlciB8fCB0aGlzLmRhdGVGaWx0ZXIoZGF0ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRhdGUgaW4gdGhpcyBtb250aCB0aGF0IHRoZSBnaXZlbiBEYXRlIGZhbGxzIG9uLlxuICAgICAqIFJldHVybnMgbnVsbCBpZiB0aGUgZ2l2ZW4gRGF0ZSBpcyBpbiBhbm90aGVyIG1vbnRoLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0ZUluQ3VycmVudE1vbnRoKGRhdGU/OiBEYXRlKTogT3B0aW9uYWxUeXBlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gISFkYXRlICYmIHRoaXMuaXNTYW1lTW9udGhBbmRZZWFyQXNBY3RpdmVEYXRlKGRhdGUsIHRoaXMuY2FsZW5kYXJTaWduYWxzU2VydmljZS5hY3RpdmVEYXRlKCkpXG4gICAgICAgICAgICA/IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIDIgZGF0ZXMgYXJlIG5vbi1udWxsIGFuZCBmYWxsIHdpdGhpbiB0aGUgc2FtZSBtb250aCBvZiB0aGUgc2FtZSB5ZWFyLiAqL1xuICAgIHByaXZhdGUgaXNTYW1lTW9udGhBbmRZZWFyQXNBY3RpdmVEYXRlKGQxPzogRGF0ZSwgZDI/OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoISFkMSAmJiAhIWQyICYmIGQxLmdldE1vbnRoKCkgPT09IGQyLmdldE1vbnRoKCkgJiYgZDEuZ2V0RnVsbFllYXIoKSA9PT0gZDIuZ2V0RnVsbFllYXIoKSk7XG4gICAgfVxuXG4gICAgLyoqIEdldHMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIG9uZSBjZWxsIHRvIGFub3RoZXIuICovXG4gICAgcHJpdmF0ZSBnZXRDZWxsQ29tcGFyZVZhbHVlKGRhdGU/OiBEYXRlKTogT3B0aW9uYWxUeXBlPG51bWJlcj4ge1xuICAgICAgICBpZiAoISFkYXRlKSB7XG4gICAgICAgICAgICAvLyBXZSB1c2UgdGhlIHRpbWUgc2luY2UgdGhlIFVuaXggZXBvY2ggdG8gY29tcGFyZSBkYXRlcyBpbiB0aGlzIHZpZXcsIHJhdGhlciB0aGFuIHRoZVxuICAgICAgICAgICAgLy8gY2VsbCB2YWx1ZXMsIGJlY2F1c2Ugd2UgbmVlZCB0byBzdXBwb3J0IHJhbmdlcyB0aGF0IHNwYW4gYWNyb3NzIG11bHRpcGxlIG1vbnRocy95ZWFycy5cbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSkuZ2V0VGltZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogU2V0cyB0aGUgY3VycmVudCByYW5nZSBiYXNlZCBvbiBhIG1vZGVsIHZhbHVlLiAqL1xuICAgIHByaXZhdGUgc2V0UmFuZ2VzKHNlbGVjdGVkVmFsdWU6IERhdGVSYW5nZU1vZGVsIHwgT3B0aW9uYWxUeXBlPERhdGU+KTogdm9pZCB7XG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlIGluc3RhbmNlb2YgRGF0ZVJhbmdlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdGFydCA9IHRoaXMuZ2V0Q2VsbENvbXBhcmVWYWx1ZShzZWxlY3RlZFZhbHVlLnN0YXJ0KTtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VFbmQgPSB0aGlzLmdldENlbGxDb21wYXJlVmFsdWUoc2VsZWN0ZWRWYWx1ZS5lbmQpO1xuICAgICAgICAgICAgdGhpcy5pc1JhbmdlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdGFydCA9IHRoaXMucmFuZ2VFbmQgPSB0aGlzLmdldENlbGxDb21wYXJlVmFsdWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXBhcmlzb25SYW5nZVN0YXJ0ID0gdGhpcy5nZXRDZWxsQ29tcGFyZVZhbHVlKHRoaXMuY29tcGFyaXNvblN0YXJ0KTtcbiAgICAgICAgdGhpcy5jb21wYXJpc29uUmFuZ2VFbmQgPSB0aGlzLmdldENlbGxDb21wYXJlVmFsdWUodGhpcy5jb21wYXJpc29uRW5kKTtcbiAgICB9XG5cbiAgICAvKiogR2V0cyB3aGV0aGVyIGEgZGF0ZSBjYW4gYmUgc2VsZWN0ZWQgaW4gdGhlIG1vbnRoIHZpZXcuICovXG4gICAgcHJpdmF0ZSBjYW5TZWxlY3QoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGF0ZUZpbHRlciB8fCB0aGlzLmRhdGVGaWx0ZXIoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyBvdXQgcHJldmlldyBzdGF0ZS4gKi9cbiAgICBwcml2YXRlIGNsZWFyUHJldmlldygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcmV2aWV3U3RhcnQgPSB0aGlzLnByZXZpZXdFbmQgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiPHVwZC1jYWxlbmRhci1oZWFkZXI+PC91cGQtY2FsZW5kYXItaGVhZGVyPlxuPGRpdiBjbGFzcz1cImNvbnRhaW5lciBtdC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBzZXZlbi1jb2xzXCI+XG4gICAgICAgIEBmb3IgKGRheSBvZiB3ZWVrZGF5czsgdHJhY2sgZGF5LmlkKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEgcC0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3sgZGF5LmxvbmcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3sgZGF5Lm5hcnJvdyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L2Rpdj5cbjx1cGQtY2FsZW5kYXItYm9keSBbbGFiZWxdPVwibW9udGhMYWJlbFwiIFtyb3dzXT1cIndlZWtzXCIgW3RvZGF5VmFsdWVdPVwidG9kYXlEYXRlIVwiIFtzdGFydFZhbHVlXT1cInJhbmdlU3RhcnQhXCJcbiAgICBbZW5kVmFsdWVdPVwicmFuZ2VFbmQhXCIgW2NvbXBhcmlzb25TdGFydF09XCJjb21wYXJpc29uUmFuZ2VTdGFydFwiIFtjb21wYXJpc29uRW5kXT1cImNvbXBhcmlzb25SYW5nZUVuZFwiXG4gICAgW3ByZXZpZXdTdGFydF09XCJwcmV2aWV3U3RhcnRcIiBbcHJldmlld0VuZF09XCJwcmV2aWV3RW5kXCIgW2lzUmFuZ2VdPVwiaXNSYW5nZVwiIFtsYWJlbE1pblJlcXVpcmVkQ2VsbHNdPVwiM1wiXG4gICAgW2FjdGl2ZUNlbGxdPVwiYWN0aXZlRGF0ZS5nZXREYXRlKCkgLSAxXCIgW3N0YXJ0RGF0ZUFjY2Vzc2libGVOYW1lXT1cInN0YXJ0RGF0ZUFjY2Vzc2libGVOYW1lXCJcbiAgICBbZW5kRGF0ZUFjY2Vzc2libGVOYW1lXT1cImVuZERhdGVBY2Nlc3NpYmxlTmFtZVwiIChzZWxlY3RlZFZhbHVlQ2hhbmdlKT1cImRhdGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAocHJldmlld0NoYW5nZSk9XCJwcmV2aWV3Q2hhbmdlZCgkZXZlbnQpXCIgKGRyYWdTdGFydGVkKT1cImRyYWdTdGFydGVkLmVtaXQoJGV2ZW50KVwiIChkcmFnRW5kZWQpPVwiX2RyYWdFbmRlZCgkZXZlbnQpXCJcbiAgICAoa2V5dXApPVwiaGFuZGxlQ2FsZW5kYXJCb2R5S2V5dXAoJGV2ZW50KVwiIChrZXlkb3duKT1cImhhbmRsZUNhbGVuZGFyQm9keUtleWRvd24oJGV2ZW50KVwiPlxuPC91cGQtY2FsZW5kYXItYm9keT5cbiJdfQ==
|
package/esm2022/calendar/components/calendar-multi-year-view/calendar-multi-year-view.component.mjs
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export const yearsPerPage = 24;
|
|
4
|
+
export class CalendarMultiYearViewComponent {
|
|
5
|
+
/** Initializes this month view. */
|
|
6
|
+
init() {
|
|
7
|
+
}
|
|
8
|
+
/** Focuses the active cell after the microtask queue is empty. */
|
|
9
|
+
focusActiveCell(movePreview) {
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CalendarMultiYearViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: CalendarMultiYearViewComponent, selector: "upd-calendar-multi-year-view", ngImport: i0, template: "<p>calendar-multi-year-view works!</p>\n", styles: [""] }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CalendarMultiYearViewComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{ selector: 'upd-calendar-multi-year-view', template: "<p>calendar-multi-year-view works!</p>\n" }]
|
|
17
|
+
}] });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvY29tcG9uZW50cy9jYWxlbmRhci1tdWx0aS15ZWFyLXZpZXcvY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvY29tcG9uZW50cy9jYWxlbmRhci1tdWx0aS15ZWFyLXZpZXcvY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTFDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7QUFPL0IsTUFBTSxPQUFPLDhCQUE4QjtJQUN2QyxtQ0FBbUM7SUFDbkMsSUFBSTtJQUVKLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsZUFBZSxDQUFDLFdBQXFCO0lBQ3JDLENBQUM7OEdBUlEsOEJBQThCO2tHQUE5Qiw4QkFBOEIsb0VDVDNDLDBDQUNBOzsyRkRRYSw4QkFBOEI7a0JBTDFDLFNBQVM7K0JBQ0ksOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCB5ZWFyc1BlclBhZ2UgPSAyNDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1cGQtY2FsZW5kYXItbXVsdGkteWVhci12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY2FsZW5kYXItbXVsdGkteWVhci12aWV3LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhck11bHRpWWVhclZpZXdDb21wb25lbnQge1xuICAgIC8qKiBJbml0aWFsaXplcyB0aGlzIG1vbnRoIHZpZXcuICovXG4gICAgaW5pdCgpOiB2b2lkIHtcblxuICAgIH1cblxuICAgIC8qKiBGb2N1c2VzIHRoZSBhY3RpdmUgY2VsbCBhZnRlciB0aGUgbWljcm90YXNrIHF1ZXVlIGlzIGVtcHR5LiAqL1xuICAgIGZvY3VzQWN0aXZlQ2VsbChtb3ZlUHJldmlldz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB9XG59XG4iLCI8cD5jYWxlbmRhci1tdWx0aS15ZWFyLXZpZXcgd29ya3MhPC9wPlxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CalendarYearViewComponent {
|
|
4
|
+
/** Initializes this month view. */
|
|
5
|
+
init() {
|
|
6
|
+
}
|
|
7
|
+
/** Focuses the active cell after the microtask queue is empty. */
|
|
8
|
+
focusActiveCell(movePreview) {
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CalendarYearViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: CalendarYearViewComponent, selector: "upd-calendar-year-view", ngImport: i0, template: "<p>calendar-year-view works!</p>\n", styles: [""] }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: CalendarYearViewComponent, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'upd-calendar-year-view', template: "<p>calendar-year-view works!</p>\n" }]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvY29tcG9uZW50cy9jYWxlbmRhci15ZWFyLXZpZXcvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvY29tcG9uZW50cy9jYWxlbmRhci15ZWFyLXZpZXcvY2FsZW5kYXIteWVhci12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzFDLE1BQU0sT0FBTyx5QkFBeUI7SUFDbEMsbUNBQW1DO0lBQ25DLElBQUk7SUFFSixDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLGVBQWUsQ0FBQyxXQUFxQjtJQUNyQyxDQUFDOzhHQVJRLHlCQUF5QjtrR0FBekIseUJBQXlCLDhEQ1B0QyxvQ0FDQTs7MkZETWEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNJLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1jYWxlbmRhci15ZWFyLXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYWxlbmRhci15ZWFyLXZpZXcuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyWWVhclZpZXdDb21wb25lbnQge1xuICAgIC8qKiBJbml0aWFsaXplcyB0aGlzIG1vbnRoIHZpZXcuICovXG4gICAgaW5pdCgpOiB2b2lkIHtcblxuICAgIH1cblxuICAgIC8qKiBGb2N1c2VzIHRoZSBhY3RpdmUgY2VsbCBhZnRlciB0aGUgbWljcm90YXNrIHF1ZXVlIGlzIGVtcHR5LiAqL1xuICAgIGZvY3VzQWN0aXZlQ2VsbChtb3ZlUHJldmlldz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB9XG59XG4iLCI8cD5jYWxlbmRhci15ZWFyLXZpZXcgd29ya3MhPC9wPlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './public-api';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY2FsZW5kYXIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
let uniqueIdCounter = 0;
|
|
2
|
+
/**
|
|
3
|
+
* An internal class that represents the data corresponding to a single calendar cell.
|
|
4
|
+
* @docs-private
|
|
5
|
+
*/
|
|
6
|
+
export class CalendarCellModel {
|
|
7
|
+
constructor(value, displayValue, ariaLabel, isEnabled, cssClasses = {}, compareValue = value, rawValue) {
|
|
8
|
+
this.value = value;
|
|
9
|
+
this.displayValue = displayValue;
|
|
10
|
+
this.ariaLabel = ariaLabel;
|
|
11
|
+
this.isEnabled = isEnabled;
|
|
12
|
+
this.cssClasses = cssClasses;
|
|
13
|
+
this.compareValue = compareValue;
|
|
14
|
+
this.rawValue = rawValue;
|
|
15
|
+
this.id = uniqueIdCounter++;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItY2VsbC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvbW9kZWxzL2NhbGVuZGFyLWNlbGwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRXhCOzs7R0FHRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFHMUIsWUFDVyxLQUFhLEVBQ2IsWUFBb0IsRUFDcEIsU0FBaUIsRUFDakIsU0FBa0IsRUFDbEIsYUFBeUMsRUFBRSxFQUMzQyxlQUFlLEtBQUssRUFDcEIsUUFBZTtRQU5mLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFDbEIsZUFBVSxHQUFWLFVBQVUsQ0FBaUM7UUFDM0MsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBTztRQVRqQixPQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFXaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FsZW5kYXJDZWxsQ3NzQ2xhc3Nlc1R5cGUgfSBmcm9tICcuLi90eXBlcy9jYWxlbmRhci1jZWxsLWNzcy1jbGFzc2VzLnR5cGUnO1xuXG5sZXQgdW5pcXVlSWRDb3VudGVyID0gMDtcblxuLyoqXG4gKiBBbiBpbnRlcm5hbCBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGEgY29ycmVzcG9uZGluZyB0byBhIHNpbmdsZSBjYWxlbmRhciBjZWxsLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDZWxsTW9kZWwge1xuICAgIHJlYWRvbmx5IGlkID0gdW5pcXVlSWRDb3VudGVyKys7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHZhbHVlOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBkaXNwbGF5VmFsdWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGFyaWFMYWJlbDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgaXNFbmFibGVkOiBib29sZWFuLFxuICAgICAgICBwdWJsaWMgY3NzQ2xhc3NlczogQ2FsZW5kYXJDZWxsQ3NzQ2xhc3Nlc1R5cGUgPSB7fSxcbiAgICAgICAgcHVibGljIGNvbXBhcmVWYWx1ZSA9IHZhbHVlLFxuICAgICAgICBwdWJsaWMgcmF3VmFsdWU/OiBEYXRlXG4gICAgKSB7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItdXNlci1ldmVudC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvbW9kZWxzL2NhbGVuZGFyLXVzZXItZXZlbnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJVc2VyRXZlbnRNb2RlbDxUVmFsdWU+IHtcbiAgICB2YWx1ZTogVFZhbHVlO1xuICAgIGV2ZW50OiBFdmVudDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A class representing a range of dates.
|
|
3
|
+
*/
|
|
4
|
+
export class DateRangeModel {
|
|
5
|
+
constructor(
|
|
6
|
+
/**
|
|
7
|
+
* The start date of the range.
|
|
8
|
+
*/
|
|
9
|
+
start,
|
|
10
|
+
/**
|
|
11
|
+
* The end date of the range.
|
|
12
|
+
*/
|
|
13
|
+
end) {
|
|
14
|
+
this.start = start;
|
|
15
|
+
this.end = end;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jYWxlbmRhci9zcmMvbW9kZWxzL2RhdGUtcmFuZ2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQU92QjtJQUNJOztPQUVHO0lBQ00sS0FBWTtJQUNyQjs7T0FFRztJQUNNLEdBQVU7UUFKVixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBSVosUUFBRyxHQUFILEdBQUcsQ0FBTztJQUV2QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgY2xhc3MgcmVwcmVzZW50aW5nIGEgcmFuZ2Ugb2YgZGF0ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VNb2RlbCB7XG4gICAgLyoqXG4gICAgICogRW5zdXJlcyB0aGF0IG9iamVjdHMgd2l0aCBhIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnR5IGNhbid0IGJlIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUgdGhhdFxuICAgICAqIGV4cGVjdHMgYSBgRGF0ZVJhbmdlYFxuICAgICAqLy8vIEB0cy1pZ25vcmVcbiAgICBwcml2YXRlIGRpc2FibGVTdHJ1Y3R1cmFsRXF1aXZhbGVuY3k6IG5ldmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2UuXG4gICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBzdGFydD86IERhdGUsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZW5kIGRhdGUgb2YgdGhlIHJhbmdlLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgZW5kPzogRGF0ZVxuICAgICkge1xuICAgIH1cbn1cbiJdfQ==
|